fomantic-ui 2.10.0-beta.1 → 2.10.0-beta.11
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/.all-contributorsrc +9 -0
- package/.eslintrc.js +0 -10
- package/CONTRIBUTING.md +4 -1
- package/CONTRIBUTORS.md +1 -0
- package/FAQ.md +7 -2
- package/README.md +5 -9
- package/ROADMAP.md +4 -4
- package/SECURITY.md +8 -7
- package/changelog-setup.js +64 -70
- package/dist/components/accordion.css +1 -1
- package/dist/components/accordion.js +103 -142
- 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 +157 -210
- 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 -2
- package/dist/components/button.min.css +2 -2
- package/dist/components/calendar.css +1 -2
- package/dist/components/calendar.js +314 -352
- package/dist/components/calendar.min.css +2 -2
- 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 -2
- package/dist/components/checkbox.js +85 -135
- package/dist/components/checkbox.min.css +2 -2
- 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 +2 -4
- package/dist/components/container.min.css +2 -2
- package/dist/components/dimmer.css +1 -11
- package/dist/components/dimmer.js +61 -94
- package/dist/components/dimmer.min.css +2 -2
- package/dist/components/dimmer.min.js +2 -2
- package/dist/components/divider.css +1 -2
- package/dist/components/divider.min.css +2 -2
- package/dist/components/dropdown.css +30 -51
- package/dist/components/dropdown.js +736 -1055
- package/dist/components/dropdown.min.css +2 -2
- package/dist/components/dropdown.min.js +2 -2
- package/dist/components/embed.css +1 -1
- package/dist/components/embed.js +85 -114
- package/dist/components/embed.min.css +1 -1
- package/dist/components/embed.min.js +2 -2
- package/dist/components/emoji.css +3809 -7617
- package/dist/components/emoji.min.css +2 -2
- 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 +2 -3
- package/dist/components/flyout.js +226 -355
- package/dist/components/flyout.min.css +2 -2
- package/dist/components/flyout.min.js +2 -2
- package/dist/components/form.css +5 -95
- package/dist/components/form.js +335 -444
- package/dist/components/form.min.css +2 -2
- package/dist/components/form.min.js +2 -2
- package/dist/components/grid.css +2 -58
- package/dist/components/grid.min.css +2 -2
- package/dist/components/header.css +1 -1
- package/dist/components/header.min.css +1 -1
- package/dist/components/icon.css +4 -4
- package/dist/components/icon.min.css +2 -2
- package/dist/components/image.css +1 -1
- package/dist/components/image.min.css +1 -1
- package/dist/components/input.css +1 -536
- package/dist/components/input.min.css +2 -2
- 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 -3
- package/dist/components/list.min.css +2 -2
- package/dist/components/loader.css +1 -1
- package/dist/components/loader.min.css +1 -1
- package/dist/components/menu.css +40 -48
- package/dist/components/menu.min.css +2 -2
- package/dist/components/message.css +1 -1
- package/dist/components/message.min.css +1 -1
- package/dist/components/modal.css +5 -9
- package/dist/components/modal.js +261 -384
- package/dist/components/modal.min.css +2 -2
- package/dist/components/modal.min.js +2 -2
- package/dist/components/nag.css +1 -1
- package/dist/components/nag.js +68 -98
- 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 -2
- package/dist/components/popup.js +198 -271
- package/dist/components/popup.min.css +2 -2
- package/dist/components/popup.min.js +2 -2
- package/dist/components/progress.css +1 -1
- package/dist/components/progress.js +109 -144
- 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 +91 -123
- 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 +2 -9
- package/dist/components/search.js +277 -379
- package/dist/components/search.min.css +2 -2
- package/dist/components/search.min.js +2 -2
- package/dist/components/segment.css +2 -7
- package/dist/components/segment.min.css +2 -2
- package/dist/components/shape.css +1 -2
- package/dist/components/shape.js +158 -224
- package/dist/components/shape.min.css +2 -2
- package/dist/components/shape.min.js +2 -2
- package/dist/components/sidebar.css +2 -3
- package/dist/components/sidebar.js +124 -206
- package/dist/components/sidebar.min.css +2 -2
- package/dist/components/sidebar.min.js +2 -2
- package/dist/components/site.css +9 -25
- package/dist/components/site.js +38 -57
- package/dist/components/site.min.css +2 -2
- package/dist/components/site.min.js +2 -2
- package/dist/components/slider.css +1 -1
- package/dist/components/slider.js +246 -329
- package/dist/components/slider.min.css +1 -1
- package/dist/components/slider.min.js +2 -2
- package/dist/components/state.js +70 -100
- 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 +135 -180
- 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 +176 -244
- package/dist/components/tab.min.css +1 -1
- package/dist/components/tab.min.js +2 -2
- package/dist/components/table.css +3 -37
- package/dist/components/table.min.css +2 -2
- package/dist/components/text.css +1 -1
- package/dist/components/text.min.css +1 -1
- package/dist/components/toast.css +1 -3
- package/dist/components/toast.js +109 -147
- 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 +91 -146
- package/dist/components/transition.min.css +1 -1
- package/dist/components/transition.min.js +2 -2
- package/dist/components/visibility.js +146 -224
- package/dist/components/visibility.min.js +2 -2
- package/dist/semantic.css +3945 -8759
- package/dist/semantic.js +4397 -6155
- package/dist/semantic.min.css +2 -2
- package/dist/semantic.min.js +2 -2
- package/examples/assets/show-examples.js +2 -4
- package/examples/attached.html +1 -1
- package/examples/components/menu.html +1 -1
- package/gulpfile.js +5 -7
- package/package.json +3 -5
- package/scripts/nightly-version.js +7 -10
- package/src/README.md +3 -3
- package/src/definitions/behaviors/api.js +156 -209
- package/src/definitions/behaviors/form.js +334 -443
- package/src/definitions/behaviors/state.js +69 -99
- package/src/definitions/behaviors/visibility.js +145 -223
- package/src/definitions/collections/form.less +1 -13
- package/src/definitions/collections/grid.less +1 -61
- package/src/definitions/collections/menu.less +101 -107
- package/src/definitions/collections/table.less +1 -35
- package/src/definitions/elements/input.less +1 -61
- package/src/definitions/elements/segment.less +0 -6
- package/src/definitions/globals/site.js +37 -56
- package/src/definitions/globals/site.less +2 -18
- package/src/definitions/modules/accordion.js +102 -141
- package/src/definitions/modules/calendar.js +313 -351
- package/src/definitions/modules/checkbox.js +84 -134
- package/src/definitions/modules/dimmer.js +60 -93
- package/src/definitions/modules/dimmer.less +0 -9
- package/src/definitions/modules/dropdown.js +735 -1054
- package/src/definitions/modules/dropdown.less +31 -47
- package/src/definitions/modules/embed.js +84 -113
- package/src/definitions/modules/flyout.js +225 -354
- package/src/definitions/modules/modal.js +260 -383
- package/src/definitions/modules/modal.less +1 -1
- package/src/definitions/modules/nag.js +67 -97
- package/src/definitions/modules/popup.js +197 -270
- package/src/definitions/modules/progress.js +108 -143
- package/src/definitions/modules/rating.js +90 -122
- package/src/definitions/modules/search.js +276 -378
- package/src/definitions/modules/search.less +0 -3
- package/src/definitions/modules/shape.js +157 -223
- package/src/definitions/modules/sidebar.js +123 -205
- package/src/definitions/modules/slider.js +245 -328
- package/src/definitions/modules/slider.less +1 -1
- package/src/definitions/modules/sticky.js +134 -179
- package/src/definitions/modules/tab.js +175 -243
- package/src/definitions/modules/toast.js +108 -146
- package/src/definitions/modules/toast.less +1 -1
- package/src/definitions/modules/transition.js +90 -145
- package/src/theme.less +0 -13
- package/src/themes/basic/elements/icon.variables +1 -1
- package/src/themes/chubby/collections/menu.variables +1 -1
- package/src/themes/default/collections/grid.variables +0 -30
- package/src/themes/default/collections/menu.variables +23 -23
- package/src/themes/default/collections/table.variables +1 -5
- package/src/themes/default/elements/icon.variables +3 -3
- package/src/themes/default/globals/site.variables +8 -15
- package/src/themes/default/globals/variation.variables +3 -3
- package/src/themes/default/modules/dropdown.variables +1 -0
- package/src/themes/default/modules/slider.variables +1 -1
- package/src/themes/github/elements/icon.variables +1 -1
- package/src/themes/material/elements/icon.variables +1 -1
- package/tasks/README.md +1 -1
- package/tasks/admin/components/create.js +89 -122
- package/tasks/admin/components/init.js +34 -65
- package/tasks/admin/components/update.js +50 -61
- package/tasks/admin/distributions/create.js +71 -111
- package/tasks/admin/distributions/init.js +32 -63
- package/tasks/admin/distributions/update.js +49 -57
- package/tasks/admin/publish.js +1 -1
- package/tasks/admin/register.js +14 -19
- package/tasks/admin/release.js +2 -2
- package/tasks/build/assets.js +14 -18
- package/tasks/build/css.js +59 -68
- package/tasks/build/javascript.js +48 -56
- package/tasks/build.js +4 -6
- package/tasks/check-install.js +5 -8
- package/tasks/clean.js +5 -7
- package/tasks/collections/admin.js +14 -16
- package/tasks/collections/build.js +6 -8
- package/tasks/collections/docs.js +4 -6
- 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 +9 -19
- package/tasks/config/admin/templates/README.md +2 -2
- package/tasks/config/admin/templates/bower.json +2 -4
- package/tasks/config/admin/templates/composer.json +1 -1
- package/tasks/config/admin/templates/css-package.js +1 -4
- package/tasks/config/admin/templates/less-package.js +1 -3
- package/tasks/config/defaults.js +0 -1
- package/tasks/config/npm/gulpfile.js +4 -6
- package/tasks/config/project/config.js +27 -35
- package/tasks/config/project/install.js +64 -82
- package/tasks/config/project/release.js +7 -9
- package/tasks/config/tasks.js +10 -21
- package/tasks/config/user.js +14 -20
- package/tasks/docs/build.js +26 -31
- package/tasks/docs/metadata.js +30 -39
- package/tasks/docs/serve.js +23 -27
- package/tasks/install.js +94 -128
- package/tasks/rtl/build.js +2 -4
- package/tasks/rtl/watch.js +3 -5
- package/tasks/watch.js +13 -13
- package/test/meteor/fonts.js +1 -2
- package/test/modules/module.spec.js +16 -18
- package/types/fomantic-ui-calendar.d.ts +1 -1
- package/types/fomantic-ui-dropdown.d.ts +45 -1
- package/types/fomantic-ui-embed.d.ts +1 -1
- package/types/fomantic-ui-flyout.d.ts +1 -1
- package/types/fomantic-ui-form.d.ts +0 -7
- package/types/fomantic-ui-modal.d.ts +1 -1
- package/types/fomantic-ui-search.d.ts +12 -6
- package/types/fomantic-ui-toast.d.ts +1 -1
- package/src/themes/basic/assets/fonts/icons.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-Bold.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-Italic.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-Regular.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
- package/src/themes/default/assets/fonts/brand-icons.woff +0 -0
- package/src/themes/default/assets/fonts/icons.woff +0 -0
- package/src/themes/default/assets/fonts/outline-icons.woff +0 -0
- package/src/themes/github/assets/fonts/octicons.woff +0 -0
- package/src/themes/material/assets/fonts/icons.woff +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* # Fomantic-UI 2.10.0-beta.
|
2
|
+
* # Fomantic-UI 2.10.0-beta.11+6d1b302 - 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
|
|
@@ -149,11 +145,9 @@
|
|
149
145
|
$container = $('<div/>', { id: module.popupId }).addClass(className.popup).appendTo($document.find(settings.context));
|
150
146
|
} else {
|
151
147
|
// prepend the popup element to the activator's parent so that it has less chance of messing with
|
152
|
-
// the styling (
|
153
|
-
|
154
|
-
|
155
|
-
domPositionFunction = $activatorParent.closest(selector.append).length > 0 ? 'appendTo' : 'prependTo'
|
156
|
-
;
|
148
|
+
// the styling (e.g., input action button needs to be the last child to have the correct border radius)
|
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
|
-
// clicked on a child element, switch to parent (used when clicking directly on prev/next <i> icon element)
|
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) {
|
@@ -750,11 +732,9 @@
|
|
750
732
|
},
|
751
733
|
|
752
734
|
observeChanges: function () {
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
module.observe.class();
|
757
|
-
}
|
735
|
+
classObserver = new MutationObserver(module.event.class.mutation);
|
736
|
+
module.debug('Setting up mutation observer', classObserver);
|
737
|
+
module.observe.class();
|
758
738
|
},
|
759
739
|
|
760
740
|
disconnect: {
|
@@ -790,12 +770,11 @@
|
|
790
770
|
get: {
|
791
771
|
weekOfYear: function (weekYear, weekMonth, weekDay) {
|
792
772
|
// adapted from http://www.merlyn.demon.co.uk/weekcalc.htm
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
;
|
773
|
+
let ms1d = 24 * 3600 * 1000;
|
774
|
+
let ms7d = 7 * ms1d;
|
775
|
+
let DC3 = Date.UTC(weekYear, weekMonth, weekDay + 3) / ms1d; // an absolute day number
|
776
|
+
let AWN = Math.floor(DC3 / 7); // an absolute week number
|
777
|
+
let Wyr = new Date(AWN * ms7d).getUTCFullYear();
|
799
778
|
|
800
779
|
return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;
|
801
780
|
},
|
@@ -812,7 +791,7 @@
|
|
812
791
|
return module.helper.dateObjectOrFormatted(format, $module.data(metadata.focusDate));
|
813
792
|
},
|
814
793
|
startDate: function (format) {
|
815
|
-
|
794
|
+
let startModule = module.get.calendarModule(settings.startCalendar);
|
816
795
|
|
817
796
|
if (startModule) {
|
818
797
|
return startModule.get.date(format);
|
@@ -821,7 +800,7 @@
|
|
821
800
|
return module.helper.dateObjectOrFormatted(format, $module.data(metadata.startDate));
|
822
801
|
},
|
823
802
|
endDate: function (format) {
|
824
|
-
|
803
|
+
let endModule = module.get.calendarModule(settings.endCalendar);
|
825
804
|
|
826
805
|
if (endModule) {
|
827
806
|
return endModule.get.date(format);
|
@@ -840,12 +819,12 @@
|
|
840
819
|
},
|
841
820
|
mode: function () {
|
842
821
|
// only returns valid modes for the current settings
|
843
|
-
|
822
|
+
let mode = $module.data(metadata.mode) || settings.startMode;
|
844
823
|
|
845
824
|
return module.get.validatedMode(mode);
|
846
825
|
},
|
847
826
|
validatedMode: function (mode) {
|
848
|
-
|
827
|
+
let validModes = module.get.validModes();
|
849
828
|
if ($.inArray(mode, validModes) >= 0) {
|
850
829
|
return mode;
|
851
830
|
}
|
@@ -860,7 +839,7 @@
|
|
860
839
|
return $module.data(metadata.type) || settings.type;
|
861
840
|
},
|
862
841
|
validModes: function () {
|
863
|
-
|
842
|
+
let validModes = [];
|
864
843
|
if (settings.type !== 'time') {
|
865
844
|
if (!settings.disableYear || settings.type === 'year') {
|
866
845
|
validModes.push('year');
|
@@ -910,8 +889,8 @@
|
|
910
889
|
date = module.helper.sanitiseDate(date);
|
911
890
|
date = module.helper.dateInRange(date);
|
912
891
|
|
913
|
-
|
914
|
-
|
892
|
+
let mode = module.get.mode();
|
893
|
+
let text = module.helper.dateFormat(formatter[settings.type], date);
|
915
894
|
|
916
895
|
if (fireChange && settings.onBeforeChange.call(element, date, text, mode) === false) {
|
917
896
|
return false;
|
@@ -923,7 +902,7 @@
|
|
923
902
|
return false;
|
924
903
|
}
|
925
904
|
|
926
|
-
|
905
|
+
let endDate = module.get.endDate();
|
927
906
|
if (!!endDate && !!date && date > endDate) {
|
928
907
|
// selected date is greater than end date in range, so clear end date
|
929
908
|
module.set.endDate();
|
@@ -940,7 +919,7 @@
|
|
940
919
|
},
|
941
920
|
startDate: function (date, refreshCalendar) {
|
942
921
|
date = module.helper.sanitiseDate(date);
|
943
|
-
|
922
|
+
let startModule = module.get.calendarModule(settings.startCalendar);
|
944
923
|
if (startModule) {
|
945
924
|
startModule.set.date(date);
|
946
925
|
}
|
@@ -948,7 +927,7 @@
|
|
948
927
|
},
|
949
928
|
endDate: function (date, refreshCalendar) {
|
950
929
|
date = module.helper.sanitiseDate(date);
|
951
|
-
|
930
|
+
let endModule = module.get.calendarModule(settings.endCalendar);
|
952
931
|
if (endModule) {
|
953
932
|
endModule.set.date(date);
|
954
933
|
}
|
@@ -957,17 +936,17 @@
|
|
957
936
|
focusDate: function (date, refreshCalendar, updateFocus, updateRange) {
|
958
937
|
date = module.helper.sanitiseDate(date);
|
959
938
|
date = module.helper.dateInRange(date);
|
960
|
-
|
961
|
-
|
939
|
+
let isDay = module.get.mode() === 'day';
|
940
|
+
let oldFocusDate = module.get.focusDate();
|
962
941
|
if (isDay && date && oldFocusDate) {
|
963
|
-
|
964
|
-
|
942
|
+
let yearDelta = date.getFullYear() - oldFocusDate.getFullYear();
|
943
|
+
let monthDelta = yearDelta * 12 + date.getMonth() - oldFocusDate.getMonth();
|
965
944
|
if (monthDelta) {
|
966
|
-
|
945
|
+
let monthOffset = module.get.monthOffset() - monthDelta;
|
967
946
|
module.set.monthOffset(monthOffset, false);
|
968
947
|
}
|
969
948
|
}
|
970
|
-
|
949
|
+
let changed = module.set.dataKeyValue(metadata.focusDate, date, !!date && refreshCalendar);
|
971
950
|
updateFocus = (updateFocus !== false && changed && refreshCalendar === false) || focusDateUsedForRange != updateRange;
|
972
951
|
focusDateUsedForRange = updateRange;
|
973
952
|
if (updateFocus) {
|
@@ -993,7 +972,7 @@
|
|
993
972
|
}
|
994
973
|
},
|
995
974
|
monthOffset: function (monthOffset, refreshCalendar) {
|
996
|
-
|
975
|
+
let multiMonth = Math.max(settings.multiMonth, 1);
|
997
976
|
monthOffset = Math.max(1 - multiMonth, Math.min(0, monthOffset));
|
998
977
|
module.set.dataKeyValue(metadata.monthOffset, monthOffset, refreshCalendar);
|
999
978
|
},
|
@@ -1001,8 +980,8 @@
|
|
1001
980
|
module.set.dataKeyValue(metadata.mode, mode, refreshCalendar);
|
1002
981
|
},
|
1003
982
|
dataKeyValue: function (key, value, refreshCalendar) {
|
1004
|
-
|
1005
|
-
|
983
|
+
let oldValue = $module.data(key);
|
984
|
+
let equal = oldValue === value || (oldValue <= value && oldValue >= value); // equality test for dates and string objects
|
1006
985
|
if (value) {
|
1007
986
|
$module.data(key, value);
|
1008
987
|
} else {
|
@@ -1019,20 +998,20 @@
|
|
1019
998
|
|
1020
999
|
selectDate: function (date, forceSet) {
|
1021
1000
|
module.verbose('New date selection', date);
|
1022
|
-
|
1023
|
-
|
1001
|
+
let mode = module.get.mode();
|
1002
|
+
let complete = forceSet || mode === 'minute'
|
1024
1003
|
|| (settings.disableMinute && mode === 'hour')
|
1025
1004
|
|| (settings.type === 'date' && mode === 'day')
|
1026
1005
|
|| (settings.type === 'month' && mode === 'month')
|
1027
1006
|
|| (settings.type === 'year' && mode === 'year');
|
1028
1007
|
if (complete) {
|
1029
|
-
|
1008
|
+
let canceled = module.set.date(date) === false;
|
1030
1009
|
if (!canceled) {
|
1031
1010
|
selectionComplete = true;
|
1032
1011
|
if (settings.closable) {
|
1033
1012
|
module.popup('hide');
|
1034
1013
|
// if this is a range calendar, focus the container or input. This will open the popup from its event listeners.
|
1035
|
-
|
1014
|
+
let endModule = module.get.calendarModule(settings.endCalendar);
|
1036
1015
|
if (endModule) {
|
1037
1016
|
endModule.refresh();
|
1038
1017
|
if (endModule.setting('on') !== 'focus') {
|
@@ -1043,7 +1022,7 @@
|
|
1043
1022
|
}
|
1044
1023
|
}
|
1045
1024
|
} else {
|
1046
|
-
|
1025
|
+
let newMode = mode === 'year'
|
1047
1026
|
? (!settings.disableMonth ? 'month' : 'day')
|
1048
1027
|
: (mode === 'month'
|
1049
1028
|
? 'day'
|
@@ -1094,46 +1073,44 @@
|
|
1094
1073
|
return format.call(module, date, settings);
|
1095
1074
|
}
|
1096
1075
|
|
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
|
-
;
|
1076
|
+
let D = date.getDate();
|
1077
|
+
let M = date.getMonth();
|
1078
|
+
let Y = date.getFullYear();
|
1079
|
+
let d = date.getDay();
|
1080
|
+
let H = date.getHours();
|
1081
|
+
let m = date.getMinutes();
|
1082
|
+
let s = date.getSeconds();
|
1083
|
+
let w = module.get.weekOfYear(Y, M, D + 1 - settings.firstDayOfWeek);
|
1084
|
+
let h = H % 12 || 12;
|
1085
|
+
let a = H < 12 ? settings.text.am.toLowerCase() : settings.text.pm.toLowerCase();
|
1086
|
+
let tokens = {
|
1087
|
+
D: D,
|
1088
|
+
DD: ('0' + D).slice(-2),
|
1089
|
+
M: M + 1,
|
1090
|
+
MM: ('0' + (M + 1)).slice(-2),
|
1091
|
+
MMM: settings.text.monthsShort[M],
|
1092
|
+
MMMM: settings.text.months[M],
|
1093
|
+
Y: Y,
|
1094
|
+
YY: String(Y).slice(2),
|
1095
|
+
YYYY: Y,
|
1096
|
+
d: d,
|
1097
|
+
dd: settings.text.dayNamesShort[d].slice(0, 2),
|
1098
|
+
ddd: settings.text.dayNamesShort[d],
|
1099
|
+
dddd: settings.text.dayNames[d],
|
1100
|
+
h: h,
|
1101
|
+
hh: ('0' + h).slice(-2),
|
1102
|
+
H: H,
|
1103
|
+
HH: ('0' + H).slice(-2),
|
1104
|
+
m: m,
|
1105
|
+
mm: ('0' + m).slice(-2),
|
1106
|
+
s: s,
|
1107
|
+
ss: ('0' + s).slice(-2),
|
1108
|
+
a: a,
|
1109
|
+
A: a.toUpperCase(),
|
1110
|
+
S: ['th', 'st', 'nd', 'rd'][(D % 10) > 3 ? 0 : ((D % 100) - (D % 10) === 10 ? 0 : D % 10)],
|
1111
|
+
w: w,
|
1112
|
+
ww: ('0' + w).slice(-2),
|
1113
|
+
};
|
1137
1114
|
|
1138
1115
|
return format.replace(settings.regExp.token, function (match) {
|
1139
1116
|
if (match in tokens) {
|
@@ -1159,7 +1136,7 @@
|
|
1159
1136
|
},
|
1160
1137
|
isDisabled: function (date, mode) {
|
1161
1138
|
return (mode === 'day' || mode === 'month' || mode === 'year' || mode === 'hour') && (((mode === 'day' && settings.disabledDaysOfWeek.indexOf(date.getDay()) !== -1) || settings.disabledDates.some(function (d) {
|
1162
|
-
|
1139
|
+
let blocked = false;
|
1163
1140
|
|
1164
1141
|
if (typeof d === 'string') {
|
1165
1142
|
d = module.helper.sanitiseDate(d);
|
@@ -1179,7 +1156,7 @@
|
|
1179
1156
|
} else if (Array.isArray(d[metadata.month])) {
|
1180
1157
|
blocked = d[metadata.month].indexOf(date.getMonth()) > -1;
|
1181
1158
|
} else if (d[metadata.month] instanceof Date) {
|
1182
|
-
|
1159
|
+
let sdate = module.helper.sanitiseDate(d[metadata.month]);
|
1183
1160
|
|
1184
1161
|
blocked = (date.getMonth() === sdate.getMonth()) && (date.getFullYear() === sdate.getFullYear());
|
1185
1162
|
}
|
@@ -1196,7 +1173,7 @@
|
|
1196
1173
|
|
1197
1174
|
return blocked;
|
1198
1175
|
})) || (mode === 'hour' && settings.disabledHours.some(function (d) {
|
1199
|
-
|
1176
|
+
let blocked = false;
|
1200
1177
|
|
1201
1178
|
if (typeof d === 'string') {
|
1202
1179
|
d = module.helper.sanitiseDate(d);
|
@@ -1239,7 +1216,7 @@
|
|
1239
1216
|
isEnabled: function (date, mode) {
|
1240
1217
|
if (mode === 'day') {
|
1241
1218
|
return settings.enabledDates.length === 0 || settings.enabledDates.some(function (d) {
|
1242
|
-
|
1219
|
+
let enabled = false;
|
1243
1220
|
|
1244
1221
|
if (typeof d === 'string') {
|
1245
1222
|
d = module.helper.sanitiseDate(d);
|
@@ -1258,14 +1235,14 @@
|
|
1258
1235
|
},
|
1259
1236
|
findDayAsObject: function (date, mode, dates) {
|
1260
1237
|
if (mode === 'day' || mode === 'month' || mode === 'year') {
|
1261
|
-
|
1262
|
-
for (
|
1238
|
+
let d;
|
1239
|
+
for (let i = 0; i < dates.length; i++) {
|
1263
1240
|
d = dates[i];
|
1264
1241
|
if (typeof d === 'string') {
|
1265
1242
|
d = module.helper.sanitiseDate(d);
|
1266
1243
|
}
|
1267
1244
|
if (d instanceof Date && module.helper.dateEqual(date, d, mode)) {
|
1268
|
-
|
1245
|
+
let dateObject = {};
|
1269
1246
|
dateObject[metadata.date] = d;
|
1270
1247
|
|
1271
1248
|
return dateObject;
|
@@ -1289,7 +1266,7 @@
|
|
1289
1266
|
return d;
|
1290
1267
|
}
|
1291
1268
|
} else if (d[metadata.month] instanceof Date) {
|
1292
|
-
|
1269
|
+
let sdate = module.helper.sanitiseDate(d[metadata.month]);
|
1293
1270
|
if ((date.getMonth() === sdate.getMonth()) && (date.getFullYear() === sdate.getFullYear())) {
|
1294
1271
|
return d;
|
1295
1272
|
}
|
@@ -1314,8 +1291,8 @@
|
|
1314
1291
|
},
|
1315
1292
|
findHourAsObject: function (date, mode, hours) {
|
1316
1293
|
if (mode === 'hour') {
|
1317
|
-
|
1318
|
-
|
1294
|
+
let d;
|
1295
|
+
let hourCheck = function (date, d) {
|
1319
1296
|
if (d[metadata.hours]) {
|
1320
1297
|
if (typeof d[metadata.hours] === 'number' && date.getHours() === d[metadata.hours]) {
|
1321
1298
|
return d;
|
@@ -1327,7 +1304,7 @@
|
|
1327
1304
|
}
|
1328
1305
|
}
|
1329
1306
|
};
|
1330
|
-
for (
|
1307
|
+
for (let i = 0; i < hours.length; i++) {
|
1331
1308
|
d = hours[i];
|
1332
1309
|
if (typeof d === 'number' && date.getHours() === d) {
|
1333
1310
|
return null;
|
@@ -1377,11 +1354,11 @@
|
|
1377
1354
|
mode = 'day';
|
1378
1355
|
}
|
1379
1356
|
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1357
|
+
let isTimeOnly = settings.type === 'time';
|
1358
|
+
let isYear = mode === 'year';
|
1359
|
+
let isYearOrMonth = isYear || mode === 'month';
|
1360
|
+
let isMinute = mode === 'minute';
|
1361
|
+
let isHourOrMinute = isMinute || mode === 'hour';
|
1385
1362
|
// only care about a minute accuracy of settings.minTimeGap
|
1386
1363
|
date1 = new Date(
|
1387
1364
|
isTimeOnly ? 2000 : date1.getFullYear(),
|
@@ -1405,7 +1382,7 @@
|
|
1405
1382
|
},
|
1406
1383
|
isDateInRange: function (date, mode, minDate, maxDate) {
|
1407
1384
|
if (!minDate && !maxDate) {
|
1408
|
-
|
1385
|
+
let startDate = module.get.startDate();
|
1409
1386
|
minDate = startDate && settings.minDate ? new Date(Math.max(startDate, settings.minDate)) : startDate || settings.minDate;
|
1410
1387
|
maxDate = settings.maxDate;
|
1411
1388
|
}
|
@@ -1417,12 +1394,12 @@
|
|
1417
1394
|
},
|
1418
1395
|
dateInRange: function (date, minDate, maxDate) {
|
1419
1396
|
if (!minDate && !maxDate) {
|
1420
|
-
|
1397
|
+
let startDate = module.get.startDate();
|
1421
1398
|
minDate = startDate && settings.minDate ? new Date(Math.max(startDate, settings.minDate)) : startDate || settings.minDate;
|
1422
1399
|
maxDate = settings.maxDate;
|
1423
1400
|
}
|
1424
1401
|
minDate = minDate && new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate(), minDate.getHours(), settings.minTimeGap * Math.ceil(minDate.getMinutes() / settings.minTimeGap));
|
1425
|
-
|
1402
|
+
let isTimeOnly = settings.type === 'time';
|
1426
1403
|
|
1427
1404
|
return !date
|
1428
1405
|
? date
|
@@ -1493,11 +1470,9 @@
|
|
1493
1470
|
},
|
1494
1471
|
performance: {
|
1495
1472
|
log: function (message) {
|
1496
|
-
|
1497
|
-
|
1498
|
-
|
1499
|
-
previousTime
|
1500
|
-
;
|
1473
|
+
let currentTime;
|
1474
|
+
let executionTime;
|
1475
|
+
let previousTime;
|
1501
1476
|
if (settings.performance) {
|
1502
1477
|
currentTime = Date.now();
|
1503
1478
|
previousTime = time || currentTime;
|
@@ -1516,10 +1491,8 @@
|
|
1516
1491
|
}, 500);
|
1517
1492
|
},
|
1518
1493
|
display: function () {
|
1519
|
-
|
1520
|
-
|
1521
|
-
totalTime = 0
|
1522
|
-
;
|
1494
|
+
let title = settings.name + ':';
|
1495
|
+
let totalTime = 0;
|
1523
1496
|
time = false;
|
1524
1497
|
clearTimeout(module.performance.timer);
|
1525
1498
|
$.each(performance, function (index, data) {
|
@@ -1541,22 +1514,19 @@
|
|
1541
1514
|
},
|
1542
1515
|
},
|
1543
1516
|
invoke: function (query, passedArguments, context) {
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
response
|
1549
|
-
;
|
1517
|
+
let object = instance;
|
1518
|
+
let maxDepth;
|
1519
|
+
let found;
|
1520
|
+
let response;
|
1550
1521
|
passedArguments = passedArguments || queryArguments;
|
1551
1522
|
context = context || element;
|
1552
1523
|
if (typeof query === 'string' && object !== undefined) {
|
1553
1524
|
query = query.split(/[ .]/);
|
1554
1525
|
maxDepth = query.length - 1;
|
1555
1526
|
$.each(query, function (depth, value) {
|
1556
|
-
|
1527
|
+
let camelCaseValue = depth !== maxDepth
|
1557
1528
|
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
|
1558
|
-
: query
|
1559
|
-
;
|
1529
|
+
: query;
|
1560
1530
|
if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
|
1561
1531
|
object = object[camelCaseValue];
|
1562
1532
|
} else if (object[camelCaseValue] !== undefined) {
|
@@ -1623,12 +1593,12 @@
|
|
1623
1593
|
|
1624
1594
|
context: false,
|
1625
1595
|
|
1626
|
-
type: 'datetime', // picker type
|
1596
|
+
type: 'datetime', // picker type. can be 'datetime', 'date', 'time', 'month', or 'year'
|
1627
1597
|
firstDayOfWeek: 0, // day for first day column (0 = Sunday)
|
1628
1598
|
constantHeight: true, // add rows to shorter months to keep day calendar height consistent (6 rows)
|
1629
1599
|
today: false, // show a 'today/now' button at the bottom of the calendar
|
1630
1600
|
closable: true, // close the popup after selecting a date/time
|
1631
|
-
monthFirst:
|
1601
|
+
monthFirst: false, // month before day when parsing date from a text
|
1632
1602
|
touchReadonly: true, // set input to readonly on touch devices
|
1633
1603
|
inline: false, // create the calendar inline instead of inside a popup
|
1634
1604
|
on: null, // when to show the popup (defaults to 'focus' for input, 'click' for others)
|
@@ -1645,7 +1615,7 @@
|
|
1645
1615
|
multiMonth: 1, // show multiple months when in 'day' mode
|
1646
1616
|
monthOffset: 0, // position current month by offset when multimonth > 1
|
1647
1617
|
minTimeGap: 5,
|
1648
|
-
showWeekNumbers: false, // show Number of
|
1618
|
+
showWeekNumbers: false, // show Number of Weeks at the very first column of a dayView
|
1649
1619
|
disabledHours: [], // specific hour(s) which won't be selectable and contain additional information.
|
1650
1620
|
disabledDates: [], // specific day(s) which won't be selectable and contain additional information.
|
1651
1621
|
disabledDaysOfWeek: [], // day(s) which won't be selectable(s) (0 = Sunday)
|
@@ -1678,7 +1648,7 @@
|
|
1678
1648
|
|
1679
1649
|
formatter: {
|
1680
1650
|
yearHeader: function (date, settings) {
|
1681
|
-
|
1651
|
+
let decadeYear = Math.ceil(date.getFullYear() / 10) * 10;
|
1682
1652
|
|
1683
1653
|
return (decadeYear - 9) + ' - ' + (decadeYear + 2);
|
1684
1654
|
},
|
@@ -1719,42 +1689,34 @@
|
|
1719
1689
|
}
|
1720
1690
|
// Reverse date and month in some cases
|
1721
1691
|
text = settings.monthFirst || !/^\d{1,2}[./-]/.test(text) ? text : text.replace(/[./-]/g, '/').replace(/(\d+)\/(\d+)/, '$2/$1');
|
1722
|
-
|
1723
|
-
|
1724
|
-
|
1692
|
+
let textDate = new Date(text);
|
1693
|
+
let numberOnly = text.match(/^\d+$/) !== null;
|
1694
|
+
let isShortYear = text.match(/^(?:\d{1,2}[./-]){2}\d{1,2}$/) !== null;
|
1725
1695
|
if (!isShortYear && !numberOnly && !isNaN(textDate.getDate())) {
|
1726
1696
|
return textDate;
|
1727
1697
|
}
|
1728
1698
|
text = text.toLowerCase();
|
1729
1699
|
|
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;
|
1700
|
+
let i;
|
1701
|
+
let j;
|
1702
|
+
let k;
|
1703
|
+
let minute = -1;
|
1704
|
+
let hour = -1;
|
1705
|
+
let day = -1;
|
1706
|
+
let month = -1;
|
1707
|
+
let year = -1;
|
1708
|
+
let isAm;
|
1709
|
+
|
1710
|
+
let isTimeOnly = settings.type === 'time';
|
1711
|
+
let isDateOnly = settings.type.indexOf('time') < 0;
|
1712
|
+
|
1713
|
+
let words = text.split(settings.regExp.dateWords);
|
1714
|
+
let word;
|
1715
|
+
let numbers = text.split(settings.regExp.dateNumbers);
|
1716
|
+
let number;
|
1717
|
+
|
1718
|
+
let parts;
|
1719
|
+
let monthString;
|
1758
1720
|
|
1759
1721
|
if (!isDateOnly) {
|
1760
1722
|
// am/pm
|
@@ -1938,9 +1900,9 @@
|
|
1938
1900
|
}
|
1939
1901
|
}
|
1940
1902
|
|
1941
|
-
|
1903
|
+
let date = new Date(year, month - 1, day, hour, minute);
|
1942
1904
|
if (date.getMonth() !== month - 1 || date.getFullYear() !== year) {
|
1943
|
-
// month or year don't match up, switch to last day of the month
|
1905
|
+
// month or year don't match up, switch to the last day of the month
|
1944
1906
|
date = new Date(year, month, 0, hour, minute);
|
1945
1907
|
}
|
1946
1908
|
|