UNPKG

react-input-mask-plus

Version:
2 lines (1 loc) 13.1 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):e.ReactInputMask=t(e.React)}(this,function(e){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(){return(n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function r(e,t){return-1!==e.permanents.indexOf(t)}function a(e,t,n){var a=e.mask,o=e.charsRules;if(!n)return!1;if(r(e,t))return a[t]===n;var s=o[a[t]];return new RegExp(s).test(n)}function o(e,t){return t.split("").every(function(t,n){return r(e,n)||!a(e,n,t)})}function s(e,t){var n=e.maskChar,o=e.prefix;if(!n){for(;t.length>o.length&&r(e,t.length-1);)t=t.slice(0,t.length-1);return t.length}for(var s=o.length,i=t.length;i>=o.length;i--){var u=t[i];if(!r(e,i)&&a(e,i,u)){s=i+1;break}}return s}function i(e,t){return s(e,t)===e.mask.length}function u(e,t){var n=e.maskChar,a=e.mask,o=e.prefix;if(!n){(t=(t=p(e,"",t,0)).slice(0,s(e,t))).length<o.length&&(t=o);for(var i=a.length,l=t.length;l<i&&r(e,l);)t+=a[l],l+=1;return t}if(t){return p(e,u(e,""),t,0)}for(var c=0;c<a.length;c++)r(e,c)?t+=a[c]:t+=n;return t}function l(e,t,n,a){var o=n+a,s=e.maskChar,i=e.mask,l=e.prefix,p=t.split("");return s?p.map(function(t,a){return a<n||a>=o?t:r(e,a)?i[a]:s}).join(""):(n=Math.max(l.length,n),p.splice(n,o-n),t=p.join(""),u(e,t))}function p(e,t,n,o){var s=e.mask,l=e.maskChar,p=e.prefix,c=n.split(""),f=i(e,t),h=function(t,n){return!r(e,t)||n===s[t]},m=function(t,n){return!l||!r(e,n)||t!==l};return!l&&o>t.length&&(t+=s.slice(t.length,o)),c.every(function(n){for(;!h(o,n);){if(o>=t.length&&(t+=s[o]),!m(n,o))return!0;if(++o>=s.length)return!1}return!a(e,o,n)&&n!==l||(o<t.length?l||f||o<p.length?t=t.slice(0,o)+n+t.slice(o+1):(t=t.slice(0,o)+n+t.slice(o),t=u(e,t)):l||(t+=n),++o<s.length)}),t}var c={9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"},f=function(e,t,n){if(t===undefined&&(t="_"),null==n&&(n=c),!e||"string"!=typeof e)return{maskChar:t,charsRules:n,mask:null,prefix:null,lastEditablePos:null,permanents:[]};var r="",a="",o=[],s=!1,i=null;return e.split("").forEach(function(e){s||"\\"!==e?(s||!n[e]?(o.push(r.length),r.length===o.length-1&&(a+=e)):i=r.length+1,r+=e,s=!1):s=!0}),{maskChar:t,charsRules:n,prefix:a,mask:r,lastEditablePos:i,permanents:o}},h=function(e){return(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(){return setTimeout(e,0)})(e)},m=function(t){function r(e){var n;n=t.call(this,e)||this,g.call(n);var r=e.mask,a=e.maskChar,o=e.formatChars,s=e.defaultValue,i=e.value,l=e.alwaysShowMask;return n.hasValue=null!=i,n.maskOptions=f(r,a,o),null==s&&(s=""),null==i&&(i=s),i=n.getStringValue(i),n.maskOptions.mask&&(l||i)&&(i=u(n.maskOptions,i)),n.value=i,n}!function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}(r,t);var a=r.prototype;return a.componentDidMount=function(){this.isAndroidBrowser=function(){var e=new RegExp("windows","i"),t=new RegExp("firefox","i"),n=new RegExp("android","i"),r=navigator.userAgent;return!e.test(r)&&!t.test(r)&&n.test(r)}(),this.isWindowsPhoneBrowser=function(){var e=new RegExp("windows","i"),t=new RegExp("phone","i"),n=navigator.userAgent;return e.test(n)&&t.test(n)}(),this.isAndroidFirefox=function(){var e=new RegExp("windows","i"),t=new RegExp("firefox","i"),n=new RegExp("android","i"),r=navigator.userAgent;return!e.test(r)&&t.test(r)&&n.test(r)}(),this.maskOptions.mask&&this.getInputValue()!==this.value&&this.setInputValue(this.value)},a.componentWillReceiveProps=function(e){var t=this.maskOptions;if(this.hasValue=null!=e.value,this.maskOptions=f(e.mask,e.maskChar,e.formatChars),!this.maskOptions.mask)return this.backspaceOrDeleteRemoval=null,void(this.lastCursorPos=null);var n=this.maskOptions.mask&&this.maskOptions.mask!==t.mask,r=e.alwaysShowMask||this.isFocused(),a=this.hasValue?this.getStringValue(e.value):this.value;if(t.mask||this.hasValue||(a=this.getInputDOMNode().value),(n||this.maskOptions.mask&&(a||r))&&(a=u(this.maskOptions,a),n)){var l=this.lastCursorPos,p=s(this.maskOptions,a);(null===l||p<l)&&(l=i(this.maskOptions,a)?p:this.getRightEditablePos(p),this.setCursorPos(l))}!this.maskOptions.mask||!o(this.maskOptions,a)||r||this.hasValue&&e.value||(a=""),this.value=a},a.componentDidUpdate=function(){this.maskOptions.mask&&this.getInputValue()!==this.value&&this.setInputValue(this.value)},a.render=function(){var t=this,r=this.props,a=(r.mask,r.alwaysShowMask,r.maskChar,r.formatChars,r.component),o=(r.getInputNode,r.getChangeEvent,function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(r,["mask","alwaysShowMask","maskChar","formatChars","component","getInputNode","getChangeEvent"]));if(this.maskOptions.mask){if(!o.disabled&&!o.readOnly){["onChange","onKeyDown","onPaste","onMouseDown"].forEach(function(e){o[e]=t[e]})}null!=o.value&&(o.value=this.value)}var s=a||"input";return e.createElement(s,n({ref:function(e){return t.input=e}},o,{onFocus:this.onFocus,onBlur:this.onBlur}))},r}((e=e&&e.hasOwnProperty("default")?e["default"]:e).Component),g=function(){var n=this;Object.defineProperty(this,"lastCursorPos",{configurable:!0,enumerable:!0,writable:!0,value:null}),Object.defineProperty(this,"focused",{configurable:!0,enumerable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isDOMElement",{configurable:!0,enumerable:!0,writable:!0,value:function(e){return"object"===("undefined"==typeof HTMLElement?"undefined":t(HTMLElement))?function(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?t[Symbol.hasInstance](e):e instanceof t}(e,HTMLElement):1===e.nodeType&&"string"==typeof e.nodeName}}),Object.defineProperty(this,"getInputDOMNode",{configurable:!0,enumerable:!0,writable:!0,value:function(){var t=n.input;return t?n.isDOMElement(t)?t:"function"==typeof n.props.getInputNode?n.props.getInputNode(t):e.findDOMNode(t):null}}),Object.defineProperty(this,"getInputValue",{configurable:!0,enumerable:!0,writable:!0,value:function(){var e=n.getInputDOMNode();return e?e.value:null}}),Object.defineProperty(this,"setInputValue",{configurable:!0,enumerable:!0,writable:!0,value:function(e){var t=n.getInputDOMNode();t&&(n.value=e,t.value=e)}}),Object.defineProperty(this,"getLeftEditablePos",{configurable:!0,enumerable:!0,writable:!0,value:function(e){for(var t=e;t>=0;--t)if(!r(n.maskOptions,t))return t;return null}}),Object.defineProperty(this,"getRightEditablePos",{configurable:!0,enumerable:!0,writable:!0,value:function(e){for(var t=n.maskOptions.mask,a=e;a<t.length;++a)if(!r(n.maskOptions,a))return a;return null}}),Object.defineProperty(this,"setCursorToEnd",{configurable:!0,enumerable:!0,writable:!0,value:function(){var e=s(n.maskOptions,n.value),t=n.getRightEditablePos(e);null!==t&&n.setCursorPos(t)}}),Object.defineProperty(this,"setSelection",{configurable:!0,enumerable:!0,writable:!0,value:function(e,t){void 0===t&&(t=0);var r=n.getInputDOMNode();if(r){var a=e+t;if("selectionStart"in r&&"selectionEnd"in r)r.selectionStart=e,r.selectionEnd=a;else{var o=r.createTextRange();o.collapse(!0),o.moveStart("character",e),o.moveEnd("character",a-e),o.select()}}}}),Object.defineProperty(this,"getSelection",{configurable:!0,enumerable:!0,writable:!0,value:function(){var e=n.getInputDOMNode(),t=0,r=0;if("selectionStart"in e&&"selectionEnd"in e)t=e.selectionStart,r=e.selectionEnd;else{var a=document.selection.createRange();a.parentElement()===e&&(t=-a.moveStart("character",-e.value.length),r=-a.moveEnd("character",-e.value.length))}return{start:t,end:r,length:r-t}}}),Object.defineProperty(this,"getCursorPos",{configurable:!0,enumerable:!0,writable:!0,value:function(){return n.getSelection().start}}),Object.defineProperty(this,"setCursorPos",{configurable:!0,enumerable:!0,writable:!0,value:function(e){n.setSelection(e,0),h(function(){n.setSelection(e,0)}),n.lastCursorPos=e}}),Object.defineProperty(this,"isFocused",{configurable:!0,enumerable:!0,writable:!0,value:function(){return n.focused}}),Object.defineProperty(this,"getStringValue",{configurable:!0,enumerable:!0,writable:!0,value:function(e){return e||0===e?e+"":""}}),Object.defineProperty(this,"onKeyDown",{configurable:!0,enumerable:!0,writable:!0,value:function(e){n.backspaceOrDeleteRemoval=null,"function"==typeof n.props.onKeyDown&&n.props.onKeyDown(e);var t=e.key,r=e.ctrlKey,a=e.metaKey,o=e.defaultPrevented;if(!(r||a||o||"Backspace"!==t&&"Delete"!==t)){var s=n.getSelection();if(!("Backspace"===t&&s.end>0||"Delete"===t&&n.value.length>s.start))return;n.backspaceOrDeleteRemoval={key:t,selection:n.getSelection()}}}}),Object.defineProperty(this,"onChange",{configurable:!0,enumerable:!0,writable:!0,value:function(){var e,t=n.props.getChangeEvent?(e=n.props).getChangeEvent.apply(e,arguments):arguments.length<=0?undefined:arguments[0],r=n.paste,a=n.maskOptions,o=a.mask,i=a.maskChar,c=a.lastEditablePos,f=a.prefix,m=n.getInputValue(),g=n.value;if(r)return n.paste=null,void n.pasteText(r.value,m,r.selection,t);var b,d,v=n.getSelection(),k=v.end,O=o.length,y=m.length,w=g.length;if(n.backspaceOrDeleteRemoval){var P="Delete"===n.backspaceOrDeleteRemoval.key;if(m=n.value,v=n.backspaceOrDeleteRemoval.selection,k=v.start,n.backspaceOrDeleteRemoval=null,v.length)m=l(n.maskOptions,m,v.start,v.length);else if(v.start<f.length||!P&&v.start===f.length)k=f.length;else{var E=P?n.getRightEditablePos(k):n.getLeftEditablePos(k-1);null!==E&&(m=l(n.maskOptions,m,E,1),k=E)}}else if(y>w){var C=y-w,D=v.end-C;d=m.substr(D,C),k=D<c&&(1!==C||d!==o[D])?n.getRightEditablePos(D):D,m=m.substr(0,D)+m.substr(D+C),b=l(n.maskOptions,m,D,O-D),b=p(n.maskOptions,b,d,k),m=p(n.maskOptions,g,d,k),1!==C||k>=f.length&&k<c?(k=Math.max(s(n.maskOptions,b),k))<c&&(k=n.getRightEditablePos(k)):k<c&&k++}else if(y<w){var R=O-y,S=(d=m.substr(0,v.end))===g.substr(0,v.end);b=l(n.maskOptions,g,v.end,R),i&&(m=p(n.maskOptions,b,d,0)),b=l(n.maskOptions,b,v.end,O-v.end),b=p(n.maskOptions,b,d,0),S?k<f.length&&(k=f.length):(k=Math.max(s(n.maskOptions,b),k))<c&&(k=n.getRightEditablePos(k))}m=u(n.maskOptions,m),n.setInputValue(m),"function"==typeof n.props.onChange&&n.props.onChange(t),n.isWindowsPhoneBrowser?h(function(){n.setSelection(k,0)}):n.setCursorPos(k)}}),Object.defineProperty(this,"onFocus",{configurable:!0,enumerable:!0,writable:!0,value:function(e){if(n.focused=!0,n.maskOptions.mask)if(n.value)s(n.maskOptions,n.value)<n.maskOptions.mask.length&&n.setCursorToEnd();else{var t=n.maskOptions.prefix,r=u(n.maskOptions,t),a=u(n.maskOptions,r),o=a!==e.target.value;o&&(e.target.value=a),n.value=a,o&&"function"==typeof n.props.onChange&&n.props.onChange(e),n.setCursorToEnd()}"function"==typeof n.props.onFocus&&n.props.onFocus(e)}}),Object.defineProperty(this,"onBlur",{configurable:!0,enumerable:!0,writable:!0,value:function(e){if(n.focused=!1,n.maskOptions.mask&&!n.props.alwaysShowMask&&o(n.maskOptions,n.value)){var t=""!==n.getInputValue();t&&n.setInputValue(""),t&&"function"==typeof n.props.onChange&&n.props.onChange(e)}"function"==typeof n.props.onBlur&&n.props.onBlur(e)}}),Object.defineProperty(this,"onMouseDown",{configurable:!0,enumerable:!0,writable:!0,value:function(e){if(!n.focused&&document.addEventListener){n.mouseDownX=e.clientX,n.mouseDownY=e.clientY,n.mouseDownTime=(new Date).getTime();document.addEventListener("mouseup",function t(e){if(document.removeEventListener("mouseup",t),n.focused){var r=Math.abs(e.clientX-n.mouseDownX),a=Math.abs(e.clientY-n.mouseDownY),o=Math.max(r,a),s=(new Date).getTime()-n.mouseDownTime;(o<=10&&s<=200||o<=5&&s<=300)&&n.setCursorToEnd()}})}"function"==typeof n.props.onMouseDown&&n.props.onMouseDown(e)}}),Object.defineProperty(this,"onPaste",{configurable:!0,enumerable:!0,writable:!0,value:function(e){"function"==typeof n.props.onPaste&&n.props.onPaste(e),n.isAndroidBrowser&&!e.defaultPrevented&&(n.paste={value:n.getInputValue(),selection:n.getSelection()},n.setInputValue(""))}}),Object.defineProperty(this,"pasteText",{configurable:!0,enumerable:!0,writable:!0,value:function(e,t,o,s){var i=o.start;o.length&&(e=l(n.maskOptions,e,i,o.length));var u=function(e,t,n,o){var s=e.mask,i=e.maskChar,u=n.split(""),l=o,p=function(t,n){return!r(e,t)||n===s[t]};return u.every(function(t){for(;!p(o,t);)if(++o>=s.length)return!1;return(a(e,o,t)||t===i)&&o++,o<s.length}),o-l}(n.maskOptions,0,t,i);e=p(n.maskOptions,e,t,i),i+=u,i=n.getRightEditablePos(i)||i,e!==n.getInputValue()&&(n.setInputValue(e),s&&"function"==typeof n.props.onChange&&n.props.onChange(s)),n.setCursorPos(i)}})};return m});