flatpickr 2.2.3.0 → 2.2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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"
|