Browse Source

some fixes in the alternations #836

Robin Herbots 10 years ago
parent
commit
0b0a5bc116

+ 1 - 0
CHANGELOG.md

@@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file.
 - Add Component package manager support - component.json 
 
 ### Fixed
+- Standard phone numbers in Brazil #836 (Part 1)
 - Sequentional optional parts do not fully match #699
 - How i fix that number problem? #835
 - Form reset doesn't get same value as initial mask #842

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.1.62-26",
+  "version": "3.1.62-36",
   "main": [
     "./dist/inputmask/jquery.inputmask.js",
     "./dist/inputmask/jquery.inputmask.extensions.js",

+ 1 - 1
component.json

@@ -2,7 +2,7 @@
     "name": "jquery_inputmask",
     "repository": "robinherbots/jquery.inputmask",
     "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-    "version": "3.1.62-26",
+    "version": "3.1.62-36",
     "keywords": [ "jquery", "plugins", "input", "form", "inputmask", "mask" ],
     "main": "./dist/jquery.inputmask.bundle.js",
     "scripts": [

+ 1 - 1
composer.json

@@ -1,7 +1,7 @@
 {
     "name": "robinherbots/jquery.inputmask",
     "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-	"version": "3.1.62-26",
+	"version": "3.1.62-36",
     "type": "library",
     "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
     "homepage": "http://robinherbots.github.io/jquery.inputmask",

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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.62-26
+* Version: 3.1.62-36
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./jquery.inputmask" ], factory) : factory(jQuery);

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


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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.62-26
+* Version: 3.1.62-36
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./jquery.inputmask" ], factory) : factory(jQuery);

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


+ 16 - 12
dist/inputmask/jquery.inputmask.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.62-26
+* Version: 3.1.62-36
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery" ], factory) : factory(jQuery);
@@ -455,7 +455,7 @@
                 }), rslt;
             }
             function alternate(pos, c, strict, fromSetValid) {
-                var lastAlt, alternation, validPsClone = $.extend(!0, {}, getMaskSet().validPositions);
+                var lastAlt, alternation, isValidRslt, validPsClone = $.extend(!0, {}, getMaskSet().validPositions);
                 for (lastAlt = getLastValidPosition(); lastAlt >= 0; lastAlt--) if (getMaskSet().validPositions[lastAlt] && void 0 != getMaskSet().validPositions[lastAlt].alternation) {
                     alternation = getMaskSet().validPositions[lastAlt].alternation;
                     break;
@@ -468,13 +468,17 @@
                             break;
                         }
                         if (decisionTaker != possibilityPos.locator[alternation]) {
-                            for (var buffer = getBuffer().slice(), i = decisionPos; i < getLastValidPosition() + 1; i++) delete getMaskSet().validPositions[i], 
-                            delete getMaskSet().tests[i];
-                            resetMaskSet(!0), opts.keepStatic = !opts.keepStatic;
-                            for (var i = decisionPos; i < buffer.length; i++) buffer[i] != opts.skipOptionalPartCharacter && isValid(getLastValidPosition() + 1, buffer[i], !1, !0);
-                            possibilityPos.locator[alternation] = possibilities;
-                            var isValidRslt = isValid(pos, c, strict, fromSetValid);
-                            if (opts.keepStatic = !opts.keepStatic, isValidRslt) return isValidRslt;
+                            for (var validInputs = [], i = decisionPos; i < getLastValidPosition() + 1; i++) {
+                                var validPos = getMaskSet().validPositions[i];
+                                validPos && null != validPos.match.fn && validInputs.push(validPos.input), delete getMaskSet().validPositions[i], 
+                                delete getMaskSet().tests[i];
+                            }
+                            for (resetMaskSet(!0), opts.keepStatic = !opts.keepStatic, isValidRslt = !0; validInputs.length > 0; ) {
+                                var input = validInputs.shift();
+                                if (input != opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition() + 1, input, !1, !0))) break;
+                            }
+                            if (possibilityPos.locator[alternation] = possibilities, isValidRslt && (isValidRslt = isValid(pos, c, strict, fromSetValid)), 
+                            opts.keepStatic = !opts.keepStatic, isValidRslt) return isValidRslt;
                             resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);
                         }
                     }
@@ -788,11 +792,11 @@
             function generalize() {
                 if (opts.keepStatic) {
                     resetMaskSet(!0);
-                    var lastAlt, validInputs = [];
+                    var lastAlt, validInputs = [], positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
                     for (lastAlt = getLastValidPosition(); lastAlt >= 0; lastAlt--) {
                         var validPos = getMaskSet().validPositions[lastAlt];
                         if (validPos) {
-                            if (void 0 != validPos.alternation) break;
+                            if (void 0 != validPos.alternation && validPos.locator[validPos.alternation] == getTestTemplate(lastAlt).locator[validPos.alternation]) break;
                             null != validPos.match.fn && validInputs.push(validPos.input), delete getMaskSet().validPositions[lastAlt];
                         }
                     }
@@ -800,7 +804,7 @@
                         getMaskSet().p = seekNext(getLastValidPosition());
                         var keypress = $.Event("keypress");
                         keypress.which = validInputs.pop().charCodeAt(0), keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
-                    }
+                    } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
                 }
             }
             if ((opts.numericInput || isRTL) && (k == $.inputmask.keyCode.BACKSPACE ? k = $.inputmask.keyCode.DELETE : k == $.inputmask.keyCode.DELETE && (k = $.inputmask.keyCode.BACKSPACE), 

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


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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.62-26
+* Version: 3.1.62-36
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./jquery.inputmask" ], factory) : factory(jQuery);

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


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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.62-26
+* Version: 3.1.62-36
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./jquery.inputmask" ], factory) : factory(jQuery);

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


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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.62-26
+* Version: 3.1.62-36
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./jquery.inputmask" ], factory) : factory(jQuery);

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


+ 16 - 12
dist/jquery.inputmask.bundle.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.62-26
+* Version: 3.1.62-36
 */
 !function($) {
     function isInputEventSupported(eventName) {
@@ -453,7 +453,7 @@
                 }), rslt;
             }
             function alternate(pos, c, strict, fromSetValid) {
-                var lastAlt, alternation, validPsClone = $.extend(!0, {}, getMaskSet().validPositions);
+                var lastAlt, alternation, isValidRslt, validPsClone = $.extend(!0, {}, getMaskSet().validPositions);
                 for (lastAlt = getLastValidPosition(); lastAlt >= 0; lastAlt--) if (getMaskSet().validPositions[lastAlt] && void 0 != getMaskSet().validPositions[lastAlt].alternation) {
                     alternation = getMaskSet().validPositions[lastAlt].alternation;
                     break;
@@ -466,13 +466,17 @@
                             break;
                         }
                         if (decisionTaker != possibilityPos.locator[alternation]) {
-                            for (var buffer = getBuffer().slice(), i = decisionPos; i < getLastValidPosition() + 1; i++) delete getMaskSet().validPositions[i], 
-                            delete getMaskSet().tests[i];
-                            resetMaskSet(!0), opts.keepStatic = !opts.keepStatic;
-                            for (var i = decisionPos; i < buffer.length; i++) buffer[i] != opts.skipOptionalPartCharacter && isValid(getLastValidPosition() + 1, buffer[i], !1, !0);
-                            possibilityPos.locator[alternation] = possibilities;
-                            var isValidRslt = isValid(pos, c, strict, fromSetValid);
-                            if (opts.keepStatic = !opts.keepStatic, isValidRslt) return isValidRslt;
+                            for (var validInputs = [], i = decisionPos; i < getLastValidPosition() + 1; i++) {
+                                var validPos = getMaskSet().validPositions[i];
+                                validPos && null != validPos.match.fn && validInputs.push(validPos.input), delete getMaskSet().validPositions[i], 
+                                delete getMaskSet().tests[i];
+                            }
+                            for (resetMaskSet(!0), opts.keepStatic = !opts.keepStatic, isValidRslt = !0; validInputs.length > 0; ) {
+                                var input = validInputs.shift();
+                                if (input != opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition() + 1, input, !1, !0))) break;
+                            }
+                            if (possibilityPos.locator[alternation] = possibilities, isValidRslt && (isValidRslt = isValid(pos, c, strict, fromSetValid)), 
+                            opts.keepStatic = !opts.keepStatic, isValidRslt) return isValidRslt;
                             resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);
                         }
                     }
@@ -786,11 +790,11 @@
             function generalize() {
                 if (opts.keepStatic) {
                     resetMaskSet(!0);
-                    var lastAlt, validInputs = [];
+                    var lastAlt, validInputs = [], positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
                     for (lastAlt = getLastValidPosition(); lastAlt >= 0; lastAlt--) {
                         var validPos = getMaskSet().validPositions[lastAlt];
                         if (validPos) {
-                            if (void 0 != validPos.alternation) break;
+                            if (void 0 != validPos.alternation && validPos.locator[validPos.alternation] == getTestTemplate(lastAlt).locator[validPos.alternation]) break;
                             null != validPos.match.fn && validInputs.push(validPos.input), delete getMaskSet().validPositions[lastAlt];
                         }
                     }
@@ -798,7 +802,7 @@
                         getMaskSet().p = seekNext(getLastValidPosition());
                         var keypress = $.Event("keypress");
                         keypress.which = validInputs.pop().charCodeAt(0), keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
-                    }
+                    } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
                 }
             }
             if ((opts.numericInput || isRTL) && (k == $.inputmask.keyCode.BACKSPACE ? k = $.inputmask.keyCode.DELETE : k == $.inputmask.keyCode.DELETE && (k = $.inputmask.keyCode.BACKSPACE), 

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


+ 26 - 8
js/jquery.inputmask.js

@@ -810,10 +810,12 @@
 
                     return rslt;
                 }
+
                 function alternate(pos, c, strict, fromSetValid) {
                     var validPsClone = $.extend(true, {}, getMaskSet()["validPositions"]),
                         lastAlt,
-                        alternation;
+                        alternation,
+                        isValidRslt;
                     //find last alternation
                     for (lastAlt = getLastValidPosition() ; lastAlt >= 0; lastAlt--) {
                         if (getMaskSet()["validPositions"][lastAlt] && getMaskSet()["validPositions"][lastAlt].alternation != undefined) {
@@ -841,20 +843,32 @@
                                             }
                                         }
                                         if (decisionTaker != possibilityPos.locator[alternation]) {
-                                            var buffer = getBuffer().slice(); //work on clone
+                                            var validInputs = [];
                                             for (var i = decisionPos; i < getLastValidPosition() + 1; i++) {
+                                                var validPos = getMaskSet()["validPositions"][i];
+                                                if (validPos && validPos.match.fn != null) {
+                                                    //console.log(validPos.input);
+                                                    validInputs.push(validPos.input);
+                                                }
                                                 delete getMaskSet()["validPositions"][i];
                                                 delete getMaskSet()["tests"][i];
                                             }
                                             resetMaskSet(true); //clear getbuffer
                                             opts.keepStatic = !opts.keepStatic; //disable keepStatic on getMaskLength
-                                            for (var i = decisionPos; i < buffer.length; i++) {
-                                                if (buffer[i] != opts.skipOptionalPartCharacter) {
-                                                    isValid(getLastValidPosition() + 1, buffer[i], false, true);
+                                            isValidRslt = true;
+                                            while (validInputs.length > 0) {
+                                                var input = validInputs.shift();
+                                                //console.log(input);
+                                                if (input != opts.skipOptionalPartCharacter) {
+                                                    if (!(isValidRslt = isValid(getLastValidPosition() + 1, input, false, true))) {
+                                                        break;
+                                                    }
                                                 }
                                             }
+
                                             possibilityPos.locator[alternation] = possibilities; //reset forceddecision ~ needed for proper delete
-                                            var isValidRslt = isValid(pos, c, strict, fromSetValid);
+                                            if (isValidRslt)
+                                                isValidRslt = isValid(pos, c, strict, fromSetValid);
                                             opts.keepStatic = !opts.keepStatic; //enable keepStatic on getMaskLength
                                             if (!isValidRslt) {
                                                 resetMaskSet();
@@ -870,6 +884,7 @@
                     }
                     return false;
                 }
+
                 //set alternator choice on previous skipped placeholder positions
                 function trackbackAlternations(originalPos, newPos) {
                     var vp = getMaskSet()["validPositions"][newPos],
@@ -1378,12 +1393,12 @@
                     if (opts.keepStatic) {
                         resetMaskSet(true);
                         var validInputs = [],
-                          lastAlt;
+                          lastAlt, positionsClone = $.extend(true, {}, getMaskSet()["validPositions"]);
                         //find last alternation
                         for (lastAlt = getLastValidPosition() ; lastAlt >= 0; lastAlt--) {
                             var validPos = getMaskSet()["validPositions"][lastAlt];
                             if (validPos) {
-                                if (validPos.alternation != undefined) {
+                                if (validPos.alternation != undefined && validPos.locator[validPos.alternation] == getTestTemplate(lastAlt).locator[validPos.alternation]) {
                                     break;
                                 }
                                 if (validPos.match.fn != null)
@@ -1398,6 +1413,9 @@
                                 keypress.which = validInputs.pop().charCodeAt(0);
                                 keypressEvent.call(input, keypress, true, false, false, getMaskSet()["p"]);
                             }
+                        } else {
+                            //restore original positions
+                            getMaskSet()["validPositions"] = $.extend(true, {}, positionsClone);
                         }
                     }
                 }

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.1.62-26",
+  "version": "3.1.62-36",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
   "main": "./dist/inputmask/jquery.inputmask.js",
   "scripts": {