Browse Source

Inputmask numeric does no round up when digits is 0 fix #2018

Robin Herbots 7 years ago
parent
commit
9c52096e23

+ 1 - 0
CHANGELOG.md

@@ -5,6 +5,7 @@
 ### Updates
 
 ### Fixed
+- Inputmask numeric does no round up when digits is 0 #2018
 - Strange Calendar popup issue in IE Only when used with Daterangepicker #1965
 - incorrect work min max date - #2011, #2013
 

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "inputmask",
-  "version": "4.0.3-beta.1",
+  "version": "4.0.3-beta.2",
   "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.1",
+  "version": "4.0.3-beta.2",
   "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.1
+* Version: 4.0.3-beta.2
 */
 
 (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.1
+* Version: 4.0.3-beta.2
 */
 
 (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.1
+* Version: 4.0.3-beta.2
 */
 
 (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.1
+* Version: 4.0.3-beta.2
 */
 
 (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.1
+* Version: 4.0.3-beta.2
 */
 
 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.1
+* Version: 4.0.3-beta.2
 */
 
 (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.1
+* Version: 4.0.3-beta.2
 */
 
 (function(factory) {

+ 1 - 1
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.1
+* Version: 4.0.3-beta.2
 */
 
 (function(factory) {

+ 16 - 16
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.1
+* Version: 4.0.3-beta.2
 */
 
 (function(factory) {
@@ -25,14 +25,14 @@
         }
         return escapedTxt;
     }
-    function alignDigits(buffer, opts) {
-        if (opts.numericInput) {
+    function alignDigits(buffer, digits, opts) {
+        if (digits > 0) {
             var radixPosition = $.inArray(opts.radixPoint, buffer);
             if (radixPosition === -1) {
                 buffer.push(opts.radixPoint);
                 radixPosition = buffer.length - 1;
             }
-            for (var i = 1; i <= opts.digits; i++) {
+            for (var i = 1; i <= digits; i++) {
                 buffer[radixPosition + i] = buffer[radixPosition + i] || "0";
             }
         }
@@ -500,6 +500,17 @@
                 } else {
                     initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "");
                 }
+                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("."));
@@ -507,18 +518,7 @@
                         initialValue = initialValue.substring(0, initialValue.indexOf(","));
                     }
                 }
-                if (opts.radixPoint !== "" && isFinite(opts.digits)) {
-                    if (initialValue.indexOf(opts.radixPoint) !== -1) {
-                        var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp("\\d*"))[0];
-                        if (parseInt(opts.digits) < decPart.toString().length) {
-                            var digitsFactor = Math.pow(10, parseInt(opts.digits));
-                            initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".");
-                            initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;
-                            initialValue = initialValue.toString().replace(".", opts.radixPoint);
-                        }
-                    }
-                }
-                return alignDigits(initialValue.toString().split(""), opts).join("");
+                return alignDigits(initialValue.toString().split(""), digits, opts).join("");
             },
             onKeyDown: function(e, buffer, caretPos, opts) {
                 var $input = $(this);

+ 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.1
+* Version: 4.0.3-beta.2
 */
 
 (function(factory) {

+ 16 - 16
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.1
+* Version: 4.0.3-beta.2
 */
 
 (function(modules) {
@@ -3238,14 +3238,14 @@
             }
             return escapedTxt;
         }
-        function alignDigits(buffer, opts) {
-            if (opts.numericInput) {
+        function alignDigits(buffer, digits, opts) {
+            if (digits > 0) {
                 var radixPosition = $.inArray(opts.radixPoint, buffer);
                 if (radixPosition === -1) {
                     buffer.push(opts.radixPoint);
                     radixPosition = buffer.length - 1;
                 }
-                for (var i = 1; i <= opts.digits; i++) {
+                for (var i = 1; i <= digits; i++) {
                     buffer[radixPosition + i] = buffer[radixPosition + i] || "0";
                 }
             }
@@ -3713,6 +3713,17 @@
                     } else {
                         initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "");
                     }
+                    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("."));
@@ -3720,18 +3731,7 @@
                             initialValue = initialValue.substring(0, initialValue.indexOf(","));
                         }
                     }
-                    if (opts.radixPoint !== "" && isFinite(opts.digits)) {
-                        if (initialValue.indexOf(opts.radixPoint) !== -1) {
-                            var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp("\\d*"))[0];
-                            if (parseInt(opts.digits) < decPart.toString().length) {
-                                var digitsFactor = Math.pow(10, parseInt(opts.digits));
-                                initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".");
-                                initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;
-                                initialValue = initialValue.toString().replace(".", opts.radixPoint);
-                            }
-                        }
-                    }
-                    return alignDigits(initialValue.toString().split(""), opts).join("");
+                    return alignDigits(initialValue.toString().split(""), digits, opts).join("");
                 },
                 onKeyDown: function onKeyDown(e, buffer, caretPos, opts) {
                     var $input = $(this);

File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/bindings/inputmask.binding.min.js


File diff suppressed because it is too large
+ 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.1
+* Version: 4.0.3-beta.2
 */
 
 (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 $});

File diff suppressed because it is too large
+ 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.1
+* Version: 4.0.3-beta.2
 */
 
 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);

File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.date.extensions.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.extensions.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.min.js


File diff suppressed because it is too large
+ 2 - 2
dist/min/inputmask/inputmask.numeric.extensions.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/jquery.inputmask.min.js


File diff suppressed because it is too large
+ 2 - 2
dist/min/jquery.inputmask.bundle.min.js


+ 1 - 0
js/inputmask.js

@@ -1214,6 +1214,7 @@
                                         }
                                         if (latestMatch.jit && !latestMatch.optionalQuantifier) {
                                             offset = tokenGroup.matches.indexOf(latestMatch);
+                                            // console.log(qndx + " - " + offset);
                                             testPos = pos; //match the position after the group
                                             insertStop = true;
                                             break; //stop quantifierloop && search for next possible match

+ 22 - 19
js/inputmask.numeric.extensions.js

@@ -18,6 +18,7 @@
 }
 (function (Inputmask) {
     var $ = Inputmask.dependencyLib;
+
     function autoEscape(txt, opts) {
         var escapedTxt = "";
         for (var i = 0; i < txt.length; i++) {
@@ -36,14 +37,14 @@
         return escapedTxt;
     }
 
-    function alignDigits(buffer, opts) {
-        if (opts.numericInput) {
+    function alignDigits(buffer, digits, opts) {
+        if (digits > 0) {
             var radixPosition = $.inArray(opts.radixPoint, buffer);
             if (radixPosition === -1) {
                 buffer.push(opts.radixPoint);
                 radixPosition = buffer.length - 1;
             }
-            for (var i = 1; i <= opts.digits; i++) {
+            for (var i = 1; i <= digits; i++) {
                 buffer[radixPosition + i] = buffer[radixPosition + i] || "0";
             }
         }
@@ -569,6 +570,23 @@
                     initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "");
                 }
 
+                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 (opts.digits === 0) {
                     if (initialValue.indexOf(".") !== -1) {
                         initialValue = initialValue.substring(0, initialValue.indexOf("."));
@@ -577,22 +595,7 @@
                     }
                 }
 
-                if (opts.radixPoint !== "" && isFinite(opts.digits)) {
-                    if (initialValue.indexOf(opts.radixPoint) !== -1) {
-                        var valueParts = initialValue.split(opts.radixPoint),
-                            decPart = valueParts[1].match(new RegExp("\\d*"))[0];
-                        if (parseInt(opts.digits) < decPart.toString().length) {
-                            var digitsFactor = Math.pow(10, parseInt(opts.digits));
-                            //make the initialValue a valid javascript number for the parsefloat
-                            initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".");
-                            initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;
-                            initialValue = initialValue.toString().replace(".", opts.radixPoint);
-                        }
-                    }
-
-
-                }
-                return alignDigits(initialValue.toString().split(""), opts).join("");
+                return alignDigits(initialValue.toString().split(""), digits, opts).join("");
             },
             onKeyDown: function (e, buffer, caretPos, opts) {
                 //TODO FIXME

+ 1 - 1
package.json

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

+ 22 - 2
qunit/tests_numeric.js

@@ -1925,11 +1925,12 @@ export default function (qunit, Inputmask) {
             groupSeparator: '.',
             autoGroup: true,
             digits: 2,
-            removeMaskOnSubmit: false
+            removeMaskOnSubmit: false,
+            enforceDigitsOnBlur: true
         }).mask(testmask);
 
         $(testmask).val("0.50");
-
+        testmask.blur();
         assert.equal(testmask.inputmask._valueGet(), "0,50", "Result " + testmask.inputmask._valueGet());
     });
 
@@ -2065,4 +2066,23 @@ export default function (qunit, Inputmask) {
 
         assert.equal(testmask.value, "(123.000)", "Result " + testmask.value);
     });
+
+    qunit.test("numeric rounding with digits 0 - dianavele", function (assert) {
+        var $fixture = $("#qunit-fixture");
+        $fixture.append('<input type="text" id="testmask" value="123,67"/>');
+        var testmask = document.getElementById("testmask");
+        Inputmask("numeric", {
+            radixPoint: ",",
+            groupSeparator: ".",
+            digits: 0,
+            showMaskOnHover: false,
+            showMaskOnFocus: false,
+            placeholder: '0',
+            digitsOptional: false,
+            autoGroup: true,
+            clearMaskOnLostFocus: false
+        }).mask(testmask);
+
+        assert.equal(testmask.value, "124", "Result " + testmask.value);
+    });
 };