Browse Source

Optional parts not working as expected #2710

Robin Herbots 2 years ago
parent
commit
7a2ed5abc7

+ 1 - 0
Changelog.md

@@ -4,6 +4,7 @@
 
 ### Fixed
 
+- Optional parts not working as expected #2710
 - State of alternator not reset with clearIncomplete = true #2712
 - Change Event fired on Blur even if value has not changed #2691
 - fix ssr issues when navigator is not defined #2704

+ 1 - 1
bower.json

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

+ 3 - 3
dist/inputmask.js

@@ -3,7 +3,7 @@
  * https://github.com/RobinHerbots/Inputmask
  * Copyright (c) 2010 - 2023 Robin Herbots
  * Licensed under the MIT license
- * Version: 5.0.9-beta.8
+ * Version: 5.0.9-beta.10
  */
 !function(e, t) {
     if ("object" == typeof exports && "object" == typeof module) module.exports = t(); else if ("function" == typeof define && define.amd) define([], t); else {
@@ -3031,12 +3031,12 @@
                     var t = this, i = this.opts, n = this.maskset;
                     if ("function" == typeof i.isComplete) return i.isComplete(e, i);
                     if ("*" !== i.repeat) {
-                        var o = !1, s = r.determineLastRequiredPosition.call(t, !0), l = r.seekPrevious.call(t, s.l);
+                        var o = !1, s = r.determineLastRequiredPosition.call(t, !0), l = s.l;
                         if (void 0 === s.def || s.def.newBlockMarker || s.def.optionality || s.def.optionalQuantifier) {
                             o = !0;
                             for (var c = 0; c <= l; c++) {
                                 var u = a.getTestTemplate.call(t, c).match;
-                                if (!0 !== u.static && void 0 === n.validPositions[c] && !0 !== u.optionality && !0 !== u.optionalQuantifier || !0 === u.static && e[c] !== a.getPlaceholder.call(t, c, u)) {
+                                if (!0 !== u.static && void 0 === n.validPositions[c] && (!1 === u.optionality || void 0 === u.optionality || u.optionality && 0 == u.newBlockMarker) && (!1 === u.optionalQuantifier || void 0 === u.optionalQuantifier) || !0 === u.static && "" != u.def && e[c] !== a.getPlaceholder.call(t, c, u)) {
                                     o = !1;
                                     break;
                                 }

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


+ 3 - 3
dist/jquery.inputmask.js

@@ -3,7 +3,7 @@
  * https://github.com/RobinHerbots/Inputmask
  * Copyright (c) 2010 - 2023 Robin Herbots
  * Licensed under the MIT license
- * Version: 5.0.9-beta.8
+ * Version: 5.0.9-beta.10
  */
 !function(e, t) {
     if ("object" == typeof exports && "object" == typeof module) module.exports = t(require("jquery")); else if ("function" == typeof define && define.amd) define([ "jquery" ], t); else {
@@ -2929,12 +2929,12 @@
                     var t = this, i = this.opts, n = this.maskset;
                     if ("function" == typeof i.isComplete) return i.isComplete(e, i);
                     if ("*" !== i.repeat) {
-                        var o = !1, s = r.determineLastRequiredPosition.call(t, !0), l = r.seekPrevious.call(t, s.l);
+                        var o = !1, s = r.determineLastRequiredPosition.call(t, !0), l = s.l;
                         if (void 0 === s.def || s.def.newBlockMarker || s.def.optionality || s.def.optionalQuantifier) {
                             o = !0;
                             for (var c = 0; c <= l; c++) {
                                 var u = a.getTestTemplate.call(t, c).match;
-                                if (!0 !== u.static && void 0 === n.validPositions[c] && !0 !== u.optionality && !0 !== u.optionalQuantifier || !0 === u.static && e[c] !== a.getPlaceholder.call(t, c, u)) {
+                                if (!0 !== u.static && void 0 === n.validPositions[c] && (!1 === u.optionality || void 0 === u.optionality || u.optionality && 0 == u.newBlockMarker) && (!1 === u.optionalQuantifier || void 0 === u.optionalQuantifier) || !0 === u.static && "" != u.def && e[c] !== a.getPlaceholder.call(t, c, u)) {
                                     o = !1;
                                     break;
                                 }

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


+ 1 - 0
inputmask-pages/src/assets/Changelog.md

@@ -4,6 +4,7 @@
 
 ### Fixed
 
+- Optional parts not working as expected #2710
 - State of alternator not reset with clearIncomplete = true #2712
 - Change Event fired on Blur even if value has not changed #2691
 - fix ssr issues when navigator is not defined #2704

+ 8 - 2
lib/validation.js

@@ -263,18 +263,24 @@ function isComplete(buffer) { //return true / false / undefined (repeat *)
     if (opts.repeat === "*") return undefined;
     var complete = false,
         lrp = determineLastRequiredPosition.call(inputmask, true),
-        aml = seekPrevious.call(inputmask, lrp.l);
+        aml = lrp.l; // seekPrevious.call(inputmask, lrp.l);
 
     if (lrp.def === undefined || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
         complete = true;
         for (var i = 0; i <= aml; i++) {
             var test = getTestTemplate.call(inputmask, i).match;
-            if ((test.static !== true && maskset.validPositions[i] === undefined && test.optionality !== true && test.optionalQuantifier !== true) || (test.static === true && buffer[i] !== getPlaceholder.call(inputmask, i, test))) {
+            if ((test.static !== true &&
+                    maskset.validPositions[i] === undefined &&
+                    (test.optionality === false || test.optionality === undefined || (test.optionality && test.newBlockMarker == false)) &&
+                    (test.optionalQuantifier === false || test.optionalQuantifier === undefined)) ||
+                (test.static === true && test.def != "" && buffer[i] !== getPlaceholder.call(inputmask, i, test))
+            ) {
                 complete = false;
                 break;
             }
         }
     }
+
     return complete;
 }
 

+ 1 - 1
package.json

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

+ 45 - 0
qunit/tests_alternations.js

@@ -548,4 +548,49 @@ export default function (qunit, Inputmask) {
 		$("#testmask").SendKey(keys.Backspace);
 		assert.equal(testmask.value, "_1 2", "Result " + testmask.value);
 	});
+
+	qunit.test("Optional parts not working as expected - type 123456789 - #2710", function (assert) {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append("<input type=\"text\" id=\"testmask\" />");
+		var testmask = document.getElementById("testmask");
+
+		Inputmask({
+			mask: "*-******[-**]",
+			clearIncomplete: true
+		}).mask(testmask);
+		testmask.focus();
+		$("#testmask").Type("123456789");
+		testmask.blur();
+		assert.equal(testmask.value, "1-234567-89", "Result " + testmask.value);
+	});
+
+	qunit.test("Optional parts not working as expected - type 1234567 - #2710", function (assert) {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append("<input type=\"text\" id=\"testmask\" />");
+		var testmask = document.getElementById("testmask");
+
+		Inputmask({
+			mask: "*-******[-**]",
+			clearIncomplete: true
+		}).mask(testmask);
+		testmask.focus();
+		$("#testmask").Type("1234567");
+		testmask.blur();
+		assert.equal(testmask.value, "1-234567", "Result " + testmask.value);
+	});
+
+	qunit.test("Optional parts not working as expected - type 12345678 - #2710", function (assert) {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append("<input type=\"text\" id=\"testmask\" />");
+		var testmask = document.getElementById("testmask");
+
+		Inputmask({
+			mask: "*-******[-**]",
+			clearIncomplete: true
+		}).mask(testmask);
+		testmask.focus();
+		$("#testmask").Type("12345678");
+		testmask.blur();
+		assert.equal(testmask.value, "", "Result " + testmask.value);
+	});
 }