flatpickr_rails 0.0.2 → 0.0.3

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -21
  3. data/lib/flatpickr_rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/flatpickr.js +1506 -0
  5. data/vendor/assets/javascripts/flatpickr/l10n/ar.js +16 -0
  6. data/vendor/assets/javascripts/flatpickr/l10n/bg.js +16 -0
  7. data/vendor/assets/javascripts/flatpickr/l10n/bn.js +16 -0
  8. data/vendor/assets/javascripts/flatpickr/l10n/cat.js +36 -0
  9. data/vendor/assets/javascripts/flatpickr/l10n/cs.js +22 -0
  10. data/vendor/assets/javascripts/flatpickr/l10n/da.js +20 -0
  11. data/vendor/assets/javascripts/flatpickr/l10n/de.js +16 -0
  12. data/vendor/assets/javascripts/flatpickr/l10n/es.js +22 -0
  13. data/vendor/assets/javascripts/flatpickr/l10n/et.js +27 -0
  14. data/vendor/assets/javascripts/flatpickr/l10n/fa.js +20 -0
  15. data/vendor/assets/javascripts/flatpickr/l10n/fi.js +22 -0
  16. data/vendor/assets/javascripts/flatpickr/l10n/fr.js +26 -0
  17. data/vendor/assets/javascripts/flatpickr/l10n/he.js +16 -0
  18. data/vendor/assets/javascripts/flatpickr/l10n/hi.js +16 -0
  19. data/vendor/assets/javascripts/flatpickr/l10n/hr.js +19 -0
  20. data/vendor/assets/javascripts/flatpickr/l10n/hu.js +27 -0
  21. data/vendor/assets/javascripts/flatpickr/l10n/id.js +22 -0
  22. data/vendor/assets/javascripts/flatpickr/l10n/it.js +27 -0
  23. data/vendor/assets/javascripts/flatpickr/l10n/ja.js +16 -0
  24. data/vendor/assets/javascripts/flatpickr/l10n/ko.js +20 -0
  25. data/vendor/assets/javascripts/flatpickr/l10n/ms.js +22 -0
  26. data/vendor/assets/javascripts/flatpickr/l10n/my.js +22 -0
  27. data/vendor/assets/javascripts/flatpickr/l10n/nl.js +26 -0
  28. data/vendor/assets/javascripts/flatpickr/l10n/no.js +20 -0
  29. data/vendor/assets/javascripts/flatpickr/l10n/pa.js +16 -0
  30. data/vendor/assets/javascripts/flatpickr/l10n/pl.js +20 -0
  31. data/vendor/assets/javascripts/flatpickr/l10n/pt.js +16 -0
  32. data/vendor/assets/javascripts/flatpickr/l10n/ro.js +23 -0
  33. data/vendor/assets/javascripts/flatpickr/l10n/ru.js +16 -0
  34. data/vendor/assets/javascripts/flatpickr/l10n/si.js +17 -0
  35. data/vendor/assets/javascripts/flatpickr/l10n/sq.js +16 -0
  36. data/vendor/assets/javascripts/flatpickr/l10n/sv.js +22 -0
  37. data/vendor/assets/javascripts/flatpickr/l10n/tr.js +18 -0
  38. data/vendor/assets/javascripts/flatpickr/l10n/uk.js +16 -0
  39. data/vendor/assets/javascripts/flatpickr/l10n/vn.js +19 -0
  40. data/vendor/assets/javascripts/flatpickr/l10n/zh.js +17 -0
  41. data/vendor/assets/stylesheets/flatpickr.airbnb.css +1 -0
  42. data/vendor/assets/stylesheets/flatpickr.base16_flat.css +1 -0
  43. data/vendor/assets/stylesheets/flatpickr.confetti.css +1 -246
  44. data/vendor/assets/stylesheets/flatpickr.css +1 -242
  45. data/vendor/assets/stylesheets/flatpickr.dark.css +1 -243
  46. data/vendor/assets/stylesheets/flatpickr.material_blue.css +1 -246
  47. data/vendor/assets/stylesheets/flatpickr.material_green.css +1 -246
  48. data/vendor/assets/stylesheets/flatpickr.material_orange.css +1 -246
  49. data/vendor/assets/stylesheets/flatpickr.material_red.css +1 -246
  50. metadata +42 -6
  51. data/vendor/assets/javascripts/flatpickr/core.js +0 -1034
  52. data/vendor/assets/javascripts/flatpickr/index.js +0 -1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flatpickr_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jiren
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-30 00:00:00.000000000 Z
11
+ date: 2016-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -88,8 +88,45 @@ files:
88
88
  - lib/flatpickr_rails/engine.rb
89
89
  - lib/flatpickr_rails/railtie.rb
90
90
  - lib/flatpickr_rails/version.rb
91
- - vendor/assets/javascripts/flatpickr/core.js
92
- - vendor/assets/javascripts/flatpickr/index.js
91
+ - vendor/assets/javascripts/flatpickr.js
92
+ - vendor/assets/javascripts/flatpickr/l10n/ar.js
93
+ - vendor/assets/javascripts/flatpickr/l10n/bg.js
94
+ - vendor/assets/javascripts/flatpickr/l10n/bn.js
95
+ - vendor/assets/javascripts/flatpickr/l10n/cat.js
96
+ - vendor/assets/javascripts/flatpickr/l10n/cs.js
97
+ - vendor/assets/javascripts/flatpickr/l10n/da.js
98
+ - vendor/assets/javascripts/flatpickr/l10n/de.js
99
+ - vendor/assets/javascripts/flatpickr/l10n/es.js
100
+ - vendor/assets/javascripts/flatpickr/l10n/et.js
101
+ - vendor/assets/javascripts/flatpickr/l10n/fa.js
102
+ - vendor/assets/javascripts/flatpickr/l10n/fi.js
103
+ - vendor/assets/javascripts/flatpickr/l10n/fr.js
104
+ - vendor/assets/javascripts/flatpickr/l10n/he.js
105
+ - vendor/assets/javascripts/flatpickr/l10n/hi.js
106
+ - vendor/assets/javascripts/flatpickr/l10n/hr.js
107
+ - vendor/assets/javascripts/flatpickr/l10n/hu.js
108
+ - vendor/assets/javascripts/flatpickr/l10n/id.js
109
+ - vendor/assets/javascripts/flatpickr/l10n/it.js
110
+ - vendor/assets/javascripts/flatpickr/l10n/ja.js
111
+ - vendor/assets/javascripts/flatpickr/l10n/ko.js
112
+ - vendor/assets/javascripts/flatpickr/l10n/ms.js
113
+ - vendor/assets/javascripts/flatpickr/l10n/my.js
114
+ - vendor/assets/javascripts/flatpickr/l10n/nl.js
115
+ - vendor/assets/javascripts/flatpickr/l10n/no.js
116
+ - vendor/assets/javascripts/flatpickr/l10n/pa.js
117
+ - vendor/assets/javascripts/flatpickr/l10n/pl.js
118
+ - vendor/assets/javascripts/flatpickr/l10n/pt.js
119
+ - vendor/assets/javascripts/flatpickr/l10n/ro.js
120
+ - vendor/assets/javascripts/flatpickr/l10n/ru.js
121
+ - vendor/assets/javascripts/flatpickr/l10n/si.js
122
+ - vendor/assets/javascripts/flatpickr/l10n/sq.js
123
+ - vendor/assets/javascripts/flatpickr/l10n/sv.js
124
+ - vendor/assets/javascripts/flatpickr/l10n/tr.js
125
+ - vendor/assets/javascripts/flatpickr/l10n/uk.js
126
+ - vendor/assets/javascripts/flatpickr/l10n/vn.js
127
+ - vendor/assets/javascripts/flatpickr/l10n/zh.js
128
+ - vendor/assets/stylesheets/flatpickr.airbnb.css
129
+ - vendor/assets/stylesheets/flatpickr.base16_flat.css
93
130
  - vendor/assets/stylesheets/flatpickr.confetti.css
94
131
  - vendor/assets/stylesheets/flatpickr.css
95
132
  - vendor/assets/stylesheets/flatpickr.dark.css
@@ -117,9 +154,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
154
  version: '0'
118
155
  requirements: []
119
156
  rubyforge_project:
120
- rubygems_version: 2.4.5
157
+ rubygems_version: 2.5.1
121
158
  signing_key:
122
159
  specification_version: 4
123
160
  summary: A lightweight & powerful datetimepicker gem
124
161
  test_files: []
125
- has_rdoc:
@@ -1,1034 +0,0 @@
1
- 'use strict';
2
-
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 ? "symbol" : typeof obj; };
4
-
5
- var flatpickr = function flatpickr(selector, config) {
6
- 'use strict';
7
-
8
- var elements = void 0,
9
- instances = void 0,
10
- createInstance = function createInstance(element) {
11
- if (element._flatpickr) element._flatpickr.destroy();
12
-
13
- element._flatpickr = new flatpickr.init(element, config);
14
- return element._flatpickr;
15
- };
16
-
17
- if (selector.nodeName) return createInstance(selector);
18
- /*
19
- Utilize the performance of native getters if applicable
20
- https://jsperf.com/getelementsbyclassname-vs-queryselectorall/18
21
- https://jsperf.com/jquery-vs-javascript-performance-comparison/22
22
- */
23
- else if (/^\#[a-zA-Z0-9\-\_]*$/.test(selector)) return createInstance(document.getElementById(selector.slice(1)));else if (/^\.[a-zA-Z0-9\-\_]*$/.test(selector)) elements = document.getElementsByClassName(selector.slice(1));else elements = document.querySelectorAll(selector);
24
-
25
- instances = [].slice.call(elements).map(createInstance);
26
-
27
- return {
28
- calendars: instances,
29
- byID: function byID(id) {
30
- for (var i = 0; i < instances.length; i++) {
31
- if (instances[i].element.id === id) return instances[i];
32
- }
33
- }
34
-
35
- };
36
- };
37
-
38
- /**
39
- * @constructor
40
- */
41
- flatpickr.init = function (element, instanceConfig) {
42
- 'use strict';
43
-
44
- var createElement = function createElement(tag, className, content) {
45
-
46
- var element = document.createElement(tag);
47
-
48
- if (content) element.innerHTML = content;
49
-
50
- if (className) element.className = className;
51
-
52
- return element;
53
- };
54
-
55
- function throttle(callback, limit) {
56
- var wait = false;
57
- return function () {
58
- if (!wait) {
59
- callback.call();
60
- wait = true;
61
- setTimeout(function () {
62
- wait = false;
63
- }, limit);
64
- }
65
- };
66
- }
67
-
68
- // functions
69
- var self = this,
70
- init,
71
- wrap,
72
- uDate,
73
- equalDates,
74
- pad,
75
- formatDate,
76
- monthToStr,
77
- isDisabled,
78
- buildMonthNavigation,
79
- buildWeekdays,
80
- buildCalendar,
81
- buildDays,
82
- buildWeeks,
83
- buildTime,
84
- timeWrapper,
85
- yearScroll,
86
- updateValue,
87
- onInput,
88
- updateNavigationCurrentMonth,
89
- handleYearChange,
90
- changeMonth,
91
- getDaysinMonth,
92
- documentClick,
93
- calendarClick,
94
- getRandomCalendarIdStr,
95
- bind,
96
- triggerChange;
97
-
98
- // elements & variables
99
- var calendarContainer,
100
- navigationCurrentMonth,
101
- monthsNav,
102
- prevMonthNav,
103
- cur_year,
104
- cur_month,
105
- nextMonthNav,
106
- calendar,
107
- weekNumbers,
108
- currentDate = new Date(),
109
- wrapperElement,
110
- hourElement,
111
- minuteElement,
112
- secondElement,
113
- am_pm,
114
- clickEvt;
115
-
116
- init = function init() {
117
-
118
- instanceConfig = instanceConfig || {};
119
-
120
- self.config = {};
121
- self.element = element;
122
-
123
- for (var config in self.defaultConfig) {
124
- self.config[config] = instanceConfig[config] || self.element.dataset && self.element.dataset[config.toLowerCase()] || self.element.getAttribute("data-" + config) || self.defaultConfig[config];
125
- }self.input = self.config.wrap ? element.querySelector("[data-input]") : element;
126
- self.input.classList.add("flatpickr-input");
127
-
128
- if (self.config.defaultDate) self.config.defaultDate = uDate(self.config.defaultDate);
129
-
130
- if (self.input.value || self.config.defaultDate) self.selectedDateObj = uDate(self.config.defaultDate || self.input.value);
131
-
132
- wrap();
133
- buildCalendar();
134
- bind();
135
-
136
- self.uDate = uDate;
137
-
138
- self.jumpToDate();
139
- updateValue();
140
- };
141
-
142
- getRandomCalendarIdStr = function getRandomCalendarIdStr() {
143
- var randNum = void 0,
144
- idStr = void 0;
145
- do {
146
- randNum = Math.round(Math.random() * Math.pow(10, 10));
147
- idStr = 'flatpickr-' + randNum;
148
- } while (document.getElementById(idStr) !== null);
149
- return idStr;
150
- };
151
-
152
- uDate = function uDate(date, timeless) {
153
-
154
- timeless = timeless || false;
155
-
156
- if (date === 'today') {
157
- date = new Date();
158
- timeless = true;
159
- } else if (typeof date === 'string') {
160
-
161
- date = date.trim();
162
-
163
- if (self.config.parseDate) date = self.config.parseDate(date);else if (/^\d\d\d\d\-\d{1,2}\-\d\d$/.test(date))
164
- // this utc datestring gets parsed, but incorrectly by Date.parse
165
- date = new Date(date.replace(/(\d)-(\d)/g, "$1/$2"));else if (Date.parse(date)) date = new Date(date);else if (/^\d\d\d\d\-\d\d\-\d\d/.test(date)) // disable special utc datestring
166
- date = new Date(date.replace(/(\d)-(\d)/g, "$1/$2"));else if (/^(\d?\d):(\d\d)/.test(date)) {
167
- // time-only picker
168
- var matches = date.match(/^(\d?\d):(\d\d)(:(\d\d))?/);
169
-
170
- var seconds = 0;
171
- if (matches[4] !== undefined) seconds = matches[4];
172
-
173
- date = new Date();
174
- date.setHours(matches[1], matches[2], seconds, 0);
175
- } else {
176
- console.error('flatpickr: invalid date string ' + date);
177
- console.info(self.element);
178
- }
179
- }
180
-
181
- if (timeless && date) date.setHours(0, 0, 0, 0);
182
-
183
- if (String(self.config.utc) === 'true' && date && !date.fp_isUTC) date = date.fp_toUTC();
184
-
185
- return date;
186
- };
187
-
188
- equalDates = function equalDates(date1, date2) {
189
- return date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate();
190
- };
191
-
192
- wrap = function wrap() {
193
-
194
- wrapperElement = createElement("div", "flatpickr-wrapper");
195
-
196
- if (self.config.inline || self.config.static) {
197
- // Wrap input and place calendar underneath
198
- self.element.parentNode.insertBefore(wrapperElement, self.element);
199
- wrapperElement.appendChild(self.element);
200
-
201
- wrapperElement.classList.add(self.config.inline ? 'inline' : 'static');
202
- } else
203
- // Insert at bottom of BODY tag to display outside
204
- // of relative positioned elements with css 'overflow: hidden;'
205
- // property set.
206
- document.body.appendChild(wrapperElement);
207
-
208
- if (self.config.altInput) {
209
- // replicate self.element
210
- self.altInput = createElement(self.input.nodeName, self.config.altInputClass + " flatpickr-input");
211
- self.altInput.placeholder = self.input.placeholder;
212
- self.altInput.type = "text";
213
-
214
- self.input.type = 'hidden';
215
- self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);
216
- }
217
- };
218
-
219
- getDaysinMonth = function getDaysinMonth(givenMonth) {
220
-
221
- var yr = self.currentYear,
222
- month = givenMonth || self.currentMonth;
223
-
224
- if (month === 1 && yr % 4 === 0 && yr % 100 !== 0 || yr % 400 === 0) return 29;
225
-
226
- return self.l10n.daysInMonth[month];
227
- };
228
-
229
- updateValue = function updateValue() {
230
-
231
- var prev_date = void 0;
232
-
233
- if (self.selectedDateObj && self.config.enableTime) {
234
-
235
- prev_date = self.selectedDateObj.getTime();
236
-
237
- // update time
238
- var hours = parseInt(hourElement.value, 10) || 0,
239
- minutes = (60 + (parseInt(minuteElement.value, 10) || 0)) % 60,
240
- seconds;
241
-
242
- if (self.config.enableSeconds) seconds = (60 + parseInt(secondElement.value, 10) || 0) % 60;
243
-
244
- if (!self.config.time_24hr) hours = hours % 12 + 12 * (am_pm.innerHTML === "PM");
245
-
246
- self.selectedDateObj.setHours(hours, minutes, seconds === undefined ? self.selectedDateObj.getSeconds() : seconds);
247
-
248
- hourElement.value = pad(self.config.time_24hr ? hours : (12 + hours) % 12 + 12 * (hours % 12 === 0));
249
-
250
- minuteElement.value = pad(minutes);
251
-
252
- if (seconds !== undefined) secondElement.value = pad(seconds);
253
- }
254
-
255
- if (self.altInput && self.selectedDateObj) self.altInput.value = formatDate(self.config.altFormat);
256
-
257
- if (self.selectedDateObj) self.input.value = formatDate(self.config.dateFormat);
258
-
259
- if (prev_date && self.selectedDateObj.getTime() !== prev_date) {
260
- triggerChange();
261
- }
262
- };
263
-
264
- pad = function pad(num) {
265
- return ("0" + num).slice(-2);
266
- };
267
-
268
- formatDate = function formatDate(dateFormat) {
269
-
270
- if (self.config.noCalendar) dateFormat = "";
271
-
272
- if (self.config.enableTime) dateFormat += " " + self.config.timeFormat;
273
-
274
- var formattedDate = '',
275
- formats = {
276
- D: function D() {
277
- return self.l10n.weekdays.shorthand[formats.w()];
278
- }, // weekday name, short, e.g. Thu
279
- F: function F() {
280
- return monthToStr(formats.n() - 1, false);
281
- }, // full month name e.g. January
282
- H: function H() {
283
- return pad(self.selectedDateObj.getHours());
284
- }, // hours with leading zero e.g. 03
285
- J: function J() {
286
- return formats.j() + self.l10n.ordinal(formats.j());
287
- }, // day (1-30) with ordinal suffix e.g. 1st, 2nd
288
- K: function K() {
289
- return self.selectedDateObj.getHours() > 11 ? "PM" : "AM";
290
- }, // AM/PM
291
- M: function M() {
292
- return monthToStr(formats.n() - 1, true);
293
- }, // shorthand month e.g. Jan
294
- S: function S() {
295
- return pad(self.selectedDateObj.getSeconds());
296
- }, // seconds 00-59
297
- U: function U() {
298
- return self.selectedDateObj.getTime() / 1000;
299
- },
300
- Y: function Y() {
301
- return self.selectedDateObj.getFullYear();
302
- }, // 2016
303
- d: function d() {
304
- return pad(formats.j());
305
- }, // day in month, padded (01-30)
306
- h: function h() {
307
- return self.selectedDateObj.getHours() % 12 ? self.selectedDateObj.getHours() % 12 : 12;
308
- }, // hour from 1-12 (am/pm)
309
- i: function i() {
310
- return pad(self.selectedDateObj.getMinutes());
311
- }, // minutes, padded with leading zero e.g. 09
312
- j: function j() {
313
- return self.selectedDateObj.getDate();
314
- }, // day in month (1-30)
315
- l: function l() {
316
- return self.l10n.weekdays.longhand[formats.w()];
317
- }, // weekday name, full, e.g. Thursday
318
- m: function m() {
319
- return pad(formats.n());
320
- }, // padded month number (01-12)
321
- n: function n() {
322
- return self.selectedDateObj.getMonth() + 1;
323
- }, // the month number (1-12)
324
- s: function s() {
325
- return self.selectedDateObj.getSeconds();
326
- }, // seconds 0-59
327
- w: function w() {
328
- return self.selectedDateObj.getDay();
329
- }, // number of the day of the week
330
- y: function y() {
331
- return String(formats.Y()).substring(2);
332
- } // last two digits of full year e.g. 16 for full year 2016
333
- },
334
- formatPieces = dateFormat.split('');
335
-
336
- for (var i = 0; i < formatPieces.length; i++) {
337
- var c = formatPieces[i];
338
- if (formats[c] && formatPieces[i - 1] !== '\\') formattedDate += formats[c]();else if (c !== '\\') formattedDate += c;
339
- }
340
-
341
- return formattedDate;
342
- };
343
-
344
- monthToStr = function monthToStr(date, shorthand) {
345
- return shorthand || self.config.shorthandCurrentMonth ? self.l10n.months.shorthand[date] : self.l10n.months.longhand[date];
346
- };
347
-
348
- isDisabled = function isDisabled(check_date) {
349
-
350
- if (self.config.minDate && check_date < self.config.minDate || self.config.maxDate && check_date > self.config.maxDate) return true;
351
-
352
- check_date = uDate(check_date, true); //timeless
353
-
354
- var d = void 0;
355
-
356
- for (var i = 0; i < self.config.disable.length; i++) {
357
-
358
- d = self.config.disable[i];
359
-
360
- if (d instanceof Function && d(check_date)) // disabled by function
361
- return true;else if ( // disabled weekday
362
- typeof d === 'string' && /^wkd/.test(d) && check_date.getDay() === (parseInt(d.slice(-1)) + self.l10n.firstDayOfWeek - 1) % 7) return true;else if ( // disabled by date string
363
- (d instanceof Date || typeof d === 'string' && !/^wkd/.test(d)) && uDate(d, true).getTime() === check_date.getTime()) return true;else if ( // disabled by range
364
- (typeof d === 'undefined' ? 'undefined' : _typeof(d)) === 'object' && d.hasOwnProperty("from") && check_date >= uDate(d.from) && check_date <= uDate(d.to)) return true;
365
- }
366
-
367
- return false;
368
- };
369
-
370
- yearScroll = function yearScroll(event) {
371
- event.preventDefault();
372
-
373
- var delta = Math.max(-1, Math.min(1, event.wheelDelta || -event.deltaY));
374
- self.currentYear = event.target.value = parseInt(event.target.value, 10) + delta;
375
- self.redraw();
376
- };
377
-
378
- timeWrapper = function timeWrapper(e) {
379
- e.preventDefault();
380
-
381
- var min = parseInt(e.target.min, 10),
382
- max = parseInt(e.target.max, 10),
383
- step = parseInt(e.target.step, 10),
384
- delta = step * Math.max(-1, Math.min(1, e.wheelDelta || -e.deltaY)),
385
- newValue = (parseInt(e.target.value, 10) + delta) % (max + (min === 0));
386
-
387
- if (newValue < min) newValue = max + (min === 0) - step * (min === 0);
388
-
389
- e.target.value = pad(newValue);
390
- };
391
-
392
- updateNavigationCurrentMonth = function updateNavigationCurrentMonth() {
393
-
394
- cur_month.innerHTML = monthToStr(self.currentMonth) + " ";
395
- cur_year.value = self.currentYear;
396
- };
397
-
398
- handleYearChange = function handleYearChange() {
399
-
400
- if (self.currentMonth < 0 || self.currentMonth > 11) {
401
-
402
- self.currentYear += self.currentMonth % 11;
403
- self.currentMonth = (self.currentMonth + 12) % 12;
404
- }
405
- };
406
-
407
- documentClick = function documentClick(event) {
408
- if (!wrapperElement.classList.contains("open") || wrapperElement.contains(event.target) || event.target === self.element || event.target === self.altInput) return;
409
-
410
- self.close();
411
- };
412
-
413
- changeMonth = function changeMonth(offset) {
414
- self.currentMonth += offset;
415
-
416
- handleYearChange();
417
- updateNavigationCurrentMonth();
418
- buildDays();
419
- };
420
-
421
- calendarClick = function calendarClick(e) {
422
-
423
- e.preventDefault();
424
-
425
- if (e.target.classList.contains('slot')) {
426
-
427
- self.selectedDateObj = new Date(self.currentYear, self.currentMonth, e.target.innerHTML);
428
-
429
- updateValue();
430
- triggerChange();
431
- buildDays();
432
-
433
- if (!self.config.inline && !self.config.enableTime) self.close();
434
- }
435
- };
436
-
437
- buildCalendar = function buildCalendar() {
438
-
439
- calendarContainer = createElement('div', 'flatpickr-calendar');
440
- calendarContainer.id = getRandomCalendarIdStr();
441
-
442
- calendar = createElement("div", "flatpickr-days");
443
-
444
- if (!self.config.noCalendar) {
445
- buildMonthNavigation();
446
- buildWeekdays();
447
-
448
- if (self.config.weekNumbers) buildWeeks();
449
-
450
- buildDays();
451
-
452
- calendarContainer.appendChild(calendar);
453
- }
454
-
455
- wrapperElement.appendChild(calendarContainer);
456
-
457
- if (self.config.enableTime) buildTime();
458
- };
459
-
460
- buildMonthNavigation = function buildMonthNavigation() {
461
-
462
- monthsNav = createElement("div", "flatpickr-month");
463
-
464
- prevMonthNav = createElement("span", "flatpickr-prev-month", self.config.prevArrow);
465
-
466
- cur_month = createElement("span", "cur_month");
467
-
468
- cur_year = createElement("input", "cur_year");
469
- cur_year.type = "number";
470
- cur_year.title = self.l10n.scrollTitle;
471
-
472
- nextMonthNav = createElement("span", "flatpickr-next-month", self.config.nextArrow);
473
-
474
- navigationCurrentMonth = createElement('span', 'flatpickr-current-month');
475
- navigationCurrentMonth.appendChild(cur_month);
476
- navigationCurrentMonth.appendChild(cur_year);
477
-
478
- monthsNav.appendChild(prevMonthNav);
479
- monthsNav.appendChild(navigationCurrentMonth);
480
- monthsNav.appendChild(nextMonthNav);
481
-
482
- updateNavigationCurrentMonth();
483
- calendarContainer.appendChild(monthsNav);
484
- };
485
-
486
- buildWeekdays = function buildWeekdays() {
487
-
488
- var weekdayContainer = createElement('div', "flatpickr-weekdays"),
489
- firstDayOfWeek = self.l10n.firstDayOfWeek,
490
- weekdays = self.l10n.weekdays.shorthand.slice();
491
-
492
- if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {
493
- weekdays = [].concat(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));
494
- }
495
-
496
- weekdayContainer.innerHTML = self.config.weekNumbers ? "<span>" + self.l10n.weekAbbreviation + "</span>" : "";
497
- weekdayContainer.innerHTML += '<span>' + weekdays.join('</span><span>') + '</span>';
498
-
499
- calendarContainer.appendChild(weekdayContainer);
500
- };
501
-
502
- buildWeeks = function buildWeeks() {
503
-
504
- calendarContainer.classList.add("hasWeeks");
505
-
506
- weekNumbers = createElement("div", 'flatpickr-weeks');
507
- calendarContainer.appendChild(weekNumbers);
508
- };
509
-
510
- buildDays = function buildDays() {
511
-
512
- var firstOfMonth = (new Date(self.currentYear, self.currentMonth, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7,
513
- numDays = getDaysinMonth(),
514
- prevMonthDays = getDaysinMonth((self.currentMonth - 1 + 12) % 12),
515
- dayNumber = prevMonthDays + 1 - firstOfMonth,
516
- className = void 0,
517
- cur_date = void 0,
518
- date_is_disabled = void 0;
519
-
520
- if (self.config.weekNumbers && weekNumbers) weekNumbers.innerHTML = '';
521
-
522
- calendar.innerHTML = '';
523
-
524
- self.config.minDate = uDate(self.config.minDate, true);
525
- self.config.maxDate = uDate(self.config.maxDate, true);
526
-
527
- // prepend days from the ending of previous month
528
- for (; dayNumber <= prevMonthDays; dayNumber++) {
529
- calendar.appendChild(createElement("span", "disabled flatpickr-day", dayNumber));
530
- } // Start at 1 since there is no 0th day
531
- for (dayNumber = 1; dayNumber <= 42 - firstOfMonth; dayNumber++) {
532
-
533
- if (dayNumber <= numDays || dayNumber % 7 === 1) // avoids new date objects for appended dates
534
- cur_date = new Date(self.currentYear, self.currentMonth, dayNumber, 0, 0, 0, 0, 0);
535
-
536
- if (self.config.weekNumbers && weekNumbers && dayNumber % 7 === 1) weekNumbers.appendChild(createElement("span", "disabled flatpickr-day", cur_date.fp_getWeek()));
537
-
538
- date_is_disabled = dayNumber > numDays || isDisabled(cur_date);
539
-
540
- className = date_is_disabled ? "disabled flatpickr-day" : "slot flatpickr-day";
541
-
542
- if (!date_is_disabled && equalDates(cur_date, currentDate)) className += ' today';
543
-
544
- if (!date_is_disabled && self.selectedDateObj && equalDates(cur_date, self.selectedDateObj)) className += ' selected';
545
-
546
- calendar.appendChild(createElement("span", className, dayNumber > numDays ? dayNumber % numDays : dayNumber));
547
- }
548
- };
549
-
550
- buildTime = function buildTime() {
551
-
552
- var timeContainer = createElement("div", "flatpickr-time"),
553
- separator = createElement("span", "flatpickr-time-separator", ":");
554
-
555
- hourElement = createElement("input", "flatpickr-hour");
556
- minuteElement = createElement("input", "flatpickr-minute");
557
-
558
- hourElement.type = minuteElement.type = "number";
559
-
560
- hourElement.value = self.selectedDateObj ? pad(self.selectedDateObj.getHours()) : 12;
561
-
562
- minuteElement.value = self.selectedDateObj ? pad(self.selectedDateObj.getMinutes()) : "00";
563
-
564
- hourElement.step = self.config.hourIncrement;
565
- minuteElement.step = self.config.minuteIncrement;
566
-
567
- hourElement.min = +!self.config.time_24hr; // 0 in 24hr mode, 1 in 12hr mode
568
- hourElement.max = self.config.time_24hr ? 23 : 12;
569
-
570
- minuteElement.min = 0;
571
- minuteElement.max = 59;
572
-
573
- hourElement.title = minuteElement.title = self.l10n.scrollTitle;
574
-
575
- timeContainer.appendChild(hourElement);
576
- timeContainer.appendChild(separator);
577
- timeContainer.appendChild(minuteElement);
578
-
579
- if (self.config.enableSeconds) {
580
-
581
- timeContainer.classList.add("has-seconds");
582
-
583
- secondElement = createElement("input", "flatpickr-second");
584
- secondElement.type = "number";
585
- secondElement.value = self.selectedDateObj ? pad(self.selectedDateObj.getSeconds()) : "00";
586
-
587
- secondElement.step = 5;
588
- secondElement.min = 0;
589
- secondElement.max = 59;
590
-
591
- timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
592
- timeContainer.appendChild(secondElement);
593
- }
594
-
595
- if (!self.config.time_24hr) {
596
- // add am_pm if appropriate
597
- am_pm = createElement("span", "flatpickr-am-pm", ["AM", "PM"][hourElement.value > 11 | 0]);
598
- am_pm.title = self.l10n.toggleTitle;
599
- timeContainer.appendChild(am_pm);
600
- }
601
-
602
- // picking time only
603
- if (self.config.noCalendar && !self.selectedDateObj) self.selectedDateObj = new Date();
604
-
605
- calendarContainer.appendChild(timeContainer);
606
- };
607
-
608
- bind = function bind() {
609
-
610
- function am_pm_toggle(e) {
611
- e.preventDefault();
612
- am_pm.innerHTML = ["AM", "PM"][am_pm.innerHTML === "AM" | 0];
613
- }
614
-
615
- if (String(self.config.clickOpens) === 'true') {
616
- self.input.addEventListener('focus', self.open);
617
-
618
- if (self.altInput) self.altInput.addEventListener('focus', self.open);
619
- }
620
-
621
- if (self.config.allowInput) {
622
- if (self.altInput) self.altInput.addEventListener('change', onInput);else self.input.addEventListener('change', onInput);
623
- }
624
-
625
- if (self.config.wrap && self.element.querySelector("[data-open]")) self.element.querySelector("[data-open]").addEventListener('click', self.open);
626
-
627
- if (self.config.wrap && self.element.querySelector("[data-close]")) self.element.querySelector("[data-close]").addEventListener('click', self.close);
628
-
629
- if (self.config.wrap && self.element.querySelector("[data-toggle]")) self.element.querySelector("[data-toggle]").addEventListener('click', self.toggle);
630
-
631
- if (self.config.wrap && self.element.querySelector("[data-clear]")) self.element.querySelector("[data-clear]").addEventListener('click', self.clear);
632
-
633
- if (!self.config.noCalendar) {
634
-
635
- prevMonthNav.addEventListener('click', function () {
636
- changeMonth(-1);
637
- });
638
- nextMonthNav.addEventListener('click', function () {
639
- changeMonth(1);
640
- });
641
-
642
- cur_year.addEventListener('wheel', yearScroll);
643
- cur_year.addEventListener("focus", cur_year.select);
644
- cur_year.addEventListener("input", function (event) {
645
-
646
- self.currentYear = parseInt(event.target.value, 10);
647
- self.redraw();
648
- });
649
-
650
- calendar.addEventListener('click', calendarClick);
651
- }
652
-
653
- document.addEventListener('click', documentClick, true);
654
- document.addEventListener('focus', documentClick, true);
655
-
656
- if (self.config.enableTime) {
657
-
658
- hourElement.addEventListener("wheel", timeWrapper);
659
- minuteElement.addEventListener("wheel", timeWrapper);
660
-
661
- hourElement.addEventListener("mouseout", updateValue);
662
- minuteElement.addEventListener("mouseout", updateValue);
663
-
664
- hourElement.addEventListener("change", updateValue);
665
- minuteElement.addEventListener("change", updateValue);
666
-
667
- hourElement.addEventListener("click", hourElement.select);
668
- minuteElement.addEventListener("click", minuteElement.select);
669
-
670
- if (self.config.enableSeconds) {
671
- secondElement.addEventListener("wheel", timeWrapper);
672
- secondElement.addEventListener("mouseout", updateValue);
673
- secondElement.addEventListener("change", updateValue);
674
- secondElement.addEventListener("click", secondElement.select);
675
- }
676
-
677
- if (!self.config.time_24hr) {
678
- am_pm.addEventListener("focus", am_pm.blur);
679
- am_pm.addEventListener("click", am_pm_toggle);
680
-
681
- am_pm.addEventListener("wheel", am_pm_toggle);
682
- am_pm.addEventListener("mouseout", updateValue);
683
- }
684
- }
685
-
686
- if (document.createEvent) {
687
- clickEvt = document.createEvent("MouseEvent");
688
- // without all these args ms edge spergs out
689
- clickEvt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
690
- } else clickEvt = new MouseEvent('click', {
691
- 'view': window,
692
- 'bubbles': true,
693
- 'cancelable': true
694
- });
695
-
696
- window.addEventListener('resize', throttle(function () {
697
-
698
- if (wrapperElement.classList.contains('open') && !self.input.disabled && !self.config.inline && !self.config.static) self.positionCalendar();
699
- }, 150));
700
- };
701
-
702
- self.open = function () {
703
-
704
- if (self.input.disabled || self.config.inline) return;
705
-
706
- if (!self.config.static) self.positionCalendar();
707
-
708
- wrapperElement.classList.add('open');
709
-
710
- if (self.altInput) {
711
- if (!self.config.allowInput) self.altInput.blur();
712
- self.altInput.classList.add('active');
713
- } else {
714
- if (!self.config.allowInput) self.input.blur();
715
- self.input.classList.add('active');
716
- }
717
-
718
- if (self.config.onOpen) self.config.onOpen(self.selectedDateObj, self.input.value);
719
- };
720
-
721
- // For calendars inserted in BODY (as opposed to inline wrapper)
722
- // it's necessary to properly calculate top/left position.
723
- self.positionCalendar = function () {
724
-
725
- var input = self.altInput ? self.altInput : self.input,
726
- bounds = input.getBoundingClientRect(),
727
-
728
- // account for scroll & input height
729
- top = window.pageYOffset + input.offsetHeight + bounds.top,
730
- left = window.pageXOffset + bounds.left;
731
-
732
- wrapperElement.style.top = top + 'px';
733
- wrapperElement.style.left = left + 'px';
734
- };
735
-
736
- self.toggle = function () {
737
- if (self.input.disabled) return;
738
-
739
- wrapperElement.classList.toggle('open');
740
- self.positionCalendar();
741
-
742
- if (self.altInput) self.altInput.classList.toggle('active');
743
-
744
- self.input.classList.toggle('active');
745
- };
746
-
747
- self.close = function () {
748
- wrapperElement.classList.remove('open');
749
- self.input.classList.remove('active');
750
-
751
- if (self.altInput) self.altInput.classList.remove('active');
752
-
753
- if (self.config.onClose) self.config.onClose(self.selectedDateObj, self.input.value);
754
- };
755
-
756
- self.clear = function () {
757
- self.input.value = "";
758
- self.selectedDateObj = null;
759
- self.jumpToDate();
760
- };
761
-
762
- triggerChange = function triggerChange() {
763
-
764
- self.input.dispatchEvent(clickEvt);
765
-
766
- if (self.config.onChange) self.config.onChange(self.selectedDateObj, self.input.value);
767
- };
768
-
769
- onInput = function onInput(event) {
770
-
771
- self.setDate(self.altInput ? self.altInput.value : self.input.value);
772
- };
773
-
774
- self.destroy = function () {
775
-
776
- document.removeEventListener('click', documentClick, false);
777
-
778
- if (self.altInput) self.altInput.parentNode.removeChild(self.altInput);
779
-
780
- if (self.config.inline) {
781
-
782
- var parent = self.element.parentNode,
783
- _element = parent.removeChild(self.element);
784
-
785
- parent.removeChild(calendarContainer);
786
- parent.parentNode.replaceChild(_element, parent);
787
- } else document.getElementsByTagName("body")[0].removeChild(wrapperElement);
788
- };
789
-
790
- self.redraw = function () {
791
-
792
- if (self.config.noCalendar) return;
793
-
794
- updateNavigationCurrentMonth();
795
- buildDays();
796
- };
797
-
798
- self.jumpToDate = function (jumpDate) {
799
-
800
- jumpDate = uDate(jumpDate || self.selectedDateObj || self.config.defaultDate || self.config.minDate || currentDate);
801
-
802
- self.currentYear = jumpDate.getFullYear();
803
- self.currentMonth = jumpDate.getMonth();
804
- self.redraw();
805
- };
806
-
807
- self.setDate = function (date, triggerChangeEvent) {
808
-
809
- date = uDate(date);
810
-
811
- if (date instanceof Date && date.getTime()) {
812
-
813
- self.selectedDateObj = uDate(date);
814
- self.jumpToDate(self.selectedDateObj);
815
- updateValue();
816
-
817
- if (triggerChangeEvent || false) triggerChange();
818
- }
819
- };
820
-
821
- self.setTime = function (hour, minute, triggerChangeEvent) {
822
-
823
- if (!self.selectedDateObj) return;
824
-
825
- hourElement.value = parseInt(hour, 10) % 24;
826
- minuteElement.value = parseInt(minute || 0, 10) % 60;
827
-
828
- if (!self.config.time_24hr) am_pm.innerHTML = hour > 11 ? "PM" : "AM";
829
-
830
- updateValue();
831
-
832
- if (triggerChangeEvent || false) triggerChange();
833
- };
834
-
835
- self.set = function (key, value) {
836
-
837
- if (key in self.config) {
838
- self.config[key] = value;
839
- self.jumpToDate();
840
- }
841
- };
842
-
843
- try {
844
- init();
845
- } catch (error) {
846
- console.error(error);console.info(self.element);
847
- } // skip and carry on
848
-
849
- return self;
850
- };
851
-
852
- flatpickr.init.prototype = {
853
-
854
- l10n: {
855
- weekdays: {
856
- shorthand: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
857
- longhand: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
858
- },
859
- months: {
860
- shorthand: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
861
- longhand: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
862
- },
863
- daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
864
- firstDayOfWeek: 0,
865
- ordinal: function ordinal(nth) {
866
- var s = nth % 100;
867
- if (s > 3 && s < 21) return "th";
868
- switch (s % 10) {
869
- case 1:
870
- return "st";
871
- case 2:
872
- return "nd";
873
- case 3:
874
- return "rd";
875
- default:
876
- return "th";
877
- }
878
- },
879
- weekAbbreviation: "Wk",
880
- scrollTitle: "Scroll to increment",
881
- toggleTitle: "Click to toggle"
882
- },
883
-
884
- defaultConfig: {
885
- /* if true, dates will be parsed, formatted, and displayed in UTC.
886
- preloading date strings w/ timezones is recommended but not necessary */
887
- utc: false,
888
-
889
- // noCalendar: true will hide the calendar. use for a time picker along w/ enableTime
890
- noCalendar: false,
891
-
892
- // wrap: see https://chmln.github.io/flatpickr/#strap
893
- wrap: false,
894
-
895
- // enables week numbers
896
- weekNumbers: false,
897
-
898
- allowInput: false,
899
-
900
- /* clicking on input opens the date(time)picker. disable if you wish to open the calendar manually with .open() */
901
- clickOpens: true,
902
-
903
- // more date format chars at https://chmln.github.io/flatpickr/#dateformat
904
- dateFormat: 'Y-m-d',
905
-
906
- // altInput - see https://chmln.github.io/flatpickr/#altinput
907
- altInput: false,
908
-
909
- // the created altInput element will have this class.
910
- altInputClass: "",
911
-
912
- // same as dateFormat, but for altInput
913
- altFormat: "F j, Y", // defaults to e.g. June 10, 2016
914
-
915
- // defaultDate - either a datestring or a date object. used for datetimepicker's initial value
916
- defaultDate: null,
917
-
918
- // the minimum date that user can pick (inclusive)
919
- minDate: null,
920
-
921
- // the maximum date that user can pick (inclusive)
922
- maxDate: null,
923
-
924
- // dateparser that transforms a given string to a date object
925
- parseDate: false,
926
-
927
- // see https://chmln.github.io/flatpickr/#disable
928
- disable: [],
929
-
930
- // display the short version of month names - e.g. Sep instead of September
931
- shorthandCurrentMonth: false,
932
-
933
- // displays calendar inline. see https://chmln.github.io/flatpickr/#inline-calendar
934
- inline: false,
935
-
936
- // position calendar inside wrapper and next to the input element
937
- // leave at false unless you know what you're doing
938
- static: false,
939
-
940
- // code for previous/next icons. this is where you put your custom icon code e.g. fontawesome
941
- prevArrow: '&lt;',
942
- nextArrow: '&gt;',
943
-
944
- // enables the time picker functionality
945
- enableTime: false,
946
-
947
- // enables seconds in the time picker
948
- enableSeconds: false,
949
-
950
- // self-explanatory. defaults to e.g. 3:02 PM
951
- timeFormat: "h:i K",
952
-
953
- // display time picker in 24 hour mode
954
- time_24hr: false,
955
-
956
- // step size used when scrolling/incrementing the hour element
957
- hourIncrement: 1,
958
-
959
- // step size used when scrolling/incrementing the minute element
960
- minuteIncrement: 5,
961
-
962
- // onChange callback when user selects a date or time
963
- onChange: null, //function(dateObj, dateStr){}
964
-
965
- // called every time calendar is opened
966
- onOpen: null, // function(dateObj, dateStr){}
967
-
968
- // called every time calendar is closed
969
- onClose: null // function(dateObj, dateStr){}
970
- }
971
- };
972
-
973
- Date.prototype.fp_incr = function (days) {
974
- return new Date(this.getFullYear(), this.getMonth(), this.getDate() + parseInt(days, 10));
975
- };
976
-
977
- Date.prototype.fp_isUTC = false;
978
- Date.prototype.fp_toUTC = function () {
979
-
980
- var new_date = new Date(this.getTime() + this.getTimezoneOffset() * 60000);
981
- new_date.fp_isUTC = true;
982
-
983
- return new_date;
984
- };
985
-
986
- Date.prototype.fp_getWeek = function () {
987
-
988
- var date = new Date(this.getTime());
989
- date.setHours(0, 0, 0, 0);
990
-
991
- // Thursday in current week decides the year.
992
- date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
993
- // January 4 is always in week 1.
994
- var week1 = new Date(date.getFullYear(), 0, 4);
995
- // Adjust to Thursday in week 1 and count number of weeks from date to week1.
996
- return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);
997
- };
998
-
999
- // classList polyfill
1000
- if (!("classList" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {
1001
- Object.defineProperty(HTMLElement.prototype, 'classList', {
1002
- get: function get() {
1003
- var self = this;
1004
- function update(fn) {
1005
- return function (value) {
1006
- var classes = self.className.split(/\s+/),
1007
- index = classes.indexOf(value);
1008
-
1009
- fn(classes, index, value);
1010
- self.className = classes.join(" ");
1011
- };
1012
- }
1013
-
1014
- var ret = {
1015
- add: update(function (classes, index, value) {
1016
- return ~index || classes.push(value);
1017
- }),
1018
- remove: update(function (classes, index) {
1019
- return ~index && classes.splice(index, 1);
1020
- }),
1021
- toggle: update(function (classes, index, value) {
1022
- return ~index ? classes.splice(index, 1) : classes.push(value);
1023
- }),
1024
- contains: function contains(value) {
1025
- return !!~self.className.split(/\s+/).indexOf(value);
1026
- }
1027
- };
1028
-
1029
- return ret;
1030
- }
1031
- });
1032
- }
1033
-
1034
- if (typeof module !== 'undefined') module.exports = flatpickr;