flatpickr 2.2.3.0 → 2.2.4.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/Rakefile +2 -2
- data/flatpickr.gemspec +1 -1
- data/lib/flatpickr/version.rb +1 -1
- data/vendor/assets/javascripts/flatpickr.js +136 -110
- data/vendor/assets/stylesheets/flatpickr.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/rtl/flatpickr.min.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/airbnb.rtl.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/base16_flat.rtl.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/confetti.rtl.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/dark.rtl.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/material_blue.rtl.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/material_green.rtl.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/material_orange.rtl.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/rtl/themes/material_red.rtl.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/themes/airbnb.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/themes/base16_flat.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/themes/confetti.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/themes/dark.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/themes/material_blue.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/themes/material_green.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/themes/material_orange.css +2 -2
- data/vendor/assets/stylesheets/flatpickr/themes/material_red.css +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b72358023f1a34f6ba67d13f1e4718e21fc88f0
|
4
|
+
data.tar.gz: 6316e78f69c7a4d45e230f57707bc5ee87b86f81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a060d9dbad8ca861f01fd9572e86bd2cd0438412801faf446dc11d9783ad2126e8de7e559718ddca7541f8d1d121ff5af1b5b8da5699dd4c158cb7c8bc90fd73
|
7
|
+
data.tar.gz: ef96d6f8adce50e4f93be5bb202c9d4692d3b07869f960e7a5e3be18593a67297b7cefbe01b03c6e73a027fd0c23e85109ac9fc83024af8523412c86d82910e5
|
data/Rakefile
CHANGED
@@ -10,10 +10,10 @@ namespace :flatpickr do
|
|
10
10
|
namespace :assets do
|
11
11
|
desc 'Update Flatpickr\'s assets.'
|
12
12
|
task update: :clean do
|
13
|
-
version = Flatpickr::VERSION.sub(/.\d+$/, '')
|
13
|
+
version = ARGV[1] || "v#{Flatpickr::VERSION.sub(/.\d+$/, '')}"
|
14
14
|
|
15
15
|
sh 'git clone git@github.com:chmln/flatpickr.git flatpickr_source'
|
16
|
-
sh "cd flatpickr_source && git checkout tags
|
16
|
+
sh "cd flatpickr_source && git checkout tags/#{version}"
|
17
17
|
|
18
18
|
sh 'cp flatpickr_source/dist/flatpickr.js vendor/assets/javascripts/flatpickr.js'
|
19
19
|
sh 'cp -R flatpickr_source/dist/l10n/ vendor/assets/javascripts/flatpickr/l10n/'
|
data/flatpickr.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['zoran1991@gmail.com']
|
11
11
|
|
12
12
|
spec.summary = %q{Flatpickr packaged for use in Rails projects.}
|
13
|
-
spec.homepage = 'https://github.com/zokioki/
|
13
|
+
spec.homepage = 'https://github.com/zokioki/flatpickr-rails'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
data/lib/flatpickr/version.rb
CHANGED
@@ -37,7 +37,7 @@ function Flatpickr(element, config) {
|
|
37
37
|
self.setDate = setDate;
|
38
38
|
self.toggle = toggle;
|
39
39
|
|
40
|
-
self.isMobile = !self.config.disableMobile && self.config.mode === "single" && !self.config.disable.length && !self.config.enable.length && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
40
|
+
self.isMobile = !self.config.disableMobile && !self.config.inline && self.config.mode === "single" && !self.config.disable.length && !self.config.enable.length && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
41
41
|
|
42
42
|
if (!self.isMobile) build();
|
43
43
|
|
@@ -47,20 +47,24 @@ function Flatpickr(element, config) {
|
|
47
47
|
|
48
48
|
self.maxDateHasTime = self.config.maxDate && (self.config.maxDate.getHours() || self.config.maxDate.getMinutes() || self.config.maxDate.getSeconds());
|
49
49
|
|
50
|
-
if (!self.isMobile)
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
50
|
+
if (!self.isMobile) {
|
51
|
+
Object.defineProperty(self, "dateIsPicked", {
|
52
|
+
set: function set(bool) {
|
53
|
+
if (bool) return self.calendarContainer.classList.add("dateIsPicked");
|
54
|
+
self.calendarContainer.classList.remove("dateIsPicked");
|
55
|
+
}
|
56
|
+
});
|
57
|
+
}
|
56
58
|
|
57
|
-
self.dateIsPicked = self.selectedDates.length > 0;
|
59
|
+
self.dateIsPicked = self.selectedDates.length > 0 || self.config.noCalendar;
|
58
60
|
|
59
61
|
if (self.selectedDates.length) {
|
60
62
|
if (self.config.enableTime) setHoursFromDate();
|
61
63
|
updateValue();
|
62
64
|
}
|
63
65
|
|
66
|
+
if (self.config.weekNumbers) self.calendarContainer.style.width = self.days.offsetWidth + self.weekWrapper.offsetWidth + 2 + "px";
|
67
|
+
|
64
68
|
triggerEvent("Ready");
|
65
69
|
}
|
66
70
|
|
@@ -81,8 +85,8 @@ function Flatpickr(element, config) {
|
|
81
85
|
if (!self.config.enableTime) return;
|
82
86
|
|
83
87
|
var hours = parseInt(self.hourElement.value, 10) || 0,
|
84
|
-
minutes =
|
85
|
-
seconds = self.config.enableSeconds ?
|
88
|
+
minutes = parseInt(self.minuteElement.value, 10) || 0,
|
89
|
+
seconds = self.config.enableSeconds ? parseInt(self.secondElement.value, 10) || 0 : 0;
|
86
90
|
|
87
91
|
if (self.amPM) hours = hours % 12 + 12 * (self.amPM.innerHTML === "PM");
|
88
92
|
|
@@ -104,7 +108,9 @@ function Flatpickr(element, config) {
|
|
104
108
|
}
|
105
109
|
|
106
110
|
function setHours(hours, minutes, seconds) {
|
107
|
-
if (self.selectedDates.length)
|
111
|
+
if (self.selectedDates.length) {
|
112
|
+
self.selectedDates[self.selectedDates.length - 1].setHours(hours % 24, minutes, seconds || 0, 0);
|
113
|
+
}
|
108
114
|
|
109
115
|
if (!self.config.enableTime || self.isMobile) return;
|
110
116
|
|
@@ -135,7 +141,7 @@ function Flatpickr(element, config) {
|
|
135
141
|
|
136
142
|
if (self.isMobile) return setupMobile();
|
137
143
|
|
138
|
-
self.debouncedResize = debounce(onResize,
|
144
|
+
self.debouncedResize = debounce(onResize, 50);
|
139
145
|
self.triggerChange = function () {
|
140
146
|
return triggerEvent("Change");
|
141
147
|
};
|
@@ -146,7 +152,9 @@ function Flatpickr(element, config) {
|
|
146
152
|
document.addEventListener("keydown", onKeyDown);
|
147
153
|
window.addEventListener("resize", self.debouncedResize);
|
148
154
|
|
149
|
-
|
155
|
+
var clickEvent = typeof window.ontouchstart !== "undefined" ? "touchstart" : "click";
|
156
|
+
|
157
|
+
document.addEventListener(clickEvent, documentClick);
|
150
158
|
document.addEventListener("blur", documentClick);
|
151
159
|
|
152
160
|
if (self.config.clickOpens) (self.altInput || self.input).addEventListener("focus", open);
|
@@ -229,8 +237,8 @@ function Flatpickr(element, config) {
|
|
229
237
|
try {
|
230
238
|
input.dispatchEvent(new Event("input", { "bubbles": true }));
|
231
239
|
} catch (e) {
|
232
|
-
var ev = document.createEvent(
|
233
|
-
ev.initCustomEvent(
|
240
|
+
var ev = document.createEvent("CustomEvent");
|
241
|
+
ev.initCustomEvent("input", true, true, {});
|
234
242
|
input.dispatchEvent(ev);
|
235
243
|
}
|
236
244
|
}
|
@@ -287,6 +295,44 @@ function Flatpickr(element, config) {
|
|
287
295
|
} else document.body.appendChild(self.calendarContainer);
|
288
296
|
}
|
289
297
|
|
298
|
+
function createDay(className, date, dayNumber) {
|
299
|
+
var dateIsEnabled = isEnabled(date),
|
300
|
+
dayElement = createElement("span", "flatpickr-day " + className, date.getDate());
|
301
|
+
|
302
|
+
dayElement.dateObj = date;
|
303
|
+
|
304
|
+
if (compareDates(date, self.now) === 0) dayElement.classList.add("today");
|
305
|
+
|
306
|
+
if (dateIsEnabled) {
|
307
|
+
dayElement.tabIndex = 0;
|
308
|
+
|
309
|
+
if (isDateSelected(date)) {
|
310
|
+
dayElement.classList.add("selected");
|
311
|
+
|
312
|
+
if (self.config.mode === "range") {
|
313
|
+
dayElement.classList.add(compareDates(date, self.selectedDates[0]) === 0 ? "startRange" : "endRange");
|
314
|
+
} else self.selectedDateElem = dayElement;
|
315
|
+
}
|
316
|
+
} else {
|
317
|
+
dayElement.classList.add("disabled");
|
318
|
+
if (self.selectedDates[0] && date > self.minRangeDate && date < self.selectedDates[0]) self.minRangeDate = date;else if (self.selectedDates[0] && date < self.maxRangeDate && date > self.selectedDates[0]) self.maxRangeDate = date;
|
319
|
+
}
|
320
|
+
|
321
|
+
if (self.config.mode === "range") {
|
322
|
+
if (isDateInRange(date) && !isDateSelected(date)) dayElement.classList.add("inRange");
|
323
|
+
|
324
|
+
if (self.selectedDates.length === 1 && (date < self.minRangeDate || date > self.maxRangeDate)) dayElement.classList.add("notAllowed");
|
325
|
+
}
|
326
|
+
|
327
|
+
if (self.config.weekNumbers && className !== "prevMonthDay" && dayNumber % 7 === 1) {
|
328
|
+
self.weekNumbers.insertAdjacentHTML("beforeend", "<span class='disabled flatpickr-day'>" + self.config.getWeek(date) + "</span>");
|
329
|
+
}
|
330
|
+
|
331
|
+
triggerEvent("DayCreate", dayElement);
|
332
|
+
|
333
|
+
return dayElement;
|
334
|
+
}
|
335
|
+
|
290
336
|
function buildDays() {
|
291
337
|
if (!self.days) {
|
292
338
|
self.days = createElement("div", "flatpickr-days");
|
@@ -300,14 +346,12 @@ function Flatpickr(element, config) {
|
|
300
346
|
var daysInMonth = self.utils.getDaysinMonth(),
|
301
347
|
days = document.createDocumentFragment();
|
302
348
|
|
303
|
-
var dayNumber = self.prevMonthDays + 1 - self.firstOfMonth
|
304
|
-
currentDate = void 0,
|
305
|
-
dateIsDisabled = void 0;
|
349
|
+
var dayNumber = self.prevMonthDays + 1 - self.firstOfMonth;
|
306
350
|
|
307
351
|
if (self.config.weekNumbers) self.weekNumbers.innerHTML = "";
|
308
352
|
|
309
353
|
if (self.config.mode === "range") {
|
310
|
-
|
354
|
+
// const dateLimits = self.config.enable.length || self.config.disable.length || self.config.mixDate || self.config.maxDate;
|
311
355
|
self.minRangeDate = new Date(self.currentYear, self.currentMonth - 1, dayNumber);
|
312
356
|
self.maxRangeDate = new Date(self.currentYear, self.currentMonth + 1, (42 - self.firstOfMonth) % daysInMonth);
|
313
357
|
}
|
@@ -316,68 +360,19 @@ function Flatpickr(element, config) {
|
|
316
360
|
|
317
361
|
// prepend days from the ending of previous month
|
318
362
|
for (var i = 0; dayNumber <= self.prevMonthDays; i++, dayNumber++) {
|
319
|
-
|
320
|
-
dateIsEnabled = isEnabled(curDate),
|
321
|
-
dayElement = createElement("span", "flatpickr-day prevMonthDay" + (!dateIsEnabled ? " disabled" : "") + (isDateInRange(curDate) ? " inRange" : "") + (self.selectedDates.length === 1 && (curDate < self.minRangeDate || curDate > self.maxRangeDate) ? " notAllowed" : "") + (isDateSelected(curDate) !== false ? " selected" : ""), dayNumber);
|
322
|
-
|
323
|
-
dayElement.dateObj = curDate;
|
324
|
-
|
325
|
-
if (dateIsEnabled) dayElement.tabIndex = 0;else if (self.selectedDates[0] && curDate > self.minRangeDate && curDate < self.selectedDates[0]) self.minRangeDate = curDate;else if (self.selectedDates[0] && curDate < self.maxRangeDate && curDate > self.selectedDates[0]) self.maxRangeDate = curDate;
|
326
|
-
|
327
|
-
triggerEvent("DayCreate", dayElement);
|
328
|
-
days.appendChild(dayElement);
|
363
|
+
days.appendChild(createDay("prevMonthDay", new Date(self.currentYear, self.currentMonth - 1, dayNumber), dayNumber));
|
329
364
|
}
|
330
365
|
|
331
366
|
// Start at 1 since there is no 0th day
|
332
367
|
for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++) {
|
333
|
-
|
334
|
-
|
335
|
-
if (self.config.weekNumbers && dayNumber % 7 === 1) {
|
336
|
-
self.weekNumbers.insertAdjacentHTML("beforeend", "<span class='disabled flatpickr-day'>" + self.config.getWeek(currentDate) + "</span>");
|
337
|
-
}
|
338
|
-
|
339
|
-
dateIsDisabled = !isEnabled(currentDate);
|
340
|
-
|
341
|
-
var _dayElement = createElement("span", dateIsDisabled ? "flatpickr-day disabled" : "flatpickr-day" + (isDateInRange(currentDate) ? " inRange" : "") + (self.selectedDates.length === 1 && (currentDate < self.minRangeDate || currentDate > self.maxRangeDate) ? " notAllowed" : ""), dayNumber);
|
342
|
-
|
343
|
-
_dayElement.dateObj = currentDate;
|
344
|
-
|
345
|
-
if (compareDates(currentDate, self.now) === 0) _dayElement.classList.add("today");
|
346
|
-
|
347
|
-
if (!dateIsDisabled) {
|
348
|
-
_dayElement.tabIndex = 0;
|
349
|
-
|
350
|
-
if (isDateSelected(currentDate)) {
|
351
|
-
_dayElement.classList.add("selected");
|
352
|
-
self.selectedDateElem = _dayElement;
|
353
|
-
|
354
|
-
if (self.config.mode === "range") {
|
355
|
-
_dayElement.className += compareDates(currentDate, self.selectedDates[0]) === 0 ? " startRange" : self.selectedDates.length > 1 ? " endRange" : "";
|
356
|
-
}
|
357
|
-
}
|
358
|
-
} else if (self.selectedDates[0] && currentDate > self.minRangeDate && currentDate < self.selectedDates[0]) self.minRangeDate = currentDate;else if (self.selectedDates[0] && currentDate < self.maxRangeDate && currentDate > self.selectedDates[0]) self.maxRangeDate = currentDate;
|
359
|
-
|
360
|
-
triggerEvent("DayCreate", _dayElement);
|
361
|
-
days.appendChild(_dayElement);
|
368
|
+
days.appendChild(createDay("", new Date(self.currentYear, self.currentMonth, dayNumber), dayNumber));
|
362
369
|
}
|
363
370
|
|
364
371
|
// append days from the next month
|
365
372
|
for (var dayNum = daysInMonth + 1; dayNum <= 42 - self.firstOfMonth; dayNum++) {
|
366
|
-
|
367
|
-
_dateIsEnabled = isEnabled(_curDate),
|
368
|
-
_dayElement2 = createElement("span", "flatpickr-day nextMonthDay" + (!_dateIsEnabled ? " disabled" : "") + (isDateInRange(_curDate) ? " inRange" : "") + (self.selectedDates.length === 1 && (_curDate < self.minRangeDate || _curDate > self.maxRangeDate) ? " notAllowed" : "") + (isDateSelected(_curDate) !== false ? " selected" : ""), dayNum % daysInMonth);
|
369
|
-
|
370
|
-
_dayElement2.dateObj = _curDate;
|
371
|
-
|
372
|
-
if (self.config.weekNumbers && dayNum % 7 === 1) {
|
373
|
-
self.weekNumbers.insertAdjacentHTML("beforeend", "<span class='disabled flatpickr-day'>" + self.config.getWeek(_curDate) + "</span>");
|
374
|
-
}
|
375
|
-
|
376
|
-
if (_dateIsEnabled) _dayElement2.tabIndex = 0;else if (self.selectedDates[0] && _curDate > self.minRangeDate && _curDate < self.selectedDates[0]) self.minRangeDate = _curDate;else if (self.selectedDates[0] && _curDate < self.maxRangeDate && _curDate > self.selectedDates[0]) self.maxRangeDate = _curDate;
|
377
|
-
|
378
|
-
triggerEvent("DayCreate", _dayElement2);
|
379
|
-
days.appendChild(_dayElement2);
|
373
|
+
days.appendChild(createDay("nextMonthDay", new Date(self.currentYear, self.currentMonth + 1, dayNum % daysInMonth), dayNum));
|
380
374
|
}
|
375
|
+
|
381
376
|
self.days.appendChild(days);
|
382
377
|
return self.days;
|
383
378
|
}
|
@@ -442,11 +437,11 @@ function Flatpickr(element, config) {
|
|
442
437
|
self.hourElement.step = self.config.hourIncrement;
|
443
438
|
self.minuteElement.step = self.config.minuteIncrement;
|
444
439
|
|
445
|
-
self.hourElement.min =
|
446
|
-
self.hourElement.max = self.config.time_24hr ?
|
440
|
+
self.hourElement.min = self.config.time_24hr ? 0 : 1;
|
441
|
+
self.hourElement.max = self.config.time_24hr ? 23 : 12;
|
447
442
|
|
448
|
-
self.minuteElement.min =
|
449
|
-
self.minuteElement.max =
|
443
|
+
self.minuteElement.min = 0;
|
444
|
+
self.minuteElement.max = 59;
|
450
445
|
|
451
446
|
self.hourElement.title = self.minuteElement.title = self.l10n.scrollTitle;
|
452
447
|
|
@@ -454,6 +449,8 @@ function Flatpickr(element, config) {
|
|
454
449
|
self.timeContainer.appendChild(separator);
|
455
450
|
self.timeContainer.appendChild(minuteInput);
|
456
451
|
|
452
|
+
if (self.config.time_24hr) self.timeContainer.classList.add("time24hr");
|
453
|
+
|
457
454
|
if (self.config.enableSeconds) {
|
458
455
|
self.timeContainer.classList.add("hasSeconds");
|
459
456
|
|
@@ -503,6 +500,7 @@ function Flatpickr(element, config) {
|
|
503
500
|
self.weekWrapper.appendChild(createElement("span", "flatpickr-weekday", self.l10n.weekAbbreviation));
|
504
501
|
self.weekNumbers = createElement("div", "flatpickr-weeks");
|
505
502
|
self.weekWrapper.appendChild(self.weekNumbers);
|
503
|
+
|
506
504
|
return self.weekWrapper;
|
507
505
|
}
|
508
506
|
|
@@ -519,6 +517,8 @@ function Flatpickr(element, config) {
|
|
519
517
|
}
|
520
518
|
|
521
519
|
function clear() {
|
520
|
+
var triggerChangeEvent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
521
|
+
|
522
522
|
self.input.value = "";
|
523
523
|
|
524
524
|
if (self.altInput) self.altInput.value = "";
|
@@ -529,7 +529,10 @@ function Flatpickr(element, config) {
|
|
529
529
|
self.dateIsPicked = false;
|
530
530
|
|
531
531
|
self.redraw();
|
532
|
-
|
532
|
+
|
533
|
+
if (triggerChangeEvent !== false)
|
534
|
+
// triggerChangeEvent is true (default) or an Event
|
535
|
+
triggerEvent("Change");
|
533
536
|
}
|
534
537
|
|
535
538
|
function close() {
|
@@ -545,7 +548,7 @@ function Flatpickr(element, config) {
|
|
545
548
|
|
546
549
|
function destroy(instance) {
|
547
550
|
instance = instance || self;
|
548
|
-
instance.clear();
|
551
|
+
instance.clear(false);
|
549
552
|
|
550
553
|
document.removeEventListener("keydown", onKeyDown);
|
551
554
|
window.removeEventListener("resize", instance.debouncedResize);
|
@@ -589,6 +592,8 @@ function Flatpickr(element, config) {
|
|
589
592
|
}
|
590
593
|
|
591
594
|
function formatDate(frmt, dateObj) {
|
595
|
+
if (self.config.formatDate) return self.config.formatDate(frmt, dateObj);
|
596
|
+
|
592
597
|
var chars = frmt.split("");
|
593
598
|
return chars.map(function (c, i) {
|
594
599
|
return self.formats[c] && chars[i - 1] !== "\\" ? self.formats[c](dateObj) : c !== "\\" ? c : "";
|
@@ -603,7 +608,11 @@ function Flatpickr(element, config) {
|
|
603
608
|
} else if (newYear && (!self.currentYearElement.min || newYear >= self.currentYearElement.min) && (!self.currentYearElement.max || newYear <= self.currentYearElement.max)) {
|
604
609
|
self.currentYear = parseInt(newYear, 10) || self.currentYear;
|
605
610
|
|
606
|
-
if (self.config.maxDate && self.currentYear === self.config.maxDate.getFullYear())
|
611
|
+
if (self.config.maxDate && self.currentYear === self.config.maxDate.getFullYear()) {
|
612
|
+
self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);
|
613
|
+
} else if (self.config.minDate && self.currentYear === self.config.minDate.getFullYear()) {
|
614
|
+
self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);
|
615
|
+
}
|
607
616
|
|
608
617
|
self.redraw();
|
609
618
|
triggerEvent("YearChange");
|
@@ -685,6 +694,7 @@ function Flatpickr(element, config) {
|
|
685
694
|
if (self.selectedDates.length !== 1 || !e.target.classList.contains("flatpickr-day")) return;
|
686
695
|
|
687
696
|
var hoverDate = e.target.dateObj,
|
697
|
+
initialDate = parseDate(self.selectedDates[0], true),
|
688
698
|
rangeStartDate = Math.min(hoverDate.getTime(), self.selectedDates[0].getTime()),
|
689
699
|
rangeEndDate = Math.max(hoverDate.getTime(), self.selectedDates[0].getTime()),
|
690
700
|
containsDisabled = false;
|
@@ -697,15 +707,27 @@ function Flatpickr(element, config) {
|
|
697
707
|
}
|
698
708
|
|
699
709
|
for (var timestamp = self.days.childNodes[0].dateObj.getTime(), i = 0; i < 42; i++, timestamp += self.utils.duration.DAY) {
|
700
|
-
|
710
|
+
var outOfRange = timestamp < self.minRangeDate.getTime() || timestamp > self.maxRangeDate.getTime();
|
711
|
+
|
712
|
+
if (outOfRange) {
|
701
713
|
self.days.childNodes[i].classList.add("notAllowed");
|
702
|
-
self.days.childNodes[i].classList.remove("inRange");
|
703
|
-
|
714
|
+
self.days.childNodes[i].classList.remove("inRange", "startRange", "endRange");
|
715
|
+
continue;
|
716
|
+
} else if (containsDisabled && !outOfRange) continue;
|
717
|
+
|
718
|
+
self.days.childNodes[i].classList.remove("startRange", "inRange", "endRange", "notAllowed");
|
719
|
+
|
720
|
+
var minRangeDate = Math.max(self.minRangeDate.getTime(), rangeStartDate),
|
721
|
+
maxRangeDate = Math.min(self.maxRangeDate.getTime(), rangeEndDate);
|
722
|
+
|
723
|
+
e.target.classList.add(hoverDate < self.selectedDates[0] ? "startRange" : "endRange");
|
724
|
+
|
725
|
+
if (initialDate > hoverDate && timestamp === initialDate.getTime()) self.days.childNodes[i].classList.add("endRange");else if (initialDate < hoverDate && timestamp === initialDate.getTime()) self.days.childNodes[i].classList.add("startRange");else if (timestamp > minRangeDate && timestamp < maxRangeDate) self.days.childNodes[i].classList.add("inRange");
|
704
726
|
}
|
705
727
|
}
|
706
728
|
|
707
729
|
function onResize() {
|
708
|
-
if (self.isOpen && !self.config.
|
730
|
+
if (self.isOpen && !self.config.static && !self.config.inline) positionCalendar();
|
709
731
|
}
|
710
732
|
|
711
733
|
function open(e) {
|
@@ -725,7 +747,7 @@ function Flatpickr(element, config) {
|
|
725
747
|
|
726
748
|
self.calendarContainer.classList.add("open");
|
727
749
|
|
728
|
-
if (!self.config.static) positionCalendar();
|
750
|
+
if (!self.config.static && !self.config.inline) positionCalendar();
|
729
751
|
|
730
752
|
self.isOpen = true;
|
731
753
|
|
@@ -758,9 +780,7 @@ function Flatpickr(element, config) {
|
|
758
780
|
self.minDateHasTime = this._minDate.getHours() || this._minDate.getMinutes() || this._minDate.getSeconds();
|
759
781
|
|
760
782
|
self.currentYearElement.min = this._minDate.getFullYear();
|
761
|
-
} else
|
762
|
-
self.currentYearElement.removeAttribute("min");
|
763
|
-
}
|
783
|
+
} else self.currentYearElement.removeAttribute("min");
|
764
784
|
|
765
785
|
self.currentYearElement.disabled = this._maxDate && this._minDate && this._maxDate.getFullYear() === this._minDate.getFullYear();
|
766
786
|
}
|
@@ -869,7 +889,7 @@ function Flatpickr(element, config) {
|
|
869
889
|
self.calendarContainer.classList.add("arrowTop");
|
870
890
|
}
|
871
891
|
|
872
|
-
if (!self.config.
|
892
|
+
if (!self.config.static && !self.config.inline) {
|
873
893
|
self.calendarContainer.style.top = top + "px";
|
874
894
|
self.calendarContainer.style.left = left + "px";
|
875
895
|
}
|
@@ -917,11 +937,10 @@ function Flatpickr(element, config) {
|
|
917
937
|
|
918
938
|
buildDays();
|
919
939
|
|
920
|
-
if (self.minDateHasTime && self.config.enableTime && compareDates(selectedDate, self.config.minDate) === 0)
|
921
|
-
setHoursFromDate(self.config.minDate);
|
922
|
-
}
|
940
|
+
if (self.minDateHasTime && self.config.enableTime && compareDates(selectedDate, self.config.minDate) === 0) setHoursFromDate(self.config.minDate);
|
923
941
|
|
924
942
|
updateValue();
|
943
|
+
|
925
944
|
setTimeout(function () {
|
926
945
|
return self.dateIsPicked = true;
|
927
946
|
}, 50);
|
@@ -970,7 +989,7 @@ function Flatpickr(element, config) {
|
|
970
989
|
break;
|
971
990
|
|
972
991
|
case "range":
|
973
|
-
self.selectedDates = inputDate.split(
|
992
|
+
self.selectedDates = inputDate.split(self.l10n.rangeSeparator).map(parseDate);
|
974
993
|
break;
|
975
994
|
|
976
995
|
default:
|
@@ -997,7 +1016,7 @@ function Flatpickr(element, config) {
|
|
997
1016
|
var month = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : self.currentMonth;
|
998
1017
|
var yr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : self.currentYear;
|
999
1018
|
|
1000
|
-
if (month === 1 && yr % 4 === 0 && yr % 100 !== 0 || yr % 400 === 0) return 29;
|
1019
|
+
if (month === 1 && (yr % 4 === 0 && yr % 100 !== 0 || yr % 400 === 0)) return 29;
|
1001
1020
|
return self.l10n.daysInMonth[month];
|
1002
1021
|
},
|
1003
1022
|
|
@@ -1201,7 +1220,7 @@ function Flatpickr(element, config) {
|
|
1201
1220
|
|
1202
1221
|
function isDateInRange(date) {
|
1203
1222
|
if (self.config.mode !== "range" || self.selectedDates.length < 2) return false;
|
1204
|
-
return date
|
1223
|
+
return compareDates(date, self.selectedDates[0]) >= 0 && compareDates(date, self.selectedDates[1]) <= 0;
|
1205
1224
|
}
|
1206
1225
|
|
1207
1226
|
function updateNavigationCurrentMonth() {
|
@@ -1230,7 +1249,7 @@ function Flatpickr(element, config) {
|
|
1230
1249
|
self.mobileInput.value = self.selectedDates.length ? formatDate(self.mobileFormatStr, latestSelectedDateObj()) : "";
|
1231
1250
|
}
|
1232
1251
|
|
1233
|
-
var joinChar = self.config.mode !== "range" ? "; " :
|
1252
|
+
var joinChar = self.config.mode !== "range" ? "; " : self.l10n.rangeSeparator;
|
1234
1253
|
|
1235
1254
|
self.input.value = self.selectedDates.map(function (dObj) {
|
1236
1255
|
return formatDate(self.config.dateFormat, dObj);
|
@@ -1289,31 +1308,34 @@ function Flatpickr(element, config) {
|
|
1289
1308
|
function compareDates(date1, date2) {
|
1290
1309
|
if (!(date1 instanceof Date) || !(date2 instanceof Date)) return false;
|
1291
1310
|
|
1292
|
-
return date1.
|
1293
|
-
999 * (date1.getFullYear() - date2.getFullYear());
|
1311
|
+
return new Date(date1.getTime()).setHours(0, 0, 0, 0) - new Date(date2.getTime()).setHours(0, 0, 0, 0);
|
1294
1312
|
}
|
1295
1313
|
|
1296
1314
|
function timeWrapper(e) {
|
1297
1315
|
e.preventDefault();
|
1298
|
-
if (e && ((e.target.value || e.target.textContent).length >= 2 ||
|
1316
|
+
if (e && ((e.target.value || e.target.textContent).length >= 2 || // typed two digits
|
1317
|
+
e.type !== "keydown" && e.type !== "input" // scroll event
|
1318
|
+
)) e.target.blur();
|
1299
1319
|
|
1300
|
-
if (e.target.
|
1301
|
-
e.target.textContent = ["AM", "PM"][e.target.textContent === "AM" | 0];
|
1302
|
-
return;
|
1303
|
-
}
|
1320
|
+
if (self.amPM && e.target === self.amPM) return e.target.textContent = ["AM", "PM"][e.target.textContent === "AM" | 0];
|
1304
1321
|
|
1305
|
-
var min =
|
1306
|
-
max =
|
1307
|
-
step =
|
1308
|
-
|
1322
|
+
var min = Number(e.target.min),
|
1323
|
+
max = Number(e.target.max),
|
1324
|
+
step = Number(e.target.step),
|
1325
|
+
curValue = parseInt(e.target.value, 10),
|
1326
|
+
delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.deltaY));
|
1309
1327
|
|
1310
|
-
var newValue =
|
1328
|
+
var newValue = Number(curValue);
|
1311
1329
|
|
1312
|
-
if (e.type === "wheel") newValue =
|
1330
|
+
if (e.type === "wheel") newValue = curValue + step * delta;else if (e.type === "keydown") newValue = curValue + step * (e.which === 38 ? 1 : -1);
|
1313
1331
|
|
1314
|
-
if (newValue
|
1332
|
+
if (newValue < min) {
|
1333
|
+
newValue = max + newValue + (e.target !== self.hourElement) + (e.target === self.hourElement && !self.amPM);
|
1334
|
+
} else if (newValue > max) {
|
1335
|
+
newValue = e.target === self.hourElement ? newValue - max - !self.amPM : min;
|
1336
|
+
}
|
1315
1337
|
|
1316
|
-
if (self.amPM &&
|
1338
|
+
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";
|
1317
1339
|
|
1318
1340
|
e.target.value = self.pad(newValue);
|
1319
1341
|
}
|
@@ -1378,6 +1400,9 @@ Flatpickr.defaultConfig = {
|
|
1378
1400
|
// dateparser that transforms a given string to a date object
|
1379
1401
|
parseDate: null,
|
1380
1402
|
|
1403
|
+
// dateformatter that transforms a given date object to a string, according to passed format
|
1404
|
+
formatDate: null,
|
1405
|
+
|
1381
1406
|
getWeek: function getWeek(givenDate) {
|
1382
1407
|
var date = new Date(givenDate.getTime());
|
1383
1408
|
date.setHours(0, 0, 0, 0);
|
@@ -1477,6 +1502,7 @@ Flatpickr.l10ns = {
|
|
1477
1502
|
return "th";
|
1478
1503
|
}
|
1479
1504
|
},
|
1505
|
+
rangeSeparator: " to ",
|
1480
1506
|
weekAbbreviation: "Wk",
|
1481
1507
|
scrollTitle: "Scroll to increment",
|
1482
1508
|
toggleTitle: "Click to toggle"
|