Browse Source

fix for iscomplete integer alias + delete - fix #804

Robin Herbots 11 years ago
parent
commit
a97eda6a97

+ 1 - 1
dist/inputmask/jquery.inputmask.js

@@ -776,7 +776,7 @@
                 var pend = pos.end;
                 var pend = pos.end;
                 pos.end = pos.begin, pos.begin = pend;
                 pos.end = pos.begin, pos.begin = pend;
             }
             }
-            if (k == $.inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || 0 == opts.insertMode) ? pos.begin = seekPrevious(pos.begin) : k == $.inputmask.keyCode.DELETE && pos.begin == pos.end && pos.end++, 
+            if (k == $.inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || 0 == opts.insertMode) ? pos.begin = seekPrevious(pos.begin) : k == $.inputmask.keyCode.DELETE && pos.begin == pos.end && (pos.end = isMask(pos.end) ? pos.end + 1 : seekNext(pos.end) + 1), 
             stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0) {
             stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0) {
                 generalize();
                 generalize();
                 var lvp = getLastValidPosition(pos.begin);
                 var lvp = getLastValidPosition(pos.begin);

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


+ 6 - 5
dist/inputmask/jquery.inputmask.numeric.extensions.js

@@ -96,7 +96,7 @@
                 }
                 }
                 if (opts.autoGroup) {
                 if (opts.autoGroup) {
                     var rslt = opts.postFormat(buffer, caretPos - 1, !0, opts);
                     var rslt = opts.postFormat(buffer, caretPos - 1, !0, opts);
-                    return rslt.caret = 0 == caretPos ? caretPos : rslt.pos + 1, rslt;
+                    return rslt.caret = caretPos <= opts.prefix.length ? rslt.pos : rslt.pos + 1, rslt;
                 }
                 }
             },
             },
             regex: {
             regex: {
@@ -238,7 +238,7 @@
                 if (opts.postFormat(bufClone, 0, !0, opts), bufClone.join("") != maskedValue) return !1;
                 if (opts.postFormat(bufClone, 0, !0, opts), bufClone.join("") != maskedValue) return !1;
                 var processValue = maskedValue.replace(opts.prefix, "");
                 var processValue = maskedValue.replace(opts.prefix, "");
                 return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), ""), 
                 return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), ""), 
-                processValue = processValue.replace($.inputmask.escapeRegex.call(this, opts.radixPoint), "."), 
+                "," === opts.radixPoint && (processValue = processValue.replace($.inputmask.escapeRegex.call(this, opts.radixPoint), ".")), 
                 isFinite(processValue);
                 isFinite(processValue);
             },
             },
             onBeforeMask: function(initialValue, opts) {
             onBeforeMask: function(initialValue, opts) {
@@ -252,7 +252,7 @@
                 initialValue;
                 initialValue;
             },
             },
             canClearPosition: function(maskset, position, lvp, strict, opts) {
             canClearPosition: function(maskset, position, lvp, strict, opts) {
-                var positionInput = maskset.validPositions[position].input, canClear = positionInput != opts.radixPoint && isFinite(positionInput) || position == lvp || positionInput == opts.groupSeparator;
+                var positionInput = maskset.validPositions[position].input, canClear = positionInput != opts.radixPoint && isFinite(positionInput) || position == lvp || positionInput == opts.groupSeparator || positionInput == opts.negationSymbol.front || positionInput == opts.negationSymbol.back;
                 if (canClear && isFinite(positionInput)) {
                 if (canClear && isFinite(positionInput)) {
                     var matchRslt = maskset.buffer.join("").substr(0, position).match(opts.regex.integerNPart(opts));
                     var matchRslt = maskset.buffer.join("").substr(0, position).match(opts.regex.integerNPart(opts));
                     if (!strict) {
                     if (!strict) {
@@ -262,8 +262,9 @@
                     }
                     }
                     var buffer = [];
                     var buffer = [];
                     for (var vp in maskset.validPositions) buffer.push(maskset.validPositions[vp].input);
                     for (var vp in maskset.validPositions) buffer.push(maskset.validPositions[vp].input);
-                    if (matchRslt = buffer.join("").match(opts.regex.integerNPart(opts)), radixPosition = $.inArray(opts.radixPoint, maskset.buffer), 
-                    matchRslt && (-1 == radixPosition || position <= radixPosition)) if (0 == matchRslt[0].indexOf("0")) canClear = matchRslt.index != position || -1 == radixPosition; else {
+                    matchRslt = buffer.join("").match(opts.regex.integerNPart(opts));
+                    var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
+                    if (matchRslt && (-1 == radixPosition || radixPosition >= position)) if (0 == matchRslt[0].indexOf("0")) canClear = matchRslt.index != position || -1 == radixPosition; else {
                         var intPart = parseInt(matchRslt[0].replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), ""));
                         var intPart = parseInt(matchRslt[0].replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), ""));
                         -1 != radixPosition && 10 > intPart && "0" == opts.placeholder.charAt(0) && (maskset.validPositions[position].input = "0", 
                         -1 != radixPosition && 10 > intPart && "0" == opts.placeholder.charAt(0) && (maskset.validPositions[position].input = "0", 
                         maskset.p = opts.prefix.length + 1, canClear = !1);
                         maskset.p = opts.prefix.length + 1, canClear = !1);

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


+ 7 - 6
dist/jquery.inputmask.bundle.js

@@ -774,7 +774,7 @@
                 var pend = pos.end;
                 var pend = pos.end;
                 pos.end = pos.begin, pos.begin = pend;
                 pos.end = pos.begin, pos.begin = pend;
             }
             }
-            if (k == $.inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || 0 == opts.insertMode) ? pos.begin = seekPrevious(pos.begin) : k == $.inputmask.keyCode.DELETE && pos.begin == pos.end && pos.end++, 
+            if (k == $.inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || 0 == opts.insertMode) ? pos.begin = seekPrevious(pos.begin) : k == $.inputmask.keyCode.DELETE && pos.begin == pos.end && (pos.end = isMask(pos.end) ? pos.end + 1 : seekNext(pos.end) + 1), 
             stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0) {
             stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0) {
                 generalize();
                 generalize();
                 var lvp = getLastValidPosition(pos.begin);
                 var lvp = getLastValidPosition(pos.begin);
@@ -1896,7 +1896,7 @@
                 }
                 }
                 if (opts.autoGroup) {
                 if (opts.autoGroup) {
                     var rslt = opts.postFormat(buffer, caretPos - 1, !0, opts);
                     var rslt = opts.postFormat(buffer, caretPos - 1, !0, opts);
-                    return rslt.caret = 0 == caretPos ? caretPos : rslt.pos + 1, rslt;
+                    return rslt.caret = caretPos <= opts.prefix.length ? rslt.pos : rslt.pos + 1, rslt;
                 }
                 }
             },
             },
             regex: {
             regex: {
@@ -2038,7 +2038,7 @@
                 if (opts.postFormat(bufClone, 0, !0, opts), bufClone.join("") != maskedValue) return !1;
                 if (opts.postFormat(bufClone, 0, !0, opts), bufClone.join("") != maskedValue) return !1;
                 var processValue = maskedValue.replace(opts.prefix, "");
                 var processValue = maskedValue.replace(opts.prefix, "");
                 return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), ""), 
                 return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), ""), 
-                processValue = processValue.replace($.inputmask.escapeRegex.call(this, opts.radixPoint), "."), 
+                "," === opts.radixPoint && (processValue = processValue.replace($.inputmask.escapeRegex.call(this, opts.radixPoint), ".")), 
                 isFinite(processValue);
                 isFinite(processValue);
             },
             },
             onBeforeMask: function(initialValue, opts) {
             onBeforeMask: function(initialValue, opts) {
@@ -2052,7 +2052,7 @@
                 initialValue;
                 initialValue;
             },
             },
             canClearPosition: function(maskset, position, lvp, strict, opts) {
             canClearPosition: function(maskset, position, lvp, strict, opts) {
-                var positionInput = maskset.validPositions[position].input, canClear = positionInput != opts.radixPoint && isFinite(positionInput) || position == lvp || positionInput == opts.groupSeparator;
+                var positionInput = maskset.validPositions[position].input, canClear = positionInput != opts.radixPoint && isFinite(positionInput) || position == lvp || positionInput == opts.groupSeparator || positionInput == opts.negationSymbol.front || positionInput == opts.negationSymbol.back;
                 if (canClear && isFinite(positionInput)) {
                 if (canClear && isFinite(positionInput)) {
                     var matchRslt = maskset.buffer.join("").substr(0, position).match(opts.regex.integerNPart(opts));
                     var matchRslt = maskset.buffer.join("").substr(0, position).match(opts.regex.integerNPart(opts));
                     if (!strict) {
                     if (!strict) {
@@ -2062,8 +2062,9 @@
                     }
                     }
                     var buffer = [];
                     var buffer = [];
                     for (var vp in maskset.validPositions) buffer.push(maskset.validPositions[vp].input);
                     for (var vp in maskset.validPositions) buffer.push(maskset.validPositions[vp].input);
-                    if (matchRslt = buffer.join("").match(opts.regex.integerNPart(opts)), radixPosition = $.inArray(opts.radixPoint, maskset.buffer), 
-                    matchRslt && (-1 == radixPosition || position <= radixPosition)) if (0 == matchRslt[0].indexOf("0")) canClear = matchRslt.index != position || -1 == radixPosition; else {
+                    matchRslt = buffer.join("").match(opts.regex.integerNPart(opts));
+                    var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
+                    if (matchRslt && (-1 == radixPosition || radixPosition >= position)) if (0 == matchRslt[0].indexOf("0")) canClear = matchRslt.index != position || -1 == radixPosition; else {
                         var intPart = parseInt(matchRslt[0].replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), ""));
                         var intPart = parseInt(matchRslt[0].replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), ""));
                         -1 != radixPosition && 10 > intPart && "0" == opts.placeholder.charAt(0) && (maskset.validPositions[position].input = "0", 
                         -1 != radixPosition && 10 > intPart && "0" == opts.placeholder.charAt(0) && (maskset.validPositions[position].input = "0", 
                         maskset.p = opts.prefix.length + 1, canClear = !1);
                         maskset.p = opts.prefix.length + 1, canClear = !1);

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


+ 2 - 2
js/jquery.inputmask.js

@@ -1361,7 +1361,7 @@
                 if (k == $.inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode == false))
                 if (k == $.inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode == false))
                     pos.begin = seekPrevious(pos.begin);
                     pos.begin = seekPrevious(pos.begin);
                 else if (k == $.inputmask.keyCode.DELETE && pos.begin == pos.end)
                 else if (k == $.inputmask.keyCode.DELETE && pos.begin == pos.end)
-                    pos.end++;
+                    pos.end = isMask(pos.end) ? pos.end + 1 : seekNext(pos.end) + 1;
 
 
                 stripValidPositions(pos.begin, pos.end, false, strict);
                 stripValidPositions(pos.begin, pos.end, false, strict);
                 if (strict !== true) {
                 if (strict !== true) {
@@ -1413,7 +1413,7 @@
                     }, 0);
                     }, 0);
                 } else if ((k == $.inputmask.keyCode.HOME && !e.shiftKey) || k == $.inputmask.keyCode.PAGE_UP) { //Home or page_up
                 } else if ((k == $.inputmask.keyCode.HOME && !e.shiftKey) || k == $.inputmask.keyCode.PAGE_UP) { //Home or page_up
                     caret(input, 0, e.shiftKey ? pos.begin : 0);
                     caret(input, 0, e.shiftKey ? pos.begin : 0);
-                } else if (((opts.undoOnEscape && k == $.inputmask.keyCode.ESCAPE) || (k == 90 && e.ctrlKey)) && e.altKey !== true ) { //escape && undo && #762
+                } else if (((opts.undoOnEscape && k == $.inputmask.keyCode.ESCAPE) || (k == 90 && e.ctrlKey)) && e.altKey !== true) { //escape && undo && #762
                     checkVal(input, true, false, undoValue.split(''));
                     checkVal(input, true, false, undoValue.split(''));
                     $input.click();
                     $input.click();
                 } else if (k == $.inputmask.keyCode.INSERT && !(e.shiftKey || e.ctrlKey)) { //insert
                 } else if (k == $.inputmask.keyCode.INSERT && !(e.shiftKey || e.ctrlKey)) { //insert

+ 8 - 3
js/jquery.inputmask.numeric.extensions.js

@@ -324,7 +324,7 @@ Optional extensions on the jquery.inputmask base
                 var processValue = maskedValue.replace(opts.prefix, "");
                 var processValue = maskedValue.replace(opts.prefix, "");
                 processValue = processValue.replace(opts.suffix, "");
                 processValue = processValue.replace(opts.suffix, "");
                 processValue = processValue.replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), "");
                 processValue = processValue.replace(new RegExp($.inputmask.escapeRegex.call(this, opts.groupSeparator), "g"), "");
-                processValue = processValue.replace($.inputmask.escapeRegex.call(this, opts.radixPoint), ".");
+                if (opts.radixPoint === ",") processValue = processValue.replace($.inputmask.escapeRegex.call(this, opts.radixPoint), ".");
                 return isFinite(processValue);
                 return isFinite(processValue);
             },
             },
             onBeforeMask: function (initialValue, opts) {
             onBeforeMask: function (initialValue, opts) {
@@ -360,7 +360,11 @@ Optional extensions on the jquery.inputmask base
             },
             },
             canClearPosition: function (maskset, position, lvp, strict, opts) {
             canClearPosition: function (maskset, position, lvp, strict, opts) {
                 var positionInput = maskset["validPositions"][position].input,
                 var positionInput = maskset["validPositions"][position].input,
-                    canClear = (positionInput != opts.radixPoint && isFinite(positionInput)) || position == lvp || positionInput == opts.groupSeparator,
+                    canClear = (positionInput != opts.radixPoint && isFinite(positionInput)) ||
+                                position == lvp ||
+                                positionInput == opts.groupSeparator ||
+                                positionInput == opts.negationSymbol.front ||
+                                positionInput == opts.negationSymbol.back,
                     posOffset = 0;
                     posOffset = 0;
 
 
                 if (canClear && isFinite(positionInput)) {
                 if (canClear && isFinite(positionInput)) {
@@ -380,7 +384,8 @@ Optional extensions on the jquery.inputmask base
                     for (var vp in maskset.validPositions) {
                     for (var vp in maskset.validPositions) {
                         buffer.push(maskset.validPositions[vp].input);
                         buffer.push(maskset.validPositions[vp].input);
                     }
                     }
-                    matchRslt = buffer.join('').match(opts.regex.integerNPart(opts)), radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
+                    matchRslt = buffer.join('').match(opts.regex.integerNPart(opts));
+                    var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
                     if (matchRslt && (radixPosition == -1 || position <= radixPosition)) {
                     if (matchRslt && (radixPosition == -1 || position <= radixPosition)) {
                         if (matchRslt["0"].indexOf("0") == 0) {
                         if (matchRslt["0"].indexOf("0") == 0) {
                             canClear = matchRslt.index != position || radixPosition == -1;
                             canClear = matchRslt.index != position || radixPosition == -1;

+ 14 - 0
qunit/tests_numeric.js

@@ -1218,4 +1218,18 @@ test("currency alias - type 1010 delete middle 1 - FilipeZhou", function () {
     $("#testmask").SendKey($.inputmask.keyCode.BACKSPACE);
     $("#testmask").SendKey($.inputmask.keyCode.BACKSPACE);
     equal($("#testmask")[0]._valueGet(), "$ 100.00", "Result " + $("#testmask")[0]._valueGet());
     equal($("#testmask")[0]._valueGet(), "$ 100.00", "Result " + $("#testmask")[0]._valueGet());
     $("#testmask").remove();
     $("#testmask").remove();
+});
+
+test("currency alias - type -1234 delete -", function () {
+    var $fixture = $("#qunit-fixture");
+    $fixture.append('<input type="text" id="testmask" />');
+    $("#testmask").inputmask("currency");
+
+    $("#testmask")[0].focus();
+    $("#testmask").click();
+    $("#testmask").Type("-1234");
+    $.caret($("#testmask"), 0);
+    $("#testmask").SendKey($.inputmask.keyCode.DELETE);
+    equal($("#testmask")[0]._valueGet(), "$ 1,234.00", "Result " + $("#testmask")[0]._valueGet());
+    $("#testmask").remove();
 });
 });