fomantic-ui 2.10.0-beta.7 → 2.10.0-beta.8
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.
- package/.eslintrc.js +0 -10
- package/README.md +4 -5
- package/changelog-setup.js +64 -70
- package/dist/components/accordion.css +1 -1
- package/dist/components/accordion.js +94 -131
- package/dist/components/accordion.min.css +1 -1
- package/dist/components/accordion.min.js +2 -2
- package/dist/components/ad.css +1 -1
- package/dist/components/ad.min.css +1 -1
- package/dist/components/api.js +152 -205
- package/dist/components/api.min.js +2 -2
- package/dist/components/breadcrumb.css +1 -1
- package/dist/components/breadcrumb.min.css +1 -1
- package/dist/components/button.css +1 -1
- package/dist/components/button.min.css +1 -1
- package/dist/components/calendar.css +1 -1
- package/dist/components/calendar.js +305 -341
- package/dist/components/calendar.min.css +1 -1
- package/dist/components/calendar.min.js +2 -2
- package/dist/components/card.css +1 -1
- package/dist/components/card.min.css +1 -1
- package/dist/components/checkbox.css +1 -1
- package/dist/components/checkbox.js +76 -116
- package/dist/components/checkbox.min.css +1 -1
- package/dist/components/checkbox.min.js +2 -2
- package/dist/components/comment.css +1 -1
- package/dist/components/comment.min.css +1 -1
- package/dist/components/container.css +1 -1
- package/dist/components/container.min.css +1 -1
- package/dist/components/dimmer.css +1 -1
- package/dist/components/dimmer.js +58 -91
- package/dist/components/dimmer.min.css +1 -1
- package/dist/components/dimmer.min.js +2 -2
- package/dist/components/divider.css +1 -1
- package/dist/components/divider.min.css +1 -1
- package/dist/components/dropdown.css +1 -1
- package/dist/components/dropdown.js +651 -941
- package/dist/components/dropdown.min.css +1 -1
- package/dist/components/dropdown.min.js +2 -2
- package/dist/components/embed.css +1 -1
- package/dist/components/embed.js +70 -108
- package/dist/components/embed.min.css +1 -1
- package/dist/components/embed.min.js +2 -2
- package/dist/components/emoji.css +1 -1
- package/dist/components/emoji.min.css +1 -1
- package/dist/components/feed.css +1 -1
- package/dist/components/feed.min.css +1 -1
- package/dist/components/flag.css +1 -1
- package/dist/components/flag.min.css +1 -1
- package/dist/components/flyout.css +1 -1
- package/dist/components/flyout.js +182 -256
- package/dist/components/flyout.min.css +1 -1
- package/dist/components/flyout.min.js +2 -2
- package/dist/components/form.css +1 -1
- package/dist/components/form.js +325 -429
- package/dist/components/form.min.css +1 -1
- package/dist/components/form.min.js +2 -2
- package/dist/components/grid.css +1 -1
- package/dist/components/grid.min.css +1 -1
- package/dist/components/header.css +1 -1
- package/dist/components/header.min.css +1 -1
- package/dist/components/icon.css +1 -1
- package/dist/components/icon.min.css +1 -1
- package/dist/components/image.css +1 -1
- package/dist/components/image.min.css +1 -1
- package/dist/components/input.css +1 -1
- package/dist/components/input.min.css +1 -1
- package/dist/components/item.css +1 -1
- package/dist/components/item.min.css +1 -1
- package/dist/components/label.css +1 -1
- package/dist/components/label.min.css +1 -1
- package/dist/components/list.css +1 -1
- package/dist/components/list.min.css +1 -1
- package/dist/components/loader.css +1 -1
- package/dist/components/loader.min.css +1 -1
- package/dist/components/menu.css +1 -1
- package/dist/components/menu.min.css +1 -1
- package/dist/components/message.css +1 -1
- package/dist/components/message.min.css +1 -1
- package/dist/components/modal.css +1 -1
- package/dist/components/modal.js +211 -295
- package/dist/components/modal.min.css +1 -1
- package/dist/components/modal.min.js +2 -2
- package/dist/components/nag.css +1 -1
- package/dist/components/nag.js +67 -97
- package/dist/components/nag.min.css +1 -1
- package/dist/components/nag.min.js +2 -2
- package/dist/components/placeholder.css +1 -1
- package/dist/components/placeholder.min.css +1 -1
- package/dist/components/popup.css +1 -1
- package/dist/components/popup.js +175 -235
- package/dist/components/popup.min.css +1 -1
- package/dist/components/popup.min.js +2 -2
- package/dist/components/progress.css +1 -1
- package/dist/components/progress.js +103 -138
- package/dist/components/progress.min.css +1 -1
- package/dist/components/progress.min.js +2 -2
- package/dist/components/rail.css +1 -1
- package/dist/components/rail.min.css +1 -1
- package/dist/components/rating.css +1 -1
- package/dist/components/rating.js +79 -120
- package/dist/components/rating.min.css +1 -1
- package/dist/components/rating.min.js +2 -2
- package/dist/components/reset.css +1 -1
- package/dist/components/reset.min.css +1 -1
- package/dist/components/reveal.css +1 -1
- package/dist/components/reveal.min.css +1 -1
- package/dist/components/search.css +1 -1
- package/dist/components/search.js +239 -333
- package/dist/components/search.min.css +1 -1
- package/dist/components/search.min.js +2 -2
- package/dist/components/segment.css +1 -1
- package/dist/components/segment.min.css +1 -1
- package/dist/components/shape.css +1 -1
- package/dist/components/shape.js +157 -223
- package/dist/components/shape.min.css +1 -1
- package/dist/components/shape.min.js +2 -2
- package/dist/components/sidebar.css +1 -1
- package/dist/components/sidebar.js +122 -163
- package/dist/components/sidebar.min.css +1 -1
- package/dist/components/sidebar.min.js +2 -2
- package/dist/components/site.css +1 -1
- package/dist/components/site.js +38 -57
- package/dist/components/site.min.css +1 -1
- package/dist/components/site.min.js +2 -2
- package/dist/components/slider.css +1 -1
- package/dist/components/slider.js +242 -325
- package/dist/components/slider.min.css +1 -1
- package/dist/components/slider.min.js +2 -2
- package/dist/components/state.js +68 -98
- package/dist/components/state.min.js +2 -2
- package/dist/components/statistic.css +1 -1
- package/dist/components/statistic.min.css +1 -1
- package/dist/components/step.css +1 -1
- package/dist/components/step.min.css +1 -1
- package/dist/components/sticky.css +1 -1
- package/dist/components/sticky.js +116 -159
- package/dist/components/sticky.min.css +1 -1
- package/dist/components/sticky.min.js +2 -2
- package/dist/components/tab.css +1 -1
- package/dist/components/tab.js +168 -233
- package/dist/components/tab.min.css +1 -1
- package/dist/components/tab.min.js +2 -2
- package/dist/components/table.css +1 -1
- package/dist/components/table.min.css +1 -1
- package/dist/components/text.css +1 -1
- package/dist/components/text.min.css +1 -1
- package/dist/components/toast.css +1 -1
- package/dist/components/toast.js +89 -114
- package/dist/components/toast.min.css +1 -1
- package/dist/components/toast.min.js +2 -2
- package/dist/components/transition.css +1 -1
- package/dist/components/transition.js +86 -141
- package/dist/components/transition.min.css +1 -1
- package/dist/components/transition.min.js +2 -2
- package/dist/components/visibility.js +134 -210
- package/dist/components/visibility.min.js +2 -2
- package/dist/semantic.css +53 -53
- package/dist/semantic.js +4006 -5558
- package/dist/semantic.min.css +1 -1
- package/dist/semantic.min.js +2 -2
- package/examples/assets/show-examples.js +2 -4
- package/gulpfile.js +5 -7
- package/package.json +1 -1
- package/scripts/nightly-version.js +7 -10
- package/src/definitions/behaviors/api.js +151 -204
- package/src/definitions/behaviors/form.js +324 -428
- package/src/definitions/behaviors/state.js +67 -97
- package/src/definitions/behaviors/visibility.js +133 -209
- package/src/definitions/globals/site.js +37 -56
- package/src/definitions/modules/accordion.js +93 -130
- package/src/definitions/modules/calendar.js +304 -340
- package/src/definitions/modules/checkbox.js +75 -115
- package/src/definitions/modules/dimmer.js +57 -90
- package/src/definitions/modules/dropdown.js +650 -940
- package/src/definitions/modules/embed.js +69 -107
- package/src/definitions/modules/flyout.js +181 -255
- package/src/definitions/modules/modal.js +210 -294
- package/src/definitions/modules/nag.js +66 -96
- package/src/definitions/modules/popup.js +174 -234
- package/src/definitions/modules/progress.js +102 -137
- package/src/definitions/modules/rating.js +78 -119
- package/src/definitions/modules/search.js +238 -332
- package/src/definitions/modules/shape.js +156 -222
- package/src/definitions/modules/sidebar.js +121 -162
- package/src/definitions/modules/slider.js +241 -324
- package/src/definitions/modules/sticky.js +115 -158
- package/src/definitions/modules/tab.js +167 -232
- package/src/definitions/modules/toast.js +88 -113
- package/src/definitions/modules/transition.js +85 -140
- package/tasks/admin/components/create.js +88 -108
- package/tasks/admin/components/init.js +26 -32
- package/tasks/admin/components/update.js +46 -53
- package/tasks/admin/distributions/create.js +71 -101
- package/tasks/admin/distributions/init.js +27 -33
- package/tasks/admin/distributions/update.js +45 -52
- package/tasks/admin/register.js +11 -15
- package/tasks/build/assets.js +14 -18
- package/tasks/build/css.js +54 -63
- package/tasks/build/javascript.js +45 -53
- package/tasks/build.js +4 -6
- package/tasks/check-install.js +5 -7
- package/tasks/clean.js +2 -4
- package/tasks/collections/admin.js +13 -15
- package/tasks/collections/build.js +6 -8
- package/tasks/collections/docs.js +2 -4
- package/tasks/collections/install.js +2 -4
- package/tasks/collections/rtl.js +2 -4
- package/tasks/collections/various.js +2 -4
- package/tasks/config/admin/github.js +7 -9
- package/tasks/config/admin/templates/css-package.js +1 -3
- package/tasks/config/admin/templates/less-package.js +1 -3
- package/tasks/config/npm/gulpfile.js +4 -6
- package/tasks/config/project/config.js +22 -30
- package/tasks/config/project/install.js +56 -70
- package/tasks/config/project/release.js +6 -8
- package/tasks/config/tasks.js +8 -12
- package/tasks/config/user.js +13 -17
- package/tasks/docs/build.js +26 -31
- package/tasks/docs/metadata.js +24 -30
- package/tasks/docs/serve.js +20 -26
- package/tasks/install.js +71 -98
- package/tasks/rtl/build.js +2 -4
- package/tasks/rtl/watch.js +2 -4
- package/tasks/watch.js +9 -11
- package/test/meteor/fonts.js +1 -2
- package/test/modules/module.spec.js +16 -18
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* # Fomantic-UI 2.10.0-beta.
|
2
|
+
* # Fomantic-UI 2.10.0-beta.8+62e258f - Calendar
|
3
3
|
* https://github.com/fomantic/Fomantic-UI/
|
4
4
|
*
|
5
5
|
*
|
@@ -20,61 +20,57 @@
|
|
20
20
|
: globalThis;
|
21
21
|
|
22
22
|
$.fn.calendar = function (parameters) {
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
numberText = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight']
|
42
|
-
;
|
23
|
+
let $allModules = $(this);
|
24
|
+
let $document = $(document);
|
25
|
+
|
26
|
+
let time = Date.now();
|
27
|
+
let performance = [];
|
28
|
+
|
29
|
+
let query = arguments[0];
|
30
|
+
let methodInvoked = typeof query === 'string';
|
31
|
+
let queryArguments = [].slice.call(arguments, 1);
|
32
|
+
let returnedValue;
|
33
|
+
let timeGapTable = {
|
34
|
+
5: { row: 4, column: 3 },
|
35
|
+
10: { row: 3, column: 2 },
|
36
|
+
15: { row: 2, column: 2 },
|
37
|
+
20: { row: 3, column: 1 },
|
38
|
+
30: { row: 2, column: 1 },
|
39
|
+
};
|
40
|
+
let numberText = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'];
|
43
41
|
|
44
42
|
$allModules.each(function () {
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
module
|
77
|
-
;
|
43
|
+
let settings = $.isPlainObject(parameters)
|
44
|
+
? $.extend(true, {}, $.fn.calendar.settings, parameters)
|
45
|
+
: $.extend({}, $.fn.calendar.settings);
|
46
|
+
|
47
|
+
let className = settings.className;
|
48
|
+
let namespace = settings.namespace;
|
49
|
+
let selector = settings.selector;
|
50
|
+
let formatter = settings.formatter;
|
51
|
+
let parser = settings.parser;
|
52
|
+
let metadata = settings.metadata;
|
53
|
+
let timeGap = timeGapTable[settings.minTimeGap];
|
54
|
+
let error = settings.error;
|
55
|
+
|
56
|
+
let eventNamespace = '.' + namespace;
|
57
|
+
let moduleNamespace = 'module-' + namespace;
|
58
|
+
|
59
|
+
let $module = $(this);
|
60
|
+
let $input = $module.find(selector.input);
|
61
|
+
let $activator = $module.find(selector.activator);
|
62
|
+
|
63
|
+
let element = this;
|
64
|
+
let instance = $module.data(moduleNamespace);
|
65
|
+
let $container = instance && instance.popupId ? $document.find('#' + instance.popupId) : $module.find(selector.popup);
|
66
|
+
|
67
|
+
let isTouch;
|
68
|
+
let isTouchDown = false;
|
69
|
+
let isInverted = $module.hasClass(className.inverted);
|
70
|
+
let focusDateUsedForRange = false;
|
71
|
+
let selectionComplete = false;
|
72
|
+
let classObserver;
|
73
|
+
let module;
|
78
74
|
|
79
75
|
module = {
|
80
76
|
|
@@ -150,10 +146,8 @@
|
|
150
146
|
} else {
|
151
147
|
// prepend the popup element to the activator's parent so that it has less chance of messing with
|
152
148
|
// the styling (e.g., input action button needs to be the last child to have the correct border radius)
|
153
|
-
|
154
|
-
|
155
|
-
domPositionFunction = $activatorParent.closest(selector.append).length > 0 ? 'appendTo' : 'prependTo'
|
156
|
-
;
|
149
|
+
let $activatorParent = $activator.parent();
|
150
|
+
let domPositionFunction = $activatorParent.closest(selector.append).length > 0 ? 'appendTo' : 'prependTo';
|
157
151
|
$container = $('<div/>').addClass(className.popup)[domPositionFunction]($activatorParent);
|
158
152
|
}
|
159
153
|
}
|
@@ -161,12 +155,12 @@
|
|
161
155
|
if (isInverted) {
|
162
156
|
$container.addClass(className.inverted);
|
163
157
|
}
|
164
|
-
|
158
|
+
let onVisible = function () {
|
165
159
|
module.refreshTooltips();
|
166
160
|
|
167
161
|
return settings.onVisible.apply($container, arguments);
|
168
162
|
};
|
169
|
-
|
163
|
+
let onHidden = function () {
|
170
164
|
module.blur();
|
171
165
|
|
172
166
|
return settings.onHidden.apply($container, arguments);
|
@@ -181,15 +175,15 @@
|
|
181
175
|
return settings.onVisible.apply($container, arguments);
|
182
176
|
};
|
183
177
|
}
|
184
|
-
|
178
|
+
let onShow = function () {
|
185
179
|
// reset the focus date onShow
|
186
180
|
module.set.focusDate(module.get.date());
|
187
181
|
module.set.mode(module.get.validatedMode(settings.startMode));
|
188
182
|
|
189
183
|
return settings.onShow.apply($container, arguments);
|
190
184
|
};
|
191
|
-
|
192
|
-
|
185
|
+
let on = module.setting('on');
|
186
|
+
let options = $.extend({}, settings.popupOptions, {
|
193
187
|
popup: $container,
|
194
188
|
movePopup: !settings.context,
|
195
189
|
on: on,
|
@@ -219,7 +213,7 @@
|
|
219
213
|
module.check.disabled();
|
220
214
|
},
|
221
215
|
date: function () {
|
222
|
-
|
216
|
+
let date;
|
223
217
|
if (settings.initialDate) {
|
224
218
|
date = parser.date(settings.initialDate, settings);
|
225
219
|
} else if ($module.data(metadata.date) !== undefined) {
|
@@ -234,11 +228,9 @@
|
|
234
228
|
|
235
229
|
trigger: {
|
236
230
|
change: function () {
|
237
|
-
|
238
|
-
inputElement = $input[0]
|
239
|
-
;
|
231
|
+
let inputElement = $input[0];
|
240
232
|
if (inputElement) {
|
241
|
-
|
233
|
+
let events = document.createEvent('HTMLEvents');
|
242
234
|
module.verbose('Triggering native change event');
|
243
235
|
events.initEvent('change', true, false);
|
244
236
|
inputElement.dispatchEvent(events);
|
@@ -248,57 +240,49 @@
|
|
248
240
|
|
249
241
|
create: {
|
250
242
|
calendar: function () {
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
;
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
date = module.get.date(),
|
265
|
-
focusDate = module.get.focusDate(),
|
266
|
-
display = module.helper.dateInRange(focusDate || date || parser.date(settings.initialDate, settings) || today)
|
267
|
-
;
|
243
|
+
let i;
|
244
|
+
let r;
|
245
|
+
let c;
|
246
|
+
let p;
|
247
|
+
let row;
|
248
|
+
let cell;
|
249
|
+
let pageGrid;
|
250
|
+
|
251
|
+
let mode = module.get.mode();
|
252
|
+
let today = new Date();
|
253
|
+
let date = module.get.date();
|
254
|
+
let focusDate = module.get.focusDate();
|
255
|
+
let display = module.helper.dateInRange(focusDate || date || parser.date(settings.initialDate, settings) || today);
|
268
256
|
|
269
257
|
if (!focusDate) {
|
270
258
|
focusDate = display;
|
271
259
|
module.set.focusDate(focusDate, false, false);
|
272
260
|
}
|
273
261
|
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
isTimeOnly = settings.type === 'time'
|
281
|
-
;
|
262
|
+
let isYear = mode === 'year';
|
263
|
+
let isMonth = mode === 'month';
|
264
|
+
let isDay = mode === 'day';
|
265
|
+
let isHour = mode === 'hour';
|
266
|
+
let isMinute = mode === 'minute';
|
267
|
+
let isTimeOnly = settings.type === 'time';
|
282
268
|
|
283
|
-
|
284
|
-
|
269
|
+
let multiMonth = Math.max(settings.multiMonth, 1);
|
270
|
+
let monthOffset = !isDay ? 0 : module.get.monthOffset();
|
285
271
|
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
year = display.getFullYear()
|
292
|
-
;
|
272
|
+
let minute = display.getMinutes();
|
273
|
+
let hour = display.getHours();
|
274
|
+
let day = display.getDate();
|
275
|
+
let startMonth = display.getMonth() + monthOffset;
|
276
|
+
let year = display.getFullYear();
|
293
277
|
|
294
|
-
|
278
|
+
let columns = isDay
|
295
279
|
? (settings.showWeekNumbers ? 8 : 7)
|
296
280
|
: (isHour ? 4 : timeGap.column);
|
297
|
-
|
298
|
-
|
281
|
+
let rows = isDay || isHour ? 6 : timeGap.row;
|
282
|
+
let pages = isDay ? multiMonth : 1;
|
299
283
|
|
300
|
-
|
301
|
-
|
284
|
+
let container = $container;
|
285
|
+
let tooltipPosition = container.hasClass('left') ? 'right center' : 'left center';
|
302
286
|
container.empty();
|
303
287
|
if (pages > 1) {
|
304
288
|
pageGrid = $('<div/>').addClass(className.grid).appendTo(container);
|
@@ -306,65 +290,63 @@
|
|
306
290
|
|
307
291
|
for (p = 0; p < pages; p++) {
|
308
292
|
if (pages > 1) {
|
309
|
-
|
293
|
+
let pageColumn = $('<div/>').addClass(className.column).appendTo(pageGrid);
|
310
294
|
container = pageColumn;
|
311
295
|
}
|
312
296
|
|
313
|
-
|
314
|
-
|
297
|
+
let month = startMonth + p;
|
298
|
+
let firstMonthDayColumn = (new Date(year, month, 1).getDay() - (settings.firstDayOfWeek % 7) + 7) % 7;
|
315
299
|
if (!settings.constantHeight && isDay) {
|
316
|
-
|
300
|
+
let requiredCells = new Date(year, month + 1, 0).getDate() + firstMonthDayColumn;
|
317
301
|
rows = Math.ceil(requiredCells / 7);
|
318
302
|
}
|
319
303
|
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
;
|
342
|
-
|
343
|
-
var tempMode = mode;
|
304
|
+
let yearChange = isYear ? 10 : (isMonth ? 1 : 0);
|
305
|
+
let monthChange = isDay ? 1 : 0;
|
306
|
+
let dayChange = isHour || isMinute ? 1 : 0;
|
307
|
+
let prevNextDay = isHour || isMinute ? day : 1;
|
308
|
+
let prevDate = new Date(year - yearChange, month - monthChange, prevNextDay - dayChange, hour);
|
309
|
+
let nextDate = new Date(year + yearChange, month + monthChange, prevNextDay + dayChange, hour);
|
310
|
+
let prevLast = isYear
|
311
|
+
? new Date(Math.ceil(year / 10) * 10 - 9, 0, 0)
|
312
|
+
: (isMonth
|
313
|
+
? new Date(year, 0, 0)
|
314
|
+
: (isDay // eslint-disable-line unicorn/no-nested-ternary
|
315
|
+
? new Date(year, month, 0)
|
316
|
+
: new Date(year, month, day, -1)));
|
317
|
+
let nextFirst = isYear
|
318
|
+
? new Date(Math.ceil(year / 10) * 10 + 1, 0, 1)
|
319
|
+
: (isMonth
|
320
|
+
? new Date(year + 1, 0, 1)
|
321
|
+
: (isDay // eslint-disable-line unicorn/no-nested-ternary
|
322
|
+
? new Date(year, month + 1, 1)
|
323
|
+
: new Date(year, month, day + 1)));
|
324
|
+
|
325
|
+
let tempMode = mode;
|
344
326
|
if (isDay && settings.showWeekNumbers) {
|
345
327
|
tempMode += ' andweek';
|
346
328
|
}
|
347
|
-
|
329
|
+
let table = $('<table/>').addClass(className.table).addClass(tempMode).addClass(numberText[columns] + ' column')
|
348
330
|
.appendTo(container);
|
349
331
|
if (isInverted) {
|
350
332
|
table.addClass(className.inverted);
|
351
333
|
}
|
352
|
-
|
334
|
+
let textColumns = columns;
|
353
335
|
// no header for time-only mode
|
354
336
|
if (!isTimeOnly) {
|
355
|
-
|
337
|
+
let thead = $('<thead/>').appendTo(table);
|
356
338
|
|
357
339
|
row = $('<tr/>').appendTo(thead);
|
358
340
|
cell = $('<th/>').attr('colspan', '' + columns).appendTo(row);
|
359
341
|
|
360
|
-
|
342
|
+
let headerDate = isYear || isMonth
|
361
343
|
? new Date(year, 0, 1)
|
362
344
|
: (isDay
|
363
345
|
? new Date(year, month, 1)
|
364
346
|
: new Date(year, month, day, hour, minute));
|
365
|
-
|
347
|
+
let headerText = $('<span/>').addClass(className.link).appendTo(cell);
|
366
348
|
headerText.text(module.helper.dateFormat(formatter[mode + 'Header'], headerDate));
|
367
|
-
|
349
|
+
let newMode = isMonth
|
368
350
|
? (settings.disableYear ? 'day' : 'year')
|
369
351
|
: (isDay
|
370
352
|
? (settings.disableMonth ? 'year' : 'month') // eslint-disable-line unicorn/no-nested-ternary
|
@@ -372,14 +354,14 @@
|
|
372
354
|
headerText.data(metadata.mode, newMode);
|
373
355
|
|
374
356
|
if (p === 0) {
|
375
|
-
|
357
|
+
let prev = $('<span/>').addClass(className.prev).appendTo(cell);
|
376
358
|
prev.data(metadata.focusDate, prevDate);
|
377
359
|
prev.toggleClass(className.disabledCell, !module.helper.isDateInRange(prevLast, mode));
|
378
360
|
$('<i/>').addClass(className.prevIcon).appendTo(prev);
|
379
361
|
}
|
380
362
|
|
381
363
|
if (p === pages - 1) {
|
382
|
-
|
364
|
+
let next = $('<span/>').addClass(className.next).appendTo(cell);
|
383
365
|
next.data(metadata.focusDate, nextDate);
|
384
366
|
next.toggleClass(className.disabledCell, !module.helper.isDateInRange(nextFirst, mode));
|
385
367
|
$('<i/>').addClass(className.nextIcon).appendTo(next);
|
@@ -399,7 +381,7 @@
|
|
399
381
|
}
|
400
382
|
}
|
401
383
|
|
402
|
-
|
384
|
+
let tbody = $('<tbody/>').appendTo(table);
|
403
385
|
i = isYear
|
404
386
|
? Math.ceil(year / 10) * 10 - 9
|
405
387
|
: (isDay ? 1 - firstMonthDayColumn : 0);
|
@@ -411,7 +393,7 @@
|
|
411
393
|
cell.addClass(className.weekCell);
|
412
394
|
}
|
413
395
|
for (c = 0; c < textColumns; c++, i++) {
|
414
|
-
|
396
|
+
let cellDate = isYear
|
415
397
|
? new Date(i, month, 1, hour, minute)
|
416
398
|
: (isMonth
|
417
399
|
? new Date(year, i, 1, hour, minute)
|
@@ -420,7 +402,7 @@
|
|
420
402
|
: (isHour
|
421
403
|
? new Date(year, month, day, i)
|
422
404
|
: new Date(year, month, day, hour, i * settings.minTimeGap))));
|
423
|
-
|
405
|
+
let cellText = isYear
|
424
406
|
? i
|
425
407
|
: (isMonth
|
426
408
|
? settings.text.monthsShort[i]
|
@@ -430,11 +412,11 @@
|
|
430
412
|
cell = $('<td/>').addClass(className.cell).appendTo(row);
|
431
413
|
cell.text(cellText);
|
432
414
|
cell.data(metadata.date, cellDate);
|
433
|
-
|
434
|
-
|
435
|
-
|
415
|
+
let adjacent = isDay && cellDate.getMonth() !== ((month + 12) % 12);
|
416
|
+
let disabled = (!settings.selectAdjacentDays && adjacent) || !module.helper.isDateInRange(cellDate, mode) || settings.isDisabled(cellDate, mode) || module.helper.isDisabled(cellDate, mode) || !module.helper.isEnabled(cellDate, mode);
|
417
|
+
let eventDate;
|
436
418
|
if (disabled) {
|
437
|
-
|
419
|
+
let disabledDate = module.helper.findDayAsObject(cellDate, mode, settings.disabledDates);
|
438
420
|
if (disabledDate !== null && disabledDate[metadata.message]) {
|
439
421
|
cell.attr('data-tooltip', disabledDate[metadata.message]);
|
440
422
|
cell.attr('data-position', disabledDate[metadata.position] || tooltipPosition);
|
@@ -446,7 +428,7 @@
|
|
446
428
|
}
|
447
429
|
}
|
448
430
|
if (mode === 'hour') {
|
449
|
-
|
431
|
+
let disabledHour = module.helper.findHourAsObject(cellDate, mode, settings.disabledHours);
|
450
432
|
if (disabledHour !== null && disabledHour[metadata.message]) {
|
451
433
|
cell.attr('data-tooltip', disabledHour[metadata.message]);
|
452
434
|
cell.attr('data-position', disabledHour[metadata.position] || tooltipPosition);
|
@@ -474,8 +456,8 @@
|
|
474
456
|
}
|
475
457
|
}
|
476
458
|
}
|
477
|
-
|
478
|
-
|
459
|
+
let active = module.helper.dateEqual(cellDate, date, mode);
|
460
|
+
let isToday = module.helper.dateEqual(cellDate, today, mode);
|
479
461
|
cell.toggleClass(className.adjacentCell, adjacent && !eventDate);
|
480
462
|
cell.toggleClass(className.disabledCell, disabled);
|
481
463
|
cell.toggleClass(className.activeCell, active && !(adjacent && disabled));
|
@@ -484,7 +466,7 @@
|
|
484
466
|
}
|
485
467
|
|
486
468
|
// Allow for external modifications of each cell
|
487
|
-
|
469
|
+
let cellOptions = {
|
488
470
|
mode: mode,
|
489
471
|
adjacent: adjacent,
|
490
472
|
disabled: disabled,
|
@@ -502,8 +484,8 @@
|
|
502
484
|
}
|
503
485
|
|
504
486
|
if (settings.today) {
|
505
|
-
|
506
|
-
|
487
|
+
let todayRow = $('<tr/>').appendTo(tbody);
|
488
|
+
let todayButton = $('<td/>').attr('colspan', '' + columns).addClass(className.today).appendTo(todayRow);
|
507
489
|
todayButton.text(formatter.today(settings));
|
508
490
|
todayButton.data(metadata.date, today);
|
509
491
|
}
|
@@ -520,24 +502,24 @@
|
|
520
502
|
update: {
|
521
503
|
focus: function (updateRange, container) {
|
522
504
|
container = container || $container;
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
505
|
+
let mode = module.get.mode();
|
506
|
+
let date = module.get.date();
|
507
|
+
let focusDate = module.get.focusDate();
|
508
|
+
let startDate = module.get.startDate();
|
509
|
+
let endDate = module.get.endDate();
|
510
|
+
let rangeDate = (updateRange ? focusDate : null) || date || (!isTouch ? focusDate : null);
|
529
511
|
|
530
512
|
container.find('td').each(function () {
|
531
|
-
|
532
|
-
|
513
|
+
let $cell = $(this);
|
514
|
+
let cellDate = $cell.data(metadata.date);
|
533
515
|
if (!cellDate) {
|
534
516
|
return;
|
535
517
|
}
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
518
|
+
let disabled = $cell.hasClass(className.disabledCell);
|
519
|
+
let active = $cell.hasClass(className.activeCell);
|
520
|
+
let adjacent = $cell.hasClass(className.adjacentCell);
|
521
|
+
let focused = module.helper.dateEqual(cellDate, focusDate, mode);
|
522
|
+
let inRange = !rangeDate
|
541
523
|
? false
|
542
524
|
: (!!startDate && module.helper.isDateInRange(cellDate, mode, startDate, rangeDate))
|
543
525
|
|| (!!endDate && module.helper.isDateInRange(cellDate, mode, rangeDate, endDate));
|
@@ -556,13 +538,13 @@
|
|
556
538
|
},
|
557
539
|
|
558
540
|
refreshTooltips: function () {
|
559
|
-
|
541
|
+
let winWidth = $(window).width();
|
560
542
|
$container.find('td[data-position]').each(function () {
|
561
|
-
|
562
|
-
|
563
|
-
|
543
|
+
let $cell = $(this);
|
544
|
+
let tooltipWidth = window.getComputedStyle($cell[0], '::after').width.replace(/[^\d.]/g, '');
|
545
|
+
let tooltipPosition = $cell.attr('data-position');
|
564
546
|
// use a fallback width of 250 (calendar width) for IE/Edge (which return "auto")
|
565
|
-
|
547
|
+
let calcPosition = (winWidth - $cell.width() - (parseInt(tooltipWidth, 10) || 250)) > $cell.offset().left ? 'right' : 'left';
|
566
548
|
if (tooltipPosition.indexOf(calcPosition) === -1) {
|
567
549
|
$cell.attr('data-position', tooltipPosition.replace(/(left|right)/, calcPosition));
|
568
550
|
}
|
@@ -600,9 +582,9 @@
|
|
600
582
|
|
601
583
|
event: {
|
602
584
|
mouseover: function (event) {
|
603
|
-
|
604
|
-
|
605
|
-
|
585
|
+
let target = $(event.target);
|
586
|
+
let date = target.data(metadata.date);
|
587
|
+
let mousedown = event.buttons === 1;
|
606
588
|
if (date) {
|
607
589
|
module.set.focusDate(date, false, true, mousedown);
|
608
590
|
}
|
@@ -613,8 +595,8 @@
|
|
613
595
|
event.preventDefault();
|
614
596
|
}
|
615
597
|
isTouchDown = event.type.indexOf('touch') >= 0;
|
616
|
-
|
617
|
-
|
598
|
+
let target = $(event.target);
|
599
|
+
let date = target.data(metadata.date);
|
618
600
|
if (date) {
|
619
601
|
module.set.focusDate(date, false, true, true);
|
620
602
|
}
|
@@ -625,20 +607,20 @@
|
|
625
607
|
event.preventDefault();
|
626
608
|
event.stopPropagation();
|
627
609
|
isTouchDown = false;
|
628
|
-
|
610
|
+
let target = $(event.target);
|
629
611
|
if (target.hasClass('disabled')) {
|
630
612
|
return;
|
631
613
|
}
|
632
|
-
|
614
|
+
let parent = target.parent();
|
633
615
|
if (parent.data(metadata.date) || parent.data(metadata.focusDate) || parent.data(metadata.mode)) {
|
634
616
|
// clicked on a child element, switch to parent (used when clicking directly on the prev/next <i> icon element)
|
635
617
|
target = parent;
|
636
618
|
}
|
637
|
-
|
638
|
-
|
639
|
-
|
619
|
+
let date = target.data(metadata.date);
|
620
|
+
let focusDate = target.data(metadata.focusDate);
|
621
|
+
let mode = target.data(metadata.mode);
|
640
622
|
if (date && settings.onSelect.call(element, date, module.get.mode()) !== false) {
|
641
|
-
|
623
|
+
let forceSet = target.hasClass(className.today);
|
642
624
|
module.selectDate(date, forceSet);
|
643
625
|
} else if (focusDate) {
|
644
626
|
module.set.focusDate(focusDate);
|
@@ -647,38 +629,38 @@
|
|
647
629
|
}
|
648
630
|
},
|
649
631
|
keydown: function (event) {
|
650
|
-
|
632
|
+
let keyCode = event.which;
|
651
633
|
if (keyCode === 9) {
|
652
634
|
// tab
|
653
635
|
module.popup('hide');
|
654
636
|
}
|
655
637
|
|
656
638
|
if (module.popup('is visible')) {
|
657
|
-
|
639
|
+
let mode = module.get.mode();
|
658
640
|
switch (keyCode) {
|
659
641
|
// arrow keys
|
660
642
|
case 37:
|
661
643
|
case 38:
|
662
644
|
case 39:
|
663
645
|
case 40: {
|
664
|
-
|
646
|
+
let bigIncrement = mode === 'day'
|
665
647
|
? 7
|
666
648
|
: (mode === 'hour'
|
667
649
|
? 4
|
668
650
|
: (mode === 'minute' ? timeGap.column : 3)); // eslint-disable-line unicorn/no-nested-ternary
|
669
|
-
|
651
|
+
let increment = keyCode === 37
|
670
652
|
? -1
|
671
653
|
: (keyCode === 38
|
672
654
|
? -bigIncrement
|
673
655
|
: (keyCode === 39 ? 1 : bigIncrement)); // eslint-disable-line unicorn/no-nested-ternary
|
674
656
|
increment *= mode === 'minute' ? settings.minTimeGap : 1;
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
657
|
+
let focusDate = module.get.focusDate() || module.get.date() || new Date();
|
658
|
+
let year = focusDate.getFullYear() + (mode === 'year' ? increment : 0);
|
659
|
+
let month = focusDate.getMonth() + (mode === 'month' ? increment : 0);
|
660
|
+
let day = focusDate.getDate() + (mode === 'day' ? increment : 0);
|
661
|
+
let hour = focusDate.getHours() + (mode === 'hour' ? increment : 0);
|
662
|
+
let minute = focusDate.getMinutes() + (mode === 'minute' ? increment : 0);
|
663
|
+
let newFocusDate = new Date(year, month, day, hour, minute);
|
682
664
|
if (settings.type === 'time') {
|
683
665
|
newFocusDate = module.helper.mergeDateTime(focusDate, newFocusDate);
|
684
666
|
}
|
@@ -690,7 +672,7 @@
|
|
690
672
|
}
|
691
673
|
// enter key
|
692
674
|
case 13: {
|
693
|
-
|
675
|
+
let date = module.get.focusDate();
|
694
676
|
if (date && !settings.isDisabled(date, mode) && !module.helper.isDisabled(date, mode) && module.helper.isEnabled(date, mode)) {
|
695
677
|
if (settings.onSelect.call(element, date, module.get.mode()) !== false) {
|
696
678
|
module.selectDate(date);
|
@@ -719,8 +701,8 @@
|
|
719
701
|
}
|
720
702
|
},
|
721
703
|
inputChange: function () {
|
722
|
-
|
723
|
-
|
704
|
+
let val = $input.val();
|
705
|
+
let date = parser.date(val, settings);
|
724
706
|
module.set.date(date, false);
|
725
707
|
},
|
726
708
|
inputFocus: function () {
|
@@ -729,8 +711,8 @@
|
|
729
711
|
inputBlur: function () {
|
730
712
|
$container.removeClass(className.active);
|
731
713
|
if (settings.formatInput) {
|
732
|
-
|
733
|
-
|
714
|
+
let date = module.get.date();
|
715
|
+
let text = module.helper.dateFormat(formatter[settings.type], date);
|
734
716
|
$input.val(text);
|
735
717
|
}
|
736
718
|
if (selectionComplete) {
|
@@ -790,12 +772,11 @@
|
|
790
772
|
get: {
|
791
773
|
weekOfYear: function (weekYear, weekMonth, weekDay) {
|
792
774
|
// adapted from http://www.merlyn.demon.co.uk/weekcalc.htm
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
;
|
775
|
+
let ms1d = 24 * 3600 * 1000;
|
776
|
+
let ms7d = 7 * ms1d;
|
777
|
+
let DC3 = Date.UTC(weekYear, weekMonth, weekDay + 3) / ms1d; // an absolute day number
|
778
|
+
let AWN = Math.floor(DC3 / 7); // an absolute week number
|
779
|
+
let Wyr = new Date(AWN * ms7d).getUTCFullYear();
|
799
780
|
|
800
781
|
return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;
|
801
782
|
},
|
@@ -812,7 +793,7 @@
|
|
812
793
|
return module.helper.dateObjectOrFormatted(format, $module.data(metadata.focusDate));
|
813
794
|
},
|
814
795
|
startDate: function (format) {
|
815
|
-
|
796
|
+
let startModule = module.get.calendarModule(settings.startCalendar);
|
816
797
|
|
817
798
|
if (startModule) {
|
818
799
|
return startModule.get.date(format);
|
@@ -821,7 +802,7 @@
|
|
821
802
|
return module.helper.dateObjectOrFormatted(format, $module.data(metadata.startDate));
|
822
803
|
},
|
823
804
|
endDate: function (format) {
|
824
|
-
|
805
|
+
let endModule = module.get.calendarModule(settings.endCalendar);
|
825
806
|
|
826
807
|
if (endModule) {
|
827
808
|
return endModule.get.date(format);
|
@@ -840,12 +821,12 @@
|
|
840
821
|
},
|
841
822
|
mode: function () {
|
842
823
|
// only returns valid modes for the current settings
|
843
|
-
|
824
|
+
let mode = $module.data(metadata.mode) || settings.startMode;
|
844
825
|
|
845
826
|
return module.get.validatedMode(mode);
|
846
827
|
},
|
847
828
|
validatedMode: function (mode) {
|
848
|
-
|
829
|
+
let validModes = module.get.validModes();
|
849
830
|
if ($.inArray(mode, validModes) >= 0) {
|
850
831
|
return mode;
|
851
832
|
}
|
@@ -860,7 +841,7 @@
|
|
860
841
|
return $module.data(metadata.type) || settings.type;
|
861
842
|
},
|
862
843
|
validModes: function () {
|
863
|
-
|
844
|
+
let validModes = [];
|
864
845
|
if (settings.type !== 'time') {
|
865
846
|
if (!settings.disableYear || settings.type === 'year') {
|
866
847
|
validModes.push('year');
|
@@ -910,8 +891,8 @@
|
|
910
891
|
date = module.helper.sanitiseDate(date);
|
911
892
|
date = module.helper.dateInRange(date);
|
912
893
|
|
913
|
-
|
914
|
-
|
894
|
+
let mode = module.get.mode();
|
895
|
+
let text = module.helper.dateFormat(formatter[settings.type], date);
|
915
896
|
|
916
897
|
if (fireChange && settings.onBeforeChange.call(element, date, text, mode) === false) {
|
917
898
|
return false;
|
@@ -923,7 +904,7 @@
|
|
923
904
|
return false;
|
924
905
|
}
|
925
906
|
|
926
|
-
|
907
|
+
let endDate = module.get.endDate();
|
927
908
|
if (!!endDate && !!date && date > endDate) {
|
928
909
|
// selected date is greater than end date in range, so clear end date
|
929
910
|
module.set.endDate();
|
@@ -940,7 +921,7 @@
|
|
940
921
|
},
|
941
922
|
startDate: function (date, refreshCalendar) {
|
942
923
|
date = module.helper.sanitiseDate(date);
|
943
|
-
|
924
|
+
let startModule = module.get.calendarModule(settings.startCalendar);
|
944
925
|
if (startModule) {
|
945
926
|
startModule.set.date(date);
|
946
927
|
}
|
@@ -948,7 +929,7 @@
|
|
948
929
|
},
|
949
930
|
endDate: function (date, refreshCalendar) {
|
950
931
|
date = module.helper.sanitiseDate(date);
|
951
|
-
|
932
|
+
let endModule = module.get.calendarModule(settings.endCalendar);
|
952
933
|
if (endModule) {
|
953
934
|
endModule.set.date(date);
|
954
935
|
}
|
@@ -957,17 +938,17 @@
|
|
957
938
|
focusDate: function (date, refreshCalendar, updateFocus, updateRange) {
|
958
939
|
date = module.helper.sanitiseDate(date);
|
959
940
|
date = module.helper.dateInRange(date);
|
960
|
-
|
961
|
-
|
941
|
+
let isDay = module.get.mode() === 'day';
|
942
|
+
let oldFocusDate = module.get.focusDate();
|
962
943
|
if (isDay && date && oldFocusDate) {
|
963
|
-
|
964
|
-
|
944
|
+
let yearDelta = date.getFullYear() - oldFocusDate.getFullYear();
|
945
|
+
let monthDelta = yearDelta * 12 + date.getMonth() - oldFocusDate.getMonth();
|
965
946
|
if (monthDelta) {
|
966
|
-
|
947
|
+
let monthOffset = module.get.monthOffset() - monthDelta;
|
967
948
|
module.set.monthOffset(monthOffset, false);
|
968
949
|
}
|
969
950
|
}
|
970
|
-
|
951
|
+
let changed = module.set.dataKeyValue(metadata.focusDate, date, !!date && refreshCalendar);
|
971
952
|
updateFocus = (updateFocus !== false && changed && refreshCalendar === false) || focusDateUsedForRange != updateRange;
|
972
953
|
focusDateUsedForRange = updateRange;
|
973
954
|
if (updateFocus) {
|
@@ -993,7 +974,7 @@
|
|
993
974
|
}
|
994
975
|
},
|
995
976
|
monthOffset: function (monthOffset, refreshCalendar) {
|
996
|
-
|
977
|
+
let multiMonth = Math.max(settings.multiMonth, 1);
|
997
978
|
monthOffset = Math.max(1 - multiMonth, Math.min(0, monthOffset));
|
998
979
|
module.set.dataKeyValue(metadata.monthOffset, monthOffset, refreshCalendar);
|
999
980
|
},
|
@@ -1001,8 +982,8 @@
|
|
1001
982
|
module.set.dataKeyValue(metadata.mode, mode, refreshCalendar);
|
1002
983
|
},
|
1003
984
|
dataKeyValue: function (key, value, refreshCalendar) {
|
1004
|
-
|
1005
|
-
|
985
|
+
let oldValue = $module.data(key);
|
986
|
+
let equal = oldValue === value || (oldValue <= value && oldValue >= value); // equality test for dates and string objects
|
1006
987
|
if (value) {
|
1007
988
|
$module.data(key, value);
|
1008
989
|
} else {
|
@@ -1019,20 +1000,20 @@
|
|
1019
1000
|
|
1020
1001
|
selectDate: function (date, forceSet) {
|
1021
1002
|
module.verbose('New date selection', date);
|
1022
|
-
|
1023
|
-
|
1003
|
+
let mode = module.get.mode();
|
1004
|
+
let complete = forceSet || mode === 'minute'
|
1024
1005
|
|| (settings.disableMinute && mode === 'hour')
|
1025
1006
|
|| (settings.type === 'date' && mode === 'day')
|
1026
1007
|
|| (settings.type === 'month' && mode === 'month')
|
1027
1008
|
|| (settings.type === 'year' && mode === 'year');
|
1028
1009
|
if (complete) {
|
1029
|
-
|
1010
|
+
let canceled = module.set.date(date) === false;
|
1030
1011
|
if (!canceled) {
|
1031
1012
|
selectionComplete = true;
|
1032
1013
|
if (settings.closable) {
|
1033
1014
|
module.popup('hide');
|
1034
1015
|
// if this is a range calendar, focus the container or input. This will open the popup from its event listeners.
|
1035
|
-
|
1016
|
+
let endModule = module.get.calendarModule(settings.endCalendar);
|
1036
1017
|
if (endModule) {
|
1037
1018
|
endModule.refresh();
|
1038
1019
|
if (endModule.setting('on') !== 'focus') {
|
@@ -1043,7 +1024,7 @@
|
|
1043
1024
|
}
|
1044
1025
|
}
|
1045
1026
|
} else {
|
1046
|
-
|
1027
|
+
let newMode = mode === 'year'
|
1047
1028
|
? (!settings.disableMonth ? 'month' : 'day')
|
1048
1029
|
: (mode === 'month'
|
1049
1030
|
? 'day'
|
@@ -1094,46 +1075,44 @@
|
|
1094
1075
|
return format.call(module, date, settings);
|
1095
1076
|
}
|
1096
1077
|
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
}
|
1136
|
-
;
|
1078
|
+
let D = date.getDate();
|
1079
|
+
let M = date.getMonth();
|
1080
|
+
let Y = date.getFullYear();
|
1081
|
+
let d = date.getDay();
|
1082
|
+
let H = date.getHours();
|
1083
|
+
let m = date.getMinutes();
|
1084
|
+
let s = date.getSeconds();
|
1085
|
+
let w = module.get.weekOfYear(Y, M, D + 1 - settings.firstDayOfWeek);
|
1086
|
+
let h = H % 12 || 12;
|
1087
|
+
let a = H < 12 ? settings.text.am.toLowerCase() : settings.text.pm.toLowerCase();
|
1088
|
+
let tokens = {
|
1089
|
+
D: D,
|
1090
|
+
DD: ('0' + D).slice(-2),
|
1091
|
+
M: M + 1,
|
1092
|
+
MM: ('0' + (M + 1)).slice(-2),
|
1093
|
+
MMM: settings.text.monthsShort[M],
|
1094
|
+
MMMM: settings.text.months[M],
|
1095
|
+
Y: Y,
|
1096
|
+
YY: String(Y).slice(2),
|
1097
|
+
YYYY: Y,
|
1098
|
+
d: d,
|
1099
|
+
dd: settings.text.dayNamesShort[d].slice(0, 2),
|
1100
|
+
ddd: settings.text.dayNamesShort[d],
|
1101
|
+
dddd: settings.text.dayNames[d],
|
1102
|
+
h: h,
|
1103
|
+
hh: ('0' + h).slice(-2),
|
1104
|
+
H: H,
|
1105
|
+
HH: ('0' + H).slice(-2),
|
1106
|
+
m: m,
|
1107
|
+
mm: ('0' + m).slice(-2),
|
1108
|
+
s: s,
|
1109
|
+
ss: ('0' + s).slice(-2),
|
1110
|
+
a: a,
|
1111
|
+
A: a.toUpperCase(),
|
1112
|
+
S: ['th', 'st', 'nd', 'rd'][(D % 10) > 3 ? 0 : ((D % 100) - (D % 10) === 10 ? 0 : D % 10)],
|
1113
|
+
w: w,
|
1114
|
+
ww: ('0' + w).slice(-2),
|
1115
|
+
};
|
1137
1116
|
|
1138
1117
|
return format.replace(settings.regExp.token, function (match) {
|
1139
1118
|
if (match in tokens) {
|
@@ -1159,7 +1138,7 @@
|
|
1159
1138
|
},
|
1160
1139
|
isDisabled: function (date, mode) {
|
1161
1140
|
return (mode === 'day' || mode === 'month' || mode === 'year' || mode === 'hour') && (((mode === 'day' && settings.disabledDaysOfWeek.indexOf(date.getDay()) !== -1) || settings.disabledDates.some(function (d) {
|
1162
|
-
|
1141
|
+
let blocked = false;
|
1163
1142
|
|
1164
1143
|
if (typeof d === 'string') {
|
1165
1144
|
d = module.helper.sanitiseDate(d);
|
@@ -1179,7 +1158,7 @@
|
|
1179
1158
|
} else if (Array.isArray(d[metadata.month])) {
|
1180
1159
|
blocked = d[metadata.month].indexOf(date.getMonth()) > -1;
|
1181
1160
|
} else if (d[metadata.month] instanceof Date) {
|
1182
|
-
|
1161
|
+
let sdate = module.helper.sanitiseDate(d[metadata.month]);
|
1183
1162
|
|
1184
1163
|
blocked = (date.getMonth() === sdate.getMonth()) && (date.getFullYear() === sdate.getFullYear());
|
1185
1164
|
}
|
@@ -1196,7 +1175,7 @@
|
|
1196
1175
|
|
1197
1176
|
return blocked;
|
1198
1177
|
})) || (mode === 'hour' && settings.disabledHours.some(function (d) {
|
1199
|
-
|
1178
|
+
let blocked = false;
|
1200
1179
|
|
1201
1180
|
if (typeof d === 'string') {
|
1202
1181
|
d = module.helper.sanitiseDate(d);
|
@@ -1239,7 +1218,7 @@
|
|
1239
1218
|
isEnabled: function (date, mode) {
|
1240
1219
|
if (mode === 'day') {
|
1241
1220
|
return settings.enabledDates.length === 0 || settings.enabledDates.some(function (d) {
|
1242
|
-
|
1221
|
+
let enabled = false;
|
1243
1222
|
|
1244
1223
|
if (typeof d === 'string') {
|
1245
1224
|
d = module.helper.sanitiseDate(d);
|
@@ -1258,14 +1237,14 @@
|
|
1258
1237
|
},
|
1259
1238
|
findDayAsObject: function (date, mode, dates) {
|
1260
1239
|
if (mode === 'day' || mode === 'month' || mode === 'year') {
|
1261
|
-
|
1262
|
-
for (
|
1240
|
+
let d;
|
1241
|
+
for (let i = 0; i < dates.length; i++) {
|
1263
1242
|
d = dates[i];
|
1264
1243
|
if (typeof d === 'string') {
|
1265
1244
|
d = module.helper.sanitiseDate(d);
|
1266
1245
|
}
|
1267
1246
|
if (d instanceof Date && module.helper.dateEqual(date, d, mode)) {
|
1268
|
-
|
1247
|
+
let dateObject = {};
|
1269
1248
|
dateObject[metadata.date] = d;
|
1270
1249
|
|
1271
1250
|
return dateObject;
|
@@ -1289,7 +1268,7 @@
|
|
1289
1268
|
return d;
|
1290
1269
|
}
|
1291
1270
|
} else if (d[metadata.month] instanceof Date) {
|
1292
|
-
|
1271
|
+
let sdate = module.helper.sanitiseDate(d[metadata.month]);
|
1293
1272
|
if ((date.getMonth() === sdate.getMonth()) && (date.getFullYear() === sdate.getFullYear())) {
|
1294
1273
|
return d;
|
1295
1274
|
}
|
@@ -1314,8 +1293,8 @@
|
|
1314
1293
|
},
|
1315
1294
|
findHourAsObject: function (date, mode, hours) {
|
1316
1295
|
if (mode === 'hour') {
|
1317
|
-
|
1318
|
-
|
1296
|
+
let d;
|
1297
|
+
let hourCheck = function (date, d) {
|
1319
1298
|
if (d[metadata.hours]) {
|
1320
1299
|
if (typeof d[metadata.hours] === 'number' && date.getHours() === d[metadata.hours]) {
|
1321
1300
|
return d;
|
@@ -1327,7 +1306,7 @@
|
|
1327
1306
|
}
|
1328
1307
|
}
|
1329
1308
|
};
|
1330
|
-
for (
|
1309
|
+
for (let i = 0; i < hours.length; i++) {
|
1331
1310
|
d = hours[i];
|
1332
1311
|
if (typeof d === 'number' && date.getHours() === d) {
|
1333
1312
|
return null;
|
@@ -1377,11 +1356,11 @@
|
|
1377
1356
|
mode = 'day';
|
1378
1357
|
}
|
1379
1358
|
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1359
|
+
let isTimeOnly = settings.type === 'time';
|
1360
|
+
let isYear = mode === 'year';
|
1361
|
+
let isYearOrMonth = isYear || mode === 'month';
|
1362
|
+
let isMinute = mode === 'minute';
|
1363
|
+
let isHourOrMinute = isMinute || mode === 'hour';
|
1385
1364
|
// only care about a minute accuracy of settings.minTimeGap
|
1386
1365
|
date1 = new Date(
|
1387
1366
|
isTimeOnly ? 2000 : date1.getFullYear(),
|
@@ -1405,7 +1384,7 @@
|
|
1405
1384
|
},
|
1406
1385
|
isDateInRange: function (date, mode, minDate, maxDate) {
|
1407
1386
|
if (!minDate && !maxDate) {
|
1408
|
-
|
1387
|
+
let startDate = module.get.startDate();
|
1409
1388
|
minDate = startDate && settings.minDate ? new Date(Math.max(startDate, settings.minDate)) : startDate || settings.minDate;
|
1410
1389
|
maxDate = settings.maxDate;
|
1411
1390
|
}
|
@@ -1417,12 +1396,12 @@
|
|
1417
1396
|
},
|
1418
1397
|
dateInRange: function (date, minDate, maxDate) {
|
1419
1398
|
if (!minDate && !maxDate) {
|
1420
|
-
|
1399
|
+
let startDate = module.get.startDate();
|
1421
1400
|
minDate = startDate && settings.minDate ? new Date(Math.max(startDate, settings.minDate)) : startDate || settings.minDate;
|
1422
1401
|
maxDate = settings.maxDate;
|
1423
1402
|
}
|
1424
1403
|
minDate = minDate && new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate(), minDate.getHours(), settings.minTimeGap * Math.ceil(minDate.getMinutes() / settings.minTimeGap));
|
1425
|
-
|
1404
|
+
let isTimeOnly = settings.type === 'time';
|
1426
1405
|
|
1427
1406
|
return !date
|
1428
1407
|
? date
|
@@ -1493,11 +1472,9 @@
|
|
1493
1472
|
},
|
1494
1473
|
performance: {
|
1495
1474
|
log: function (message) {
|
1496
|
-
|
1497
|
-
|
1498
|
-
|
1499
|
-
previousTime
|
1500
|
-
;
|
1475
|
+
let currentTime;
|
1476
|
+
let executionTime;
|
1477
|
+
let previousTime;
|
1501
1478
|
if (settings.performance) {
|
1502
1479
|
currentTime = Date.now();
|
1503
1480
|
previousTime = time || currentTime;
|
@@ -1516,10 +1493,8 @@
|
|
1516
1493
|
}, 500);
|
1517
1494
|
},
|
1518
1495
|
display: function () {
|
1519
|
-
|
1520
|
-
|
1521
|
-
totalTime = 0
|
1522
|
-
;
|
1496
|
+
let title = settings.name + ':';
|
1497
|
+
let totalTime = 0;
|
1523
1498
|
time = false;
|
1524
1499
|
clearTimeout(module.performance.timer);
|
1525
1500
|
$.each(performance, function (index, data) {
|
@@ -1541,22 +1516,19 @@
|
|
1541
1516
|
},
|
1542
1517
|
},
|
1543
1518
|
invoke: function (query, passedArguments, context) {
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
response
|
1549
|
-
;
|
1519
|
+
let object = instance;
|
1520
|
+
let maxDepth;
|
1521
|
+
let found;
|
1522
|
+
let response;
|
1550
1523
|
passedArguments = passedArguments || queryArguments;
|
1551
1524
|
context = context || element;
|
1552
1525
|
if (typeof query === 'string' && object !== undefined) {
|
1553
1526
|
query = query.split(/[ .]/);
|
1554
1527
|
maxDepth = query.length - 1;
|
1555
1528
|
$.each(query, function (depth, value) {
|
1556
|
-
|
1529
|
+
let camelCaseValue = depth !== maxDepth
|
1557
1530
|
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
|
1558
|
-
: query
|
1559
|
-
;
|
1531
|
+
: query;
|
1560
1532
|
if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
|
1561
1533
|
object = object[camelCaseValue];
|
1562
1534
|
} else if (object[camelCaseValue] !== undefined) {
|
@@ -1678,7 +1650,7 @@
|
|
1678
1650
|
|
1679
1651
|
formatter: {
|
1680
1652
|
yearHeader: function (date, settings) {
|
1681
|
-
|
1653
|
+
let decadeYear = Math.ceil(date.getFullYear() / 10) * 10;
|
1682
1654
|
|
1683
1655
|
return (decadeYear - 9) + ' - ' + (decadeYear + 2);
|
1684
1656
|
},
|
@@ -1719,42 +1691,34 @@
|
|
1719
1691
|
}
|
1720
1692
|
// Reverse date and month in some cases
|
1721
1693
|
text = settings.monthFirst || !/^\d{1,2}[./-]/.test(text) ? text : text.replace(/[./-]/g, '/').replace(/(\d+)\/(\d+)/, '$2/$1');
|
1722
|
-
|
1723
|
-
|
1724
|
-
|
1694
|
+
let textDate = new Date(text);
|
1695
|
+
let numberOnly = text.match(/^\d+$/) !== null;
|
1696
|
+
let isShortYear = text.match(/^(?:\d{1,2}[./-]){2}\d{1,2}$/) !== null;
|
1725
1697
|
if (!isShortYear && !numberOnly && !isNaN(textDate.getDate())) {
|
1726
1698
|
return textDate;
|
1727
1699
|
}
|
1728
1700
|
text = text.toLowerCase();
|
1729
1701
|
|
1730
|
-
|
1731
|
-
|
1732
|
-
|
1733
|
-
|
1734
|
-
;
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
;
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
;
|
1751
|
-
var
|
1752
|
-
numbers = text.split(settings.regExp.dateNumbers),
|
1753
|
-
number
|
1754
|
-
;
|
1755
|
-
|
1756
|
-
var parts;
|
1757
|
-
var monthString;
|
1702
|
+
let i;
|
1703
|
+
let j;
|
1704
|
+
let k;
|
1705
|
+
let minute = -1;
|
1706
|
+
let hour = -1;
|
1707
|
+
let day = -1;
|
1708
|
+
let month = -1;
|
1709
|
+
let year = -1;
|
1710
|
+
let isAm;
|
1711
|
+
|
1712
|
+
let isTimeOnly = settings.type === 'time';
|
1713
|
+
let isDateOnly = settings.type.indexOf('time') < 0;
|
1714
|
+
|
1715
|
+
let words = text.split(settings.regExp.dateWords);
|
1716
|
+
let word;
|
1717
|
+
let numbers = text.split(settings.regExp.dateNumbers);
|
1718
|
+
let number;
|
1719
|
+
|
1720
|
+
let parts;
|
1721
|
+
let monthString;
|
1758
1722
|
|
1759
1723
|
if (!isDateOnly) {
|
1760
1724
|
// am/pm
|
@@ -1938,7 +1902,7 @@
|
|
1938
1902
|
}
|
1939
1903
|
}
|
1940
1904
|
|
1941
|
-
|
1905
|
+
let date = new Date(year, month - 1, day, hour, minute);
|
1942
1906
|
if (date.getMonth() !== month - 1 || date.getFullYear() !== year) {
|
1943
1907
|
// month or year don't match up, switch to the last day of the month
|
1944
1908
|
date = new Date(year, month, 0, hour, minute);
|