Browse Source

some fixes & changes for the greedy option

Robin Herbots 14 years ago
parent
commit
3079eee0da
1 changed files with 26 additions and 38 deletions
  1. 26 38
      jquery.inputmask.js

+ 26 - 38
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.4.3
+Version: 0.4.3a
  
 This plugin is based on the masked input plugin written by Josh Bush (digitalbush.com)
 */
@@ -187,7 +187,6 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             
             function getMaskTemplate() {
                 var escaped = false;
-                if (opts.mask.length == 1 && opts.greedy == false) { opts.placeholder = ""; } //hide placeholder with single non-greedy mask
                 var singleMask = $.map(opts.mask.split(""), function(element, index) {
                     var outElem = [];
                     if (element == opts.escapeChar) {
@@ -311,30 +310,14 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                 while ((buffer.length <= position || position < 0) && buffer.length < getMaskLength()) {
                     var j;
                     if (opts.numericInput) {
-                        j = _buffer.length - 1;
-                        if (typeof _buffer.length === "number") {
-                            while (0 <= j--) {
-                                buffer.unshift(_buffer[j]);
-                                position++;
-                            }
-                        } else {
-                            while (_buffer[j] !== undefined) {
-                                buffer.unshift(_buffer[j--]);
-                                position++;
-                            }
-                        }
-                    }
-                    else {
-                        j = 0;
-                        if (typeof _buffer.length === "number") {
-                            for (var l = _buffer.length; j < l; j++) {
-                                buffer.push(_buffer[j]);
-                            }
-                        } else {
-                            while (_buffer[j] !== undefined) {
-                                buffer.push(_buffer[j++]);
-                            }
-                        }
+                       j = determineTestPosition(position); 
+                       buffer.unshift(_buffer[j]);
+                       position++;  
+                    } else {
+                       for(var i = buffer.length; i <= position; i++) {
+                            j = determineTestPosition(i); 
+                            buffer.push(_buffer[j]);             
+                       }          
                     }
                 }
             }
@@ -358,7 +341,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             function checkVal(input, buffer, clearInvalid) {
                 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
+                buffer.length = opts.greedy === true ? _buffer.length : 0; //reset the buffer to its original size
                 var lastMatch = -1, checkPosition = -1, maskL = getMaskLength();
                 if (opts.numericInput) {
                     var p = seekPrevious(buffer, maskL);
@@ -429,7 +412,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             function unmaskedvalue(el, skipDatepickerCheck) {
 
                 if (tests && (skipDatepickerCheck === true || !el.hasClass('hasDatepicker'))) {
-                    var buffer = _buffer.slice();
+                    var buffer = opts.greedy === true ? _buffer.slice() : [];
                     checkVal(el, buffer);
                     return $.map(buffer, function(element, index) {
                         return isMask(index) && element != getBufferElement(_buffer.slice(), index) ? element : null;
@@ -483,7 +466,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                 });
 
                 //init buffer
-                var buffer = _buffer.slice();
+                var buffer = opts.greedy === true ? _buffer.slice() : [];
                 var undoBuffer = _val.call(input);
                 var ignore = false;              //Variable for ignoring control keys
                 var lastPosition = -1;
@@ -497,7 +480,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                     input.bind("mouseenter.inputmask", function() {
                         var input = $(this);
                         if (!input.hasClass('focus.inputmask') && _val.call(input).length == 0) {
-                            buffer = _buffer.slice();
+                            buffer = opts.greedy === true ? _buffer.slice() : [];
                             writeBuffer(input, buffer);
                         }
                     }).bind("blur.inputmask", function() {
@@ -512,7 +495,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                             if (opts.clearMaskOnLostFocus)
                                 _val.call(input, '');
                             else {
-                                buffer = _buffer.slice();
+                                buffer = opts.greedy === true ? _buffer.slice() : [];
                                 writeBuffer(input, buffer);
                             }
                         }
@@ -545,7 +528,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                     var input = $(this);
                     var k = e.keyCode;
                     if (k == opts.keyCode.TAB && input.hasClass('focus.inputmask') && _val.call(input).length == 0) {
-                        buffer = _buffer.slice();
+                        buffer = opts.greedy === true ? _buffer.slice() : [];
                         writeBuffer(input, buffer);
                         if (!opts.numericInput) caret(input, 0);
                     }
@@ -599,7 +582,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                         setBufferElement(buffer, seekPrevious(buffer, end), c);
 
                     buffer = buffer.join('').replace(new RegExp("(" + EscapeRegex(_buffer.join('')) + ")*$"), "").split('');
-                    if (buffer.length == 0) buffer = _buffer.slice();
+                    if (buffer.length == 0) buffer = opts.greedy === true ? _buffer.slice() : [];
 
                     return start; //return the used start position
                 }
@@ -639,7 +622,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                     if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iPhone && k == 127)) {//backspace/delete
                         var maskL = getMaskLength();
                         if (pos.begin == 0 && pos.end == maskL) {
-                            buffer = _buffer.slice();
+                            buffer = opts.greedy === true ? _buffer.slice() : [];
                             writeBuffer(input, buffer);
                             if (!opts.numericInput) caret(input, 0);
                         } else {
@@ -708,11 +691,16 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                     } else if ((k >= 32 && k <= 125) || k > 186) {//typeable characters
                         var c = String.fromCharCode(k);
                         if (opts.numericInput) {
-                            var p = seekPrevious(buffer, pos.end);
+                            var posEnd = opts.greedy ? pos.end : (pos.end + 1);
+                            var p = seekPrevious(buffer, posEnd);
                             if (isValid(p, c, buffer)) {
-                                if (isValid(firstMaskPos, buffer[firstMaskPos], buffer) == false) {
-                                    shiftL(firstMaskPos, pos.end, c);
-                                    writeBuffer(input, buffer, pos.end);
+                                if (isValid(firstMaskPos, buffer[firstMaskPos], buffer) == false || (opts.greedy === false && buffer.length < getMaskLength())) {
+                                    if(opts.greedy) {
+                                        shiftL(firstMaskPos, posEnd, c);
+                                        writeBuffer(input, buffer, posEnd);
+                                    } else { 
+                                        setBufferElement(buffer, posEnd, c);
+                                    }
                                 } else if (opts.oncomplete)
                                     opts.oncomplete.call(input);
                             }