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