Browse Source

fix data-inputmask and alias + fix delete for decimal alias

Robin Herbots 13 years ago
parent
commit
711daed17d
2 changed files with 39 additions and 23 deletions
  1. 9 4
      js/jquery.inputmask.js
  2. 30 19
      js/jquery.inputmask.numeric.extensions.js

+ 9 - 4
js/jquery.inputmask.js

@@ -3,7 +3,7 @@
 * 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: 1.3.3
+* Version: 1.3.3b
 */
 
 (function ($) {
@@ -87,6 +87,9 @@
             if (typeof fn == "string") {
                 switch (fn) {
                     case "mask":
+                        //resolve possible aliases given by options
+                        resolveAlias(opts.alias, options);
+
                         //init buffer
                         var _buffer = getMaskTemplate();
                         var tests = getTestingChain();
@@ -159,7 +162,7 @@
                         return isComplete(this[0]);
                     default:
                         //check if the fn is an alias
-                        if (!resolveAlias(fn)) {
+                        if (!resolveAlias(fn, options)) {
                             //maybe fn is a mask so we try
                             //set mask
                             opts.mask = fn;
@@ -176,7 +179,7 @@
                 }
             } else if (typeof fn == "object") {
                 opts = $.extend(true, {}, $.inputmask.defaults, fn);
-                resolveAlias(opts.alias); //resolve aliases
+                resolveAlias(opts.alias, fn); //resolve aliases
                 //init buffer
                 var _buffer = getMaskTemplate();
                 var tests = getTestingChain();
@@ -193,6 +196,8 @@
                             attrOptions = attrOptions.replace(new RegExp("'", "g"), '"');
                             var options = $.parseJSON("{" + attrOptions + "}");
                             opts = $.extend(true, {}, $.inputmask.defaults, options);
+                            resolveAlias(opts.alias, options);
+                            opts.alias = undefined;
                             $(this).inputmask(opts);
                         } catch (ex) { } //need a more relax parseJSON
                     }
@@ -212,7 +217,7 @@
                 return isSupported;
             }
 
-            function resolveAlias(aliasStr) {
+            function resolveAlias(aliasStr, options) {
                 var aliasDefinition = opts.aliases[aliasStr];
                 if (aliasDefinition) {
                     if (aliasDefinition.alias) resolveAlias(aliasDefinition.alias); //alias is another alias

+ 30 - 19
js/jquery.inputmask.numeric.extensions.js

@@ -3,7 +3,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: 1.3.3a
+Version: 1.3.3b
 
 Optional extensions on the jquery.inputmask base
 */
@@ -20,6 +20,26 @@ Optional extensions on the jquery.inputmask base
             groupSeparator: ",", // | "."
             groupSize: 3,
             autoGroup: false,
+            postFormat: function (buffer, pos, opts) {
+                var cbuf = buffer.slice();
+                cbuf.splice(pos, 0, "?"); //set position indicator
+                var bufVal = cbuf.join('');
+                if (opts.autoGroup || bufVal.indexOf(opts.groupSeparator) != -1) {
+                    bufVal = bufVal.replace(new RegExp("\\" + opts.groupSeparator, "g"), '');
+                    var reg = new RegExp('(-?[\\d?]+)([\\d?]{' + opts.groupSize + '})');
+                    while (reg.test(bufVal)) {
+                        bufVal = bufVal.replace(reg, '$1' + opts.groupSeparator + '$2');
+                    }
+                }
+                buffer.length = bufVal.length; //align the length
+                for (var i = 0, l = bufVal.length; i < l; i++) {
+                    buffer[i] = bufVal.charAt(i);
+                }
+                var newPos = buffer.indexOf("?");
+                buffer.splice(newPos, 1);
+
+                return newPos;
+            },
             regex: {
                 number: function (groupSeparator, groupSize, radixPoint, digits) {
                     var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, groupSeparator);
@@ -41,6 +61,13 @@ Optional extensions on the jquery.inputmask base
                             $input.val(nptStr);
                         }
                     }
+                } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) {
+                    var nptStr = input._valueGet(),
+                    buffer = nptStr.split(''), c = buffer[0];
+                    opts.postFormat(buffer, 0, opts);
+                    buffer[0] = c;
+                    nptStr = buffer.join('');
+                    input._valueSet(nptStr);
                 }
             },
             definitions: {
@@ -77,25 +104,9 @@ Optional extensions on the jquery.inputmask base
                                 }
                             }
                         }
-                        
-                        if (isValid != false && !strict) {
-                            var cbuf = buffer.slice();
-                            cbuf.splice(pos, 0, "?"); //set position indicator
-                            var bufVal = cbuf.join('');
-                            if (opts.autoGroup || bufVal.indexOf(opts.groupSeparator) != -1) {
-                                bufVal = bufVal.replace(new RegExp("\\" + opts.groupSeparator, "g"), '');
-                                var reg = new RegExp('(-?[\\d?]+)([\\d?]{' + opts.groupSize + '})');
-                                while (reg.test(bufVal)) {
-                                    bufVal = bufVal.replace(reg, '$1' + opts.groupSeparator + '$2');
-                                }
-                            }
-                            buffer.length = bufVal.length; //align the length
-                            for (var i = 0, l = bufVal.length; i < l; i++) {
-                                buffer[i] = bufVal.charAt(i);
-                            }
-                            var newPos = buffer.indexOf("?");
-                            buffer.splice(newPos, 1);
 
+                        if (isValid != false && !strict) {
+                            var newPos = opts.postFormat(buffer, pos, opts);
                             return { "pos": newPos };
                         }
                         return isValid;