Browse Source

make onbefore calls more robust

Robin Herbots 11 years ago
parent
commit
5d4cbd81e8
4 changed files with 66 additions and 19 deletions
  1. 47 1
      README.md
  2. 6 6
      dist/inputmask/jquery.inputmask.js
  3. 6 6
      dist/jquery.inputmask.bundle.js
  4. 7 6
      js/jquery.inputmask.js

+ 47 - 1
README.md

@@ -478,10 +478,56 @@ $(document).ready(function(){
 #### onKeyPress
 #### onKeyDown
 #### onBeforeMask
+
+Executes before masking the initial value to allow preprocessing of the initial value.
+  
+Function arguments: initialValue, opts  
+Function return: processedValue
+
+```javascript
+$(selector).inputmask({
+                alias: 'phonebe',
+                onBeforeMask: function (value, opts) {
+                     		    var processedValue = value.replace(/^0/g, "");
+                                if (processedValue.indexOf("32") > 1 || 	processedValue.indexOf("32") == -1) {
+                                    processedValue = "32" + processedValue;
+                                }
+                                      
+                                return processedValue;
+                            }
+            });
+```
+
+
 #### onBeforePaste
+
+Executes before masking the pasted value to allow preprocessing of the pasted value. 
+
+Function arguments: pastedValue, opts  
+Function return: processedValue
+
+```javascript
+$(selector).inputmask({
+                mask: '9999 9999 9999 9999',
+                placeholder: ' ',
+                showMaskOnHover: false,
+                showMaskOnFocus: false,
+                onBeforePaste: function (pastedValue, opts) { 
+					var processedValue = pastedValue; 
+
+					//do something with it
+
+					return processedValue; 
+				}
+            });
+```
+
 #### onUnMask
 
-Executes after unmasking to allow post-processing of the unmaskedvalue.  The arguments to the function are maskedValue, unmaskedValue.
+Executes after unmasking to allow post-processing of the unmaskedvalue. 
+
+Function arguments: maskedValue, unmaskedValue  
+Function return: processedValue
 
 ```javascript
 $(document).ready(function(){

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

@@ -541,7 +541,7 @@
                 var umValue = [], vps = getMaskSet().validPositions;
                 for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
                 var unmaskedValue = (isRTL ? umValue.reverse() : umValue).join(""), bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
-                return $.isFunction(opts.onUnMask) && (unmaskedValue = opts.onUnMask.call($input, bufferValue, unmaskedValue, opts)), 
+                return $.isFunction(opts.onUnMask) && (unmaskedValue = opts.onUnMask.call($input, bufferValue, unmaskedValue, opts) || unmaskedValue), 
                 unmaskedValue;
             }
             return $input[0]._valueGet();
@@ -643,7 +643,7 @@
                         },
                         set: function(elem, value) {
                             var result, $elem = $(elem), inputData = $elem.data("_inputmask");
-                            return inputData ? (result = valueSet(elem, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) : value), 
+                            return inputData ? (result = valueSet(elem, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) || value : value), 
                             $elem.triggerHandler("setvalue.inputmask")) : result = valueSet(elem, value), result;
                         },
                         inputmaskpatch: !0
@@ -656,7 +656,7 @@
             }
             function setter(value) {
                 var inputData = $(this).data("_inputmask");
-                inputData ? (valueSet.call(this, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) : value), 
+                inputData ? (valueSet.call(this, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) || value : value), 
                 $(this).triggerHandler("setvalue.inputmask")) : valueSet.call(this, value);
             }
             function InstallNativeValueSetFallback(npt) {
@@ -793,7 +793,7 @@
             var input = this, $input = $(input), inputValue = input._valueGet();
             if ("propertychange" == e.type && input._valueGet().length <= getMaskLength()) return !0;
             "paste" == e.type && (window.clipboardData && window.clipboardData.getData ? inputValue = window.clipboardData.getData("Text") : e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData && (inputValue = e.originalEvent.clipboardData.getData("text/plain")));
-            var pasteValue = $.isFunction(opts.onBeforePaste) ? opts.onBeforePaste.call(input, inputValue, opts) : inputValue;
+            var pasteValue = $.isFunction(opts.onBeforePaste) ? opts.onBeforePaste.call(input, inputValue, opts) || inputValue : inputValue;
             return checkVal(input, !0, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.split(""), !0), 
             $input.click(), isComplete(getBuffer()) === !0 && $input.trigger("complete"), !1;
         }
@@ -889,7 +889,7 @@
                 "paste" !== PasteEventType || msie1x || $el.bind("input.inputmask", inputFallBackEvent), 
                 msie1x && $el.bind("input.inputmask", pasteEvent), (android || androidfirefox || androidchrome || kindle) && ("input" == PasteEventType && $el.unbind(PasteEventType + ".inputmask"), 
                 $el.bind("input.inputmask", mobileInputEvent)), patchValueProperty(el);
-                var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(el, el._valueGet(), opts) : el._valueGet();
+                var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(el, el._valueGet(), opts) || el._valueGet() : el._valueGet();
                 checkVal(el, !0, !1, initialValue.split(""), !0), valueOnFocus = getBuffer().join("");
                 var activeElement;
                 try {
@@ -920,7 +920,7 @@
                 opts: opts,
                 isRTL: opts.numericInput
             }), opts.numericInput && (isRTL = !0);
-            var valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call($el, actionObj.value, opts) : actionObj.value).split("");
+            var valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call($el, actionObj.value, opts) || actionObj.value : actionObj.value).split("");
             return checkVal($el, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer, !0), opts.onKeyPress.call(this, void 0, getBuffer(), 0, opts), 
             actionObj.metadata ? {
                 value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),

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

@@ -539,7 +539,7 @@
                 var umValue = [], vps = getMaskSet().validPositions;
                 for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
                 var unmaskedValue = (isRTL ? umValue.reverse() : umValue).join(""), bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
-                return $.isFunction(opts.onUnMask) && (unmaskedValue = opts.onUnMask.call($input, bufferValue, unmaskedValue, opts)), 
+                return $.isFunction(opts.onUnMask) && (unmaskedValue = opts.onUnMask.call($input, bufferValue, unmaskedValue, opts) || unmaskedValue), 
                 unmaskedValue;
             }
             return $input[0]._valueGet();
@@ -641,7 +641,7 @@
                         },
                         set: function(elem, value) {
                             var result, $elem = $(elem), inputData = $elem.data("_inputmask");
-                            return inputData ? (result = valueSet(elem, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) : value), 
+                            return inputData ? (result = valueSet(elem, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) || value : value), 
                             $elem.triggerHandler("setvalue.inputmask")) : result = valueSet(elem, value), result;
                         },
                         inputmaskpatch: !0
@@ -654,7 +654,7 @@
             }
             function setter(value) {
                 var inputData = $(this).data("_inputmask");
-                inputData ? (valueSet.call(this, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) : value), 
+                inputData ? (valueSet.call(this, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) || value : value), 
                 $(this).triggerHandler("setvalue.inputmask")) : valueSet.call(this, value);
             }
             function InstallNativeValueSetFallback(npt) {
@@ -791,7 +791,7 @@
             var input = this, $input = $(input), inputValue = input._valueGet();
             if ("propertychange" == e.type && input._valueGet().length <= getMaskLength()) return !0;
             "paste" == e.type && (window.clipboardData && window.clipboardData.getData ? inputValue = window.clipboardData.getData("Text") : e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData && (inputValue = e.originalEvent.clipboardData.getData("text/plain")));
-            var pasteValue = $.isFunction(opts.onBeforePaste) ? opts.onBeforePaste.call(input, inputValue, opts) : inputValue;
+            var pasteValue = $.isFunction(opts.onBeforePaste) ? opts.onBeforePaste.call(input, inputValue, opts) || inputValue : inputValue;
             return checkVal(input, !0, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.split(""), !0), 
             $input.click(), isComplete(getBuffer()) === !0 && $input.trigger("complete"), !1;
         }
@@ -887,7 +887,7 @@
                 "paste" !== PasteEventType || msie1x || $el.bind("input.inputmask", inputFallBackEvent), 
                 msie1x && $el.bind("input.inputmask", pasteEvent), (android || androidfirefox || androidchrome || kindle) && ("input" == PasteEventType && $el.unbind(PasteEventType + ".inputmask"), 
                 $el.bind("input.inputmask", mobileInputEvent)), patchValueProperty(el);
-                var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(el, el._valueGet(), opts) : el._valueGet();
+                var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(el, el._valueGet(), opts) || el._valueGet() : el._valueGet();
                 checkVal(el, !0, !1, initialValue.split(""), !0), valueOnFocus = getBuffer().join("");
                 var activeElement;
                 try {
@@ -918,7 +918,7 @@
                 opts: opts,
                 isRTL: opts.numericInput
             }), opts.numericInput && (isRTL = !0);
-            var valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call($el, actionObj.value, opts) : actionObj.value).split("");
+            var valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call($el, actionObj.value, opts) || actionObj.value : actionObj.value).split("");
             return checkVal($el, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer, !0), opts.onKeyPress.call(this, void 0, getBuffer(), 0, opts), 
             actionObj.metadata ? {
                 value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),

+ 7 - 6
js/jquery.inputmask.js

@@ -951,7 +951,7 @@
                     var unmaskedValue = (isRTL ? umValue.reverse() : umValue).join('');
                     var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join('');
                     if ($.isFunction(opts.onUnMask)) {
-                        unmaskedValue = opts.onUnMask.call($input, bufferValue, unmaskedValue, opts);
+                        unmaskedValue = (opts.onUnMask.call($input, bufferValue, unmaskedValue, opts) || unmaskedValue);
                     }
                     return unmaskedValue;
                 } else {
@@ -1115,7 +1115,7 @@
                             set: function (elem, value) {
                                 var $elem = $(elem), inputData = $elem.data('_inputmask'), result;
                                 if (inputData) {
-                                    result = valueSet(elem, $.isFunction(inputData['opts'].onBeforeMask) ? inputData['opts'].onBeforeMask.call(el, value, inputData['opts']) : value);
+                                    result = valueSet(elem, $.isFunction(inputData['opts'].onBeforeMask) ? (inputData['opts'].onBeforeMask.call(el, value, inputData['opts']) || value) : value);
                                     $elem.triggerHandler('setvalue.inputmask');
                                 } else {
                                     result = valueSet(elem, value);
@@ -1135,7 +1135,7 @@
                 function setter(value) {
                     var inputData = $(this).data('_inputmask');
                     if (inputData) {
-                        valueSet.call(this, $.isFunction(inputData['opts'].onBeforeMask) ? inputData['opts'].onBeforeMask.call(el, value, inputData['opts']) : value);
+                        valueSet.call(this, $.isFunction(inputData['opts'].onBeforeMask) ? (inputData['opts'].onBeforeMask.call(el, value, inputData['opts']) || value) : value);
                         $(this).triggerHandler('setvalue.inputmask');
                     } else {
                         valueSet.call(this, value);
@@ -1248,6 +1248,7 @@
 
                 var firstMaskedPos = getLastValidPosition(pos.begin);
                 if (firstMaskedPos < pos.begin) {
+                    //resetMaskSet();
                     getMaskSet()["p"] = seekNext(firstMaskedPos);
                 } else {
                     getMaskSet()["p"] = pos.begin;
@@ -1441,7 +1442,7 @@
                     }
                 }
 
-                var pasteValue = $.isFunction(opts.onBeforePaste) ? opts.onBeforePaste.call(input, inputValue, opts) : inputValue;
+                var pasteValue = $.isFunction(opts.onBeforePaste) ? (opts.onBeforePaste.call(input, inputValue, opts) || inputValue) : inputValue;
                 checkVal(input, true, false, isRTL ? pasteValue.split('').reverse() : pasteValue.split(''), true);
                 $input.click();
                 if (isComplete(getBuffer()) === true)
@@ -1666,7 +1667,7 @@
                     patchValueProperty(el);
 
                     //apply mask
-                    var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(el, el._valueGet(), opts) : el._valueGet();
+                    var initialValue = $.isFunction(opts.onBeforeMask) ? (opts.onBeforeMask.call(el, el._valueGet(), opts) || el._valueGet()) : el._valueGet();
                     checkVal(el, true, false, initialValue.split(''), true);
                     valueOnFocus = getBuffer().join('');
                     // Wrap document.activeElement in a try/catch block since IE9 throw "Unspecified error" if document.activeElement is undefined when we are in an IFrame.
@@ -1725,7 +1726,7 @@
                         if (opts.numericInput) {
                             isRTL = true;
                         }
-                        var valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call($el, actionObj["value"], opts) : actionObj["value"]).split('');
+                        var valueBuffer = ($.isFunction(opts.onBeforeMask) ? (opts.onBeforeMask.call($el, actionObj["value"], opts) || actionObj["value"]) : actionObj["value"]).split('');
                         checkVal($el, false, false, isRTL ? valueBuffer.reverse() : valueBuffer, true);
                         opts.onKeyPress.call(this, undefined, getBuffer(), 0, opts);