inputmask.numeric.extensions.min.js 12 KB

123456789
  1. /*!
  2. * inputmask.numeric.extensions.min.js
  3. * https://github.com/RobinHerbots/Inputmask
  4. * Copyright (c) 2010 - 2018 Robin Herbots
  5. * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
  6. * Version: 4.0.1-beta.37
  7. */
  8. !function(e){"function"==typeof define&&define.amd?define(["./inputmask"],e):"object"==typeof exports?module.exports=e(require("./inputmask")):e(window.Inputmask)}(function(m){var h=m.dependencyLib;function o(e,i){for(var r="",t=0;t<e.length;t++)m.prototype.definitions[e.charAt(t)]||i.definitions[e.charAt(t)]||i.optionalmarker.start===e.charAt(t)||i.optionalmarker.end===e.charAt(t)||i.quantifiermarker.start===e.charAt(t)||i.quantifiermarker.end===e.charAt(t)||i.groupmarker.start===e.charAt(t)||i.groupmarker.end===e.charAt(t)||i.alternatormarker===e.charAt(t)?r+="\\"+e.charAt(t):r+=e.charAt(t);return r}return m.extendAliases({numeric:{mask:function(e){if(0!==e.repeat&&isNaN(e.integerDigits)&&(e.integerDigits=e.repeat),e.repeat=0,e.groupSeparator===e.radixPoint&&e.digits&&"0"!==e.digits&&("."===e.radixPoint?e.groupSeparator=",":","===e.radixPoint?e.groupSeparator=".":e.groupSeparator="")," "===e.groupSeparator&&(e.skipOptionalPartCharacter=void 0),e.autoGroup=e.autoGroup&&""!==e.groupSeparator,e.autoGroup&&("string"==typeof e.groupSize&&isFinite(e.groupSize)&&(e.groupSize=parseInt(e.groupSize)),isFinite(e.integerDigits))){var i=Math.floor(e.integerDigits/e.groupSize),r=e.integerDigits%e.groupSize;e.integerDigits=parseInt(e.integerDigits)+(0===r?i-1:i),e.integerDigits<1&&(e.integerDigits="*")}1<e.placeholder.length&&(e.placeholder=e.placeholder.charAt(0)),"radixFocus"===e.positionCaretOnClick&&""===e.placeholder&&!1===e.integerOptional&&(e.positionCaretOnClick="lvp"),e.definitions[";"]=e.definitions["~"],e.definitions[";"].definitionSymbol="~",!0===e.numericInput&&(e.positionCaretOnClick="radixFocus"===e.positionCaretOnClick?"lvp":e.positionCaretOnClick,e.digitsOptional=!1,isNaN(e.digits)&&(e.digits=2),e.decimalProtect=!1);var t="[+]";if(t+=o(e.prefix,e),!0===e.integerOptional?t+="~{1,"+e.integerDigits+"}":t+="~{"+e.integerDigits+"}",void 0!==e.digits){var a=e.decimalProtect?":":e.radixPoint,n=e.digits.toString().split(",");isFinite(n[0])&&n[1]&&isFinite(n[1])?t+=a+";{"+e.digits+"}":(isNaN(e.digits)||0<parseInt(e.digits))&&(e.digitsOptional?t+="["+a+";{1,"+e.digits+"}]":t+=a+";{"+e.digits+"}")}return t+=o(e.suffix,e),t+="[-]",e.greedy=!1,t},placeholder:"",greedy:!1,digits:"*",digitsOptional:!0,enforceDigitsOnBlur:!1,radixPoint:".",positionCaretOnClick:"radixFocus",groupSize:3,groupSeparator:"",autoGroup:!1,allowMinus:!0,negationSymbol:{front:"-",back:""},integerDigits:"+",integerOptional:!0,prefix:"",suffix:"",rightAlign:!0,decimalProtect:!0,min:null,max:null,step:1,insertMode:!0,autoUnmask:!1,unmaskAsNumber:!1,inputmode:"numeric",preValidation:function(e,i,r,t,a,n){if("-"===r||r===a.negationSymbol.front)return!0===a.allowMinus&&(a.isNegative=void 0===a.isNegative||!a.isNegative,""===e.join("")||{caret:n.validPositions[i]?i:void 0,dopost:!0});if(!1===t&&r===a.radixPoint&&void 0!==a.digits&&(isNaN(a.digits)||0<parseInt(a.digits))){var o=h.inArray(a.radixPoint,e);if(-1!==o&&void 0!==n.validPositions[o])return!0===a.numericInput?i===o:{caret:o+1}}return!0},postValidation:function(e,i,r,t){var a=t.suffix.split(""),n=t.prefix.split("");if(void 0===r.pos&&void 0!==r.caret&&!0!==r.dopost)return r;var o=void 0!==r.caret?r.caret:r.pos,p=e.slice();t.numericInput&&(o=p.length-o-1,p=p.reverse());var s=p[o];if(s===t.groupSeparator&&(s=p[o+=1]),o===p.length-t.suffix.length-1&&s===t.radixPoint)return r;void 0!==s&&s!==t.radixPoint&&s!==t.negationSymbol.front&&s!==t.negationSymbol.back&&(p[o]="?",0<t.prefix.length&&o>=(!1===t.isNegative?1:0)&&o<t.prefix.length-1+(!1===t.isNegative?1:0)?n[o-(!1===t.isNegative?1:0)]="?":0<t.suffix.length&&o>=p.length-t.suffix.length-(!1===t.isNegative?1:0)&&(a[o-(p.length-t.suffix.length-(!1===t.isNegative?1:0))]="?")),n=n.join(""),a=a.join("");var l=p.join("").replace(n,"");if(l=(l=(l=(l=l.replace(a,"")).replace(new RegExp(m.escapeRegex(t.groupSeparator),"g"),"")).replace(new RegExp("[-"+m.escapeRegex(t.negationSymbol.front)+"]","g"),"")).replace(new RegExp(m.escapeRegex(t.negationSymbol.back)+"$"),""),isNaN(t.placeholder)&&(l=l.replace(new RegExp(m.escapeRegex(t.placeholder),"g"),"")),1<l.length&&1!==l.indexOf(t.radixPoint)&&("0"===s&&(l=l.replace(/^\?/g,"")),l=l.replace(/^0/g,"")),l.charAt(0)===t.radixPoint&&""!==t.radixPoint&&!0!==t.numericInput&&(l="0"+l),""!==l){if(l=l.split(""),(!t.digitsOptional||t.enforceDigitsOnBlur&&"blur"===r.event)&&isFinite(t.digits)){var g=h.inArray(t.radixPoint,l),c=h.inArray(t.radixPoint,p);-1===g&&(l.push(t.radixPoint),g=l.length-1);for(var d=1;d<=t.digits;d++)t.digitsOptional&&(!t.enforceDigitsOnBlur||"blur"!==r.event)||void 0!==l[g+d]&&l[g+d]!==t.placeholder.charAt(0)?-1!==c&&void 0!==p[c+d]&&(l[g+d]=l[g+d]||p[c+d]):l[g+d]=r.placeholder||t.placeholder.charAt(0)}if(!0!==t.autoGroup||""===t.groupSeparator||s===t.radixPoint&&void 0===r.pos&&!r.dopost)l=l.join("");else{var u=l[l.length-1]===t.radixPoint&&r.c===t.radixPoint;l=m(function(e,i){var r="";if(r+="("+i.groupSeparator+"*{"+i.groupSize+"}){*}",""!==i.radixPoint){var t=e.join("").split(i.radixPoint);t[1]&&(r+=i.radixPoint+"*{"+t[1].match(/^\d*\??\d*/)[0].length+"}")}return r}(l,t),{numericInput:!0,jitMasking:!0,definitions:{"*":{validator:"[0-9?]",cardinality:1}}}).format(l.join("")),u&&(l+=t.radixPoint),l.charAt(0)===t.groupSeparator&&l.substr(1)}}if(t.isNegative&&"blur"===r.event&&(t.isNegative="0"!==l),l=n+l,l+=a,t.isNegative&&(l=t.negationSymbol.front+l,l+=t.negationSymbol.back),l=l.split(""),void 0!==s)if(s!==t.radixPoint&&s!==t.negationSymbol.front&&s!==t.negationSymbol.back)-1<(o=h.inArray("?",l))?l[o]=s:o=r.caret||0;else if(s===t.radixPoint||s===t.negationSymbol.front||s===t.negationSymbol.back){var x=h.inArray(s,l);-1!==x&&(o=x)}t.numericInput&&(o=l.length-o-1,l=l.reverse());var f={caret:void 0!==s&&void 0===r.pos||void 0===o?o:o+(t.numericInput?-1:1),buffer:l,refreshFromBuffer:r.dopost||e.join("")!==l.join("")};return f.refreshFromBuffer?f:r},onBeforeWrite:function(e,i,r,t){if(e)switch(e.type){case"keydown":return t.postValidation(i,r,{caret:r,dopost:!0},t);case"blur":case"checkval":var a;if(void 0===(n=t).parseMinMaxOptions&&(null!==n.min&&(n.min=n.min.toString().replace(new RegExp(m.escapeRegex(n.groupSeparator),"g"),""),","===n.radixPoint&&(n.min=n.min.replace(n.radixPoint,".")),n.min=isFinite(n.min)?parseFloat(n.min):NaN,isNaN(n.min)&&(n.min=Number.MIN_VALUE)),null!==n.max&&(n.max=n.max.toString().replace(new RegExp(m.escapeRegex(n.groupSeparator),"g"),""),","===n.radixPoint&&(n.max=n.max.replace(n.radixPoint,".")),n.max=isFinite(n.max)?parseFloat(n.max):NaN,isNaN(n.max)&&(n.max=Number.MAX_VALUE)),n.parseMinMaxOptions="done"),null!==t.min||null!==t.max){if(a=t.onUnMask(i.join(""),void 0,h.extend({},t,{unmaskAsNumber:!0})),null!==t.min&&a<t.min)return t.isNegative=t.min<0,t.postValidation(t.min.toString().replace(".",t.radixPoint).split(""),r,{caret:r,dopost:!0,placeholder:"0"},t);if(null!==t.max&&a>t.max)return t.isNegative=t.max<0,t.postValidation(t.max.toString().replace(".",t.radixPoint).split(""),r,{caret:r,dopost:!0,placeholder:"0"},t)}return t.postValidation(i,r,{caret:r,placeholder:"0",event:"blur"},t);case"_checkval":return{caret:r}}var n},regex:{integerPart:function(e,i){return i?new RegExp("["+m.escapeRegex(e.negationSymbol.front)+"+]?"):new RegExp("["+m.escapeRegex(e.negationSymbol.front)+"+]?\\d+")},integerNPart:function(e){return new RegExp("[\\d"+m.escapeRegex(e.groupSeparator)+m.escapeRegex(e.placeholder.charAt(0))+"]+")}},definitions:{"~":{validator:function(e,i,r,t,a,n){var o;if("k"===e||"m"===e){o={insert:[],c:0};for(var p=0,s="k"===e?2:5;p<s;p++)o.insert.push({pos:r+p,c:0});return o.pos=r+s,o}if(!0===(o=t?new RegExp("[0-9"+m.escapeRegex(a.groupSeparator)+"]").test(e):new RegExp("[0-9]").test(e))){if(!0!==a.numericInput&&void 0!==i.validPositions[r]&&"~"===i.validPositions[r].match.def&&!n){var l=i.buffer.join(""),g=(l=(l=l.replace(new RegExp("[-"+m.escapeRegex(a.negationSymbol.front)+"]","g"),"")).replace(new RegExp(m.escapeRegex(a.negationSymbol.back)+"$"),"")).split(a.radixPoint);1<g.length&&(g[1]=g[1].replace(/0/g,a.placeholder.charAt(0))),"0"===g[0]&&(g[0]=g[0].replace(/0/g,a.placeholder.charAt(0))),l=g[0]+a.radixPoint+g[1]||"";var c=i._buffer.join("");for(l===a.radixPoint&&(l=c);null===l.match(m.escapeRegex(c)+"$");)c=c.slice(1);o=void 0===(l=(l=l.replace(c,"")).split(""))[r]?{pos:r,remove:r}:{pos:r}}}else t||e!==a.radixPoint||void 0!==i.validPositions[r-1]||(o={insert:{pos:r,c:0},pos:r+1});return o},cardinality:1},"+":{validator:function(e,i,r,t,a){return a.allowMinus&&("-"===e||e===a.negationSymbol.front)},cardinality:1,placeholder:""},"-":{validator:function(e,i,r,t,a){return a.allowMinus&&e===a.negationSymbol.back},cardinality:1,placeholder:""},":":{validator:function(e,i,r,t,a){var n="["+m.escapeRegex(a.radixPoint)+"]",o=new RegExp(n).test(e);return o&&i.validPositions[r]&&i.validPositions[r].match.placeholder===a.radixPoint&&(o={caret:r+1}),o},cardinality:1,placeholder:function(e){return e.radixPoint}}},onUnMask:function(e,i,r){if(""===i&&!0===r.nullable)return i;var t=e.replace(r.prefix,"");return t=(t=t.replace(r.suffix,"")).replace(new RegExp(m.escapeRegex(r.groupSeparator),"g"),""),""!==r.placeholder.charAt(0)&&(t=t.replace(new RegExp(r.placeholder.charAt(0),"g"),"0")),r.unmaskAsNumber?(""!==r.radixPoint&&-1!==t.indexOf(r.radixPoint)&&(t=t.replace(m.escapeRegex.call(this,r.radixPoint),".")),t=(t=t.replace(new RegExp("^"+m.escapeRegex(r.negationSymbol.front)),"-")).replace(new RegExp(m.escapeRegex(r.negationSymbol.back)+"$"),""),Number(t)):t},isComplete:function(e,i){var r=(i.numericInput?e.slice().reverse():e).join("");return r=(r=(r=(r=(r=r.replace(new RegExp("^"+m.escapeRegex(i.negationSymbol.front)),"-")).replace(new RegExp(m.escapeRegex(i.negationSymbol.back)+"$"),"")).replace(i.prefix,"")).replace(i.suffix,"")).replace(new RegExp(m.escapeRegex(i.groupSeparator)+"([0-9]{3})","g"),"$1"),","===i.radixPoint&&(r=r.replace(m.escapeRegex(i.radixPoint),".")),isFinite(r)},onBeforeMask:function(e,i){if(i.isNegative=void 0,"number"==typeof e&&""!==i.radixPoint&&(e=e.toString().replace(".",i.radixPoint)),e=e.toString().charAt(e.length-1)===i.radixPoint?e.toString().substr(0,e.length-1):e.toString(),""!==i.radixPoint&&isFinite(e)){var r=e.split("."),t=""!==i.groupSeparator?parseInt(i.groupSize):0;2===r.length&&(r[0].length>t||r[1].length>t||r[0].length<=t&&r[1].length<t)&&(e=e.replace(".",i.radixPoint))}var a=e.match(/,/g),n=e.match(/\./g);if(e=n&&a?n.length>a.length?(e=e.replace(/\./g,"")).replace(",",i.radixPoint):a.length>n.length?(e=e.replace(/,/g,"")).replace(".",i.radixPoint):e.indexOf(".")<e.indexOf(",")?e.replace(/\./g,""):e.replace(/,/g,""):e.replace(new RegExp(m.escapeRegex(i.groupSeparator),"g"),""),0===i.digits&&(-1!==e.indexOf(".")?e=e.substring(0,e.indexOf(".")):-1!==e.indexOf(",")&&(e=e.substring(0,e.indexOf(",")))),""!==i.radixPoint&&isFinite(i.digits)&&-1!==e.indexOf(i.radixPoint)){var o=e.split(i.radixPoint)[1].match(new RegExp("\\d*"))[0];if(parseInt(i.digits)<o.toString().length){var p=Math.pow(10,parseInt(i.digits));e=e.replace(m.escapeRegex(i.radixPoint),"."),e=(e=Math.round(parseFloat(e)*p)/p).toString().replace(".",i.radixPoint)}}return function(e,i){if(i.numericInput){var r=h.inArray(i.radixPoint,e);-1===r&&(e.push(i.radixPoint),r=e.length-1);for(var t=1;t<=i.digits;t++)e[r+t]=e[r+t]||"0"}return e}(e.toString().split(""),i).join("")},onKeyDown:function(e,i,r,t){var a=h(this);if(e.ctrlKey)switch(e.keyCode){case m.keyCode.UP:a.val(parseFloat(this.inputmask.unmaskedvalue())+parseInt(t.step)),a.trigger("setvalue");break;case m.keyCode.DOWN:a.val(parseFloat(this.inputmask.unmaskedvalue())-parseInt(t.step)),a.trigger("setvalue")}}},currency:{prefix:"$ ",groupSeparator:",",alias:"numeric",placeholder:"0",autoGroup:!0,digits:2,digitsOptional:!1,clearMaskOnLostFocus:!1},decimal:{alias:"numeric"},integer:{alias:"numeric",digits:0,radixPoint:""},percentage:{alias:"numeric",digits:2,digitsOptional:!0,radixPoint:".",placeholder:"0",autoGroup:!1,min:0,max:100,suffix:" %",allowMinus:!1}}),m});