timepicker 1.14.0 → 1.15.0
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/README.md +3 -3
- package/jquery.timepicker.js +340 -560
- package/jquery.timepicker.min.js +1 -1
- package/package.json +18 -16
- package/src/jquery.timepicker.d.ts +202 -0
- package/src/jquery.timepicker.js +603 -0
package/jquery.timepicker.js
CHANGED
|
@@ -1,204 +1,198 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* jquery-timepicker v1.
|
|
2
|
+
* jquery-timepicker v1.15.0 - A jQuery timepicker plugin inspired by Google Calendar. It supports both mouse and keyboard navigation.
|
|
3
3
|
* Copyright (c) 2021 Jon Thornton - https://www.jonthornton.com/jquery-timepicker/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
(function () {
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
|
-
function
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
_typeof = function (obj) {
|
|
14
|
-
return typeof obj;
|
|
15
|
-
};
|
|
16
|
-
} else {
|
|
17
|
-
_typeof = function (obj) {
|
|
18
|
-
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return _typeof(obj);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function _classCallCheck(instance, Constructor) {
|
|
26
|
-
if (!(instance instanceof Constructor)) {
|
|
27
|
-
throw new TypeError("Cannot call a class as a function");
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function _defineProperties(target, props) {
|
|
32
|
-
for (var i = 0; i < props.length; i++) {
|
|
33
|
-
var descriptor = props[i];
|
|
34
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
35
|
-
descriptor.configurable = true;
|
|
36
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
37
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
42
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
43
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
44
|
-
return Constructor;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function _defineProperty(obj, key, value) {
|
|
48
|
-
if (key in obj) {
|
|
49
|
-
Object.defineProperty(obj, key, {
|
|
50
|
-
value: value,
|
|
51
|
-
enumerable: true,
|
|
52
|
-
configurable: true,
|
|
53
|
-
writable: true
|
|
54
|
-
});
|
|
55
|
-
} else {
|
|
56
|
-
obj[key] = value;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return obj;
|
|
9
|
+
function _arrayLikeToArray(r, a) {
|
|
10
|
+
(null == a || a > r.length) && (a = r.length);
|
|
11
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
12
|
+
return n;
|
|
60
13
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
var keys = Object.keys(object);
|
|
64
|
-
|
|
65
|
-
if (Object.getOwnPropertySymbols) {
|
|
66
|
-
var symbols = Object.getOwnPropertySymbols(object);
|
|
67
|
-
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
|
68
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
69
|
-
});
|
|
70
|
-
keys.push.apply(keys, symbols);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return keys;
|
|
14
|
+
function _classCallCheck(a, n) {
|
|
15
|
+
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
74
16
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (i % 2) {
|
|
81
|
-
ownKeys(Object(source), true).forEach(function (key) {
|
|
82
|
-
_defineProperty(target, key, source[key]);
|
|
83
|
-
});
|
|
84
|
-
} else if (Object.getOwnPropertyDescriptors) {
|
|
85
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
86
|
-
} else {
|
|
87
|
-
ownKeys(Object(source)).forEach(function (key) {
|
|
88
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
89
|
-
});
|
|
90
|
-
}
|
|
17
|
+
function _defineProperties(e, r) {
|
|
18
|
+
for (var t = 0; t < r.length; t++) {
|
|
19
|
+
var o = r[t];
|
|
20
|
+
o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
|
|
91
21
|
}
|
|
92
|
-
|
|
93
|
-
return target;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function _unsupportedIterableToArray(o, minLen) {
|
|
97
|
-
if (!o) return;
|
|
98
|
-
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
99
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
100
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
101
|
-
if (n === "Map" || n === "Set") return Array.from(o);
|
|
102
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
103
22
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
109
|
-
|
|
110
|
-
return arr2;
|
|
23
|
+
function _createClass(e, r, t) {
|
|
24
|
+
return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
|
|
25
|
+
writable: false
|
|
26
|
+
}), e;
|
|
111
27
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
var i = 0;
|
|
120
|
-
|
|
121
|
-
var F = function () {};
|
|
122
|
-
|
|
28
|
+
function _createForOfIteratorHelper(r, e) {
|
|
29
|
+
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
30
|
+
if (!t) {
|
|
31
|
+
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {
|
|
32
|
+
t && (r = t);
|
|
33
|
+
var n = 0,
|
|
34
|
+
F = function () {};
|
|
123
35
|
return {
|
|
124
36
|
s: F,
|
|
125
37
|
n: function () {
|
|
126
|
-
|
|
38
|
+
return n >= r.length ? {
|
|
127
39
|
done: true
|
|
128
|
-
}
|
|
129
|
-
return {
|
|
40
|
+
} : {
|
|
130
41
|
done: false,
|
|
131
|
-
value:
|
|
42
|
+
value: r[n++]
|
|
132
43
|
};
|
|
133
44
|
},
|
|
134
|
-
e: function (
|
|
135
|
-
throw
|
|
45
|
+
e: function (r) {
|
|
46
|
+
throw r;
|
|
136
47
|
},
|
|
137
48
|
f: F
|
|
138
49
|
};
|
|
139
50
|
}
|
|
140
|
-
|
|
141
51
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
142
52
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
err;
|
|
53
|
+
var o,
|
|
54
|
+
a = true,
|
|
55
|
+
u = false;
|
|
147
56
|
return {
|
|
148
57
|
s: function () {
|
|
149
|
-
|
|
58
|
+
t = t.call(r);
|
|
150
59
|
},
|
|
151
60
|
n: function () {
|
|
152
|
-
var
|
|
153
|
-
|
|
154
|
-
return step;
|
|
61
|
+
var r = t.next();
|
|
62
|
+
return a = r.done, r;
|
|
155
63
|
},
|
|
156
|
-
e: function (
|
|
157
|
-
|
|
158
|
-
err = e;
|
|
64
|
+
e: function (r) {
|
|
65
|
+
u = true, o = r;
|
|
159
66
|
},
|
|
160
67
|
f: function () {
|
|
161
68
|
try {
|
|
162
|
-
|
|
69
|
+
a || null == t.return || t.return();
|
|
163
70
|
} finally {
|
|
164
|
-
if (
|
|
71
|
+
if (u) throw o;
|
|
165
72
|
}
|
|
166
73
|
}
|
|
167
74
|
};
|
|
168
75
|
}
|
|
76
|
+
function _defineProperty(e, r, t) {
|
|
77
|
+
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
78
|
+
value: t,
|
|
79
|
+
enumerable: true,
|
|
80
|
+
configurable: true,
|
|
81
|
+
writable: true
|
|
82
|
+
}) : e[r] = t, e;
|
|
83
|
+
}
|
|
84
|
+
function ownKeys(e, r) {
|
|
85
|
+
var t = Object.keys(e);
|
|
86
|
+
if (Object.getOwnPropertySymbols) {
|
|
87
|
+
var o = Object.getOwnPropertySymbols(e);
|
|
88
|
+
r && (o = o.filter(function (r) {
|
|
89
|
+
return Object.getOwnPropertyDescriptor(e, r).enumerable;
|
|
90
|
+
})), t.push.apply(t, o);
|
|
91
|
+
}
|
|
92
|
+
return t;
|
|
93
|
+
}
|
|
94
|
+
function _objectSpread2(e) {
|
|
95
|
+
for (var r = 1; r < arguments.length; r++) {
|
|
96
|
+
var t = null != arguments[r] ? arguments[r] : {};
|
|
97
|
+
r % 2 ? ownKeys(Object(t), true).forEach(function (r) {
|
|
98
|
+
_defineProperty(e, r, t[r]);
|
|
99
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
|
|
100
|
+
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return e;
|
|
104
|
+
}
|
|
105
|
+
function _toPrimitive(t, e) {
|
|
106
|
+
if ("object" != typeof t || !t) return t;
|
|
107
|
+
var r;
|
|
108
|
+
if ("undefined" != typeof Symbol && void 0 !== (r = t[Symbol.toPrimitive])) {
|
|
109
|
+
var i = r.call(t, e);
|
|
110
|
+
if ("object" != typeof i) return i;
|
|
111
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
112
|
+
}
|
|
113
|
+
return (String )(t);
|
|
114
|
+
}
|
|
115
|
+
function _toPropertyKey(t) {
|
|
116
|
+
var i = _toPrimitive(t, "string");
|
|
117
|
+
return "symbol" == typeof i ? i : i + "";
|
|
118
|
+
}
|
|
119
|
+
function _typeof(o) {
|
|
120
|
+
"@babel/helpers - typeof";
|
|
121
|
+
|
|
122
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
|
|
123
|
+
return typeof o;
|
|
124
|
+
} : function (o) {
|
|
125
|
+
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
126
|
+
}, _typeof(o);
|
|
127
|
+
}
|
|
128
|
+
function _unsupportedIterableToArray(r, a) {
|
|
129
|
+
if (r) {
|
|
130
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
131
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
132
|
+
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
169
135
|
|
|
170
136
|
var ONE_DAY = 86400;
|
|
137
|
+
var EVENT_DEFAULTS = {
|
|
138
|
+
bubbles: true,
|
|
139
|
+
cancelable: false,
|
|
140
|
+
detail: null
|
|
141
|
+
};
|
|
171
142
|
|
|
172
143
|
var roundingFunction = function roundingFunction(seconds, settings) {
|
|
144
|
+
var _settings$minTime;
|
|
173
145
|
if (seconds === null) {
|
|
174
146
|
return null;
|
|
175
147
|
}
|
|
176
148
|
|
|
149
|
+
// Steps are counted from minTime, the same way the dropdown is built.
|
|
150
|
+
// Times before minTime belong to the next day when the list wraps past
|
|
151
|
+
// midnight.
|
|
152
|
+
var start = (_settings$minTime = settings.minTime()) !== null && _settings$minTime !== void 0 ? _settings$minTime : 0;
|
|
153
|
+
if (seconds < start) {
|
|
154
|
+
seconds += ONE_DAY;
|
|
155
|
+
}
|
|
177
156
|
var i = 0;
|
|
178
|
-
var nextVal =
|
|
179
|
-
|
|
157
|
+
var nextVal = start;
|
|
180
158
|
while (nextVal < seconds) {
|
|
181
159
|
i++;
|
|
182
160
|
nextVal += settings.step(i) * 60;
|
|
183
161
|
}
|
|
184
|
-
|
|
185
162
|
var prevVal = nextVal - settings.step(i - 1) * 60;
|
|
186
|
-
|
|
187
163
|
if (seconds - prevVal < nextVal - seconds) {
|
|
188
164
|
return moduloSeconds(prevVal, settings);
|
|
189
165
|
} else {
|
|
190
166
|
return moduloSeconds(nextVal, settings);
|
|
191
167
|
}
|
|
192
168
|
};
|
|
193
|
-
|
|
194
169
|
function moduloSeconds(seconds, settings) {
|
|
195
170
|
if (seconds == ONE_DAY && settings.show2400) {
|
|
196
171
|
return seconds;
|
|
197
172
|
}
|
|
198
|
-
|
|
199
173
|
return seconds % ONE_DAY;
|
|
200
174
|
}
|
|
201
175
|
|
|
176
|
+
// The span of times the dropdown covers. minTime defaults to midnight and
|
|
177
|
+
// maxTime to 24 hours after minTime; end is pushed into the next day when the
|
|
178
|
+
// range wraps past midnight.
|
|
179
|
+
function timeWindow(settings) {
|
|
180
|
+
var _settings$minTime2, _settings$maxTime;
|
|
181
|
+
var start = (_settings$minTime2 = settings.minTime()) !== null && _settings$minTime2 !== void 0 ? _settings$minTime2 : 0;
|
|
182
|
+
var end = (_settings$maxTime = settings.maxTime()) !== null && _settings$maxTime !== void 0 ? _settings$maxTime : start + ONE_DAY - 1;
|
|
183
|
+
if (end < start) {
|
|
184
|
+
end += ONE_DAY;
|
|
185
|
+
}
|
|
186
|
+
if (end === ONE_DAY - 1 && typeof settings.timeFormat === "string" && settings.show2400) {
|
|
187
|
+
// include a 24:00 option when using military time
|
|
188
|
+
end = ONE_DAY;
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
start: start,
|
|
192
|
+
end: end
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
202
196
|
var DEFAULT_SETTINGS = {
|
|
203
197
|
appendTo: "body",
|
|
204
198
|
className: null,
|
|
@@ -239,43 +233,31 @@
|
|
|
239
233
|
hrs: "hrs"
|
|
240
234
|
};
|
|
241
235
|
|
|
242
|
-
var EVENT_DEFAULTS = {
|
|
243
|
-
bubbles: true,
|
|
244
|
-
cancelable: false,
|
|
245
|
-
detail: null
|
|
246
|
-
};
|
|
247
|
-
|
|
248
236
|
var Timepicker = /*#__PURE__*/function () {
|
|
249
237
|
function Timepicker(targetEl) {
|
|
250
238
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
251
|
-
|
|
252
239
|
_classCallCheck(this, Timepicker);
|
|
253
|
-
|
|
254
240
|
this._handleFormatValue = this._handleFormatValue.bind(this);
|
|
255
241
|
this._handleKeyUp = this._handleKeyUp.bind(this);
|
|
256
242
|
this.targetEl = targetEl;
|
|
257
243
|
var attrOptions = Timepicker.extractAttrOptions(targetEl, Object.keys(DEFAULT_SETTINGS));
|
|
258
244
|
this.settings = this.parseSettings(_objectSpread2(_objectSpread2(_objectSpread2({}, DEFAULT_SETTINGS), options), attrOptions));
|
|
259
245
|
}
|
|
260
|
-
|
|
261
|
-
_createClass(Timepicker, [{
|
|
246
|
+
return _createClass(Timepicker, [{
|
|
262
247
|
key: "hideMe",
|
|
263
248
|
value: function hideMe() {
|
|
264
249
|
if (this.settings.useSelect) {
|
|
265
250
|
this.targetEl.blur();
|
|
266
251
|
return;
|
|
267
252
|
}
|
|
268
|
-
|
|
269
253
|
if (!this.list || !Timepicker.isVisible(this.list)) {
|
|
270
254
|
return;
|
|
271
255
|
}
|
|
272
|
-
|
|
273
256
|
if (this.settings.selectOnBlur) {
|
|
274
257
|
this._selectValue();
|
|
275
258
|
}
|
|
276
|
-
|
|
277
259
|
this.list.hide();
|
|
278
|
-
var hideTimepickerEvent = new CustomEvent(
|
|
260
|
+
var hideTimepickerEvent = new CustomEvent("hideTimepicker", EVENT_DEFAULTS);
|
|
279
261
|
this.targetEl.dispatchEvent(hideTimepickerEvent);
|
|
280
262
|
}
|
|
281
263
|
}, {
|
|
@@ -284,21 +266,16 @@
|
|
|
284
266
|
if (!value && value !== 0) {
|
|
285
267
|
return false;
|
|
286
268
|
}
|
|
287
|
-
|
|
288
269
|
var out = false;
|
|
289
270
|
var value = this.settings.roundingFunction(value, this.settings);
|
|
290
|
-
|
|
291
271
|
if (!this.list) {
|
|
292
272
|
return false;
|
|
293
273
|
}
|
|
294
|
-
|
|
295
274
|
this.list.find("li").each(function (i, obj) {
|
|
296
275
|
var parsed = parseInt(obj.dataset.time);
|
|
297
|
-
|
|
298
276
|
if (isNaN(parsed)) {
|
|
299
277
|
return;
|
|
300
278
|
}
|
|
301
|
-
|
|
302
279
|
if (parsed == value) {
|
|
303
280
|
out = obj;
|
|
304
281
|
return false;
|
|
@@ -318,24 +295,19 @@
|
|
|
318
295
|
if (value !== null || this.targetEl.value != "") {
|
|
319
296
|
this.targetEl.value = value;
|
|
320
297
|
}
|
|
321
|
-
|
|
322
298
|
var tp = this;
|
|
323
299
|
var settings = tp.settings;
|
|
324
|
-
|
|
325
300
|
if (settings.useSelect && source != "select" && tp.list) {
|
|
326
|
-
tp.list.val(
|
|
301
|
+
tp.list.val(settings.roundingFunction(tp.anytime2int(value), settings));
|
|
327
302
|
}
|
|
328
303
|
}
|
|
329
|
-
|
|
330
|
-
var selectTimeEvent = new CustomEvent('selectTime', EVENT_DEFAULTS);
|
|
331
|
-
|
|
304
|
+
var selectTimeEvent = new CustomEvent("selectTime", EVENT_DEFAULTS);
|
|
332
305
|
if (this.selectedValue != value) {
|
|
333
306
|
this.selectedValue = value;
|
|
334
|
-
var changeTimeEvent = new CustomEvent(
|
|
335
|
-
var changeEvent = new CustomEvent(
|
|
336
|
-
detail:
|
|
307
|
+
var changeTimeEvent = new CustomEvent("changeTime", EVENT_DEFAULTS);
|
|
308
|
+
var changeEvent = new CustomEvent("change", Object.assign(EVENT_DEFAULTS, {
|
|
309
|
+
detail: "timepicker"
|
|
337
310
|
}));
|
|
338
|
-
|
|
339
311
|
if (source == "select") {
|
|
340
312
|
this.targetEl.dispatchEvent(selectTimeEvent);
|
|
341
313
|
this.targetEl.dispatchEvent(changeTimeEvent);
|
|
@@ -343,13 +315,11 @@
|
|
|
343
315
|
} else if (["error", "initial"].indexOf(source) == -1) {
|
|
344
316
|
this.targetEl.dispatchEvent(changeTimeEvent);
|
|
345
317
|
}
|
|
346
|
-
|
|
347
318
|
return true;
|
|
348
319
|
} else {
|
|
349
320
|
if (["error", "initial"].indexOf(source) == -1) {
|
|
350
321
|
this.targetEl.dispatchEvent(selectTimeEvent);
|
|
351
322
|
}
|
|
352
|
-
|
|
353
323
|
return false;
|
|
354
324
|
}
|
|
355
325
|
}
|
|
@@ -370,45 +340,39 @@
|
|
|
370
340
|
tp.settings;
|
|
371
341
|
var list = tp.list;
|
|
372
342
|
var cursor = list.find(".ui-timepicker-selected");
|
|
373
|
-
|
|
374
343
|
if (cursor.hasClass("ui-timepicker-disabled")) {
|
|
375
344
|
return false;
|
|
376
345
|
}
|
|
377
|
-
|
|
378
346
|
if (!cursor.length) {
|
|
379
347
|
return true;
|
|
380
348
|
}
|
|
349
|
+
var timeValue = cursor.get(0).dataset.time;
|
|
381
350
|
|
|
382
|
-
|
|
383
|
-
|
|
351
|
+
// selected value found
|
|
384
352
|
if (timeValue) {
|
|
385
353
|
var parsedTimeValue = parseInt(timeValue);
|
|
386
|
-
|
|
387
354
|
if (!isNaN(parsedTimeValue)) {
|
|
388
355
|
timeValue = parsedTimeValue;
|
|
389
356
|
}
|
|
390
357
|
}
|
|
391
|
-
|
|
392
358
|
if (timeValue !== null) {
|
|
393
359
|
if (typeof timeValue != "string") {
|
|
394
360
|
timeValue = tp._int2time(timeValue);
|
|
395
361
|
}
|
|
396
|
-
|
|
397
362
|
tp._setTimeValue(timeValue, "select");
|
|
398
363
|
}
|
|
399
|
-
|
|
400
364
|
return true;
|
|
401
365
|
}
|
|
402
366
|
}, {
|
|
403
367
|
key: "anytime2int",
|
|
404
368
|
value: function anytime2int(input) {
|
|
405
|
-
if (typeof input ===
|
|
369
|
+
if (typeof input === "number") {
|
|
406
370
|
return input;
|
|
407
|
-
} else if (typeof input ===
|
|
371
|
+
} else if (typeof input === "string") {
|
|
408
372
|
return this.time2int(input);
|
|
409
|
-
} else if (_typeof(input) ===
|
|
373
|
+
} else if (_typeof(input) === "object" && input instanceof Date) {
|
|
410
374
|
return input.getHours() * 3600 + input.getMinutes() * 60 + input.getSeconds();
|
|
411
|
-
} else if (typeof input ==
|
|
375
|
+
} else if (typeof input == "function") {
|
|
412
376
|
return input();
|
|
413
377
|
} else {
|
|
414
378
|
return null;
|
|
@@ -420,56 +384,44 @@
|
|
|
420
384
|
if (timeString === "" || timeString === null || timeString === undefined) {
|
|
421
385
|
return null;
|
|
422
386
|
}
|
|
423
|
-
|
|
424
|
-
if (timeString === 'now') {
|
|
387
|
+
if (timeString === "now") {
|
|
425
388
|
return this.anytime2int(new Date());
|
|
426
389
|
}
|
|
427
|
-
|
|
428
390
|
if (typeof timeString != "string") {
|
|
429
391
|
return timeString;
|
|
430
392
|
}
|
|
393
|
+
timeString = timeString.toLowerCase().replace(/[\s\.]/g, "");
|
|
431
394
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
if (timeString.slice(-1) == "a" || timeString.slice(-1) == "p") {
|
|
395
|
+
// if the last character is an "a" or "p", add the "m"
|
|
396
|
+
if (this.settings.lang.am === "am" && (timeString.slice(-1) == "a" || timeString.slice(-1) == "p")) {
|
|
435
397
|
timeString += "m";
|
|
436
398
|
}
|
|
437
|
-
|
|
438
399
|
var pattern = /^(([^0-9]*))?([0-9]?[0-9])(([0-5][0-9]))?(([0-5][0-9]))?(([^0-9]*))$/;
|
|
439
400
|
var hasDelimetersMatch = timeString.match(/\W/);
|
|
440
|
-
|
|
441
401
|
if (hasDelimetersMatch) {
|
|
442
402
|
pattern = /^(([^0-9]*))?([0-9]?[0-9])(\W+([0-5][0-9]?))?(\W+([0-5][0-9]))?(([^0-9]*))$/;
|
|
443
403
|
}
|
|
444
|
-
|
|
445
404
|
var time = timeString.match(pattern);
|
|
446
|
-
|
|
447
405
|
if (!time) {
|
|
448
406
|
return null;
|
|
449
407
|
}
|
|
450
|
-
|
|
451
408
|
var hour = parseInt(time[3] * 1, 10);
|
|
452
409
|
var ampm = time[2] || time[9];
|
|
453
410
|
var minutes = this.parseMinuteString(time[5]);
|
|
454
411
|
var seconds = time[7] * 1 || 0;
|
|
455
|
-
|
|
456
412
|
if (!ampm && time[3].length == 2 && time[3][0] == "0") {
|
|
457
413
|
// preceding '0' implies AM
|
|
458
414
|
ampm = "am";
|
|
459
415
|
}
|
|
460
|
-
|
|
461
416
|
if (hour > 24 && !minutes) {
|
|
462
417
|
// if someone types in something like "83", turn it into "8h 30m"
|
|
463
418
|
hour = time[3][0] * 1;
|
|
464
419
|
minutes = this.parseMinuteString(time[3][1]);
|
|
465
420
|
}
|
|
466
|
-
|
|
467
421
|
var hours = hour;
|
|
468
|
-
|
|
469
422
|
if (hour <= 12 && ampm) {
|
|
470
423
|
ampm = ampm.trim();
|
|
471
424
|
var isPm = ampm == this.settings.lang.pm || ampm == this.settings.lang.PM;
|
|
472
|
-
|
|
473
425
|
if (hour == 12) {
|
|
474
426
|
hours = isPm ? 12 : 0;
|
|
475
427
|
} else {
|
|
@@ -477,26 +429,34 @@
|
|
|
477
429
|
}
|
|
478
430
|
} else {
|
|
479
431
|
var t = hour * 3600 + minutes * 60 + seconds;
|
|
480
|
-
|
|
481
432
|
if (t >= ONE_DAY + (this.settings.show2400 ? 1 : 0)) {
|
|
482
433
|
if (this.settings.wrapHours === false) {
|
|
483
434
|
return null;
|
|
484
435
|
}
|
|
485
|
-
|
|
486
436
|
hours = hour % 24;
|
|
487
437
|
}
|
|
488
438
|
}
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
if (hour < 12 && !ampm && this.settings._twelveHourTime &&
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
439
|
+
var timeInt = hours * 3600 + minutes * 60 + seconds;
|
|
440
|
+
|
|
441
|
+
// if no am/pm provided, intelligently guess based on the scrollDefault
|
|
442
|
+
if (hour < 12 && !ampm && this.settings._twelveHourTime &&
|
|
443
|
+
// scrollDefault can itself be an am/pm-less string, which would send us
|
|
444
|
+
// back into time2int; parse it literally rather than recursing forever
|
|
445
|
+
!this._resolvingScrollDefault) {
|
|
446
|
+
this._resolvingScrollDefault = true;
|
|
447
|
+
var scrollDefault;
|
|
448
|
+
try {
|
|
449
|
+
scrollDefault = this.settings.scrollDefault();
|
|
450
|
+
} finally {
|
|
451
|
+
this._resolvingScrollDefault = false;
|
|
452
|
+
}
|
|
453
|
+
if (scrollDefault) {
|
|
454
|
+
var delta = timeInt - scrollDefault;
|
|
455
|
+
if (delta < 0 && delta >= ONE_DAY / -2) {
|
|
456
|
+
timeInt = (timeInt + ONE_DAY / 2) % ONE_DAY;
|
|
457
|
+
}
|
|
497
458
|
}
|
|
498
459
|
}
|
|
499
|
-
|
|
500
460
|
return timeInt;
|
|
501
461
|
}
|
|
502
462
|
}, {
|
|
@@ -505,25 +465,21 @@
|
|
|
505
465
|
if (!minutesString) {
|
|
506
466
|
minutesString = 0;
|
|
507
467
|
}
|
|
508
|
-
|
|
509
468
|
var multiplier = 1;
|
|
510
|
-
|
|
511
469
|
if (minutesString.length == 1) {
|
|
512
470
|
multiplier = 10;
|
|
513
471
|
}
|
|
514
|
-
|
|
515
472
|
return parseInt(minutesString) * multiplier || 0;
|
|
516
473
|
}
|
|
517
474
|
}, {
|
|
518
475
|
key: "intStringDateOrFunc2func",
|
|
519
476
|
value: function intStringDateOrFunc2func(input) {
|
|
520
477
|
var _this = this;
|
|
521
|
-
|
|
522
478
|
if (input === null || input === undefined) {
|
|
523
479
|
return function () {
|
|
524
480
|
return null;
|
|
525
481
|
};
|
|
526
|
-
} else if (typeof input ===
|
|
482
|
+
} else if (typeof input === "function") {
|
|
527
483
|
return function () {
|
|
528
484
|
return _this.anytime2int(input());
|
|
529
485
|
};
|
|
@@ -536,47 +492,38 @@
|
|
|
536
492
|
}, {
|
|
537
493
|
key: "parseSettings",
|
|
538
494
|
value: function parseSettings(settings) {
|
|
539
|
-
settings.lang = _objectSpread2(_objectSpread2({}, DEFAULT_LANG), settings.lang);
|
|
540
|
-
// todo: unwind circular dependency on lang
|
|
495
|
+
settings.lang = _objectSpread2(_objectSpread2({}, DEFAULT_LANG), settings.lang);
|
|
541
496
|
|
|
497
|
+
// lang is used by other functions the rest of this depends on
|
|
498
|
+
// todo: unwind circular dependency on lang
|
|
542
499
|
this.settings = settings;
|
|
543
|
-
|
|
544
500
|
if (settings.listWidth) {
|
|
545
501
|
settings.listWidth = this.anytime2int(settings.listWidth);
|
|
546
502
|
}
|
|
547
|
-
|
|
548
503
|
settings.minTime = this.intStringDateOrFunc2func(settings.minTime);
|
|
549
504
|
settings.maxTime = this.intStringDateOrFunc2func(settings.maxTime);
|
|
550
505
|
settings.durationTime = this.intStringDateOrFunc2func(settings.durationTime);
|
|
551
|
-
|
|
552
506
|
if (settings.scrollDefault) {
|
|
553
507
|
settings.scrollDefault = this.intStringDateOrFunc2func(settings.scrollDefault);
|
|
554
508
|
} else {
|
|
555
509
|
settings.scrollDefault = settings.minTime;
|
|
556
510
|
}
|
|
557
|
-
|
|
558
511
|
if (typeof settings.timeFormat === "string" && settings.timeFormat.match(/[gh]/)) {
|
|
559
512
|
settings._twelveHourTime = true;
|
|
560
513
|
}
|
|
561
|
-
|
|
562
|
-
if (typeof settings.step != 'function') {
|
|
514
|
+
if (typeof settings.step != "function") {
|
|
563
515
|
var curryStep = settings.step;
|
|
564
|
-
|
|
565
516
|
settings.step = function () {
|
|
566
517
|
return curryStep;
|
|
567
518
|
};
|
|
568
519
|
}
|
|
569
|
-
|
|
570
520
|
settings.disableTimeRanges = this._parseDisableTimeRanges(settings.disableTimeRanges);
|
|
571
|
-
|
|
572
521
|
if (settings.closeOnWindowScroll && !settings.closeOnScroll) {
|
|
573
522
|
settings.closeOnScroll = settings.closeOnWindowScroll;
|
|
574
523
|
}
|
|
575
|
-
|
|
576
524
|
if (settings.closeOnScroll === true) {
|
|
577
525
|
settings.closeOnScroll = window.document;
|
|
578
526
|
}
|
|
579
|
-
|
|
580
527
|
return settings;
|
|
581
528
|
}
|
|
582
529
|
}, {
|
|
@@ -584,41 +531,39 @@
|
|
|
584
531
|
value: function _parseDisableTimeRanges(disableTimeRanges) {
|
|
585
532
|
if (!disableTimeRanges || disableTimeRanges.length == 0) {
|
|
586
533
|
return [];
|
|
587
|
-
}
|
|
588
|
-
|
|
534
|
+
}
|
|
589
535
|
|
|
536
|
+
// convert string times to integers
|
|
590
537
|
for (var i in disableTimeRanges) {
|
|
591
538
|
disableTimeRanges[i] = [this.anytime2int(disableTimeRanges[i][0]), this.anytime2int(disableTimeRanges[i][1])];
|
|
592
|
-
}
|
|
593
|
-
|
|
539
|
+
}
|
|
594
540
|
|
|
541
|
+
// sort by starting time
|
|
595
542
|
disableTimeRanges = disableTimeRanges.sort(function (a, b) {
|
|
596
543
|
return a[0] - b[0];
|
|
597
|
-
});
|
|
544
|
+
});
|
|
598
545
|
|
|
546
|
+
// merge any overlapping ranges
|
|
599
547
|
for (var i = disableTimeRanges.length - 1; i > 0; i--) {
|
|
600
548
|
if (disableTimeRanges[i][0] <= disableTimeRanges[i - 1][1]) {
|
|
601
549
|
disableTimeRanges[i - 1] = [Math.min(disableTimeRanges[i][0], disableTimeRanges[i - 1][0]), Math.max(disableTimeRanges[i][1], disableTimeRanges[i - 1][1])];
|
|
602
550
|
disableTimeRanges.splice(i, 1);
|
|
603
551
|
}
|
|
604
552
|
}
|
|
605
|
-
|
|
606
553
|
return disableTimeRanges;
|
|
607
554
|
}
|
|
555
|
+
|
|
608
556
|
/*
|
|
609
557
|
* Filter freeform input
|
|
610
558
|
*/
|
|
611
|
-
|
|
612
559
|
}, {
|
|
613
560
|
key: "_disableTextInputHandler",
|
|
614
561
|
value: function _disableTextInputHandler(e) {
|
|
615
562
|
switch (e.keyCode) {
|
|
616
563
|
case 13: // return
|
|
617
|
-
|
|
618
564
|
case 9:
|
|
619
565
|
//tab
|
|
620
566
|
return;
|
|
621
|
-
|
|
622
567
|
default:
|
|
623
568
|
e.preventDefault();
|
|
624
569
|
}
|
|
@@ -628,31 +573,30 @@
|
|
|
628
573
|
value: function _int2duration(seconds, step) {
|
|
629
574
|
seconds = Math.abs(seconds);
|
|
630
575
|
var minutes = Math.round(seconds / 60),
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
576
|
+
duration = [],
|
|
577
|
+
hours,
|
|
578
|
+
mins;
|
|
635
579
|
if (minutes < 60) {
|
|
636
580
|
// Only show (x mins) under 1 hour
|
|
637
581
|
duration = [minutes, this.settings.lang.mins];
|
|
638
582
|
} else {
|
|
639
583
|
hours = Math.floor(minutes / 60);
|
|
640
|
-
mins = minutes % 60;
|
|
584
|
+
mins = minutes % 60;
|
|
641
585
|
|
|
586
|
+
// Show decimal notation (eg: 1.5 hrs) for 30 minute steps
|
|
642
587
|
if (step == 30 && mins == 30) {
|
|
643
588
|
hours += this.settings.lang.decimal + 5;
|
|
644
589
|
}
|
|
645
|
-
|
|
646
590
|
duration.push(hours);
|
|
647
|
-
duration.push(hours == 1 ? this.settings.lang.hr : this.settings.lang.hrs);
|
|
648
|
-
// and only if there are remainder minutes to show
|
|
591
|
+
duration.push(hours == 1 ? this.settings.lang.hr : this.settings.lang.hrs);
|
|
649
592
|
|
|
593
|
+
// Show remainder minutes notation (eg: 1 hr 15 mins) for non-30 minute steps
|
|
594
|
+
// and only if there are remainder minutes to show
|
|
650
595
|
if (step != 30 && mins) {
|
|
651
596
|
duration.push(mins);
|
|
652
597
|
duration.push(this.settings.lang.mins);
|
|
653
598
|
}
|
|
654
599
|
}
|
|
655
|
-
|
|
656
600
|
return duration.join(" ");
|
|
657
601
|
}
|
|
658
602
|
}, {
|
|
@@ -660,7 +604,6 @@
|
|
|
660
604
|
value: function _roundAndFormatTime(seconds) {
|
|
661
605
|
// console.log('_roundAndFormatTime')
|
|
662
606
|
seconds = this.settings.roundingFunction(seconds, this.settings);
|
|
663
|
-
|
|
664
607
|
if (seconds !== null) {
|
|
665
608
|
return this._int2time(seconds);
|
|
666
609
|
}
|
|
@@ -671,83 +614,65 @@
|
|
|
671
614
|
if (typeof timeInt != "number") {
|
|
672
615
|
return null;
|
|
673
616
|
}
|
|
674
|
-
|
|
675
617
|
var seconds = parseInt(timeInt % 60),
|
|
676
|
-
|
|
677
|
-
|
|
618
|
+
minutes = parseInt(timeInt / 60 % 60),
|
|
619
|
+
hours = parseInt(timeInt / (60 * 60) % 24);
|
|
678
620
|
var time = new Date(1970, 0, 2, hours, minutes, seconds, 0);
|
|
679
|
-
|
|
680
621
|
if (isNaN(time.getTime())) {
|
|
681
622
|
return null;
|
|
682
623
|
}
|
|
683
|
-
|
|
684
624
|
if (typeof this.settings.timeFormat === "function") {
|
|
685
625
|
return this.settings.timeFormat(time);
|
|
686
626
|
}
|
|
687
|
-
|
|
688
627
|
var output = "";
|
|
689
628
|
var hour, code;
|
|
690
|
-
|
|
691
629
|
for (var i = 0; i < this.settings.timeFormat.length; i++) {
|
|
692
630
|
code = this.settings.timeFormat.charAt(i);
|
|
693
|
-
|
|
694
631
|
switch (code) {
|
|
695
632
|
case "a":
|
|
696
633
|
output += time.getHours() > 11 ? this.settings.lang.pm : this.settings.lang.am;
|
|
697
634
|
break;
|
|
698
|
-
|
|
699
635
|
case "A":
|
|
700
636
|
output += time.getHours() > 11 ? this.settings.lang.PM : this.settings.lang.AM;
|
|
701
637
|
break;
|
|
702
|
-
|
|
703
638
|
case "g":
|
|
704
639
|
hour = time.getHours() % 12;
|
|
705
640
|
output += hour === 0 ? "12" : hour;
|
|
706
641
|
break;
|
|
707
|
-
|
|
708
642
|
case "G":
|
|
709
643
|
hour = time.getHours();
|
|
710
644
|
if (timeInt === ONE_DAY) hour = this.settings.show2400 ? 24 : 0;
|
|
711
645
|
output += hour;
|
|
712
646
|
break;
|
|
713
|
-
|
|
714
647
|
case "h":
|
|
715
648
|
hour = time.getHours() % 12;
|
|
716
|
-
|
|
717
649
|
if (hour !== 0 && hour < 10) {
|
|
718
650
|
hour = "0" + hour;
|
|
719
651
|
}
|
|
720
|
-
|
|
721
652
|
output += hour === 0 ? "12" : hour;
|
|
722
653
|
break;
|
|
723
|
-
|
|
724
654
|
case "H":
|
|
725
655
|
hour = time.getHours();
|
|
726
656
|
if (timeInt === ONE_DAY) hour = this.settings.show2400 ? 24 : 0;
|
|
727
657
|
output += hour > 9 ? hour : "0" + hour;
|
|
728
658
|
break;
|
|
729
|
-
|
|
730
659
|
case "i":
|
|
731
660
|
var minutes = time.getMinutes();
|
|
732
661
|
output += minutes > 9 ? minutes : "0" + minutes;
|
|
733
662
|
break;
|
|
734
|
-
|
|
735
663
|
case "s":
|
|
736
664
|
seconds = time.getSeconds();
|
|
737
665
|
output += seconds > 9 ? seconds : "0" + seconds;
|
|
738
666
|
break;
|
|
739
|
-
|
|
740
667
|
case "\\":
|
|
741
668
|
// escape character; add the next character and skip ahead
|
|
742
669
|
i++;
|
|
743
670
|
output += this.settings.timeFormat.charAt(i);
|
|
744
671
|
break;
|
|
745
|
-
|
|
746
672
|
default:
|
|
747
673
|
output += code;
|
|
748
674
|
}
|
|
749
675
|
}
|
|
750
|
-
|
|
751
676
|
return output;
|
|
752
677
|
}
|
|
753
678
|
}, {
|
|
@@ -756,27 +681,21 @@
|
|
|
756
681
|
var list = this.list;
|
|
757
682
|
list.find("li").removeClass("ui-timepicker-selected");
|
|
758
683
|
var timeValue = this.anytime2int(this._getTimeValue());
|
|
759
|
-
|
|
760
684
|
if (timeValue === null) {
|
|
761
685
|
return;
|
|
762
686
|
}
|
|
763
|
-
|
|
764
687
|
var selected = this._findRow(timeValue);
|
|
765
|
-
|
|
766
688
|
if (selected) {
|
|
767
689
|
var selectedRect = selected.getBoundingClientRect();
|
|
768
690
|
var listRect = list.get(0).getBoundingClientRect();
|
|
769
691
|
var topDelta = selectedRect.top - listRect.top;
|
|
770
|
-
|
|
771
692
|
if (topDelta + selectedRect.height > listRect.height || topDelta < 0) {
|
|
772
693
|
var newScroll = list.scrollTop() + (selectedRect.top - listRect.top) - selectedRect.height;
|
|
773
694
|
list.scrollTop(newScroll);
|
|
774
695
|
}
|
|
775
|
-
|
|
776
696
|
var parsed = parseInt(selected.dataset.time);
|
|
777
|
-
|
|
778
697
|
if (this.settings.forceRoundTime || parsed === timeValue) {
|
|
779
|
-
selected.classList.add(
|
|
698
|
+
selected.classList.add("ui-timepicker-selected");
|
|
780
699
|
}
|
|
781
700
|
}
|
|
782
701
|
}
|
|
@@ -791,7 +710,6 @@
|
|
|
791
710
|
if (e && e.detail == "timepicker") {
|
|
792
711
|
return;
|
|
793
712
|
}
|
|
794
|
-
|
|
795
713
|
this._formatValue(e);
|
|
796
714
|
}
|
|
797
715
|
}, {
|
|
@@ -799,74 +717,71 @@
|
|
|
799
717
|
value: function _formatValue(e, origin) {
|
|
800
718
|
if (this.targetEl.value === "") {
|
|
801
719
|
this._setTimeValue(null, origin);
|
|
802
|
-
|
|
803
720
|
return;
|
|
804
|
-
}
|
|
805
|
-
|
|
721
|
+
}
|
|
806
722
|
|
|
723
|
+
// IE fires change event before blur
|
|
807
724
|
if (this._isFocused(this.targetEl) && (!e || e.type != "change")) {
|
|
808
725
|
return;
|
|
809
726
|
}
|
|
810
|
-
|
|
811
727
|
var settings = this.settings;
|
|
812
728
|
var seconds = this.anytime2int(this.targetEl.value);
|
|
813
|
-
|
|
814
729
|
if (seconds === null) {
|
|
815
|
-
var timeFormatErrorEvent = new CustomEvent(
|
|
730
|
+
var timeFormatErrorEvent = new CustomEvent("timeFormatError", EVENT_DEFAULTS);
|
|
816
731
|
this.targetEl.dispatchEvent(timeFormatErrorEvent);
|
|
817
732
|
return;
|
|
818
733
|
}
|
|
819
|
-
|
|
820
|
-
var rangeError = false; // check that the time in within bounds
|
|
821
|
-
|
|
822
|
-
if (settings.minTime !== null && settings.maxTime !== null && (seconds < settings.minTime() || seconds > settings.maxTime())) {
|
|
823
|
-
rangeError = true;
|
|
824
|
-
} // check that time isn't within disabled time ranges
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
var _iterator = _createForOfIteratorHelper(settings.disableTimeRanges),
|
|
828
|
-
_step;
|
|
829
|
-
|
|
830
|
-
try {
|
|
831
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
832
|
-
var range = _step.value;
|
|
833
|
-
|
|
834
|
-
if (seconds >= range[0] && seconds < range[1]) {
|
|
835
|
-
rangeError = true;
|
|
836
|
-
break;
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
} catch (err) {
|
|
840
|
-
_iterator.e(err);
|
|
841
|
-
} finally {
|
|
842
|
-
_iterator.f();
|
|
843
|
-
}
|
|
844
|
-
|
|
734
|
+
var rangeError = this._isTimeRangeError(seconds, settings);
|
|
845
735
|
if (settings.forceRoundTime) {
|
|
846
736
|
var roundSeconds = settings.roundingFunction(seconds, settings);
|
|
847
|
-
|
|
848
737
|
if (roundSeconds != seconds) {
|
|
849
738
|
seconds = roundSeconds;
|
|
850
739
|
origin = null;
|
|
851
740
|
}
|
|
852
741
|
}
|
|
853
|
-
|
|
854
742
|
var prettyTime = this._int2time(seconds);
|
|
855
|
-
|
|
856
743
|
if (rangeError) {
|
|
857
744
|
this._setTimeValue(prettyTime);
|
|
858
|
-
|
|
859
|
-
var timeRangeErrorEvent = new CustomEvent('timeRangeError', EVENT_DEFAULTS);
|
|
745
|
+
var timeRangeErrorEvent = new CustomEvent("timeRangeError", EVENT_DEFAULTS);
|
|
860
746
|
this.targetEl.dispatchEvent(timeRangeErrorEvent);
|
|
861
747
|
} else {
|
|
862
748
|
this._setTimeValue(prettyTime, origin);
|
|
863
749
|
}
|
|
864
750
|
}
|
|
751
|
+
}, {
|
|
752
|
+
key: "_isTimeRangeError",
|
|
753
|
+
value: function _isTimeRangeError(seconds, settings) {
|
|
754
|
+
// check that the time is within the span the dropdown covers. Times
|
|
755
|
+
// before the start belong to the next day.
|
|
756
|
+
var _timeWindow = timeWindow(settings),
|
|
757
|
+
start = _timeWindow.start,
|
|
758
|
+
end = _timeWindow.end;
|
|
759
|
+
var offset = seconds < start ? seconds + ONE_DAY : seconds;
|
|
760
|
+
if (offset > end) {
|
|
761
|
+
return true;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
// check that time isn't within disabled time ranges
|
|
765
|
+
var _iterator = _createForOfIteratorHelper(settings.disableTimeRanges),
|
|
766
|
+
_step;
|
|
767
|
+
try {
|
|
768
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
769
|
+
var range = _step.value;
|
|
770
|
+
if (seconds >= range[0] && seconds < range[1]) {
|
|
771
|
+
return true;
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
} catch (err) {
|
|
775
|
+
_iterator.e(err);
|
|
776
|
+
} finally {
|
|
777
|
+
_iterator.f();
|
|
778
|
+
}
|
|
779
|
+
return false;
|
|
780
|
+
}
|
|
865
781
|
}, {
|
|
866
782
|
key: "_generateNoneElement",
|
|
867
783
|
value: function _generateNoneElement(optionValue, useSelect) {
|
|
868
784
|
var label, className, value;
|
|
869
|
-
|
|
870
785
|
if (_typeof(optionValue) == "object") {
|
|
871
786
|
label = optionValue.label;
|
|
872
787
|
className = optionValue.className;
|
|
@@ -877,9 +792,7 @@
|
|
|
877
792
|
} else {
|
|
878
793
|
$.error("Invalid noneOption value");
|
|
879
794
|
}
|
|
880
|
-
|
|
881
795
|
var el;
|
|
882
|
-
|
|
883
796
|
if (useSelect) {
|
|
884
797
|
el = document.createElement("option");
|
|
885
798
|
el.value = value;
|
|
@@ -887,24 +800,21 @@
|
|
|
887
800
|
el = document.createElement("li");
|
|
888
801
|
el.dataset.time = String(value);
|
|
889
802
|
}
|
|
890
|
-
|
|
891
803
|
el.innerText = label;
|
|
892
804
|
el.classList.add(className);
|
|
893
805
|
return el;
|
|
894
806
|
}
|
|
807
|
+
|
|
895
808
|
/*
|
|
896
809
|
* Time typeahead
|
|
897
810
|
*/
|
|
898
|
-
|
|
899
811
|
}, {
|
|
900
812
|
key: "_handleKeyUp",
|
|
901
813
|
value: function _handleKeyUp(e) {
|
|
902
814
|
var _this2 = this;
|
|
903
|
-
|
|
904
815
|
if (!this.list || !Timepicker.isVisible(this.list) || this.settings.disableTextInput) {
|
|
905
816
|
return true;
|
|
906
817
|
}
|
|
907
|
-
|
|
908
818
|
if (e.type === "paste" || e.type === "cut") {
|
|
909
819
|
var handler = function handler() {
|
|
910
820
|
if (_this2.settings.typeaheadHighlight) {
|
|
@@ -913,14 +823,11 @@
|
|
|
913
823
|
_this2.list.hide();
|
|
914
824
|
}
|
|
915
825
|
};
|
|
916
|
-
|
|
917
826
|
setTimeout(handler, 0);
|
|
918
827
|
return;
|
|
919
828
|
}
|
|
920
|
-
|
|
921
829
|
switch (e.keyCode) {
|
|
922
830
|
case 96: // numpad numerals
|
|
923
|
-
|
|
924
831
|
case 97:
|
|
925
832
|
case 98:
|
|
926
833
|
case 99:
|
|
@@ -931,7 +838,6 @@
|
|
|
931
838
|
case 104:
|
|
932
839
|
case 105:
|
|
933
840
|
case 48: // numerals
|
|
934
|
-
|
|
935
841
|
case 49:
|
|
936
842
|
case 50:
|
|
937
843
|
case 51:
|
|
@@ -942,15 +848,10 @@
|
|
|
942
848
|
case 56:
|
|
943
849
|
case 57:
|
|
944
850
|
case 65: // a
|
|
945
|
-
|
|
946
851
|
case 77: // m
|
|
947
|
-
|
|
948
852
|
case 80: // p
|
|
949
|
-
|
|
950
853
|
case 186: // colon
|
|
951
|
-
|
|
952
854
|
case 8: // backspace
|
|
953
|
-
|
|
954
855
|
case 46:
|
|
955
856
|
// delete
|
|
956
857
|
if (this.settings.typeaheadHighlight) {
|
|
@@ -958,7 +859,6 @@
|
|
|
958
859
|
} else {
|
|
959
860
|
this.list.hide();
|
|
960
861
|
}
|
|
961
|
-
|
|
962
862
|
break;
|
|
963
863
|
}
|
|
964
864
|
}
|
|
@@ -966,14 +866,11 @@
|
|
|
966
866
|
key: "extractAttrOptions",
|
|
967
867
|
value: function extractAttrOptions(element, keys) {
|
|
968
868
|
var output = {};
|
|
969
|
-
|
|
970
869
|
var _iterator2 = _createForOfIteratorHelper(keys),
|
|
971
|
-
|
|
972
|
-
|
|
870
|
+
_step2;
|
|
973
871
|
try {
|
|
974
872
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
975
873
|
var key = _step2.value;
|
|
976
|
-
|
|
977
874
|
if (key in element.dataset) {
|
|
978
875
|
output[key] = element.dataset[key];
|
|
979
876
|
}
|
|
@@ -983,7 +880,6 @@
|
|
|
983
880
|
} finally {
|
|
984
881
|
_iterator2.f();
|
|
985
882
|
}
|
|
986
|
-
|
|
987
883
|
return output;
|
|
988
884
|
}
|
|
989
885
|
}, {
|
|
@@ -995,14 +891,12 @@
|
|
|
995
891
|
}, {
|
|
996
892
|
key: "hideAll",
|
|
997
893
|
value: function hideAll() {
|
|
998
|
-
var _iterator3 = _createForOfIteratorHelper(document.getElementsByClassName(
|
|
999
|
-
|
|
1000
|
-
|
|
894
|
+
var _iterator3 = _createForOfIteratorHelper(document.getElementsByClassName("ui-timepicker-input")),
|
|
895
|
+
_step3;
|
|
1001
896
|
try {
|
|
1002
897
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
1003
898
|
var el = _step3.value;
|
|
1004
899
|
var tp = el.timepickerObj;
|
|
1005
|
-
|
|
1006
900
|
if (tp) {
|
|
1007
901
|
tp.hideMe();
|
|
1008
902
|
}
|
|
@@ -1014,25 +908,18 @@
|
|
|
1014
908
|
}
|
|
1015
909
|
}
|
|
1016
910
|
}]);
|
|
1017
|
-
|
|
1018
|
-
return Timepicker;
|
|
1019
911
|
}(); // IE9-11 polyfill for CustomEvent
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
912
|
(function () {
|
|
1023
913
|
if (typeof window.CustomEvent === "function") return false;
|
|
1024
|
-
|
|
1025
914
|
function CustomEvent(event, params) {
|
|
1026
915
|
if (!params) {
|
|
1027
916
|
params = {};
|
|
1028
917
|
}
|
|
1029
|
-
|
|
1030
918
|
params = Object.assign(EVENT_DEFAULTS, params);
|
|
1031
|
-
var evt = document.createEvent(
|
|
919
|
+
var evt = document.createEvent("CustomEvent");
|
|
1032
920
|
evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
|
|
1033
921
|
return evt;
|
|
1034
922
|
}
|
|
1035
|
-
|
|
1036
923
|
window.CustomEvent = CustomEvent;
|
|
1037
924
|
})();
|
|
1038
925
|
|
|
@@ -1040,90 +927,60 @@
|
|
|
1040
927
|
if (!settings.noneOption) {
|
|
1041
928
|
return [];
|
|
1042
929
|
}
|
|
1043
|
-
|
|
1044
930
|
var noneOptions = _getNoneOptionItemsHelper(settings.noneOption);
|
|
1045
|
-
|
|
1046
931
|
if (Array.isArray(settings.noneOption)) {
|
|
1047
932
|
return noneOptions;
|
|
1048
933
|
} else {
|
|
1049
934
|
return [noneOptions];
|
|
1050
935
|
}
|
|
1051
936
|
}
|
|
1052
|
-
|
|
1053
937
|
function _getNoneOptionItemsHelper(noneOption) {
|
|
1054
938
|
if (Array.isArray(noneOption)) {
|
|
1055
939
|
return noneOption.map(_getNoneOptionItemsHelper);
|
|
1056
940
|
}
|
|
1057
|
-
|
|
1058
941
|
if (noneOption === true) {
|
|
1059
942
|
return {
|
|
1060
|
-
|
|
1061
|
-
|
|
943
|
+
label: "None",
|
|
944
|
+
value: ""
|
|
1062
945
|
};
|
|
1063
946
|
}
|
|
1064
|
-
|
|
1065
|
-
if (_typeof(noneOption) === 'object') {
|
|
947
|
+
if (_typeof(noneOption) === "object") {
|
|
1066
948
|
return noneOption;
|
|
1067
949
|
}
|
|
1068
|
-
|
|
1069
950
|
return {
|
|
1070
|
-
|
|
1071
|
-
|
|
951
|
+
label: noneOption,
|
|
952
|
+
value: ""
|
|
1072
953
|
};
|
|
1073
954
|
}
|
|
1074
|
-
|
|
1075
955
|
function _getDropdownTimes(tp) {
|
|
1076
|
-
var _settings$minTime, _settings$maxTime;
|
|
1077
|
-
|
|
1078
956
|
var settings = tp.settings;
|
|
1079
|
-
var
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
if (end < start) {
|
|
1083
|
-
// make sure the end time is greater than start time, otherwise there will be no list to show
|
|
1084
|
-
end += ONE_DAY;
|
|
1085
|
-
}
|
|
1086
|
-
|
|
1087
|
-
if (end === ONE_DAY - 1 && typeof settings.timeFormat === 'string' && settings.show2400) {
|
|
1088
|
-
// show a 24:00 option when using military time
|
|
1089
|
-
end = ONE_DAY;
|
|
1090
|
-
}
|
|
1091
|
-
|
|
957
|
+
var _timeWindow = timeWindow(settings),
|
|
958
|
+
start = _timeWindow.start,
|
|
959
|
+
end = _timeWindow.end;
|
|
1092
960
|
var output = [];
|
|
1093
|
-
|
|
1094
961
|
for (var i = start, j = 0; i <= end; j++, i += settings.step(j) * 60) {
|
|
1095
962
|
var timeInt = i;
|
|
1096
|
-
|
|
1097
963
|
var timeString = tp._int2time(timeInt);
|
|
1098
|
-
|
|
1099
|
-
var className = timeInt % ONE_DAY < ONE_DAY / 2 ? 'ui-timepicker-am' : 'ui-timepicker-pm';
|
|
964
|
+
var className = timeInt % ONE_DAY < ONE_DAY / 2 ? "ui-timepicker-am" : "ui-timepicker-pm";
|
|
1100
965
|
var item = {
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
966
|
+
label: timeString,
|
|
967
|
+
value: moduloSeconds(timeInt, settings),
|
|
968
|
+
className: className
|
|
1104
969
|
};
|
|
1105
|
-
|
|
1106
970
|
if ((settings.minTime() !== null || settings.durationTime() !== null) && settings.showDuration) {
|
|
1107
971
|
var _settings$durationTim;
|
|
1108
|
-
|
|
1109
972
|
var durStart = (_settings$durationTim = settings.durationTime()) !== null && _settings$durationTim !== void 0 ? _settings$durationTim : settings.minTime();
|
|
1110
|
-
|
|
1111
973
|
if (durStart > i) {
|
|
1112
974
|
durStart -= ONE_DAY;
|
|
1113
975
|
}
|
|
1114
|
-
|
|
1115
976
|
var durationString = tp._int2duration(i - durStart, settings.step());
|
|
1116
|
-
|
|
1117
977
|
item.duration = durationString;
|
|
1118
978
|
}
|
|
1119
|
-
|
|
1120
979
|
var _iterator = _createForOfIteratorHelper(settings.disableTimeRanges),
|
|
1121
|
-
|
|
1122
|
-
|
|
980
|
+
_step;
|
|
1123
981
|
try {
|
|
1124
982
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1125
983
|
var range = _step.value;
|
|
1126
|
-
|
|
1127
984
|
if (timeInt % ONE_DAY >= range[0] && timeInt % ONE_DAY < range[1]) {
|
|
1128
985
|
item.disabled = true;
|
|
1129
986
|
break;
|
|
@@ -1134,68 +991,52 @@
|
|
|
1134
991
|
} finally {
|
|
1135
992
|
_iterator.f();
|
|
1136
993
|
}
|
|
1137
|
-
|
|
1138
994
|
output.push(item);
|
|
1139
995
|
}
|
|
1140
|
-
|
|
1141
996
|
return output;
|
|
1142
997
|
}
|
|
1143
|
-
|
|
1144
998
|
function _renderSelectItem(item) {
|
|
1145
|
-
var
|
|
1146
|
-
el
|
|
1147
|
-
|
|
999
|
+
var _item$value;
|
|
1000
|
+
var el = document.createElement("option");
|
|
1001
|
+
el.value = (_item$value = item.value) !== null && _item$value !== void 0 ? _item$value : item.label;
|
|
1148
1002
|
if (item.duration) {
|
|
1149
|
-
el.appendChild(document.createTextNode(item.label +
|
|
1003
|
+
el.appendChild(document.createTextNode(item.label + " (" + item.duration + ")"));
|
|
1150
1004
|
} else {
|
|
1151
1005
|
el.appendChild(document.createTextNode(item.label));
|
|
1152
1006
|
}
|
|
1153
|
-
|
|
1154
1007
|
if (item.disabled) {
|
|
1155
1008
|
el.disabled = true;
|
|
1156
1009
|
}
|
|
1157
|
-
|
|
1158
1010
|
return el;
|
|
1159
1011
|
}
|
|
1160
|
-
|
|
1161
1012
|
function _renderStandardItem(item) {
|
|
1162
|
-
var el = document.createElement(
|
|
1163
|
-
el.dataset[
|
|
1164
|
-
|
|
1013
|
+
var el = document.createElement("li");
|
|
1014
|
+
el.dataset["time"] = item.value;
|
|
1165
1015
|
if (item.className) {
|
|
1166
1016
|
el.classList.add(item.className);
|
|
1167
1017
|
}
|
|
1168
|
-
|
|
1169
1018
|
el.className = item.className;
|
|
1170
1019
|
el.appendChild(document.createTextNode(item.label));
|
|
1171
|
-
|
|
1172
1020
|
if (item.duration) {
|
|
1173
|
-
var durationEl = document.createElement(
|
|
1174
|
-
durationEl.appendChild(document.createTextNode(
|
|
1175
|
-
durationEl.classList.add(
|
|
1021
|
+
var durationEl = document.createElement("span");
|
|
1022
|
+
durationEl.appendChild(document.createTextNode("(" + item.duration + ")"));
|
|
1023
|
+
durationEl.classList.add("ui-timepicker-duration");
|
|
1176
1024
|
el.appendChild(durationEl);
|
|
1177
1025
|
}
|
|
1178
|
-
|
|
1179
1026
|
if (item.disabled) {
|
|
1180
|
-
el.classList.add(
|
|
1027
|
+
el.classList.add("ui-timepicker-disabled");
|
|
1181
1028
|
}
|
|
1182
|
-
|
|
1183
1029
|
return el;
|
|
1184
1030
|
}
|
|
1185
|
-
|
|
1186
1031
|
function _renderStandardList(items) {
|
|
1187
|
-
var list = document.createElement(
|
|
1188
|
-
list.classList.add(
|
|
1189
|
-
|
|
1032
|
+
var list = document.createElement("ul");
|
|
1033
|
+
list.classList.add("ui-timepicker-list");
|
|
1190
1034
|
var _iterator2 = _createForOfIteratorHelper(items),
|
|
1191
|
-
|
|
1192
|
-
|
|
1035
|
+
_step2;
|
|
1193
1036
|
try {
|
|
1194
1037
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
1195
1038
|
var item = _step2.value;
|
|
1196
|
-
|
|
1197
1039
|
var itemEl = _renderStandardItem(item);
|
|
1198
|
-
|
|
1199
1040
|
list.appendChild(itemEl);
|
|
1200
1041
|
}
|
|
1201
1042
|
} catch (err) {
|
|
@@ -1203,33 +1044,26 @@
|
|
|
1203
1044
|
} finally {
|
|
1204
1045
|
_iterator2.f();
|
|
1205
1046
|
}
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
wrapper.classList.add('ui-timepicker-wrapper');
|
|
1047
|
+
var wrapper = document.createElement("div");
|
|
1048
|
+
wrapper.classList.add("ui-timepicker-wrapper");
|
|
1209
1049
|
wrapper.tabIndex = -1;
|
|
1210
|
-
wrapper.style.display =
|
|
1211
|
-
wrapper.style.position =
|
|
1050
|
+
wrapper.style.display = "none";
|
|
1051
|
+
wrapper.style.position = "absolute";
|
|
1212
1052
|
wrapper.appendChild(list);
|
|
1213
1053
|
return wrapper;
|
|
1214
1054
|
}
|
|
1215
|
-
|
|
1216
1055
|
function _renderSelectList(items, targetName) {
|
|
1217
|
-
var el = document.createElement(
|
|
1218
|
-
el.classList.add(
|
|
1219
|
-
|
|
1056
|
+
var el = document.createElement("select");
|
|
1057
|
+
el.classList.add("ui-timepicker-select");
|
|
1220
1058
|
if (targetName) {
|
|
1221
|
-
el.name =
|
|
1059
|
+
el.name = "ui-timepicker-" + targetName;
|
|
1222
1060
|
}
|
|
1223
|
-
|
|
1224
1061
|
var _iterator3 = _createForOfIteratorHelper(items),
|
|
1225
|
-
|
|
1226
|
-
|
|
1062
|
+
_step3;
|
|
1227
1063
|
try {
|
|
1228
1064
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
1229
1065
|
var item = _step3.value;
|
|
1230
|
-
|
|
1231
1066
|
var itemEl = _renderSelectItem(item);
|
|
1232
|
-
|
|
1233
1067
|
el.appendChild(itemEl);
|
|
1234
1068
|
}
|
|
1235
1069
|
} catch (err) {
|
|
@@ -1237,24 +1071,19 @@
|
|
|
1237
1071
|
} finally {
|
|
1238
1072
|
_iterator3.f();
|
|
1239
1073
|
}
|
|
1240
|
-
|
|
1241
1074
|
return el;
|
|
1242
1075
|
}
|
|
1243
|
-
|
|
1244
1076
|
function renderHtml(tp) {
|
|
1245
1077
|
var items = [].concat(_getNoneOptionItems(tp.settings), _getDropdownTimes(tp));
|
|
1246
1078
|
var el;
|
|
1247
|
-
|
|
1248
1079
|
if (tp.settings.useSelect) {
|
|
1249
1080
|
el = _renderSelectList(items, tp.targetEl.name);
|
|
1250
1081
|
} else {
|
|
1251
1082
|
el = _renderStandardList(items);
|
|
1252
1083
|
}
|
|
1253
|
-
|
|
1254
1084
|
if (tp.settings.className) {
|
|
1255
|
-
var _iterator4 = _createForOfIteratorHelper(tp.settings.className.split(
|
|
1256
|
-
|
|
1257
|
-
|
|
1085
|
+
var _iterator4 = _createForOfIteratorHelper(tp.settings.className.split(" ")),
|
|
1086
|
+
_step4;
|
|
1258
1087
|
try {
|
|
1259
1088
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
1260
1089
|
var token = _step4.value;
|
|
@@ -1266,12 +1095,10 @@
|
|
|
1266
1095
|
_iterator4.f();
|
|
1267
1096
|
}
|
|
1268
1097
|
}
|
|
1269
|
-
|
|
1270
1098
|
if (tp.settings.showDuration && (tp.settings.minTime !== null || tp.settings.durationTime !== null)) {
|
|
1271
1099
|
el.classList.add("ui-timepicker-with-duration");
|
|
1272
1100
|
el.classList.add("ui-timepicker-step-" + tp.settings.step());
|
|
1273
1101
|
}
|
|
1274
|
-
|
|
1275
1102
|
return el;
|
|
1276
1103
|
}
|
|
1277
1104
|
|
|
@@ -1296,29 +1123,23 @@
|
|
|
1296
1123
|
settings.lang;
|
|
1297
1124
|
this.timepickerObj = tp;
|
|
1298
1125
|
self.addClass("ui-timepicker-input");
|
|
1299
|
-
|
|
1300
1126
|
if (settings.useSelect) {
|
|
1301
1127
|
_render(self);
|
|
1302
1128
|
} else {
|
|
1303
1129
|
self.prop("autocomplete", "off");
|
|
1304
|
-
|
|
1305
1130
|
if (settings.showOn) {
|
|
1306
1131
|
for (var i in settings.showOn) {
|
|
1307
1132
|
self.on(settings.showOn[i] + ".timepicker", methods.show);
|
|
1308
1133
|
}
|
|
1309
1134
|
}
|
|
1310
|
-
|
|
1311
1135
|
self.on("change.timepicker", tp._handleFormatValue);
|
|
1312
1136
|
self.on("keydown.timepicker", _keydownhandler);
|
|
1313
1137
|
self.on("keyup.timepicker", tp._handleKeyUp);
|
|
1314
|
-
|
|
1315
1138
|
if (settings.disableTextInput) {
|
|
1316
1139
|
self.on("keydown.timepicker", tp._disableTextInputHandler);
|
|
1317
1140
|
}
|
|
1318
|
-
|
|
1319
1141
|
self.on("cut.timepicker", tp._handleKeyUp);
|
|
1320
1142
|
self.on("paste.timepicker", tp._handleKeyUp);
|
|
1321
|
-
|
|
1322
1143
|
tp._formatValue(null, "initial");
|
|
1323
1144
|
}
|
|
1324
1145
|
});
|
|
@@ -1327,53 +1148,44 @@
|
|
|
1327
1148
|
var self = $(this);
|
|
1328
1149
|
var tp = self[0].timepickerObj;
|
|
1329
1150
|
var settings = tp.settings;
|
|
1330
|
-
|
|
1331
1151
|
if (e) {
|
|
1332
1152
|
e.preventDefault();
|
|
1333
1153
|
}
|
|
1334
|
-
|
|
1335
1154
|
if (settings.useSelect) {
|
|
1336
|
-
tp.list.trigger(
|
|
1155
|
+
tp.list.trigger("focus");
|
|
1337
1156
|
return;
|
|
1338
1157
|
}
|
|
1339
|
-
|
|
1340
1158
|
if (tp._hideKeyboard()) {
|
|
1341
1159
|
// block the keyboard on mobile devices
|
|
1342
|
-
self.trigger(
|
|
1160
|
+
self.trigger("blur");
|
|
1343
1161
|
}
|
|
1162
|
+
var list = tp.list;
|
|
1344
1163
|
|
|
1345
|
-
|
|
1346
|
-
|
|
1164
|
+
// check if input is readonly
|
|
1347
1165
|
if (self.prop("readonly")) {
|
|
1348
1166
|
return;
|
|
1349
|
-
}
|
|
1350
|
-
|
|
1167
|
+
}
|
|
1351
1168
|
|
|
1169
|
+
// check if list needs to be rendered
|
|
1352
1170
|
_render(self);
|
|
1353
|
-
|
|
1354
1171
|
list = tp.list;
|
|
1355
|
-
|
|
1356
1172
|
if (Timepicker.isVisible(list)) {
|
|
1357
1173
|
return;
|
|
1358
1174
|
}
|
|
1359
|
-
|
|
1360
|
-
if (self.is('input')) {
|
|
1175
|
+
if (self.is("input")) {
|
|
1361
1176
|
tp.selectedValue = self.val();
|
|
1362
1177
|
}
|
|
1178
|
+
tp._setSelected();
|
|
1363
1179
|
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1180
|
+
// make sure other pickers are hidden
|
|
1367
1181
|
Timepicker.hideAll();
|
|
1368
|
-
|
|
1369
1182
|
if (typeof settings.listWidth == "number") {
|
|
1370
1183
|
list.width(self.outerWidth() * settings.listWidth);
|
|
1371
|
-
}
|
|
1372
|
-
|
|
1184
|
+
}
|
|
1373
1185
|
|
|
1186
|
+
// position the dropdown relative to the input
|
|
1374
1187
|
list.show();
|
|
1375
1188
|
var listOffset = {};
|
|
1376
|
-
|
|
1377
1189
|
if (settings.orientation.match(/r/)) {
|
|
1378
1190
|
// right-align the dropdown
|
|
1379
1191
|
listOffset.left = self.offset().left + self.outerWidth() - list.outerWidth() + parseInt(list.css("marginLeft").replace("px", ""), 10);
|
|
@@ -1384,9 +1196,7 @@
|
|
|
1384
1196
|
// center-align the dropdown
|
|
1385
1197
|
listOffset.left = self.offset().left + (self.outerWidth() - list.outerWidth()) / 2 + parseInt(list.css("marginLeft").replace("px", ""), 10);
|
|
1386
1198
|
}
|
|
1387
|
-
|
|
1388
1199
|
var verticalOrientation;
|
|
1389
|
-
|
|
1390
1200
|
if (settings.orientation.match(/t/)) {
|
|
1391
1201
|
verticalOrientation = "t";
|
|
1392
1202
|
} else if (settings.orientation.match(/b/)) {
|
|
@@ -1396,7 +1206,6 @@
|
|
|
1396
1206
|
} else {
|
|
1397
1207
|
verticalOrientation = "b";
|
|
1398
1208
|
}
|
|
1399
|
-
|
|
1400
1209
|
if (verticalOrientation == "t") {
|
|
1401
1210
|
// position the dropdown on top
|
|
1402
1211
|
list.addClass("ui-timepicker-positioned-top");
|
|
@@ -1406,60 +1215,53 @@
|
|
|
1406
1215
|
list.removeClass("ui-timepicker-positioned-top");
|
|
1407
1216
|
listOffset.top = self.offset().top + self.outerHeight() + parseInt(list.css("marginTop").replace("px", ""), 10);
|
|
1408
1217
|
}
|
|
1218
|
+
list.offset(listOffset);
|
|
1409
1219
|
|
|
1410
|
-
|
|
1411
|
-
|
|
1220
|
+
// position scrolling
|
|
1412
1221
|
var selected = list.find(".ui-timepicker-selected");
|
|
1413
|
-
|
|
1414
1222
|
if (!selected.length) {
|
|
1415
1223
|
var timeInt = tp.anytime2int(tp._getTimeValue());
|
|
1416
|
-
|
|
1417
1224
|
if (timeInt !== null) {
|
|
1418
1225
|
selected = $(tp._findRow(timeInt));
|
|
1419
1226
|
} else if (settings.scrollDefault()) {
|
|
1420
1227
|
selected = $(tp._findRow(settings.scrollDefault()));
|
|
1421
1228
|
}
|
|
1422
|
-
}
|
|
1423
|
-
|
|
1229
|
+
}
|
|
1424
1230
|
|
|
1231
|
+
// if not found or disabled, intelligently find first selectable element
|
|
1425
1232
|
if (!selected.length || selected.hasClass("ui-timepicker-disabled")) {
|
|
1426
1233
|
selected = list.find("li:not(.ui-timepicker-disabled):first");
|
|
1427
1234
|
}
|
|
1428
|
-
|
|
1429
1235
|
if (selected && selected.length) {
|
|
1430
1236
|
var topOffset = list.scrollTop() + selected.position().top - selected.outerHeight();
|
|
1431
1237
|
list.scrollTop(topOffset);
|
|
1432
1238
|
} else {
|
|
1433
1239
|
list.scrollTop(0);
|
|
1434
|
-
}
|
|
1435
|
-
|
|
1240
|
+
}
|
|
1436
1241
|
|
|
1242
|
+
// prevent scroll propagation
|
|
1437
1243
|
if (settings.stopScrollPropagation) {
|
|
1438
1244
|
$(document).on("wheel.ui-timepicker", ".ui-timepicker-wrapper", function (e) {
|
|
1439
1245
|
e.preventDefault();
|
|
1440
1246
|
var currentScroll = $(this).scrollTop();
|
|
1441
1247
|
$(this).scrollTop(currentScroll + e.originalEvent.deltaY);
|
|
1442
1248
|
});
|
|
1443
|
-
}
|
|
1444
|
-
|
|
1249
|
+
}
|
|
1445
1250
|
|
|
1251
|
+
// attach close handlers
|
|
1446
1252
|
$(document).on("mousedown.ui-timepicker", _closeHandler);
|
|
1447
|
-
window.addEventListener(
|
|
1448
|
-
|
|
1253
|
+
window.addEventListener("resize", _closeHandler);
|
|
1449
1254
|
if (settings.closeOnScroll) {
|
|
1450
1255
|
$(settings.closeOnScroll).on("scroll.ui-timepicker", _closeHandler);
|
|
1451
1256
|
}
|
|
1452
|
-
|
|
1453
1257
|
self.trigger("showTimepicker");
|
|
1454
1258
|
return this;
|
|
1455
1259
|
},
|
|
1456
1260
|
hide: function hide(e) {
|
|
1457
1261
|
var tp = this[0].timepickerObj;
|
|
1458
|
-
|
|
1459
1262
|
if (tp) {
|
|
1460
1263
|
tp.hideMe();
|
|
1461
1264
|
}
|
|
1462
|
-
|
|
1463
1265
|
Timepicker.hideAll();
|
|
1464
1266
|
return this;
|
|
1465
1267
|
},
|
|
@@ -1468,31 +1270,25 @@
|
|
|
1468
1270
|
var tp = this[0].timepickerObj;
|
|
1469
1271
|
return tp.settings[key];
|
|
1470
1272
|
}
|
|
1471
|
-
|
|
1472
1273
|
return this.each(function () {
|
|
1473
1274
|
var self = $(this);
|
|
1474
1275
|
var tp = self[0].timepickerObj;
|
|
1475
1276
|
var settings = tp.settings;
|
|
1476
1277
|
var list = tp.list;
|
|
1477
|
-
|
|
1478
1278
|
if (_typeof(key) == "object") {
|
|
1479
1279
|
settings = $.extend(settings, key);
|
|
1480
1280
|
} else if (typeof key == "string") {
|
|
1481
1281
|
settings[key] = value;
|
|
1482
1282
|
}
|
|
1483
|
-
|
|
1484
1283
|
settings = tp.parseSettings(settings);
|
|
1485
1284
|
tp.settings = settings;
|
|
1486
|
-
|
|
1487
1285
|
tp._formatValue({
|
|
1488
1286
|
type: "change"
|
|
1489
1287
|
}, "initial");
|
|
1490
|
-
|
|
1491
1288
|
if (list) {
|
|
1492
1289
|
list.remove();
|
|
1493
1290
|
tp.list = null;
|
|
1494
1291
|
}
|
|
1495
|
-
|
|
1496
1292
|
if (settings.useSelect) {
|
|
1497
1293
|
_render(self);
|
|
1498
1294
|
}
|
|
@@ -1504,24 +1300,19 @@
|
|
|
1504
1300
|
},
|
|
1505
1301
|
getTime: function getTime(relative_date) {
|
|
1506
1302
|
var tp = this[0].timepickerObj;
|
|
1507
|
-
|
|
1508
1303
|
var time_string = tp._getTimeValue();
|
|
1509
|
-
|
|
1510
1304
|
if (!time_string) {
|
|
1511
1305
|
return null;
|
|
1512
1306
|
}
|
|
1513
|
-
|
|
1514
1307
|
var offset = tp.anytime2int(time_string);
|
|
1515
|
-
|
|
1516
1308
|
if (offset === null) {
|
|
1517
1309
|
return null;
|
|
1518
1310
|
}
|
|
1519
|
-
|
|
1520
1311
|
if (!relative_date) {
|
|
1521
1312
|
relative_date = new Date();
|
|
1522
|
-
}
|
|
1523
|
-
|
|
1313
|
+
}
|
|
1524
1314
|
|
|
1315
|
+
// construct a Date from relative date, and offset's time
|
|
1525
1316
|
var time = new Date(relative_date);
|
|
1526
1317
|
time.setHours(offset / 3600);
|
|
1527
1318
|
time.setMinutes(offset % 3600 / 60);
|
|
@@ -1536,108 +1327,121 @@
|
|
|
1536
1327
|
setTime: function setTime(value) {
|
|
1537
1328
|
var tp = this[0].timepickerObj;
|
|
1538
1329
|
var settings = tp.settings;
|
|
1539
|
-
|
|
1330
|
+
var seconds = tp.anytime2int(value);
|
|
1331
|
+
if (tp._isTimeRangeError(seconds, settings)) {
|
|
1332
|
+
var timeRangeErrorEvent = new CustomEvent("timeRangeError", EVENT_DEFAULTS);
|
|
1333
|
+
tp.targetEl.dispatchEvent(timeRangeErrorEvent);
|
|
1334
|
+
}
|
|
1540
1335
|
if (settings.forceRoundTime) {
|
|
1541
|
-
var prettyTime = tp._roundAndFormatTime(
|
|
1336
|
+
var prettyTime = tp._roundAndFormatTime(seconds);
|
|
1542
1337
|
} else {
|
|
1543
|
-
var prettyTime = tp._int2time(
|
|
1338
|
+
var prettyTime = tp._int2time(seconds);
|
|
1544
1339
|
}
|
|
1545
|
-
|
|
1546
1340
|
if (value && prettyTime === null && settings.noneOption) {
|
|
1547
1341
|
prettyTime = value;
|
|
1548
1342
|
}
|
|
1549
|
-
|
|
1550
1343
|
tp._setTimeValue(prettyTime, "initial");
|
|
1551
|
-
|
|
1552
1344
|
tp._formatValue({
|
|
1553
1345
|
type: "change"
|
|
1554
1346
|
}, "initial");
|
|
1555
|
-
|
|
1556
1347
|
if (tp && tp.list) {
|
|
1557
1348
|
tp._setSelected();
|
|
1558
1349
|
}
|
|
1559
|
-
|
|
1560
1350
|
return this;
|
|
1561
1351
|
},
|
|
1562
1352
|
remove: function remove() {
|
|
1563
|
-
var self = this;
|
|
1353
|
+
var self = this;
|
|
1564
1354
|
|
|
1355
|
+
// check if this element is a timepicker
|
|
1565
1356
|
if (!self.hasClass("ui-timepicker-input")) {
|
|
1566
1357
|
return;
|
|
1567
1358
|
}
|
|
1568
|
-
|
|
1569
1359
|
var tp = self[0].timepickerObj;
|
|
1570
1360
|
var settings = tp.settings;
|
|
1571
1361
|
self.removeAttr("autocomplete", "off");
|
|
1572
1362
|
self.removeClass("ui-timepicker-input");
|
|
1573
1363
|
self.removeData("timepicker-obj");
|
|
1574
|
-
self.off(".timepicker");
|
|
1364
|
+
self.off(".timepicker");
|
|
1575
1365
|
|
|
1366
|
+
// timepicker-list won't be present unless the user has interacted with this timepicker
|
|
1576
1367
|
if (tp.list) {
|
|
1577
1368
|
tp.list.remove();
|
|
1578
1369
|
}
|
|
1579
|
-
|
|
1580
1370
|
if (settings.useSelect) {
|
|
1581
1371
|
self.show();
|
|
1582
1372
|
}
|
|
1583
|
-
|
|
1373
|
+
if (tp.requiredMoved) {
|
|
1374
|
+
self.prop("required", true);
|
|
1375
|
+
}
|
|
1584
1376
|
tp.list = null;
|
|
1585
1377
|
return this;
|
|
1586
1378
|
}
|
|
1587
|
-
};
|
|
1379
|
+
};
|
|
1380
|
+
|
|
1381
|
+
// private methods
|
|
1588
1382
|
|
|
1589
1383
|
function _render(self) {
|
|
1590
1384
|
var tp = self[0].timepickerObj;
|
|
1591
1385
|
var list = tp.list;
|
|
1592
1386
|
var settings = tp.settings;
|
|
1593
|
-
|
|
1594
1387
|
if (list && list.length) {
|
|
1595
1388
|
list.remove();
|
|
1596
1389
|
tp.list = null;
|
|
1597
1390
|
}
|
|
1598
|
-
|
|
1599
1391
|
var wrapped_list = $(renderHtml(tp));
|
|
1600
|
-
|
|
1601
1392
|
if (settings.useSelect) {
|
|
1602
1393
|
list = wrapped_list;
|
|
1603
1394
|
} else {
|
|
1604
|
-
list = wrapped_list.children(
|
|
1395
|
+
list = wrapped_list.children("ul");
|
|
1605
1396
|
}
|
|
1606
|
-
|
|
1607
1397
|
wrapped_list.data("timepicker-input", self);
|
|
1608
1398
|
tp.list = wrapped_list;
|
|
1609
|
-
|
|
1610
1399
|
if (settings.useSelect) {
|
|
1611
1400
|
if (self.val()) {
|
|
1612
|
-
list.val(
|
|
1401
|
+
list.val(settings.roundingFunction(tp.anytime2int(self.val()), settings));
|
|
1402
|
+
} else {
|
|
1403
|
+
// don't let the browser default to the first time; this selects a
|
|
1404
|
+
// noneOption with an empty value, or nothing if there isn't one
|
|
1405
|
+
list.val("");
|
|
1613
1406
|
}
|
|
1614
|
-
|
|
1615
1407
|
list.on("focus", function () {
|
|
1616
1408
|
$(this).data("timepicker-input").trigger("showTimepicker");
|
|
1617
1409
|
});
|
|
1618
1410
|
list.on("blur", function () {
|
|
1619
1411
|
$(this).data("timepicker-input").trigger("hideTimepicker");
|
|
1620
1412
|
});
|
|
1413
|
+
// time options hold seconds; noneOption values pass through as-is
|
|
1414
|
+
var selectedTime = function selectedTime() {
|
|
1415
|
+
var value = list.val();
|
|
1416
|
+
var seconds = parseInt(value);
|
|
1417
|
+
return isNaN(seconds) ? value : tp._int2time(seconds);
|
|
1418
|
+
};
|
|
1621
1419
|
list.on("change", function () {
|
|
1622
|
-
tp._setTimeValue(
|
|
1420
|
+
tp._setTimeValue(selectedTime(), "select");
|
|
1623
1421
|
});
|
|
1624
1422
|
|
|
1625
|
-
|
|
1423
|
+
// the input gets hidden, and a hidden required field blocks
|
|
1424
|
+
// submission without showing an error, so the select takes it over
|
|
1425
|
+
if (self.prop("required")) {
|
|
1426
|
+
tp.requiredMoved = true;
|
|
1427
|
+
self.prop("required", false);
|
|
1428
|
+
}
|
|
1429
|
+
list.prop("required", !!tp.requiredMoved);
|
|
1626
1430
|
|
|
1431
|
+
// a value that isn't in the list leaves the select blank; keep the
|
|
1432
|
+
// input's value instead of overwriting it with nothing
|
|
1433
|
+
var initialTime = list.val() === null ? self.val() : selectedTime();
|
|
1434
|
+
tp._setTimeValue(initialTime, "initial");
|
|
1627
1435
|
self.hide().after(list);
|
|
1628
1436
|
} else {
|
|
1629
1437
|
var appendTo = settings.appendTo;
|
|
1630
|
-
|
|
1631
1438
|
if (typeof appendTo === "string") {
|
|
1632
1439
|
appendTo = $(appendTo);
|
|
1633
1440
|
} else if (typeof appendTo === "function") {
|
|
1634
1441
|
appendTo = appendTo(self);
|
|
1635
1442
|
}
|
|
1636
|
-
|
|
1637
1443
|
appendTo.append(wrapped_list);
|
|
1638
|
-
|
|
1639
1444
|
tp._setSelected();
|
|
1640
|
-
|
|
1641
1445
|
list.on("mousedown click", "li", function (e) {
|
|
1642
1446
|
// hack: temporarily disable the focus handler
|
|
1643
1447
|
// to deal with the fact that IE fires 'focus'
|
|
@@ -1647,15 +1451,13 @@
|
|
|
1647
1451
|
self.off("focus.timepicker-ie-hack");
|
|
1648
1452
|
self.on("focus.timepicker", methods.show);
|
|
1649
1453
|
});
|
|
1650
|
-
|
|
1651
1454
|
if (!tp._hideKeyboard()) {
|
|
1652
1455
|
self[0].focus();
|
|
1653
|
-
}
|
|
1654
|
-
|
|
1456
|
+
}
|
|
1655
1457
|
|
|
1458
|
+
// make sure only the clicked row is selected
|
|
1656
1459
|
list.find("li").removeClass("ui-timepicker-selected");
|
|
1657
1460
|
$(this).addClass("ui-timepicker-selected");
|
|
1658
|
-
|
|
1659
1461
|
if (tp._selectValue()) {
|
|
1660
1462
|
self.trigger("hideTimepicker");
|
|
1661
1463
|
list.on("mouseup.timepicker click.timepicker", "li", function (e) {
|
|
@@ -1665,50 +1467,43 @@
|
|
|
1665
1467
|
}
|
|
1666
1468
|
});
|
|
1667
1469
|
}
|
|
1668
|
-
}
|
|
1669
|
-
|
|
1470
|
+
}
|
|
1670
1471
|
|
|
1472
|
+
// event handler to decide whether to close timepicker
|
|
1671
1473
|
function _closeHandler(e) {
|
|
1672
|
-
if (e.type ==
|
|
1474
|
+
if (e.type == "focus" && e.target == window) {
|
|
1673
1475
|
// mobile Chrome fires focus events against window for some reason
|
|
1674
1476
|
return;
|
|
1675
1477
|
}
|
|
1676
|
-
|
|
1677
1478
|
var target = $(e.target);
|
|
1678
|
-
|
|
1679
1479
|
if (target.closest(".ui-timepicker-input").length || target.closest(".ui-timepicker-wrapper").length) {
|
|
1680
1480
|
// active timepicker was focused. ignore
|
|
1681
1481
|
return;
|
|
1682
1482
|
}
|
|
1683
|
-
|
|
1684
1483
|
Timepicker.hideAll();
|
|
1685
1484
|
$(document).off(".ui-timepicker");
|
|
1686
1485
|
$(window).off(".ui-timepicker");
|
|
1687
1486
|
}
|
|
1487
|
+
|
|
1688
1488
|
/*
|
|
1689
1489
|
* Keyboard navigation via arrow keys
|
|
1690
1490
|
*/
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
1491
|
function _keydownhandler(e) {
|
|
1694
1492
|
var self = $(this);
|
|
1695
1493
|
var tp = self[0].timepickerObj;
|
|
1696
1494
|
var list = tp.list;
|
|
1697
|
-
|
|
1698
1495
|
if (!list || !Timepicker.isVisible(list)) {
|
|
1699
1496
|
if (e.keyCode == 40) {
|
|
1700
1497
|
// show the list!
|
|
1701
1498
|
methods.show.call(self.get(0));
|
|
1702
1499
|
list = tp.list;
|
|
1703
|
-
|
|
1704
1500
|
if (!tp._hideKeyboard()) {
|
|
1705
|
-
self.trigger(
|
|
1501
|
+
self.trigger("focus");
|
|
1706
1502
|
}
|
|
1707
1503
|
} else {
|
|
1708
1504
|
return true;
|
|
1709
1505
|
}
|
|
1710
1506
|
}
|
|
1711
|
-
|
|
1712
1507
|
switch (e.keyCode) {
|
|
1713
1508
|
case 13:
|
|
1714
1509
|
// return
|
|
@@ -1716,17 +1511,13 @@
|
|
|
1716
1511
|
tp._formatValue({
|
|
1717
1512
|
type: "change"
|
|
1718
1513
|
});
|
|
1719
|
-
|
|
1720
1514
|
tp.hideMe();
|
|
1721
1515
|
}
|
|
1722
|
-
|
|
1723
1516
|
e.preventDefault();
|
|
1724
1517
|
return false;
|
|
1725
|
-
|
|
1726
1518
|
case 38:
|
|
1727
1519
|
// up
|
|
1728
1520
|
var selected = list.find(".ui-timepicker-selected");
|
|
1729
|
-
|
|
1730
1521
|
if (!selected.length) {
|
|
1731
1522
|
list.find("li").each(function (i, obj) {
|
|
1732
1523
|
if ($(obj).position().top > 0) {
|
|
@@ -1738,18 +1529,14 @@
|
|
|
1738
1529
|
} else if (!selected.is(":first-child")) {
|
|
1739
1530
|
selected.removeClass("ui-timepicker-selected");
|
|
1740
1531
|
selected.prev().addClass("ui-timepicker-selected");
|
|
1741
|
-
|
|
1742
1532
|
if (selected.prev().position().top < selected.outerHeight()) {
|
|
1743
1533
|
list.scrollTop(list.scrollTop() - selected.outerHeight());
|
|
1744
1534
|
}
|
|
1745
1535
|
}
|
|
1746
|
-
|
|
1747
1536
|
return false;
|
|
1748
|
-
|
|
1749
1537
|
case 40:
|
|
1750
1538
|
// down
|
|
1751
1539
|
selected = list.find(".ui-timepicker-selected");
|
|
1752
|
-
|
|
1753
1540
|
if (selected.length === 0) {
|
|
1754
1541
|
list.find("li").each(function (i, obj) {
|
|
1755
1542
|
if ($(obj).position().top > 0) {
|
|
@@ -1761,50 +1548,43 @@
|
|
|
1761
1548
|
} else if (!selected.is(":last-child")) {
|
|
1762
1549
|
selected.removeClass("ui-timepicker-selected");
|
|
1763
1550
|
selected.next().addClass("ui-timepicker-selected");
|
|
1764
|
-
|
|
1765
1551
|
if (selected.next().position().top + 2 * selected.outerHeight() > list.outerHeight()) {
|
|
1766
1552
|
list.scrollTop(list.scrollTop() + selected.outerHeight());
|
|
1767
1553
|
}
|
|
1768
1554
|
}
|
|
1769
|
-
|
|
1770
1555
|
return false;
|
|
1771
|
-
|
|
1772
1556
|
case 27:
|
|
1773
1557
|
// escape
|
|
1774
1558
|
list.find("li").removeClass("ui-timepicker-selected");
|
|
1775
1559
|
tp.hideMe();
|
|
1776
1560
|
break;
|
|
1777
|
-
|
|
1778
1561
|
case 9:
|
|
1779
1562
|
//tab
|
|
1780
1563
|
tp.hideMe();
|
|
1781
1564
|
break;
|
|
1782
|
-
|
|
1783
1565
|
default:
|
|
1784
1566
|
return true;
|
|
1785
1567
|
}
|
|
1786
|
-
}
|
|
1787
|
-
|
|
1568
|
+
}
|
|
1788
1569
|
|
|
1570
|
+
// Plugin entry
|
|
1789
1571
|
$.fn.timepicker = function (method) {
|
|
1790
1572
|
if (!this.length) return this;
|
|
1791
|
-
|
|
1792
1573
|
if (methods[method]) {
|
|
1793
1574
|
// check if this element is a timepicker
|
|
1794
1575
|
if (!this.hasClass("ui-timepicker-input")) {
|
|
1795
1576
|
return this;
|
|
1796
1577
|
}
|
|
1797
|
-
|
|
1798
1578
|
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
|
1799
1579
|
} else if (_typeof(method) === "object" || !method) {
|
|
1800
1580
|
return methods.init.apply(this, arguments);
|
|
1801
1581
|
} else {
|
|
1802
1582
|
$.error("Method " + method + " does not exist on jQuery.timepicker");
|
|
1803
1583
|
}
|
|
1804
|
-
};
|
|
1805
|
-
|
|
1584
|
+
};
|
|
1806
1585
|
|
|
1586
|
+
// Default plugin options.
|
|
1807
1587
|
$.fn.timepicker.defaults = DEFAULT_SETTINGS;
|
|
1808
1588
|
});
|
|
1809
1589
|
|
|
1810
|
-
}()
|
|
1590
|
+
})();
|