浏览代码

Repeat function doesn't work for dynamic masks fix #960

Robin Herbots 10 年之前
父节点
当前提交
21d76c7147

+ 2 - 1
CHANGELOG.md

@@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file.
 ## [Unreleased]
 
 ### Added
-- inputmask.unmask 
+- inputmask.unmask
 - numeric alias - increment/decrement by ctrl-up/ctrl-down
 - numeric alias - round values
 - percentage alias
@@ -21,6 +21,7 @@ All notable changes to this project will be documented in this file.
 - Update placeholder handling
 
 ### Fixed
+- Repeat function doesn't work for dynamic masks #960
 - Provide convenient method to unmask value #929
 - Min value doesn't work with allowMinus #951
 - Escape value is inconsistent after mask #935

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.1.64-92",
+  "version": "3.1.64-97",
   "main": [
     "./dist/inputmask/jquery.inputmask.js",
     "./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.1.64-92",
+    "version": "3.1.64-97",
     "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.1.64-92",
+	"version": "3.1.64-97",
     "type": "library",
     "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
     "homepage": "http://robinherbots.github.io/jquery.inputmask",

+ 1 - 1
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.1.64-92
+* Version: 3.1.64-97
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/inputmask.date.extensions.min.js


+ 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.1.64-92
+* Version: 3.1.64-97
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/inputmask.extensions.min.js


+ 17 - 14
dist/inputmask/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.1.64-92
+* Version: 3.1.64-97
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery")) : factory(jQuery);
@@ -107,8 +107,19 @@
                 currentToken.matches.length > 0 && (void 0 == extraCondition || extraCondition) && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
                 verifyGroupMarker(lastMatch)), insertTestDefinition(currentToken, m);
             }
+            function defaultCase() {
+                if (openenings.length > 0) {
+                    if (currentOpeningToken = openenings[openenings.length - 1], maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator), 
+                    currentOpeningToken.isAlternator) {
+                        alternator = openenings.pop();
+                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
+                        openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
+                        currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
+                    }
+                } else maskCurrentToken(m, currentToken, lastMatch);
+            }
             for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})\??|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new maskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], 
-            escaped) maskCurrentToken(m, currentToken, lastMatch); else switch (m.charAt(0)) {
+            escaped) defaultCase(); else switch (m.charAt(0)) {
               case opts.escapeChar:
                 escaped = !0;
                 break;
@@ -165,15 +176,7 @@
                 break;
 
               default:
-                if (openenings.length > 0) {
-                    if (currentOpeningToken = openenings[openenings.length - 1], maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator), 
-                    currentOpeningToken.isAlternator) {
-                        alternator = openenings.pop();
-                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
-                        openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
-                        currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
-                    }
-                } else maskCurrentToken(m, currentToken, lastMatch);
+                defaultCase();
             }
             return currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
             verifyGroupMarker(lastMatch), maskTokens.push(currentToken)), maskTokens;
@@ -319,7 +322,7 @@
                         locator: loopNdx.reverse()
                     }), !0;
                     if (void 0 != match.matches) {
-                        if (match.isGroup && quantifierRecurse !== !0) {
+                        if (match.isGroup && quantifierRecurse !== match) {
                             if (match = handleMatch(maskToken.matches[tndx + 1], loopNdx)) return !0;
                         } else if (match.isOptional) {
                             var optionalToken = match;
@@ -371,9 +374,9 @@
                                 })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0;
                             } else match = alternateToken.matches[altIndex] ? handleMatch(alternateToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse) : !1;
                             if (match) return !0;
-                        } else if (match.isQuantifier && quantifierRecurse !== !0) for (var qt = match, qndx = ndxInitializer.length > 0 && quantifierRecurse !== !0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && pos >= testPos; qndx++) {
+                        } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && pos >= testPos; qndx++) {
                             var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
-                            if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), !0)) {
+                            if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
                                 var latestMatch = matches[matches.length - 1].match;
                                 latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1;
                                 var isFirstMatch = 0 == $.inArray(latestMatch, tokenGroup.matches);

文件差异内容过多而无法显示
+ 2 - 2
dist/inputmask/inputmask.min.js


+ 1 - 1
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.1.64-92
+* Version: 3.1.64-97
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/inputmask.numeric.extensions.min.js


+ 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.1.64-92
+* Version: 3.1.64-97
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/inputmask.phone.extensions.min.js


+ 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.1.64-92
+* Version: 3.1.64-97
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/inputmask.regex.extensions.min.js


+ 1 - 1
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.1.64-92
+* Version: 3.1.64-97
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/jquery.inputmask.min.js


+ 17 - 14
dist/jquery.inputmask.bundle.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.1.64-92
+* Version: 3.1.64-97
 */
 !function($) {
     function inputmask(options) {
@@ -105,8 +105,19 @@
                 currentToken.matches.length > 0 && (void 0 == extraCondition || extraCondition) && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
                 verifyGroupMarker(lastMatch)), insertTestDefinition(currentToken, m);
             }
+            function defaultCase() {
+                if (openenings.length > 0) {
+                    if (currentOpeningToken = openenings[openenings.length - 1], maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator), 
+                    currentOpeningToken.isAlternator) {
+                        alternator = openenings.pop();
+                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
+                        openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
+                        currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
+                    }
+                } else maskCurrentToken(m, currentToken, lastMatch);
+            }
             for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})\??|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new maskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], 
-            escaped) maskCurrentToken(m, currentToken, lastMatch); else switch (m.charAt(0)) {
+            escaped) defaultCase(); else switch (m.charAt(0)) {
               case opts.escapeChar:
                 escaped = !0;
                 break;
@@ -163,15 +174,7 @@
                 break;
 
               default:
-                if (openenings.length > 0) {
-                    if (currentOpeningToken = openenings[openenings.length - 1], maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator), 
-                    currentOpeningToken.isAlternator) {
-                        alternator = openenings.pop();
-                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
-                        openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
-                        currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
-                    }
-                } else maskCurrentToken(m, currentToken, lastMatch);
+                defaultCase();
             }
             return currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
             verifyGroupMarker(lastMatch), maskTokens.push(currentToken)), maskTokens;
@@ -317,7 +320,7 @@
                         locator: loopNdx.reverse()
                     }), !0;
                     if (void 0 != match.matches) {
-                        if (match.isGroup && quantifierRecurse !== !0) {
+                        if (match.isGroup && quantifierRecurse !== match) {
                             if (match = handleMatch(maskToken.matches[tndx + 1], loopNdx)) return !0;
                         } else if (match.isOptional) {
                             var optionalToken = match;
@@ -369,9 +372,9 @@
                                 })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0;
                             } else match = alternateToken.matches[altIndex] ? handleMatch(alternateToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse) : !1;
                             if (match) return !0;
-                        } else if (match.isQuantifier && quantifierRecurse !== !0) for (var qt = match, qndx = ndxInitializer.length > 0 && quantifierRecurse !== !0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && pos >= testPos; qndx++) {
+                        } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && pos >= testPos; qndx++) {
                             var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
-                            if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), !0)) {
+                            if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
                                 var latestMatch = matches[matches.length - 1].match;
                                 latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1;
                                 var isFirstMatch = 0 == $.inArray(latestMatch, tokenGroup.matches);

文件差异内容过多而无法显示
+ 2 - 2
dist/jquery.inputmask.bundle.min.js


+ 30 - 25
js/inputmask.js

@@ -424,6 +424,27 @@
 				insertTestDefinition(currentToken, m);
 			}
 
+			function defaultCase() {
+				if (openenings.length > 0) {
+					currentOpeningToken = openenings[openenings.length - 1];
+					maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator);
+					if (currentOpeningToken.isAlternator) { //handle alternator a | b case
+						alternator = openenings.pop();
+						for (var mndx = 0; mndx < alternator.matches.length; mndx++) {
+							alternator.matches[mndx].isGroup = false; //don't mark alternate groups as group
+						}
+						if (openenings.length > 0) {
+							currentOpeningToken = openenings[openenings.length - 1];
+							currentOpeningToken["matches"].push(alternator);
+						} else {
+							currentToken.matches.push(alternator);
+						}
+					}
+				} else {
+					maskCurrentToken(m, currentToken, lastMatch);
+				}
+			}
+
 			var currentToken = new maskToken(),
 				match,
 				m,
@@ -436,11 +457,11 @@
 
 			while (match = tokenizer.exec(mask)) {
 				m = match[0];
+
 				if (escaped) {
-					maskCurrentToken(m, currentToken, lastMatch);
+					defaultCase();
 					continue;
 				}
-
 				switch (m.charAt(0)) {
 					case opts.escapeChar:
 						escaped = true;
@@ -529,24 +550,7 @@
 						}
 						break;
 					default:
-						if (openenings.length > 0) {
-							currentOpeningToken = openenings[openenings.length - 1];
-							maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator);
-							if (currentOpeningToken.isAlternator) { //handle alternator a | b case
-								alternator = openenings.pop();
-								for (var mndx = 0; mndx < alternator.matches.length; mndx++) {
-									alternator.matches[mndx].isGroup = false; //don't mark alternate groups as group
-								}
-								if (openenings.length > 0) {
-									currentOpeningToken = openenings[openenings.length - 1];
-									currentOpeningToken["matches"].push(alternator);
-								} else {
-									currentToken.matches.push(alternator);
-								}
-							}
-						} else {
-							maskCurrentToken(m, currentToken, lastMatch);
-						}
+						defaultCase();
 				}
 			}
 
@@ -572,6 +576,7 @@
 					mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end;
 				}
 
+				// console.log(mask);
 				var masksetDefinition;
 				if (inputmask.prototype.masksCache[mask] == undefined || nocache === true) {
 					masksetDefinition = {
@@ -880,7 +885,7 @@
 						});
 						return true;
 					} else if (match.matches != undefined) {
-						if (match.isGroup && quantifierRecurse !== true) { //when a group pass along to the quantifier
+						if (match.isGroup && quantifierRecurse !== match) { //when a group pass along to the quantifier
 							match = handleMatch(maskToken.matches[tndx + 1], loopNdx);
 							if (match) return true;
 						} else if (match.isOptional) {
@@ -981,12 +986,12 @@
 								} else match = false;
 							}
 							if (match) return true;
-						} else if (match.isQuantifier && quantifierRecurse !== true) {
+						} else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) {
 							var qt = match;
-							for (var qndx = (ndxInitializer.length > 0 && quantifierRecurse !== true) ? ndxInitializer.shift() : 0;
+							for (var qndx = (ndxInitializer.length > 0) ? ndxInitializer.shift() : 0;
 								(qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max)) && testPos <= pos; qndx++) {
 								var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
-								match = handleMatch(tokenGroup, [qndx].concat(loopNdx), true);
+								match = handleMatch(tokenGroup, [qndx].concat(loopNdx), tokenGroup); //set the tokenGroup as quantifierRecurse marker
 								if (match) {
 									//get latest match
 									var latestMatch = matches[matches.length - 1]["match"];
@@ -1061,7 +1066,7 @@
 
 			getMaskSet()['tests'][pos] = $.extend(true, [], matches); //set a clone to prevent overwriting some props
 
-			//console.log(pos + " - " + JSON.stringify(matches));
+			// console.log(pos + " - " + JSON.stringify(matches));
 			return getMaskSet()['tests'][pos];
 		}
 

+ 1 - 1
package.json

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

+ 200 - 168
qunit/tests_dynamic.js

@@ -1,210 +1,242 @@
 module("Dynamic Masks");
-test("inputmask(\"9-a{3}9{3}\" - simple dynamic mask", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("9-a{3}9{3}");
+test("inputmask(\"9-a{3}9{3}\" - simple dynamic mask", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("9-a{3}9{3}");
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("1abc123");
+	$("#testmask")[0].focus();
+	$("#testmask").Type("1abc123");
 
-    equal($("#testmask").val(), "1-abc123", "Result " + $("#testmask").val());
+	equal($("#testmask").val(), "1-abc123", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+	$("#testmask").remove();
 });
-test("inputmask(\"9-a{1,3}9{1,3}\" - simple dynamic mask", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("9-a{1,3}9{1,3}");
+test("inputmask(\"9-a{1,3}9{1,3}\" - simple dynamic mask", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("9-a{1,3}9{1,3}");
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("1a1");
+	$("#testmask")[0].focus();
+	$("#testmask").Type("1a1");
 
-    equal($("#testmask").val(), "1-a1", "Result " + $("#testmask").val());
+	equal($("#testmask").val(), "1-a1", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+	$("#testmask").remove();
 });
-test("inputmask(\"9-a{1,3}9{1,3}\" - simple dynamic mask - greedy false", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("9-a{1,3}9{1,3}", { greedy: false });
+test("inputmask(\"9-a{1,3}9{1,3}\" - simple dynamic mask - greedy false", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("9-a{1,3}9{1,3}", {
+		greedy: false
+	});
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("1a1");
+	$("#testmask")[0].focus();
+	$("#testmask").Type("1a1");
 
-    equal($("#testmask").val(), "1-a1", "Result " + $("#testmask").val());
+	equal($("#testmask").val(), "1-a1", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+	$("#testmask").remove();
 });
-test("inputmask(\"9-a{1,3}/9{2,3}\" - simple dynamic mask - greedy true", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("9-a{1,3}/9{2,3}", { greedy: true });
+test("inputmask(\"9-a{1,3}/9{2,3}\" - simple dynamic mask - greedy true", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("9-a{1,3}/9{2,3}", {
+		greedy: true
+	});
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("1a/123");
+	$("#testmask")[0].focus();
+	$("#testmask").Type("1a/123");
 
-    equal($("#testmask").val(), "1-a/123", "Result " + $("#testmask").val());
+	equal($("#testmask").val(), "1-a/123", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+	$("#testmask").remove();
 });
-test("email mask greedy false", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email", { greedy: false });
+test("email mask greedy false", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email", {
+		greedy: false
+	});
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("some.body@mail.com");
-    $("#testmask").blur();
-    equal($("#testmask").val(), "some.body@mail.com", "Result " + $("#testmask").val());
+	$("#testmask")[0].focus();
+	$("#testmask").Type("some.body@mail.com");
+	$("#testmask").blur();
+	equal($("#testmask").val(), "some.body@mail.com", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+	$("#testmask").remove();
 });
-asyncTest("email mask greedy true", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email", { greedy: true });
+asyncTest("email mask greedy true", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email", {
+		greedy: true
+	});
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("some.body@mail.com");
-    $("#testmask").blur();
-    setTimeout(function () {
-        start();
-        equal($("#testmask").val(), "some.body@mail.com", "Result " + $("#testmask").val());
-        $("#testmask").remove();
-    }, 0);
+	$("#testmask")[0].focus();
+	$("#testmask").Type("some.body@mail.com");
+	$("#testmask").blur();
+	setTimeout(function() {
+		start();
+		equal($("#testmask").val(), "some.body@mail.com", "Result " + $("#testmask").val());
+		$("#testmask").remove();
+	}, 0);
 });
 
-test("email mask - partial input", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email");
+test("email mask - partial input", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email");
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("some.");
-    $("#testmask").blur();
-    equal($("#testmask").val(), "some._@_", "Result " + $("#testmask").val());
+	$("#testmask")[0].focus();
+	$("#testmask").Type("some.");
+	$("#testmask").blur();
+	equal($("#testmask").val(), "some._@_", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+	$("#testmask").remove();
 });
 
-test("email mask - partial input 2", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email");
+test("email mask - partial input 2", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email");
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("some@mail.com");
-    $.caret($("#testmask"), 4);
-    $("#testmask").Type(".body");
-    equal($("#testmask").val(), "some.body@mail.com", "Result " + $("#testmask").val());
+	$("#testmask")[0].focus();
+	$("#testmask").Type("some@mail.com");
+	$.caret($("#testmask"), 4);
+	$("#testmask").Type(".body");
+	equal($("#testmask").val(), "some.body@mail.com", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+	$("#testmask").remove();
 });
 
-test("email mask - babu@us.lufthansa.com - babupca", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email");
+test("email mask - babu@us.lufthansa.com - babupca", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email");
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("babu@us.lufthansa.com");
-    equal($("#testmask").val(), "babu@us.lufthansa.com", "Result " + $("#testmask").val());
+	$("#testmask")[0].focus();
+	$("#testmask").Type("babu@us.lufthansa.com");
+	equal($("#testmask").val(), "babu@us.lufthansa.com", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+	$("#testmask").remove();
 });
 
-test("email mask - email@subdomain.domain.com - babupca", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email");
+test("email mask - email@subdomain.domain.com - babupca", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email");
 
-    $("#testmask")[0].focus();
-    $("#testmask").Type("email@subdomain.domain.com");
-    equal($("#testmask").val(), "email@subdomain.domain.com", "Result " + $("#testmask").val());
+	$("#testmask")[0].focus();
+	$("#testmask").Type("email@subdomain.domain.com");
+	equal($("#testmask").val(), "email@subdomain.domain.com", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+	$("#testmask").remove();
 });
 
-asyncTest("email mask - paste test.test@test.com - Kurumas", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email");
-
-    $("#testmask")[0].focus();
-    $("#testmask").paste("test.test@test.com");
-    setTimeout(function () {
-        equal($("#testmask").val(), "test.test@test.com", "Result " + $("#testmask").val());
-        start();
-        $("#testmask").remove();
-    }, 0);
-});
-
-test("quantifier mask greedy false - FairSite2C", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("9{0,4}", { greedy: false });
-
-    $("#testmask")[0].focus();
-    $("#testmask").Type("123");
-    equal($("#testmask").val(), "123", "Result " + $("#testmask").val());
-
-    $("#testmask").remove();
-});
-
-test("quantifier mask greedy true - FairSite2C", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("9{0,4}", { greedy: true });
-
-    $("#testmask")[0].focus();
-    $("#testmask").Type("123");
-    equal($("#testmask").val(), "123", "Result " + $("#testmask").val());
-
-    $("#testmask").remove();
+asyncTest("email mask - paste test.test@test.com - Kurumas", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email");
+
+	$("#testmask")[0].focus();
+	$("#testmask").paste("test.test@test.com");
+	setTimeout(function() {
+		equal($("#testmask").val(), "test.test@test.com", "Result " + $("#testmask").val());
+		start();
+		$("#testmask").remove();
+	}, 0);
+});
+
+test("quantifier mask greedy false - FairSite2C", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("9{0,4}", {
+		greedy: false
+	});
+
+	$("#testmask")[0].focus();
+	$("#testmask").Type("123");
+	equal($("#testmask").val(), "123", "Result " + $("#testmask").val());
+
+	$("#testmask").remove();
+});
+
+test("quantifier mask greedy true - FairSite2C", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("9{0,4}", {
+		greedy: true
+	});
+
+	$("#testmask")[0].focus();
+	$("#testmask").Type("123");
+	equal($("#testmask").val(), "123", "Result " + $("#testmask").val());
+
+	$("#testmask").remove();
+});
+
+
+asyncTest("email mask - clearIncomplete - hiddenman", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email", {
+		clearIncomplete: true
+	});
+
+	$("#testmask")[0].focus();
+	$("#testmask").Type("akornilov");
+	$("#testmask").blur();
+	setTimeout(function() {
+		equal(document.getElementById("testmask")._valueGet(), "", "Result " + document.getElementById("testmask")._valueGet());
+		start();
+		$("#testmask").remove();
+	}, 0);
 });
 
-
-asyncTest("email mask - clearIncomplete - hiddenman", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email", { clearIncomplete: true });
-
-    $("#testmask")[0].focus();
-    $("#testmask").Type("akornilov");
-    $("#testmask").blur();
-    setTimeout(function () {
-        equal(document.getElementById("testmask")._valueGet(), "", "Result " + document.getElementById("testmask")._valueGet());
-        start();
-        $("#testmask").remove();
-    }, 0);
-});
-
-asyncTest("email mask - clearIncomplete - hiddenman", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email", { clearIncomplete: true });
-
-    $("#testmask")[0].focus();
-    $("#testmask").Type("akornilov@");
-    $("#testmask").blur();
-    setTimeout(function () {
-        equal(document.getElementById("testmask")._valueGet(), "", "Result " + document.getElementById("testmask")._valueGet());
-        start();
-        $("#testmask").remove();
-    }, 0);
-});
-
-asyncTest("email mask - clearIncomplete - hiddenman", function () {
-    var $fixture = $("#qunit-fixture");
-    $fixture.append('<input type="text" id="testmask" />');
-    $("#testmask").inputmask("email", { clearIncomplete: true });
-
-    $("#testmask")[0].focus();
-    $("#testmask").Type("akornilov@gmail.com");
-    $("#testmask").blur();
-    setTimeout(function () {
-        equal(document.getElementById("testmask")._valueGet(), "akornilov@gmail.com", "Result " + document.getElementById("testmask")._valueGet());
-        start();
-        $("#testmask").remove();
-    }, 0);
+asyncTest("email mask - clearIncomplete - hiddenman", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email", {
+		clearIncomplete: true
+	});
+
+	$("#testmask")[0].focus();
+	$("#testmask").Type("akornilov@");
+	$("#testmask").blur();
+	setTimeout(function() {
+		equal(document.getElementById("testmask")._valueGet(), "", "Result " + document.getElementById("testmask")._valueGet());
+		start();
+		$("#testmask").remove();
+	}, 0);
+});
+
+asyncTest("email mask - clearIncomplete - hiddenman", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask("email", {
+		clearIncomplete: true
+	});
+
+	$("#testmask")[0].focus();
+	$("#testmask").Type("akornilov@gmail.com");
+	$("#testmask").blur();
+	setTimeout(function() {
+		equal(document.getElementById("testmask")._valueGet(), "akornilov@gmail.com", "Result " + document.getElementById("testmask")._valueGet());
+		start();
+		$("#testmask").remove();
+	}, 0);
+});
+
+test("mask: '\\\\a{*}', repeat: 5 - voidmain02", function() {
+	var $fixture = $("#qunit-fixture");
+	$fixture.append('<input type="text" id="testmask" />');
+	$("#testmask").inputmask({
+		mask: '\\\\a{*}',
+		repeat: 5
+	});
+
+	$("#testmask")[0].focus();
+	$("#testmask").Type("abcd abcd abcd abcd abcd");
+	equal(document.getElementById("testmask")._valueGet(), "\\abcd\\abcd\\abcd\\abcd\\abcd", "Result " + document.getElementById("testmask")._valueGet());
+	$("#testmask").remove();
 });