jquery.inputmask-multi.js 6.1 KB

12345678910111213141516171819
  1. /*
  2. Input Mask plugin for jquery
  3. http://github.com/RobinHerbots/jquery.inputmask
  4. Copyright (c) 2010 - 2014 Robin Herbots
  5. Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
  6. Version: 3.0.31
  7. */
  8. (function(c){if(void 0!=c.fn.inputmask){var s=function(a,h,g){function s(c){var e=document.createElement("input");c="on"+c;var k=c in e;k||(e.setAttribute(c,"return;"),k="function"==typeof e[c]);return k}function v(b){if(void 0==c.valHooks[b]||!0!=c.valHooks[b].inputmaskmultipatch){var e=c.valHooks[b]&&c.valHooks[b].get?c.valHooks[b].get:function(c){return c.value},k=c.valHooks[b]&&c.valHooks[b].set?c.valHooks[b].set:function(c,e){c.value=e;return c};c.valHooks[b]={get:function(b){var k=c(b);return k.data("_inputmask-multi")?
  9. (b=k.data("_inputmask-multi"),e(b.elmasks[b.activeMasksetIndex])):e(b)},set:function(b,e){var a=c(b),d=k(b,e);a.data("_inputmask-multi")&&a.triggerHandler("setvalue");return d},inputmaskmultipatch:!0}}}function p(b,e,k){b=b.jquery&&0<b.length?b[0]:b;if("number"==typeof e){e=q(e);k=q(k);k="number"==typeof k?k:e;if(b!=f){var a=c(b).data("_inputmask")||{};a.caret={begin:e,end:k};c(b).data("_inputmask",a)}c(b).is(":visible")&&(b.scrollLeft=b.scrollWidth,!1==g.insertMode&&e==k&&k++,b.setSelectionRange?
  10. (b.selectionStart=e,b.selectionEnd=k):b.createTextRange&&(b=b.createTextRange(),b.collapse(!0),b.moveEnd("character",k),b.moveStart("character",e),b.select()))}else return a=c(b).data("_inputmask"),!c(b).is(":visible")&&a&&void 0!=a.caret?(e=a.caret.begin,k=a.caret.end):b.setSelectionRange?(e=b.selectionStart,k=b.selectionEnd):document.selection&&document.selection.createRange&&(b=document.selection.createRange(),e=0-b.duplicate().moveStart("character",-1E5),k=e+b.text.length),e=q(e),k=q(k),{begin:e,
  11. end:k}}function q(c){!n||"number"!=typeof c||g.greedy&&""==g.placeholder||(c=f.value.length-c);return c}function r(b,e){if("multiMaskScope"!=b){if(c.isFunction(g.determineActiveMasksetIndex))l=g.determineActiveMasksetIndex.call(d,b,e);else{var a=-1,t=-1,m=-1;c.each(e,function(e,b){var d=c(b).data("_inputmask").maskset,f=-1,g=0,h=p(b).begin,n;for(n in d.validPositions)d=parseInt(n),d>f&&(f=d),g++;if(g>a||g==a&&t>h&&m>f||g==a&&t==h&&m<f)a=g,t=h,l=e,m=f})}var h=d.data("_inputmask-multi")||{activeMasksetIndex:0,
  12. elmasks:e};h.activeMasksetIndex=l;d.data("_inputmask-multi",h)}-1==c.inArray(b,["focus"])&&f.value!=e[l]._valueGet()&&(h=""==c(e[l]).val()?e[l]._valueGet():c(e[l]).val(),f.value=h);-1==c.inArray(b,["blur","focus"])&&c(e[l]).hasClass("focus.inputmask")&&(h=p(e[l]),p(f,h.begin,h.end))}function w(b){f=b;d=c(f);n="rtl"==f.dir||g.numericInput;l=0;m=c.map(h,function(e,b){var a='<input type="text" ';d.attr("value")&&(a+='value="'+d.attr("value")+'" ');d.attr("dir")&&(a+='dir="'+d.attr("dir")+'" ');a=c(a+
  13. "/>")[0];c(a).inputmask(c.extend({},g,{mask:e.mask}));return a});d.data("_inputmask-multi",{activeMasksetIndex:0,elmasks:m});("rtl"==f.dir||g.rightAlign)&&d.css("text-align","right");f.dir="ltr";d.removeAttr("dir");""!=d.attr("value")&&r("init",m);d.bind("mouseenter blur focus mouseleave click dblclick keydown keypress keypress",function(a){var b=p(f),d,h=!0;if("keydown"==a.type){d=a.keyCode;if(d==g.keyCode.DOWN&&l<m.length-1)return l++,r("multiMaskScope",m),!1;if(d==g.keyCode.UP&&0<l)return l--,
  14. r("multiMaskScope",m),!1;if(a.ctrlKey||a.shiftKey||a.altKey)return!0}else if("keypress"==a.type&&(a.ctrlKey||a.shiftKey||a.altKey))return!0;c.each(m,function(f,l){if("keydown"==a.type){d=a.keyCode;if(d==g.keyCode.BACKSPACE&&l._valueGet().length<b.begin)return;if(d==g.keyCode.TAB)h=!1;else{if(d==g.keyCode.RIGHT){p(l,b.begin+1,b.end+1);h=!1;return}if(d==g.keyCode.LEFT){p(l,b.begin-1,b.end-1);h=!1;return}}}if(-1!=c.inArray(a.type,["click"])&&(p(l,q(b.begin),q(b.end)),b.begin!=b.end)){h=!1;return}-1!=
  15. c.inArray(a.type,["keydown"])&&b.begin!=b.end&&p(l,b.begin,b.end);c(l).triggerHandler(a)});h&&setTimeout(function(){r(a.type,m)},0)});d.bind(x+" dragdrop drop setvalue",function(a){p(f);setTimeout(function(){c.each(m,function(b,d){d._valueSet(f.value);c(d).triggerHandler(a)});setTimeout(function(){r(a.type,m)},0)},0)});v(f.type)}var x=s("paste")?"paste":s("input")?"input":"propertychange",n,f,d,m,l;g.multi=!0;if(void 0!=a)switch(a.action){case "isComplete":return d=c(a.el),a=d.data("_inputmask-multi"),
  16. a=a.elmasks[a.activeMasksetIndex],c(a).inputmask("isComplete");case "unmaskedvalue":return d=a.$input,a=d.data("_inputmask-multi"),a=a.elmasks[a.activeMasksetIndex],c(a).inputmask("unmaskedvalue");case "mask":w(a.el);break;case "format":return d=c({}),d.data("_inputmask",{maskset:maskset,opts:g,isRTL:g.numericInput}),g.numericInput&&(n=!0),a=a.value.split(""),checkVal(d,!1,!1,n?a.reverse():a,!0),n?getBuffer().reverse().join(""):getBuffer().join("");case "isValid":return d=c({}),d.data("_inputmask",
  17. {maskset:maskset,opts:g,isRTL:g.numericInput}),g.numericInput&&(n=!0),a=a.value.split(""),checkVal(d,!1,!0,n?a.reverse():a),isComplete(getBuffer());case "getemptymask":return d=c(a.el),maskset=d.data("_inputmask").maskset,g=d.data("_inputmask").opts,getBufferTemplate();case "remove":f=a.el;d=c(f);maskset=d.data("_inputmask").maskset;g=d.data("_inputmask").opts;f._valueSet(unmaskedvalue(d));d.unbind(".inputmask");d.removeClass("focus.inputmask");d.removeData("_inputmask");var u;Object.getOwnPropertyDescriptor&&
  18. (u=Object.getOwnPropertyDescriptor(f,"value"));u&&u.get?f._valueGet&&Object.defineProperty(f,"value",{get:f._valueGet,set:f._valueSet}):document.__lookupGetter__&&f.__lookupGetter__("value")&&f._valueGet&&(f.__defineGetter__("value",f._valueGet),f.__defineSetter__("value",f._valueSet));try{delete f._valueGet,delete f._valueSet}catch(y){f._valueGet=void 0,f._valueSet=void 0}}};c.extend(c.inputmask.defaults,{multi:!1,nojumps:!1,nojumpsThreshold:0,determineActiveMasksetIndex:void 0});c.inputmask._fn=
  19. c.fn.inputmask;c.fn.inputmask=function(a,h){if("string"===typeof a)return c.inputmask._fn("_detectScope",h,void 0,void 0,a)?c.inputmask._fn.call(this,a,h,s,"_inputmask-multi"):c.inputmask._fn.call(this,a,h);if("object"==typeof a)return opts=c.extend(!0,{},c.inputmask.defaults,a),c.inputmask._fn("_detectScope",a)?c.inputmask._fn.call(this,a,h,s,"_inputmask-multi"):c.inputmask._fn.call(this,a,h);if(void 0==a)return c.inputmask._fn.call(this,a,h)}}})(jQuery);