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.
- package/README.md +13 -19
- package/dist/index.cjs +191 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +34 -3
- package/dist/index.js +184 -1
- package/dist/index.js.map +1 -1
- package/package.json +49 -48
- package/src/index.tsx +3 -2
- package/src/types.ts +6 -0
- package/src/useMaskInput.ts +12 -9
- package/src/utils.spec.ts +14 -0
- package/src/utils.ts +23 -0
- package/src/withHookFormMask.ts +8 -17
- package/src/withMask.ts +5 -6
- package/dist/example/App.example.d.ts +0 -3
- package/dist/example/index.d.ts +0 -1
- package/dist/index.modern.js +0 -2
- package/dist/index.modern.js.map +0 -1
- package/dist/index.umd.js +0 -2
- package/dist/index.umd.js.map +0 -1
- package/dist/useMaskInput.d.ts +0 -9
- package/dist/withHookFormMask.d.ts +0 -16
- package/dist/withMask.d.ts +0 -3
- package/node_modules/inputmask/LICENSE.txt +0 -7
- package/node_modules/inputmask/README.md +0 -1279
- package/node_modules/inputmask/bundle.js +0 -6
- package/node_modules/inputmask/dist/bindings/inputmask.binding.js +0 -26
- package/node_modules/inputmask/dist/inputmask.es6.js +0 -5
- package/node_modules/inputmask/dist/inputmask.js +0 -3031
- package/node_modules/inputmask/dist/inputmask.min.js +0 -8
- package/node_modules/inputmask/dist/jquery.inputmask.js +0 -2985
- package/node_modules/inputmask/dist/jquery.inputmask.min.js +0 -8
- package/node_modules/inputmask/lib/bindings/inputmask.binding.js +0 -26
- package/node_modules/inputmask/lib/bindings/inputmask.es6.js +0 -5
- package/node_modules/inputmask/lib/canUseDOM.js +0 -7
- package/node_modules/inputmask/lib/defaults.js +0 -101
- package/node_modules/inputmask/lib/definitions.js +0 -13
- package/node_modules/inputmask/lib/dependencyLibs/data.js +0 -8
- package/node_modules/inputmask/lib/dependencyLibs/events.js +0 -199
- package/node_modules/inputmask/lib/dependencyLibs/extend.js +0 -58
- package/node_modules/inputmask/lib/dependencyLibs/inputmask.dependencyLib.jquery.js +0 -13
- package/node_modules/inputmask/lib/dependencyLibs/inputmask.dependencyLib.js +0 -41
- package/node_modules/inputmask/lib/environment.js +0 -9
- package/node_modules/inputmask/lib/escapeRegex.js +0 -4
- package/node_modules/inputmask/lib/eventhandlers.js +0 -513
- package/node_modules/inputmask/lib/eventruler.js +0 -124
- package/node_modules/inputmask/lib/extensions/inputmask.date.extensions.js +0 -588
- package/node_modules/inputmask/lib/extensions/inputmask.extensions.js +0 -133
- package/node_modules/inputmask/lib/extensions/inputmask.numeric.extensions.js +0 -631
- package/node_modules/inputmask/lib/global/window.js +0 -3
- package/node_modules/inputmask/lib/inputHandling.js +0 -252
- package/node_modules/inputmask/lib/inputmask.js +0 -355
- package/node_modules/inputmask/lib/inputmaskElement.js +0 -33
- package/node_modules/inputmask/lib/jquery.inputmask.js +0 -81
- package/node_modules/inputmask/lib/keycode.json +0 -25
- package/node_modules/inputmask/lib/mask-lexer.js +0 -467
- package/node_modules/inputmask/lib/mask.js +0 -244
- package/node_modules/inputmask/lib/masktoken.js +0 -13
- package/node_modules/inputmask/lib/polyfills/Array.includes.js +0 -48
- package/node_modules/inputmask/lib/polyfills/Object.getPrototypeOf.js +0 -7
- package/node_modules/inputmask/lib/positioning.js +0 -348
- package/node_modules/inputmask/lib/validation-tests.js +0 -597
- package/node_modules/inputmask/lib/validation.js +0 -664
- package/node_modules/inputmask/package.json +0 -60
- package/src/example/App.example.tsx +0 -68
- 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
|
-
}
|