Browse Source

fix for non-greedy masks

Robin Herbots 12 years ago
parent
commit
25fb60eaa1

+ 1 - 1
build.properties

@@ -7,7 +7,7 @@ distdir = dist
 
 
 build.major = 2
 build.major = 2
 build.minor = 2
 build.minor = 2
-build.revision = 11
+build.revision = 12
 
 
 target = jquery.inputmask.bundle.js
 target = jquery.inputmask.bundle.js
 target.min = jquery.inputmask.bundle.min.js
 target.min = jquery.inputmask.bundle.min.js

BIN
dist/jQuery.InputMask.2.2.11.nupkg


BIN
dist/jQuery.InputMask.2.2.12.nupkg


+ 14 - 15
dist/jquery.inputmask.bundle.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2013 Robin Herbots
 * Copyright (c) 2010 - 2013 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 2.2.11
+* Version: 2.2.12
 */
 */
 
 
 (function ($) {
 (function ($) {
@@ -533,8 +533,8 @@
                 return position;
                 return position;
             }
             }
 
 
-            function setBufferElement(buffer, position, element) {
-                //position = prepareBuffer(buffer, position);
+            function setBufferElement(buffer, position, element, autoPrepare, isRTL) {
+                if (autoPrepare) position = prepareBuffer(buffer, position, isRTL);
 
 
                 var test = getActiveTests()[determineTestPosition(position)];
                 var test = getActiveTests()[determineTestPosition(position)];
                 var elem = element;
                 var elem = element;
@@ -628,7 +628,7 @@
                                     pos = np.pos != undefined ? np.pos : pos; //set new position from isValid
                                     pos = np.pos != undefined ? np.pos : pos; //set new position from isValid
                                     c = np.c != undefined ? np.c : c; //set new char from isValid
                                     c = np.c != undefined ? np.c : c; //set new char from isValid
                                 }
                                 }
-                                setBufferElement(buffer, pos, c);
+                                setBufferElement(buffer, pos, c, true, isRTL);
                                 lastMatch = checkPosition = pos;
                                 lastMatch = checkPosition = pos;
                             } else {
                             } else {
                                 setReTargetPlaceHolder(buffer, pos);
                                 setReTargetPlaceHolder(buffer, pos);
@@ -649,7 +649,7 @@
                     }
                     }
                 }
                 }
                 //Truncate buffer when using non-greedy masks
                 //Truncate buffer when using non-greedy masks
-                if (getActiveMaskSet()['greedy'] == false) {
+                if (getActiveMaskSet()['greedy'] == false && buffer.length > getActiveBuffer().length) {
                     var newBuffer = truncateInput(buffer.join(''), isRTL).split(''), nbL = newBuffer.length;
                     var newBuffer = truncateInput(buffer.join(''), isRTL).split(''), nbL = newBuffer.length;
                     for (var ndx = 0; ndx < nbL; ndx++) { //map changes into the original buffer
                     for (var ndx = 0; ndx < nbL; ndx++) { //map changes into the original buffer
                         buffer[ndx] = newBuffer[ndx];
                         buffer[ndx] = newBuffer[ndx];
@@ -763,8 +763,8 @@
                     if (ms["lastValidPosition"] && ms["lastValidPosition"] >= highestValidPosition && ms["lastValidPosition"] == aml) {
                     if (ms["lastValidPosition"] && ms["lastValidPosition"] >= highestValidPosition && ms["lastValidPosition"] == aml) {
                         var msComplete = true;
                         var msComplete = true;
                         for (var i = 0; i <= aml; i++) {
                         for (var i = 0; i <= aml; i++) {
-                            var mask = isMask(i);
-                            if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBuffer()[i])) {
+                            var mask = isMask(i), testPos = determineTestPosition(i);
+                            if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBuffer()[testPos])) {
                                 msComplete = false;
                                 msComplete = false;
                                 break;
                                 break;
                             }
                             }
@@ -1059,7 +1059,7 @@
                             var p = getBufferElement(buffer, j);
                             var p = getBufferElement(buffer, j);
                             if (p != getPlaceHolder(j)) {
                             if (p != getPlaceHolder(j)) {
                                 if (j < getMaskLength(buffer) && isValid(i, p, buffer, true, isRTL) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {
                                 if (j < getMaskLength(buffer) && isValid(i, p, buffer, true, isRTL) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {
-                                    setBufferElement(buffer, i, getBufferElement(buffer, j));
+                                    setBufferElement(buffer, i, getBufferElement(buffer, j), true, isRTL);
                                     setReTargetPlaceHolder(buffer, j); //cleanup next position
                                     setReTargetPlaceHolder(buffer, j); //cleanup next position
                                 } else {
                                 } else {
                                     if (isMask(i))
                                     if (isMask(i))
@@ -1082,7 +1082,7 @@
                     for (var i = start; i <= end && i < getMaskLength(buffer) ; i++) {
                     for (var i = start; i <= end && i < getMaskLength(buffer) ; i++) {
                         if (isMask(i)) {
                         if (isMask(i)) {
                             var t = getBufferElement(buffer, i);
                             var t = getBufferElement(buffer, i);
-                            setBufferElement(buffer, i, c);
+                            setBufferElement(buffer, i, c, true, isRTL);
                             if (t != getPlaceHolder(i)) {
                             if (t != getPlaceHolder(i)) {
                                 var j = seekNext(buffer, i);
                                 var j = seekNext(buffer, i);
                                 if (j < getMaskLength(buffer)) {
                                 if (j < getMaskLength(buffer)) {
@@ -1270,7 +1270,7 @@
                                                 }
                                                 }
                                                 shiftL(firstUnmaskedPosition, p, c);
                                                 shiftL(firstUnmaskedPosition, p, c);
                                             } else writeOutBuffer = false;
                                             } else writeOutBuffer = false;
-                                        } else setBufferElement(buffer, p, c);
+                                        } else setBufferElement(buffer, p, c, true, isRTL);
                                     }
                                     }
 
 
                                     if (writeOutBuffer) {
                                     if (writeOutBuffer) {
@@ -1284,7 +1284,6 @@
                             }
                             }
                             else {
                             else {
                                 var p = seekNext(buffer, pos.begin - 1), np;
                                 var p = seekNext(buffer, pos.begin - 1), np;
-                                prepareBuffer(buffer, p, isRTL);
                                 if ((np = isValid(p, c, buffer, false, isRTL)) !== false) {
                                 if ((np = isValid(p, c, buffer, false, isRTL)) !== false) {
                                     var refresh = false;
                                     var refresh = false;
                                     if (np !== true) {
                                     if (np !== true) {
@@ -1302,7 +1301,7 @@
                                             if (lastUnmaskedPosition >= p)
                                             if (lastUnmaskedPosition >= p)
                                                 shiftR(p, buffer.length, c);
                                                 shiftR(p, buffer.length, c);
                                             else writeOutBuffer = false;
                                             else writeOutBuffer = false;
-                                        } else setBufferElement(buffer, p, c);
+                                        } else setBufferElement(buffer, p, c, true, isRTL);
                                     }
                                     }
                                     if (writeOutBuffer) {
                                     if (writeOutBuffer) {
                                         var next = seekNext(buffer, p);
                                         var next = seekNext(buffer, p);
@@ -1348,7 +1347,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.2.11
+Version: 2.2.12
 
 
 Optional extensions on the jquery.inputmask base
 Optional extensions on the jquery.inputmask base
 */
 */
@@ -1445,7 +1444,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2012 Robin Herbots
 Copyright (c) 2010 - 2012 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.2.11
+Version: 2.2.12
 
 
 Optional extensions on the jquery.inputmask base
 Optional extensions on the jquery.inputmask base
 */
 */
@@ -1938,7 +1937,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.2.11
+Version: 2.2.12
 
 
 Optional extensions on the jquery.inputmask base
 Optional extensions on the jquery.inputmask base
 */
 */

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


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


+ 1 - 1
jquery.inputmask.jquery.json

@@ -8,7 +8,7 @@
 		"inputmask",
 		"inputmask",
 		"mask"
 		"mask"
     ],
     ],
-    "version": "2.2.11",
+    "version": "2.2.12",
     "author": {
     "author": {
         "name": "Robin Herbots",
         "name": "Robin Herbots",
         "url": "http://github.com/RobinHerbots/jquery.inputmask"
         "url": "http://github.com/RobinHerbots/jquery.inputmask"

+ 10 - 11
js/jquery.inputmask.js

@@ -533,8 +533,8 @@
                 return position;
                 return position;
             }
             }
 
 
-            function setBufferElement(buffer, position, element) {
-                //position = prepareBuffer(buffer, position);
+            function setBufferElement(buffer, position, element, autoPrepare, isRTL) {
+                if (autoPrepare) position = prepareBuffer(buffer, position, isRTL);
 
 
                 var test = getActiveTests()[determineTestPosition(position)];
                 var test = getActiveTests()[determineTestPosition(position)];
                 var elem = element;
                 var elem = element;
@@ -628,7 +628,7 @@
                                     pos = np.pos != undefined ? np.pos : pos; //set new position from isValid
                                     pos = np.pos != undefined ? np.pos : pos; //set new position from isValid
                                     c = np.c != undefined ? np.c : c; //set new char from isValid
                                     c = np.c != undefined ? np.c : c; //set new char from isValid
                                 }
                                 }
-                                setBufferElement(buffer, pos, c);
+                                setBufferElement(buffer, pos, c, true, isRTL);
                                 lastMatch = checkPosition = pos;
                                 lastMatch = checkPosition = pos;
                             } else {
                             } else {
                                 setReTargetPlaceHolder(buffer, pos);
                                 setReTargetPlaceHolder(buffer, pos);
@@ -649,7 +649,7 @@
                     }
                     }
                 }
                 }
                 //Truncate buffer when using non-greedy masks
                 //Truncate buffer when using non-greedy masks
-                if (getActiveMaskSet()['greedy'] == false) {
+                if (getActiveMaskSet()['greedy'] == false && buffer.length > getActiveBuffer().length) {
                     var newBuffer = truncateInput(buffer.join(''), isRTL).split(''), nbL = newBuffer.length;
                     var newBuffer = truncateInput(buffer.join(''), isRTL).split(''), nbL = newBuffer.length;
                     for (var ndx = 0; ndx < nbL; ndx++) { //map changes into the original buffer
                     for (var ndx = 0; ndx < nbL; ndx++) { //map changes into the original buffer
                         buffer[ndx] = newBuffer[ndx];
                         buffer[ndx] = newBuffer[ndx];
@@ -763,8 +763,8 @@
                     if (ms["lastValidPosition"] && ms["lastValidPosition"] >= highestValidPosition && ms["lastValidPosition"] == aml) {
                     if (ms["lastValidPosition"] && ms["lastValidPosition"] >= highestValidPosition && ms["lastValidPosition"] == aml) {
                         var msComplete = true;
                         var msComplete = true;
                         for (var i = 0; i <= aml; i++) {
                         for (var i = 0; i <= aml; i++) {
-                            var mask = isMask(i);
-                            if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBuffer()[i])) {
+                            var mask = isMask(i), testPos = determineTestPosition(i);
+                            if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBuffer()[testPos])) {
                                 msComplete = false;
                                 msComplete = false;
                                 break;
                                 break;
                             }
                             }
@@ -1059,7 +1059,7 @@
                             var p = getBufferElement(buffer, j);
                             var p = getBufferElement(buffer, j);
                             if (p != getPlaceHolder(j)) {
                             if (p != getPlaceHolder(j)) {
                                 if (j < getMaskLength(buffer) && isValid(i, p, buffer, true, isRTL) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {
                                 if (j < getMaskLength(buffer) && isValid(i, p, buffer, true, isRTL) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {
-                                    setBufferElement(buffer, i, getBufferElement(buffer, j));
+                                    setBufferElement(buffer, i, getBufferElement(buffer, j), true, isRTL);
                                     setReTargetPlaceHolder(buffer, j); //cleanup next position
                                     setReTargetPlaceHolder(buffer, j); //cleanup next position
                                 } else {
                                 } else {
                                     if (isMask(i))
                                     if (isMask(i))
@@ -1082,7 +1082,7 @@
                     for (var i = start; i <= end && i < getMaskLength(buffer) ; i++) {
                     for (var i = start; i <= end && i < getMaskLength(buffer) ; i++) {
                         if (isMask(i)) {
                         if (isMask(i)) {
                             var t = getBufferElement(buffer, i);
                             var t = getBufferElement(buffer, i);
-                            setBufferElement(buffer, i, c);
+                            setBufferElement(buffer, i, c, true, isRTL);
                             if (t != getPlaceHolder(i)) {
                             if (t != getPlaceHolder(i)) {
                                 var j = seekNext(buffer, i);
                                 var j = seekNext(buffer, i);
                                 if (j < getMaskLength(buffer)) {
                                 if (j < getMaskLength(buffer)) {
@@ -1270,7 +1270,7 @@
                                                 }
                                                 }
                                                 shiftL(firstUnmaskedPosition, p, c);
                                                 shiftL(firstUnmaskedPosition, p, c);
                                             } else writeOutBuffer = false;
                                             } else writeOutBuffer = false;
-                                        } else setBufferElement(buffer, p, c);
+                                        } else setBufferElement(buffer, p, c, true, isRTL);
                                     }
                                     }
 
 
                                     if (writeOutBuffer) {
                                     if (writeOutBuffer) {
@@ -1284,7 +1284,6 @@
                             }
                             }
                             else {
                             else {
                                 var p = seekNext(buffer, pos.begin - 1), np;
                                 var p = seekNext(buffer, pos.begin - 1), np;
-                                prepareBuffer(buffer, p, isRTL);
                                 if ((np = isValid(p, c, buffer, false, isRTL)) !== false) {
                                 if ((np = isValid(p, c, buffer, false, isRTL)) !== false) {
                                     var refresh = false;
                                     var refresh = false;
                                     if (np !== true) {
                                     if (np !== true) {
@@ -1302,7 +1301,7 @@
                                             if (lastUnmaskedPosition >= p)
                                             if (lastUnmaskedPosition >= p)
                                                 shiftR(p, buffer.length, c);
                                                 shiftR(p, buffer.length, c);
                                             else writeOutBuffer = false;
                                             else writeOutBuffer = false;
-                                        } else setBufferElement(buffer, p, c);
+                                        } else setBufferElement(buffer, p, c, true, isRTL);
                                     }
                                     }
                                     if (writeOutBuffer) {
                                     if (writeOutBuffer) {
                                         var next = seekNext(buffer, p);
                                         var next = seekNext(buffer, p);