Browse Source

numeric input fixes

Robin Herbots 7 years ago
parent
commit
d1bde39c69

+ 1 - 1
CHANGELOG.md

@@ -5,7 +5,7 @@
 - add indian numbering support in numeric alias (indianns alias)
 
 ### Updates
-- refactor numeric alias (ongoing - 2)
+- refactor numeric alias (ongoing - 3)
 - package & bundling
 - enhance regex alternations. ex: [01][0-9]|2[0-3] => ([01][0-9]|2[0-3])
 

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "inputmask",
-  "version": "5.0.0-beta.102",
+  "version": "5.0.0-beta.121",
   "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": "5.0.0-beta.102",
+  "version": "5.0.0-beta.121",
   "type": "library",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "homepage": "http://robinherbots.github.io/Inputmask",

File diff suppressed because it is too large
+ 2295 - 5076
dist/inputmask.js


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


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


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


+ 11 - 8
lib/extensions/inputmask.date.extensions.js

@@ -158,14 +158,17 @@ function analyseMask(maskString, format, opts) {
 
     function extendProperty(value) {
         var correctedValue = value.replace(/[^0-9]/g, "0");
-        if (correctedValue != value) { //only do correction on incomplete values
-            //determine best validation match
-            var enteredPart = value.replace(/[^0-9]/g, ""),
-                min = (opts.min && opts.min[targetProp] || value).toString(),
-                max = (opts.max && opts.max[targetProp] || value).toString();
-
-            correctedValue = enteredPart + (enteredPart < min.slice(0, enteredPart.length) ? min.slice(enteredPart.length) : (enteredPart > max.slice(0, enteredPart.length) ? max.slice(enteredPart.length) : correctedValue.toString().slice(enteredPart.length)));
-        }
+        // if (correctedValue != value) { //only do correction on incomplete values
+        //     //determine best validation match
+        //     var enteredPart = value.replace(/[^0-9]/g, ""),
+        //         enteredPartIndex = value.indexOf(enteredPart),
+        //         minPart = (opts.min && opts.min[targetProp] || value).slice(enteredPartIndex, enteredPartIndex + enteredPart.length),
+        //         maxPart = (opts.max && opts.max[targetProp] || value).slice(enteredPartIndex, enteredPartIndex + enteredPart.length),
+        //         correctedPart = enteredPart < minPart ? minPart : (enteredPart > maxPart ? maxPart : correctedValue.slice(enteredPartIndex, enteredPartIndex + enteredPart.length));
+        //     correctedValue = correctedValue.split("");
+        //     correctedValue.splice(enteredPartIndex, 1, correctedPart);
+        //     correctedValue = correctedValue.join("");
+        // }
         return correctedValue;
     }
 

+ 12 - 13
lib/extensions/inputmask.numeric.extensions.js

@@ -24,14 +24,14 @@ function autoEscape(txt, opts) {
     return escapedTxt;
 }
 
-function alignDigits(buffer, opts) {
+function alignDigits(buffer, digits, opts) {
     if (buffer.length > 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";
         }
     }
@@ -72,7 +72,9 @@ Inputmask.extendAliases({
                 opts.positionCaretOnClick = "lvp";
             }
 
+            var decimalDef = "0";
             if (opts.numericInput === true) { //finance people input style
+                decimalDef = "9";
                 opts.positionCaretOnClick = opts.positionCaretOnClick === "radixFocus" ? "lvp" : opts.positionCaretOnClick;
                 opts.digitsOptional = false;
                 if (isNaN(opts.digits)) opts.digits = 2;
@@ -87,19 +89,17 @@ Inputmask.extendAliases({
             if (opts.digits !== undefined) {
                 var dq = opts.digits.toString().split(",");
                 if (isFinite(dq[0]) && dq[1] && isFinite(dq[1])) {
-                    mask += opts.radixPoint + "0{" + opts.digits + "}";
+                    mask += opts.radixPoint + decimalDef + "{" + opts.digits + "}";
                 } else if (isNaN(opts.digits) || parseInt(opts.digits) > 0) {
                     if (opts.digitsOptional) {
-                        mask += "[" + opts.radixPoint + "0{1," + opts.digits + "}]";
-                    } else mask += opts.radixPoint + "0{" + opts.digits + "}";
+                        mask += "[" + opts.radixPoint + decimalDef + "{1," + opts.digits + "}]";
+                    } else mask += opts.radixPoint + decimalDef + "{" + opts.digits + "}";
                 }
             }
             mask += autoEscape(opts.suffix, opts);
             mask += "[-]";
 
             opts.greedy = false; //enforce greedy false
-
-
             console.log(mask);
             return mask;
         },
@@ -162,7 +162,7 @@ Inputmask.extendAliases({
                     caret: radixPos >= pos ? pos + 1 : pos
                 };
             }
-            if (isSelection === false && c === opts.radixPoint && (opts.digits !== undefined && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) && radixPos !== pos) return {
+            if (opts._radixDance === true && isSelection === false && c === opts.radixPoint && (opts.digits !== undefined && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) && radixPos !== pos) return {
                 "caret": opts._radixDance && pos > radixPos ? radixPos : radixPos - 1
             };
 
@@ -191,7 +191,7 @@ Inputmask.extendAliases({
                 }
             }
 
-            var input = this;
+            var input = this.el, result;
             if (e) {
                 switch (e.type) {
                     case "blur":
@@ -203,15 +203,14 @@ Inputmask.extendAliases({
                                 unmaskAsNumber: true
                             }));
                             if (opts.min !== null && unmasked < opts.min) {
-                                input.value = opts.min;
-                                $(input).trigger("setvalue");
+                                result = {refreshFromBuffer: true, buffer: opts.min.toString().split("")};
                             } else if (opts.max !== null && unmasked > opts.max) {
-                                input.value = opts.max;
-                                $(input).trigger("setvalue");
+                                result = {refreshFromBuffer: true, buffer: opts.max.toString().split("")};
                             }
                         }
                 }
             }
+            return result;
         },
         onUnMask: function (maskedValue, unmaskedValue, opts) {
             if (unmaskedValue === "" && opts.nullable === true) {

+ 1 - 1
lib/inputmask.js

@@ -2426,7 +2426,7 @@ function maskScope(actionObj, maskset, opts) {
                 }
 
                 if (undoValue !== getBuffer().join("")) {
-                    undoValue = buffer.join("");
+                    undoValue = getBuffer().join("");
                     $input.trigger("change");
                 }
             }

+ 6 - 7
package.json

@@ -1,6 +1,6 @@
 {
   "name": "inputmask",
-  "version": "5.0.0-beta.102",
+  "version": "5.0.0-beta.121",
   "description": "Inputmask is a javascript library which creates an input mask.  Inputmask can run against vanilla javascript, jQuery and jqlite.",
   "main": "index.js",
   "files": [
@@ -36,9 +36,9 @@
   "homepage": "https://github.com/RobinHerbots/Inputmask",
   "devDependencies": {
     "@babel/core": "^7.2.2",
-    "@babel/helpers": "^7.2.0",
+    "@babel/helpers": "^7.3.1",
     "babel-loader": "^8.0.5",
-    "@babel/preset-env": "^7.2.3",
+    "@babel/preset-env": "^7.3.1",
     "css-loader": "^2.1.0",
     "grunt": "^1.0.3",
     "grunt-available-tasks": "^0.6.3",
@@ -52,17 +52,16 @@
     "grunt-webpack": "^3.1.3",
     "jqlite": "^0.2.42",
     "jquery": "^3.3.1",
-    "jsdom": "^13.1.0",
+    "jsdom": "^13.2.0",
     "load-grunt-tasks": "^4.0.0",
     "loader-utils": "^1.2.3",
-    "postcss": "^7.0.13",
+    "postcss": "^7.0.14",
     "postcss-cssnext": "^3.1.0",
     "postcss-loader": "^3.0.0",
     "qunit": "^2.9.1",
-    "source-map-loader": "^0.2.4",
     "style-loader": "^0.23.1",
     "uglifyjs-webpack-plugin": "^2.1.1",
-    "webpack": "^4.28.4",
+    "webpack": "^4.29.0",
     "webpack-cli": "^3.2.1"
   }
 }

+ 8 - 4
qunit/tests_numeric.js

@@ -27,7 +27,7 @@ export default function (qunit, Inputmask) {
     });
 
 
-    qunit.test("integer  type 124 correct to 1234", function (assert) {
+    qunit.test("integer type 124 correct to 1234", function (assert) {
         var $fixture = $("#qunit-fixture");
         $fixture.append('<input type="text" id="testmask" />');
         var testmask = document.getElementById("testmask");
@@ -1756,7 +1756,8 @@ export default function (qunit, Inputmask) {
     });
 
     qunit.test("decimal minvalue 0,3 - enter 0,2 - Aifz", function (assert) {
-        var $fixture = $("#qunit-fixture");
+        var done = assert.async(),
+            $fixture = $("#qunit-fixture");
         $fixture.append('<input type="text" id="testmask" />');
         var testmask = document.getElementById("testmask");
         Inputmask({
@@ -1769,8 +1770,11 @@ export default function (qunit, Inputmask) {
         }).mask(testmask);
         testmask.focus();
         $("#testmask").Type("0,2");
-        testmask.blur();
-        assert.equal($(testmask).val(), "0,3", "Result " + $(testmask).val());
+        setTimeout(function () {
+            testmask.blur();
+            assert.equal($(testmask).val(), "0,3", "Result " + $(testmask).val());
+            done();
+        }, 100);
     });
 
     qunit.test("currency max = 100 - type 200 - zigtechjs", function (assert) {

+ 7 - 7
webpack.config.js

@@ -17,11 +17,11 @@ function createBanner() {
 }
 
 var rules = {
-    sourceMap: {
-        enforce: 'pre',
-        test: /\.js$/,
-        loader: 'source-map-loader',
-    },
+    // sourceMap: {
+    //     enforce: 'pre',
+    //     test: /\.js$/,
+    //     loader: 'source-map-loader',
+    // },
     js: {
         test: /\.js$/,
         loader: 'babel-loader',
@@ -84,7 +84,7 @@ module.exports = {
         "qunit": "QUnit"
     },
     optimization: {
-        minimize: false,
+        minimize: true,
         minimizer: [new UglifyJsPlugin({
             include: /\.min\.js$/,
             sourceMap: false,
@@ -129,7 +129,7 @@ module.exports = {
     },
     module: {
         rules: [
-            rules.sourceMap,
+            // rules.sourceMap,
             rules.js,
             // rules.ts,
             rules.styles