flatpickr 2.2.4.0 → 2.2.5.0
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.
- 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() {
|