Browse Source

update jqlite dependencyLib

Robin Herbots 10 years ago
parent
commit
3b3356b1bb

+ 2 - 0
CHANGELOG.md

@@ -7,6 +7,8 @@ All notable changes to this project will be documented in this file.
 - include textarea as a valid masking element
 
 ### Updates
+- implement missing parts in the jqlite DependencyLib
+- Remove namespaces for events (simplifies implementing other dependencyLibs, besides jquery)
 - update alternation logic
 
 ### Fixed

+ 1 - 1
README.md

@@ -129,7 +129,7 @@ paths: {
 As dependencyLib you can choose between the supported libraries.
 - inputmask.dependencyLib (vanilla)
 - inputmask.dependencyLib.jquery
-- inputmask.dependencyLib.jqlite (WIP)
+- inputmask.dependencyLib.jqlite
 - .... (others are welcome)
 
 ### Allowed HTML-elements

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.2.6-11",
+  "version": "3.2.6-16",
   "main": [
     "./dist/inputmask/inputmask.js"
   ],

+ 1 - 1
component.json

@@ -2,7 +2,7 @@
   "name": "jquery_inputmask",
   "repository": "robinherbots/jquery.inputmask",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-  "version": "3.2.6-11",
+  "version": "3.2.6-16",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "main": "./dist/jquery.inputmask.bundle.js",
   "scripts": [

+ 1 - 1
composer.json

@@ -1,7 +1,7 @@
 {
   "name": "robinherbots/jquery.inputmask",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-  "version": "3.2.6-11",
+  "version": "3.2.6-16",
   "type": "library",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "homepage": "http://robinherbots.github.io/jquery.inputmask",

+ 5 - 5
dist/inputmask/inputmask.date.extensions.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-11
+* Version: 3.2.6-16
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);
@@ -97,7 +97,7 @@
                 if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
                     var today = new Date();
                     $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), 
-                    $input.trigger("setvalue.inputmask");
+                    $input.trigger("setvalue");
                 }
             },
             getFrontValue: function(mask, buffer, opts) {
@@ -270,7 +270,7 @@
                 if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
                     var today = new Date();
                     $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), 
-                    $input.trigger("setvalue.inputmask");
+                    $input.trigger("setvalue");
                 }
             }
         },
@@ -284,7 +284,7 @@
                 if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
                     var today = new Date();
                     $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), 
-                    $input.trigger("setvalue.inputmask");
+                    $input.trigger("setvalue");
                 }
             }
         },
@@ -445,7 +445,7 @@
                 if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
                     var today = new Date();
                     $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), 
-                    $input.trigger("setvalue.inputmask");
+                    $input.trigger("setvalue");
                 }
             }
         },

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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-11
+* Version: 3.2.6-16
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery")) : factory(jQuery);

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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-11
+* Version: 3.2.6-16
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

File diff suppressed because it is too large
+ 82 - 69
dist/inputmask/inputmask.js


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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-11
+* Version: 3.2.6-16
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);
@@ -391,11 +391,11 @@
                 var $input = $(this);
                 if (e.ctrlKey) switch (e.keyCode) {
                   case Inputmask.keyCode.UP:
-                    $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue.inputmask");
+                    $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue");
                     break;
 
                   case Inputmask.keyCode.DOWN:
-                    $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue.inputmask");
+                    $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue");
                 }
             }
         },

+ 1 - 1
dist/inputmask/inputmask.phone.extensions.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-11
+* Version: 3.2.6-16
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 1 - 1
dist/inputmask/inputmask.regex.extensions.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-11
+* Version: 3.2.6-16
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-11
+* Version: 3.2.6-16
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery, window.Inputmask);
@@ -32,7 +32,7 @@
             return input && input.inputmask ? input.inputmask.getmetadata() : void 0;
 
           case "setvalue":
-            $(input).val(options), input && void 0 !== input.inputmask && $(input).triggerHandler("setvalue.inputmask");
+            $(input).val(options), input && void 0 !== input.inputmask && $(input).triggerHandler("setvalue");
             break;
 
           case "option":

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


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


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

@@ -3,6 +3,6 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-11
+* Version: 3.2.6-16
 */
 !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return window.dependencyLib=a,a});

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


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


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


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


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


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


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


+ 40 - 4
extra/dependencyLibs/inputmask.dependencyLib.jqlite.js

@@ -14,6 +14,18 @@ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.p
 		}
 	}
 	(function($) {
+		// Use a stripped-down indexOf as it's faster than native
+		// http://jsperf.com/thor-indexof-vs-for/5
+		function indexOf(list, elem) {
+			var i = 0,
+				len = list.length;
+			for (; i < len; i++) {
+				if (list[i] === elem) {
+					return i;
+				}
+			}
+			return -1;
+		}
 		var class2type = {},
 			classTypes = "Boolean Number String Function Array Date RegExp Object Error".split(" ");
 		for (var nameNdx = 0; nameNdx < classTypes.length; nameNdx++) {
@@ -29,19 +41,43 @@ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.p
 				class2type[class2type.toString.call(obj)] || "object" :
 				typeof obj;
 		}
+
+		function isWindow(obj) {
+			return obj != null && obj === obj.window;
+		}
+
+		function isArraylike(obj) {
+			// Support: iOS 8.2 (not reproducible in simulator)
+			// `in` check used to prevent JIT error (gh-2145)
+			// hasOwn isn't used here due to false negatives
+			// regarding Nodelist length in IE
+			var length = "length" in obj && obj.length,
+				ltype = type(obj);
+
+			if (ltype === "function" || isWindow(obj)) {
+				return false;
+			}
+
+			if (obj.nodeType === 1 && length) {
+				return true;
+			}
+
+			return ltype === "array" || length === 0 ||
+				typeof length === "number" && length > 0 && (length - 1) in obj;
+		}
+		$.inArray = function(elem, arr, i) {
+			return arr == null ? -1 : indexOf(arr, elem, i);
+		};
 		$.isFunction = function(obj) {
 			return type(obj) === "function";
 		};
 		$.isArray = Array.isArray;
-		$.isWindow = function(obj) {
-			return obj != null && obj === obj.window;
-		};
 		$.isPlainObject = function(obj) {
 			// Not plain objects:
 			// - Any object or value whose internal [[Class]] property is not "[object Object]"
 			// - DOM nodes
 			// - window
-			if (type(obj) !== "object" || obj.nodeType || $.isWindow(obj)) {
+			if (type(obj) !== "object" || obj.nodeType || isWindow(obj)) {
 				return false;
 			}
 

+ 2 - 24
extra/dependencyLibs/inputmask.dependencyLib.js

@@ -158,14 +158,14 @@ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.p
 								for (hndx = 0, hndL = eventRegistry[ev][namespace].length; hndx < hndL; hndx++) {
 									evts.push({
 										ev: ev,
-										namespace: namespace.length > 0 ? namespace : "global",
+										namespace: namespace && namespace.length > 0 ? namespace : "global",
 										handler: eventRegistry[ev][namespace][hndx]
 									});
 								}
 							} else {
 								evts.push({
 									ev: ev,
-									namespace: namespace.length > 0 ? namespace : "global",
+									namespace: namespace && namespace.length > 0 ? namespace : "global",
 									handler: handler
 								});
 							}
@@ -423,28 +423,6 @@ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.p
 			return [].concat(ret);
 		};
 
-		//only usefull within inputmask
-		DependencyLib.Event = function(type) {
-			var _defaultPrevented = false;
-			return {
-				preventDefault: function() {
-					_defaultPrevented = true;
-				},
-				isDefaultPrevented: function() {
-					return _defaultPrevented;
-				},
-				altKey: false,
-				charCode: 0,
-				ctrlKey: false,
-				currentTarget: null,
-				keyCode: 0,
-				metaKey: false,
-				shiftKey: false,
-				target: null,
-				type: type,
-				which: 0
-			};
-		};
 		DependencyLib.data = function(owner, key, value) {
 			if (value === undefined) {
 				return owner.__data ? owner.__data[key] : null;

+ 4 - 4
js/inputmask.date.extensions.js

@@ -115,7 +115,7 @@ Optional extensions on the jquery.inputmask base
 					if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
 						var today = new Date();
 						$input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString());
-						$input.trigger("setvalue.inputmask");
+						$input.trigger("setvalue");
 					}
 				},
 				getFrontValue: function(mask, buffer, opts) {
@@ -372,7 +372,7 @@ Optional extensions on the jquery.inputmask base
 					if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
 						var today = new Date();
 						$input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());
-						$input.trigger("setvalue.inputmask");
+						$input.trigger("setvalue");
 					}
 				}
 			},
@@ -386,7 +386,7 @@ Optional extensions on the jquery.inputmask base
 					if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
 						var today = new Date();
 						$input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString());
-						$input.trigger("setvalue.inputmask");
+						$input.trigger("setvalue");
 					}
 				}
 			},
@@ -595,7 +595,7 @@ Optional extensions on the jquery.inputmask base
 					if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
 						var today = new Date();
 						$input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
-						$input.trigger("setvalue.inputmask");
+						$input.trigger("setvalue");
 					}
 				}
   			},

+ 112 - 82
js/inputmask.js

@@ -33,6 +33,7 @@
 			this.opts = $.extend(true, {}, this.defaults, options);
 			this.noMasksCache = options && options.definitions !== undefined;
 			this.userOptions = options || {}; //user passed options
+			this.events = {};
 			resolveAlias(this.opts.alias, options, this.opts);
 		}
 
@@ -1697,7 +1698,7 @@
 
 
 				$.each(inputValue, function(ndx, charCode) {
-					var keypress = $.Event("keypress");
+					var keypress = new Event("keypress");
 					keypress.which = charCode.charCodeAt(0);
 					charCodes += charCode;
 					var lvp = getLastValidPosition(undefined, true),
@@ -1713,7 +1714,7 @@
 					}
 				});
 				if (writeOut) {
-					writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : undefined, $.Event("checkval"));
+					writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : undefined, new Event("checkval"));
 				}
 			}
 
@@ -1873,57 +1874,83 @@
 					(end - begin) > 1 || ((end - begin) === 1 && opts.insertMode);
 			}
 
-			function wrapEventRuler(eventHandler) {
-				return function(e) {
-					// console.log("triggered " + e.type);
-					var inComposition = false,
-						keydownPressed = false;
-					if (this.inputmask === undefined) { //happens when cloning an object with jquery.clone
-						var imOpts = $.data(this, "_inputmask_opts");
-						if (imOpts)(new Inputmask(imOpts)).mask(this);
-						else $(this).off(".inputmask");
-					} else if (e.type !== "setvalue" && (this.disabled || (this.readOnly && !(e.type === "keydown" && (e.ctrlKey && e.keyCode === 67) || (opts.tabThrough === false && e.keyCode === Inputmask.keyCode.TAB))))) {
-						e.preventDefault();
-					} else {
-						switch (e.type) {
-							case "input":
-								if (skipInputEvent === true || inComposition === true) {
-									skipInputEvent = false;
-									return e.preventDefault();
-								}
-								keydownPressed = false;
-								break;
-							case "keydown":
-								//Safari 5.1.x - modal dialog fires keypress twice workaround
-								skipKeyPressEvent = false;
-								inComposition = false;
-								keydownPressed = true;
-								break;
-							case "keypress":
-								if (skipKeyPressEvent === true) {
-									return e.preventDefault();
-								}
-								skipKeyPressEvent = true;
+			var EventRuler = {
+				on: function(input, eventName, eventHandler) {
+					var ev = function(e) {
+						// console.log("triggered " + e.type);
+						var inComposition = false,
+							keydownPressed = false;
+						if (this.inputmask === undefined) { //happens when cloning an object with jquery.clone
+							var imOpts = $.data(this, "_inputmask_opts");
+							if (imOpts)(new Inputmask(imOpts)).mask(this);
+							else EventRuler.off(this);
+						} else if (e.type !== "setvalue" && (this.disabled || (this.readOnly && !(e.type === "keydown" && (e.ctrlKey && e.keyCode === 67) || (opts.tabThrough === false && e.keyCode === Inputmask.keyCode.TAB))))) {
+							e.preventDefault();
+						} else {
+							switch (e.type) {
+								case "input":
+									if (skipInputEvent === true || inComposition === true) {
+										skipInputEvent = false;
+										return e.preventDefault();
+									}
+									keydownPressed = false;
+									break;
+								case "keydown":
+									//Safari 5.1.x - modal dialog fires keypress twice workaround
+									skipKeyPressEvent = false;
+									inComposition = false;
+									keydownPressed = true;
+									break;
+								case "keypress":
+									if (skipKeyPressEvent === true) {
+										return e.preventDefault();
+									}
+									skipKeyPressEvent = true;
 
-								break;
-							case "compositionstart":
-								inComposition = true;
-								break;
-							case "compositionupdate":
-								skipInputEvent = keydownPressed;
-								break;
-							case "compositionend":
-								inComposition = false;
-								keydownPressed = false;
-								break;
-							case "cut":
-								skipInputEvent = true;
-								break;
+									break;
+								case "compositionstart":
+									inComposition = true;
+									break;
+								case "compositionupdate":
+									skipInputEvent = keydownPressed;
+									break;
+								case "compositionend":
+									inComposition = false;
+									keydownPressed = false;
+									break;
+								case "cut":
+									skipInputEvent = true;
+									break;
+							}
+							// console.log("executed " + e.type);
+							return eventHandler.apply(this, arguments);
 						}
-						// console.log("executed " + e.type);
-						return eventHandler.apply(this, arguments);
+					};
+					//keep instance of the event
+					input.inputmask.events[eventName] = input.inputmask.events[eventName] || [];
+					input.inputmask.events[eventName].push(ev);
+
+					if (["submit", "reset"].indexOf(eventName) != -1) {
+						if (input.form != null) $(input.form).on(eventName, ev);
+					} else {
+						$(input).on(eventName, ev);
+					}
+				},
+				off: function(input, event) {
+					if (input.inputmask && input.inputmask.events) {
+						$.each(event ? [event] : input.inputmask.events, function(eventName, evArr) {
+							while (evArr.length > 0) {
+								var ev = evArr.pop();
+								if (["submit", "reset"].indexOf(eventName) != -1) {
+									if (input.form != null) $(input.form).off(eventName, ev);
+								} else {
+									$(input).off(eventName, ev);
+								}
+							}
+							delete input.inputmask.events[eventName];
+						})
 					}
-				};
+				}
 			}
 
 			function patchValueProperty(npt) {
@@ -1959,7 +1986,7 @@
 									result;
 								result = valhookSet(elem, value);
 								if (elem.inputmask) {
-									$elem.trigger("setvalue.inputmask");
+									$elem.trigger("setvalue");
 								}
 								return result;
 							},
@@ -1983,19 +2010,19 @@
 				function setter(value) {
 					valueSet.call(this, value);
 					if (this.inputmask) {
-						$(this).trigger("setvalue.inputmask");
+						$(this).trigger("setvalue");
 					}
 				}
 
 				function installNativeValueSetFallback(npt) {
-					$(npt).on("mouseenter.inputmask", wrapEventRuler(function(event) {
+					EventRuler.on(npt, "mouseenter", function(event) {
 						var $input = $(this),
 							input = this,
 							value = input.inputmask._valueGet();
 						if (value !== "" && value !== getBuffer().join("")) {
-							$input.trigger("setvalue.inputmask");
+							$input.trigger("setvalue");
 						}
-					}));
+					});
 				}
 
 				if (!npt.inputmask.__valueGet) {
@@ -2061,7 +2088,7 @@
 						if (lastAlt > -1) {
 							while (validInputs.length > 0) {
 								getMaskSet().p = seekNext(getLastValidPosition());
-								var keypress = $.Event("keypress");
+								var keypress = new Event("keypress");
 								keypress.which = validInputs.pop().charCodeAt(0);
 								keypressEvent.call(input, keypress, true, false, false, getMaskSet().p);
 							}
@@ -2375,7 +2402,7 @@
 				}
 				var newData = ev.data;
 				for (var i = 0; i < newData.length; i++) {
-					var keypress = $.Event("keypress");
+					var keypress = new Event("keypress");
 					keypress.which = newData.charCodeAt(i);
 					skipKeyPressEvent = false;
 					ignorable = false;
@@ -2577,7 +2604,7 @@
 
 			function resetEvent(e) {
 				setTimeout(function() {
-					$el.trigger("setvalue.inputmask");
+					$el.trigger("setvalue");
 				}, 0);
 			}
 
@@ -2602,42 +2629,45 @@
 				}
 
 				//unbind all events - to make sure that no other mask will interfere when re-masking
-				$el.off(".inputmask");
+				EventRuler.off(el);
 				patchValueProperty(el);
 				if ((el.tagName === "INPUT" && isInputTypeSupported(el.getAttribute("type"))) || el.isContentEditable || el.tagName === "TEXTAREA") {
 					//bind events
-					$(el.form).on("submit.inputmask", submitEvent).on("reset.inputmask", resetEvent);
-
-					$el.on("mouseenter.inputmask", wrapEventRuler(mouseenterEvent))
-						.on("blur.inputmask", wrapEventRuler(blurEvent))
-						.on("focus.inputmask", wrapEventRuler(focusEvent))
-						.on("mouseleave.inputmask", wrapEventRuler(mouseleaveEvent))
-						.on("click.inputmask", wrapEventRuler(clickEvent))
-						.on("dblclick.inputmask", wrapEventRuler(dblclickEvent))
-						.on(PasteEventType + ".inputmask dragdrop.inputmask drop.inputmask", wrapEventRuler(pasteEvent))
-						.on("cut.inputmask", wrapEventRuler(cutEvent))
-						.on("complete.inputmask", wrapEventRuler(opts.oncomplete))
-						.on("incomplete.inputmask", wrapEventRuler(opts.onincomplete))
-						.on("cleared.inputmask", wrapEventRuler(opts.oncleared))
-						.on("keydown.inputmask", wrapEventRuler(keydownEvent))
-						.on("keypress.inputmask", wrapEventRuler(keypressEvent));
+					EventRuler.on(el, "submit", submitEvent);
+					EventRuler.on(el, "reset", submitEvent);
+
+					EventRuler.on(el, "mouseenter", mouseenterEvent);
+					EventRuler.on(el, "blur", blurEvent);
+					EventRuler.on(el, "focus", focusEvent);
+					EventRuler.on(el, "mouseleave", mouseleaveEvent);
+					EventRuler.on(el, "click", clickEvent);
+					EventRuler.on(el, "dblclick", dblclickEvent);
+					EventRuler.on(el, PasteEventType, pasteEvent);
+					EventRuler.on(el, "dragdrop", pasteEvent);
+					EventRuler.on(el, "drop", pasteEvent);
+					EventRuler.on(el, "cut", cutEvent);
+					EventRuler.on(el, "complete", opts.oncomplete);
+					EventRuler.on(el, "incomplete", opts.onincomplete);
+					EventRuler.on(el, "cleared", opts.oncleared);
+					EventRuler.on(el, "keydown", keydownEvent);
+					EventRuler.on(el, "keypress", keypressEvent);
 
 
 					if (!androidfirefox) {
-						$el.on("compositionstart.inputmask", wrapEventRuler(compositionStartEvent))
-							.on("compositionupdate.inputmask", wrapEventRuler(compositionUpdateEvent))
-							.on("compositionend.inputmask", wrapEventRuler(compositionEndEvent));
+						EventRuler.on(el, "compositionstart", compositionStartEvent);
+						EventRuler.on(el, "compositionupdate", compositionUpdateEvent);
+						EventRuler.on(el, "compositionend", compositionEndEvent);
 					}
 
 					if (PasteEventType === "paste") {
-						$el.on("input.inputmask", wrapEventRuler(inputFallBackEvent));
+						EventRuler.on(el, "input", inputFallBackEvent);
 					}
 					if (android || androidfirefox || androidchrome || kindle) {
-						$el.off("input.inputmask");
-						$el.on("input.inputmask", wrapEventRuler(mobileInputEvent));
+						EventRuler.off(el, "input");
+						EventRuler.on(el, "input", mobileInputEvent);
 					}
 				}
-				$el.on("setvalue.inputmask", wrapEventRuler(setValueEvent));
+				EventRuler.on(el, "setvalue", setValueEvent);
 
 				//apply mask
 				if (el.inputmask._valueGet() !== "" || opts.clearMaskOnLostFocus === false) {
@@ -2746,7 +2776,7 @@
 						//writeout the unmaskedvalue
 						el.inputmask._valueSet(unmaskedvalue(el));
 						//unbind all events
-						$el.off(".inputmask");
+						EventRuler.off(el);
 						//restore the value property
 						var valueProperty;
 						if (Object.getOwnPropertyDescriptor) {

+ 2 - 2
js/inputmask.numeric.extensions.js

@@ -700,11 +700,11 @@ Optional extensions on the jquery.inputmask base
 						switch (e.keyCode) {
 							case Inputmask.keyCode.UP:
 								$input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step));
-								$input.trigger("setvalue.inputmask");
+								$input.trigger("setvalue");
 								break;
 							case Inputmask.keyCode.DOWN:
 								$input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step));
-								$input.trigger("setvalue.inputmask");
+								$input.trigger("setvalue");
 								break;
 						}
 					}

+ 1 - 1
js/jquery.inputmask.js

@@ -40,7 +40,7 @@
 						case "setvalue":
 							$(input).val(options);
 							if (input && input.inputmask !== undefined) {
-								$(input).triggerHandler("setvalue.inputmask");
+								$(input).triggerHandler("setvalue");
 							}
 							break;
 						case "option":

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.2.6-11",
+  "version": "3.2.6-16",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
   "main": "./dist/inputmask/jquery.inputmask.js",
   "files": [

+ 4 - 4
qunit/config.js

@@ -5,9 +5,9 @@ require.config({
 		"jqlite": "../node_modules/jqlite/jqlite",
 		"qunit": "../node_modules/qunitjs/qunit/qunit",
 		// "inputmask.dependencyLib": "../dist/inputmask/inputmask.dependencyLib.jquery",
-		"inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib",
-		// "inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib.jqlite",
-		"inputmask": "../dist/inputmask/inputmask"
-		// "inputmask": "../js/inputmask"
+		// "inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib",
+		"inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib.jqlite",
+		// "inputmask": "../dist/inputmask/inputmask"
+		"inputmask": "../js/inputmask"
 	}
 });

+ 146 - 139
qunit/simulator.js

@@ -5,156 +5,163 @@
 			factory(window.dependencyLib || jQuery, window.Inputmask);
 		}
 	}
-(function($, Inputmask) {
-	$.caret = function(input, begin, end) {
-		input = input.nodeName ? input : input[0];
-		var range;
-		if (typeof begin === "number") {
-			end = (typeof end == "number") ? end : begin;
-			// if (!$(input).is(":visible")) {
-			// 	return;
-			// }
+	(function($, Inputmask) {
+		$.caret = function(input, begin, end) {
+			input = input.nodeName ? input : input[0];
+			var range;
+			if (typeof begin === "number") {
+				end = (typeof end == "number") ? end : begin;
+				// if (!$(input).is(":visible")) {
+				// 	return;
+				// }
 
-			if (input.setSelectionRange) {
-				input.selectionStart = begin;
-				input.selectionEnd = end;
-			} else if (window.getSelection) {
-				range = document.createRange();
-				if (input.firstChild === undefined) {
-					var textNode = document.createTextNode("");
-					input.appendChild(textNode);
-				}
-				range.setStart(input.firstChild, begin < input.value.length ? begin : input.value.length);
-				range.setEnd(input.firstChild, end < input.value.length ? end : input.value.length);
-				range.collapse(true);
-				var sel = window.getSelection();
-				sel.removeAllRanges();
-				sel.addRange(range);
-				//input.focus();
-			} else if (input.createTextRange) {
-				range = input.createTextRange();
-				range.collapse(true);
-				range.moveEnd("character", end);
-				range.moveStart("character", begin);
-				range.select();
+				if (input.setSelectionRange) {
+					input.selectionStart = begin;
+					input.selectionEnd = end;
+				} else if (window.getSelection) {
+					range = document.createRange();
+					if (input.firstChild === undefined) {
+						var textNode = document.createTextNode("");
+						input.appendChild(textNode);
+					}
+					range.setStart(input.firstChild, begin < input.value.length ? begin : input.value.length);
+					range.setEnd(input.firstChild, end < input.value.length ? end : input.value.length);
+					range.collapse(true);
+					var sel = window.getSelection();
+					sel.removeAllRanges();
+					sel.addRange(range);
+					//input.focus();
+				} else if (input.createTextRange) {
+					range = input.createTextRange();
+					range.collapse(true);
+					range.moveEnd("character", end);
+					range.moveStart("character", begin);
+					range.select();
 
+				}
+			} else {
+				if (input.setSelectionRange) {
+					begin = input.selectionStart;
+					end = input.selectionEnd;
+				} else if (window.getSelection) {
+					range = window.getSelection().getRangeAt(0);
+					if (range.commonAncestorContainer.parentNode === input || range.commonAncestorContainer === input) {
+						begin = range.startOffset;
+						end = range.endOffset;
+					}
+				} else if (document.selection && document.selection.createRange) {
+					range = document.selection.createRange();
+					begin = 0 - range.duplicate().moveStart("character", -100000);
+					end = begin + range.text.length;
+				}
+				/*eslint-disable consistent-return */
+				return {
+					"begin": begin,
+					"end": end
+				};
+				/*eslint-enable consistent-return */
 			}
-		} else {
-			if (input.setSelectionRange) {
-				begin = input.selectionStart;
-				end = input.selectionEnd;
-			} else if (window.getSelection) {
-				range = window.getSelection().getRangeAt(0);
-				if (range.commonAncestorContainer.parentNode === input || range.commonAncestorContainer === input) {
-					begin = range.startOffset;
-					end = range.endOffset;
+		};
+		$.fn = $.fn || $.prototype;
+		$.fn.SendKey = function(keyCode, modifier) {
+			function trigger(elem, evnt) {
+				if (document.createEvent) {
+					elem.dispatchEvent(evnt);
+				} else {
+					elem.fireEvent("on" + evnt.eventType, evnt);
 				}
-			} else if (document.selection && document.selection.createRange) {
-				range = document.selection.createRange();
-				begin = 0 - range.duplicate().moveStart("character", -100000);
-				end = begin + range.text.length;
 			}
-			/*eslint-disable consistent-return */
-			return {
-				"begin": begin,
-				"end": end
-			};
-			/*eslint-enable consistent-return */
-		}
-	};
-	$.fn = $.fn || $.prototype;
-	$.fn.SendKey = function(keyCode, modifier) {
-		var sendDummyKeydown = false;
-		if (Object.prototype.toString.call(keyCode) == '[object String]') {
-			keyCode = keyCode.charCodeAt(0);
-			sendDummyKeydown = true;
-		}
+			var sendDummyKeydown = false;
+			if (Object.prototype.toString.call(keyCode) == '[object String]') {
+				keyCode = keyCode.charCodeAt(0);
+				sendDummyKeydown = true;
+			}
 
-		switch (keyCode) {
-			case Inputmask.keyCode.LEFT:
-				{
-					if (modifier == undefined) {
-						var pos = $.caret(this);
-						$.caret(this, pos.begin - 1);
-						break;
+			switch (keyCode) {
+				case Inputmask.keyCode.LEFT:
+					{
+						if (modifier == undefined) {
+							var pos = $.caret(this);
+							$.caret(this, pos.begin - 1);
+							break;
+						}
 					}
-				}
-			case Inputmask.keyCode.RIGHT:
-				{
-					if (modifier == undefined) {
-						var pos = $.caret(this);
-						$.caret(this, pos.begin + 1);
-						break;
+				case Inputmask.keyCode.RIGHT:
+					{
+						if (modifier == undefined) {
+							var pos = $.caret(this);
+							$.caret(this, pos.begin + 1);
+							break;
+						}
 					}
-				}
-			default:
-				{
-					var keydown = $.Event("keydown"),
-						keypress = $.Event("keypress"),
-						keyup = $.Event("keyup");
+				default:
+					{
+						var keydown = new Event("keydown"),
+							keypress = new Event("keypress"),
+							keyup = new Event("keyup");
 
-					if (!sendDummyKeydown) {
-						keydown.keyCode = keyCode;
-						if (modifier == Inputmask.keyCode.CONTROL)
-							keydown.ctrlKey = true;
-					}
-					$(this).trigger(keydown);
-					if (!keydown.isDefaultPrevented()) {
-						keypress.keyCode = keyCode;
-						if (modifier == Inputmask.keyCode.CONTROL)
-							keypress.ctrlKey = true;
-						$(this).trigger(keypress);
-						//if (!keypress.isDefaultPrevented()) {
-						keyup.keyCode = keyCode;
-						if (modifier == Inputmask.keyCode.CONTROL)
-							keyup.ctrlKey = true;
-						$(this).trigger(keyup);
-						//}
+						if (!sendDummyKeydown) {
+							keydown.keyCode = keyCode;
+							if (modifier == Inputmask.keyCode.CONTROL)
+								keydown.ctrlKey = true;
+						}
+						trigger(this.nodeName ? this : this[0], keydown);
+						if (!keydown.defaultPrevented) {
+							keypress.keyCode = keyCode;
+							if (modifier == Inputmask.keyCode.CONTROL)
+								keypress.ctrlKey = true;
+							trigger(this.nodeName ? this : this[0], keypress);
+							//if (!keypress.isDefaultPrevented()) {
+							keyup.keyCode = keyCode;
+							if (modifier == Inputmask.keyCode.CONTROL)
+								keyup.ctrlKey = true;
+							trigger(this.nodeName ? this : this[0], keyup);
+							//}
+						}
 					}
+			}
+		}
+		if (!('append' in $.fn)) {
+			$.fn.append = function(child) {
+				var input = this.nodeName ? this : this[0];
+				input.insertAdjacentHTML('beforeend', child);
+			};
+		}
+		if (!('remove' in $.fn)) {
+			$.fn.remove = function() {
+				var input = this.nodeName ? this : this[0];
+				if (input !== undefined && input !== null) {
+					input.parentElement.removeChild(input);
+					input = undefined;
 				}
+			};
 		}
-	}
-	if (!('append' in $.fn)) {
-		$.fn.append = function(child) {
-			var input = this.nodeName ? this : this[0];
-			input.insertAdjacentHTML('beforeend', child);
-		};
-	}
-	if (!('remove' in $.fn)) {
-		$.fn.remove = function() {
-			var input = this.nodeName ? this : this[0];
-			if (input !== undefined && input !== null) {
-				input.parentElement.removeChild(input);
-				input = undefined;
-			}
-		};
-	}
-	if (!('val' in $.fn)) {
-		$.fn.val = function(value) {
-			var input = this.nodeName ? this : this[0];
-			if (value !== undefined) {
-				if (input.inputmask) {
-					input.inputmask._valueSet(value);
-					$(input).trigger("setvalue");
-				} else input.value = value;
-			}
+		if (!('val' in $.fn)) {
+			$.fn.val = function(value) {
+				var input = this.nodeName ? this : this[0];
+				if (value !== undefined) {
+					if (input.inputmask) {
+						input.inputmask._valueSet(value);
+						$(input).trigger("setvalue");
+					} else input.value = value;
+				}
 
-			return input.value;
-		};
-	}
+				return input.value;
+			};
+		}
 
-	$.fn.Type = function(inputStr) {
-		var input = this.nodeName ? this : this[0],
-			$input = $(input);
-		$.each(inputStr.split(''), function(ndx, lmnt) {
-			$input.SendKey(lmnt);
-		});
-	}
-	$.fn.paste = function(inputStr) {
-		var input = this.nodeName ? this : this[0],
-			$input = $(input),
-			isRTL = input.inputmask.isRTL;
-		window.clipboardData ? window.clipboardData.setData("Text", inputStr) : $input[0].inputmask._valueSet(isRTL ? inputStr.split('').reverse().join('') : inputStr);
-		$input.trigger('paste');
-	}
-}));
+		$.fn.Type = function(inputStr) {
+			var input = this.nodeName ? this : this[0],
+				$input = $(input);
+			$.each(inputStr.split(''), function(ndx, lmnt) {
+				$input.SendKey(lmnt);
+			});
+		}
+		$.fn.paste = function(inputStr) {
+			var input = this.nodeName ? this : this[0],
+				$input = $(input),
+				isRTL = input.inputmask.isRTL;
+			window.clipboardData ? window.clipboardData.setData("Text", inputStr) : $input[0].inputmask._valueSet(isRTL ? inputStr.split('').reverse().join('') : inputStr);
+			$input.trigger('paste');
+		}
+	}));

+ 33 - 0
test2.html

@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <!--<meta http-equiv="Content-Security-Policy" content="script-src 'self'">-->
+  <!--<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/themes/base/jquery-ui.css" />
+    <link rel="stylesheet" type="text/css" href="http://trirand.com/blog/jqgrid/themes/ui.jqgrid.css" />-->
+</head>
+
+<body>
+  <input type="text" id="test1" />
+  <input id="button1" type="button" value="Add" />
+  <input id="button2" type="button" value="Remove" />
+  <script>
+    var el = document.getElementById("test1");
+    var button1 = document.getElementById("button1");
+    var button2 = document.getElementById("button2");
+
+    function maskscope() {
+      return function() {
+        alert("test");
+      }
+    }
+    button1.addEventListener("click", function(e) {
+      el.addEventListener("click", new maskscope(), false);
+    });
+    button2.addEventListener("click", function(e) {
+      el.removeEventListener("click", new maskscope(), false);
+    });
+  </script>
+</body>
+
+</html>