浏览代码

add inputtype to numeric aliases #2022

Robin Herbots 7 年之前
父节点
当前提交
5718866864
共有 29 个文件被更改,包括 171 次插入196 次删除
  1. 19 15
      CHANGELOG.md
  2. 36 0
      README_numeric.md
  3. 1 1
      bower.json
  4. 1 1
      composer.json
  5. 1 1
      dist/inputmask/bindings/inputmask.binding.js
  6. 1 1
      dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js
  7. 1 1
      dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js
  8. 1 1
      dist/inputmask/dependencyLibs/inputmask.dependencyLib.js
  9. 1 1
      dist/inputmask/global/window.js
  10. 1 1
      dist/inputmask/inputmask.date.extensions.js
  11. 1 1
      dist/inputmask/inputmask.extensions.js
  12. 2 4
      dist/inputmask/inputmask.js
  13. 21 40
      dist/inputmask/inputmask.numeric.extensions.js
  14. 1 1
      dist/inputmask/jquery.inputmask.js
  15. 22 43
      dist/jquery.inputmask.bundle.js
  16. 1 1
      dist/min/inputmask/bindings/inputmask.binding.min.js
  17. 1 1
      dist/min/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.min.js
  18. 1 1
      dist/min/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.min.js
  19. 1 1
      dist/min/inputmask/dependencyLibs/inputmask.dependencyLib.min.js
  20. 1 1
      dist/min/inputmask/global/window.min.js
  21. 1 1
      dist/min/inputmask/inputmask.date.extensions.min.js
  22. 1 1
      dist/min/inputmask/inputmask.extensions.min.js
  23. 2 2
      dist/min/inputmask/inputmask.min.js
  24. 2 2
      dist/min/inputmask/inputmask.numeric.extensions.min.js
  25. 1 1
      dist/min/inputmask/jquery.inputmask.min.js
  26. 2 2
      dist/min/jquery.inputmask.bundle.min.js
  27. 25 57
      js/inputmask.numeric.extensions.js
  28. 1 1
      package.json
  29. 21 12
      qunit/tests_numeric.js

+ 19 - 15
CHANGELOG.md

@@ -2,6 +2,10 @@
 
 ## [UNRELEASED]
 
+### Addition
+- numeric.extensions - add inputType option to specify the type of initial value
+- README_numeric.md => Setting initial values
+
 ### Updates
 
 ### Fixed
@@ -35,7 +39,7 @@
 - Autofill corrupts input on email mask #1908(gl)
 
 ## [4.0.0 - 2018-05-26]
-### added
+### Addition
 - add support for beforeInput event with inputType (Input Events Level 2 - https://w3c.github.io/input-events/)
 - extend positionCaretOnClick with "ignore" to ignore the click in the input
 - jit enabled dynamic masks
@@ -101,8 +105,8 @@ while there are already many enhancements available.
 - Can't input character at the end if it's also a placeholder on Android #1648
 
 ## [3.3.8 - 2017-08-24]
-### added
-- added \uFF11-\uFF19 character range to 9 definition #1606
+### Addition
+- Addition \uFF11-\uFF19 character range to 9 definition #1606
 - importDataAttributes option #1633
 - add dot support in regex #1651
 
@@ -125,7 +129,7 @@ while there are already many enhancements available.
 - Cannot delete after fill up all the mask Android Chrome browser Jsfiddle #1637
 
 ## [3.3.7 - 2017-06-09]
-### added
+### Addition
 - allow custom operation in casing option by callback #1565
 
 ### Updates
@@ -143,7 +147,7 @@ while there are already many enhancements available.
 - ndxInitializer.shift is not a function
 
 ## [3.3.6 - 2017-05-11]
-### added
+### Addition
 - noValuePatching option #1276
 
 ### Updates
@@ -164,7 +168,7 @@ while there are already many enhancements available.
 - 29 february of non leap-year #1567
 
 ## [3.3.5 - 2017-04-10]
-### Added
+### Addition
 - add example webpack setup (thx to Kevin Suen)
 - build-in regex support without extension (WIP)
 
@@ -197,7 +201,7 @@ while there are already many enhancements available.
 - Form can`t submitted with input[name=disabled] #1473
 
 ## [3.3.4 - 2016-12-22]
-### Added
+### Addition
 - extra extension points: analyseMask
 - colorMask option ~ css styleable mask
 
@@ -244,7 +248,7 @@ while there are already many enhancements available.
 
 ## [3.3.2 - 2016-09-09]
 
-### Added
+### Addition
 - mask-level casing => #1352
 - 'casing': 'title' #1277
 - add quantifier syntax for digits option in numeric alias. #1374
@@ -294,7 +298,7 @@ while there are already many enhancements available.
 
 ## [3.3.0] - 2016-04-05
 
-### Added
+### Addition
 - nullable option => switch to return the placeholder or null when nothing is entered
 - VIN mask #1199
 
@@ -356,7 +360,7 @@ while there are already many enhancements available.
 - fixed "valids is not defined" error #1166
 
 ## [3.2.6] - 2016-01-25
-### Added
+### Addition
 - add jitMasking option
 - supportsInputType option
 - staticDefinitionSymbol (see readme)
@@ -420,7 +424,7 @@ while there are already many enhancements available.
 
 ## [3.2.3] - 2015-11-09
 
-### Added
+### Addition
 - Inputmask.remove
 - inputmask.binding => automated inputmask binding for html attributes
 - Add tooltip option
@@ -449,7 +453,7 @@ while there are already many enhancements available.
 
 ## [3.2.1] - 2015-10-07
 
-### Added
+### Addition
 - inputmask.dependencyLib.jquery
 - inputmask.dependencyLib.jqlite
 
@@ -475,7 +479,7 @@ while there are already many enhancements available.
 
 ## [3.2.0] - 2015-09-04
 
-### Added
+### Addition
 - add option command to set and retrieve options on an inputmask
 - dependencyLib wrapper around needed jQuery functionality
 - mac address alias #986
@@ -547,7 +551,7 @@ while there are already many enhancements available.
 - Script looping start when add '.' between decimal values #870 ('.' part)
 
 ## [3.1.63] - 2015-05-04
-### Added
+### Addition
 - Support for CommonJS (Browserify)
 
 ### Updates
@@ -569,7 +573,7 @@ while there are already many enhancements available.
 - Phone extention backspace problem #454
 
 ## [3.1.62] - 2015-03-26
-### Added
+### Addition
 - Numeric alias: add unmaskAsNumber option
 - import russian phone codes from inputmask-multi
 - enable masking the text content in a div

+ 36 - 0
README_numeric.md

@@ -81,3 +81,39 @@ Be warned that using the unmaskAsNumber option together with jQuery.serialize wi
 
 
 [#1288]: https://github.com/RobinHerbots/jquery.inputmask/issues/1288
+
+
+### inputType
+Indicates whether the value passed for initialization is text or a number
+
+Default: "text"
+
+
+### Setting initial values
+
+When initializing the mask with a value, you need to take some rules into account.
+Depending of the option inputType the value will be interpreted as text or as a number.
+
+When inputType is text, the symbol of the radixPoint must be correct.  When using number the . (dot) is used as radixpoint.
+
+Setting a number will always work when using vanilla javascript setters.
+
+Example with komma (,) as radixpoint
+```
+/html
+<input name="npt" value="123456,789"/>
+
+//js
+Inputmask("decimal", {
+    radixPoint: ',',
+    inputtype: "text"
+}).mask("input");
+
+$("input").val("123456,789");
+$("input").val(123456.789); //this doesn't work because jQuery converts the number to a string
+before passing it along to the Inputmask.
+
+document.getElementsByName("npt")[0].value = "123456,789";
+document.getElementsByName("npt")[0].value = 123456.789; //type number
+
+```

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "inputmask",
-  "version": "4.0.3-beta.3",
+  "version": "4.0.3-beta.4",
   "main": [
 	  "./index.js",
     "./css/inputmask.css"

+ 1 - 1
composer.json

@@ -1,7 +1,7 @@
 {
   "name": "robinherbots/inputmask",
   "description": "Inputmask is a javascript library which creates an input mask.  Inputmask can run against vanilla javascript, jQuery and jqlite.",
-  "version": "4.0.3-beta.3",
+  "version": "4.0.3-beta.4",
   "type": "library",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "homepage": "http://robinherbots.github.io/Inputmask",

+ 1 - 1
dist/inputmask/bindings/inputmask.binding.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory) {

+ 1 - 1
dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory) {

+ 1 - 1
dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory) {

+ 1 - 1
dist/inputmask/dependencyLibs/inputmask.dependencyLib.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory) {

+ 1 - 1
dist/inputmask/global/window.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 if (typeof define === "function" && define.amd) define(function() {

+ 1 - 1
dist/inputmask/inputmask.date.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory) {

+ 1 - 1
dist/inputmask/inputmask.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory) {

+ 2 - 4
dist/inputmask/inputmask.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory) {
@@ -1388,6 +1388,7 @@
             return result;
         }
         function trackbackPositions(originalPos, newPos, fillOnly) {
+            console.log("trackbackPositions");
             var result;
             if (originalPos === undefined) {
                 for (originalPos = newPos - 1; originalPos > 0; originalPos--) {
@@ -1516,9 +1517,6 @@
             tests.length < 2 || tests.length === 2 && tests[1].match.def === ""))) {}
             return position;
         }
-        function getBufferElement(position) {
-            return getMaskSet().validPositions[position] === undefined ? getPlaceholder(position) : getMaskSet().validPositions[position].input;
-        }
         function writeBuffer(input, buffer, caretPos, event, triggerEvents) {
             if (event && $.isFunction(opts.onBeforeWrite)) {
                 var result = opts.onBeforeWrite.call(inputmask, event, buffer, caretPos, opts);

+ 21 - 40
dist/inputmask/inputmask.numeric.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory) {
@@ -129,6 +129,7 @@
             insertMode: true,
             autoUnmask: false,
             unmaskAsNumber: false,
+            inputType: "text",
             inputmode: "numeric",
             preValidation: function(buffer, pos, c, isSelection, opts, maskset) {
                 if (c === "-" || c === opts.negationSymbol.front) {
@@ -475,49 +476,29 @@
             },
             onBeforeMask: function(initialValue, opts) {
                 opts.isNegative = undefined;
-                if (typeof initialValue == "number" && opts.radixPoint !== "") {
-                    initialValue = initialValue.toString().replace(".", opts.radixPoint);
-                }
-                initialValue = initialValue.toString().charAt(initialValue.length - 1) === opts.radixPoint ? initialValue.toString().substr(0, initialValue.length - 1) : initialValue.toString();
-                if (opts.radixPoint !== "" && isFinite(initialValue)) {
-                    var vs = initialValue.split("."), groupSize = opts.groupSeparator !== "" ? parseInt(opts.groupSize) : 0;
-                    if (vs.length === 2 && (vs[0].length > groupSize || vs[1].length > groupSize || vs[0].length <= groupSize && vs[1].length < groupSize)) {
-                        initialValue = initialValue.replace(".", opts.radixPoint);
-                    }
-                }
-                var kommaMatches = initialValue.match(/,/g);
-                var dotMatches = initialValue.match(/\./g);
-                if (dotMatches && kommaMatches) {
-                    if (dotMatches.length > kommaMatches.length) {
-                        initialValue = initialValue.replace(/\./g, "");
-                        initialValue = initialValue.replace(",", opts.radixPoint);
-                    } else if (kommaMatches.length > dotMatches.length) {
-                        initialValue = initialValue.replace(/,/g, "");
-                        initialValue = initialValue.replace(".", opts.radixPoint);
-                    } else {
-                        initialValue = initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue.replace(/,/g, "");
-                    }
-                } else {
-                    initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "");
+                var radixPoint = opts.radixPoint || ",";
+                if ((typeof initialValue == "number" || opts.inputType === "number") && radixPoint !== "") {
+                    initialValue = initialValue.toString().replace(".", radixPoint);
                 }
+                var valueParts = initialValue.split(radixPoint), integerPart = valueParts[0].replace(/[^\-0-9]/g, ""), decimalPart = valueParts.length > 1 ? valueParts[1].replace(/[^0-9]/g, "") : "";
+                initialValue = integerPart + (decimalPart !== "" ? radixPoint + decimalPart : decimalPart);
                 var digits = 0;
-                if (opts.radixPoint !== "" && initialValue.indexOf(opts.radixPoint) !== -1) {
-                    var valueParts = initialValue.split(opts.radixPoint), digits = valueParts[1].match(new RegExp("\\d*"))[0].length, digitsFactor = Math.pow(10, digits || 1);
-                    if (isFinite(opts.digits)) {
-                        digits = parseInt(opts.digits);
-                        digitsFactor = Math.pow(10, digits);
-                    }
-                    initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".");
-                    if (isFinite(initialValue)) initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;
-                    initialValue = initialValue.toString().replace(".", opts.radixPoint);
-                }
-                if (opts.digits === 0) {
-                    if (initialValue.indexOf(".") !== -1) {
-                        initialValue = initialValue.substring(0, initialValue.indexOf("."));
-                    } else if (initialValue.indexOf(",") !== -1) {
-                        initialValue = initialValue.substring(0, initialValue.indexOf(","));
+                if (radixPoint !== "") {
+                    digits = decimalPart.length;
+                    if (decimalPart !== "") {
+                        var digitsFactor = Math.pow(10, digits || 1);
+                        if (isFinite(opts.digits)) {
+                            digits = parseInt(opts.digits);
+                            digitsFactor = Math.pow(10, digits);
+                        }
+                        initialValue = initialValue.replace(Inputmask.escapeRegex(radixPoint), ".");
+                        if (isFinite(initialValue)) initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;
+                        initialValue = initialValue.toString().replace(".", radixPoint);
                     }
                 }
+                if (opts.digits === 0 && initialValue.indexOf(Inputmask.escapeRegex(radixPoint)) !== -1) {
+                    initialValue = initialValue.substring(0, initialValue.indexOf(Inputmask.escapeRegex(radixPoint)));
+                }
                 return alignDigits(initialValue.toString().split(""), digits, opts).join("");
             },
             onKeyDown: function(e, buffer, caretPos, opts) {

+ 1 - 1
dist/inputmask/jquery.inputmask.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory) {

+ 22 - 43
dist/jquery.inputmask.bundle.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(modules) {
@@ -1579,6 +1579,7 @@
                 return result;
             }
             function trackbackPositions(originalPos, newPos, fillOnly) {
+                console.log("trackbackPositions");
                 var result;
                 if (originalPos === undefined) {
                     for (originalPos = newPos - 1; originalPos > 0; originalPos--) {
@@ -1707,9 +1708,6 @@
                 tests.length < 2 || tests.length === 2 && tests[1].match.def === ""))) {}
                 return position;
             }
-            function getBufferElement(position) {
-                return getMaskSet().validPositions[position] === undefined ? getPlaceholder(position) : getMaskSet().validPositions[position].input;
-            }
             function writeBuffer(input, buffer, caretPos, event, triggerEvents) {
                 if (event && $.isFunction(opts.onBeforeWrite)) {
                     var result = opts.onBeforeWrite.call(inputmask, event, buffer, caretPos, opts);
@@ -3345,6 +3343,7 @@
                 insertMode: true,
                 autoUnmask: false,
                 unmaskAsNumber: false,
+                inputType: "text",
                 inputmode: "numeric",
                 preValidation: function preValidation(buffer, pos, c, isSelection, opts, maskset) {
                     if (c === "-" || c === opts.negationSymbol.front) {
@@ -3691,49 +3690,29 @@
                 },
                 onBeforeMask: function onBeforeMask(initialValue, opts) {
                     opts.isNegative = undefined;
-                    if (typeof initialValue == "number" && opts.radixPoint !== "") {
-                        initialValue = initialValue.toString().replace(".", opts.radixPoint);
-                    }
-                    initialValue = initialValue.toString().charAt(initialValue.length - 1) === opts.radixPoint ? initialValue.toString().substr(0, initialValue.length - 1) : initialValue.toString();
-                    if (opts.radixPoint !== "" && isFinite(initialValue)) {
-                        var vs = initialValue.split("."), groupSize = opts.groupSeparator !== "" ? parseInt(opts.groupSize) : 0;
-                        if (vs.length === 2 && (vs[0].length > groupSize || vs[1].length > groupSize || vs[0].length <= groupSize && vs[1].length < groupSize)) {
-                            initialValue = initialValue.replace(".", opts.radixPoint);
-                        }
-                    }
-                    var kommaMatches = initialValue.match(/,/g);
-                    var dotMatches = initialValue.match(/\./g);
-                    if (dotMatches && kommaMatches) {
-                        if (dotMatches.length > kommaMatches.length) {
-                            initialValue = initialValue.replace(/\./g, "");
-                            initialValue = initialValue.replace(",", opts.radixPoint);
-                        } else if (kommaMatches.length > dotMatches.length) {
-                            initialValue = initialValue.replace(/,/g, "");
-                            initialValue = initialValue.replace(".", opts.radixPoint);
-                        } else {
-                            initialValue = initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue.replace(/,/g, "");
-                        }
-                    } else {
-                        initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "");
+                    var radixPoint = opts.radixPoint || ",";
+                    if ((typeof initialValue == "number" || opts.inputType === "number") && radixPoint !== "") {
+                        initialValue = initialValue.toString().replace(".", radixPoint);
                     }
+                    var valueParts = initialValue.split(radixPoint), integerPart = valueParts[0].replace(/[^\-0-9]/g, ""), decimalPart = valueParts.length > 1 ? valueParts[1].replace(/[^0-9]/g, "") : "";
+                    initialValue = integerPart + (decimalPart !== "" ? radixPoint + decimalPart : decimalPart);
                     var digits = 0;
-                    if (opts.radixPoint !== "" && initialValue.indexOf(opts.radixPoint) !== -1) {
-                        var valueParts = initialValue.split(opts.radixPoint), digits = valueParts[1].match(new RegExp("\\d*"))[0].length, digitsFactor = Math.pow(10, digits || 1);
-                        if (isFinite(opts.digits)) {
-                            digits = parseInt(opts.digits);
-                            digitsFactor = Math.pow(10, digits);
-                        }
-                        initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".");
-                        if (isFinite(initialValue)) initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;
-                        initialValue = initialValue.toString().replace(".", opts.radixPoint);
-                    }
-                    if (opts.digits === 0) {
-                        if (initialValue.indexOf(".") !== -1) {
-                            initialValue = initialValue.substring(0, initialValue.indexOf("."));
-                        } else if (initialValue.indexOf(",") !== -1) {
-                            initialValue = initialValue.substring(0, initialValue.indexOf(","));
+                    if (radixPoint !== "") {
+                        digits = decimalPart.length;
+                        if (decimalPart !== "") {
+                            var digitsFactor = Math.pow(10, digits || 1);
+                            if (isFinite(opts.digits)) {
+                                digits = parseInt(opts.digits);
+                                digitsFactor = Math.pow(10, digits);
+                            }
+                            initialValue = initialValue.replace(Inputmask.escapeRegex(radixPoint), ".");
+                            if (isFinite(initialValue)) initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;
+                            initialValue = initialValue.toString().replace(".", radixPoint);
                         }
                     }
+                    if (opts.digits === 0 && initialValue.indexOf(Inputmask.escapeRegex(radixPoint)) !== -1) {
+                        initialValue = initialValue.substring(0, initialValue.indexOf(Inputmask.escapeRegex(radixPoint)));
+                    }
                     return alignDigits(initialValue.toString().split(""), digits, opts).join("");
                 },
                 onKeyDown: function onKeyDown(e, buffer, caretPos, opts) {

文件差异内容过多而无法显示
+ 1 - 1
dist/min/inputmask/bindings/inputmask.binding.min.js


文件差异内容过多而无法显示
+ 1 - 1
dist/min/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.min.js


+ 1 - 1
dist/min/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.min.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 (function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof exports==="object"){module.exports=factory(require("jquery"))}else{window.dependencyLib=factory(jQuery)}})(function($){return $});

文件差异内容过多而无法显示
+ 1 - 1
dist/min/inputmask/dependencyLibs/inputmask.dependencyLib.min.js


+ 1 - 1
dist/min/inputmask/global/window.min.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2018 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 4.0.3-beta.3
+* Version: 4.0.3-beta.4
 */
 
 if(typeof define==="function"&&define.amd)define(function(){return window||new(eval("require('jsdom')")("").window)});else if(typeof exports==="object")module.exports=window||new(eval("require('jsdom')")("").window);

文件差异内容过多而无法显示
+ 1 - 1
dist/min/inputmask/inputmask.date.extensions.min.js


文件差异内容过多而无法显示
+ 1 - 1
dist/min/inputmask/inputmask.extensions.min.js


文件差异内容过多而无法显示
+ 2 - 2
dist/min/inputmask/inputmask.min.js


文件差异内容过多而无法显示
+ 2 - 2
dist/min/inputmask/inputmask.numeric.extensions.min.js


文件差异内容过多而无法显示
+ 1 - 1
dist/min/inputmask/jquery.inputmask.min.js


文件差异内容过多而无法显示
+ 2 - 2
dist/min/jquery.inputmask.bundle.min.js


+ 25 - 57
js/inputmask.numeric.extensions.js

@@ -155,6 +155,7 @@
             insertMode: true,
             autoUnmask: false,
             unmaskAsNumber: false,
+            inputType: "text", //number ~ indicates whether the value passed for initialization is text or a number
             inputmode: "numeric",
             preValidation: function (buffer, pos, c, isSelection, opts, maskset) {
                 if (c === "-" || c === opts.negationSymbol.front) {
@@ -539,72 +540,39 @@
             },
             onBeforeMask: function (initialValue, opts) {
                 opts.isNegative = undefined;
+                var radixPoint = opts.radixPoint || ",";
 
-                if (typeof initialValue == "number" && opts.radixPoint !== "") {
-                    initialValue = initialValue.toString().replace(".", opts.radixPoint);
+                if ((typeof initialValue == "number" || opts.inputType === "number") && radixPoint !== "") {
+                    initialValue = initialValue.toString().replace(".", radixPoint);
                 }
 
-                initialValue = initialValue.toString().charAt(initialValue.length - 1) === opts.radixPoint ?
-                    initialValue.toString().substr(0, initialValue.length - 1) : initialValue.toString();
+                var valueParts = initialValue.split(radixPoint),
+                    integerPart = valueParts[0].replace(/[^\-0-9]/g, ""),
+                    decimalPart = valueParts.length > 1 ? valueParts[1].replace(/[^0-9]/g, "") : "";
 
-                if (opts.radixPoint !== "" && isFinite(initialValue)) {
-                    var vs = initialValue.split("."),
-                        groupSize = opts.groupSeparator !== "" ? parseInt(opts.groupSize) : 0;
-                    if (vs.length === 2 && (vs[0].length > groupSize || vs[1].length > groupSize || (vs[0].length <= groupSize && vs[1].length < groupSize))) {
-                        initialValue = initialValue.replace(".", opts.radixPoint);
-                    }
-                }
-                var kommaMatches = initialValue.match(/,/g) || [],
-                    dotMatches = initialValue.match(/\./g) || [];
-                if (dotMatches.length > kommaMatches.length && kommaMatches.length !== 0) {
-                    initialValue = initialValue.replace(/\./g, "");
-                    if (opts.radixPoint !== "")
-                        initialValue = initialValue.replace(",", opts.radixPoint);
-                } else if (kommaMatches.length > dotMatches.length && dotMatches.length !== 0) {
-                    initialValue = initialValue.replace(/,/g, "");
-                    if (opts.radixPoint !== "")
-                        initialValue = initialValue.replace(".", opts.radixPoint);
-                } else if (kommaMatches === dotMatches) {
-                    if (initialValue.indexOf(".") < initialValue.indexOf(",")) {
-                        initialValue = initialValue.replace(/\./g, "");
-                        if (opts.radixPoint !== "")
-                            initialValue = initialValue.replace(",", opts.radixPoint);
-                    } else {
-                        initialValue = initialValue.replace(/,/g, "");
-                        if (opts.radixPoint !== "")
-                            initialValue = initialValue.replace(".", opts.radixPoint);
-                    }
-                } else {
-
-                    initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(initialValue.indexOf("0") === 0 ? opts.radixPoint : opts.groupSeparator), "g"), "");
-                    initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(initialValue.indexOf("0") === 0 ? opts.radixPoint : opts.groupSeparator), "g"), "");
-                }
+                initialValue = integerPart + (decimalPart !== "" ? radixPoint + decimalPart : decimalPart);
 
                 var digits = 0;
-                if (opts.radixPoint !== "" && initialValue.indexOf(opts.radixPoint) !== -1) {
-                    var valueParts = initialValue.split(opts.radixPoint),
-                        digits = valueParts[1].match(new RegExp("\\d*"))[0].length,
-                        digitsFactor = Math.pow(10, digits || 1);
-                    if (isFinite(opts.digits)) {
-                        digits = parseInt(opts.digits);
-                        digitsFactor = Math.pow(10, digits);
-                    }
-
-                    //make the initialValue a valid javascript number for the parsefloat
-                    initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".");
-                    if (isFinite(initialValue))
-                        initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;
-                    initialValue = initialValue.toString().replace(".", opts.radixPoint);
-                }
+                if (radixPoint !== "") {
+                    digits = decimalPart.length;
+                    if (decimalPart !== "") {
+                        var digitsFactor = Math.pow(10, digits || 1);
+                        if (isFinite(opts.digits)) {
+                            digits = parseInt(opts.digits);
+                            digitsFactor = Math.pow(10, digits);
+                        }
 
-                if (opts.digits === 0) {
-                    if (initialValue.indexOf(".") !== -1) {
-                        initialValue = initialValue.substring(0, initialValue.indexOf("."));
-                    } else if (initialValue.indexOf(",") !== -1) {
-                        initialValue = initialValue.substring(0, initialValue.indexOf(","));
+                        //make the initialValue a valid javascript number for the parsefloat
+                        initialValue = initialValue.replace(Inputmask.escapeRegex(radixPoint), ".");
+                        if (isFinite(initialValue))
+                            initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;
+                        initialValue = initialValue.toString().replace(".", radixPoint);
                     }
                 }
-
+                //this needs to be in a separate part and not directly in decimalPart to allow rounding
+                if (opts.digits === 0 && initialValue.indexOf(Inputmask.escapeRegex(radixPoint)) !== -1) {
+                    initialValue = initialValue.substring(0, initialValue.indexOf(Inputmask.escapeRegex(radixPoint)));
+                }
                 return alignDigits(initialValue.toString().split(""), digits, opts).join("");
             },
             onKeyDown: function (e, buffer, caretPos, opts) {

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "inputmask",
-  "version": "4.0.3-beta.3",
+  "version": "4.0.3-beta.4",
   "description": "Inputmask is a javascript library which creates an input mask.  Inputmask can run against vanilla javascript, jQuery and jqlite.",
   "main": "index.js",
   "files": [

+ 21 - 12
qunit/tests_numeric.js

@@ -935,7 +935,7 @@ export default function (qunit, Inputmask) {
         $("#testmask").val("-5.000,77");
         $(testmask).trigger("blur");
 
-        assert.equal(testmask.value, "-5000", "Result " + testmask.value);
+        assert.equal(testmask.value, "-5001", "Result " + testmask.value);
 
     });
 
@@ -995,7 +995,8 @@ export default function (qunit, Inputmask) {
             autoGroup: true,
             digits: 2,
             radixPoint: ',',
-            groupSize: 3
+            groupSize: 3,
+            inputType: "number"
         }).mask(testmask);
 
         $("#testmask").val("8100000.00");
@@ -1014,7 +1015,8 @@ export default function (qunit, Inputmask) {
             autoGroup: true,
             digits: 2,
             radixPoint: ',',
-            groupSize: 3
+            groupSize: 3,
+            inputType: "number"
         }).mask(testmask);
 
         $("#testmask").val("12345678.12");
@@ -1052,7 +1054,8 @@ export default function (qunit, Inputmask) {
             autoGroup: true,
             digits: 2,
             radixPoint: ',',
-            groupSize: 3
+            groupSize: 3,
+            inputType: "number"
         }).mask(testmask);
 
         $("#testmask").val(8100000.00);
@@ -1071,7 +1074,8 @@ export default function (qunit, Inputmask) {
             digits: 2,
             digitsOptional: false,
             radixPoint: ',',
-            groupSize: 3
+            groupSize: 3,
+            inputType: "number"
         }).mask(testmask);
 
         $("#testmask").val(8100000.00);
@@ -1091,7 +1095,8 @@ export default function (qunit, Inputmask) {
             autoGroup: true,
             digits: 2,
             radixPoint: ",",
-            groupSize: 3
+            groupSize: 3,
+            inputType: "number"
         }).mask(testmask);
 
         $("#testmask").val("810000.00");
@@ -1926,7 +1931,8 @@ export default function (qunit, Inputmask) {
             autoGroup: true,
             digits: 2,
             removeMaskOnSubmit: false,
-            enforceDigitsOnBlur: true
+            enforceDigitsOnBlur: true,
+            inputType: "number"
         }).mask(testmask);
 
         $(testmask).val("0.50");
@@ -1959,7 +1965,8 @@ export default function (qunit, Inputmask) {
             groupSeparator: '.',
             autoGroup: true,
             digits: 2,
-            removeMaskOnSubmit: false
+            removeMaskOnSubmit: false,
+            inputType: "number"
         }).mask(testmask);
 
         $(testmask).val("1234.56");
@@ -1971,7 +1978,7 @@ export default function (qunit, Inputmask) {
         var $fixture = $("#qunit-fixture");
         $fixture.append('<input type="text" id="testmask" />');
         var testmask = document.getElementById("testmask");
-        Inputmask("currency", {radixPoint: ","}).mask(testmask);
+        Inputmask("currency", {radixPoint: ",", inputType: "number"}).mask(testmask);
 
         $(testmask).val("100.00");
 
@@ -2027,12 +2034,13 @@ export default function (qunit, Inputmask) {
         var $fixture = $("#qunit-fixture");
         $fixture.append('<input type="text" id="testmask" />');
         var testmask = document.getElementById("testmask");
-        Inputmask(  {
+        Inputmask({
             max: '99999999.99',
             alias: 'currency',
             prefix: '',
             allowPlus: false,
-            autoUnmask: true}).mask(testmask);
+            autoUnmask: true
+        }).mask(testmask);
 
         $(testmask).Type("1.23");
         $.caret(testmask, 0);
@@ -2049,7 +2057,7 @@ export default function (qunit, Inputmask) {
         var testmask = document.getElementById("testmask");
         Inputmask("numeric", {
             rightAlign: false,
-            autoGroup:  true,
+            autoGroup: true,
             groupSize: 3,
             digits: 3,
             enforceDigitsOnBlur: true,
@@ -2101,6 +2109,7 @@ export default function (qunit, Inputmask) {
             autoGroup: true,
             autoUnmask: true,
             removeMaskOnSubmit: true,
+            inputType: "number"
         }).mask(testmask);
 
         assert.equal(testmask.value, "0,001", "Result " + testmask.value);