1 line
9.8 KiB
JavaScript
1 line
9.8 KiB
JavaScript
(function(a){function d(b){var c=this;b=a.event.fix(b||window.e);b.type="paste";setTimeout(function(){a.event.handle.call(c,b)},1)}var b=window.orientation!=undefined,c=a.browser.opera||a.browser.mozilla&&parseFloat(a.browser.version.substr(0,3))<1.9?"input":"paste";a.event.special.paste={setup:function(){if(this.addEventListener)this.addEventListener(c,d,false);else if(this.attachEvent)this.attachEvent(c,d)},teardown:function(){if(this.removeEventListener)this.removeEventListener(c,d,false);else if(this.detachEvent)this.detachEvent(c,d)}};a.extend({mask:{rules:{z:/[a-z]/,Z:/[A-Z]/,a:/[a-zA-Z]/,"*":/[0-9a-zA-Z]/,"@":/[0-9a-zA-ZçÇáàãâéèêíìóòôõúùü]/},keyRepresentation:{8:"backspace",9:"tab",13:"enter",16:"shift",17:"control",18:"alt",27:"esc",33:"page up",34:"page down",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"delete",116:"f5",123:"f12",224:"command"},iphoneKeyRepresentation:{10:"go",127:"delete"},signals:{"+":"","-":"-"},options:{attr:"alt",mask:null,type:"fixed",maxLength:-1,defaultValue:"",signal:false,textAlign:true,selectCharsOnFocus:true,autoTab:true,setSize:false,fixedChars:"[(),.:/ -]",onInvalid:function(){},onValid:function(){},onOverflow:function(){}},masks:{phone:{mask:"(99) 9999-9999"},"phone-us":{mask:"(999) 999-9999"},cpf:{mask:"999.999.999-99"},cnpj:{mask:"99.999.999/9999-99"},date:{mask:"39/19/9999"},"date-us":{mask:"19/39/9999"},cep:{mask:"99999-999"},time:{mask:"29:59"},cc:{mask:"9999 9999 9999 9999"},integer:{mask:"999.999.999.999",type:"reverse"},decimal:{mask:"99,999.999.999.999",type:"reverse",defaultValue:"000"},"decimal-us":{mask:"99.999,999,999,999",type:"reverse",defaultValue:"000"},"signed-decimal":{mask:"99,999.999.999.999",type:"reverse",defaultValue:"+000"},"signed-decimal-us":{mask:"99,999.999.999.999",type:"reverse",defaultValue:"+000"}},init:function(){if(!this.hasInit){var c=this,d,e=b?this.iphoneKeyRepresentation:this.keyRepresentation;this.ignore=false;for(d=0;d<=9;d++)this.rules[d]=new RegExp("[0-"+d+"]");this.keyRep=e;this.ignoreKeys=[];a.each(e,function(a){c.ignoreKeys.push(parseInt(a))});this.hasInit=true}},set:function(b,c){var d=this,e=a(b),f="maxLength";c=c||{};this.init();return e.each(function(){if(c.attr)d.options.attr=c.attr;var b=a(this),e=a.extend({},d.options),g=b.attr(e.attr),h="";h=typeof c=="string"?c:g!=""?g:null;if(h)e.mask=h;if(d.masks[h])e=a.extend(e,d.masks[h]);if(typeof c=="object"&&c.constructor!=Array)e=a.extend(e,c);if(a.metadata)e=a.extend(e,b.metadata());if(e.mask!=null){if(b.data("mask"))d.unset(b);var i=e.defaultValue,j=e.type=="reverse",k=new RegExp(e.fixedChars,"g");if(e.maxLength==-1)e.maxLength=b.attr(f);e=a.extend({},e,{fixedCharsReg:new RegExp(e.fixedChars),fixedCharsRegG:k,maskArray:e.mask.split(""),maskNonFixedCharsArray:e.mask.replace(k,"").split("")});if((e.type=="fixed"||j)&&e.setSize&&!b.attr("size"))b.attr("size",e.mask.length);if(j&&e.textAlign)b.css("text-align","right");if(this.value!=""||i!=""){var l=d.string(this.value!=""?this.value:i,e);this.defaultValue=l;b.val(l)}if(e.type=="infinite")e.type="repeat";b.data("mask",e);b.removeAttr(f);b.bind("keydown.mask",{func:d._onKeyDown,thisObj:d},d._onMask).bind("keypress.mask",{func:d._onKeyPress,thisObj:d},d._onMask).bind("keyup.mask",{func:d._onKeyUp,thisObj:d},d._onMask).bind("paste.mask",{func:d._onPaste,thisObj:d},d._onMask).bind("focus.mask",d._onFocus).bind("blur.mask",d._onBlur).bind("change.mask",d._onChange)}})},unset:function(b){var c=a(b);return c.each(function(){var b=a(this);if(b.data("mask")){var c=b.data("mask").maxLength;if(c!=-1)b.attr("maxLength",c);b.unbind(".mask").removeData("mask")}})},string:function(b,c){this.init();var d={};if(typeof b!="string")b=String(b);switch(typeof c){case"string":if(this.masks[c])d=a.extend(d,this.masks[c]);else d.mask=c;break;case"object":d=c}if(!d.fixedChars)d.fixedChars=this.options.fixedChars;var e=new RegExp(d.fixedChars),f=new RegExp(d.fixedChars,"g");if(d.type=="reverse"&&d.defaultValue){if(typeof this.signals[d.defaultValue.charAt(0)]!="undefined"){var g=b.charAt(0);d.signal=typeof this.signals[g]!="undefined"?this.signals[g]:this.signals[d.defaultValue.charAt(0)];d.defaultValue=d.defaultValue.substring(1)}}return this.__maskArray(b.split(""),d.mask.replace(f,"").split(""),d.mask.split(""),d.type,d.maxLength,d.defaultValue,e,d.signal)},_onFocus:function(b){var c=a(this),d=c.data("mask");d.inputFocusValue=c.val();d.changed=false;if(d.selectCharsOnFocus)c.select()},_onBlur:function(b){var c=a(this),d=c.data("mask");if(d.inputFocusValue!=c.val()&&!d.changed)c.trigger("change")},_onChange:function(b){a(this).data("mask").changed=true},_onMask:function(b){var c=b.data.thisObj,d={};d._this=b.target;d.$this=a(d._this);if(d.$this.attr("readonly"))return true;d.data=d.$this.data("mask");d[d.data.type]=true;d.value=d.$this.val();d.nKey=c.__getKeyNumber(b);d.range=c.__getRange(d._this);d.valueArray=d.value.split("");return b.data.func.call(c,b,d)},_onKeyDown:function(c,d){this.ignore=a.inArray(d.nKey,this.ignoreKeys)>-1||c.ctrlKey||c.metaKey||c.altKey;if(this.ignore){var e=this.keyRep[d.nKey];d.data.onValid.call(d._this,e?e:"",d.nKey)}return b?this._keyPress(c,d):true},_onKeyUp:function(a,b){if(b.nKey==9||b.nKey==16)return true;if(b.data.type=="repeat"){this.__autoTab(b);return true}return this._onPaste(a,b)},_onPaste:function(b,c){if(c.reverse)this.__changeSignal(b.type,c);var d=this.__maskArray(c.valueArray,c.data.maskNonFixedCharsArray,c.data.maskArray,c.data.type,c.data.maxLength,c.data.defaultValue,c.data.fixedCharsReg,c.data.signal);c.$this.val(d);if(!c.reverse&&c.data.defaultValue.length&&c.range.start==c.range.end)this.__setRange(c._this,c.range.start,c.range.end);if((a.browser.msie||a.browser.safari)&&!c.reverse)this.__setRange(c._this,c.range.start,c.range.end);if(this.ignore)return true;this.__autoTab(c);return true},_onKeyPress:function(a,b){if(this.ignore)return true;if(b.reverse)this.__changeSignal(a.type,b);var c=String.fromCharCode(b.nKey),d=b.range.start,e=b.value,f=b.data.maskArray;if(b.reverse){var g=e.substr(0,d),h=e.substr(b.range.end,e.length);e=g+c+h;if(b.data.signal&&d-b.data.signal.length>0)d-=b.data.signal.length}var i=e.replace(b.data.fixedCharsRegG,"").split(""),j=this.__extraPositionsTill(d,f,b.data.fixedCharsReg);b.rsEp=d+j;if(b.repeat)b.rsEp=0;if(!this.rules[f[b.rsEp]]||b.data.maxLength!=-1&&i.length>=b.data.maxLength&&b.repeat){b.data.onOverflow.call(b._this,c,b.nKey);return false}else if(!this.rules[f[b.rsEp]].test(c)){b.data.onInvalid.call(b._this,c,b.nKey);return false}else b.data.onValid.call(b._this,c,b.nKey);var k=this.__maskArray(i,b.data.maskNonFixedCharsArray,f,b.data.type,b.data.maxLength,b.data.defaultValue,b.data.fixedCharsReg,b.data.signal,j);b.$this.val(k);return b.reverse?this._keyPressReverse(a,b):b.fixed?this._keyPressFixed(a,b):true},_keyPressFixed:function(a,b){if(b.range.start==b.range.end){if(b.rsEp==0&&b.value.length==0||b.rsEp<b.value.length)this.__setRange(b._this,b.rsEp,b.rsEp+1)}else this.__setRange(b._this,b.range.start,b.range.end);return true},_keyPressReverse:function(b,c){if(a.browser.msie&&(c.range.start==0&&c.range.end==0||c.range.start!=c.range.end))this.__setRange(c._this,c.value.length);return false},__autoTab:function(a){if(a.data.autoTab&&(a.$this.val().length>=a.data.maskArray.length&&!a.repeat||a.data.maxLength!=-1&&a.valueArray.length>=a.data.maxLength&&a.repeat)){var b=this.__getNextInput(a._this,a.data.autoTab);if(b){a.$this.trigger("blur");b.focus().select()}}},__changeSignal:function(a,b){if(b.data.signal!==false){var c=a=="paste"?b.value.charAt(0):String.fromCharCode(b.nKey);if(this.signals&&typeof this.signals[c]!="undefined"){b.data.signal=this.signals[c]}}},__getKeyNumber:function(a){return a.charCode||a.keyCode||a.which},__maskArray:function(a,b,c,d,e,f,g,h,i){if(d=="reverse")a.reverse();a=this.__removeInvalidChars(a,b,d=="repeat"||d=="infinite");if(f)a=this.__applyDefaultValue.call(a,f);a=this.__applyMask(a,c,i,g);switch(d){case"reverse":a.reverse();return(h||"")+a.join("").substring(a.length-c.length);case"infinite":case"repeat":var j=a.join("");return e!=-1&&a.length>=e?j.substring(0,e):j;default:return a.join("").substring(0,c.length)}return""},__applyDefaultValue:function(a){var b=a.length,c=this.length,d;for(d=c-1;d>=0;d--){if(this[d]==a.charAt(0))this.pop();else break}for(d=0;d<b;d++)if(!this[d])this[d]=a.charAt(d);return this},__removeInvalidChars:function(a,b,c){for(var d=0,e=0;d<a.length;d++){if(b[e]&&this.rules[b[e]]&&!this.rules[b[e]].test(a[d])){a.splice(d,1);if(!c)e--;d--}if(!c)e++}return a},__applyMask:function(a,b,c,d){if(typeof c=="undefined")c=0;for(var e=0;e<a.length+c;e++){if(b[e]&&d.test(b[e]))a.splice(e,0,b[e])}return a},__extraPositionsTill:function(a,b,c){var d=0;while(c.test(b[a++])){d++}return d},__getNextInput:function(b,c){var d=b.form.elements,e=a.inArray(b,d)+1,f=null,g;for(g=e;g<d.length;g++){f=a(d[g]);if(this.__isNextInput(f,c))return f}var h=document.forms,i=a.inArray(b.form,h)+1,j,k=null;for(j=i;j<h.length;j++){k=h[j].elements;for(g=0;g<k.length;g++){f=a(k[g]);if(this.__isNextInput(f,c))return f}}return null},__isNextInput:function(a,b){var c=a.get(0);return c&&(c.offsetWidth>0||c.offsetHeight>0)&&c.nodeName!="FIELDSET"&&(b===true||typeof b=="string"&&a.is(b))},__setRange:function(a,b,c){if(typeof c=="undefined")c=b;if(a.setSelectionRange){a.setSelectionRange(b,c)}else{var d=a.createTextRange();d.collapse();d.moveStart("character",b);d.moveEnd("character",c-b);d.select()}},__getRange:function(b){if(!a.browser.msie)return{start:b.selectionStart,end:b.selectionEnd};var c={start:0,end:0},d=document.selection.createRange();c.start=0-d.duplicate().moveStart("character",-1e5);c.end=c.start+d.text.length;return c},unmaskedVal:function(b){return a(b).val().replace(a.mask.fixedCharsRegG,"")}}});a.fn.extend({setMask:function(b){return a.mask.set(this,b)},unsetMask:function(){return a.mask.unset(this)},unmaskedVal:function(){return a.mask.unmaskedVal(this[0])}})})(jQuery) |