PageSourceSearch

https://maxnet.ua/static/src/js/jquery.maskedinput.js

js maxnet.ua collected 2026-09-24 12:21:14 UTC 10,826 bytes, 448 lines download raw bytes

vendor: 10,826 bytes, lines 1-448
1(function (factory) {
2    if (typeof define === 'function' && define.amd) {
3        // AMD. Register as an anonymous module.
4        define(['jquery'], factory);
5    } else if (typeof exports === 'object') {
6        // Node/CommonJS
7        factory(require('jquery'));
8    } else {
9        // Browser globals
10        factory(jQuery);
11    }
12}(function ($) {
13
14var ua = navigator.userAgent,
15	iPhone = /iphone/i.test(ua),
16	chrome = /chrome/i.test(ua),
17	android = /android/i.test(ua),
18	caretTimeoutId;
19
20$.mask = {
21	//Predefined character definitions
22	definitions: {
23		'9': "[0-9]",
24		'a': "[A-Za-z]",
25		'*': "[A-Za-z0-9]"
26	},
27	autoclear: true,
28	dataName: "rawMaskFn",
29	placeholder: '_'
30};
31
32$.fn.extend({
33	//Helper Function for Caret positioning
34	caret: function(begin, end) {
35		var range;
36
37		if (this.length === 0 || this.is(":hidden") || this.get(0) !== document.activeElement) {
38			return;
39		}
40
41		if (typeof begin == 'number') {
42			end = (typeof end === 'number') ? end : begin;
43			return this.each(function() {
44				if (this.setSelectionRange) {
45					this.setSelectionRange(begin, end);
46				} else if (this.createTextRange) {
47					range = this.createTextRange();
48					range.collapse(true);
49					range.moveEnd('character', end);
50					range.moveStart('character', begin);
51					range.select();
52				}
53			});
54		} else {
55			if (this[0].setSelectionRange) {
56				begin = this[0].selectionStart;
57				end = this[0].selectionEnd;
58			} else if (document.selection && document.selection.createRange) {
59				range = document.selection.createRange();
60				begin = 0 - range.duplicate().moveStart('character', -100000);
61				end = begin + range.text.length;
62			}
63			return { begin: begin, end: end };
64		}
65	},
66	unmask: function() {
67		return this.trigger("unmask");
68	},
69	mask: function(mask, settings) {
70		var input,
71			defs,
72			tests,
73			partialPosition,
74			firstNonMaskPos,
75            lastRequiredNonMaskPos,
76            len,
77            oldVal;
78
79		if (!mask && this.length > 0) {
80			input = $(this[0]);
81            var fn = input.data($.mask.dataName)
82			return fn?fn():undefined;
83		}
84
85		settings = $.extend({
86			autoclear: $.mask.autoclear,
87			placeholder: $.mask.placeholder, // Load default placeholder
88			completed: null
89		}, settings);
90
91
92		defs = $.mask.definitions;
93		tests = [];
94		partialPosition = len = mask.length;
95		firstNonMaskPos = null;
96
97		mask = String(mask);
98
99		$.each(mask.split(""), function(i, c) {
100			if (c == '?') {
101				len--;
102				partialPosition = i;
103			} else if (defs[c]) {
104				tests.push(new RegExp(defs[c]));
105				if (firstNonMaskPos === null) {
106					firstNonMaskPos = tests.length - 1;
107				}
108                if(i < partialPosition){
109                    lastRequiredNonMaskPos = tests.length - 1;
110                }
111			} else {
112				tests.push(null);
113			}
114		});
115
116		return this.trigger("unmask").each(function() {
117			var input = $(this),
118				buffer = $.map(
119    				mask.split(""),
120    				function(c, i) {
121    					if (c != '?') {
122    						return defs[c] ? getPlaceholder(i) : c;
123    					}
124    				}),
125				defaultBuffer = buffer.join(''),
126				focusText = input.val();
127
128            function tryFireCompleted(){
129                if (!settings.completed) {
130                    return;
131                }
132
133                for (var i = firstNonMaskPos; i <= lastRequiredNonMaskPos; i++) {
134                    if (tests[i] && buffer[i] === getPlaceholder(i)) {
135                        return;
136                    }
137                }
138                settings.completed.call(input);
139            }
140
141            function getPlaceholder(i){
142                if(i < settings.placeholder.length)
143                    return settings.placeholder.charAt(i);
144                return settings.placeholder.charAt(0);
145            }
146
147			function seekNext(pos) {
148				while (++pos < len && !tests[pos]);
149				return pos;
150			}
151
152			function seekPrev(pos) {
153				while (--pos >= 0 && !tests[pos]);
154				return pos;
155			}
156
157			function shiftL(begin,end) {
158				var i,
159					j;
160
161				if (begin<0) {
162					return;
163				}
164
165				for (i = begin, j = seekNext(end); i < len; i++) {
166					if (tests[i]) {
167						if (j < len && tests[i].test(buffer[j])) {
168							buffer[i] = buffer[j];
169							buffer[j] = getPlaceholder(j);
170						} else {
171							break;
172						}
173
174						j = seekNext(j);
175					}
176				}
177				writeBuffer();
178				input.caret(Math.max(firstNonMaskPos, begin));
179			}
180
181			function shiftR(pos) {
182				var i,
183					c,
184					j,
185					t;
186
187				for (i = pos, c = getPlaceholder(pos); i < len; i++) {
188					if (tests[i]) {
189						j = seekNext(i);
190						t = buffer[i];
191						buffer[i] = c;
192						if (j < len && tests[j].test(t)) {
193							c = t;
194						} else {
195							break;
196						}
197					}
198				}
199			}
200
201			function androidInputEvent(e) {
202				var curVal = input.val();
203				var pos = input.caret();
204				if (oldVal && oldVal.length && oldVal.length > curVal.length ) {
205					// a deletion or backspace happened
206					checkVal(true);
207					while (pos.begin > 0 && !tests[pos.begin-1])
208						pos.begin--;
209					if (pos.begin === 0)
210					{
211						while (pos.begin < firstNonMaskPos && !tests[pos.begin])
212							pos.begin++;
213					}
214					input.caret(pos.begin,pos.begin);
215				} else {
216					var pos2 = checkVal(true);
217					var lastEnteredValue = curVal.charAt(pos.begin);
218					if (pos.begin < len){
219						if(!tests[pos.begin]){
220							pos.begin++;
221							if(tests[pos.begin].test(lastEnteredValue)){
222								pos.begin++;
223							}
224						}else{
225							if(tests[pos.begin].test(lastEnteredValue)){
226								pos.begin++;
227							}
228						}
229					}
230					input.caret(pos.begin,pos.begin);
231				}
232				tryFireCompleted();
233			}
234
235
236			function blurEvent(e) {
237                checkVal();
238
239                if (input.val() != focusText)
240                    input.change();
241            }
242
243			function keydownEvent(e) {
244                if (input.prop("readonly")){
245                    return;
246                }
247
248				var k = e.which || e.keyCode,
249					pos,
250					begin,
251					end;
252                    oldVal = input.val();
253				//backspace, delete, and escape get special treatment
254				if (k === 8 || k === 46 || (iPhone && k === 127)) {
255					pos = input.caret();
256					begin = pos.begin;
257					end = pos.end;
258
259					if (end - begin === 0) {
260						begin=k!==46?seekPrev(begin):(end=seekNext(begin-1));
261						end=k===46?seekNext(end):end;
262					}
263					clearBuffer(begin, end);
264					shiftL(begin, end - 1);
265
266					e.preventDefault();
267				} else if( k === 13 ) { // enter
268					blurEvent.call(this, e);
269				} else if (k === 27) { // escape
270					input.val(focusText);
271					input.caret(0, checkVal());
272					e.preventDefault();
273				}
274			}
275
276			function keypressEvent(e) {
277                if (input.prop("readonly")){
278                    return;
279                }
280
281				var k = e.which || e.keyCode,
282					pos = input.caret(),
283					p,
284					c,
285					next;
286
287				if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore
288					return;
289				} else if ( k && k !== 13 ) {
290					if (pos.end - pos.begin !== 0){
291						clearBuffer(pos.begin, pos.end);
292						shiftL(pos.begin, pos.end-1);
293					}
294
295					p = seekNext(pos.begin - 1);
296					if (p < len) {
297						c = String.fromCharCode(k);
298						if (tests[p].test(c)) {
299							shiftR(p);
300
301							buffer[p] = c;
302							writeBuffer();
303							next = seekNext(p);
304
305							if(android){
306								//Path for CSP Violation on FireFox OS 1.1
307								var proxy = function() {
308									$.proxy($.fn.caret,input,next)();
309								};
310
311								setTimeout(proxy,0);
312							}else{
313								input.caret(next);
314							}
315                            if(pos.begin <= lastRequiredNonMaskPos){
316		                         tryFireCompleted();
317                             }
318						}
319					}
320					e.preventDefault();
321				}
322			}
323
324			function clearBuffer(start, end) {
325				var i;
326				for (i = start; i < end && i < len; i++) {
327					if (tests[i]) {
328						buffer[i] = getPlaceholder(i);
329					}
330				}
331			}
332
333			function writeBuffer() { input.val(buffer.join('')); }
334
335			function checkVal(allow) {
336				//try to place characters where they belong
337				var test = input.val(),
338					lastMatch = -1,
339					i,
340					c,
341					pos;
342
343				for (i = 0, pos = 0; i < len; i++) {
344					if (tests[i]) {
345						buffer[i] = getPlaceholder(i);
346						while (pos++ < test.length) {
347							c = test.charAt(pos - 1);
348							if (tests[i].test(c)) {
349								buffer[i] = c;
350								lastMatch = i;
351								break;
352							}
353						}
354						if (pos > test.length) {
355							clearBuffer(i + 1, len);
356							break;
357						}
358					} else {
359                        if (buffer[i] === test.charAt(pos)) {
360                            pos++;
361                        }
362                        if( i < partialPosition){
363                            lastMatch = i;
364                        }
365					}
366				}
367				if (allow) {
368					writeBuffer();
369				} else if (lastMatch + 1 < partialPosition) {
370					if (settings.autoclear || buffer.join('') === defaultBuffer) {
371						// Invalid value. Remove it and replace it with the
372						// mask, which is the default behavior.
373						if(input.val()) input.val("");
374						clearBuffer(0, len);
375					} else {
376						// Invalid value, but we opt to show the value to the
377						// user and allow them to correct their mistake.
378						writeBuffer();
379					}
380				} else {
381					writeBuffer();
382					input.val(input.val().substring(0, lastMatch + 1));
383				}
384				return (partialPosition ? i : firstNonMaskPos);
385			}
386
387			input.data($.mask.dataName,function(){
388				return $.map(buffer, function(c, i) {
389					return tests[i]&&c!=getPlaceholder(i) ? c : null;
390				}).join('');
391			});
392
393
394			input
395				.one("unmask", function() {
396					input
397						.off(".mask")
398						.removeData($.mask.dataName);
399				})
400				.on("focus.mask", function() {
401                    if (input.prop("readonly")){
402                        return;
403                    }
404
405					clearTimeout(caretTimeoutId);
406					var pos;
407
408					focusText = input.val();
409
410					pos = checkVal();
411
412					caretTimeoutId = setTimeout(function(){
413                        if(input.get(0) !== document.activeElement){
414                            return;
415                        }
416						writeBuffer();
417						if (pos == mask.replace("?","").length) {
418							input.caret(0, pos);
419						} else {
420							input.caret(pos);
421						}
422					}, 10);
423				})
424				.on("blur.mask", blurEvent)
425				.on("keydown.mask", keydownEvent)
426				.on("keypress.mask", keypressEvent)
427				.on("input.mask paste.mask", function() {
428                    if (input.prop("readonly")){
429                        return;
430                    }
431
432					setTimeout(function() {
433						var pos=checkVal(true);
434						input.caret(pos);
435                        tryFireCompleted();
436					}, 0);
437				});
438                if (chrome && android)
439                {
440                    input
441                        .off('input.mask')
442                        .on('input.mask', androidInputEvent);
443                }
444				checkVal(); //Perform initial check for existing values
445		});
446	}
447});
448}));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.