mirror of
https://github.com/fergalmoran/fergalmoran.github.com.git
synced 2025-12-22 09:18:48 +00:00
1 line
5.1 KiB
JavaScript
Executable File
1 line
5.1 KiB
JavaScript
Executable File
!function(a){"use strict";var b=window.orientation!==undefined,c=navigator.userAgent.toLowerCase().indexOf("android")>-1;a.mask={definitions:{9:"[0-9]",a:"[A-Za-z]","?":"[A-Za-z0-9]","*":"."},dataName:"rawMaskFn"};var d=function(b,d){if(c)return;this.$element=a(b);this.mask=d.mask;this.options=a.extend({},a.fn.inputmask.defaults,d);this.init();this.listen();this.checkVal()};d.prototype={init:function(){var b=a.mask.definitions;var c=this.mask.length;this.tests=[];this.partialPosition=this.mask.length;this.firstNonMaskPos=null;a.each(this.mask.split(""),a.proxy(function(a,d){if(d=="?"){c--;this.partialPosition=a}else if(b[d]){this.tests.push(new RegExp(b[d]));if(this.firstNonMaskPos===null)this.firstNonMaskPos=this.tests.length-1}else{this.tests.push(null)}},this));this.buffer=a.map(this.mask.split(""),a.proxy(function(a,c){if(a!="?")return b[a]?this.options.placeholder:a},this));this.focusText=this.$element.val();this.$element.data(a.mask.dataName,a.proxy(function(){return a.map(this.buffer,function(a,b){return this.tests[b]&&a!=this.options.placeholder?a:null}).join("")},this))},listen:function(){if(this.$element.attr("readonly"))return;var b=(a.browser.msie?"paste":"input")+".mask";this.$element.on("unmask",a.proxy(this.unmask,this)).on("focus.mask",a.proxy(this.focusEvent,this)).on("blur.mask",a.proxy(this.blurEvent,this)).on("keydown.mask",a.proxy(this.keydownEvent,this)).on("keypress.mask",a.proxy(this.keypressEvent,this)).on(b,a.proxy(this.pasteEvent,this))},caret:function(a,b){if(this.$element.length===0)return;if(typeof a=="number"){b=typeof b=="number"?b:a;return this.$element.each(function(){if(this.setSelectionRange){this.setSelectionRange(a,b)}else if(this.createTextRange){var c=this.createTextRange();c.collapse(true);c.moveEnd("character",b);c.moveStart("character",a);c.select()}})}else{if(this.$element[0].setSelectionRange){a=this.$element[0].selectionStart;b=this.$element[0].selectionEnd}else if(document.selection&&document.selection.createRange){var c=document.selection.createRange();a=0-c.duplicate().moveStart("character",-1e5);b=a+c.text.length}return{begin:a,end:b}}},seekNext:function(a){var b=this.mask.length;while(++a<=b&&!this.tests[a]);return a},seekPrev:function(a){while(--a>=0&&!this.tests[a]);return a},shiftL:function(a,b){var c=this.mask.length;if(a<0)return;for(var d=a,e=this.seekNext(b);d<c;d++){if(this.tests[d]){if(e<c&&this.tests[d].test(this.buffer[e])){this.buffer[d]=this.buffer[e];this.buffer[e]=this.options.placeholder}else break;e=this.seekNext(e)}}this.writeBuffer();this.caret(Math.max(this.firstNonMaskPos,a))},shiftR:function(a){var b=this.mask.length;for(var c=a,d=this.options.placeholder;c<b;c++){if(this.tests[c]){var e=this.seekNext(c);var f=this.buffer[c];this.buffer[c]=d;if(e<b&&this.tests[e].test(f))d=f;else break}}},unmask:function(){this.$element.unbind(".mask").removeData("inputmask")},focusEvent:function(){this.focusText=this.$element.val();var b=this.mask.length;var c=this.checkVal();this.writeBuffer();var d=this;var e=function(){if(c==b)d.caret(0,c);else d.caret(c)};if(a.browser.msie)e();else setTimeout(e,0)},blurEvent:function(){this.checkVal();if(this.$element.val()!=this.focusText)this.$element.trigger("change")},keydownEvent:function(a){var c=a.which;if(c==8||c==46||b&&c==127){var d=this.caret(),e=d.begin,f=d.end;if(f-e===0){e=c!=46?this.seekPrev(e):f=this.seekNext(e-1);f=c==46?this.seekNext(f):f}this.clearBuffer(e,f);this.shiftL(e,f-1);return false}else if(c==27){this.$element.val(this.focusText);this.caret(0,this.checkVal());return false}},keypressEvent:function(a){var b=this.mask.length;var c=a.which,d=this.caret();if(a.ctrlKey||a.altKey||a.metaKey||c<32){return true}else if(c){if(d.end-d.begin!==0){this.clearBuffer(d.begin,d.end);this.shiftL(d.begin,d.end-1)}var e=this.seekNext(d.begin-1);if(e<b){var f=String.fromCharCode(c);if(this.tests[e].test(f)){this.shiftR(e);this.buffer[e]=f;this.writeBuffer();var g=this.seekNext(e);this.caret(g)}}return false}},pasteEvent:function(){var a=this;setTimeout(function(){a.caret(a.checkVal(true))},0)},clearBuffer:function(a,b){var c=this.mask.length;for(var d=a;d<b&&d<c;d++){if(this.tests[d])this.buffer[d]=this.options.placeholder}},writeBuffer:function(){return this.$element.val(this.buffer.join("")).val()},checkVal:function(a){var b=this.mask.length;var c=this.$element.val();var d=-1;for(var e=0,f=0;e<b;e++){if(this.tests[e]){this.buffer[e]=this.options.placeholder;while(f++<c.length){var g=c.charAt(f-1);if(this.tests[e].test(g)){this.buffer[e]=g;d=e;break}}if(f>c.length)break}else if(this.buffer[e]==c.charAt(f)&&e!=this.partialPosition){f++;d=e}}if(!a&&d+1<this.partialPosition){this.$element.val("");this.clearBuffer(0,b)}else if(a||d+1>=this.partialPosition){this.writeBuffer();if(!a)this.$element.val(this.$element.val().substring(0,d+1))}return this.partialPosition?e:this.firstNonMaskPos}};a.fn.inputmask=function(b){return this.each(function(){var c=a(this),e=c.data("inputmask");if(!e)c.data("inputmask",e=new d(this,b))})};a.fn.inputmask.defaults={placeholder:"_"};a.fn.inputmask.Constructor=d;a(function(){a("body").on("focus.inputmask.data-api","[data-mask]",function(b){var c=a(this);if(c.data("inputmask"))return;b.preventDefault();c.inputmask(c.data())})})}(window.jQuery) |