PageSourceSearch

https://sawexpo.de/scripts/jquery.inputmask-3.x/js/jquery.inputmask.date.extensions.js

js sawexpo.de collected 2026-10-05 11:01:59 UTC 24,169 bytes, 506 lines download raw bytes

1/*
2Input Mask plugin extensions
3http://github.com/RobinHerbots/jquery.inputmask
4Copyright (c) 2010 - 2014 Robin Herbots
5Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
6Version: 0.0.0
7
8Optional extensions on the jquery.inputmask base
9*/
10(function ($) {
11    //date & time aliases
12    $.extend($.inputmask.defaults.definitions, {
13        'h': { //hours
14            validator: "[01][0-9]|2[0-3]",
15            cardinality: 2,
16            prevalidator: [{ validator: "[0-2]", cardinality: 1 }]
17        },
18        's': { //seconds || minutes
19            validator: "[0-5][0-9]",
20            cardinality: 2,
21            prevalidator: [{ validator: "[0-5]", cardinality: 1 }]
22        },
23        'd': { //basic day
24            validator: "0[1-9]|[12][0-9]|3[01]",
25            cardinality: 2,
26            prevalidator: [{ validator: "[0-3]", cardinality: 1 }]
27        },
28        'm': { //basic month
29            validator: "0[1-9]|1[012]",
30            cardinality: 2,
31            prevalidator: [{ validator: "[01]", cardinality: 1 }]
32        },
33        'y': { //basic year
34            validator: "(19|20)\\d{2}",
35            cardinality: 4,
36            prevalidator: [
37                        { validator: "[12]", cardinality: 1 },
38                        { validator: "(19|20)", cardinality: 2 },
39                        { validator: "(19|20)\\d", cardinality: 3 }
40            ]
41        }
42    });
43    $.extend($.inputmask.defaults.aliases, {
44        'dd/mm/yyyy': {
45            mask: "1/2/y",
46            placeholder: "dd/mm/yyyy",
47            regex: {
48                val1pre: new RegExp("[0-3]"), //daypre
49                val1: new RegExp("0[1-9]|[12][0-9]|3[01]"), //day
50                val2pre: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])"); }, //monthpre
51                val2: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); 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]))"); }//month
52            },
53            leapday: "29/02/",
54            separator: '/',
55            yearrange: { minyear: 1900, maxyear: 2099 },
56            isInYearRange: function (chrs, minyear, maxyear) {
57                if (isNaN(chrs)) return false;
58                var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length)));
59                var enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
60                return (!isNaN(enteredyear) ? minyear <= enteredyear && enteredyear <= maxyear : false) ||
61            		   (!isNaN(enteredyear2) ? minyear <= enteredyear2 && enteredyear2 <= maxyear : false);
62            },
63            determinebaseyear: function (minyear, maxyear, hint) {
64                var currentyear = (new Date()).getFullYear();
65                if (minyear > currentyear) return minyear;
66                if (maxyear < currentyear) {
67                    var maxYearPrefix = maxyear.toString().slice(0, 2);
68                    var maxYearPostfix = maxyear.toString().slice(2, 4);
69                    while (maxyear < maxYearPrefix + hint) {
70                        maxYearPrefix--;
71                    }
72                    var maxxYear = maxYearPrefix + maxYearPostfix;
73                    return minyear > maxxYear ? minyear : maxxYear;
74                }
75
76                return currentyear;
77            },
78            onKeyUp: function (e, buffer, opts) {
79                var $input = $(this);
80                if (e.ctrlKey && e.keyCode == $.inputmask.keyCode.RIGHT) {
81                    var today = new Date();
82                    $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString());
83                    $input.triggerHandler('setvalue.inputmask');
84                }
85            },
86            getFrontValue: function (mask, buffer, opts) {
87                var start = 0, length = 0;
88                for (var i = 0; i < mask.length; i++) {
89                    if (mask.charAt(i) == "2")
90                        break;
91                    var definition = opts.definitions[mask.charAt(i)];
92                    if (definition) {
93                        start += length;
94                        length = definition.cardinality;
95                    } else length++;
96                }
97                return buffer.join('').substr(start, length);
98            },
99            definitions: {
100                '1': { //val1 ~ day or month
101                    validator: function (chrs, maskset, pos, strict, opts) {
102                        var isValid = opts.regex.val1.test(chrs);
103                        if (!strict && !isValid) {
104                            if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) {
105                                isValid = opts.regex.val1.test("0" + chrs.charAt(0));
106                                if (isValid) {
107                                    maskset.buffer[pos - 1] = "0";
108                                    return { "refreshFromBuffer": { start: pos - 1, end: pos }, "pos": pos, "c": chrs.charAt(0) };
109                                }
110                            }
111                        }
112                        return isValid;
113                    },
114                    cardinality: 2,
115                    prevalidator: [{
116                        validator: function (chrs, maskset, pos, strict, opts) {
117                            if (!isNaN(maskset.buffer[pos + 1])) chrs += maskset.buffer[pos + 1];
118                            var isValid = chrs.length == 1 ? opts.regex.val1pre.test(chrs) : opts.regex.val1.test(chrs);
119                            if (!strict && !isValid) {
120                                isValid = opts.regex.val1.test("0" + chrs);
121                                if (isValid) {
122                                    maskset.buffer[pos] = "0";
123                                    pos++;
124                                    return { "pos": pos };
125                                }
126                            }
127                            return isValid;
128                        }, cardinality: 1
129                    }]
130                },
131                '2': { //val2 ~ day or month
132                    validator: function (chrs, maskset, pos, strict, opts) {
133                        var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
134                        if (frontValue.indexOf(opts.placeholder[0]) != -1) frontValue = "01" + opts.separator;
135                        var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
136                        if (!strict && !isValid) {
137                            if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) {
138                                isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0));
139                                if (isValid) {
140                                    maskset.buffer[pos - 1] = "0";
141                                    return { "refreshFromBuffer": { start: pos - 1, end: pos }, "pos": pos, "c": chrs.charAt(0) };
142                                }
143                            }
144                        }
145
146                        //check leap yeap
147                        if ((opts.mask.indexOf("2") == opts.mask.length - 1) && isValid) {
148                            var dayMonthValue = maskset.buffer.join('').substr(4, 4) + chrs;
149                            if (dayMonthValue != opts.leapday)
150                                return true;
151                            else {
152                                var year = parseInt(maskset.buffer.join('').substr(0, 4), 10);  //detect leap year
153                                if (year % 4 === 0)
154                                    if (year % 100 === 0)
155                                        if (year % 400 === 0)
156                                            return true;
157                                        else return false;
158                                    else return true;
159                                else return false;
160                            }
161                        }
162
163                        return isValid;
164                    },
165                    cardinality: 2,
166                    prevalidator: [{
167                        validator: function (chrs, maskset, pos, strict, opts) {
168                            if (!isNaN(maskset.buffer[pos + 1])) chrs += maskset.buffer[pos + 1];
169                            var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
170                            if (frontValue.indexOf(opts.placeholder[0]) != -1) frontValue = "01" + opts.separator;
171                            var isValid = chrs.length == 1 ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
172                            if (!strict && !isValid) {
173                                isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs);
174                                if (isValid) {
175                                    maskset.buffer[pos] = "0";
176                                    pos++;
177                                    return { "pos": pos };
178                                }
179                            }
180                            return isValid;
181                        }, cardinality: 1
182                    }]
183                },
184                'y': { //year
185                    validator: function (chrs, maskset, pos, strict, opts) {
186                        if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
187                            var dayMonthValue = maskset.buffer.join('').substr(0, 6);
188                            if (dayMonthValue != opts.leapday)
189                                return true;
190                            else {
191                                var year = parseInt(chrs, 10);//detect leap year
192                                if (year % 4 === 0)
193                                    if (year % 100 === 0)
194                                        if (year % 400 === 0)
195                                            return true;
196                                        else return false;
197                                    else return true;
198                                else return false;
199                            }
200                        } else return false;
201                    },
202                    cardinality: 4,
203                    prevalidator: [
204                {
205                    validator: function (chrs, maskset, pos, strict, opts) {
206                        var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
207                        if (!strict && !isValid) {
208                            var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
209
210                            isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
211                            if (isValid) {
212                                maskset.buffer[pos++] = yearPrefix.charAt(0);
213                                return { "pos": pos };
214                            }
215                            yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2);
216
217                            isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
218                            if (isValid) {
219                                maskset.buffer[pos++] = yearPrefix.charAt(0);
220                                maskset.buffer[pos++] = yearPrefix.charAt(1);
221                                return { "pos": pos };
222                            }
223                        }
224                        return isValid;
225                    },
226                    cardinality: 1
227                },
228                {
229                    validator: function (chrs, maskset, pos, strict, opts) {
230                        var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
231                        if (!strict && !isValid) {
232                            var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
233
234                            isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear);
235                            if (isValid) {
236                                maskset.buffer[pos++] = yearPrefix.charAt(1);
237                                return { "pos": pos };
238                            }
239
240                            yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
241                            if (opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
242                                var dayMonthValue = maskset.buffer.join('').substr(0, 6);
243                                if (dayMonthValue != opts.leapday)
244                                    isValid = true;
245                                else {
246                                    var year = parseInt(chrs, 10);//detect leap year
247                                    if (year % 4 === 0)
248                                        if (year % 100 === 0)
249                                            if (year % 400 === 0)
250                                                isValid = true;
251                                            else isValid = false;
252                                        else isValid = true;
253                                    else isValid = false;
254                                }
255                            } else isValid = false;
256                            if (isValid) {
257                                maskset.buffer[pos - 1] = yearPrefix.charAt(0);
258                                maskset.buffer[pos++] = yearPrefix.charAt(1);
259                                maskset.buffer[pos++] = chrs.charAt(0);
260                                return { "refreshFromBuffer": { start: pos - 3, end: pos }, "pos": pos };
261                            }
262                        }
263                        return isValid;
264                    }, cardinality: 2
265                },
266                {
267                    validator: function (chrs, maskset, pos, strict, opts) {
268                        return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
269                    }, cardinality: 3
270                }
271                    ]
272                }
273            },
274            insertMode: false,
275            autoUnmask: false
276        },
277        'mm/dd/yyyy': {
278            placeholder: "mm/dd/yyyy",
279            alias: "dd/mm/yyyy", //reuse functionality of dd/mm/yyyy alias
280            regex: {
281                val2pre: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); }, //daypre
282                val2: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); 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)"); }, //day
283                val1pre: new RegExp("[01]"), //monthpre
284                val1: new RegExp("0[1-9]|1[012]") //month
285            },
286            leapday: "02/29/",
287            onKeyUp: function (e, buffer, opts) {
288                var $input = $(this);
289                if (e.ctrlKey && e.keyCode == $.inputmask.keyCode.RIGHT) {
290                    var today = new Date();
291                    $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());
292                    $input.triggerHandler('setvalue.inputmask');
293                }
294            }
295        },
296        'yyyy/mm/dd': {
297            mask: "y/1/2",
298            placeholder: "yyyy/mm/dd",
299            alias: "mm/dd/yyyy",
300            leapday: "/02/29",
301            onKeyUp: function (e, buffer, opts) {
302                var $input = $(this);
303                if (e.ctrlKey && e.keyCode == $.inputmask.keyCode.RIGHT) {
304                    var today = new Date();
305                    $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString());
306                    $input.triggerHandler('setvalue.inputmask');
307                }
308            }
309        },
310        'dd.mm.yyyy': {
311            mask: "1.2.y",
312            placeholder: "dd.mm.yyyy",
313            leapday: "29.02.",
314            separator: '.',
315            alias: "dd/mm/yyyy"
316        },
317        'dd-mm-yyyy': {
318            mask: "1-2-y",
319            placeholder: "dd-mm-yyyy",
320            leapday: "29-02-",
321            separator: '-',
322            alias: "dd/mm/yyyy"
323        },
324        'mm.dd.yyyy': {
325            mask: "1.2.y",
326            placeholder: "mm.dd.yyyy",
327            leapday: "02.29.",
328            separator: '.',
329            alias: "mm/dd/yyyy"
330        },
331        'mm-dd-yyyy': {
332            mask: "1-2-y",
333            placeholder: "mm-dd-yyyy",
334            leapday: "02-29-",
335            separator: '-',
336            alias: "mm/dd/yyyy"
337        },
338        'yyyy.mm.dd': {
339            mask: "y.1.2",
340            placeholder: "yyyy.mm.dd",
341            leapday: ".02.29",
342            separator: '.',
343            alias: "yyyy/mm/dd"
344        },
345        'yyyy-mm-dd': {
346            mask: "y-1-2",
347            placeholder: "yyyy-mm-dd",
348            leapday: "-02-29",
349            separator: '-',
350            alias: "yyyy/mm/dd"
351        },
352        'datetime': {
353            mask: "1/2/y h:s",
354            placeholder: "dd/mm/yyyy hh:mm",
355            alias: "dd/mm/yyyy",
356            regex: {
357                hrspre: new RegExp("[012]"), //hours pre
358                hrs24: new RegExp("2[0-4]|1[3-9]"),
359                hrs: new RegExp("[01][0-9]|2[0-4]"), //hours
360                ampm: new RegExp("^[a|p|A|P][m|M]"),
361                mspre: new RegExp("[0-5]"), //minutes/seconds pre
362                ms: new RegExp("[0-5][0-9]")
363            },
364            timeseparator: ':',
365            hourFormat: "24", // or 12
366            definitions: {
367                'h': { //hours
368                    validator: function (chrs, maskset, pos, strict, opts) {
369                        if (opts.hourFormat == "24") {
370                            if (parseInt(chrs, 10) == 24) {
371                                maskset.buffer[pos - 1] = "0";
372                                maskset.buffer[pos] = "0";
373                                return { "refreshFromBuffer": { start: pos - 1, end: pos }, "c": "0" };
374                            }
375                        }
376
377                        var isValid = opts.regex.hrs.test(chrs);
378                        if (!strict && !isValid) {
379                            if (chrs.charAt(1) == opts.timeseparator || "-.:".indexOf(chrs.charAt(1)) != -1) {
380                                isValid = opts.regex.hrs.test("0" + chrs.charAt(0));
381                                if (isValid) {
382                                    maskset.buffer[pos - 1] = "0";
383                                    maskset.buffer[pos] = chrs.charAt(0);
384                                    pos++;
385                                    return { "refreshFromBuffer": { start: pos - 2, end: pos }, "pos": pos, "c": opts.timeseparator };
386                                }
387                            }
388                        }
389
390                        if (isValid && opts.hourFormat !== "24" && opts.regex.hrs24.test(chrs)) {
391
392                            var tmp = parseInt(chrs, 10);
393
394                            if (tmp == 24) {
395                                maskset.buffer[pos + 5] = "a";
396                                maskset.buffer[pos + 6] = "m";
397                            } else {
398                                maskset.buffer[pos + 5] = "p";
399                                maskset.buffer[pos + 6] = "m";
400                            }
401
402                            tmp = tmp - 12;
403
404                            if (tmp < 10) {
405                                maskset.buffer[pos] = tmp.toString();
406                                maskset.buffer[pos - 1] = "0";
407                            } else {
408                                maskset.buffer[pos] = tmp.toString().charAt(1);
409                                maskset.buffer[pos - 1] = tmp.toString().charAt(0);
410                            }
411
412                            return { "refreshFromBuffer": { start: pos - 1, end: pos + 6 }, "c": maskset.buffer[pos] };
413                        }
414
415                        return isValid;
416                    },
417                    cardinality: 2,
418                    prevalidator: [{
419                        validator: function (chrs, maskset, pos, strict, opts) {
420                            var isValid = opts.regex.hrspre.test(chrs);
421                            if (!strict && !isValid) {
422                                isValid = opts.regex.hrs.test("0" + chrs);
423                                if (isValid) {
424                                    maskset.buffer[pos] = "0";
425                                    pos++;
426                                    return { "pos": pos };
427                                }
428                            }
429                            return isValid;
430                        }, cardinality: 1
431                    }]
432                },
433                's': { //seconds || minutes
434                    validator: "[0-5][0-9]",
435                    cardinality: 2,
436                    prevalidator: [
437                        {
438                            validator: function (chrs, maskset, pos, strict, opts) {
439                                var isValid = opts.regex.mspre.test(chrs);
440                                if (!strict && !isValid) {
441                                    isValid = opts.regex.ms.test("0" + chrs);
442                                    if (isValid) {
443                                        maskset.buffer[pos] = "0";
444                                        pos++;
445                                        return { "pos": pos };
446                                    }
447                                }
448                                return isValid;
449                            }, cardinality: 1
450                        }]
451                },
452                't': { //am/pm
453                    validator: function (chrs, maskset, pos, strict, opts) {
454                        return opts.regex.ampm.test(chrs + "m");
455                    },
456                    casing: "lower",
457                    cardinality: 1
458                }
459            },
460            insertMode: false,
461            autoUnmask: false
462        },
463        'datetime12': {
464            mask: "1/2/y h:s t\\m",
465            placeholder: "dd/mm/yyyy hh:mm xm",
466            alias: "datetime",
467            hourFormat: "12"
468        },
469        'hh:mm t': {
470            mask: "h:s t\\m",
471            placeholder: "hh:mm xm",
472            alias: "datetime",
473            hourFormat: "12"
474        },
475        'h:s t': {
476            mask: "h:s t\\m",
477            placeholder: "hh:mm xm",
478            alias: "datetime",
479            hourFormat: "12"
480        },
481        'hh:mm:ss': {
482            mask: "h:s:s",
483            placeholder: "hh:mm:ss",
484            alias: "datetime",
485            autoUnmask: false
486        },
487        'hh:mm': {
488            mask: "h:s",
489            placeholder: "hh:mm",
490            alias: "datetime",
491            autoUnmask: false
492        },
493        'date': {
494            alias: "dd/mm/yyyy" // "mm/dd/yyyy"
495        },
496        'mm/yyyy': {
497            mask: "1/y",
498            placeholder: "mm/yyyy",
499            leapday: "donotuse",
500            separator: '/',
501            alias: "mm/dd/yyyy"
502        }
503    });
504
505    return $.fn.inputmask;
506})(jQuery);

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.