use-mask-input 3.0.6 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +13 -19
  2. package/dist/index.cjs +191 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.ts +34 -3
  5. package/dist/index.js +184 -1
  6. package/dist/index.js.map +1 -1
  7. package/package.json +49 -48
  8. package/src/index.tsx +3 -2
  9. package/src/types.ts +6 -0
  10. package/src/useMaskInput.ts +12 -9
  11. package/src/utils.spec.ts +14 -0
  12. package/src/utils.ts +23 -0
  13. package/src/withHookFormMask.ts +8 -17
  14. package/src/withMask.ts +5 -6
  15. package/dist/example/App.example.d.ts +0 -3
  16. package/dist/example/index.d.ts +0 -1
  17. package/dist/index.modern.js +0 -2
  18. package/dist/index.modern.js.map +0 -1
  19. package/dist/index.umd.js +0 -2
  20. package/dist/index.umd.js.map +0 -1
  21. package/dist/useMaskInput.d.ts +0 -9
  22. package/dist/withHookFormMask.d.ts +0 -16
  23. package/dist/withMask.d.ts +0 -3
  24. package/node_modules/inputmask/LICENSE.txt +0 -7
  25. package/node_modules/inputmask/README.md +0 -1279
  26. package/node_modules/inputmask/bundle.js +0 -6
  27. package/node_modules/inputmask/dist/bindings/inputmask.binding.js +0 -26
  28. package/node_modules/inputmask/dist/inputmask.es6.js +0 -5
  29. package/node_modules/inputmask/dist/inputmask.js +0 -3031
  30. package/node_modules/inputmask/dist/inputmask.min.js +0 -8
  31. package/node_modules/inputmask/dist/jquery.inputmask.js +0 -2985
  32. package/node_modules/inputmask/dist/jquery.inputmask.min.js +0 -8
  33. package/node_modules/inputmask/lib/bindings/inputmask.binding.js +0 -26
  34. package/node_modules/inputmask/lib/bindings/inputmask.es6.js +0 -5
  35. package/node_modules/inputmask/lib/canUseDOM.js +0 -7
  36. package/node_modules/inputmask/lib/defaults.js +0 -101
  37. package/node_modules/inputmask/lib/definitions.js +0 -13
  38. package/node_modules/inputmask/lib/dependencyLibs/data.js +0 -8
  39. package/node_modules/inputmask/lib/dependencyLibs/events.js +0 -199
  40. package/node_modules/inputmask/lib/dependencyLibs/extend.js +0 -58
  41. package/node_modules/inputmask/lib/dependencyLibs/inputmask.dependencyLib.jquery.js +0 -13
  42. package/node_modules/inputmask/lib/dependencyLibs/inputmask.dependencyLib.js +0 -41
  43. package/node_modules/inputmask/lib/environment.js +0 -9
  44. package/node_modules/inputmask/lib/escapeRegex.js +0 -4
  45. package/node_modules/inputmask/lib/eventhandlers.js +0 -513
  46. package/node_modules/inputmask/lib/eventruler.js +0 -124
  47. package/node_modules/inputmask/lib/extensions/inputmask.date.extensions.js +0 -588
  48. package/node_modules/inputmask/lib/extensions/inputmask.extensions.js +0 -133
  49. package/node_modules/inputmask/lib/extensions/inputmask.numeric.extensions.js +0 -631
  50. package/node_modules/inputmask/lib/global/window.js +0 -3
  51. package/node_modules/inputmask/lib/inputHandling.js +0 -252
  52. package/node_modules/inputmask/lib/inputmask.js +0 -355
  53. package/node_modules/inputmask/lib/inputmaskElement.js +0 -33
  54. package/node_modules/inputmask/lib/jquery.inputmask.js +0 -81
  55. package/node_modules/inputmask/lib/keycode.json +0 -25
  56. package/node_modules/inputmask/lib/mask-lexer.js +0 -467
  57. package/node_modules/inputmask/lib/mask.js +0 -244
  58. package/node_modules/inputmask/lib/masktoken.js +0 -13
  59. package/node_modules/inputmask/lib/polyfills/Array.includes.js +0 -48
  60. package/node_modules/inputmask/lib/polyfills/Object.getPrototypeOf.js +0 -7
  61. package/node_modules/inputmask/lib/positioning.js +0 -348
  62. package/node_modules/inputmask/lib/validation-tests.js +0 -597
  63. package/node_modules/inputmask/lib/validation.js +0 -664
  64. package/node_modules/inputmask/package.json +0 -60
  65. package/src/example/App.example.tsx +0 -68
  66. package/src/example/index.tsx +0 -5
@@ -1,664 +0,0 @@
1
- import {
2
- determineTestTemplate,
3
- getDecisionTaker,
4
- getPlaceholder,
5
- getTest,
6
- getTests,
7
- getTestTemplate
8
- } from "./validation-tests";
9
- import keyCode from "./keycode.json";
10
- import {
11
- determineLastRequiredPosition, determineNewCaretPosition,
12
- getBuffer,
13
- getLastValidPosition,
14
- isMask,
15
- resetMaskSet,
16
- seekNext,
17
- seekPrevious
18
- } from "./positioning";
19
- import { EventHandlers } from "./eventhandlers";
20
-
21
- export { alternate, checkAlternationMatch, isComplete, isSelection, isValid, refreshFromBuffer, revalidateMask, handleRemove };
22
-
23
- //tobe put on prototype?
24
- function alternate(maskPos, c, strict, fromIsValid, rAltPos, selection) { //pos == true => generalize
25
- const inputmask = this,
26
- $ = this.dependencyLib,
27
- opts = this.opts,
28
- maskset = inputmask.maskset;
29
-
30
- var validPsClone = $.extend(true, {}, maskset.validPositions),
31
- tstClone = $.extend(true, {}, maskset.tests),
32
- lastAlt,
33
- alternation,
34
- isValidRslt = false, returnRslt = false,
35
- altPos, prevAltPos, i, validPos,
36
- decisionPos,
37
- lAltPos = rAltPos !== undefined ? rAltPos : getLastValidPosition.call(inputmask), nextPos, input, begin, end;
38
-
39
- if (selection) {
40
- begin = selection.begin;
41
- end = selection.end;
42
- if (selection.begin > selection.end) {
43
- begin = selection.end;
44
- end = selection.begin;
45
- }
46
- }
47
- if (lAltPos === -1 && rAltPos === undefined) { //do not recurse when already paste the beginning
48
- lastAlt = 0;
49
- prevAltPos = getTest.call(inputmask, lastAlt);
50
- alternation = prevAltPos.alternation;
51
- } else {
52
- //find last modified alternation
53
- for (; lAltPos >= 0; lAltPos--) {
54
- altPos = maskset.validPositions[lAltPos];
55
- if (altPos && altPos.alternation !== undefined) {
56
- if (prevAltPos && prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) {
57
- break;
58
- }
59
- lastAlt = lAltPos;
60
- alternation = maskset.validPositions[lastAlt].alternation;
61
- prevAltPos = altPos;
62
- }
63
- }
64
- }
65
-
66
- if (alternation !== undefined) {
67
- decisionPos = parseInt(lastAlt);
68
- maskset.excludes[decisionPos] = maskset.excludes[decisionPos] || [];
69
- if (maskPos !== true) { //generalize
70
- maskset.excludes[decisionPos].push(getDecisionTaker(prevAltPos) + ":" + prevAltPos.alternation);
71
- }
72
-
73
- var validInputs = [], resultPos = -1;
74
- for (i = decisionPos; i < getLastValidPosition.call(inputmask, undefined, true) + 1; i++) {
75
- if (resultPos === -1 && maskPos <= i && c !== undefined) {
76
- validInputs.push(c);
77
- resultPos = validInputs.length - 1;
78
- }
79
- validPos = maskset.validPositions[i];
80
- if (validPos && validPos.generatedInput !== true && (selection === undefined || (i < begin || i >= end))) {
81
- validInputs.push(validPos.input);
82
- }
83
- delete maskset.validPositions[i];
84
- }
85
- if (resultPos === -1 && c !== undefined) {
86
- validInputs.push(c);
87
- resultPos = validInputs.length - 1;
88
- }
89
-
90
- while (maskset.excludes[decisionPos] !== undefined && maskset.excludes[decisionPos].length < 10) {
91
- // maskset.tests[decisionPos] = undefined; //clear decisionPos
92
- maskset.tests = {}; //clear all
93
- resetMaskSet.call(inputmask, true); //clear getbuffer
94
- isValidRslt = true;
95
- for (i = 0; i < validInputs.length; i++) {
96
- nextPos = isValidRslt.caret || (getLastValidPosition.call(inputmask, undefined, true) + 1);
97
- input = validInputs[i];
98
- // nextPos = translatePosition.call(inputmask, nextPos);
99
- if (!(isValidRslt = isValid.call(inputmask, nextPos, input, false, fromIsValid, true))) {
100
- break;
101
- }
102
- if (i === resultPos) {
103
- returnRslt = isValidRslt;
104
- }
105
- if (maskPos == true && isValidRslt) { //return validposition on generalise
106
- returnRslt = { caretPos: i };
107
- }
108
- }
109
- if (!isValidRslt) {
110
- resetMaskSet.call(inputmask);
111
- prevAltPos = getTest.call(inputmask, decisionPos); //get the current decisionPos to exclude ~ needs to be before restoring the initial validation
112
- //reset & revert
113
- maskset.validPositions = $.extend(true, {}, validPsClone);
114
- maskset.tests = $.extend(true, {}, tstClone); //refresh tests after possible alternating
115
- if (maskset.excludes[decisionPos]) {
116
- var decisionTaker = getDecisionTaker(prevAltPos);
117
- if (maskset.excludes[decisionPos].indexOf(decisionTaker + ":" + prevAltPos.alternation) !== -1) {
118
- returnRslt = alternate.call(inputmask, maskPos, c, strict, fromIsValid, decisionPos - 1, selection);
119
- break;
120
- }
121
- maskset.excludes[decisionPos].push(decisionTaker + ":" + prevAltPos.alternation);
122
- for (i = decisionPos; i < getLastValidPosition.call(inputmask, undefined, true) + 1; i++) delete maskset.validPositions[i];
123
- } else { //latest alternation
124
- returnRslt = alternate.call(inputmask, maskPos, c, strict, fromIsValid, decisionPos - 1, selection);
125
- break;
126
- }
127
- } else {
128
- break;
129
- }
130
- }
131
- }
132
- //reset alternation excludes
133
- if (!returnRslt || opts.keepStatic !== false) {
134
- delete maskset.excludes[decisionPos];
135
- }
136
- return returnRslt;
137
- }
138
-
139
- function casing(elem, test, pos) {
140
- const opts = this.opts,
141
- maskset = this.maskset;
142
-
143
- switch (opts.casing || test.casing) {
144
- case "upper":
145
- elem = elem.toUpperCase();
146
- break;
147
- case "lower":
148
- elem = elem.toLowerCase();
149
- break;
150
- case "title":
151
- var posBefore = maskset.validPositions[pos - 1];
152
- if (pos === 0 || posBefore && posBefore.input === String.fromCharCode(keyCode.SPACE)) {
153
- elem = elem.toUpperCase();
154
- } else {
155
- elem = elem.toLowerCase();
156
- }
157
- break;
158
- default:
159
- if (typeof opts.casing === "function") {
160
- var args = Array.prototype.slice.call(arguments);
161
- args.push(maskset.validPositions);
162
- elem = opts.casing.apply(this, args);
163
- }
164
- }
165
-
166
- return elem;
167
- }
168
-
169
- //tobe put on prototype?
170
- function checkAlternationMatch(altArr1, altArr2, na) {
171
- const opts = this.opts;
172
-
173
- var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1),
174
- isMatch = false,
175
- naArr = na !== undefined ? na.split(",") : [],
176
- naNdx;
177
-
178
- //remove no alternate indexes from alternation array
179
- for (var i = 0; i < naArr.length; i++) {
180
- if ((naNdx = altArr1.indexOf(naArr[i])) !== -1) {
181
- altArr1.splice(naNdx, 1);
182
- }
183
- }
184
-
185
- for (var alndx = 0; alndx < altArr1.length; alndx++) {
186
- if (altArrC.includes(altArr1[alndx])) {
187
- isMatch = true;
188
- break;
189
- }
190
- }
191
- return isMatch;
192
- }
193
-
194
- //tobe put on prototype?
195
- function handleRemove(input, k, pos, strict, fromIsValid) {
196
- const inputmask = this, maskset = this.maskset, opts = this.opts;
197
-
198
- if (opts.numericInput || inputmask.isRTL) {
199
- if (k === keyCode.BACKSPACE) {
200
- k = keyCode.DELETE;
201
- } else if (k === keyCode.DELETE) {
202
- k = keyCode.BACKSPACE;
203
- }
204
-
205
- if (inputmask.isRTL) {
206
- var pend = pos.end;
207
- pos.end = pos.begin;
208
- pos.begin = pend;
209
- }
210
- }
211
-
212
- var lvp = getLastValidPosition.call(inputmask, undefined, true);
213
- if (pos.end >= getBuffer.call(inputmask).length && lvp >= pos.end) { //handle numeric negate symbol offset, due to dynamic jit masking
214
- pos.end = lvp + 1;
215
- }
216
-
217
- if (k === keyCode.BACKSPACE) {
218
- if ((pos.end - pos.begin < 1)) {
219
- pos.begin = seekPrevious.call(inputmask, pos.begin);
220
- }
221
- } else if (k === keyCode.DELETE) {
222
- if (pos.begin === pos.end) {
223
- pos.end = isMask.call(inputmask, pos.end, true, true) ? pos.end + 1 : seekNext.call(inputmask, pos.end) + 1;
224
- }
225
- }
226
- var offset;
227
- if ((offset = revalidateMask.call(inputmask, pos)) !== false) {
228
- if (strict !== true && opts.keepStatic !== false || (opts.regex !== null && getTest.call(inputmask, pos.begin).match.def.indexOf("|") !== -1)) { //TODO NEEDS BETTER CHECK WHEN TO ALTERNATE ~ opts regex isn"t good enough
229
- var result = alternate.call(inputmask, true);
230
- if (result) {
231
- var newPos = result.caret !== undefined ? result.caret : (result.pos ? seekNext.call(inputmask, result.pos.begin ? result.pos.begin : result.pos) : getLastValidPosition.call(inputmask, -1, true));
232
- if (k !== keyCode.DELETE || pos.begin > newPos) {
233
- pos.begin == newPos;
234
- }
235
- }
236
- }
237
-
238
- if (strict !== true) {
239
- maskset.p = k === keyCode.DELETE ? pos.begin + offset : pos.begin;
240
- maskset.p = determineNewCaretPosition.call(inputmask, {
241
- begin: maskset.p,
242
- end: maskset.p
243
- }, false, opts.insertMode === false && k === keyCode.BACKSPACE ? "none" : undefined).begin;
244
- }
245
- }
246
- }
247
-
248
- //tobe put on prototype?
249
- function isComplete(buffer) { //return true / false / undefined (repeat *)
250
- const inputmask = this, opts = this.opts, maskset = this.maskset;
251
-
252
- if (typeof opts.isComplete === "function") return opts.isComplete(buffer, opts);
253
- if (opts.repeat === "*") return undefined;
254
- var complete = false,
255
- lrp = determineLastRequiredPosition.call(inputmask, true),
256
- aml = seekPrevious.call(inputmask, lrp.l);
257
-
258
- if (lrp.def === undefined || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
259
- complete = true;
260
- for (var i = 0; i <= aml; i++) {
261
- var test = getTestTemplate.call(inputmask, i).match;
262
- if ((test.static !== true && maskset.validPositions[i] === undefined && test.optionality !== true && test.optionalQuantifier !== true) || (test.static === true && buffer[i] !== getPlaceholder.call(inputmask, i, test))) {
263
- complete = false;
264
- break;
265
- }
266
- }
267
- }
268
- return complete;
269
- }
270
-
271
- function isSelection(posObj) {
272
- const inputmask = this,
273
- opts = this.opts, insertModeOffset = opts.insertMode ? 0 : 1;
274
- return inputmask.isRTL ? (posObj.begin - posObj.end) > insertModeOffset : (posObj.end - posObj.begin) > insertModeOffset;
275
- }
276
-
277
- //tobe put on prototype?
278
- function isValid(pos, c, strict, fromIsValid, fromAlternate, validateOnly, fromCheckval) { //strict true ~ no correction or autofill
279
- const inputmask = this,
280
- $ = this.dependencyLib,
281
- opts = this.opts,
282
- maskset = inputmask.maskset;
283
-
284
- strict = strict === true; //always set a value to strict to prevent possible strange behavior in the extensions
285
-
286
- var maskPos = pos;
287
- if (pos.begin !== undefined) { //position was a position object - used to handle a delete by typing over a selection
288
- maskPos = inputmask.isRTL ? pos.end : pos.begin;
289
- }
290
-
291
- function processCommandObject(commandObj) {
292
- if (commandObj !== undefined) {
293
- if (commandObj.remove !== undefined) { //remove position(s)
294
- if (!Array.isArray(commandObj.remove)) commandObj.remove = [commandObj.remove];
295
- commandObj.remove.sort(function (a, b) {
296
- return b.pos - a.pos;
297
- }).forEach(function (lmnt) {
298
- revalidateMask.call(inputmask, { begin: lmnt, end: lmnt + 1 });
299
- });
300
- commandObj.remove = undefined;
301
- }
302
- if (commandObj.insert !== undefined) { //insert position(s)
303
- if (!Array.isArray(commandObj.insert)) commandObj.insert = [commandObj.insert];
304
- commandObj.insert.sort(function (a, b) {
305
- return a.pos - b.pos;
306
- }).forEach(function (lmnt) {
307
- if (lmnt.c !== "") {
308
- isValid.call(inputmask, lmnt.pos, lmnt.c, lmnt.strict !== undefined ? lmnt.strict : true, lmnt.fromIsValid !== undefined ? lmnt.fromIsValid : fromIsValid);
309
- }
310
- });
311
- commandObj.insert = undefined;
312
- }
313
-
314
- if (commandObj.refreshFromBuffer && commandObj.buffer) {
315
- var refresh = commandObj.refreshFromBuffer;
316
- refreshFromBuffer.call(inputmask, refresh === true ? refresh : refresh.start, refresh.end, commandObj.buffer);
317
- commandObj.refreshFromBuffer = undefined;
318
- }
319
-
320
- if (commandObj.rewritePosition !== undefined) {
321
- maskPos = commandObj.rewritePosition;
322
- // commandObj.rewritePosition = undefined;
323
- commandObj = true;
324
- }
325
- }
326
- return commandObj;
327
- }
328
-
329
- function _isValid(position, c, strict) {
330
- var rslt = false;
331
- getTests.call(inputmask, position).every(function (tst, ndx) {
332
- var test = tst.match;
333
- //make sure the buffer is set and correct
334
- getBuffer.call(inputmask, true);
335
- if (test.jit && maskset.validPositions[seekPrevious.call(inputmask, position)] === undefined) //ignore if jit is not desirable
336
- {
337
- rslt = false;
338
- } else {
339
- //return is false or a json object => { pos: ??, c: ??} or true
340
- rslt = test.fn != null ?
341
- test.fn.test(c, maskset, position, strict, opts, isSelection.call(inputmask, pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && test.def !== "" ? //non mask
342
- {
343
- c: getPlaceholder.call(inputmask, position, test, true) || test.def,
344
- pos: position
345
- } : false;
346
- }
347
- if (rslt !== false) {
348
- var elem = rslt.c !== undefined ? rslt.c : c, validatedPos = position;
349
- elem = (elem === opts.skipOptionalPartCharacter && test.static === true) ?
350
- (getPlaceholder.call(inputmask, position, test, true) || test.def) : elem;
351
-
352
- rslt = processCommandObject(rslt);
353
-
354
- if (rslt !== true && rslt.pos !== undefined && rslt.pos !== position) { //their is a position offset
355
- validatedPos = rslt.pos;
356
- }
357
-
358
- if (rslt !== true && rslt.pos === undefined && rslt.c === undefined) {
359
- return false; //breakout if nothing to insert
360
- }
361
-
362
- if (revalidateMask.call(inputmask, pos, $.extend({}, tst, {
363
- "input": casing.call(inputmask, elem, test, validatedPos)
364
- }), fromIsValid, validatedPos) === false) {
365
- rslt = false;
366
- }
367
- return false; //break from loop
368
- }
369
-
370
- return true;
371
- });
372
- return rslt;
373
- }
374
-
375
- var result = true,
376
- positionsClone = $.extend(true, {}, maskset.validPositions); //clone the currentPositions
377
-
378
- if (opts.keepStatic === false && maskset.excludes[maskPos] !== undefined && fromAlternate !== true && fromIsValid !== true) {
379
- for (var i = maskPos; i < (inputmask.isRTL ? pos.begin : pos.end); i++) {
380
- if (maskset.excludes[i] !== undefined) {
381
- maskset.excludes[i] = undefined;
382
- delete maskset.tests[i];
383
- }
384
- }
385
- }
386
-
387
- if (typeof opts.preValidation === "function" && fromIsValid !== true && validateOnly !== true) {
388
- result = opts.preValidation.call(inputmask, getBuffer.call(inputmask), maskPos, c, isSelection.call(inputmask, pos), opts, maskset, pos, strict || fromAlternate);
389
- result = processCommandObject(result);
390
- }
391
- if (result === true) { //preValidation result
392
- result = _isValid(maskPos, c, strict);
393
- if ((!strict || fromIsValid === true) && result === false && validateOnly !== true) {
394
- var currentPosValid = maskset.validPositions[maskPos];
395
- if (currentPosValid && currentPosValid.match.static === true && (currentPosValid.match.def === c || c === opts.skipOptionalPartCharacter)) {
396
- result = {
397
- "caret": seekNext.call(inputmask, maskPos)
398
- };
399
- } else {
400
- if (opts.insertMode || maskset.validPositions[seekNext.call(inputmask, maskPos)] === undefined || pos.end > maskPos) { //does the input match on a further position?
401
- var skip = false;
402
- if (maskset.jitOffset[maskPos] && maskset.validPositions[seekNext.call(inputmask, maskPos)] === undefined) {
403
- result = isValid.call(inputmask, maskPos + maskset.jitOffset[maskPos], c, true, true);
404
- if (result !== false) {
405
- if (fromAlternate !== true) result.caret = maskPos;
406
- skip = true;
407
- }
408
- }
409
- if (pos.end > maskPos) {
410
- maskset.validPositions[maskPos] = undefined;
411
- }
412
- if (!skip && !isMask.call(inputmask, maskPos, opts.keepStatic && maskPos === 0)) {
413
- for (var nPos = maskPos + 1, snPos = seekNext.call(inputmask, maskPos, false, maskPos !== 0); nPos <= snPos; nPos++) {
414
- // if (!isMask(nPos, true)) {
415
- // continue;
416
- // }
417
- result = _isValid(nPos, c, strict);
418
- if (result !== false) {
419
- result = trackbackPositions.call(inputmask, maskPos, result.pos !== undefined ? result.pos : nPos) || result;
420
- maskPos = nPos;
421
- break;
422
- }
423
- }
424
- }
425
- }
426
- }
427
- }
428
-
429
- if (result === false && opts.keepStatic && (isComplete.call(inputmask, getBuffer.call(inputmask)) || maskPos === 0) && !strict && fromAlternate !== true) { //try fuzzy alternator logic
430
- result = alternate.call(inputmask, maskPos, c, strict, fromIsValid, undefined, pos);
431
- } else if (isSelection.call(inputmask, pos) && maskset.tests[maskPos] && maskset.tests[maskPos].length > 1 && opts.keepStatic && !strict && fromAlternate !== true) { //selection clears an alternated keepstatic mask ~ #2189
432
- result = alternate.call(inputmask, true);
433
- }
434
-
435
- if (result === true) {
436
- result = {
437
- "pos": maskPos
438
- };
439
- }
440
- }
441
- if (typeof opts.postValidation === "function" && fromIsValid !== true && validateOnly !== true) {
442
- var postResult = opts.postValidation.call(inputmask, getBuffer.call(inputmask, true), pos.begin !== undefined ? (inputmask.isRTL ? pos.end : pos.begin) : pos, c, result, opts, maskset, strict, fromCheckval);
443
- if (postResult !== undefined) {
444
- result = postResult === true ? result : postResult;
445
- }
446
- }
447
-
448
- if (result && result.pos === undefined) {
449
- result.pos = maskPos;
450
- }
451
-
452
- if (result === false || validateOnly === true) {
453
- resetMaskSet.call(inputmask, true);
454
- maskset.validPositions = $.extend(true, {}, positionsClone); //revert validation changes
455
- } else {
456
- trackbackPositions.call(inputmask, undefined, maskPos, true);
457
- }
458
-
459
- var endResult = processCommandObject(result);
460
- // console.log("returned result " + JSON.stringify(endResult));
461
- if (inputmask.maxLength !== undefined) {
462
- var buffer = getBuffer.call(inputmask);
463
- if (buffer.length > inputmask.maxLength && !fromIsValid) {
464
- resetMaskSet.call(inputmask, true);
465
- maskset.validPositions = $.extend(true, {}, positionsClone); //revert validation changes
466
- endResult = false;
467
- }
468
- }
469
- return endResult;
470
- }
471
-
472
- //tobe put on prototype?
473
- function positionCanMatchDefinition(pos, testDefinition, opts) {
474
- const inputmask = this,
475
- maskset = this.maskset;
476
-
477
- var valid = false,
478
- tests = getTests.call(inputmask, pos);
479
- for (var tndx = 0; tndx < tests.length; tndx++) {
480
- if (tests[tndx].match &&
481
- ((tests[tndx].match["nativeDef"] === testDefinition.match[opts.shiftPositions ? "def" : "nativeDef"] && (!opts.shiftPositions || !testDefinition.match.static)) ||
482
- tests[tndx].match["nativeDef"] === testDefinition.match["nativeDef"] || (opts.regex && !tests[tndx].match.static && tests[tndx].match.fn.test(testDefinition.input)))) {
483
- valid = true;
484
- break;
485
- } else if (tests[tndx].match && tests[tndx].match["def"] === testDefinition.match["nativeDef"]) {
486
- valid = undefined;
487
- break;
488
- }
489
- }
490
- if (valid === false) {
491
- if (maskset.jitOffset[pos] !== undefined) {
492
- valid = positionCanMatchDefinition.call(inputmask, pos + maskset.jitOffset[pos], testDefinition, opts);
493
- }
494
- }
495
- return valid;
496
- }
497
-
498
- //tobe put on prototype?
499
- function refreshFromBuffer(start, end, buffer) {
500
- const inputmask = this,
501
- maskset = this.maskset,
502
- opts = this.opts,
503
- $ = this.dependencyLib;
504
- // checkVal.call(inputmask, el, false, true, isRTL ? buffer.reverse() : buffer);
505
- var i, p, skipOptionalPartCharacter = opts.skipOptionalPartCharacter,
506
- bffr = inputmask.isRTL ? buffer.slice().reverse() : buffer;
507
- opts.skipOptionalPartCharacter = "";
508
- if (start === true) {
509
- resetMaskSet.call(inputmask);
510
- maskset.tests = {}; //refresh tests after possible alternating
511
- start = 0;
512
- end = buffer.length;
513
- p = determineNewCaretPosition.call(inputmask, { begin: 0, end: 0 }, false).begin;
514
- } else {
515
- for (i = start; i < end; i++) {
516
- delete maskset.validPositions[i];
517
- }
518
- p = start;
519
- }
520
-
521
- var keypress = new $.Event("keypress");
522
- for (i = start; i < end; i++) {
523
- keypress.keyCode = bffr[i].toString().charCodeAt(0);
524
- inputmask.ignorable = false; //make sure ignorable is ignored ;-)
525
- var valResult = EventHandlers.keypressEvent.call(inputmask, keypress, true, false, false, p);
526
- if (valResult !== false && valResult !== undefined) {
527
- p = valResult.forwardPosition;
528
- }
529
- }
530
-
531
- opts.skipOptionalPartCharacter = skipOptionalPartCharacter;
532
- }
533
-
534
- //tobe put on prototype?
535
- //fill in best positions according the current input
536
- function trackbackPositions(originalPos, newPos, fillOnly) {
537
- const inputmask = this,
538
- maskset = this.maskset,
539
- $ = this.dependencyLib;
540
-
541
- // console.log("trackbackPositions " + originalPos + " " + newPos);
542
- if (originalPos === undefined) {
543
- //find previous valid
544
- for (originalPos = newPos - 1; originalPos > 0; originalPos--) {
545
- if (maskset.validPositions[originalPos]) break;
546
- }
547
- }
548
- for (var ps = originalPos; ps < newPos; ps++) {
549
- if (maskset.validPositions[ps] === undefined && !isMask.call(inputmask, ps, false)) {
550
- var vp = ps == 0 ? getTest.call(inputmask, ps) : maskset.validPositions[ps - 1];
551
- if (vp) {
552
- var tests = getTests.call(inputmask, ps).slice();
553
- if (tests[tests.length - 1].match.def === "") tests.pop();
554
- var bestMatch = determineTestTemplate.call(inputmask, ps, tests), np;
555
- if (bestMatch && (bestMatch.match.jit !== true || (bestMatch.match.newBlockMarker === "master" && (np = maskset.validPositions[ps + 1]) && np.match.optionalQuantifier === true))) {
556
- bestMatch = $.extend({}, bestMatch, {
557
- "input": getPlaceholder.call(inputmask, ps, bestMatch.match, true) || bestMatch.match.def
558
- });
559
- bestMatch.generatedInput = true;
560
- revalidateMask.call(inputmask, ps, bestMatch, true);
561
-
562
- if (fillOnly !== true) {
563
- //revalidate the new position to update the locator value
564
- var cvpInput = maskset.validPositions[newPos].input;
565
- maskset.validPositions[newPos] = undefined;
566
- return isValid.call(inputmask, newPos, cvpInput, true, true);
567
- }
568
- }
569
- }
570
- }
571
- }
572
- }
573
-
574
- //tobe put on prototype?
575
- function revalidateMask(pos, validTest, fromIsValid, validatedPos) {
576
- const inputmask = this,
577
- maskset = this.maskset,
578
- opts = this.opts,
579
- $ = this.dependencyLib;
580
-
581
- function IsEnclosedStatic(pos, valids, selection) {
582
- var posMatch = valids[pos];
583
- if (posMatch !== undefined && posMatch.match.static === true && posMatch.match.optionality !== true && (valids[0] === undefined || valids[0].alternation === undefined)) {
584
- var prevMatch = selection.begin <= pos - 1 ? valids[pos - 1] && valids[pos - 1].match.static === true && valids[pos - 1] : valids[pos - 1],
585
- nextMatch = selection.end > pos + 1 ? valids[pos + 1] && valids[pos + 1].match.static === true && valids[pos + 1] : valids[pos + 1];
586
- return prevMatch && nextMatch;
587
- }
588
- return false;
589
- }
590
-
591
- var offset = 0, begin = pos.begin !== undefined ? pos.begin : pos, end = pos.end !== undefined ? pos.end : pos,
592
- valid = true;
593
- if (pos.begin > pos.end) {
594
- begin = pos.end;
595
- end = pos.begin;
596
- }
597
-
598
- validatedPos = validatedPos !== undefined ? validatedPos : begin;
599
- if (begin !== end || (opts.insertMode && maskset.validPositions[validatedPos] !== undefined && fromIsValid === undefined) || validTest === undefined || validTest.match.optionalQuantifier || validTest.match.optionality) {
600
- //reposition & revalidate others
601
- var positionsClone = $.extend(true, {}, maskset.validPositions),
602
- lvp = getLastValidPosition.call(inputmask, undefined, true),
603
- i;
604
- maskset.p = begin; //needed for alternated position after overtype selection
605
-
606
- for (i = lvp; i >= begin; i--) {
607
- delete maskset.validPositions[i];
608
- if (validTest === undefined) delete maskset.tests[i + 1];
609
- }
610
-
611
- var j = validatedPos,
612
- posMatch = j, t, canMatch, test;
613
-
614
- if (validTest) {
615
- maskset.validPositions[validatedPos] = $.extend(true, {}, validTest);
616
- posMatch++;
617
- j++;
618
- }
619
-
620
- for (i = validTest ? end : end - 1; i <= lvp; i++) {
621
- if ((t = positionsClone[i]) !== undefined && t.generatedInput !== true &&
622
- (i >= end || (i >= begin && IsEnclosedStatic(i, positionsClone, {
623
- begin: begin,
624
- end: end
625
- })))) {
626
- while (test = getTest.call(inputmask, posMatch), test.match.def !== "") { //loop needed to match further positions
627
- if ((canMatch = positionCanMatchDefinition.call(inputmask, posMatch, t, opts)) !== false || t.match.def === "+") { //validated match //we still need some hackery for the + validator (numeric alias)
628
- if (t.match.def === "+") getBuffer.call(inputmask, true);
629
- var result = isValid.call(inputmask, posMatch, t.input, t.match.def !== "+", /*t.match.def !== "+"*/ true);
630
- valid = result !== false;
631
- j = (result.pos || posMatch) + 1;
632
- if (!valid && canMatch) break;
633
- } else {
634
- valid = false;
635
- }
636
- if (valid) {
637
- if (validTest === undefined && t.match.static && i === pos.begin) offset++;
638
- break;
639
- }
640
- if (!valid && getBuffer.call(inputmask), posMatch > maskset.maskLength) {
641
- break;
642
- }
643
- posMatch++;
644
- }
645
- if (getTest.call(inputmask, posMatch).match.def == "") {
646
- valid = false;
647
- }
648
- //restore position
649
- posMatch = j;
650
- }
651
- if (!valid) break;
652
- }
653
- if (!valid) {
654
- maskset.validPositions = $.extend(true, {}, positionsClone);
655
- resetMaskSet.call(inputmask, true);
656
- return false;
657
- }
658
- } else if (validTest && getTest.call(inputmask, validatedPos).match.cd === validTest.match.cd) {
659
- maskset.validPositions[validatedPos] = $.extend(true, {}, validTest);
660
- }
661
-
662
- resetMaskSet.call(inputmask, true);
663
- return offset;
664
- }