flatpickr 2.2.4.0 → 2.2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/flatpickr/version.rb +1 -1
- data/vendor/assets/javascripts/flatpickr.js +158 -107
- data/vendor/assets/javascripts/flatpickr/l10n/ru.js +2 -0
- data/vendor/assets/javascripts/flatpickr/l10n/th.js +24 -0
- data/vendor/assets/stylesheets/flatpickr.css +1 -13
- data/vendor/assets/stylesheets/flatpickr/rtl/flatpickr.min.css +4 -4
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/airbnb.rtl.css +645 -7
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/base16_flat.rtl.css +608 -7
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/confetti.rtl.css +613 -7
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/dark.rtl.css +608 -7
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/material_blue.rtl.css +613 -7
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/material_green.rtl.css +613 -7
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/material_orange.rtl.css +613 -7
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/material_red.rtl.css +613 -7
- data/vendor/assets/stylesheets/flatpickr/themes/airbnb.css +1 -13
- data/vendor/assets/stylesheets/flatpickr/themes/base16_flat.css +1 -13
- data/vendor/assets/stylesheets/flatpickr/themes/confetti.css +1 -13
- data/vendor/assets/stylesheets/flatpickr/themes/dark.css +1 -13
- data/vendor/assets/stylesheets/flatpickr/themes/material_blue.css +1 -13
- data/vendor/assets/stylesheets/flatpickr/themes/material_green.css +1 -13
- data/vendor/assets/stylesheets/flatpickr/themes/material_orange.css +1 -13
- data/vendor/assets/stylesheets/flatpickr/themes/material_red.css +1 -13
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 951054831d39a2959e61dce90834939bfeeec9f6
|
4
|
+
data.tar.gz: a46b5ec5ab3db38a4897cbad923f45e68f934a45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 315a6d09cc7103d0dfa7257723635fc7242d82dfe80a54bc110bb4d3219e29fdbf39d66507828f28a77be9a8170e83e41dad40be2ac67ca7b35f0c482cec5f77
|
7
|
+
data.tar.gz: 46ec2988ba6bd95a93208a76132944a7c530afe5d1f3f6c5ab72ffe19a9f236e018ac4b9cfa98c969e078e08b5626ed83eb9d158c46b8bf7aad6a097f5802933
|
data/lib/flatpickr/version.rb
CHANGED
@@ -2,7 +2,7 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument
|
|
2
2
|
|
3
3
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
4
4
|
|
5
|
-
/*! flatpickr v2.2.
|
5
|
+
/*! flatpickr v2.2.5, @license MIT */
|
6
6
|
function Flatpickr(element, config) {
|
7
7
|
var self = this;
|
8
8
|
|
@@ -31,7 +31,6 @@ function Flatpickr(element, config) {
|
|
31
31
|
self.formatDate = formatDate;
|
32
32
|
self.jumpToDate = jumpToDate;
|
33
33
|
self.open = open;
|
34
|
-
self.parseDate = parseDate;
|
35
34
|
self.redraw = redraw;
|
36
35
|
self.set = set;
|
37
36
|
self.setDate = setDate;
|
@@ -63,7 +62,9 @@ function Flatpickr(element, config) {
|
|
63
62
|
updateValue();
|
64
63
|
}
|
65
64
|
|
66
|
-
if (self.config.weekNumbers)
|
65
|
+
if (self.config.weekNumbers) {
|
66
|
+
self.calendarContainer.style.width = self.days.clientWidth + self.weekWrapper.clientWidth + "px";
|
67
|
+
}
|
67
68
|
|
68
69
|
triggerEvent("Ready");
|
69
70
|
}
|
@@ -77,8 +78,10 @@ function Flatpickr(element, config) {
|
|
77
78
|
|
78
79
|
if (!self.selectedDates.length) return;
|
79
80
|
|
80
|
-
|
81
|
-
|
81
|
+
if (e.type !== "input" || e.target.value.length >= 2) {
|
82
|
+
setHoursFromInputs();
|
83
|
+
updateValue();
|
84
|
+
}
|
82
85
|
}
|
83
86
|
|
84
87
|
function setHoursFromInputs() {
|
@@ -90,10 +93,10 @@ function Flatpickr(element, config) {
|
|
90
93
|
|
91
94
|
if (self.amPM) hours = hours % 12 + 12 * (self.amPM.innerHTML === "PM");
|
92
95
|
|
93
|
-
if (self.minDateHasTime && compareDates(latestSelectedDateObj
|
96
|
+
if (self.minDateHasTime && compareDates(self.latestSelectedDateObj, self.config.minDate) === 0) {
|
94
97
|
hours = Math.max(hours, self.config.minDate.getHours());
|
95
98
|
if (hours === self.config.minDate.getHours()) minutes = Math.max(minutes, self.config.minDate.getMinutes());
|
96
|
-
} else if (self.maxDateHasTime && compareDates(latestSelectedDateObj
|
99
|
+
} else if (self.maxDateHasTime && compareDates(self.latestSelectedDateObj, self.config.maxDate) === 0) {
|
97
100
|
hours = Math.min(hours, self.config.maxDate.getHours());
|
98
101
|
if (hours === self.config.maxDate.getHours()) minutes = Math.min(minutes, self.config.maxDate.getMinutes());
|
99
102
|
}
|
@@ -102,14 +105,14 @@ function Flatpickr(element, config) {
|
|
102
105
|
}
|
103
106
|
|
104
107
|
function setHoursFromDate(dateObj) {
|
105
|
-
var date = dateObj || latestSelectedDateObj
|
108
|
+
var date = dateObj || self.latestSelectedDateObj;
|
106
109
|
|
107
110
|
if (date) setHours(date.getHours(), date.getMinutes(), date.getSeconds());
|
108
111
|
}
|
109
112
|
|
110
113
|
function setHours(hours, minutes, seconds) {
|
111
114
|
if (self.selectedDates.length) {
|
112
|
-
self.
|
115
|
+
self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);
|
113
116
|
}
|
114
117
|
|
115
118
|
if (!self.config.enableTime || self.isMobile) return;
|
@@ -118,7 +121,7 @@ function Flatpickr(element, config) {
|
|
118
121
|
|
119
122
|
self.minuteElement.value = self.pad(minutes);
|
120
123
|
|
121
|
-
if (!self.config.time_24hr && self.selectedDates.length) self.amPM.textContent = latestSelectedDateObj
|
124
|
+
if (!self.config.time_24hr && self.selectedDates.length) self.amPM.textContent = self.latestSelectedDateObj.getHours() >= 12 ? "PM" : "AM";
|
122
125
|
|
123
126
|
if (self.config.enableSeconds) self.secondElement.value = self.pad(seconds);
|
124
127
|
}
|
@@ -147,14 +150,14 @@ function Flatpickr(element, config) {
|
|
147
150
|
};
|
148
151
|
self.debouncedChange = debounce(self.triggerChange, 1000);
|
149
152
|
|
150
|
-
if (self.config.mode === "range") self.days.addEventListener("mouseover", onMouseOver);
|
153
|
+
if (self.config.mode === "range" && self.days) self.days.addEventListener("mouseover", onMouseOver);
|
151
154
|
|
152
155
|
document.addEventListener("keydown", onKeyDown);
|
153
156
|
window.addEventListener("resize", self.debouncedResize);
|
154
157
|
|
155
|
-
|
158
|
+
if (window.ontouchstart) document.addEventListener("touchstart", documentClick);
|
156
159
|
|
157
|
-
document.addEventListener(
|
160
|
+
document.addEventListener("click", documentClick);
|
158
161
|
document.addEventListener("blur", documentClick);
|
159
162
|
|
160
163
|
if (self.config.clickOpens) (self.altInput || self.input).addEventListener("focus", open);
|
@@ -217,7 +220,7 @@ function Flatpickr(element, config) {
|
|
217
220
|
}
|
218
221
|
|
219
222
|
function jumpToDate(jumpDate) {
|
220
|
-
jumpDate = jumpDate ? parseDate(jumpDate) : latestSelectedDateObj
|
223
|
+
jumpDate = jumpDate ? self.parseDate(jumpDate) : self.latestSelectedDateObj || (self.config.minDate > self.now ? self.config.minDate : self.config.maxDate && self.config.maxDate < self.now ? self.config.maxDate : self.now);
|
221
224
|
|
222
225
|
try {
|
223
226
|
self.currentYear = jumpDate.getFullYear();
|
@@ -283,6 +286,8 @@ function Flatpickr(element, config) {
|
|
283
286
|
|
284
287
|
if (self.config.enableTime) fragment.appendChild(buildTime());
|
285
288
|
|
289
|
+
if (self.config.mode === "range") self.calendarContainer.classList.add("rangeMode");
|
290
|
+
|
286
291
|
self.calendarContainer.appendChild(fragment);
|
287
292
|
|
288
293
|
if (self.config.inline || self.config.static) {
|
@@ -417,6 +422,7 @@ function Flatpickr(element, config) {
|
|
417
422
|
|
418
423
|
function buildTime() {
|
419
424
|
self.calendarContainer.classList.add("hasTime");
|
425
|
+
if (self.config.noCalendar) self.calendarContainer.classList.add("noCalendar");
|
420
426
|
self.timeContainer = createElement("div", "flatpickr-time");
|
421
427
|
self.timeContainer.tabIndex = -1;
|
422
428
|
var separator = createElement("span", "flatpickr-time-separator", ":");
|
@@ -430,9 +436,9 @@ function Flatpickr(element, config) {
|
|
430
436
|
self.hourElement.tabIndex = self.minuteElement.tabIndex = 0;
|
431
437
|
self.hourElement.pattern = self.minuteElement.pattern = "\d*";
|
432
438
|
|
433
|
-
self.hourElement.value = self.pad(latestSelectedDateObj
|
439
|
+
self.hourElement.value = self.pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getHours() : self.config.defaultHour);
|
434
440
|
|
435
|
-
self.minuteElement.value = self.pad(latestSelectedDateObj
|
441
|
+
self.minuteElement.value = self.pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getMinutes() : self.config.defaultMinute);
|
436
442
|
|
437
443
|
self.hourElement.step = self.config.hourIncrement;
|
438
444
|
self.minuteElement.step = self.config.minuteIncrement;
|
@@ -458,7 +464,7 @@ function Flatpickr(element, config) {
|
|
458
464
|
self.secondElement = secondInput.childNodes[0];
|
459
465
|
|
460
466
|
self.secondElement.pattern = self.hourElement.pattern;
|
461
|
-
self.secondElement.value = latestSelectedDateObj
|
467
|
+
self.secondElement.value = self.latestSelectedDateObj ? self.pad(self.latestSelectedDateObj.getSeconds()) : "00";
|
462
468
|
|
463
469
|
self.secondElement.step = self.minuteElement.step;
|
464
470
|
self.secondElement.min = self.minuteElement.min;
|
@@ -494,6 +500,7 @@ function Flatpickr(element, config) {
|
|
494
500
|
return self.weekdayContainer;
|
495
501
|
}
|
496
502
|
|
503
|
+
/* istanbul ignore next */
|
497
504
|
function buildWeeks() {
|
498
505
|
self.calendarContainer.classList.add("hasWeeks");
|
499
506
|
self.weekWrapper = createElement("div", "flatpickr-weekwrapper");
|
@@ -554,9 +561,10 @@ function Flatpickr(element, config) {
|
|
554
561
|
window.removeEventListener("resize", instance.debouncedResize);
|
555
562
|
|
556
563
|
document.removeEventListener("click", documentClick);
|
564
|
+
document.removeEventListener("touchstart", documentClick);
|
557
565
|
document.removeEventListener("blur", documentClick);
|
558
566
|
|
559
|
-
if (instance.
|
567
|
+
if (instance.mobileInput && instance.mobileInput.parentNode) instance.mobileInput.parentNode.removeChild(instance.mobileInput);else if (instance.calendarContainer && instance.calendarContainer.parentNode) instance.calendarContainer.parentNode.removeChild(instance.calendarContainer);
|
560
568
|
|
561
569
|
if (instance.altInput) {
|
562
570
|
instance.input.type = "text";
|
@@ -566,6 +574,8 @@ function Flatpickr(element, config) {
|
|
566
574
|
instance.input.classList.remove("flatpickr-input");
|
567
575
|
instance.input.removeEventListener("focus", open);
|
568
576
|
instance.input.removeAttribute("readonly");
|
577
|
+
|
578
|
+
delete instance.input._flatpickr;
|
569
579
|
}
|
570
580
|
|
571
581
|
function isCalendarElem(elem) {
|
@@ -581,7 +591,8 @@ function Flatpickr(element, config) {
|
|
581
591
|
function documentClick(e) {
|
582
592
|
var isInput = self.element.contains(e.target) || e.target === self.input || e.target === self.altInput;
|
583
593
|
|
584
|
-
if (self.isOpen && !isCalendarElem(e.target) && !isInput) {
|
594
|
+
if (self.isOpen && !self.config.inline && !isCalendarElem(e.target) && !isInput) {
|
595
|
+
e.preventDefault();
|
585
596
|
self.close();
|
586
597
|
|
587
598
|
if (self.config.mode === "range" && self.selectedDates.length === 1) {
|
@@ -619,12 +630,12 @@ function Flatpickr(element, config) {
|
|
619
630
|
}
|
620
631
|
}
|
621
632
|
|
622
|
-
function isEnabled(
|
623
|
-
if (self.config.minDate && compareDates(
|
633
|
+
function isEnabled(date) {
|
634
|
+
if (self.config.minDate && compareDates(date, self.config.minDate) < 0 || self.config.maxDate && compareDates(date, self.config.maxDate) > 0) return false;
|
624
635
|
|
625
636
|
if (!self.config.enable.length && !self.config.disable.length) return true;
|
626
637
|
|
627
|
-
dateToCheck = parseDate(
|
638
|
+
var dateToCheck = self.parseDate(date, true); // timeless
|
628
639
|
|
629
640
|
var bool = self.config.enable.length > 0,
|
630
641
|
array = bool ? self.config.enable : self.config.disable;
|
@@ -633,10 +644,10 @@ function Flatpickr(element, config) {
|
|
633
644
|
d = array[i];
|
634
645
|
|
635
646
|
if (d instanceof Function && d(dateToCheck)) // disabled by function
|
636
|
-
return bool;else if (
|
647
|
+
return bool;else if (d instanceof Date && d.getTime() === dateToCheck.getTime())
|
637
648
|
// disabled by date string
|
638
649
|
return bool;else if ( // disabled by range
|
639
|
-
(typeof d === "undefined" ? "undefined" : _typeof(d)) === "object" && d.from && d.to && dateToCheck >=
|
650
|
+
(typeof d === "undefined" ? "undefined" : _typeof(d)) === "object" && d.from && d.to && dateToCheck >= d.from && dateToCheck <= d.to) return bool;
|
640
651
|
}
|
641
652
|
|
642
653
|
return !bool;
|
@@ -694,7 +705,7 @@ function Flatpickr(element, config) {
|
|
694
705
|
if (self.selectedDates.length !== 1 || !e.target.classList.contains("flatpickr-day")) return;
|
695
706
|
|
696
707
|
var hoverDate = e.target.dateObj,
|
697
|
-
initialDate = parseDate(self.selectedDates[0], true),
|
708
|
+
initialDate = self.parseDate(self.selectedDates[0], true),
|
698
709
|
rangeStartDate = Math.min(hoverDate.getTime(), self.selectedDates[0].getTime()),
|
699
710
|
rangeEndDate = Math.max(hoverDate.getTime(), self.selectedDates[0].getTime()),
|
700
711
|
containsDisabled = false;
|
@@ -770,7 +781,7 @@ function Flatpickr(element, config) {
|
|
770
781
|
return this._minDate;
|
771
782
|
},
|
772
783
|
set: function set(date) {
|
773
|
-
this._minDate = parseDate(date);
|
784
|
+
this._minDate = self.parseDate(date);
|
774
785
|
|
775
786
|
if (self.days) redraw();
|
776
787
|
|
@@ -791,7 +802,7 @@ function Flatpickr(element, config) {
|
|
791
802
|
return this._maxDate;
|
792
803
|
},
|
793
804
|
set: function set(date) {
|
794
|
-
this._maxDate = parseDate(date);
|
805
|
+
this._maxDate = self.parseDate(date);
|
795
806
|
if (self.days) redraw();
|
796
807
|
|
797
808
|
if (!self.currentYearElement) return;
|
@@ -824,60 +835,13 @@ function Flatpickr(element, config) {
|
|
824
835
|
self.l10n = _extends(Object.create(Flatpickr.l10ns.default), _typeof(self.config.locale) === "object" ? self.config.locale : self.config.locale !== "default" ? Flatpickr.l10ns[self.config.locale] || {} : {});
|
825
836
|
}
|
826
837
|
|
827
|
-
function parseDate(date) {
|
828
|
-
var timeless = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
829
|
-
|
830
|
-
if (!date) return null;
|
831
|
-
|
832
|
-
var dateTimeRegex = /(\d+)/g,
|
833
|
-
timeRegex = /^(\d{1,2})[:\s](\d\d)?[:\s]?(\d\d)?\s?(a|p)?/i,
|
834
|
-
timestamp = /^(\d+)$/g,
|
835
|
-
date_orig = date;
|
836
|
-
|
837
|
-
if (date.toFixed) // timestamp
|
838
|
-
date = new Date(date);else if (typeof date === "string") {
|
839
|
-
date = date.trim();
|
840
|
-
|
841
|
-
if (date === "today") {
|
842
|
-
date = new Date();
|
843
|
-
timeless = true;
|
844
|
-
} else if (self.config.parseDate) date = self.config.parseDate(date);else if (timeRegex.test(date)) {
|
845
|
-
// time picker
|
846
|
-
var m = date.match(timeRegex),
|
847
|
-
hours = !m[4] ? m[1] // military time, no conversion needed
|
848
|
-
: m[1] % 12 + (m[4].toLowerCase() === "p" ? 12 : 0); // am/pm
|
849
|
-
|
850
|
-
date = new Date();
|
851
|
-
date.setHours(hours, m[2] || 0, m[3] || 0);
|
852
|
-
} else if (/Z$/.test(date) || /GMT$/.test(date)) // datestrings w/ timezone
|
853
|
-
date = new Date(date);else if (dateTimeRegex.test(date) && /^[0-9]/.test(date)) {
|
854
|
-
var d = date.match(dateTimeRegex);
|
855
|
-
date = new Date(d[0] + "/" + (d[1] || 1) + "/" + (d[2] || 1) + " " + (d[3] || 0) + ":" + (d[4] || 0) + ":" + (d[5] || 0));
|
856
|
-
} else // fallback
|
857
|
-
date = new Date(date);
|
858
|
-
}
|
859
|
-
|
860
|
-
if (!(date instanceof Date)) {
|
861
|
-
console.warn("flatpickr: invalid date " + date_orig);
|
862
|
-
console.info(self.element);
|
863
|
-
return null;
|
864
|
-
}
|
865
|
-
|
866
|
-
if (self.config.utc && !date.fp_isUTC) date = date.fp_toUTC();
|
867
|
-
|
868
|
-
if (timeless) date.setHours(0, 0, 0, 0);
|
869
|
-
|
870
|
-
return date;
|
871
|
-
}
|
872
|
-
|
873
838
|
function positionCalendar() {
|
874
839
|
var calendarHeight = self.calendarContainer.offsetHeight,
|
875
840
|
input = self.altInput || self.input,
|
876
841
|
inputBounds = input.getBoundingClientRect(),
|
877
842
|
distanceFromBottom = window.innerHeight - inputBounds.bottom + input.offsetHeight;
|
878
843
|
|
879
|
-
var top = void 0
|
880
|
-
left = window.pageXOffset + inputBounds.left;
|
844
|
+
var top = void 0;
|
881
845
|
|
882
846
|
if (distanceFromBottom < calendarHeight) {
|
883
847
|
top = window.pageYOffset - calendarHeight + inputBounds.top - 2;
|
@@ -891,7 +855,21 @@ function Flatpickr(element, config) {
|
|
891
855
|
|
892
856
|
if (!self.config.static && !self.config.inline) {
|
893
857
|
self.calendarContainer.style.top = top + "px";
|
894
|
-
|
858
|
+
|
859
|
+
var left = window.pageXOffset + inputBounds.left;
|
860
|
+
var right = document.body.offsetWidth - inputBounds.right;
|
861
|
+
|
862
|
+
if (left + self.calendarContainer.offsetWidth <= document.body.offsetWidth) {
|
863
|
+
self.calendarContainer.style.left = left + "px";
|
864
|
+
self.calendarContainer.style.right = "auto";
|
865
|
+
|
866
|
+
self.calendarContainer.classList.remove("rightMost");
|
867
|
+
} else {
|
868
|
+
self.calendarContainer.style.left = "auto";
|
869
|
+
self.calendarContainer.style.right = right + "px";
|
870
|
+
|
871
|
+
self.calendarContainer.classList.add("rightMost");
|
872
|
+
}
|
895
873
|
}
|
896
874
|
}
|
897
875
|
|
@@ -904,18 +882,15 @@ function Flatpickr(element, config) {
|
|
904
882
|
}
|
905
883
|
|
906
884
|
function selectDate(e) {
|
885
|
+
e.preventDefault();
|
907
886
|
if (self.config.allowInput && e.which === 13 && e.target === (self.altInput || self.input)) return self.setDate((self.altInput || self.input).value), e.target.blur();
|
908
887
|
|
909
888
|
if (!e.target.classList.contains("flatpickr-day") || e.target.classList.contains("disabled") || e.target.classList.contains("notAllowed")) return;
|
910
889
|
|
911
|
-
var selectedDate = e.target.dateObj;
|
890
|
+
var selectedDate = self.latestSelectedDateObj = e.target.dateObj;
|
912
891
|
self.selectedDateElem = e.target;
|
913
892
|
|
914
|
-
if (self.config.mode === "single") {
|
915
|
-
self.selectedDates = [selectedDate];
|
916
|
-
|
917
|
-
if (!self.config.enableTime) self.close();
|
918
|
-
} else if (self.config.mode === "multiple") {
|
893
|
+
if (self.config.mode === "single") self.selectedDates = [selectedDate];else if (self.config.mode === "multiple") {
|
919
894
|
var selectedIndex = isDateSelected(selectedDate);
|
920
895
|
if (selectedIndex) self.selectedDates.splice(selectedIndex, 1);else self.selectedDates.push(selectedDate);
|
921
896
|
} else if (self.config.mode === "range") {
|
@@ -947,6 +922,8 @@ function Flatpickr(element, config) {
|
|
947
922
|
|
948
923
|
if (self.config.mode === "range" && self.selectedDates.length === 1) onMouseOver(e);
|
949
924
|
|
925
|
+
if (self.config.mode === "single" && !self.config.enableTime) self.close();
|
926
|
+
|
950
927
|
triggerEvent("Change");
|
951
928
|
}
|
952
929
|
|
@@ -959,37 +936,51 @@ function Flatpickr(element, config) {
|
|
959
936
|
function setDate(date, triggerChange) {
|
960
937
|
if (!date) return self.clear();
|
961
938
|
|
962
|
-
self.selectedDates = (Array.isArray(date) ? date.map(parseDate) : [parseDate(date)]).filter(function (d) {
|
939
|
+
self.selectedDates = (Array.isArray(date) ? date.map(self.parseDate) : [self.parseDate(date)]).filter(function (d) {
|
963
940
|
return d instanceof Date && isEnabled(d);
|
964
941
|
});
|
942
|
+
|
965
943
|
self.redraw();
|
966
944
|
jumpToDate();
|
967
945
|
|
968
946
|
setHoursFromDate();
|
969
947
|
updateValue();
|
970
948
|
|
971
|
-
|
949
|
+
if (self.selectedDates.length > 0) self.dateIsPicked = true;else self.latestSelectedDateObj = null;
|
972
950
|
|
973
|
-
if (triggerChange) triggerEvent("Change");
|
951
|
+
if (triggerChange === true) triggerEvent("Change");
|
974
952
|
}
|
975
953
|
|
976
954
|
function setupDates() {
|
955
|
+
function parseDateRules(arr) {
|
956
|
+
for (var i = arr.length; i--;) {
|
957
|
+
if (typeof arr[i] === "string" || +arr[i]) arr[i] = self.parseDate(arr[i], true);else if (arr[i] && arr[i].from && arr[i].to) {
|
958
|
+
arr[i].from = self.parseDate(arr[i].from);
|
959
|
+
arr[i].to = self.parseDate(arr[i].to);
|
960
|
+
}
|
961
|
+
}
|
962
|
+
|
963
|
+
return arr.filter(function (x) {
|
964
|
+
return x;
|
965
|
+
}); // remove falsy values
|
966
|
+
}
|
967
|
+
|
977
968
|
self.selectedDates = [];
|
978
969
|
self.now = new Date();
|
979
970
|
var inputDate = self.config.defaultDate || self.input.value;
|
980
971
|
|
981
|
-
if (Array.isArray(inputDate)) self.selectedDates = inputDate.map(parseDate);else if (inputDate) {
|
972
|
+
if (Array.isArray(inputDate)) self.selectedDates = inputDate.map(self.parseDate);else if (inputDate) {
|
982
973
|
switch (self.config.mode) {
|
983
974
|
case "single":
|
984
|
-
self.selectedDates = [parseDate(inputDate)];
|
975
|
+
self.selectedDates = [self.parseDate(inputDate)];
|
985
976
|
break;
|
986
977
|
|
987
978
|
case "multiple":
|
988
|
-
self.selectedDates = inputDate.split("; ").map(parseDate);
|
979
|
+
self.selectedDates = inputDate.split("; ").map(self.parseDate);
|
989
980
|
break;
|
990
981
|
|
991
982
|
case "range":
|
992
|
-
self.selectedDates = inputDate.split(self.l10n.rangeSeparator).map(parseDate);
|
983
|
+
self.selectedDates = inputDate.split(self.l10n.rangeSeparator).map(self.parseDate);
|
993
984
|
break;
|
994
985
|
|
995
986
|
default:
|
@@ -997,6 +988,10 @@ function Flatpickr(element, config) {
|
|
997
988
|
}
|
998
989
|
}
|
999
990
|
|
991
|
+
if (self.config.disable.length) self.config.disable = parseDateRules(self.config.disable);
|
992
|
+
|
993
|
+
if (self.config.enable.length) self.config.enable = parseDateRules(self.config.enable);
|
994
|
+
|
1000
995
|
self.selectedDates = self.selectedDates.filter(function (d) {
|
1001
996
|
return d instanceof Date && d.getTime() && isEnabled(d);
|
1002
997
|
});
|
@@ -1027,6 +1022,7 @@ function Flatpickr(element, config) {
|
|
1027
1022
|
};
|
1028
1023
|
}
|
1029
1024
|
|
1025
|
+
/* istanbul ignore next */
|
1030
1026
|
function setupFormats() {
|
1031
1027
|
self.formats = {
|
1032
1028
|
// weekday name, short, e.g. Thu
|
@@ -1146,9 +1142,9 @@ function Flatpickr(element, config) {
|
|
1146
1142
|
function setupMobile() {
|
1147
1143
|
var inputType = self.config.enableTime ? self.config.noCalendar ? "time" : "datetime-local" : "date";
|
1148
1144
|
|
1149
|
-
self.mobileInput = createElement("input",
|
1145
|
+
self.mobileInput = createElement("input", self.input.className + " flatpickr-mobile");
|
1150
1146
|
self.mobileInput.step = "any";
|
1151
|
-
self.mobileInput.tabIndex =
|
1147
|
+
self.mobileInput.tabIndex = 1;
|
1152
1148
|
self.mobileInput.type = inputType;
|
1153
1149
|
self.mobileInput.disabled = self.input.disabled;
|
1154
1150
|
|
@@ -1172,7 +1168,8 @@ function Flatpickr(element, config) {
|
|
1172
1168
|
}
|
1173
1169
|
|
1174
1170
|
self.mobileInput.addEventListener("change", function (e) {
|
1175
|
-
self.
|
1171
|
+
self.latestSelectedDateObj = self.parseDate(e.target.value);
|
1172
|
+
self.setDate(self.latestSelectedDateObj);
|
1176
1173
|
triggerEvent("Change");
|
1177
1174
|
triggerEvent("Close");
|
1178
1175
|
});
|
@@ -1205,11 +1202,6 @@ function Flatpickr(element, config) {
|
|
1205
1202
|
}
|
1206
1203
|
}
|
1207
1204
|
|
1208
|
-
function latestSelectedDateObj() {
|
1209
|
-
if (self.selectedDates.length) return self.selectedDates[self.selectedDates.length - 1];
|
1210
|
-
return null;
|
1211
|
-
}
|
1212
|
-
|
1213
1205
|
function isDateSelected(date) {
|
1214
1206
|
for (var i = 0; i < self.selectedDates.length; i++) {
|
1215
1207
|
if (compareDates(self.selectedDates[i], date) === 0) return "" + i;
|
@@ -1246,7 +1238,7 @@ function Flatpickr(element, config) {
|
|
1246
1238
|
if (!self.selectedDates.length) return self.clear();
|
1247
1239
|
|
1248
1240
|
if (self.isMobile) {
|
1249
|
-
self.mobileInput.value = self.selectedDates.length ? formatDate(self.mobileFormatStr, latestSelectedDateObj
|
1241
|
+
self.mobileInput.value = self.selectedDates.length ? formatDate(self.mobileFormatStr, self.latestSelectedDateObj) : "";
|
1250
1242
|
}
|
1251
1243
|
|
1252
1244
|
var joinChar = self.config.mode !== "range" ? "; " : self.l10n.rangeSeparator;
|
@@ -1286,6 +1278,7 @@ function Flatpickr(element, config) {
|
|
1286
1278
|
return e;
|
1287
1279
|
}
|
1288
1280
|
|
1281
|
+
/* istanbul ignore next */
|
1289
1282
|
function debounce(func, wait, immediate) {
|
1290
1283
|
var timeout = void 0;
|
1291
1284
|
return function () {
|
@@ -1327,23 +1320,34 @@ function Flatpickr(element, config) {
|
|
1327
1320
|
|
1328
1321
|
var newValue = Number(curValue);
|
1329
1322
|
|
1330
|
-
|
1323
|
+
switch (e.type) {
|
1324
|
+
case "wheel":
|
1325
|
+
newValue = curValue + step * delta;
|
1326
|
+
break;
|
1331
1327
|
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
newValue = e.target === self.hourElement ? newValue - max - !self.amPM : min;
|
1328
|
+
case "keydown":
|
1329
|
+
newValue = curValue + step * (e.which === 38 ? 1 : -1);
|
1330
|
+
break;
|
1336
1331
|
}
|
1337
1332
|
|
1338
|
-
if (
|
1333
|
+
if (e.type !== "input" || e.target.value.length === 2) {
|
1334
|
+
if (newValue < min) {
|
1335
|
+
newValue = max + newValue + (e.target !== self.hourElement) + (e.target === self.hourElement && !self.amPM);
|
1336
|
+
} else if (newValue > max) {
|
1337
|
+
newValue = e.target === self.hourElement ? newValue - max - !self.amPM : min;
|
1338
|
+
}
|
1339
1339
|
|
1340
|
-
|
1340
|
+
if (self.amPM && e.target === self.hourElement && (step === 1 ? newValue + curValue === 23 : Math.abs(newValue - curValue) > step)) self.amPM.textContent = self.amPM.innerHTML === "PM" ? "AM" : "PM";
|
1341
|
+
|
1342
|
+
e.target.value = self.pad(newValue);
|
1343
|
+
} else e.target.value = newValue;
|
1341
1344
|
}
|
1342
1345
|
|
1343
1346
|
init();
|
1344
1347
|
return self;
|
1345
1348
|
}
|
1346
1349
|
|
1350
|
+
/* istanbul ignore next */
|
1347
1351
|
Flatpickr.defaultConfig = {
|
1348
1352
|
|
1349
1353
|
mode: "single",
|
@@ -1383,7 +1387,7 @@ Flatpickr.defaultConfig = {
|
|
1383
1387
|
altInput: false,
|
1384
1388
|
|
1385
1389
|
// the created altInput element will have this class.
|
1386
|
-
altInputClass: "form-control input",
|
1390
|
+
altInputClass: "flatpickr-input form-control input",
|
1387
1391
|
|
1388
1392
|
// same as dateFormat, but for altInput
|
1389
1393
|
altFormat: "F j, Y", // defaults to e.g. June 10, 2016
|
@@ -1476,6 +1480,7 @@ Flatpickr.defaultConfig = {
|
|
1476
1480
|
onDayCreate: null
|
1477
1481
|
};
|
1478
1482
|
|
1483
|
+
/* istanbul ignore next */
|
1479
1484
|
Flatpickr.l10ns = {
|
1480
1485
|
en: {
|
1481
1486
|
weekdays: {
|
@@ -1509,7 +1514,7 @@ Flatpickr.l10ns = {
|
|
1509
1514
|
}
|
1510
1515
|
};
|
1511
1516
|
|
1512
|
-
Flatpickr.l10ns.default = Flatpickr.l10ns.en;
|
1517
|
+
Flatpickr.l10ns.default = Object.create(Flatpickr.l10ns.en);
|
1513
1518
|
|
1514
1519
|
Flatpickr.localize = function (l10n) {
|
1515
1520
|
return _extends(Flatpickr.l10ns.default, l10n || {});
|
@@ -1518,6 +1523,51 @@ Flatpickr.localize = function (l10n) {
|
|
1518
1523
|
Flatpickr.prototype = {
|
1519
1524
|
pad: function pad(number) {
|
1520
1525
|
return ("0" + number).slice(-2);
|
1526
|
+
},
|
1527
|
+
parseDate: function parseDate(date) {
|
1528
|
+
var timeless = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
1529
|
+
|
1530
|
+
if (!date) return null;
|
1531
|
+
|
1532
|
+
var dateTimeRegex = /(\d+)/g,
|
1533
|
+
timeRegex = /^(\d{1,2})[:\s](\d\d)?[:\s]?(\d\d)?\s?(a|p)?/i,
|
1534
|
+
timestamp = /^(\d+)$/g,
|
1535
|
+
date_orig = date;
|
1536
|
+
|
1537
|
+
if (date.toFixed || timestamp.test(date)) // timestamp
|
1538
|
+
date = new Date(date);else if (typeof date === "string") {
|
1539
|
+
date = date.trim();
|
1540
|
+
|
1541
|
+
if (date === "today") {
|
1542
|
+
date = new Date();
|
1543
|
+
timeless = true;
|
1544
|
+
} else if (this.config && this.config.parseDate) date = this.config.parseDate(date);else if (timeRegex.test(date)) {
|
1545
|
+
// time picker
|
1546
|
+
var m = date.match(timeRegex),
|
1547
|
+
hours = !m[4] ? m[1] // military time, no conversion needed
|
1548
|
+
: m[1] % 12 + (m[4].toLowerCase() === "p" ? 12 : 0); // am/pm
|
1549
|
+
|
1550
|
+
date = new Date();
|
1551
|
+
date.setHours(hours, m[2] || 0, m[3] || 0);
|
1552
|
+
} else if (/Z$/.test(date) || /GMT$/.test(date)) // datestrings w/ timezone
|
1553
|
+
date = new Date(date);else if (dateTimeRegex.test(date) && /^[0-9]/.test(date)) {
|
1554
|
+
var d = date.match(dateTimeRegex);
|
1555
|
+
date = new Date(d[0] + "/" + (d[1] || 1) + "/" + (d[2] || 1) + " " + (d[3] || 0) + ":" + (d[4] || 0) + ":" + (d[5] || 0));
|
1556
|
+
} else // fallback
|
1557
|
+
date = new Date(date);
|
1558
|
+
} else if (date instanceof Date) date = new Date(date.getTime()); // create a copy
|
1559
|
+
|
1560
|
+
if (!(date instanceof Date)) {
|
1561
|
+
console.warn("flatpickr: invalid date " + date_orig);
|
1562
|
+
console.info(this.element);
|
1563
|
+
return null;
|
1564
|
+
}
|
1565
|
+
|
1566
|
+
if (this.config && this.config.utc && !date.fp_isUTC) date = date.fp_toUTC();
|
1567
|
+
|
1568
|
+
if (timeless === true) date.setHours(0, 0, 0, 0);
|
1569
|
+
|
1570
|
+
return date;
|
1521
1571
|
}
|
1522
1572
|
};
|
1523
1573
|
|
@@ -1568,6 +1618,7 @@ Date.prototype.fp_toUTC = function () {
|
|
1568
1618
|
};
|
1569
1619
|
|
1570
1620
|
// IE9 classList polyfill
|
1621
|
+
/* istanbul ignore next */
|
1571
1622
|
if (!("classList" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== "undefined") {
|
1572
1623
|
Object.defineProperty(HTMLElement.prototype, "classList", {
|
1573
1624
|
get: function get() {
|