forked from igorescobar/jQuery-Mask-Plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.mask.min.js
11 lines (11 loc) · 4.17 KB
/
jquery.mask.min.js
1
2
3
4
5
6
7
8
9
10
11
// jQuery Mask Plugin v1.6.0
// github.com/igorescobar/jQuery-Mask-Plugin
(function(f){"function"===typeof define&&define.amd?define(["jquery"],f):f(window.jQuery||window.Zepto)})(function(f){var y=function(a,g,e){var h=this,x;a=f(a);g="function"===typeof g?g(a.val(),void 0,a,e):g;h.init=function(){e=e||{};h.byPassKeys=[9,16,17,18,36,37,38,39,40,91];h.translation={0:{pattern:/\d/},9:{pattern:/\d/,optional:!0},"#":{pattern:/\d/,recursive:!0},A:{pattern:/[a-zA-Z0-9]/},S:{pattern:/[a-zA-Z]/}};h.translation=f.extend({},h.translation,e.translation);h=f.extend(!0,{},h,e);a.each(function(){!1!==
e.maxlength&&a.attr("maxlength",g.length);e.placeholder&&a.attr("placeholder",e.placeholder);a.attr("autocomplete","off");c.destroyEvents();c.events();var b=c.getCaret(),d=c.getMaskCharactersBeforeCount(b,!0);c.val(c.getMasked());c.setCaret(b+d)})};var c={getCaret:function(){var b;b=0;var d=a.get(0),c=document.selection,d=d.selectionStart;if(c&&!~navigator.appVersion.indexOf("MSIE 10"))b=c.createRange(),b.moveStart("character",a.is("input")?-a.val().length:-a.text().length),b=b.text.length;else if(d||
"0"===d)b=d;return b},setCaret:function(b){var d;d=a.get(0);d.setSelectionRange?d.setSelectionRange(b,b):d.createTextRange&&(d=d.createTextRange(),d.collapse(!0),d.moveEnd("character",b),d.moveStart("character",b),d.select())},events:function(){a.on("keydown.mask",function(){x=c.val()});a.on("keyup.mask",c.behaviour);a.on("paste.mask drop.mask",function(){setTimeout(function(){a.keydown().keyup()},100)});a.on("change.mask",function(){a.data("changeCalled",!0)});a.on("blur.mask",function(b){b=f(b.target);
b.prop("defaultValue")!=b.val()&&(b.prop("defaultValue",b.val()),b.data("changeCalled")||b.trigger("change"));b.data("changeCalled",!1)});a.on("focusout.mask",function(){e.clearIfNotMatch&&c.val().length<g.length&&c.val("")})},destroyEvents:function(){a.off("keydown.mask keyup.mask paste.mask drop.mask change.mask blur.mask focusout.mask").removeData("changeCalled")},val:function(b){var d=a.is("input");return 0<arguments.length?d?a.val(b):a.text(b):d?a.val():a.text()},getMaskCharactersBeforeCount:function(b,
d){for(var a,c=0,e=0,f=g.length;e<f&&e<b;e++)a=h.translation[g.charAt(e)],a||(c++,b=d?b+1:b);return c},determineCaretPos:function(b,d,a,e){return h.translation[g.charAt(Math.min(b-1,g.length-1))]?Math.min(b+a-d-e,a):c.determineCaretPos(b+1,d,a,e)},behaviour:function(b){b=b||window.event;var a=b.keyCode||b.which;if(-1===f.inArray(a,h.byPassKeys)){var e=c.getCaret(),g=c.val(),n=g.length,l=e<n,p=c.getMasked(),m=p.length,q=c.getMaskCharactersBeforeCount(m-1)-c.getMaskCharactersBeforeCount(n-1);p!==g&&
c.val(p);!l||65===a&&b.ctrlKey||(8!==a&&46!==a&&(e=c.determineCaretPos(e,n,m,q)),c.setCaret(e));return c.callbacks(b)}},getMasked:function(b){var a=[],f=c.val(),k=0,n=g.length,l=0,p=f.length,m=1,q="push",s=-1,r,u;e.reverse?(q="unshift",m=-1,r=0,k=n-1,l=p-1,u=function(){return-1<k&&-1<l}):(r=n-1,u=function(){return k<n&&l<p});for(;u();){var v=g.charAt(k),w=f.charAt(l),t=h.translation[v];if(t)w.match(t.pattern)?(a[q](w),t.recursive&&(-1===s?s=k:k===r&&(k=s-m),r===s&&(k-=m)),k+=m):t.optional&&(k+=m,
l-=m),l+=m;else{if(!b)a[q](v);w===v&&(l+=m);k+=m}}b=g.charAt(r);n!==p+1||h.translation[b]||a.push(b);return a.join("")},callbacks:function(b){var d=c.val(),f=c.val()!==x;if(!0===f&&"function"===typeof e.onChange)e.onChange(d,b,a,e);if(!0===f&&"function"===typeof e.onKeyPress)e.onKeyPress(d,b,a,e);if("function"===typeof e.onComplete&&d.length===g.length)e.onComplete(d,b,a,e)}};h.remove=function(){var a=c.getCaret(),d=c.getMaskCharactersBeforeCount(a);c.destroyEvents();c.val(h.getCleanVal()).removeAttr("maxlength");
c.setCaret(a-d)};h.getCleanVal=function(){return c.getMasked(!0)};h.init()};f.fn.mask=function(a,g){this.unmask();return this.each(function(){f(this).data("mask",new y(this,a,g))})};f.fn.unmask=function(){return this.each(function(){try{f(this).data("mask").remove()}catch(a){}})};f.fn.cleanVal=function(){return f(this).data("mask").getCleanVal()};f("*[data-mask]").each(function(){var a=f(this),g={};"true"===a.attr("data-mask-reverse")&&(g.reverse=!0);"false"===a.attr("data-mask-maxlength")&&(g.maxlength=
!1);"true"===a.attr("data-mask-clearifnotmatch")&&(g.clearIfNotMatch=!0);a.mask(a.attr("data-mask"),g)})});