Browse Source

fix in remove/overtype code

Robin Herbots 12 years ago
parent
commit
e21ba15799

+ 1 - 1
build.properties

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

+ 1 - 1
component.json

@@ -1,6 +1,6 @@
 {
     "name": "jquery.inputmask",
-    "version": "2.3.61",
+    "version": "2.3.62",
     "main": "./dist/jquery.inputmask.bundle.js",
     "dependencies": {
         "jquery": ">=1.5"

BIN
dist/jQuery.InputMask.2.3.61.nupkg


BIN
dist/jQuery.InputMask.2.3.62.nupkg


+ 77 - 103
dist/jquery.inputmask.bundle.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2013 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 2.3.61
+* Version: 2.3.62
 */
 
 (function ($) {
@@ -1267,9 +1267,9 @@
                     }
 
                     //shift chars to left from start to end and put c at end position if defined
-                    function shiftL(start, end, c, nomaskJumps) {
+                    function shiftL(start, end, c, maskJumps) {
                         var buffer = getActiveBuffer();
-                        if (nomaskJumps !== false) //jumping over nonmask position
+                        if (maskJumps !== false) //jumping over nonmask position
                             while (!isMask(start) && start - 1 >= 0) start--;
                         for (var i = start; i < end && i < getMaskLength() ; i++) {
                             if (isMask(i)) {
@@ -1339,9 +1339,66 @@
                             if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice();
                         }
                         return end - (lengthBefore - buffer.length); //return new start position
-                    }
+                    };
 
-                    ;
+
+                    function HandleRemove(input, k, pos) {
+                        if (opts.numericInput || isRTL) {
+                            switch (k) {
+                                case opts.keyCode.BACKSPACE:
+                                    k = opts.keyCode.DELETE;
+                                    break;
+                                case opts.keyCode.DELETE:
+                                    k = opts.keyCode.BACKSPACE;
+                                    break;
+                            }
+                            if (isRTL) {
+                                var pend = pos.end;
+                                pos.end = pos.begin;
+                                pos.begin = pend;
+                            }
+                        }
+
+                        var isSelection = true;
+                        if (pos.begin == pos.end) {
+                            var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;
+                            if (opts.isNumeric && opts.radixPoint != "" && getActiveBuffer()[posBegin] == opts.radixPoint) {
+                                pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);
+                                pos.end = pos.begin;
+                            }
+                            isSelection = false;
+                            if (k == opts.keyCode.BACKSPACE)
+                                pos.begin--;
+                            else if (k == opts.keyCode.DELETE)
+                                pos.end++;
+                        } else if (pos.end - pos.begin == 1 && !opts.insertMode) {
+                            isSelection = false;
+                            if (k == opts.keyCode.BACKSPACE)
+                                pos.begin--;
+                        }
+
+                        clearBuffer(getActiveBuffer(), pos.begin, pos.end);
+
+                        var ml = getMaskLength();
+                        if (opts.greedy == false) {
+                            shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
+                        } else {
+                            var newpos = pos.begin;
+                            for (var i = pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection
+                                if (isMask(i) || !isSelection)
+                                    newpos = shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
+                            }
+                            if (!isSelection) pos.begin = newpos;
+                        }
+                        var firstMaskPos = seekNext(-1);
+                        checkVal(input, false, true, getActiveBuffer());
+                        if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
+                            getActiveMaskSet()["lastValidPosition"] = -1;
+                            getActiveMaskSet()["p"] = firstMaskPos;
+                        } else {
+                            getActiveMaskSet()["p"] = pos.begin;
+                        }
+                    }
 
                     function keydownEvent(e) {
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
@@ -1351,61 +1408,7 @@
                         //backspace, delete, and escape get special treatment
                         if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || (e.ctrlKey && k == 88)) { //backspace/delete
                             e.preventDefault(); //stop default action but allow propagation
-
-                            if (opts.numericInput || isRTL) {
-                                switch (k) {
-                                    case opts.keyCode.BACKSPACE:
-                                        k = opts.keyCode.DELETE;
-                                        break;
-                                    case opts.keyCode.DELETE:
-                                        k = opts.keyCode.BACKSPACE;
-                                        break;
-                                }
-                                if (isRTL) {
-                                    var pend = pos.end;
-                                    pos.end = pos.begin;
-                                    pos.begin = pend;
-                                }
-                            }
-
-                            var isSelection = true;
-                            if (pos.begin == pos.end) {
-                                var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;
-                                if (opts.isNumeric && opts.radixPoint != "" && getActiveBuffer()[posBegin] == opts.radixPoint) {
-                                    pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);
-                                    pos.end = pos.begin;
-                                }
-                                isSelection = false;
-                                if (k == opts.keyCode.BACKSPACE)
-                                    pos.begin--;
-                                else if (k == opts.keyCode.DELETE)
-                                    pos.end++;
-                            } else if (pos.end - pos.begin == 1 && !opts.insertMode) {
-                                isSelection = false;
-                                if (k == opts.keyCode.BACKSPACE)
-                                    pos.begin--;
-                            }
-
-                            clearBuffer(getActiveBuffer(), pos.begin, pos.end);
-
-                            var ml = getMaskLength();
-                            if (opts.greedy == false) {
-                                shiftL(pos.begin, ml);
-                            } else {
-                                var newpos = pos.begin;
-                                for (var i = isSelection ? seekNext(pos.begin - 1) : pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection
-                                    newpos = shiftL(pos.begin, ml, undefined, !isRTL && k == opts.keyCode.DELETE);
-                                }
-                                if (!isSelection) pos.begin = newpos;
-                            }
-                            var firstMaskPos = seekNext(-1);
-                            checkVal(input, false, true, getActiveBuffer());
-                            if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
-                                getActiveMaskSet()["lastValidPosition"] = -1;
-                                getActiveMaskSet()["p"] = firstMaskPos;
-                            } else {
-                                getActiveMaskSet()["p"] = pos.begin;
-                            }
+                            HandleRemove(input, k, pos);
                             determineActiveMasksetIndex();
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
@@ -1478,45 +1481,16 @@
                                 var isSlctn = isSelection(pos.begin, pos.end), redetermineLVP = false,
                                     initialIndex = activeMasksetIndex;
                                 if (isSlctn) {
-                                    if (isRTL) {
-                                        var pend = pos.end;
-                                        pos.end = pos.begin;
-                                        pos.begin = pend;
-                                    }
-                                    $.each(masksets, function (ndx, lmnt) {
-                                        if (typeof (lmnt) == "object") {
-                                            activeMasksetIndex = ndx;
-                                            getActiveMaskSet()["undoBuffer"] = getActiveBuffer().join(''); //init undobuffer for recovery when not valid
-                                            var posend = pos.end < getMaskLength() ? pos.end : getMaskLength();
-                                            if (getActiveMaskSet()["lastValidPosition"] > pos.begin && getActiveMaskSet()["lastValidPosition"] < posend) {
-                                                getActiveMaskSet()["lastValidPosition"] = seekPrevious(pos.begin);
-                                            } else {
-                                                redetermineLVP = true;
-                                            }
-                                            clearBuffer(getActiveBuffer(), pos.begin, posend);
-                                            var ml = getMaskLength();
-                                            if (opts.greedy == false) {
-                                                shiftL(pos.begin, ml);
-                                            } else {
-                                                for (var i = pos.begin; i < posend; i++) {
-                                                    if (isMask(i))
-                                                        shiftL(pos.begin, ml);
-                                                }
+                                    activeMasksetIndex = initialIndex;
+                                    HandleRemove(input, opts.keyCode.DELETE, pos);
+                                    if (!opts.insertMode) { //preserve some space
+                                        $.each(masksets, function (ndx, lmnt) {
+                                            if (typeof (lmnt) == "object") {
+                                                activeMasksetIndex = ndx;
+                                                shiftR(pos.begin, getMaskLength(), getPlaceHolder(pos.begin), true);
+                                                getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]);
                                             }
-                                        }
-                                    });
-                                    if (redetermineLVP === true) {
-                                        activeMasksetIndex = initialIndex;
-                                        checkVal(input, false, true, getActiveBuffer());
-                                        if (!opts.insertMode) { //preserve some space
-                                            $.each(masksets, function (ndx, lmnt) {
-                                                if (typeof (lmnt) == "object") {
-                                                    activeMasksetIndex = ndx;
-                                                    shiftR(pos.begin, getMaskLength(), getPlaceHolder(pos.begin), true);
-                                                    getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]);
-                                                }
-                                            });
-                                        }
+                                        });
                                     }
                                     activeMasksetIndex = initialIndex; //restore index
                                 }
@@ -1656,7 +1630,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 Optional extensions on the jquery.inputmask base
 */
@@ -1758,7 +1732,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2012 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 Optional extensions on the jquery.inputmask base
 */
@@ -2242,7 +2216,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 Optional extensions on the jquery.inputmask base
 */
@@ -2419,7 +2393,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 Regex extensions on the jquery.inputmask base
 Allows for using regular expressions as a mask
@@ -2589,7 +2563,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 Phone extension.
 When using this extension make sure you specify the correct url to get the masks

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


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


+ 1 - 1
jquery.inputmask.jquery.json

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

+ 71 - 97
js/jquery.inputmask.js

@@ -1267,9 +1267,9 @@
                     }
 
                     //shift chars to left from start to end and put c at end position if defined
-                    function shiftL(start, end, c, nomaskJumps) {
+                    function shiftL(start, end, c, maskJumps) {
                         var buffer = getActiveBuffer();
-                        if (nomaskJumps !== false) //jumping over nonmask position
+                        if (maskJumps !== false) //jumping over nonmask position
                             while (!isMask(start) && start - 1 >= 0) start--;
                         for (var i = start; i < end && i < getMaskLength() ; i++) {
                             if (isMask(i)) {
@@ -1339,9 +1339,66 @@
                             if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice();
                         }
                         return end - (lengthBefore - buffer.length); //return new start position
-                    }
+                    };
 
-                    ;
+
+                    function HandleRemove(input, k, pos) {
+                        if (opts.numericInput || isRTL) {
+                            switch (k) {
+                                case opts.keyCode.BACKSPACE:
+                                    k = opts.keyCode.DELETE;
+                                    break;
+                                case opts.keyCode.DELETE:
+                                    k = opts.keyCode.BACKSPACE;
+                                    break;
+                            }
+                            if (isRTL) {
+                                var pend = pos.end;
+                                pos.end = pos.begin;
+                                pos.begin = pend;
+                            }
+                        }
+
+                        var isSelection = true;
+                        if (pos.begin == pos.end) {
+                            var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;
+                            if (opts.isNumeric && opts.radixPoint != "" && getActiveBuffer()[posBegin] == opts.radixPoint) {
+                                pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);
+                                pos.end = pos.begin;
+                            }
+                            isSelection = false;
+                            if (k == opts.keyCode.BACKSPACE)
+                                pos.begin--;
+                            else if (k == opts.keyCode.DELETE)
+                                pos.end++;
+                        } else if (pos.end - pos.begin == 1 && !opts.insertMode) {
+                            isSelection = false;
+                            if (k == opts.keyCode.BACKSPACE)
+                                pos.begin--;
+                        }
+
+                        clearBuffer(getActiveBuffer(), pos.begin, pos.end);
+
+                        var ml = getMaskLength();
+                        if (opts.greedy == false) {
+                            shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
+                        } else {
+                            var newpos = pos.begin;
+                            for (var i = pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection
+                                if (isMask(i) || !isSelection)
+                                    newpos = shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
+                            }
+                            if (!isSelection) pos.begin = newpos;
+                        }
+                        var firstMaskPos = seekNext(-1);
+                        checkVal(input, false, true, getActiveBuffer());
+                        if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
+                            getActiveMaskSet()["lastValidPosition"] = -1;
+                            getActiveMaskSet()["p"] = firstMaskPos;
+                        } else {
+                            getActiveMaskSet()["p"] = pos.begin;
+                        }
+                    }
 
                     function keydownEvent(e) {
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
@@ -1351,61 +1408,7 @@
                         //backspace, delete, and escape get special treatment
                         if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || (e.ctrlKey && k == 88)) { //backspace/delete
                             e.preventDefault(); //stop default action but allow propagation
-
-                            if (opts.numericInput || isRTL) {
-                                switch (k) {
-                                    case opts.keyCode.BACKSPACE:
-                                        k = opts.keyCode.DELETE;
-                                        break;
-                                    case opts.keyCode.DELETE:
-                                        k = opts.keyCode.BACKSPACE;
-                                        break;
-                                }
-                                if (isRTL) {
-                                    var pend = pos.end;
-                                    pos.end = pos.begin;
-                                    pos.begin = pend;
-                                }
-                            }
-
-                            var isSelection = true;
-                            if (pos.begin == pos.end) {
-                                var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;
-                                if (opts.isNumeric && opts.radixPoint != "" && getActiveBuffer()[posBegin] == opts.radixPoint) {
-                                    pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);
-                                    pos.end = pos.begin;
-                                }
-                                isSelection = false;
-                                if (k == opts.keyCode.BACKSPACE)
-                                    pos.begin--;
-                                else if (k == opts.keyCode.DELETE)
-                                    pos.end++;
-                            } else if (pos.end - pos.begin == 1 && !opts.insertMode) {
-                                isSelection = false;
-                                if (k == opts.keyCode.BACKSPACE)
-                                    pos.begin--;
-                            }
-
-                            clearBuffer(getActiveBuffer(), pos.begin, pos.end);
-
-                            var ml = getMaskLength();
-                            if (opts.greedy == false) {
-                                shiftL(pos.begin, ml);
-                            } else {
-                                var newpos = pos.begin;
-                                for (var i = isSelection ? seekNext(pos.begin - 1) : pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection
-                                    newpos = shiftL(pos.begin, ml, undefined, !isRTL && k == opts.keyCode.DELETE);
-                                }
-                                if (!isSelection) pos.begin = newpos;
-                            }
-                            var firstMaskPos = seekNext(-1);
-                            checkVal(input, false, true, getActiveBuffer());
-                            if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
-                                getActiveMaskSet()["lastValidPosition"] = -1;
-                                getActiveMaskSet()["p"] = firstMaskPos;
-                            } else {
-                                getActiveMaskSet()["p"] = pos.begin;
-                            }
+                            HandleRemove(input, k, pos);
                             determineActiveMasksetIndex();
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
@@ -1478,45 +1481,16 @@
                                 var isSlctn = isSelection(pos.begin, pos.end), redetermineLVP = false,
                                     initialIndex = activeMasksetIndex;
                                 if (isSlctn) {
-                                    if (isRTL) {
-                                        var pend = pos.end;
-                                        pos.end = pos.begin;
-                                        pos.begin = pend;
-                                    }
-                                    $.each(masksets, function (ndx, lmnt) {
-                                        if (typeof (lmnt) == "object") {
-                                            activeMasksetIndex = ndx;
-                                            getActiveMaskSet()["undoBuffer"] = getActiveBuffer().join(''); //init undobuffer for recovery when not valid
-                                            var posend = pos.end < getMaskLength() ? pos.end : getMaskLength();
-                                            if (getActiveMaskSet()["lastValidPosition"] > pos.begin && getActiveMaskSet()["lastValidPosition"] < posend) {
-                                                getActiveMaskSet()["lastValidPosition"] = seekPrevious(pos.begin);
-                                            } else {
-                                                redetermineLVP = true;
-                                            }
-                                            clearBuffer(getActiveBuffer(), pos.begin, posend);
-                                            var ml = getMaskLength();
-                                            if (opts.greedy == false) {
-                                                shiftL(pos.begin, ml);
-                                            } else {
-                                                for (var i = pos.begin; i < posend; i++) {
-                                                    if (isMask(i))
-                                                        shiftL(pos.begin, ml);
-                                                }
+                                    activeMasksetIndex = initialIndex;
+                                    HandleRemove(input, opts.keyCode.DELETE, pos);
+                                    if (!opts.insertMode) { //preserve some space
+                                        $.each(masksets, function (ndx, lmnt) {
+                                            if (typeof (lmnt) == "object") {
+                                                activeMasksetIndex = ndx;
+                                                shiftR(pos.begin, getMaskLength(), getPlaceHolder(pos.begin), true);
+                                                getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]);
                                             }
-                                        }
-                                    });
-                                    if (redetermineLVP === true) {
-                                        activeMasksetIndex = initialIndex;
-                                        checkVal(input, false, true, getActiveBuffer());
-                                        if (!opts.insertMode) { //preserve some space
-                                            $.each(masksets, function (ndx, lmnt) {
-                                                if (typeof (lmnt) == "object") {
-                                                    activeMasksetIndex = ndx;
-                                                    shiftR(pos.begin, getMaskLength(), getPlaceHolder(pos.begin), true);
-                                                    getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]);
-                                                }
-                                            });
-                                        }
+                                        });
                                     }
                                     activeMasksetIndex = initialIndex; //restore index
                                 }