All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.scripts.vendor.plugins.forms.jquery.maskedinput.min.js Maven / Gradle / Ivy

Go to download

Pluggable data management solution for Java web applications developed in a "Rapid" manner

There is a newer version: 1.2.0.RC1
Show newest version
/*
 Masked Input plugin for jQuery
 Copyright (c) 2007-2011 Josh Bush (digitalbush.com)
 Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
 Version: 1.3
 */
(function ( $ ) {
	var pasteEventName = ($.browser.msie ? 'paste' : 'input') + ".mask";
	var iPhone = (window.orientation != undefined);

	$.mask = {
		//Predefined character definitions
		definitions: {
			'9': "[0-9]",
			'a': "[A-Za-z]",
			'*': "[A-Za-z0-9]"
		},
		dataName: "rawMaskFn"
	};

	$.fn.extend( {
					 //Helper Function for Caret positioning
					 caret: function ( begin, end ) {
						 if ( this.length == 0 ) {
							 return;
						 }
						 if ( typeof begin == 'number' ) {
							 end = (typeof end == 'number') ? end : begin;
							 return this.each( function () {
								 if ( this.setSelectionRange ) {
									 this.setSelectionRange( begin, end );
								 } else if ( this.createTextRange ) {
									 var range = this.createTextRange();
									 range.collapse( true );
									 range.moveEnd( 'character', end );
									 range.moveStart( 'character', begin );
									 range.select();
								 }
							 } );
						 } else {
							 if ( this[0].setSelectionRange ) {
								 begin = this[0].selectionStart;
								 end = this[0].selectionEnd;
							 } else if ( document.selection && document.selection.createRange ) {
								 var range = document.selection.createRange();
								 begin = 0 - range.duplicate().moveStart( 'character', -100000 );
								 end = begin + range.text.length;
							 }
							 return { begin: begin, end: end };
						 }
					 },
					 unmask: function () {
						 return this.trigger( "unmask" );
					 },
					 mask: function ( mask, settings ) {
						 if ( !mask && this.length > 0 ) {
							 var input = $( this[0] );
							 return input.data( $.mask.dataName )();
						 }
						 settings = $.extend( {
												  placeholder: "_",
												  completed: null
											  }, settings );

						 var defs = $.mask.definitions;
						 var tests = [];
						 var partialPosition = mask.length;
						 var firstNonMaskPos = null;
						 var len = mask.length;

						 $.each( mask.split( "" ), function ( i, c ) {
							 if ( c == '?' ) {
								 len--;
								 partialPosition = i;
							 } else if ( defs[c] ) {
								 tests.push( new RegExp( defs[c] ) );
								 if ( firstNonMaskPos == null ) {
									 firstNonMaskPos = tests.length - 1;
								 }
							 } else {
								 tests.push( null );
							 }
						 } );

						 return this.trigger( "unmask" ).each( function () {
							 var input = $( this );
							 var buffer = $.map( mask.split( "" ), function ( c, i ) {
								 if ( c != '?' ) {
									 return defs[c] ? settings.placeholder : c
								 }
							 } );
							 var focusText = input.val();

							 function seekNext( pos ) {
								 while ( ++pos <= len && !tests[pos] ) {
									 ;
								 }
								 return pos;
							 };
							 function seekPrev( pos ) {
								 while ( --pos >= 0 && !tests[pos] ) {
									 ;
								 }
								 return pos;
							 };

							 function shiftL( begin, end ) {
								 if ( begin < 0 ) {
									 return;
								 }
								 for ( var i = begin, j = seekNext( end ); i < len; i++ ) {
									 if ( tests[i] ) {
										 if ( j < len && tests[i].test( buffer[j] ) ) {
											 buffer[i] = buffer[j];
											 buffer[j] = settings.placeholder;
										 } else {
											 break;
										 }
										 j = seekNext( j );
									 }
								 }
								 writeBuffer();
								 input.caret( Math.max( firstNonMaskPos, begin ) );
							 };

							 function shiftR( pos ) {
								 for ( var i = pos, c = settings.placeholder; i < len; i++ ) {
									 if ( tests[i] ) {
										 var j = seekNext( i );
										 var t = buffer[i];
										 buffer[i] = c;
										 if ( j < len && tests[j].test( t ) ) {
											 c = t;
										 } else {
											 break;
										 }
									 }
								 }
							 };

							 function keydownEvent( e ) {
								 var k = e.which;

								 //backspace, delete, and escape get special treatment
								 if ( k == 8 || k == 46 || (iPhone && k == 127) ) {
									 var pos = input.caret(), begin = pos.begin, end = pos.end;

									 if ( end - begin == 0 ) {
										 begin = k != 46 ? seekPrev( begin ) : (end = seekNext( begin - 1 ));
										 end = k == 46 ? seekNext( end ) : end;
									 }
									 clearBuffer( begin, end );
									 shiftL( begin, end - 1 );

									 return false;
								 } else if ( k == 27 ) {//escape
									 input.val( focusText );
									 input.caret( 0, checkVal() );
									 return false;
								 }
							 };

							 function keypressEvent( e ) {
								 var k = e.which, pos = input.caret();
								 if ( e.ctrlKey || e.altKey || e.metaKey || k < 32 ) {//Ignore
									 return true;
								 } else if ( k ) {
									 if ( pos.end - pos.begin != 0 ) {
										 clearBuffer( pos.begin, pos.end );
										 shiftL( pos.begin, pos.end - 1 );
									 }

									 var p = seekNext( pos.begin - 1 );
									 if ( p < len ) {
										 var c = String.fromCharCode( k );
										 if ( tests[p].test( c ) ) {
											 shiftR( p );
											 buffer[p] = c;
											 writeBuffer();
											 var next = seekNext( p );
											 input.caret( next );
											 if ( settings.completed && next >= len ) {
												 settings.completed.call( input );
											 }
										 }
									 }
									 return false;
								 }
							 };

							 function clearBuffer( start, end ) {
								 for ( var i = start; i < end && i < len; i++ ) {
									 if ( tests[i] ) {
										 buffer[i] = settings.placeholder;
									 }
								 }
							 };

							 function writeBuffer() {
								 return input.val( buffer.join( '' ) ).val();
							 };

							 function checkVal( allow ) {
								 //try to place characters where they belong
								 var test = input.val();
								 var lastMatch = -1;
								 for ( var i = 0, pos = 0; i < len; i++ ) {
									 if ( tests[i] ) {
										 buffer[i] = settings.placeholder;
										 while ( pos++ < test.length ) {
											 var c = test.charAt( pos - 1 );
											 if ( tests[i].test( c ) ) {
												 buffer[i] = c;
												 lastMatch = i;
												 break;
											 }
										 }
										 if ( pos > test.length ) {
											 break;
										 }
									 } else if ( buffer[i] == test.charAt( pos ) && i != partialPosition ) {
										 pos++;
										 lastMatch = i;
									 }
								 }
								 if ( !allow && lastMatch + 1 < partialPosition ) {
									 input.val( "" );
									 clearBuffer( 0, len );
								 } else if ( allow || lastMatch + 1 >= partialPosition ) {
									 writeBuffer();
									 if ( !allow ) {
										 input.val( input.val().substring( 0, lastMatch + 1 ) );
									 }
								 }
								 return (partialPosition ? i : firstNonMaskPos);
							 };

							 input.data( $.mask.dataName, function () {
								 return $.map( buffer,function ( c, i ) {
									 return tests[i] && c != settings.placeholder ? c : null;
								 } ).join( '' );
							 } )

							 if ( !input.attr( "readonly" ) ) {
								 input.one( "unmask",function () {
									 input.unbind( ".mask" ).removeData( $.mask.dataName );
								 } ).bind( "focus.mask",function () {
											   focusText = input.val();
											   var pos = checkVal();
											   writeBuffer();
											   var moveCaret = function () {
												   if ( pos == mask.length ) {
													   input.caret( 0, pos );
												   } else {
													   input.caret( pos );
												   }
											   };
											   ($.browser.msie ? moveCaret : function () {
												   setTimeout( moveCaret, 0 )
											   })();
										   } ).bind( "blur.mask",function () {
														 checkVal();
														 if ( input.val() != focusText ) {
															 input.change();
														 }
													 } ).bind( "keydown.mask", keydownEvent ).bind( "keypress.mask", keypressEvent ).bind( pasteEventName, function () {
																																			   setTimeout( function () {
																																				   input.caret( checkVal( true ) );
																																			   }, 0 );
																																		   } );
							 }

							 checkVal(); //Perform initial check for existing values
						 } );
					 }
				 } );
})( jQuery );




© 2015 - 2024 Weber Informatics LLC | Privacy Policy