Browse Source

removed implementation of the optional masks. I will take another approach on that.

Robin Herbots 15 years ago
parent
commit
b2b6bb3e4f
1 changed files with 12 additions and 125 deletions
  1. 12 125
      jquery.inputmask.js

+ 12 - 125
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.8
+Version: 0.2.8a
   
 This plugin is based on the masked input plugin written by Josh Bush (digitalbush.com)
 */
@@ -99,7 +99,6 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             if (fn == 'mask') {
                 //init buffer
                 var _buffer = getMaskTemplate();
-                var _numberOfRemovedElementsFromMask = 0;
                 var tests = getTestingChain();
 
                 return this.each(function() {
@@ -108,7 +107,6 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             } else if (fn == 'unmaskedvalue') {
                 var tests = this.data('tests');
                 var _buffer = this.data('_buffer');
-                var _numberOfRemovedElementsFromMask = 0;
                 opts.greedy = this.data('greedy');
                 opts.repeat = this.data('repeat');
                 return unmaskedvalue(this);
@@ -121,7 +119,6 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
 
                 //init buffer
                 var _buffer = getMaskTemplate();
-                var _numberOfRemovedElementsFromMask = 0;
                 var tests = getTestingChain();
 
                 return this.each(function() {
@@ -133,7 +130,6 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
 
             //init buffer
             var _buffer = getMaskTemplate();
-            var _numberOfRemovedElementsFromMask = 0;
             var tests = getTestingChain();
 
             return this.each(function() {
@@ -202,23 +198,8 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
         }
 
         function isValid(pos, c, buffer) {
-            if (pos >= getMaskLength() + _numberOfRemovedElementsFromMask) return false;
+            if (pos >= getMaskLength()) return false;
             var testPos = determineTestPosition(pos);
-            var firstMaskPosition = false;
-            //apply offset
-            if (tests[testPos].optionality) {
-                firstMaskPosition = isFirstMaskOfBlock(testPos);
-                if (tests[testPos].offset > 0) {
-                    if (firstMaskPosition !== false && firstMaskPosition == testPos) {
-                        clearOffsets(firstMaskPosition, buffer);
-                    }
-                    else {
-                        var newPos = pos + tests[testPos].offset;
-                        testPos = determineTestPosition(newPos);
-                        firstMaskPosition = isFirstMaskOfBlock(testPos);
-                    }
-                }
-            }
 
             var loopend = 0;
             if (c) { loopend = 1; }
@@ -229,80 +210,31 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             }
 
             if (c) { chrs += c; }
-            var testResult = tests[testPos].regex != null ? tests[testPos].regex.test(chrs) : false;
-            if (!testResult) {
-                if (tests[testPos].optionality && firstMaskPosition !== false) {
-                    //adjust the position with the firstMaskPosition offset
-                    var isNextValid = isValid(seekNext(buffer, pos - (testPos - firstMaskPosition), true), c, buffer);
-                    return isNextValid ? (testPos - firstMaskPosition) : false; //return the offset of the firstmask if valid
-                }
-            }
-            return testResult;
+            return tests[testPos].regex != null ? tests[testPos].regex.test(chrs) : false;
         }
 
         function isMask(pos) {
             var testPos = determineTestPosition(pos);
             var test = tests[testPos];
-            if (test != undefined && test.optionality && test.offset > 0) {
-                var newPos = pos + test.offset;
-                if (newPos < tests.length) {
-                    testPos = determineTestPosition(newPos);
-                    test = tests[testPos];
-                }
-            }
-            return test != undefined ? test.regex : false;
-        }
 
-        //returns the testPosition of the newBlockMarker or false
-        function isFirstMaskOfBlock(testPosition) {
-            if (!tests[testPosition].newBlockMarker) {
-                while (testPosition > 0 && tests[testPosition - 1].regex == null) {//search marker in nonmask items
-                    if (tests[--testPosition].newBlockMarker)
-                        break;
-                };
-            }
-            return tests[testPosition].newBlockMarker ? testPosition : false;
+            return test != undefined ? test.regex : false;
         }
 
         function determineTestPosition(pos) {
             return pos % tests.length;
         }
 
-        function clearOffsets(start, buffer) {
-            if (buffer)
-                SetReTargetPlaceHolder(buffer, start);
-            if (tests[determineTestPosition(start)].newBlockMarker) {
-                var blockOffset = 1;
-                while (!tests[determineTestPosition(start + blockOffset)].newBlockMarker) { blockOffset++; }
-                for (var i = start, maskL = getMaskLength(); i < maskL; i++) {
-                    var offset = tests[determineTestPosition(i)].offset;
-                    tests[determineTestPosition(i)].offset = offset >= blockOffset ? offset - blockOffset : 0;
-                }
-            }
-        }
-
         function getMaskLength() {
             var calculatedLength = _buffer.length;
             if (!opts.greedy && opts.repeat > 1) {
                 calculatedLength += (_buffer.length * (opts.repeat - 1))
             }
-            return calculatedLength - _numberOfRemovedElementsFromMask;
+            return calculatedLength;
         }
 
-        //pos: from position, nextBlock: true/false goto next newBlockMarker
-        function seekNext(buffer, pos, nextBlock) {
+        //pos: from position
+        function seekNext(buffer, pos) {
             var position = pos, maskL = getMaskLength();
-            if (nextBlock) {
-                var offset = 1;
-                while (++position < maskL && tests[determineTestPosition(position)].newBlockMarker != nextBlock) { offset++; };
-                if (position < maskL && tests[determineTestPosition(position)].newBlockMarker) {
-                    for (var i = 0; i < maskL; i++) {
-                        tests[determineTestPosition(pos + i)].offset += offset;
-                    }
-                    SetReTargetPlaceHolder(buffer, pos);
-                }
-                position--;
-            }
             while (++position < maskL && !isMask(position)) { };
             return position;
         }
@@ -327,44 +259,15 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             }
         };
 
-        function SetReTargetPlaceHolder(buffer, pos, clearOptionalElement) {
+        function SetReTargetPlaceHolder(buffer, pos) {
             var testPos = determineTestPosition(pos);
-            var test = tests[testPos];
-            if (test != undefined) {
-                if (test.optionality && test.offset > 0) {
-                    var firstMaskPosition = isFirstMaskOfBlock(testPos + test.offset);
-                    if (firstMaskPosition !== false && _numberOfRemovedElementsFromMask >= test.offset) {  //needs fixing does not take multiple optional masks into account
-                        if (clearOptionalElement)
-                            setBufferElement(buffer, pos, getBufferElement(_buffer, testPos + test.offset));
-                        for (var i = firstMaskPosition - test.offset; i < testPos; i++) { //reset placeholders
-                            setBufferElement(buffer, i, getBufferElement(_buffer, i));
-                        }
-                        $.each(_buffer.slice(testPos, testPos + test.offset), function() {
-                            buffer.splice(pos++, 0, this.toString());
-                        });
-                        _numberOfRemovedElementsFromMask -= test.offset;
-                        clearOffsets(firstMaskPosition - test.offset);
-
-                    }
-                    else {
-                        var testedPosition = testPos + test.offset;
-                        setBufferElement(buffer, pos, getBufferElement(_buffer, testedPosition));
-                        if (testedPosition < buffer.length) {
-                            //remove RetargetPosition
-                            buffer.splice(pos, test.offset);
-                            _numberOfRemovedElementsFromMask += test.offset;
-                        }
-                    }
-                } else setBufferElement(buffer, pos, getBufferElement(_buffer, testPos));
-            }
+            setBufferElement(buffer, pos, getBufferElement(_buffer, testPos));
         }
 
         function checkVal(input, buffer, clearInvalid) {
-            clearOffsets(0);
             var inputValue = _val.call(input).replace(new RegExp("(" + EscapeRegex(_buffer.join('')) + ")*$"), "");
             clearBuffer(buffer, 0, buffer.length);
             buffer.length = _buffer.length; //reset the buffer to its original size
-            _numberOfRemovedElementsFromMask = 0;
             var lastMatch = -1, checkPosition = -1;
             for (var i = 0, ivl = inputValue.length; i < ivl; i++) {
                 for (var pos = checkPosition + 1; pos < getMaskLength(); pos++) {
@@ -373,15 +276,10 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                             setBufferElement(buffer, pos, inputValue.charAt(i));
                             lastMatch = checkPosition = pos;
                         } else {
-                            var testPos = determineTestPosition(pos);
-                            if (tests[testPos] && tests[testPos].newBlockMarker) {
-                                clearOffsets(testPos);
-                            }
-                            setBufferElement(buffer, pos, getBufferElement(_buffer, testPos));
+                            SetReTargetPlaceHolder(buffer, pos);
                             if (inputValue.charAt(i) == opts.placeholder)
                                 checkPosition = pos;
                         }
-
                         break;
                     } else {   //nonmask
                         SetReTargetPlaceHolder(buffer, pos);
@@ -509,7 +407,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                 while (!isMask(pos) && --pos >= 0);
                 for (var i = pos; i < getMaskLength(); i++) {
                     if (isMask(i)) {
-                        SetReTargetPlaceHolder(buffer, i, true); //clear the position
+                        SetReTargetPlaceHolder(buffer, i);
 
                         var j = seekNext(buffer, i);
                         var p = getBufferElement(buffer, j);
@@ -517,9 +415,6 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                             if (j < getMaskLength() && isValid(i, p, buffer) !== false) {
                                 setBufferElement(buffer, i, getBufferElement(buffer, j));
                             } else {
-                                //var firstMaskOfBlock = isFirstMaskOfBlock(determineTestPosition(i));
-                                //if (firstMaskOfBlock !== false)
-                                //clearOffsets(firstMaskOfBlock, firstMaskOfBlock + tests[firstMaskOfBlock].offset, buffer);
                                 if (isMask(i))
                                     break;
                             }
@@ -544,10 +439,6 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                                 if (isValid(j, t, buffer) !== false)
                                     c = t;
                                 else {
-                                    var firstMaskOfBlock = isFirstMaskOfBlock(determineTestPosition(j));
-                                    if (firstMaskOfBlock !== false) {
-                                        clearOffsets(firstMaskOfBlock, buffer);
-                                    }
                                     if (isMask(j))
                                         break;
                                     else c = t;
@@ -628,11 +519,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                     var p = seekNext(buffer, pos.begin - 1);
                     if (p < getMaskLength()) {
                         var c = String.fromCharCode(k);
-                        var firstMaskOffset = isValid(p, c, buffer);
-                        if (firstMaskOffset !== false) {
-                            if (typeof (firstMaskOffset) == 'number')
-                                p = p - firstMaskOffset;
-
+                        if (isValid(p, c, buffer)) {
                             shiftR(p, c);
                             writeBuffer(input, buffer);
                             var next = seekNext(buffer, p);