ソースを参照

add compatibility for the decimal extension

Robin Herbots 11 年 前
コミット
73d82d1c5c
2 ファイル変更29 行追加14 行削除
  1. 26 11
      js/jquery.inputmask.js
  2. 3 3
      js/jquery.inputmask.numeric.extensions.js

+ 26 - 11
js/jquery.inputmask.js

@@ -137,7 +137,7 @@
                 if (currentToken.matches.length > 0)
                 if (currentToken.matches.length > 0)
                     maskTokens.push(currentToken);
                     maskTokens.push(currentToken);
 
 
-                console.log(JSON.stringify(maskTokens));
+                //console.log(JSON.stringify(maskTokens));
                 return maskTokens;
                 return maskTokens;
             }
             }
             function generateMask(mask, metadata) {
             function generateMask(mask, metadata) {
@@ -300,8 +300,7 @@
                     var t = getMaskSet()["validPositions"][i];
                     var t = getMaskSet()["validPositions"][i];
                     var s = getMaskSet()["validPositions"][startPos];
                     var s = getMaskSet()["validPositions"][startPos];
                     if (t != undefined && s == undefined) {
                     if (t != undefined && s == undefined) {
-                        console.log(JSON.stringify(getTest(startPos)));
-                        if (getTest(startPos).def == t.match.def && isValid(startPos, t["input"], false) !== false) {
+                        if (getTest(startPos).def == t.match.def && isValid(startPos, t["input"], true) !== false) {
                             delete getMaskSet()["validPositions"][i];
                             delete getMaskSet()["validPositions"][i];
                         }
                         }
                         startPos = seekNext(startPos);
                         startPos = seekNext(startPos);
@@ -432,11 +431,13 @@
                 }
                 }
                 return getMaskSet()['buffer'];
                 return getMaskSet()['buffer'];
             }
             }
-            function refreshFromBuffer(start, end, strict) {
+            function refreshFromBuffer(start, end) {
                 var buffer = getBuffer();
                 var buffer = getBuffer();
                 for (var i = start; i < end; i++) {
                 for (var i = start; i < end; i++) {
-                    var ltst = getTests(i, !strict)[0];
-                    setValidPosition(i, $.extend({}, ltst, { "input": casing(buffer[i], ltst["match"]) }), strict);
+                    if (buffer[i] != getPlaceholder(i)) {
+                        var ltst = getTests(i, false)[0];
+                        setValidPosition(i, $.extend({}, ltst, { "input": casing(buffer[i], ltst["match"]) }), true);
+                    }
                 }
                 }
             }
             }
             function casing(elem, test) {
             function casing(elem, test) {
@@ -479,10 +480,15 @@
                             elem = elem == opts.skipOptionalPartCharacter ? test["def"] : elem;
                             elem = elem == opts.skipOptionalPartCharacter ? test["def"] : elem;
 
 
                             var validatedPos = position;
                             var validatedPos = position;
-                            if (rslt !== true && (rslt["pos"] != position || rslt["refreshFromBuffer"])) { //their is a position offset
+                            if (rslt["refreshFromBuffer"] === true) {
+                                strict = true;
+                                validatedPos = rslt["pos"];
+                                getMaskSet()["validPositions"] = {};
+                                refreshFromBuffer(0, getBuffer().length);
+                            } else if (rslt !== true && rslt["pos"] != position) { //their is a position offset
                                 setValidPosition(position, $.extend({}, tst, { "input": casing(buffer[position], test) }), strict);
                                 setValidPosition(position, $.extend({}, tst, { "input": casing(buffer[position], test) }), strict);
                                 validatedPos = rslt["pos"];
                                 validatedPos = rslt["pos"];
-                                refreshFromBuffer(position + 1, validatedPos, strict);
+                                refreshFromBuffer(position + 1, validatedPos);
                                 tst = getTests(validatedPos, !strict)[0]; //possible mismatch TODO
                                 tst = getTests(validatedPos, !strict)[0]; //possible mismatch TODO
                             }
                             }
                             if (ndx > 0) {
                             if (ndx > 0) {
@@ -869,8 +875,12 @@
                 }
                 }
 
 
                 var currentCaretPos = caret(input);
                 var currentCaretPos = caret(input);
-                if (opts.onKeyDown.call(this, e, getBuffer(), opts) === true) //extra stuff to execute on keydown
+                var keydownResult = opts.onKeyDown.call(this, e, getBuffer(), opts);
+                if (keydownResult && keydownResult["refreshFromBuffer"] === true) { //extra stuff to execute on keydown
+                    getMaskSet()["validPositions"] = {};
+                    refreshFromBuffer(0, getBuffer().length);
                     caret(input, currentCaretPos.begin, currentCaretPos.end);
                     caret(input, currentCaretPos.begin, currentCaretPos.end);
+                }
                 ignorable = $.inArray(k, opts.ignorables) != -1;
                 ignorable = $.inArray(k, opts.ignorables) != -1;
             }
             }
             function keypressEvent(e, checkval, k, writeOut, strict, ndx) {
             function keypressEvent(e, checkval, k, writeOut, strict, ndx) {
@@ -984,10 +994,15 @@
             function keyupEvent(e) {
             function keyupEvent(e) {
                 var $input = $(this), input = this, k = e.keyCode, buffer = getBuffer();
                 var $input = $(this), input = this, k = e.keyCode, buffer = getBuffer();
 
 
-                opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup
+                var keyupResult = opts.onKeyUp.call(this, e, buffer, opts);
+                if (keyupResult && keyupResult["refreshFromBuffer"] === true) {
+                    getMaskSet()["validPositions"] = {};
+                    refreshFromBuffer(0, getBuffer().length);
+                }
                 if (k == opts.keyCode.TAB && opts.showMaskOnFocus) {
                 if (k == opts.keyCode.TAB && opts.showMaskOnFocus) {
                     if ($input.hasClass('focus.inputmask') && input._valueGet().length == 0) {
                     if ($input.hasClass('focus.inputmask') && input._valueGet().length == 0) {
-                        buffer = getBufferTemplate().slice();
+                        resetMaskSet();
+                        buffer = getBuffer();
                         writeBuffer(input, buffer);
                         writeBuffer(input, buffer);
                         caret(input, 0);
                         caret(input, 0);
                         valueOnFocus = getBuffer().join('');
                         valueOnFocus = getBuffer().join('');

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

@@ -81,12 +81,12 @@ Optional extensions on the jquery.inputmask base
                         for (var i = 1; i <= opts.digits && i < opts.getMaskLength(masksets[activeMasksetIndex]["_buffer"], opts.greedy, opts.repeat, buffer, opts) ; i++) {
                         for (var i = 1; i <= opts.digits && i < opts.getMaskLength(masksets[activeMasksetIndex]["_buffer"], opts.greedy, opts.repeat, buffer, opts) ; i++) {
                             if (buffer[radixPosition + i] == undefined || buffer[radixPosition + i] == "") buffer[radixPosition + i] = "0";
                             if (buffer[radixPosition + i] == undefined || buffer[radixPosition + i] == "") buffer[radixPosition + i] = "0";
                         }
                         }
-                        input._valueSet(buffer.join(''));
+                        return { "refreshFromBuffer": true };
                     }
                     }
                 } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) {
                 } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) {
                     opts.postFormat(buffer, 0, true, opts);
                     opts.postFormat(buffer, 0, true, opts);
                     input._valueSet(buffer.join(''));
                     input._valueSet(buffer.join(''));
-                    return true;
+                    return { "refreshFromBuffer": true };
                 }
                 }
             },
             },
             definitions: {
             definitions: {
@@ -141,7 +141,7 @@ Optional extensions on the jquery.inputmask base
 
 
                         if (isValid != false && !strict && chrs != opts.radixPoint) {
                         if (isValid != false && !strict && chrs != opts.radixPoint) {
                             var newPos = opts.postFormat(buffer, pos, (chrs == "-" || chrs == "+") ? true : false, opts);
                             var newPos = opts.postFormat(buffer, pos, (chrs == "-" || chrs == "+") ? true : false, opts);
-                            return { "pos": newPos };
+                            return { "pos": newPos, "refreshFromBuffer": true };
                         }
                         }
 
 
                         return isValid;
                         return isValid;