Browse Source

fixes in shirftR

Robin Herbots 15 years ago
parent
commit
a861b7eb2f
1 changed files with 22 additions and 19 deletions
  1. 22 19
      jquery.inputmask.js

+ 22 - 19
jquery.inputmask.js

@@ -3,7 +3,7 @@ Input Mask plugin for jquery
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 0.2.4c
+Version: 0.2.4d
    
 This plugin is based on the masked input plugin written by Josh Bush (digitalbush.com)
 */
@@ -201,10 +201,11 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             //apply offset
             if (tests[testPos].optionality) {
                 if (isFirstMaskOfBlock(testPos))
-                    clearOffsets(testPos, testPos + tests[testPos].offset);
+                //retain the possible offset in the FirstMaskOfBlock - needed to clear invalid chars in shiftR - has no further impact
+                    clearOffsets(testPos + 1, testPos + tests[testPos].offset);
                 else {
                     var newPos = pos + tests[testPos].offset;
-//                    while (newPos <= getMaskLength() && !isMask(newPos)) { newPos++; };
+                    //                    while (newPos <= getMaskLength() && !isMask(newPos)) { newPos++; };
                     testPos = determineTestPosition(newPos);
                 }
             }
@@ -229,7 +230,6 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                 var newPos = pos + tests[testPos].offset;
                 testPos = determineTestPosition(newPos);
             }
-
             return tests[testPos] ? tests[testPos].regex : false;
         }
 
@@ -423,7 +423,8 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                             setBufferElement(buffer, i, getBufferElement(buffer, j));
                         } else
                             break;
-                    }
+                    } else
+                        SetReTargetPlaceHolder(i);
                 }
                 buffer = buffer.join('').replace(new RegExp("(" + _buffer.join('') + ")*$"), "").split('');
                 if (buffer.length == 0) buffer = _buffer.slice();
@@ -431,26 +432,29 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                 caret(input, pos);
             };
 
-            function shiftR(pos) {
-                for (var i = pos, c = opts.placeholder; i < getMaskLength(); i++) {
+            function shiftR(pos, c) {
+                for (var i = pos; i < getMaskLength(); i++) {
                     if (isMask(i)) {
-                        var j = seekNext(i);
                         var t = getBufferElement(buffer, i);
                         setBufferElement(buffer, i, c);
+                        var j = seekNext(i);
+                        if (!isMask(i + 1)) SetReTargetPlaceHolder(i + 1); //remark nonmask elements
                         if (j < getMaskLength() && isValid(j, t, buffer))
                             c = t;
-                        else
-                            break;
-                    } else {
-                        var testPos = determineTestPosition(i);
-                        if (tests[testPos].optionality && tests[testPos].offset > 0) {
-                            var testedPosition = i + tests[testPos].offset;
-                            setBufferElement(buffer, i, getBufferElement(buffer, testedPosition));
-                        }
-                    }
+                        else break;
+                    } else
+                        SetReTargetPlaceHolder(i);
                 }
             };
 
+            function SetReTargetPlaceHolder(pos) {
+                var testPos = determineTestPosition(pos);
+                if (tests[testPos].optionality && tests[testPos].offset > 0) {
+                    var testedPosition = pos + tests[testPos].offset;
+                    setBufferElement(buffer, pos, getBufferElement(_buffer, testedPosition));
+                }
+            }
+
             function caret(input, begin, end) {
                 if (input.length == 0) return;
                 if (typeof begin == 'number') {
@@ -518,8 +522,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                     if (p < getMaskLength()) {
                         var c = String.fromCharCode(k);
                         if (isValid(p, c, buffer)) {
-                            shiftR(p);
-                            setBufferElement(buffer, p, c);
+                            shiftR(p, c);
                             writeBuffer(input, buffer);
                             var next = seekNext(p);
                             caret($(this), next);