0xV3NOMx
Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64



Your IP : 3.144.224.105


Current Path : /var/www/results/acu/js/mask/
Upload File :
Current File : /var/www/results/acu/js/mask/ui.mask.js

/*
 * jQuery UI Mask @VERSION
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Based on the jquery.maskedinput.js plugin by Josh Bush (digitalbush.com)
 *
 * http://docs.jquery.com/UI/Mask
 *
 * Depends:
 *   ui.core.js
 */
(function($) {

var pasteEventName = ($.browser.msie ? 'paste' : 'input') + ".mask";

$.widget("ui.mask", {
	
	_init: function() {

		var options = this.options, self = this;

		$.extend(this, { caret: function(begin, end){ return $.ui.mask.caret(self.element, begin, end); } });

		if(!options.mask || !options.mask.length){ return; } //no mask pattern defined. no point in continuing.
		if(!options.placeholder || !options.placeholder.length){
			options.placeholder = '_'; //in case the user decided to nix a placeholder. 
		}

		this._prepareBuffer();
		this._bindEvents();
		this._checkVal((this.element.val().length && options.allowPartials)); //Perform initial check for existing values
	},

	destroy: function() {
		this.element
			.unbind('.mask')
			.removeData('mask');
	},

	value: function() {
		var input = this.element,
			self = this,
			res = $.map(self.buffer, function(c, i){ return self.tests[i] ? c : null; }).join(''),
			r = new RegExp('\\'+this.options.placeholder, 'gi');
		return res.replace(r, '');
	},
	
	formatted: function(){
		var r = new RegExp('\\'+this.options.placeholder, 'gi'),
			res = this.element.val();
		return res.replace(r, '');
	},
	
	apply: function(){
		this.element.trigger('apply.mask');
	},
	
	_setData: function(key, value) {

		$.widget.prototype._setData.apply(this, arguments);
		var options = this.options;

		switch (key) {
			case 'mask':
				//no mask pattern defined. no point in continuing.
				if(!options.mask || !options.mask.length){ 
					this.element.unbind('.mask')
					break;
				}
			case 'placeholder':
				if(!options.placeholder || !options.placeholder.length){
					options.placeholder = '_'; //in case the user decided to nix a placeholder.
				}
				this.element.val('');
				this._prepareBuffer();
				!this.eventsBound && this._bindEvents();
				break;
		}

	},

	_prepareBuffer: function(){
		
		this._escapeMask();

		var self = this, 
			input = this.element,
			options = this.options,
			mask = options.mask,
			defs = $.ui.mask.definitions,
			tests = [],
			partialPosition = mask.length,
			firstNonMaskPos = null,
			len = mask.length;

		//if we're applying the mask to an element which is not an input, it won't have a val() method. fake one for our purposes.
		if(!input.is(':input')) input.val = input.html;

		$.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);
			}
		});

		$.extend(this, {
			buffer: $.map(mask.split(""), function(c, i){
				if (c != '?'){
					return defs[c] ? options.placeholder : c;
				}
			}),
			tests: tests,
			firstNonMaskPos: firstNonMaskPos,
			partialPosition: partialPosition
		});

		this.buffer = $.map(this.buffer, function(c, i){
			if(c == "\t"){
				return self.maskEscaped[i];
			}
			return c;
		});

		this.options.mask = mask = this.maskEscaped;		
	},	

	_bindEvents: function(){
		
		var self = this,
			input = this.element,
			ignore = false,  			//Variable for ignoring control keys
			focusText = input.val();
			
		function keydownEvent(e) {
			e = e || window.event;
			var pos = self.caret(),
				k = e.keyCode,
				keyCode = $.ui.keyCode;
				
			ignore = (k < keyCode.SHIFT || (k > keyCode.SHIFT && k < keyCode.SPACE) || (k > keyCode.SPACE && k < 41));

			//delete selection before proceeding
			if ((pos.begin - pos.end) != 0 && (!ignore || k == keyCode.BACKSPACE || k == keyCode.DELETE))
				self._clearBuffer(pos.begin, pos.end);

			//backspace, delete, and escape get special treatment
			if (k == keyCode.BACKSPACE || k == keyCode.DELETE) {//backspace/delete
				self._shiftL(pos.begin + ((k == keyCode.DELETE || (k == keyCode.BACKSPACE && pos.begin!=pos.end))  ? 0 : -1), Math.abs(pos.begin - pos.end));
				return false;
			}
			else if (k == keyCode.ESCAPE) {//escape
				input.val(focusText);
				self.caret(0, self._checkVal());
				return false;
			}
		};

		function keypressEvent(e) {

			e = e || window.event;
			
			var k = e.charCode || e.keyCode || e.which, 
				keyCode = $.ui.keyCode,
				len = self.options.mask.length;

			if (ignore) {
				ignore = false;
				//Fixes Mac FF bug on backspace
				return (e.keyCode == keyCode.BACKSPACE) ? false : null;
			}
			
			var pos = self.caret();

			if (e.ctrlKey || e.altKey || e.metaKey) {//Ignore
				return true;
			}
			else if ((k >= keyCode.SPACE && k <= 125) || k > 186) {//typeable characters
				var p = self._seekNext(pos.begin - 1);
				if (p < len) {
					var c = String.fromCharCode(k);
					if (self.tests[p] && self.tests[p].test(c)) {
						self._shiftR(p);
						self.buffer[p] = c;
						self._writeBuffer();
						var next = self._seekNext(p);
						self.caret(next);
						self.options.completed && next == len && self.options.completed.call(input);
					}
				}
			}
			return false;
		};

		if (!input.attr("readonly")){
			input
				.bind("focus.mask", function() {
					focusText = input.val();
					var pos = self._checkVal();
					self._writeBuffer();
					setTimeout(function() {
						if (pos == self.options.mask.length)
							self.caret(0, pos);
						else
							self.caret(pos);
					}, 0);
				})
				.bind("blur.mask", function() {
					self._checkVal();
					if (input.val() != focusText)
						input.change();
				})
				.bind('apply.mask', function(){ //changing the value of an input without keyboard input requires re-applying the mask.
					focusText = input.val();
					var pos = self._checkVal();
					self._writeBuffer();					
				})				
				.bind("keydown.mask", keydownEvent)
				.bind("keypress.mask", keypressEvent)
				.bind(pasteEventName, function() {
					setTimeout(function() { self.caret(self._checkVal(true)); }, 0);
				});
			this.eventsBound = true;
		}
	},
	
	_writeBuffer: function(){
		return this.element.val(this.buffer.join('')).val(); 
	},
	
	_clearBuffer: function(start, end){
		var len = this.options.mask.length;
		for (var i = start; i < end && i < len; i++) {
			if (this.tests[i])
				this.buffer[i] = this.options.placeholder;
		}
	},
	
	_seekNext: function(pos){
		var len = this.options.mask.length;
		while (++pos <= len && !this.tests[pos]);
		return pos;
	},
	
	_shiftR: function(pos){
		var len = this.options.mask.length;
		for (var i = pos, c = this.options.placeholder; i < len; i++) {
			if (this.tests[i]) {
				var j = this._seekNext(i);
				var t = this.buffer[i];
				this.buffer[i] = c;
				if (j < len && this.tests[j].test(t)){
					c = t;
				}
				else{
					break;
				}
			}
		}
	},
	
	_shiftL: function(pos, length){

		while (!this.tests[pos] && --pos >= 0);
	
		var originalPos = pos,
			len = this.options.mask.length,
			placeholder = this.options.placeholder;
		
		for(var i = pos; i < len && (i >= 0 || length > 1); i++) {
			if (this.tests[i]) {
				this.buffer[i] = placeholder;
				var j = this._seekNext(i);
				if (j < len && this.tests[i].test(this.buffer[j])) {
					this.buffer[pos] = this.buffer[j];
					this.buffer[j] = placeholder;
					pos++;
					while(!this.tests[pos]) pos++;
				}
			}
		}			
		this._writeBuffer();
		this.caret(Math.max(this.firstNonMaskPos, originalPos));
	},
	
	_checkVal: function(allow){
		//try to place characters where they belong
		var input = this.element,
			test = input.val(),
			len = this.options.mask.length,
			lastMatch = -1;
			
		for (var i = 0, pos = 0; i < len; i++) {
			if (this.tests[i]) {
				this.buffer[i] = this.options.placeholder;
				while (pos++ < test.length) {
					var c = test.charAt(pos - 1);
					if (this.tests[i].test(c)) {
						this.buffer[i] = c;
						lastMatch = i;
						break;
					}
				}
				if (pos > test.length)
					break;
			}
			else if (this.buffer[i] == test[pos] && i != this.partialPosition) {
				pos++;
				lastMatch = i;
			} 
		}
		if (!allow && lastMatch + 1 < this.partialPosition) {
			if(!this.options.allowPartials || !this.value().length){
				input.val("");
				this._clearBuffer(0, len);
			}
			else //if we're allowing partial input/inital values, and the element we're masking isnt an input, then we need to allow the mask to apply.
				if(!input.is(':input')) this._writeBuffer();
				
		}
		else if (allow || lastMatch + 1 >= this.partialPosition) {
			this._writeBuffer();
			if (!allow) input.val(input.val().substring(0, lastMatch + 1));
		}
		return (this.partialPosition ? i : this.firstNonMaskPos);
	},
	
	_escapeMask: function(){
		var mask = this.options.mask,
			literals = [],
			replacements = [];
				
		for(var i = 0; i < mask.length; i++){
			var c, temp = mask[i] || mask.charAt(i);
			if(temp != "\\" || mask[i-1] == "\\"){
				if(mask[i-1] == "\\"){
					c = "\t";
					replacements[literals.length] = temp;
				}
				else{
					c = temp;
				}
				literals[literals.length] = c;
			}
		}
		
		this.options.mask = literals.join('');
		
		for(var i = 0; i < literals.length; i++){
			if(replacements[i] !== undefined){
				literals[i] = replacements[i];
			}
		}
		
		this.maskEscaped = literals.join('');
	}	
	
});

$.extend($.ui.mask, {
	version: "@VERSION",
	getter: "value formatted",
	defaults: {
		mask: '',
		placeholder: '_',
		completed: null,
		allowPartials: false
	},
	definitions: { //Predefined character definitions
		'#': "[\\d]",
		'a': "[A-Za-z]",
		'*': "[A-Za-z0-9]"
	},
	caret: function(element, begin, end) {	//Helper Function for Caret positioning
		var input = element[0];
		if (typeof begin == 'number') {
			end = (typeof end == 'number') ? end : begin;
			if (input.setSelectionRange) {
				input.focus();
				input.setSelectionRange(begin, end);
			} else if (input.createTextRange) {
				var range = input.createTextRange();
				range.collapse(true);
				range.moveEnd('character', end);
				range.moveStart('character', begin);
				range.select();
			}
			return element;
		} else {
			if (input.setSelectionRange) {
				begin = input.selectionStart;
				end = input.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 };
		}
	}		
});

})(jQuery);