Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
malwaredllc
GitHub Repository: malwaredllc/byob
Path: blob/master/web-gui/buildyourownbotnet/assets/js/jquery.inputmask.bundle.js
1292 views
1
/*!
2
* jquery.inputmask.bundle.js
3
* http://github.com/RobinHerbots/jquery.inputmask
4
* Copyright (c) 2010 - 2015 Robin Herbots
5
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
6
* Version: 3.2.2
7
*/
8
!function($) {
9
function Inputmask(alias, options) {
10
return this instanceof Inputmask ? ("object" == typeof alias ? options = alias : (options = options || {},
11
options.alias = alias), this.el = void 0, this.opts = $.extend(!0, {}, this.defaults, options),
12
this.noMasksCache = options && void 0 !== options.definitions, this.userOptions = options || {},
13
void resolveAlias(this.opts.alias, options, this.opts)) : new Inputmask(alias, options);
14
}
15
function isInputEventSupported(eventName) {
16
var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el;
17
return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]),
18
el = null, isSupported;
19
}
20
function isInputTypeSupported(inputType) {
21
var isSupported = "text" === inputType || "tel" === inputType || "password" === inputType;
22
if (!isSupported) {
23
var el = document.createElement("input");
24
el.setAttribute("type", inputType), isSupported = "text" === el.type, el = null;
25
}
26
return isSupported;
27
}
28
function resolveAlias(aliasStr, options, opts) {
29
var aliasDefinition = opts.aliases[aliasStr];
30
return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts),
31
$.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr),
32
!1);
33
}
34
function importAttributeOptions(npt, opts, userOptions) {
35
function importOption(option) {
36
var optionData = npt.getAttribute("data-inputmask-" + option.toLowerCase());
37
null !== optionData && (optionData = "boolean" == typeof optionData ? optionData : optionData.toString(),
38
"string" == typeof optionData && 0 === option.indexOf("on") && (optionData = eval("(" + optionData + ")")),
39
"mask" === option && 0 === optionData.indexOf("[") ? (userOptions[option] = optionData.replace(/[\s[\]]/g, "").split(","),
40
userOptions[option][0] = userOptions[option][0].replace("'", ""), userOptions[option][userOptions[option].length - 1] = userOptions[option][userOptions[option].length - 1].replace("'", "")) : userOptions[option] = optionData);
41
}
42
var attrOptions = npt.getAttribute("data-inputmask");
43
if (attrOptions && "" !== attrOptions) try {
44
attrOptions = attrOptions.replace(new RegExp("'", "g"), '"');
45
var dataoptions = $.parseJSON("{" + attrOptions + "}");
46
$.extend(!0, userOptions, dataoptions);
47
} catch (ex) {}
48
for (var option in opts) importOption(option);
49
if (userOptions.alias) {
50
resolveAlias(userOptions.alias, userOptions, opts);
51
for (option in opts) importOption(option);
52
}
53
return $.extend(!0, opts, userOptions), opts;
54
}
55
function generateMaskSet(opts, nocache) {
56
function analyseMask(mask) {
57
function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {
58
this.matches = [], this.isGroup = isGroup || !1, this.isOptional = isOptional || !1,
59
this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1,
60
this.quantifier = {
61
min: 1,
62
max: 1
63
};
64
}
65
function insertTestDefinition(mtoken, element, position) {
66
var maskdef = opts.definitions[element];
67
position = void 0 !== position ? position : mtoken.matches.length;
68
var prevMatch = mtoken.matches[position - 1];
69
if (maskdef && !escaped) {
70
maskdef.placeholder = $.isFunction(maskdef.placeholder) ? maskdef.placeholder.call(this, opts) : maskdef.placeholder;
71
for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {
72
var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;
73
mtoken.matches.splice(position++, 0, {
74
fn: validator ? "string" == typeof validator ? new RegExp(validator) : new function() {
75
this.test = validator;
76
}() : new RegExp("."),
77
cardinality: cardinality ? cardinality : 1,
78
optionality: mtoken.isOptional,
79
newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
80
casing: maskdef.casing,
81
def: maskdef.definitionSymbol || element,
82
placeholder: maskdef.placeholder,
83
mask: element
84
}), prevMatch = mtoken.matches[position - 1];
85
}
86
mtoken.matches.splice(position++, 0, {
87
fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() {
88
this.test = maskdef.validator;
89
}() : new RegExp("."),
90
cardinality: maskdef.cardinality,
91
optionality: mtoken.isOptional,
92
newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
93
casing: maskdef.casing,
94
def: maskdef.definitionSymbol || element,
95
placeholder: maskdef.placeholder,
96
mask: element
97
});
98
} else mtoken.matches.splice(position++, 0, {
99
fn: null,
100
cardinality: 0,
101
optionality: mtoken.isOptional,
102
newBlockMarker: void 0 === prevMatch || prevMatch.def !== element,
103
casing: null,
104
def: element,
105
placeholder: void 0,
106
mask: element
107
}), escaped = !1;
108
}
109
function verifyGroupMarker(lastMatch, isOpenGroup) {
110
lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0),
111
isOpenGroup !== !0 && insertTestDefinition(lastMatch, opts.groupmarker.end));
112
}
113
function maskCurrentToken(m, currentToken, lastMatch, extraCondition) {
114
currentToken.matches.length > 0 && (void 0 === extraCondition || extraCondition) && (lastMatch = currentToken.matches[currentToken.matches.length - 1],
115
verifyGroupMarker(lastMatch)), insertTestDefinition(currentToken, m);
116
}
117
function defaultCase() {
118
if (openenings.length > 0) {
119
if (currentOpeningToken = openenings[openenings.length - 1], maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator),
120
currentOpeningToken.isAlternator) {
121
alternator = openenings.pop();
122
for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
123
openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1],
124
currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
125
}
126
} else maskCurrentToken(m, currentToken, lastMatch);
127
}
128
function reverseTokens(maskToken) {
129
function reverseStatic(st) {
130
return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start),
131
st;
132
}
133
maskToken.matches = maskToken.matches.reverse();
134
for (var match in maskToken.matches) {
135
var intMatch = parseInt(match);
136
if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {
137
var qt = maskToken.matches[match];
138
maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);
139
}
140
void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);
141
}
142
return maskToken;
143
}
144
for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0],
145
escaped) defaultCase(); else switch (m.charAt(0)) {
146
case opts.escapeChar:
147
escaped = !0;
148
break;
149
150
case opts.optionalmarker.end:
151
case opts.groupmarker.end:
152
if (openingToken = openenings.pop(), void 0 !== openingToken) if (openenings.length > 0) {
153
if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken),
154
currentOpeningToken.isAlternator) {
155
alternator = openenings.pop();
156
for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
157
openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1],
158
currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
159
}
160
} else currentToken.matches.push(openingToken); else defaultCase();
161
break;
162
163
case opts.optionalmarker.start:
164
openenings.push(new MaskToken(!1, !0));
165
break;
166
167
case opts.groupmarker.start:
168
openenings.push(new MaskToken(!0));
169
break;
170
171
case opts.quantifiermarker.start:
172
var quantifier = new MaskToken(!1, !1, !0);
173
m = m.replace(/[{}]/g, "");
174
var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
175
if (("*" === mq1 || "+" === mq1) && (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = {
176
min: mq0,
177
max: mq1
178
}, openenings.length > 0) {
179
var matches = openenings[openenings.length - 1].matches;
180
match = matches.pop(), match.isGroup || (groupToken = new MaskToken(!0), groupToken.matches.push(match),
181
match = groupToken), matches.push(match), matches.push(quantifier);
182
} else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken(!0),
183
groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match),
184
currentToken.matches.push(quantifier);
185
break;
186
187
case opts.alternatormarker:
188
openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1],
189
lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(),
190
lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken(!1, !1, !1, !0),
191
alternator.matches.push(lastMatch), openenings.push(alternator));
192
break;
193
194
default:
195
defaultCase();
196
}
197
for (;openenings.length > 0; ) openingToken = openenings.pop(), verifyGroupMarker(openingToken, !0),
198
currentToken.matches.push(openingToken);
199
return currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1],
200
verifyGroupMarker(lastMatch), maskTokens.push(currentToken)), opts.numericInput && reverseTokens(maskTokens[0]),
201
maskTokens;
202
}
203
function generateMask(mask, metadata) {
204
if (null === mask || "" === mask) return void 0;
205
if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = ""),
206
opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) {
207
var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat;
208
mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end;
209
}
210
var masksetDefinition;
211
return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = {
212
mask: mask,
213
maskToken: analyseMask(mask),
214
validPositions: {},
215
_buffer: void 0,
216
buffer: void 0,
217
tests: {},
218
metadata: metadata
219
}, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask] = masksetDefinition)) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[mask]),
220
masksetDefinition;
221
}
222
function preProcessMask(mask) {
223
return mask = mask.toString();
224
}
225
var ms;
226
if ($.isFunction(opts.mask) && (opts.mask = opts.mask.call(this, opts)), $.isArray(opts.mask)) {
227
if (opts.mask.length > 1) {
228
opts.keepStatic = null === opts.keepStatic ? !0 : opts.keepStatic;
229
var altMask = "(";
230
return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {
231
altMask.length > 1 && (altMask += ")|("), altMask += preProcessMask(void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask);
232
}), altMask += ")", generateMask(altMask, opts.mask);
233
}
234
opts.mask = opts.mask.pop();
235
}
236
return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(preProcessMask(opts.mask), opts.mask) : generateMask(preProcessMask(opts.mask.mask), opts.mask)),
237
ms;
238
}
239
function maskScope(actionObj, maskset, opts) {
240
function getMaskTemplate(baseOnInput, minimalPos, includeInput) {
241
minimalPos = minimalPos || 0;
242
var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0;
243
do {
244
if (baseOnInput === !0 && getMaskSet().validPositions[pos]) {
245
var validPos = getMaskSet().validPositions[pos];
246
test = validPos.match, ndxIntlzr = validPos.locator.slice(), maskTemplate.push(includeInput === !0 ? validPos.input : getPlaceholder(pos, test));
247
} else testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), test = testPos.match,
248
ndxIntlzr = testPos.locator.slice(), maskTemplate.push(getPlaceholder(pos, test));
249
pos++;
250
} while ((void 0 === maxLength || maxLength > pos - 1) && null !== test.fn || null === test.fn && "" !== test.def || minimalPos >= pos);
251
return maskTemplate.pop(), maskTemplate;
252
}
253
function getMaskSet() {
254
return maskset;
255
}
256
function resetMaskSet(soft) {
257
var maskset = getMaskSet();
258
maskset.buffer = void 0, maskset.tests = {}, soft !== !0 && (maskset._buffer = void 0,
259
maskset.validPositions = {}, maskset.p = 0);
260
}
261
function getLastValidPosition(closestTo, strict) {
262
var maskset = getMaskSet(), lastValidPosition = -1, valids = maskset.validPositions;
263
void 0 === closestTo && (closestTo = -1);
264
var before = lastValidPosition, after = lastValidPosition;
265
for (var posNdx in valids) {
266
var psNdx = parseInt(posNdx);
267
valids[psNdx] && (strict || null !== valids[psNdx].match.fn) && (closestTo >= psNdx && (before = psNdx),
268
psNdx >= closestTo && (after = psNdx));
269
}
270
return lastValidPosition = -1 !== before && closestTo - before > 1 || closestTo > after ? before : after;
271
}
272
function setValidPosition(pos, validTest, fromSetValid) {
273
if (opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) {
274
var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition();
275
for (i = pos; lvp >= i; i++) delete getMaskSet().validPositions[i];
276
getMaskSet().validPositions[pos] = validTest;
277
var j, valid = !0, vps = getMaskSet().validPositions;
278
for (i = j = pos; lvp >= i; i++) {
279
var t = positionsClone[i];
280
if (void 0 !== t) for (var posMatch = j, prevPosMatch = -1; posMatch < getMaskLength() && (null == t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) {
281
if (null === t.match.fn || !opts.keepStatic && vps[i] && (void 0 !== vps[i + 1] && getTests(i + 1, vps[i].locator.slice(), i).length > 1 || void 0 !== vps[i].alternation) ? posMatch++ : posMatch = seekNext(j),
282
positionCanMatchDefinition(posMatch, t.match.def)) {
283
valid = isValid(posMatch, t.input, !0, !0) !== !1, j = posMatch;
284
break;
285
}
286
if (valid = null == t.match.fn, prevPosMatch === posMatch) break;
287
prevPosMatch = posMatch;
288
}
289
if (!valid) break;
290
}
291
if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone),
292
!1;
293
} else getMaskSet().validPositions[pos] = validTest;
294
return !0;
295
}
296
function stripValidPositions(start, end, nocheck, strict) {
297
var i, startPos = start;
298
for (getMaskSet().p = start, i = startPos; end > i; i++) void 0 !== getMaskSet().validPositions[i] && (nocheck === !0 || opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) !== !1) && delete getMaskSet().validPositions[i];
299
for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {
300
for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++;
301
var s = getMaskSet().validPositions[startPos];
302
startPos > i && (i = startPos + 1);
303
var t = getMaskSet().validPositions[i];
304
void 0 !== t && isMask(i) && void 0 === s ? (positionCanMatchDefinition(startPos, t.match.def) && isValid(startPos, t.input, !0) !== !1 && (delete getMaskSet().validPositions[i],
305
i++), startPos++) : i++;
306
}
307
var lvp = getLastValidPosition(), ml = getMaskLength();
308
for (strict !== !0 && nocheck !== !0 && void 0 !== getMaskSet().validPositions[lvp] && getMaskSet().validPositions[lvp].input === opts.radixPoint && delete getMaskSet().validPositions[lvp],
309
i = lvp + 1; ml >= i; i++) getMaskSet().validPositions[i] && delete getMaskSet().validPositions[i];
310
resetMaskSet(!0);
311
}
312
function getTestTemplate(pos, ndxIntlzr, tstPs) {
313
var testPos = getMaskSet().validPositions[pos];
314
if (void 0 === testPos) for (var testPositions = getTests(pos, ndxIntlzr, tstPs), lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(",") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx],
315
!(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr)))); ndx++) ;
316
return testPos;
317
}
318
function getTest(pos) {
319
return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos].match : getTests(pos)[0].match;
320
}
321
function positionCanMatchDefinition(pos, def) {
322
for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {
323
valid = !0;
324
break;
325
}
326
return valid;
327
}
328
function getTests(pos, ndxIntlzr, tstPs, cacheable) {
329
function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {
330
function handleMatch(match, loopNdx, quantifierRecurse) {
331
if (testPos > 1e4) throw "Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. " + getMaskSet().mask;
332
if (testPos === pos && void 0 === match.matches) return matches.push({
333
match: match,
334
locator: loopNdx.reverse()
335
}), !0;
336
if (void 0 !== match.matches) {
337
if (match.isGroup && quantifierRecurse !== match) {
338
if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;
339
} else if (match.isOptional) {
340
var optionalToken = match;
341
if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {
342
if (latestMatch = matches[matches.length - 1].match, isFirstMatch = 0 === $.inArray(latestMatch, optionalToken.matches),
343
!isFirstMatch) return !0;
344
insertStop = !0, testPos = pos;
345
}
346
} else if (match.isAlternator) {
347
var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;
348
if (-1 === altIndex || "string" == typeof altIndex) {
349
var currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];
350
"string" == typeof altIndex && (altIndexArr = altIndex.split(","));
351
for (var amndx = 0; amndx < alternateToken.matches.length; amndx++) {
352
if (matches = [], match = handleMatch(alternateToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match,
353
match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {
354
var ntndx = maskToken.matches.indexOf(match) + 1;
355
maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse),
356
match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) {
357
lmnt.alternation = loopNdx.length - 1;
358
})));
359
}
360
maltMatches = matches.slice(), testPos = currentPos, matches = [];
361
for (var i = 0; i < ndxInitializerClone.length; i++) ndxInitializer[i] = ndxInitializerClone[i];
362
for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {
363
var altMatch = maltMatches[ndx1];
364
altMatch.alternation = altMatch.alternation || loopNdxCnt;
365
for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {
366
var altMatch2 = malternateMatches[ndx2];
367
if (altMatch.match.mask === altMatch2.match.mask && ("string" != typeof altIndex || -1 !== $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr))) {
368
maltMatches.splice(ndx1, 1), ndx1--, altMatch2.locator[altMatch.alternation] = altMatch2.locator[altMatch.alternation] + "," + altMatch.locator[altMatch.alternation],
369
altMatch2.alternation = altMatch.alternation;
370
break;
371
}
372
}
373
}
374
malternateMatches = malternateMatches.concat(maltMatches);
375
}
376
"string" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {
377
if (isFinite(ndx)) {
378
var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(",");
379
lmnt.locator[alternation] = void 0, lmnt.alternation = void 0;
380
for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = -1 !== $.inArray(altLocArr[alndx], altIndexArr),
381
mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += ",",
382
lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]),
383
lmnt.alternation = alternation);
384
if (void 0 !== lmnt.locator[alternation]) return lmnt;
385
}
386
})), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0;
387
} else match = alternateToken.matches[altIndex] ? handleMatch(alternateToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse) : !1;
388
if (match) return !0;
389
} 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++) {
390
var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
391
if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
392
if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1,
393
isFirstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches)) {
394
if (qndx > qt.quantifier.min - 1) {
395
insertStop = !0, testPos = pos;
396
break;
397
}
398
return !0;
399
}
400
return !0;
401
}
402
} else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;
403
} else testPos++;
404
}
405
for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) {
406
var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);
407
if (match && testPos === pos) return match;
408
if (testPos > pos) break;
409
}
410
}
411
var latestMatch, isFirstMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr || [ 0 ], matches = [], insertStop = !1;
412
if (cacheable === !0 && getMaskSet().tests[pos]) return getMaskSet().tests[pos];
413
if (void 0 === ndxIntlzr) {
414
for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos]) && previousPos > -1 && (!getMaskSet().tests[previousPos] || void 0 === (test = getMaskSet().tests[previousPos][0])); ) previousPos--;
415
void 0 !== test && previousPos > -1 && (testPos = previousPos, ndxInitializer = test.locator.slice());
416
}
417
for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {
418
var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]);
419
if (match && testPos === pos || testPos > pos) break;
420
}
421
return (0 === matches.length || insertStop) && matches.push({
422
match: {
423
fn: null,
424
cardinality: 0,
425
optionality: !0,
426
casing: null,
427
def: ""
428
},
429
locator: []
430
}), getMaskSet().tests[pos] = $.extend(!0, [], matches), getMaskSet().tests[pos];
431
}
432
function getBufferTemplate() {
433
return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1)),
434
getMaskSet()._buffer;
435
}
436
function getBuffer() {
437
return void 0 === getMaskSet().buffer && (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)),
438
getMaskSet().buffer;
439
}
440
function refreshFromBuffer(start, end, buffer) {
441
var i;
442
if (buffer = buffer || getBuffer().slice(), start === !0) resetMaskSet(), start = 0,
443
end = buffer.length; else for (i = start; end > i; i++) delete getMaskSet().validPositions[i],
444
delete getMaskSet().tests[i];
445
for (i = start; end > i; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);
446
}
447
function casing(elem, test) {
448
switch (test.casing) {
449
case "upper":
450
elem = elem.toUpperCase();
451
break;
452
453
case "lower":
454
elem = elem.toLowerCase();
455
}
456
return elem;
457
}
458
function checkAlternationMatch(altArr1, altArr2) {
459
for (var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, alndx = 0; alndx < altArr1.length; alndx++) if (-1 !== $.inArray(altArr1[alndx], altArrC)) {
460
isMatch = !0;
461
break;
462
}
463
return isMatch;
464
}
465
function isValid(pos, c, strict, fromSetValid) {
466
function _isValid(position, c, strict, fromSetValid) {
467
var rslt = !1;
468
return $.each(getTests(position), function(ndx, tst) {
469
for (var test = tst.match, loopend = c ? 1 : 0, chrs = "", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));
470
if (c && (chrs += c), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts) : c !== test.def && c !== opts.skipOptionalPartCharacter || "" === test.def ? !1 : {
471
c: test.def,
472
pos: position
473
}, rslt !== !1) {
474
var elem = void 0 !== rslt.c ? rslt.c : c;
475
elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? test.def : elem;
476
var validatedPos = position, possibleModifiedBuffer = getBuffer();
477
if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]),
478
$.each(rslt.remove.sort(function(a, b) {
479
return b - a;
480
}), function(ndx, lmnt) {
481
stripValidPositions(lmnt, lmnt + 1, !0);
482
})), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]),
483
$.each(rslt.insert.sort(function(a, b) {
484
return a - b;
485
}), function(ndx, lmnt) {
486
isValid(lmnt.pos, lmnt.c, !0);
487
})), rslt.refreshFromBuffer) {
488
var refresh = rslt.refreshFromBuffer;
489
if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer),
490
void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(),
491
!1;
492
if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)),
493
!1;
494
} else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos,
495
refreshFromBuffer(position, validatedPos), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)),
496
!1;
497
return rslt !== !0 && void 0 === rslt.pos && void 0 === rslt.c ? !1 : (ndx > 0 && resetMaskSet(!0),
498
setValidPosition(validatedPos, $.extend({}, tst, {
499
input: casing(elem, test)
500
}), fromSetValid) || (rslt = !1), !1);
501
}
502
}), rslt;
503
}
504
function alternate(pos, c, strict, fromSetValid) {
505
for (var lastAlt, alternation, isValidRslt, altPos, i, validPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), lAlt = getLastValidPosition(); lAlt >= 0 && (altPos = getMaskSet().validPositions[lAlt],
506
!altPos || void 0 === altPos.alternation || (lastAlt = lAlt, alternation = getMaskSet().validPositions[lastAlt].alternation,
507
getTestTemplate(lastAlt).locator[altPos.alternation] === altPos.locator[altPos.alternation])); lAlt--) ;
508
if (void 0 !== alternation) {
509
lastAlt = parseInt(lastAlt);
510
for (var decisionPos in getMaskSet().validPositions) if (decisionPos = parseInt(decisionPos),
511
altPos = getMaskSet().validPositions[decisionPos], decisionPos >= lastAlt && void 0 !== altPos.alternation) {
512
var altNdxs = getMaskSet().validPositions[lastAlt].locator[alternation].toString().split(","), decisionTaker = altPos.locator[alternation] || altNdxs[0];
513
decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]);
514
for (var mndx = 0; mndx < altNdxs.length; mndx++) if (decisionTaker < altNdxs[mndx]) {
515
for (var possibilityPos, possibilities, dp = decisionPos; dp >= 0; dp--) if (possibilityPos = getMaskSet().validPositions[dp],
516
void 0 !== possibilityPos) {
517
possibilities = possibilityPos.locator[alternation], possibilityPos.locator[alternation] = parseInt(altNdxs[mndx]);
518
break;
519
}
520
if (decisionTaker !== possibilityPos.locator[alternation]) {
521
var validInputs = [], staticInputsBeforePos = 0;
522
for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i],
523
validPos && (null != validPos.match.fn ? validInputs.push(validPos.input) : pos > i && staticInputsBeforePos++),
524
delete getMaskSet().validPositions[i], delete getMaskSet().tests[i];
525
for (resetMaskSet(!0), opts.keepStatic = !opts.keepStatic, isValidRslt = !0; validInputs.length > 0; ) {
526
var input = validInputs.shift();
527
if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition() + 1, input, !1, !0))) break;
528
}
529
if (possibilityPos.alternation = alternation, possibilityPos.locator[alternation] = possibilities,
530
isValidRslt) {
531
var targetLvp = getLastValidPosition(pos) + 1, staticInputsBeforePosAlternate = 0;
532
for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i],
533
validPos && null == validPos.match.fn && pos > i && staticInputsBeforePosAlternate++;
534
pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid);
535
}
536
if (opts.keepStatic = !opts.keepStatic, isValidRslt) return isValidRslt;
537
resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);
538
}
539
}
540
break;
541
}
542
}
543
return !1;
544
}
545
function trackbackAlternations(originalPos, newPos) {
546
for (var vp = getMaskSet().validPositions[newPos], targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; newPos > ps; ps++) if (!isMask(ps)) {
547
var tests = getTests(ps), bestMatch = tests[0], equality = -1;
548
$.each(tests, function(ndx, tst) {
549
for (var i = 0; tll > i; i++) tst.locator[i] && checkAlternationMatch(tst.locator[i].toString().split(","), targetLocator[i].toString().split(",")) && i > equality && (equality = i,
550
bestMatch = tst);
551
}), setValidPosition(ps, $.extend({}, bestMatch, {
552
input: bestMatch.match.def
553
}), !0);
554
}
555
}
556
strict = strict === !0;
557
for (var buffer = getBuffer(), pndx = pos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;
558
for (pndx++; pos > pndx; pndx++) void 0 === getMaskSet().validPositions[pndx] && ((!isMask(pndx) || buffer[pndx] !== getPlaceholder(pndx)) && getTests(pndx).length > 1 || buffer[pndx] === opts.radixPoint || "0" === buffer[pndx] && $.inArray(opts.radixPoint, buffer) < pndx) && _isValid(pndx, buffer[pndx], !0);
559
var maskPos = pos, result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
560
if (maskPos < getMaskLength() && (getBuffer(), result = _isValid(maskPos, c, strict, fromSetValid),
561
(!strict || fromSetValid) && result === !1)) {
562
var currentPosValid = getMaskSet().validPositions[maskPos];
563
if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {
564
if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos)) for (var nPos = maskPos + 1, snPos = seekNext(maskPos); snPos >= nPos; nPos++) if (result = _isValid(nPos, c, strict, fromSetValid),
565
result !== !1) {
566
trackbackAlternations(maskPos, nPos), maskPos = nPos;
567
break;
568
}
569
} else result = {
570
caret: seekNext(maskPos)
571
};
572
}
573
if (result === !1 && opts.keepStatic && isComplete(buffer) && (result = alternate(pos, c, strict, fromSetValid)),
574
result === !0 && (result = {
575
pos: maskPos
576
}), $.isFunction(opts.postValidation) && result !== !1 && !strict) {
577
resetMaskSet(!0);
578
var postValidResult = opts.postValidation(getBuffer(), opts);
579
if (postValidResult) {
580
if (postValidResult.refreshFromBuffer) {
581
var refresh = postValidResult.refreshFromBuffer;
582
refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, postValidResult.buffer),
583
resetMaskSet(!0), result = postValidResult;
584
}
585
} else resetMaskSet(!0), getMaskSet().validPositions = $.extend(!0, {}, positionsClone),
586
result = !1;
587
}
588
return result;
589
}
590
function isMask(pos) {
591
var test = getTest(pos);
592
if (null != test.fn) return test.fn;
593
if (pos > -1 && !opts.keepStatic && void 0 === getMaskSet().validPositions[pos]) {
594
for (var tests = getTests(pos), staticAlternations = !0, i = 0; i < tests.length; i++) if ("" !== tests[i].match.def && (void 0 === tests[i].alternation || tests[i].locator[tests[i].alternation].length > 1)) {
595
staticAlternations = !1;
596
break;
597
}
598
return staticAlternations;
599
}
600
return !1;
601
}
602
function getMaskLength() {
603
var maskLength;
604
maxLength = void 0 !== el ? el.maxLength : void 0, -1 === maxLength && (maxLength = void 0);
605
var pos, lvp = getLastValidPosition(), testPos = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== testPos ? testPos.locator.slice() : void 0;
606
for (pos = lvp + 1; void 0 === testPos || null !== testPos.match.fn || null === testPos.match.fn && "" !== testPos.match.def; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),
607
ndxIntlzr = testPos.locator.slice();
608
var lastTest = getTest(pos - 1);
609
return maskLength = "" !== lastTest.def ? pos : pos - 1, void 0 === maxLength || maxLength > maskLength ? maskLength : maxLength;
610
}
611
function seekNext(pos, newBlock) {
612
var maskL = getMaskLength();
613
if (pos >= maskL) return maskL;
614
for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position) && (opts.nojumps !== !0 || opts.nojumpsThreshold > position)); ) ;
615
return position;
616
}
617
function seekPrevious(pos, newBlock) {
618
var position = pos;
619
if (0 >= position) return 0;
620
for (;--position > 0 && (newBlock === !0 && getTest(position).newBlockMarker !== !0 || newBlock !== !0 && !isMask(position)); ) ;
621
return position;
622
}
623
function getBufferElement(position) {
624
return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input;
625
}
626
function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {
627
if (event && $.isFunction(opts.onBeforeWrite)) {
628
var result = opts.onBeforeWrite.call(input, event, buffer, caretPos, opts);
629
if (result) {
630
if (result.refreshFromBuffer) {
631
var refresh = result.refreshFromBuffer;
632
refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer),
633
resetMaskSet(!0), buffer = getBuffer();
634
}
635
void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);
636
}
637
}
638
input.inputmask._valueSet(buffer.join("")), void 0 === caretPos || void 0 !== event && "blur" === event.type || caret(input, caretPos),
639
triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger("input"));
640
}
641
function getPlaceholder(pos, test) {
642
if (test = test || getTest(pos), void 0 !== test.placeholder) return test.placeholder;
643
if (null === test.fn) {
644
if (pos > -1 && !opts.keepStatic && void 0 === getMaskSet().validPositions[pos]) {
645
for (var prevTest, tests = getTests(pos), hasAlternations = !1, i = 0; i < tests.length; i++) {
646
if (prevTest && "" !== tests[i].match.def && tests[i].match.def !== prevTest.match.def && (void 0 === tests[i].alternation || tests[i].alternation === prevTest.alternation)) {
647
hasAlternations = !0;
648
break;
649
}
650
tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (prevTest = tests[i]);
651
}
652
if (hasAlternations) return opts.placeholder.charAt(pos % opts.placeholder.length);
653
}
654
return test.def;
655
}
656
return opts.placeholder.charAt(pos % opts.placeholder.length);
657
}
658
function checkVal(input, writeOut, strict, nptvl) {
659
function isTemplateMatch() {
660
var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join("").indexOf(charCodes);
661
if (-1 !== charCodeNdx && !isMask(initialNdx)) {
662
isMatch = !0;
663
for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (" " !== bufferTemplateArr[i]) {
664
isMatch = !1;
665
break;
666
}
667
}
668
return isMatch;
669
}
670
var inputValue = nptvl.slice(), charCodes = "", initialNdx = 0;
671
if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) {
672
var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g"));
673
matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length),
674
initialNdx = seekNext(initialNdx));
675
} else initialNdx = seekNext(initialNdx);
676
$.each(inputValue, function(ndx, charCode) {
677
var keypress = $.Event("keypress");
678
keypress.which = charCode.charCodeAt(0), charCodes += charCode;
679
var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);
680
if (!isTemplateMatch() || strict || opts.autoUnmask) {
681
var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;
682
keypressEvent.call(input, keypress, !0, !1, strict, pos), initialNdx = pos + 1,
683
charCodes = "";
684
} else keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);
685
}), writeOut && writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : void 0, $.Event("checkval"));
686
}
687
function unmaskedvalue(input) {
688
if (input && void 0 === input.inputmask) return input.value;
689
var umValue = [], vps = getMaskSet().validPositions;
690
for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
691
var unmaskedValue = 0 === umValue.length ? null : (isRTL ? umValue.reverse() : umValue).join("");
692
if (null !== unmaskedValue) {
693
var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
694
$.isFunction(opts.onUnMask) && (unmaskedValue = opts.onUnMask.call(input, bufferValue, unmaskedValue, opts) || unmaskedValue);
695
}
696
return unmaskedValue;
697
}
698
function caret(input, begin, end) {
699
function translatePosition(pos) {
700
if (isRTL && "number" == typeof pos && (!opts.greedy || "" !== opts.placeholder)) {
701
var bffrLght = getBuffer().join("").length;
702
pos = bffrLght - pos;
703
}
704
return pos;
705
}
706
var range;
707
if ("number" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart,
708
end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0),
709
(range.commonAncestorContainer.parentNode === input || range.commonAncestorContainer === input) && (begin = range.startOffset,
710
end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(),
711
begin = 0 - range.duplicate().moveStart("character", -1e5), end = begin + range.text.length),
712
{
713
begin: translatePosition(begin),
714
end: translatePosition(end)
715
};
716
begin = translatePosition(begin), end = translatePosition(end), end = "number" == typeof end ? end : begin;
717
var scrollCalc = (input.ownerDocument.defaultView || window).getComputedStyle(input, null).fontSize.replace("px", "") * end;
718
if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, androidchrome || opts.insertMode !== !1 || begin !== end || end++,
719
input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {
720
if (range = document.createRange(), void 0 === input.firstChild) {
721
var textNode = document.createTextNode("");
722
input.appendChild(textNode);
723
}
724
range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length),
725
range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length),
726
range.collapse(!0);
727
var sel = window.getSelection();
728
sel.removeAllRanges(), sel.addRange(range);
729
} else input.createTextRange && (range = input.createTextRange(), range.collapse(!0),
730
range.moveEnd("character", end), range.moveStart("character", begin), range.select());
731
}
732
function determineLastRequiredPosition(returnDefinition) {
733
var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0;
734
for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),
735
ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);
736
var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;
737
for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAlt.toString().split(",")) && "" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;
738
return returnDefinition ? {
739
l: bl,
740
def: positions[bl] ? positions[bl].match : void 0
741
} : bl;
742
}
743
function clearOptionalTail(buffer) {
744
for (var rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
745
return buffer.splice(rl, lmib + 1 - rl), buffer;
746
}
747
function isComplete(buffer) {
748
if ($.isFunction(opts.isComplete)) return opts.isComplete.call(el, buffer, opts);
749
if ("*" === opts.repeat) return void 0;
750
var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
751
if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
752
complete = !0;
753
for (var i = 0; aml >= i; i++) {
754
var test = getTestTemplate(i).match;
755
if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {
756
complete = !1;
757
break;
758
}
759
}
760
}
761
return complete;
762
}
763
function isSelection(begin, end) {
764
return isRTL ? begin - end > 1 || begin - end === 1 && opts.insertMode : end - begin > 1 || end - begin === 1 && opts.insertMode;
765
}
766
function wrapEvent(eventHandler) {
767
return function(e) {
768
var inComposition = !1;
769
if (void 0 === this.inputmask) {
770
var imOpts = $.data(this, "_inputmask_opts");
771
imOpts ? new Inputmask(imOpts).mask(this) : $(this).off(".inputmask");
772
} else {
773
if ("setvalue" === e.type || !(this.disabled || this.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) {
774
switch (e.type) {
775
case "input":
776
if (skipInputEvent === !0 || inComposition === !0) return skipInputEvent = !1, e.preventDefault();
777
break;
778
779
case "keydown":
780
skipKeyPressEvent = !1, inComposition = !1;
781
break;
782
783
case "keypress":
784
if (skipKeyPressEvent === !0) return e.preventDefault();
785
skipKeyPressEvent = !0;
786
break;
787
788
case "compositionstart":
789
inComposition = !0;
790
break;
791
792
case "compositionupdate":
793
skipInputEvent = !0;
794
break;
795
796
case "compositionend":
797
inComposition = !1;
798
}
799
return eventHandler.apply(this, arguments);
800
}
801
e.preventDefault();
802
}
803
};
804
}
805
function patchValueProperty(npt) {
806
function patchValhook(type) {
807
if ($.valHooks && void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0) {
808
var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
809
return elem.value;
810
}, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
811
return elem.value = value, elem;
812
};
813
$.valHooks[type] = {
814
get: function(elem) {
815
if (elem.inputmask) {
816
if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();
817
var result = valhookGet(elem), maskset = elem.inputmask.maskset, bufferTemplate = maskset._buffer;
818
return bufferTemplate = bufferTemplate ? bufferTemplate.join("") : "", result !== bufferTemplate ? result : "";
819
}
820
return valhookGet(elem);
821
},
822
set: function(elem, value) {
823
var result, $elem = $(elem);
824
return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue.inputmask"),
825
result;
826
},
827
inputmaskpatch: !0
828
};
829
}
830
}
831
function getter() {
832
return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : valueGet.call(this) !== getBufferTemplate().join("") ? valueGet.call(this) : "" : valueGet.call(this);
833
}
834
function setter(value) {
835
valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue.inputmask");
836
}
837
function installNativeValueSetFallback(npt) {
838
$(npt).on("mouseenter.inputmask", wrapEvent(function(event) {
839
var $input = $(this), input = this, value = input.inputmask._valueGet();
840
"" !== value && value !== getBuffer().join("") && $input.trigger("setvalue.inputmask");
841
}));
842
}
843
var valueGet, valueSet;
844
npt.inputmask.__valueGet || (Object.getOwnPropertyDescriptor && void 0 === npt.value ? (valueGet = function() {
845
return this.textContent;
846
}, valueSet = function(value) {
847
this.textContent = value;
848
}, Object.defineProperty(npt, "value", {
849
get: getter,
850
set: setter
851
})) : document.__lookupGetter__ && npt.__lookupGetter__("value") ? (valueGet = npt.__lookupGetter__("value"),
852
valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter),
853
npt.__defineSetter__("value", setter)) : (valueGet = function() {
854
return npt.value;
855
}, valueSet = function(value) {
856
npt.value = value;
857
}, patchValhook(npt.type), installNativeValueSetFallback(npt)), npt.inputmask.__valueGet = valueGet,
858
npt.inputmask._valueGet = function(overruleRTL) {
859
return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el);
860
}, npt.inputmask.__valueSet = valueSet, npt.inputmask._valueSet = function(value, overruleRTL) {
861
valueSet.call(this.el, overruleRTL !== !0 && isRTL && null !== value && void 0 !== value ? value.split("").reverse().join("") : value);
862
});
863
}
864
function handleRemove(input, k, pos, strict) {
865
function generalize() {
866
if (opts.keepStatic) {
867
resetMaskSet(!0);
868
var lastAlt, validInputs = [], positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
869
for (lastAlt = getLastValidPosition(); lastAlt >= 0; lastAlt--) {
870
var validPos = getMaskSet().validPositions[lastAlt];
871
if (validPos && (null != validPos.match.fn && validInputs.push(validPos.input),
872
delete getMaskSet().validPositions[lastAlt], void 0 !== validPos.alternation && validPos.locator[validPos.alternation] === getTestTemplate(lastAlt).locator[validPos.alternation])) break;
873
}
874
if (lastAlt > -1) for (;validInputs.length > 0; ) {
875
getMaskSet().p = seekNext(getLastValidPosition());
876
var keypress = $.Event("keypress");
877
keypress.which = validInputs.pop().charCodeAt(0), keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
878
} else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
879
}
880
}
881
if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE),
882
isRTL)) {
883
var pend = pos.end;
884
pos.end = pos.begin, pos.begin = pend;
885
}
886
k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin),
887
void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end) ? pos.end + 1 : seekNext(pos.end) + 1,
888
void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++),
889
stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize();
890
var lvp = getLastValidPosition(pos.begin);
891
lvp < pos.begin ? (-1 === lvp && resetMaskSet(), getMaskSet().p = seekNext(lvp)) : strict !== !0 && (getMaskSet().p = pos.begin);
892
}
893
function keydownEvent(e) {
894
var input = this, $input = $(input), k = e.keyCode, pos = caret(input);
895
k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && 127 === k || e.ctrlKey && 88 === k && !isInputEventSupported("cut") ? (e.preventDefault(),
896
88 === k && (undoValue = getBuffer().join("")), handleRemove(input, k, pos), writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")),
897
input.inputmask._valueGet() === getBufferTemplate().join("") ? $input.trigger("cleared") : isComplete(getBuffer()) === !0 && $input.trigger("complete"),
898
opts.showTooltip && $input.prop("title", getMaskSet().mask)) : k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN ? setTimeout(function() {
899
var caretPos = seekNext(getLastValidPosition());
900
opts.insertMode || caretPos !== getMaskLength() || e.shiftKey || caretPos--, caret(input, e.shiftKey ? pos.begin : caretPos, caretPos);
901
}, 0) : k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? caret(input, 0, e.shiftKey ? pos.begin : 0) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split("")),
902
$input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).fn && (pos.begin = seekNext(pos.begin)),
903
pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0),
904
pos.end = seekNext(pos.begin, !0), pos.end < getMaskLength() && pos.end--), pos.begin < getMaskLength() && (e.preventDefault(),
905
caret(input, pos.begin, pos.end))) : opts.insertMode !== !1 || e.shiftKey || (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {
906
var caretPos = caret(input);
907
caret(input, caretPos.begin);
908
}, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {
909
var caretPos = caret(input);
910
caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);
911
}, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskLength() ? pos.begin : pos.begin - 1)),
912
opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = -1 !== $.inArray(k, opts.ignorables);
913
}
914
function keypressEvent(e, checkval, writeOut, strict, ndx) {
915
var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;
916
if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && setTimeout(function() {
917
$input.trigger("change"), undoValue = getBuffer().join("");
918
}, 0), !0;
919
if (k) {
920
46 === k && e.shiftKey === !1 && "," === opts.radixPoint && (k = 44);
921
var forwardPosition, pos = checkval ? {
922
begin: ndx,
923
end: ndx
924
} : caret(input), c = String.fromCharCode(k), isSlctn = isSelection(pos.begin, pos.end);
925
isSlctn && (getMaskSet().undoPositions = $.extend(!0, {}, getMaskSet().validPositions),
926
handleRemove(input, Inputmask.keyCode.DELETE, pos, !0), pos.begin = getMaskSet().p,
927
opts.insertMode || (opts.insertMode = !opts.insertMode, setValidPosition(pos.begin, strict),
928
opts.insertMode = !opts.insertMode), isSlctn = !opts.multi), getMaskSet().writeOutBuffer = !0;
929
var p = isRTL && !isSlctn ? pos.end : pos.begin, valResult = isValid(p, c, strict);
930
if (valResult !== !1) {
931
if (valResult !== !0 && (p = void 0 !== valResult.pos ? valResult.pos : p, c = void 0 !== valResult.c ? valResult.c : c),
932
resetMaskSet(!0), void 0 !== valResult.caret) forwardPosition = valResult.caret; else {
933
var vps = getMaskSet().validPositions;
934
forwardPosition = !opts.keepStatic && (void 0 !== vps[p + 1] && getTests(p + 1, vps[p].locator.slice(), p).length > 1 || void 0 !== vps[p].alternation) ? p + 1 : seekNext(p);
935
}
936
getMaskSet().p = forwardPosition;
937
}
938
if (writeOut !== !1) {
939
var self = this;
940
if (setTimeout(function() {
941
opts.onKeyValidation.call(self, valResult, opts);
942
}, 0), getMaskSet().writeOutBuffer && valResult !== !1) {
943
var buffer = getBuffer();
944
writeBuffer(input, buffer, checkval ? void 0 : opts.numericInput ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0),
945
checkval !== !0 && setTimeout(function() {
946
isComplete(buffer) === !0 && $input.trigger("complete");
947
}, 0);
948
} else isSlctn && (getMaskSet().buffer = void 0, getMaskSet().validPositions = getMaskSet().undoPositions);
949
} else isSlctn && (getMaskSet().buffer = void 0, getMaskSet().validPositions = getMaskSet().undoPositions);
950
if (opts.showTooltip && $input.prop("title", getMaskSet().mask), checkval && $.isFunction(opts.onBeforeWrite)) {
951
var result = opts.onBeforeWrite.call(this, e, getBuffer(), forwardPosition, opts);
952
if (result && result.refreshFromBuffer) {
953
var refresh = result.refreshFromBuffer;
954
refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer),
955
resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret);
956
}
957
}
958
if (e.preventDefault(), checkval) return valResult;
959
}
960
}
961
function pasteEvent(e) {
962
var input = this, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);
963
if ("propertychange" === e.type && input.inputmask._valueGet().length <= getMaskLength()) return !0;
964
if ("paste" === e.type) {
965
var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
966
valueBeforeCaret === getBufferTemplate().slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""),
967
valueAfterCaret === getBufferTemplate().slice(caretPos.end).join("") && (valueAfterCaret = ""),
968
window.clipboardData && window.clipboardData.getData ? inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret : e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData && (inputValue = valueBeforeCaret + e.originalEvent.clipboardData.getData("text/plain") + valueAfterCaret);
969
}
970
var pasteValue = inputValue;
971
if ($.isFunction(opts.onBeforePaste)) {
972
if (pasteValue = opts.onBeforePaste.call(input, inputValue, opts), pasteValue === !1) return e.preventDefault(),
973
!1;
974
pasteValue || (pasteValue = inputValue);
975
}
976
return checkVal(input, !1, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split("")),
977
writeBuffer(input, getBuffer(), void 0, e, !0), $input.trigger("click"), isComplete(getBuffer()) === !0 && $input.trigger("complete"),
978
!1;
979
}
980
function inputFallBackEvent(e) {
981
var input = this;
982
checkVal(input, !0, !1, input.inputmask._valueGet().split("")), isComplete(getBuffer()) === !0 && $(input).trigger("complete"),
983
e.preventDefault();
984
}
985
function compositionStartEvent(e) {
986
var input = this;
987
undoValue = getBuffer().join(""), ("" === compositionData || 0 !== e.originalEvent.data.indexOf(compositionData)) && (compositionCaretPos = caret(input));
988
}
989
function compositionUpdateEvent(e) {
990
var input = this, caretPos = caret(input);
991
0 === e.originalEvent.data.indexOf(compositionData) && (resetMaskSet(), caretPos = compositionCaretPos);
992
var newData = e.originalEvent.data;
993
caret(input, caretPos.begin, caretPos.end);
994
for (var i = 0; i < newData.length; i++) {
995
var keypress = $.Event("keypress");
996
keypress.which = newData.charCodeAt(i), skipKeyPressEvent = !1, ignorable = !1,
997
keypressEvent.call(input, keypress);
998
}
999
setTimeout(function() {
1000
var forwardPosition = getMaskSet().p;
1001
writeBuffer(input, getBuffer(), opts.numericInput ? seekPrevious(forwardPosition) : forwardPosition);
1002
}, 0), compositionData = e.originalEvent.data;
1003
}
1004
function compositionEndEvent(e) {}
1005
function setValueEvent(e) {
1006
var input = this, value = input.inputmask._valueGet();
1007
checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(input, value, opts) || value : value).split("")),
1008
undoValue = getBuffer().join(""), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join("") && input.inputmask._valueSet("");
1009
}
1010
function focusEvent(e) {
1011
var input = this, nptValue = input.inputmask._valueGet();
1012
opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) ? input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition())),
1013
opts.positionCaretOnTab === !0 && setTimeout(function() {
1014
caret(input, seekNext(getLastValidPosition()));
1015
}, 0), undoValue = getBuffer().join("");
1016
}
1017
function mouseleaveEvent(e) {
1018
var input = this;
1019
if (mouseEnter = !1, opts.clearMaskOnLostFocus) {
1020
var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();
1021
document.activeElement !== input && nptValue !== input.getAttribute("placeholder") && "" !== nptValue && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer),
1022
writeBuffer(input, buffer));
1023
}
1024
}
1025
function clickEvent(e) {
1026
function doRadixFocus(clickPos) {
1027
if (opts.radixFocus && "" !== opts.radixPoint) {
1028
var vps = getMaskSet().validPositions;
1029
if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {
1030
if (clickPos < seekNext(-1)) return !0;
1031
var radixPos = $.inArray(opts.radixPoint, getBuffer());
1032
if (-1 !== radixPos) {
1033
for (var vp in vps) if (vp > radixPos && vps[vp].input !== getPlaceholder(vp)) return !1;
1034
return !0;
1035
}
1036
}
1037
}
1038
return !1;
1039
}
1040
var input = this;
1041
if (document.activeElement === input) {
1042
var selectedCaret = caret(input);
1043
if (selectedCaret.begin === selectedCaret.end) if (doRadixFocus(selectedCaret.begin)) caret(input, $.inArray(opts.radixPoint, getBuffer())); else {
1044
var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition), lastPosition = seekNext(lvclickPosition);
1045
lastPosition > clickPosition ? caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)) : caret(input, opts.numericInput ? 0 : lastPosition);
1046
}
1047
}
1048
}
1049
function dblclickEvent(e) {
1050
var input = this;
1051
setTimeout(function() {
1052
caret(input, 0, seekNext(getLastValidPosition()));
1053
}, 0);
1054
}
1055
function cutEvent(e) {
1056
skipInputEvent = !0;
1057
var input = this, $input = $(input), pos = caret(input);
1058
if (isRTL) {
1059
var clipboardData = window.clipboardData || e.originalEvent.clipboardData, clipData = clipboardData.getData("text").split("").reverse().join("");
1060
clipboardData.setData("text", clipData);
1061
}
1062
handleRemove(input, Inputmask.keyCode.DELETE, pos), writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")),
1063
input.inputmask._valueGet() === getBufferTemplate().join("") && $input.trigger("cleared"),
1064
opts.showTooltip && (input.title = getMaskSet().mask);
1065
}
1066
function blurEvent(e) {
1067
var $input = $(this), input = this;
1068
if (input.inputmask) {
1069
var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();
1070
undoValue !== buffer.join("") && setTimeout(function() {
1071
$input.trigger("change"), undoValue = buffer.join("");
1072
}, 0), "" !== nptValue && (opts.clearMaskOnLostFocus && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)),
1073
isComplete(buffer) === !1 && (setTimeout(function() {
1074
$input.trigger("incomplete");
1075
}, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())),
1076
writeBuffer(input, buffer, void 0, e));
1077
}
1078
}
1079
function mouseenterEvent(e) {
1080
var input = this;
1081
mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer());
1082
}
1083
function mask(elem) {
1084
el = elem, $el = $(el), opts.showTooltip && (el.title = getMaskSet().mask), ("rtl" === el.dir || opts.rightAlign) && (el.style.textAlign = "right"),
1085
("rtl" === el.dir || opts.numericInput) && (el.dir = "ltr", el.removeAttribute("dir"),
1086
el.inputmask.isRTL = !0, isRTL = !0), $el.off(".inputmask"), patchValueProperty(el),
1087
("INPUT" === el.tagName && isInputTypeSupported(el.getAttribute("type")) || el.isContentEditable) && ($(el.form).on("submit", function() {
1088
undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && -1 === getLastValidPosition() && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""),
1089
opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0),
1090
setTimeout(function() {
1091
writeBuffer(el, getBuffer());
1092
}, 0));
1093
}).on("reset", function() {
1094
setTimeout(function() {
1095
$el.trigger("setvalue.inputmask");
1096
}, 0);
1097
}), $el.on("mouseenter.inputmask", wrapEvent(mouseenterEvent)).on("blur.inputmask", wrapEvent(blurEvent)).on("focus.inputmask", wrapEvent(focusEvent)).on("mouseleave.inputmask", wrapEvent(mouseleaveEvent)).on("click.inputmask", wrapEvent(clickEvent)).on("dblclick.inputmask", wrapEvent(dblclickEvent)).on(PasteEventType + ".inputmask dragdrop.inputmask drop.inputmask", wrapEvent(pasteEvent)).on("cut.inputmask", wrapEvent(cutEvent)).on("complete.inputmask", wrapEvent(opts.oncomplete)).on("incomplete.inputmask", wrapEvent(opts.onincomplete)).on("cleared.inputmask", wrapEvent(opts.oncleared)).on("keydown.inputmask", wrapEvent(keydownEvent)).on("keypress.inputmask", wrapEvent(keypressEvent)),
1098
androidfirefox || $el.on("compositionstart.inputmask", wrapEvent(compositionStartEvent)).on("compositionupdate.inputmask", wrapEvent(compositionUpdateEvent)).on("compositionend.inputmask", wrapEvent(compositionEndEvent)),
1099
"paste" === PasteEventType && $el.on("input.inputmask", wrapEvent(inputFallBackEvent))),
1100
$el.on("setvalue.inputmask", wrapEvent(setValueEvent));
1101
var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(el, el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();
1102
checkVal(el, !0, !1, initialValue.split(""));
1103
var buffer = getBuffer().slice();
1104
undoValue = buffer.join("");
1105
var activeElement;
1106
try {
1107
activeElement = document.activeElement;
1108
} catch (e) {}
1109
isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), opts.clearMaskOnLostFocus && (buffer.join("") === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)),
1110
writeBuffer(el, buffer), activeElement === el && caret(el, seekNext(getLastValidPosition()));
1111
}
1112
var undoValue, compositionCaretPos, compositionData, el, $el, maxLength, valueBuffer, isRTL = !1, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !0;
1113
if (void 0 !== actionObj) switch (actionObj.action) {
1114
case "isComplete":
1115
return el = actionObj.el, $el = $(el), maskset = el.inputmask.maskset, opts = el.inputmask.opts,
1116
isComplete(actionObj.buffer);
1117
1118
case "unmaskedvalue":
1119
return el = actionObj.el, void 0 !== el && void 0 !== el.inputmask ? (maskset = el.inputmask.maskset,
1120
opts = el.inputmask.opts, isRTL = el.inputmask.isRTL, valueBuffer = isRTL ? el.inputmask._valueGet().split("").reverse().join("") : el.inputmask._valueGet()) : valueBuffer = actionObj.value,
1121
opts.numericInput && (isRTL = !0), valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call($el, valueBuffer, opts) || valueBuffer : valueBuffer).split(""),
1122
checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite.call(this, void 0, getBuffer(), 0, opts),
1123
unmaskedvalue(el);
1124
1125
case "mask":
1126
el = actionObj.el, maskset = el.inputmask.maskset, opts = el.inputmask.opts, isRTL = el.inputmask.isRTL,
1127
undoValue = getBuffer().join(""), mask(el);
1128
break;
1129
1130
case "format":
1131
return opts.numericInput && (isRTL = !0), valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call($el, actionObj.value, opts) || actionObj.value : actionObj.value).split(""),
1132
checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite.call(this, void 0, getBuffer(), 0, opts),
1133
actionObj.metadata ? {
1134
value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),
1135
metadata: $el.inputmask("getmetadata")
1136
} : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join("");
1137
1138
case "isValid":
1139
opts.numericInput && (isRTL = !0), valueBuffer = actionObj.value.split(""), checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer);
1140
for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
1141
return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === buffer.join("");
1142
1143
case "getemptymask":
1144
return el = actionObj.el, $el = $(el), maskset = el.inputmask.maskset, opts = el.inputmask.opts,
1145
getBufferTemplate();
1146
1147
case "remove":
1148
el = actionObj.el, $el = $(el), maskset = el.inputmask.maskset, opts = el.inputmask.opts,
1149
el.inputmask._valueSet(unmaskedvalue(el)), $el.off(".inputmask");
1150
var valueProperty;
1151
Object.getOwnPropertyDescriptor && (valueProperty = Object.getOwnPropertyDescriptor(el, "value")),
1152
valueProperty && valueProperty.get ? el.inputmask.__valueGet && Object.defineProperty(el, "value", {
1153
get: el.inputmask.__valueGet,
1154
set: el.inputmask.__valueSet
1155
}) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet),
1156
el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = void 0;
1157
break;
1158
1159
case "getmetadata":
1160
if (el = actionObj.el, $el = $(el), maskset = el.inputmask.maskset, opts = el.inputmask.opts,
1161
$.isArray(maskset.metadata)) {
1162
for (var alternation, lvp = getLastValidPosition(), firstAlt = lvp; firstAlt >= 0; firstAlt--) if (getMaskSet().validPositions[firstAlt] && void 0 !== getMaskSet().validPositions[firstAlt].alternation) {
1163
alternation = getMaskSet().validPositions[firstAlt].alternation;
1164
break;
1165
}
1166
return void 0 !== alternation ? maskset.metadata[getMaskSet().validPositions[lvp].locator[alternation]] : maskset.metadata[0];
1167
}
1168
return maskset.metadata;
1169
}
1170
}
1171
Inputmask.prototype = {
1172
defaults: {
1173
placeholder: "_",
1174
optionalmarker: {
1175
start: "[",
1176
end: "]"
1177
},
1178
quantifiermarker: {
1179
start: "{",
1180
end: "}"
1181
},
1182
groupmarker: {
1183
start: "(",
1184
end: ")"
1185
},
1186
alternatormarker: "|",
1187
escapeChar: "\\",
1188
mask: null,
1189
oncomplete: $.noop,
1190
onincomplete: $.noop,
1191
oncleared: $.noop,
1192
repeat: 0,
1193
greedy: !0,
1194
autoUnmask: !1,
1195
removeMaskOnSubmit: !1,
1196
clearMaskOnLostFocus: !0,
1197
insertMode: !0,
1198
clearIncomplete: !1,
1199
aliases: {},
1200
alias: null,
1201
onKeyDown: $.noop,
1202
onBeforeMask: null,
1203
onBeforePaste: function(pastedValue, opts) {
1204
return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;
1205
},
1206
onBeforeWrite: null,
1207
onUnMask: null,
1208
showMaskOnFocus: !0,
1209
showMaskOnHover: !0,
1210
onKeyValidation: $.noop,
1211
skipOptionalPartCharacter: " ",
1212
showTooltip: !1,
1213
numericInput: !1,
1214
rightAlign: !1,
1215
undoOnEscape: !0,
1216
radixPoint: "",
1217
groupSeparator: "",
1218
radixFocus: !1,
1219
nojumps: !1,
1220
nojumpsThreshold: 0,
1221
keepStatic: null,
1222
positionCaretOnTab: !1,
1223
tabThrough: !1,
1224
supportsInputType: [],
1225
definitions: {
1226
"9": {
1227
validator: "[0-9]",
1228
cardinality: 1,
1229
definitionSymbol: "*"
1230
},
1231
a: {
1232
validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
1233
cardinality: 1,
1234
definitionSymbol: "*"
1235
},
1236
"*": {
1237
validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
1238
cardinality: 1
1239
}
1240
},
1241
ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123 ],
1242
isComplete: null,
1243
canClearPosition: $.noop,
1244
postValidation: null
1245
},
1246
masksCache: {},
1247
mask: function(el) {
1248
var scopedOpts = $.extend(!0, {}, this.opts);
1249
importAttributeOptions(el, scopedOpts, $.extend(!0, {}, this.userOptions));
1250
var maskset = generateMaskSet(scopedOpts, this.noMasksCache);
1251
return void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(),
1252
el.inputmask = new Inputmask(), el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = this.noMasksCache,
1253
el.inputmask.userOptions = $.extend(!0, {}, this.userOptions), el.inputmask.el = el,
1254
el.inputmask.maskset = maskset, el.inputmask.isRTL = !1, $.data(el, "_inputmask_opts", scopedOpts),
1255
maskScope({
1256
action: "mask",
1257
el: el
1258
})), el.inputmask || this;
1259
},
1260
option: function(options) {
1261
return "string" == typeof options ? this.opts[options] : "object" == typeof options ? ($.extend(this.opts, options),
1262
$.extend(this.userOptions, options), this.el && (void 0 !== options.mask || void 0 !== options.alias ? this.mask(this.el) : ($.data(this.el, "_inputmask_opts", this.opts),
1263
maskScope({
1264
action: "mask",
1265
el: this.el
1266
}))), this) : void 0;
1267
},
1268
unmaskedvalue: function(value) {
1269
return maskScope({
1270
action: "unmaskedvalue",
1271
el: this.el,
1272
value: value
1273
}, this.el && this.el.inputmask ? this.el.inputmask.maskset : generateMaskSet(this.opts, this.noMasksCache), this.opts);
1274
},
1275
remove: function() {
1276
return this.el ? (maskScope({
1277
action: "remove",
1278
el: this.el
1279
}), this.el.inputmask = void 0, this.el) : void 0;
1280
},
1281
getemptymask: function() {
1282
return this.el ? maskScope({
1283
action: "getemptymask",
1284
el: this.el
1285
}) : void 0;
1286
},
1287
hasMaskedValue: function() {
1288
return !this.opts.autoUnmask;
1289
},
1290
isComplete: function() {
1291
return this.el ? maskScope({
1292
action: "isComplete",
1293
buffer: this.el.inputmask._valueGet().split(""),
1294
el: this.el
1295
}) : void 0;
1296
},
1297
getmetadata: function() {
1298
return this.el ? maskScope({
1299
action: "getmetadata",
1300
el: this.el
1301
}) : void 0;
1302
},
1303
isValid: function(value) {
1304
return maskScope({
1305
action: "isValid",
1306
value: value
1307
}, generateMaskSet(this.opts, this.noMasksCache), this.opts);
1308
},
1309
format: function(value, metadata) {
1310
return maskScope({
1311
action: "format",
1312
value: value,
1313
metadata: metadata
1314
}, generateMaskSet(this.opts, this.noMasksCache), this.opts);
1315
}
1316
}, Inputmask.extendDefaults = function(options) {
1317
$.extend(Inputmask.prototype.defaults, options);
1318
}, Inputmask.extendDefinitions = function(definition) {
1319
$.extend(Inputmask.prototype.defaults.definitions, definition);
1320
}, Inputmask.extendAliases = function(alias) {
1321
$.extend(Inputmask.prototype.defaults.aliases, alias);
1322
}, Inputmask.format = function(value, options, metadata) {
1323
return Inputmask(options).format(value, metadata);
1324
}, Inputmask.unmask = function(value, options) {
1325
return Inputmask(options).unmaskedvalue(value);
1326
}, Inputmask.isValid = function(value, options) {
1327
return Inputmask(options).isValid(value);
1328
}, Inputmask.escapeRegex = function(str) {
1329
var specials = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ];
1330
return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1");
1331
}, Inputmask.keyCode = {
1332
ALT: 18,
1333
BACKSPACE: 8,
1334
CAPS_LOCK: 20,
1335
COMMA: 188,
1336
COMMAND: 91,
1337
COMMAND_LEFT: 91,
1338
COMMAND_RIGHT: 93,
1339
CONTROL: 17,
1340
DELETE: 46,
1341
DOWN: 40,
1342
END: 35,
1343
ENTER: 13,
1344
ESCAPE: 27,
1345
HOME: 36,
1346
INSERT: 45,
1347
LEFT: 37,
1348
MENU: 93,
1349
NUMPAD_ADD: 107,
1350
NUMPAD_DECIMAL: 110,
1351
NUMPAD_DIVIDE: 111,
1352
NUMPAD_ENTER: 108,
1353
NUMPAD_MULTIPLY: 106,
1354
NUMPAD_SUBTRACT: 109,
1355
PAGE_DOWN: 34,
1356
PAGE_UP: 33,
1357
PERIOD: 190,
1358
RIGHT: 39,
1359
SHIFT: 16,
1360
SPACE: 32,
1361
TAB: 9,
1362
UP: 38,
1363
WINDOWS: 91
1364
};
1365
var ua = navigator.userAgent, iphone = null !== ua.match(new RegExp("iphone", "i")), androidchrome = null !== ua.match(new RegExp("android.*chrome.*", "i")), androidfirefox = null !== ua.match(new RegExp("android.*firefox.*", "i")), PasteEventType = isInputEventSupported("paste") ? "paste" : isInputEventSupported("input") ? "input" : "propertychange";
1366
return window.Inputmask = Inputmask, Inputmask;
1367
}(jQuery), function($, Inputmask) {
1368
return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {
1369
var nptmask, input;
1370
if (options = options || {}, "string" == typeof fn) switch (fn) {
1371
case "mask":
1372
return nptmask = new Inputmask(options), this.each(function() {
1373
nptmask.mask(this);
1374
});
1375
1376
case "unmaskedvalue":
1377
return input = this.jquery && this.length > 0 ? this[0] : this, input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();
1378
1379
case "remove":
1380
return this.each(function() {
1381
this.inputmask && this.inputmask.remove();
1382
});
1383
1384
case "getemptymask":
1385
return input = this.jquery && this.length > 0 ? this[0] : this, input.inputmask ? input.inputmask.getemptymask() : "";
1386
1387
case "hasMaskedValue":
1388
return input = this.jquery && this.length > 0 ? this[0] : this, input.inputmask ? input.inputmask.hasMaskedValue() : !1;
1389
1390
case "isComplete":
1391
return input = this.jquery && this.length > 0 ? this[0] : this, input.inputmask ? input.inputmask.isComplete() : !0;
1392
1393
case "getmetadata":
1394
return input = this.jquery && this.length > 0 ? this[0] : this, input.inputmask ? input.inputmask.getmetadata() : void 0;
1395
1396
case "setvalue":
1397
input = this.jquery && this.length > 0 ? this[0] : this, $(input).val(options),
1398
void 0 !== input.inputmask && $(input).triggerHandler("setvalue.inputmask");
1399
break;
1400
1401
case "option":
1402
if ("string" != typeof options) return this.each(function() {
1403
return void 0 !== this.inputmask ? this.inputmask.option(options) : void 0;
1404
});
1405
if (input = this.jquery && this.length > 0 ? this[0] : this, void 0 !== input.inputmask) return input.inputmask.option(options);
1406
break;
1407
1408
default:
1409
return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {
1410
nptmask.mask(this);
1411
});
1412
} else {
1413
if ("object" == typeof fn) return nptmask = new Inputmask(fn), this.each(void 0 === fn.mask && void 0 === fn.alias ? function() {
1414
return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this);
1415
} : function() {
1416
nptmask.mask(this);
1417
});
1418
if (void 0 === fn) return this.each(function() {
1419
nptmask = new Inputmask(options), nptmask.mask(this);
1420
});
1421
}
1422
}), $.fn.inputmask;
1423
}(jQuery, Inputmask), function($, Inputmask) {
1424
return Inputmask.extendDefinitions({
1425
h: {
1426
validator: "[01][0-9]|2[0-3]",
1427
cardinality: 2,
1428
prevalidator: [ {
1429
validator: "[0-2]",
1430
cardinality: 1
1431
} ]
1432
},
1433
s: {
1434
validator: "[0-5][0-9]",
1435
cardinality: 2,
1436
prevalidator: [ {
1437
validator: "[0-5]",
1438
cardinality: 1
1439
} ]
1440
},
1441
d: {
1442
validator: "0[1-9]|[12][0-9]|3[01]",
1443
cardinality: 2,
1444
prevalidator: [ {
1445
validator: "[0-3]",
1446
cardinality: 1
1447
} ]
1448
},
1449
m: {
1450
validator: "0[1-9]|1[012]",
1451
cardinality: 2,
1452
prevalidator: [ {
1453
validator: "[01]",
1454
cardinality: 1
1455
} ]
1456
},
1457
y: {
1458
validator: "(19|20)\\d{2}",
1459
cardinality: 4,
1460
prevalidator: [ {
1461
validator: "[12]",
1462
cardinality: 1
1463
}, {
1464
validator: "(19|20)",
1465
cardinality: 2
1466
}, {
1467
validator: "(19|20)\\d",
1468
cardinality: 3
1469
} ]
1470
}
1471
}), Inputmask.extendAliases({
1472
"dd/mm/yyyy": {
1473
mask: "1/2/y",
1474
placeholder: "dd/mm/yyyy",
1475
regex: {
1476
val1pre: new RegExp("[0-3]"),
1477
val1: new RegExp("0[1-9]|[12][0-9]|3[01]"),
1478
val2pre: function(separator) {
1479
var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1480
return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
1481
},
1482
val2: function(separator) {
1483
var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1484
return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))");
1485
}
1486
},
1487
leapday: "29/02/",
1488
separator: "/",
1489
yearrange: {
1490
minyear: 1900,
1491
maxyear: 2099
1492
},
1493
isInYearRange: function(chrs, minyear, maxyear) {
1494
if (isNaN(chrs)) return !1;
1495
var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
1496
return (isNaN(enteredyear) ? !1 : enteredyear >= minyear && maxyear >= enteredyear) || (isNaN(enteredyear2) ? !1 : enteredyear2 >= minyear && maxyear >= enteredyear2);
1497
},
1498
determinebaseyear: function(minyear, maxyear, hint) {
1499
var currentyear = new Date().getFullYear();
1500
if (minyear > currentyear) return minyear;
1501
if (currentyear > maxyear) {
1502
for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxYearPrefix + hint > maxyear; ) maxYearPrefix--;
1503
var maxxYear = maxYearPrefix + maxYearPostfix;
1504
return minyear > maxxYear ? minyear : maxxYear;
1505
}
1506
return currentyear;
1507
},
1508
onKeyDown: function(e, buffer, caretPos, opts) {
1509
var $input = $(this);
1510
if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1511
var today = new Date();
1512
$input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()),
1513
$input.trigger("setvalue.inputmask");
1514
}
1515
},
1516
getFrontValue: function(mask, buffer, opts) {
1517
for (var start = 0, length = 0, i = 0; i < mask.length && "2" !== mask.charAt(i); i++) {
1518
var definition = opts.definitions[mask.charAt(i)];
1519
definition ? (start += length, length = definition.cardinality) : length++;
1520
}
1521
return buffer.join("").substr(start, length);
1522
},
1523
definitions: {
1524
"1": {
1525
validator: function(chrs, maskset, pos, strict, opts) {
1526
var isValid = opts.regex.val1.test(chrs);
1527
return strict || isValid || chrs.charAt(1) !== opts.separator && -1 === "-./".indexOf(chrs.charAt(1)) || !(isValid = opts.regex.val1.test("0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0",
1528
{
1529
refreshFromBuffer: {
1530
start: pos - 1,
1531
end: pos
1532
},
1533
pos: pos,
1534
c: chrs.charAt(0)
1535
});
1536
},
1537
cardinality: 2,
1538
prevalidator: [ {
1539
validator: function(chrs, maskset, pos, strict, opts) {
1540
var pchrs = chrs;
1541
isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);
1542
var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);
1543
if (!strict && !isValid) {
1544
if (isValid = opts.regex.val1.test(chrs + "0")) return maskset.buffer[pos] = chrs,
1545
maskset.buffer[++pos] = "0", {
1546
pos: pos,
1547
c: "0"
1548
};
1549
if (isValid = opts.regex.val1.test("0" + chrs)) return maskset.buffer[pos] = "0",
1550
pos++, {
1551
pos: pos
1552
};
1553
}
1554
return isValid;
1555
},
1556
cardinality: 1
1557
} ]
1558
},
1559
"2": {
1560
validator: function(chrs, maskset, pos, strict, opts) {
1561
var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
1562
-1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
1563
var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
1564
if (!strict && !isValid && (chrs.charAt(1) === opts.separator || -1 !== "-./".indexOf(chrs.charAt(1))) && (isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0",
1565
{
1566
refreshFromBuffer: {
1567
start: pos - 1,
1568
end: pos
1569
},
1570
pos: pos,
1571
c: chrs.charAt(0)
1572
};
1573
if (opts.mask.indexOf("2") === opts.mask.length - 1 && isValid) {
1574
var dayMonthValue = maskset.buffer.join("").substr(4, 4) + chrs;
1575
if (dayMonthValue !== opts.leapday) return !0;
1576
var year = parseInt(maskset.buffer.join("").substr(0, 4), 10);
1577
return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
1578
}
1579
return isValid;
1580
},
1581
cardinality: 2,
1582
prevalidator: [ {
1583
validator: function(chrs, maskset, pos, strict, opts) {
1584
isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);
1585
var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
1586
-1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
1587
var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
1588
return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
1589
pos++, {
1590
pos: pos
1591
});
1592
},
1593
cardinality: 1
1594
} ]
1595
},
1596
y: {
1597
validator: function(chrs, maskset, pos, strict, opts) {
1598
if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
1599
var dayMonthValue = maskset.buffer.join("").substr(0, 6);
1600
if (dayMonthValue !== opts.leapday) return !0;
1601
var year = parseInt(chrs, 10);
1602
return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
1603
}
1604
return !1;
1605
},
1606
cardinality: 4,
1607
prevalidator: [ {
1608
validator: function(chrs, maskset, pos, strict, opts) {
1609
var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
1610
if (!strict && !isValid) {
1611
var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
1612
if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
1613
{
1614
pos: pos
1615
};
1616
if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2),
1617
isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
1618
maskset.buffer[pos++] = yearPrefix.charAt(1), {
1619
pos: pos
1620
};
1621
}
1622
return isValid;
1623
},
1624
cardinality: 1
1625
}, {
1626
validator: function(chrs, maskset, pos, strict, opts) {
1627
var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
1628
if (!strict && !isValid) {
1629
var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
1630
if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1),
1631
{
1632
pos: pos
1633
};
1634
if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2),
1635
opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
1636
var dayMonthValue = maskset.buffer.join("").substr(0, 6);
1637
if (dayMonthValue !== opts.leapday) isValid = !0; else {
1638
var year = parseInt(chrs, 10);
1639
isValid = year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
1640
}
1641
} else isValid = !1;
1642
if (isValid) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), maskset.buffer[pos++] = yearPrefix.charAt(1),
1643
maskset.buffer[pos++] = chrs.charAt(0), {
1644
refreshFromBuffer: {
1645
start: pos - 3,
1646
end: pos
1647
},
1648
pos: pos
1649
};
1650
}
1651
return isValid;
1652
},
1653
cardinality: 2
1654
}, {
1655
validator: function(chrs, maskset, pos, strict, opts) {
1656
return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
1657
},
1658
cardinality: 3
1659
} ]
1660
}
1661
},
1662
insertMode: !1,
1663
autoUnmask: !1
1664
},
1665
"mm/dd/yyyy": {
1666
placeholder: "mm/dd/yyyy",
1667
alias: "dd/mm/yyyy",
1668
regex: {
1669
val2pre: function(separator) {
1670
var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1671
return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
1672
},
1673
val2: function(separator) {
1674
var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1675
return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
1676
},
1677
val1pre: new RegExp("[01]"),
1678
val1: new RegExp("0[1-9]|1[012]")
1679
},
1680
leapday: "02/29/",
1681
onKeyDown: function(e, buffer, caretPos, opts) {
1682
var $input = $(this);
1683
if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1684
var today = new Date();
1685
$input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
1686
$input.trigger("setvalue.inputmask");
1687
}
1688
}
1689
},
1690
"yyyy/mm/dd": {
1691
mask: "y/1/2",
1692
placeholder: "yyyy/mm/dd",
1693
alias: "mm/dd/yyyy",
1694
leapday: "/02/29",
1695
onKeyDown: function(e, buffer, caretPos, opts) {
1696
var $input = $(this);
1697
if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1698
var today = new Date();
1699
$input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()),
1700
$input.trigger("setvalue.inputmask");
1701
}
1702
}
1703
},
1704
"dd.mm.yyyy": {
1705
mask: "1.2.y",
1706
placeholder: "dd.mm.yyyy",
1707
leapday: "29.02.",
1708
separator: ".",
1709
alias: "dd/mm/yyyy"
1710
},
1711
"dd-mm-yyyy": {
1712
mask: "1-2-y",
1713
placeholder: "dd-mm-yyyy",
1714
leapday: "29-02-",
1715
separator: "-",
1716
alias: "dd/mm/yyyy"
1717
},
1718
"mm.dd.yyyy": {
1719
mask: "1.2.y",
1720
placeholder: "mm.dd.yyyy",
1721
leapday: "02.29.",
1722
separator: ".",
1723
alias: "mm/dd/yyyy"
1724
},
1725
"mm-dd-yyyy": {
1726
mask: "1-2-y",
1727
placeholder: "mm-dd-yyyy",
1728
leapday: "02-29-",
1729
separator: "-",
1730
alias: "mm/dd/yyyy"
1731
},
1732
"yyyy.mm.dd": {
1733
mask: "y.1.2",
1734
placeholder: "yyyy.mm.dd",
1735
leapday: ".02.29",
1736
separator: ".",
1737
alias: "yyyy/mm/dd"
1738
},
1739
"yyyy-mm-dd": {
1740
mask: "y-1-2",
1741
placeholder: "yyyy-mm-dd",
1742
leapday: "-02-29",
1743
separator: "-",
1744
alias: "yyyy/mm/dd"
1745
},
1746
datetime: {
1747
mask: "1/2/y h:s",
1748
placeholder: "dd/mm/yyyy hh:mm",
1749
alias: "dd/mm/yyyy",
1750
regex: {
1751
hrspre: new RegExp("[012]"),
1752
hrs24: new RegExp("2[0-4]|1[3-9]"),
1753
hrs: new RegExp("[01][0-9]|2[0-4]"),
1754
ampm: new RegExp("^[a|p|A|P][m|M]"),
1755
mspre: new RegExp("[0-5]"),
1756
ms: new RegExp("[0-5][0-9]")
1757
},
1758
timeseparator: ":",
1759
hourFormat: "24",
1760
definitions: {
1761
h: {
1762
validator: function(chrs, maskset, pos, strict, opts) {
1763
if ("24" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0",
1764
maskset.buffer[pos] = "0", {
1765
refreshFromBuffer: {
1766
start: pos - 1,
1767
end: pos
1768
},
1769
c: "0"
1770
};
1771
var isValid = opts.regex.hrs.test(chrs);
1772
if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || -1 !== "-.:".indexOf(chrs.charAt(1))) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0",
1773
maskset.buffer[pos] = chrs.charAt(0), pos++, {
1774
refreshFromBuffer: {
1775
start: pos - 2,
1776
end: pos
1777
},
1778
pos: pos,
1779
c: opts.timeseparator
1780
};
1781
if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {
1782
var tmp = parseInt(chrs, 10);
1783
return 24 === tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p",
1784
maskset.buffer[pos + 6] = "m"), tmp -= 12, 10 > tmp ? (maskset.buffer[pos] = tmp.toString(),
1785
maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1),
1786
maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {
1787
refreshFromBuffer: {
1788
start: pos - 1,
1789
end: pos + 6
1790
},
1791
c: maskset.buffer[pos]
1792
};
1793
}
1794
return isValid;
1795
},
1796
cardinality: 2,
1797
prevalidator: [ {
1798
validator: function(chrs, maskset, pos, strict, opts) {
1799
var isValid = opts.regex.hrspre.test(chrs);
1800
return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
1801
pos++, {
1802
pos: pos
1803
});
1804
},
1805
cardinality: 1
1806
} ]
1807
},
1808
s: {
1809
validator: "[0-5][0-9]",
1810
cardinality: 2,
1811
prevalidator: [ {
1812
validator: function(chrs, maskset, pos, strict, opts) {
1813
var isValid = opts.regex.mspre.test(chrs);
1814
return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
1815
pos++, {
1816
pos: pos
1817
});
1818
},
1819
cardinality: 1
1820
} ]
1821
},
1822
t: {
1823
validator: function(chrs, maskset, pos, strict, opts) {
1824
return opts.regex.ampm.test(chrs + "m");
1825
},
1826
casing: "lower",
1827
cardinality: 1
1828
}
1829
},
1830
insertMode: !1,
1831
autoUnmask: !1
1832
},
1833
datetime12: {
1834
mask: "1/2/y h:s t\\m",
1835
placeholder: "dd/mm/yyyy hh:mm xm",
1836
alias: "datetime",
1837
hourFormat: "12"
1838
},
1839
"mm/dd/yyyy hh:mm xm": {
1840
mask: "1/2/y h:s t\\m",
1841
placeholder: "mm/dd/yyyy hh:mm xm",
1842
alias: "datetime12",
1843
regex: {
1844
val2pre: function(separator) {
1845
var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1846
return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
1847
},
1848
val2: function(separator) {
1849
var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1850
return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
1851
},
1852
val1pre: new RegExp("[01]"),
1853
val1: new RegExp("0[1-9]|1[012]")
1854
},
1855
leapday: "02/29/",
1856
onKeyDown: function(e, buffer, caretPos, opts) {
1857
var $input = $(this);
1858
if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1859
var today = new Date();
1860
$input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
1861
$input.trigger("setvalue.inputmask");
1862
}
1863
}
1864
},
1865
"hh:mm t": {
1866
mask: "h:s t\\m",
1867
placeholder: "hh:mm xm",
1868
alias: "datetime",
1869
hourFormat: "12"
1870
},
1871
"h:s t": {
1872
mask: "h:s t\\m",
1873
placeholder: "hh:mm xm",
1874
alias: "datetime",
1875
hourFormat: "12"
1876
},
1877
"hh:mm:ss": {
1878
mask: "h:s:s",
1879
placeholder: "hh:mm:ss",
1880
alias: "datetime",
1881
autoUnmask: !1
1882
},
1883
"hh:mm": {
1884
mask: "h:s",
1885
placeholder: "hh:mm",
1886
alias: "datetime",
1887
autoUnmask: !1
1888
},
1889
date: {
1890
alias: "dd/mm/yyyy"
1891
},
1892
"mm/yyyy": {
1893
mask: "1/y",
1894
placeholder: "mm/yyyy",
1895
leapday: "donotuse",
1896
separator: "/",
1897
alias: "mm/dd/yyyy"
1898
},
1899
shamsi: {
1900
regex: {
1901
val2pre: function(separator) {
1902
var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1903
return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])");
1904
},
1905
val2: function(separator) {
1906
var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1907
return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)");
1908
},
1909
val1pre: new RegExp("[01]"),
1910
val1: new RegExp("0[1-9]|1[012]")
1911
},
1912
yearrange: {
1913
minyear: 1300,
1914
maxyear: 1499
1915
},
1916
mask: "y/1/2",
1917
leapday: "/12/30",
1918
placeholder: "yyyy/mm/dd",
1919
alias: "mm/dd/yyyy",
1920
clearIncomplete: !0
1921
}
1922
}), Inputmask;
1923
}(jQuery, Inputmask), function($, Inputmask) {
1924
return Inputmask.extendDefinitions({
1925
A: {
1926
validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
1927
cardinality: 1,
1928
casing: "upper"
1929
},
1930
"&": {
1931
validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
1932
cardinality: 1,
1933
casing: "upper"
1934
},
1935
"#": {
1936
validator: "[0-9A-Fa-f]",
1937
cardinality: 1,
1938
casing: "upper"
1939
}
1940
}), Inputmask.extendAliases({
1941
url: {
1942
mask: "ir",
1943
placeholder: "",
1944
separator: "",
1945
defaultPrefix: "http://",
1946
regex: {
1947
urlpre1: new RegExp("[fh]"),
1948
urlpre2: new RegExp("(ft|ht)"),
1949
urlpre3: new RegExp("(ftp|htt)"),
1950
urlpre4: new RegExp("(ftp:|http|ftps)"),
1951
urlpre5: new RegExp("(ftp:/|ftps:|http:|https)"),
1952
urlpre6: new RegExp("(ftp://|ftps:/|http:/|https:)"),
1953
urlpre7: new RegExp("(ftp://|ftps://|http://|https:/)"),
1954
urlpre8: new RegExp("(ftp://|ftps://|http://|https://)")
1955
},
1956
definitions: {
1957
i: {
1958
validator: function(chrs, maskset, pos, strict, opts) {
1959
return !0;
1960
},
1961
cardinality: 8,
1962
prevalidator: function() {
1963
for (var result = [], prefixLimit = 8, i = 0; prefixLimit > i; i++) result[i] = function() {
1964
var j = i;
1965
return {
1966
validator: function(chrs, maskset, pos, strict, opts) {
1967
if (opts.regex["urlpre" + (j + 1)]) {
1968
var k, tmp = chrs;
1969
j + 1 - chrs.length > 0 && (tmp = maskset.buffer.join("").substring(0, j + 1 - chrs.length) + "" + tmp);
1970
var isValid = opts.regex["urlpre" + (j + 1)].test(tmp);
1971
if (!strict && !isValid) {
1972
for (pos -= j, k = 0; k < opts.defaultPrefix.length; k++) maskset.buffer[pos] = opts.defaultPrefix[k],
1973
pos++;
1974
for (k = 0; k < tmp.length - 1; k++) maskset.buffer[pos] = tmp[k], pos++;
1975
return {
1976
pos: pos
1977
};
1978
}
1979
return isValid;
1980
}
1981
return !1;
1982
},
1983
cardinality: j
1984
};
1985
}();
1986
return result;
1987
}()
1988
},
1989
r: {
1990
validator: ".",
1991
cardinality: 50
1992
}
1993
},
1994
insertMode: !1,
1995
autoUnmask: !1
1996
},
1997
ip: {
1998
mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]",
1999
definitions: {
2000
i: {
2001
validator: function(chrs, maskset, pos, strict, opts) {
2002
return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs,
2003
chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs,
2004
new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);
2005
},
2006
cardinality: 1
2007
}
2008
}
2009
},
2010
email: {
2011
mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,64}]@*{1,64}[.*{2,64}][.*{2,6}][.*{1,2}]",
2012
greedy: !1,
2013
onBeforePaste: function(pastedValue, opts) {
2014
return pastedValue = pastedValue.toLowerCase(), pastedValue.replace("mailto:", "");
2015
},
2016
definitions: {
2017
"*": {
2018
validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",
2019
cardinality: 1,
2020
casing: "lower"
2021
}
2022
}
2023
},
2024
mac: {
2025
mask: "##:##:##:##:##:##"
2026
}
2027
}), Inputmask;
2028
}(jQuery, Inputmask), function($, Inputmask) {
2029
return Inputmask.extendAliases({
2030
numeric: {
2031
mask: function(opts) {
2032
function autoEscape(txt) {
2033
for (var escapedTxt = "", i = 0; i < txt.length; i++) escapedTxt += opts.definitions[txt.charAt(i)] ? "\\" + txt.charAt(i) : txt.charAt(i);
2034
return escapedTxt;
2035
}
2036
if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat),
2037
opts.repeat = 0, opts.groupSeparator === opts.radixPoint && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""),
2038
" " === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator,
2039
opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)),
2040
isFinite(opts.integerDigits))) {
2041
var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;
2042
opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps),
2043
opts.integerDigits < 1 && (opts.integerDigits = "*");
2044
}
2045
opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)),
2046
opts.radixFocus = opts.radixFocus && "" !== opts.placeholder && opts.integerOptional === !0,
2047
opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~",
2048
opts.numericInput === !0 && (opts.radixFocus = !1, opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2),
2049
opts.decimalProtect = !1);
2050
var mask = autoEscape(opts.prefix);
2051
return mask += "[+]", mask += opts.integerOptional === !0 ? "~{1," + opts.integerDigits + "}" : "~{" + opts.integerDigits + "}",
2052
void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (mask += opts.digitsOptional ? "[" + (opts.decimalProtect ? ":" : opts.radixPoint) + ";{1," + opts.digits + "}]" : (opts.decimalProtect ? ":" : opts.radixPoint) + ";{" + opts.digits + "}"),
2053
"" !== opts.negationSymbol.back && (mask += "[-]"), mask += autoEscape(opts.suffix),
2054
opts.greedy = !1, mask;
2055
},
2056
placeholder: "",
2057
greedy: !1,
2058
digits: "*",
2059
digitsOptional: !0,
2060
radixPoint: ".",
2061
radixFocus: !0,
2062
groupSize: 3,
2063
groupSeparator: "",
2064
autoGroup: !1,
2065
allowPlus: !0,
2066
allowMinus: !0,
2067
negationSymbol: {
2068
front: "-",
2069
back: ""
2070
},
2071
integerDigits: "+",
2072
integerOptional: !0,
2073
prefix: "",
2074
suffix: "",
2075
rightAlign: !0,
2076
decimalProtect: !0,
2077
min: null,
2078
max: null,
2079
step: 1,
2080
insertMode: !0,
2081
autoUnmask: !1,
2082
unmaskAsNumber: !1,
2083
postFormat: function(buffer, pos, reformatOnly, opts) {
2084
opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join("").length - pos - 1));
2085
var i, l, suffixStripped = !1;
2086
buffer.length >= opts.suffix.length && buffer.join("").indexOf(opts.suffix) === buffer.length - opts.suffix.length && (buffer.length = buffer.length - opts.suffix.length,
2087
suffixStripped = !0), pos = pos >= buffer.length ? buffer.length - 1 : pos < opts.prefix.length ? opts.prefix.length : pos;
2088
var needsRefresh = !1, charAtPos = buffer[pos];
2089
if ("" === opts.groupSeparator || opts.numericInput !== !0 && -1 !== $.inArray(opts.radixPoint, buffer) && pos > $.inArray(opts.radixPoint, buffer) || new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]").test(charAtPos)) {
2090
if (suffixStripped) for (i = 0, l = opts.suffix.length; l > i; i++) buffer.push(opts.suffix.charAt(i));
2091
return {
2092
pos: pos
2093
};
2094
}
2095
var cbuf = buffer.slice();
2096
charAtPos === opts.groupSeparator && (cbuf.splice(pos--, 1), charAtPos = cbuf[pos]),
2097
reformatOnly ? charAtPos !== opts.radixPoint && (cbuf[pos] = "?") : cbuf.splice(pos, 0, "?");
2098
var bufVal = cbuf.join(""), bufValOrigin = bufVal;
2099
if (bufVal.length > 0 && opts.autoGroup || reformatOnly && -1 !== bufVal.indexOf(opts.groupSeparator)) {
2100
var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);
2101
needsRefresh = 0 === bufVal.indexOf(opts.groupSeparator), bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), "");
2102
var radixSplit = bufVal.split(opts.radixPoint);
2103
if (bufVal = "" === opts.radixPoint ? bufVal : radixSplit[0], bufVal !== opts.prefix + "?0" && bufVal.length >= opts.groupSize + opts.prefix.length) for (var reg = new RegExp("([-+]?[\\d?]+)([\\d?]{" + opts.groupSize + "})"); reg.test(bufVal); ) bufVal = bufVal.replace(reg, "$1" + opts.groupSeparator + "$2"),
2104
bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);
2105
"" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += opts.radixPoint + radixSplit[1]);
2106
}
2107
for (needsRefresh = bufValOrigin !== bufVal, buffer.length = bufVal.length, i = 0,
2108
l = bufVal.length; l > i; i++) buffer[i] = bufVal.charAt(i);
2109
var newPos = $.inArray("?", buffer);
2110
if (-1 === newPos && charAtPos === opts.radixPoint && (newPos = $.inArray(opts.radixPoint, buffer)),
2111
reformatOnly ? buffer[newPos] = charAtPos : buffer.splice(newPos, 1), !needsRefresh && suffixStripped) for (i = 0,
2112
l = opts.suffix.length; l > i; i++) buffer.push(opts.suffix.charAt(i));
2113
return newPos = opts.numericInput && isFinite(pos) ? buffer.join("").length - newPos - 1 : newPos,
2114
opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join("").length - opts.suffix.length !== newPos && (newPos -= 1)),
2115
{
2116
pos: newPos,
2117
refreshFromBuffer: needsRefresh,
2118
buffer: buffer
2119
};
2120
},
2121
onBeforeWrite: function(e, buffer, caretPos, opts) {
2122
if (e && ("blur" === e.type || "checkval" === e.type)) {
2123
var maskedValue = buffer.join(""), processValue = maskedValue.replace(opts.prefix, "");
2124
if (processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
2125
"," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")),
2126
isFinite(processValue) && isFinite(opts.min) && parseFloat(processValue) < parseFloat(opts.min)) return $.extend(!0, {
2127
refreshFromBuffer: !0,
2128
buffer: (opts.prefix + opts.min).split("")
2129
}, opts.postFormat((opts.prefix + opts.min).split(""), 0, !0, opts));
2130
if (opts.numericInput !== !0) {
2131
var tmpBufSplit = "" !== opts.radixPoint ? buffer.join("").split(opts.radixPoint) : [ buffer.join("") ], matchRslt = tmpBufSplit[0].match(opts.regex.integerPart(opts)), matchRsltDigits = 2 === tmpBufSplit.length ? tmpBufSplit[1].match(opts.regex.integerNPart(opts)) : void 0;
2132
if (matchRslt) {
2133
matchRslt[0] !== opts.negationSymbol.front + "0" && matchRslt[0] !== opts.negationSymbol.front && "+" !== matchRslt[0] || void 0 !== matchRsltDigits && !matchRsltDigits[0].match(/^0+$/) || buffer.splice(matchRslt.index, 1);
2134
var radixPosition = $.inArray(opts.radixPoint, buffer);
2135
if (-1 !== radixPosition) {
2136
if (isFinite(opts.digits) && !opts.digitsOptional) {
2137
for (var i = 1; i <= opts.digits; i++) (void 0 === buffer[radixPosition + i] || buffer[radixPosition + i] === opts.placeholder.charAt(0)) && (buffer[radixPosition + i] = "0");
2138
return {
2139
refreshFromBuffer: maskedValue !== buffer.join(""),
2140
buffer: buffer
2141
};
2142
}
2143
if (radixPosition === buffer.length - opts.suffix.length - 1) return buffer.splice(radixPosition, 1),
2144
{
2145
refreshFromBuffer: !0,
2146
buffer: buffer
2147
};
2148
}
2149
}
2150
}
2151
}
2152
if (opts.autoGroup) {
2153
var rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, !0, opts);
2154
return rslt.caret = caretPos <= opts.prefix.length ? rslt.pos : rslt.pos + 1, rslt;
2155
}
2156
},
2157
regex: {
2158
integerPart: function(opts) {
2159
return new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+");
2160
},
2161
integerNPart: function(opts) {
2162
return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + "]+");
2163
}
2164
},
2165
signHandler: function(chrs, maskset, pos, strict, opts) {
2166
if (!strict && opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) {
2167
var matchRslt = maskset.buffer.join("").match(opts.regex.integerPart(opts));
2168
if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === ("-" === chrs ? "+" : opts.negationSymbol.front) ? "-" === chrs ? "" !== opts.negationSymbol.back ? {
2169
pos: matchRslt.index,
2170
c: opts.negationSymbol.front,
2171
remove: matchRslt.index,
2172
caret: pos,
2173
insert: {
2174
pos: maskset.buffer.length - opts.suffix.length - 1,
2175
c: opts.negationSymbol.back
2176
}
2177
} : {
2178
pos: matchRslt.index,
2179
c: opts.negationSymbol.front,
2180
remove: matchRslt.index,
2181
caret: pos
2182
} : "" !== opts.negationSymbol.back ? {
2183
pos: matchRslt.index,
2184
c: "+",
2185
remove: [ matchRslt.index, maskset.buffer.length - opts.suffix.length - 1 ],
2186
caret: pos
2187
} : {
2188
pos: matchRslt.index,
2189
c: "+",
2190
remove: matchRslt.index,
2191
caret: pos
2192
} : maskset.buffer[matchRslt.index] === ("-" === chrs ? opts.negationSymbol.front : "+") ? "-" === chrs && "" !== opts.negationSymbol.back ? {
2193
remove: [ matchRslt.index, maskset.buffer.length - opts.suffix.length - 1 ],
2194
caret: pos - 1
2195
} : {
2196
remove: matchRslt.index,
2197
caret: pos - 1
2198
} : "-" === chrs ? "" !== opts.negationSymbol.back ? {
2199
pos: matchRslt.index,
2200
c: opts.negationSymbol.front,
2201
caret: pos + 1,
2202
insert: {
2203
pos: maskset.buffer.length - opts.suffix.length,
2204
c: opts.negationSymbol.back
2205
}
2206
} : {
2207
pos: matchRslt.index,
2208
c: opts.negationSymbol.front,
2209
caret: pos + 1
2210
} : {
2211
pos: matchRslt.index,
2212
c: chrs,
2213
caret: pos + 1
2214
};
2215
}
2216
return !1;
2217
},
2218
radixHandler: function(chrs, maskset, pos, strict, opts) {
2219
if (!strict && (-1 !== $.inArray(chrs, [ ",", "." ]) && (chrs = opts.radixPoint),
2220
chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0))) {
2221
var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join("").match(opts.regex.integerPart(opts));
2222
if (-1 !== radixPos && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? {
2223
caret: radixPos + 1
2224
} : {
2225
pos: integerValue.index,
2226
c: integerValue[0],
2227
caret: radixPos + 1
2228
};
2229
if (!integerValue || "0" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = "0",
2230
{
2231
pos: (integerValue ? integerValue.index : pos) + 1,
2232
c: opts.radixPoint
2233
};
2234
}
2235
return !1;
2236
},
2237
leadingZeroHandler: function(chrs, maskset, pos, strict, opts) {
2238
if (opts.numericInput === !0) {
2239
if ("0" === maskset.buffer[maskset.buffer.length - opts.prefix.length - 1]) return {
2240
pos: pos,
2241
remove: maskset.buffer.length - opts.prefix.length - 1
2242
};
2243
} else {
2244
var matchRslt = maskset.buffer.join("").match(opts.regex.integerNPart(opts)), radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
2245
if (matchRslt && !strict && (-1 === radixPosition || radixPosition >= pos)) if (0 === matchRslt[0].indexOf("0")) {
2246
pos < opts.prefix.length && (pos = matchRslt.index);
2247
var _radixPosition = $.inArray(opts.radixPoint, maskset._buffer), digitsMatch = maskset._buffer && maskset.buffer.slice(radixPosition).join("") === maskset._buffer.slice(_radixPosition).join("") || 0 === parseInt(maskset.buffer.slice(radixPosition + 1).join("")), integerMatch = maskset._buffer && maskset.buffer.slice(matchRslt.index, radixPosition).join("") === maskset._buffer.slice(opts.prefix.length, _radixPosition).join("") || "0" === maskset.buffer.slice(matchRslt.index, radixPosition).join("");
2248
if (-1 === radixPosition || digitsMatch && integerMatch) return maskset.buffer.splice(matchRslt.index, 1),
2249
pos = pos > matchRslt.index ? pos - 1 : matchRslt.index, {
2250
pos: pos,
2251
remove: matchRslt.index
2252
};
2253
if (matchRslt.index + 1 === pos || "0" === chrs) return maskset.buffer.splice(matchRslt.index, 1),
2254
pos = matchRslt.index, {
2255
pos: pos,
2256
remove: matchRslt.index
2257
};
2258
} else if ("0" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1;
2259
}
2260
return !0;
2261
},
2262
postValidation: function(buffer, opts) {
2263
var isValid = !0, maskedValue = buffer.join(""), processValue = maskedValue.replace(opts.prefix, "");
2264
return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
2265
"," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")),
2266
processValue = processValue.replace(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front)), "-"),
2267
processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""),
2268
processValue = processValue === opts.negationSymbol.front ? processValue + "0" : processValue,
2269
isFinite(processValue) && (null !== opts.max && isFinite(opts.max) && (isValid = parseFloat(processValue) <= parseFloat(opts.max)),
2270
isValid && null !== opts.min && isFinite(opts.min) && (0 >= processValue || processValue.toString().length >= opts.min.toString().length) && (isValid = parseFloat(processValue) >= parseFloat(opts.min),
2271
isValid || (isValid = $.extend(!0, {
2272
refreshFromBuffer: !0,
2273
buffer: (opts.prefix + opts.min).split("")
2274
}, opts.postFormat((opts.prefix + opts.min).split(""), 0, !0, opts)), isValid.refreshFromBuffer = !0))),
2275
isValid;
2276
},
2277
definitions: {
2278
"~": {
2279
validator: function(chrs, maskset, pos, strict, opts) {
2280
var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2281
if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts),
2282
!isValid && (isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs),
2283
isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts),
2284
isValid === !0)))) {
2285
var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
2286
isValid = -1 !== radixPosition && opts.digitsOptional === !1 && opts.numericInput !== !0 && pos > radixPosition && !strict ? {
2287
pos: pos,
2288
remove: pos
2289
} : {
2290
pos: pos
2291
};
2292
}
2293
return isValid;
2294
},
2295
cardinality: 1,
2296
prevalidator: null
2297
},
2298
"+": {
2299
validator: function(chrs, maskset, pos, strict, opts) {
2300
var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2301
return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) && (isValid = "-" === chrs ? "" !== opts.negationSymbol.back ? {
2302
pos: pos,
2303
c: "-" === chrs ? opts.negationSymbol.front : "+",
2304
caret: pos + 1,
2305
insert: {
2306
pos: maskset.buffer.length,
2307
c: opts.negationSymbol.back
2308
}
2309
} : {
2310
pos: pos,
2311
c: "-" === chrs ? opts.negationSymbol.front : "+",
2312
caret: pos + 1
2313
} : !0), isValid;
2314
},
2315
cardinality: 1,
2316
prevalidator: null,
2317
placeholder: ""
2318
},
2319
"-": {
2320
validator: function(chrs, maskset, pos, strict, opts) {
2321
var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2322
return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0),
2323
isValid;
2324
},
2325
cardinality: 1,
2326
prevalidator: null,
2327
placeholder: ""
2328
},
2329
":": {
2330
validator: function(chrs, maskset, pos, strict, opts) {
2331
var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2332
if (!isValid) {
2333
var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + ",\\.]";
2334
isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {
2335
caret: pos + 1
2336
});
2337
}
2338
return isValid ? {
2339
c: opts.radixPoint
2340
} : isValid;
2341
},
2342
cardinality: 1,
2343
prevalidator: null,
2344
placeholder: function(opts) {
2345
return opts.radixPoint;
2346
}
2347
}
2348
},
2349
onUnMask: function(maskedValue, unmaskedValue, opts) {
2350
var processValue = maskedValue.replace(opts.prefix, "");
2351
return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
2352
opts.unmaskAsNumber ? ("" !== opts.radixPoint && -1 !== processValue.indexOf(opts.radixPoint) && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")),
2353
Number(processValue)) : processValue;
2354
},
2355
isComplete: function(buffer, opts) {
2356
var maskedValue = buffer.join(""), bufClone = buffer.slice();
2357
if (opts.postFormat(bufClone, 0, !0, opts), bufClone.join("") !== maskedValue) return !1;
2358
var processValue = maskedValue.replace(opts.prefix, "");
2359
return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
2360
"," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")),
2361
isFinite(processValue);
2362
},
2363
onBeforeMask: function(initialValue, opts) {
2364
if ("" !== opts.radixPoint && isFinite(initialValue)) initialValue = initialValue.toString().replace(".", opts.radixPoint); else {
2365
var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g);
2366
dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, ""),
2367
initialValue = initialValue.replace(",", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, ""),
2368
initialValue = initialValue.replace(".", opts.radixPoint)) : initialValue = initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue = initialValue.replace(/,/g, "") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "");
2369
}
2370
if (0 === opts.digits && (-1 !== initialValue.indexOf(".") ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : -1 !== initialValue.indexOf(",") && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))),
2371
"" !== opts.radixPoint && isFinite(opts.digits) && -1 !== initialValue.indexOf(opts.radixPoint)) {
2372
var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp("\\d*"))[0];
2373
if (parseInt(opts.digits) < decPart.toString().length) {
2374
var digitsFactor = Math.pow(10, parseInt(opts.digits));
2375
initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."),
2376
initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor,
2377
initialValue = initialValue.toString().replace(".", opts.radixPoint);
2378
}
2379
}
2380
return initialValue.toString();
2381
},
2382
canClearPosition: function(maskset, position, lvp, strict, opts) {
2383
var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back;
2384
if (canClear && isFinite(positionInput)) {
2385
var matchRslt, radixPos = $.inArray(opts.radixPoint, maskset.buffer), radixInjection = !1;
2386
if (void 0 === maskset.validPositions[radixPos] && (maskset.validPositions[radixPos] = {
2387
input: opts.radixPoint
2388
}, radixInjection = !0), !strict && maskset.buffer) {
2389
matchRslt = maskset.buffer.join("").substr(0, position).match(opts.regex.integerNPart(opts));
2390
var pos = position + 1, isNull = null == matchRslt || 0 === parseInt(matchRslt[0].replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""));
2391
if (isNull) for (;maskset.validPositions[pos] && (maskset.validPositions[pos].input === opts.groupSeparator || "0" === maskset.validPositions[pos].input); ) delete maskset.validPositions[pos],
2392
pos++;
2393
}
2394
var buffer = [];
2395
for (var vp in maskset.validPositions) void 0 !== maskset.validPositions[vp].input && buffer.push(maskset.validPositions[vp].input);
2396
if (radixInjection && delete maskset.validPositions[radixPos], radixPos > 0) {
2397
var bufVal = buffer.join("");
2398
if (matchRslt = bufVal.match(opts.regex.integerNPart(opts)), matchRslt && radixPos >= position) if (0 === matchRslt[0].indexOf("0")) canClear = matchRslt.index !== position || "0" === opts.placeholder; else {
2399
var intPart = parseInt(matchRslt[0].replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "")), radixPart = parseInt(bufVal.split(opts.radixPoint)[1]);
2400
10 > intPart && maskset.validPositions[position] && ("0" !== opts.placeholder || radixPart > 0) && (maskset.validPositions[position].input = "0",
2401
maskset.p = opts.prefix.length + 1, canClear = !1);
2402
}
2403
}
2404
}
2405
return canClear;
2406
},
2407
onKeyDown: function(e, buffer, caretPos, opts) {
2408
var $input = $(this);
2409
if (e.ctrlKey) switch (e.keyCode) {
2410
case Inputmask.keyCode.UP:
2411
$input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue.inputmask");
2412
break;
2413
2414
case Inputmask.keyCode.DOWN:
2415
$input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue.inputmask");
2416
}
2417
}
2418
},
2419
currency: {
2420
prefix: "$ ",
2421
groupSeparator: ",",
2422
alias: "numeric",
2423
placeholder: "0",
2424
autoGroup: !0,
2425
digits: 2,
2426
digitsOptional: !1,
2427
clearMaskOnLostFocus: !1
2428
},
2429
decimal: {
2430
alias: "numeric"
2431
},
2432
integer: {
2433
alias: "numeric",
2434
digits: 0,
2435
radixPoint: ""
2436
},
2437
percentage: {
2438
alias: "numeric",
2439
digits: 2,
2440
radixPoint: ".",
2441
placeholder: "0",
2442
autoGroup: !1,
2443
min: 0,
2444
max: 100,
2445
suffix: " %",
2446
allowPlus: !1,
2447
allowMinus: !1
2448
}
2449
}), Inputmask;
2450
}(jQuery, Inputmask), function($, Inputmask) {
2451
return Inputmask.extendAliases({
2452
phone: {
2453
url: "phone-codes/phone-codes.js",
2454
countrycode: "",
2455
mask: function(opts) {
2456
opts.definitions["#"] = opts.definitions[9];
2457
var maskList = [];
2458
return $.ajax({
2459
url: opts.url,
2460
async: !1,
2461
dataType: "json",
2462
success: function(response) {
2463
maskList = response;
2464
},
2465
error: function(xhr, ajaxOptions, thrownError) {
2466
alert(thrownError + " - " + opts.url);
2467
}
2468
}), maskList = maskList.sort(function(a, b) {
2469
return (a.mask || a) < (b.mask || b) ? -1 : 1;
2470
});
2471
},
2472
keepStatic: !1,
2473
nojumps: !0,
2474
nojumpsThreshold: 1,
2475
onBeforeMask: function(value, opts) {
2476
var processedValue = value.replace(/^0/g, "");
2477
return (processedValue.indexOf(opts.countrycode) > 1 || -1 === processedValue.indexOf(opts.countrycode)) && (processedValue = "+" + opts.countrycode + processedValue),
2478
processedValue;
2479
}
2480
},
2481
phonebe: {
2482
alias: "phone",
2483
url: "phone-codes/phone-be.js",
2484
countrycode: "32",
2485
nojumpsThreshold: 4
2486
}
2487
}), Inputmask;
2488
}(jQuery, Inputmask), function($, Inputmask) {
2489
return Inputmask.extendAliases({
2490
Regex: {
2491
mask: "r",
2492
greedy: !1,
2493
repeat: "*",
2494
regex: null,
2495
regexTokens: null,
2496
tokenizer: /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,
2497
quantifierFilter: /[0-9]+[^,]/,
2498
isComplete: function(buffer, opts) {
2499
return new RegExp(opts.regex).test(buffer.join(""));
2500
},
2501
definitions: {
2502
r: {
2503
validator: function(chrs, maskset, pos, strict, opts) {
2504
function RegexToken(isGroup, isQuantifier) {
2505
this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1,
2506
this.quantifier = {
2507
min: 1,
2508
max: 1
2509
}, this.repeaterPart = void 0;
2510
}
2511
function analyseRegex() {
2512
var match, m, currentToken = new RegexToken(), opengroups = [];
2513
for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0],
2514
m.charAt(0)) {
2515
case "(":
2516
opengroups.push(new RegexToken(!0));
2517
break;
2518
2519
case ")":
2520
groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);
2521
break;
2522
2523
case "{":
2524
case "+":
2525
case "*":
2526
var quantifierToken = new RegexToken(!1, !0);
2527
m = m.replace(/[{}]/g, "");
2528
var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
2529
if (quantifierToken.quantifier = {
2530
min: mq0,
2531
max: mq1
2532
}, opengroups.length > 0) {
2533
var matches = opengroups[opengroups.length - 1].matches;
2534
match = matches.pop(), match.isGroup || (groupToken = new RegexToken(!0), groupToken.matches.push(match),
2535
match = groupToken), matches.push(match), matches.push(quantifierToken);
2536
} else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken(!0),
2537
groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match),
2538
currentToken.matches.push(quantifierToken);
2539
break;
2540
2541
default:
2542
opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);
2543
}
2544
currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);
2545
}
2546
function validateRegexToken(token, fromGroup) {
2547
var isvalid = !1;
2548
fromGroup && (regexPart += "(", openGroupCount++);
2549
for (var mndx = 0; mndx < token.matches.length; mndx++) {
2550
var matchToken = token.matches[mndx];
2551
if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) {
2552
var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;
2553
if (isNaN(matchToken.quantifier.max)) {
2554
for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;
2555
isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart),
2556
regexPart = regexPartBak + matchToken.quantifier.max;
2557
} else {
2558
for (var i = 0, qm = matchToken.quantifier.max - 1; qm > i && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;
2559
regexPart = regexPartBak + "{" + matchToken.quantifier.min + "," + matchToken.quantifier.max + "}";
2560
}
2561
} else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {
2562
var testExp;
2563
if ("[" == matchToken.charAt(0)) {
2564
testExp = regexPart, testExp += matchToken;
2565
for (var j = 0; openGroupCount > j; j++) testExp += ")";
2566
var exp = new RegExp("^(" + testExp + ")$");
2567
isvalid = exp.test(bufferStr);
2568
} else for (var l = 0, tl = matchToken.length; tl > l; l++) if ("\\" !== matchToken.charAt(l)) {
2569
testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\|$/, "");
2570
for (var j = 0; openGroupCount > j; j++) testExp += ")";
2571
var exp = new RegExp("^(" + testExp + ")$");
2572
if (isvalid = exp.test(bufferStr)) break;
2573
}
2574
regexPart += matchToken;
2575
}
2576
if (isvalid) break;
2577
}
2578
return fromGroup && (regexPart += ")", openGroupCount--), isvalid;
2579
}
2580
var groupToken, cbuffer = maskset.buffer.slice(), regexPart = "", isValid = !1, openGroupCount = 0;
2581
null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs);
2582
for (var bufferStr = cbuffer.join(""), i = 0; i < opts.regexTokens.length; i++) {
2583
var regexToken = opts.regexTokens[i];
2584
if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;
2585
}
2586
return isValid;
2587
},
2588
cardinality: 1
2589
}
2590
}
2591
}
2592
}), Inputmask;
2593
}(jQuery, Inputmask);
2594