flatpickr_rails 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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;