jquery-dateandtimepicker-rails 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/assets/javascripts/jquery.datetimepicker.js +797 -1
- data/lib/jquery/dateandtimepicker/rails/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e37717df12af5ff631b367dcfb12529b360dcdeb
|
4
|
+
data.tar.gz: a46e72a9aad4d9feaa9515d5f719b449705e784c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: affded4106de249450dc97ccc88a5e9545b9bec2e21e95a585aacd7a5307b9cf3ec85469611ad9365cc3e80a190df7e150a4b21a90553fdda13e5745d86c1493
|
7
|
+
data.tar.gz: 021b9d0a6ab0e1a23de1b699d104f8f266a92d6447986cf72e04d6ebaa7091cf52a30ef3ded579b31ff9af5142d954a026d6a51486e44132615fa3d682ea3475
|
data/README.md
CHANGED
@@ -1,4 +1,580 @@
|
|
1
|
-
|
1
|
+
/*!
|
2
|
+
* @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2015
|
3
|
+
* @version 1.3.3
|
4
|
+
*
|
5
|
+
* Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.
|
6
|
+
* @see http://php.net/manual/en/function.date.php
|
7
|
+
*
|
8
|
+
* For more JQuery plugins visit http://plugins.krajee.com
|
9
|
+
* For more Yii related demos visit http://demos.krajee.com
|
10
|
+
*/
|
11
|
+
var DateFormatter;
|
12
|
+
(function () {
|
13
|
+
"use strict";
|
14
|
+
|
15
|
+
var _compare, _lpad, _extend, defaultSettings, DAY, HOUR;
|
16
|
+
DAY = 1000 * 60 * 60 * 24;
|
17
|
+
HOUR = 3600;
|
18
|
+
|
19
|
+
_compare = function (str1, str2) {
|
20
|
+
return typeof(str1) === 'string' && typeof(str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();
|
21
|
+
};
|
22
|
+
_lpad = function (value, length, char) {
|
23
|
+
var chr = char || '0', val = value.toString();
|
24
|
+
return val.length < length ? _lpad(chr + val, length) : val;
|
25
|
+
};
|
26
|
+
_extend = function (out) {
|
27
|
+
var i, obj;
|
28
|
+
out = out || {};
|
29
|
+
for (i = 1; i < arguments.length; i++) {
|
30
|
+
obj = arguments[i];
|
31
|
+
if (!obj) {
|
32
|
+
continue;
|
33
|
+
}
|
34
|
+
for (var key in obj) {
|
35
|
+
if (obj.hasOwnProperty(key)) {
|
36
|
+
if (typeof obj[key] === 'object') {
|
37
|
+
_extend(out[key], obj[key]);
|
38
|
+
} else {
|
39
|
+
out[key] = obj[key];
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
return out;
|
45
|
+
};
|
46
|
+
defaultSettings = {
|
47
|
+
dateSettings: {
|
48
|
+
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
49
|
+
daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
50
|
+
months: [
|
51
|
+
'January', 'February', 'March', 'April', 'May', 'June', 'July',
|
52
|
+
'August', 'September', 'October', 'November', 'December'
|
53
|
+
],
|
54
|
+
monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
55
|
+
meridiem: ['AM', 'PM'],
|
56
|
+
ordinal: function (number) {
|
57
|
+
var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};
|
58
|
+
return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];
|
59
|
+
}
|
60
|
+
},
|
61
|
+
separators: /[ \-+\/\.T:@]/g,
|
62
|
+
validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,
|
63
|
+
intParts: /[djwNzmnyYhHgGis]/g,
|
64
|
+
tzParts: /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
|
65
|
+
tzClip: /[^-+\dA-Z]/g
|
66
|
+
};
|
67
|
+
|
68
|
+
DateFormatter = function (options) {
|
69
|
+
var self = this, config = _extend(defaultSettings, options);
|
70
|
+
self.dateSettings = config.dateSettings;
|
71
|
+
self.separators = config.separators;
|
72
|
+
self.validParts = config.validParts;
|
73
|
+
self.intParts = config.intParts;
|
74
|
+
self.tzParts = config.tzParts;
|
75
|
+
self.tzClip = config.tzClip;
|
76
|
+
};
|
77
|
+
|
78
|
+
DateFormatter.prototype = {
|
79
|
+
constructor: DateFormatter,
|
80
|
+
parseDate: function (vDate, vFormat) {
|
81
|
+
var self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,
|
82
|
+
vSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,
|
83
|
+
out = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};
|
84
|
+
if (!vDate) {
|
85
|
+
return undefined;
|
86
|
+
}
|
87
|
+
if (vDate instanceof Date) {
|
88
|
+
return vDate;
|
89
|
+
}
|
90
|
+
if (typeof vDate === 'number') {
|
91
|
+
return new Date(vDate);
|
92
|
+
}
|
93
|
+
if (vFormat === 'U') {
|
94
|
+
i = parseInt(vDate);
|
95
|
+
return i ? new Date(i * 1000) : vDate;
|
96
|
+
}
|
97
|
+
if (typeof vDate !== 'string') {
|
98
|
+
return '';
|
99
|
+
}
|
100
|
+
vFormatParts = vFormat.match(self.validParts);
|
101
|
+
if (!vFormatParts || vFormatParts.length === 0) {
|
102
|
+
throw new Error("Invalid date format definition.");
|
103
|
+
}
|
104
|
+
vDateParts = vDate.replace(self.separators, '\0').split('\0');
|
105
|
+
for (i = 0; i < vDateParts.length; i++) {
|
106
|
+
vDatePart = vDateParts[i];
|
107
|
+
iDatePart = parseInt(vDatePart);
|
108
|
+
switch (vFormatParts[i]) {
|
109
|
+
case 'y':
|
110
|
+
case 'Y':
|
111
|
+
len = vDatePart.length;
|
112
|
+
if (len === 2) {
|
113
|
+
out.year = parseInt((iDatePart < 70 ? '20' : '19') + vDatePart);
|
114
|
+
} else if (len === 4) {
|
115
|
+
out.year = iDatePart;
|
116
|
+
}
|
117
|
+
vDateFlag = true;
|
118
|
+
break;
|
119
|
+
case 'm':
|
120
|
+
case 'n':
|
121
|
+
case 'M':
|
122
|
+
case 'F':
|
123
|
+
if (isNaN(vDatePart)) {
|
124
|
+
vMonth = vSettings.monthsShort.indexOf(vDatePart);
|
125
|
+
if (vMonth > -1) {
|
126
|
+
out.month = vMonth + 1;
|
127
|
+
}
|
128
|
+
vMonth = vSettings.months.indexOf(vDatePart);
|
129
|
+
if (vMonth > -1) {
|
130
|
+
out.month = vMonth + 1;
|
131
|
+
}
|
132
|
+
} else {
|
133
|
+
if (iDatePart >= 1 && iDatePart <= 12) {
|
134
|
+
out.month = iDatePart;
|
135
|
+
}
|
136
|
+
}
|
137
|
+
vDateFlag = true;
|
138
|
+
break;
|
139
|
+
case 'd':
|
140
|
+
case 'j':
|
141
|
+
if (iDatePart >= 1 && iDatePart <= 31) {
|
142
|
+
out.day = iDatePart;
|
143
|
+
}
|
144
|
+
vDateFlag = true;
|
145
|
+
break;
|
146
|
+
case 'g':
|
147
|
+
case 'h':
|
148
|
+
vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :
|
149
|
+
(vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1;
|
150
|
+
mer = vDateParts[vMeriIndex];
|
151
|
+
if (vMeriIndex > -1) {
|
152
|
+
vMeriOffset = _compare(mer, vSettings.meridiem[0]) ? 0 :
|
153
|
+
(_compare(mer, vSettings.meridiem[1]) ? 12 : -1);
|
154
|
+
if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset > -1) {
|
155
|
+
out.hour = iDatePart + vMeriOffset - 1;
|
156
|
+
} else if (iDatePart >= 0 && iDatePart <= 23) {
|
157
|
+
out.hour = iDatePart;
|
158
|
+
}
|
159
|
+
} else if (iDatePart >= 0 && iDatePart <= 23) {
|
160
|
+
out.hour = iDatePart;
|
161
|
+
}
|
162
|
+
vTimeFlag = true;
|
163
|
+
break;
|
164
|
+
case 'G':
|
165
|
+
case 'H':
|
166
|
+
if (iDatePart >= 0 && iDatePart <= 23) {
|
167
|
+
out.hour = iDatePart;
|
168
|
+
}
|
169
|
+
vTimeFlag = true;
|
170
|
+
break;
|
171
|
+
case 'i':
|
172
|
+
if (iDatePart >= 0 && iDatePart <= 59) {
|
173
|
+
out.min = iDatePart;
|
174
|
+
}
|
175
|
+
vTimeFlag = true;
|
176
|
+
break;
|
177
|
+
case 's':
|
178
|
+
if (iDatePart >= 0 && iDatePart <= 59) {
|
179
|
+
out.sec = iDatePart;
|
180
|
+
}
|
181
|
+
vTimeFlag = true;
|
182
|
+
break;
|
183
|
+
}
|
184
|
+
}
|
185
|
+
if (vDateFlag === true && out.year && out.month && out.day) {
|
186
|
+
out.date = new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0);
|
187
|
+
} else {
|
188
|
+
if (vTimeFlag !== true) {
|
189
|
+
return false;
|
190
|
+
}
|
191
|
+
out.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);
|
192
|
+
}
|
193
|
+
return out.date;
|
194
|
+
},
|
195
|
+
guessDate: function (vDateStr, vFormat) {
|
196
|
+
if (typeof vDateStr !== 'string') {
|
197
|
+
return vDateStr;
|
198
|
+
}
|
199
|
+
var self = this, vParts = vDateStr.replace(self.separators, '\0').split('\0'), vPattern = /^[djmn]/g,
|
200
|
+
vFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, iPart, iSec;
|
201
|
+
|
202
|
+
if (!vPattern.test(vFormatParts[0])) {
|
203
|
+
return vDateStr;
|
204
|
+
}
|
205
|
+
|
206
|
+
for (i = 0; i < vParts.length; i++) {
|
207
|
+
vDigit = 2;
|
208
|
+
iPart = vParts[i];
|
209
|
+
iSec = parseInt(iPart.substr(0, 2));
|
210
|
+
switch (i) {
|
211
|
+
case 0:
|
212
|
+
if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
|
213
|
+
vDate.setMonth(iSec - 1);
|
214
|
+
} else {
|
215
|
+
vDate.setDate(iSec);
|
216
|
+
}
|
217
|
+
break;
|
218
|
+
case 1:
|
219
|
+
if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
|
220
|
+
vDate.setDate(iSec);
|
221
|
+
} else {
|
222
|
+
vDate.setMonth(iSec - 1);
|
223
|
+
}
|
224
|
+
break;
|
225
|
+
case 2:
|
226
|
+
vYear = vDate.getFullYear();
|
227
|
+
if (iPart.length < 4) {
|
228
|
+
vDate.setFullYear(parseInt(vYear.toString().substr(0, 4 - iPart.length) + iPart));
|
229
|
+
vDigit = iPart.length;
|
230
|
+
} else {
|
231
|
+
vDate.setFullYear = parseInt(iPart.substr(0, 4));
|
232
|
+
vDigit = 4;
|
233
|
+
}
|
234
|
+
break;
|
235
|
+
case 3:
|
236
|
+
vDate.setHours(iSec);
|
237
|
+
break;
|
238
|
+
case 4:
|
239
|
+
vDate.setMinutes(iSec);
|
240
|
+
break;
|
241
|
+
case 5:
|
242
|
+
vDate.setSeconds(iSec);
|
243
|
+
break;
|
244
|
+
}
|
245
|
+
if (iPart.substr(vDigit).length > 0) {
|
246
|
+
vParts.splice(i + 1, 0, iPart.substr(vDigit));
|
247
|
+
}
|
248
|
+
}
|
249
|
+
return vDate;
|
250
|
+
},
|
251
|
+
parseFormat: function (vChar, vDate) {
|
252
|
+
var self = this, vSettings = self.dateSettings, fmt, backspace = /\\?(.?)/gi, doFormat = function (t, s) {
|
253
|
+
return fmt[t] ? fmt[t]() : s;
|
254
|
+
};
|
255
|
+
fmt = {
|
256
|
+
/////////
|
257
|
+
// DAY //
|
258
|
+
/////////
|
259
|
+
/**
|
260
|
+
* Day of month with leading 0: `01..31`
|
261
|
+
* @return {string}
|
262
|
+
*/
|
263
|
+
d: function () {
|
264
|
+
return _lpad(fmt.j(), 2);
|
265
|
+
},
|
266
|
+
/**
|
267
|
+
* Shorthand day name: `Mon...Sun`
|
268
|
+
* @return {string}
|
269
|
+
*/
|
270
|
+
D: function () {
|
271
|
+
return vSettings.daysShort[fmt.w()];
|
272
|
+
},
|
273
|
+
/**
|
274
|
+
* Day of month: `1..31`
|
275
|
+
* @return {number}
|
276
|
+
*/
|
277
|
+
j: function () {
|
278
|
+
return vDate.getDate();
|
279
|
+
},
|
280
|
+
/**
|
281
|
+
* Full day name: `Monday...Sunday`
|
282
|
+
* @return {number}
|
283
|
+
*/
|
284
|
+
l: function () {
|
285
|
+
return vSettings.days[fmt.w()];
|
286
|
+
},
|
287
|
+
/**
|
288
|
+
* ISO-8601 day of week: `1[Mon]..7[Sun]`
|
289
|
+
* @return {number}
|
290
|
+
*/
|
291
|
+
N: function () {
|
292
|
+
return fmt.w() || 7;
|
293
|
+
},
|
294
|
+
/**
|
295
|
+
* Day of week: `0[Sun]..6[Sat]`
|
296
|
+
* @return {number}
|
297
|
+
*/
|
298
|
+
w: function () {
|
299
|
+
return vDate.getDay();
|
300
|
+
},
|
301
|
+
/**
|
302
|
+
* Day of year: `0..365`
|
303
|
+
* @return {number}
|
304
|
+
*/
|
305
|
+
z: function () {
|
306
|
+
var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);
|
307
|
+
return Math.round((a - b) / DAY);
|
308
|
+
},
|
309
|
+
|
310
|
+
//////////
|
311
|
+
// WEEK //
|
312
|
+
//////////
|
313
|
+
/**
|
314
|
+
* ISO-8601 week number
|
315
|
+
* @return {number}
|
316
|
+
*/
|
317
|
+
W: function () {
|
318
|
+
var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);
|
319
|
+
return _lpad(1 + Math.round((a - b) / DAY / 7), 2);
|
320
|
+
},
|
321
|
+
|
322
|
+
///////////
|
323
|
+
// MONTH //
|
324
|
+
///////////
|
325
|
+
/**
|
326
|
+
* Full month name: `January...December`
|
327
|
+
* @return {string}
|
328
|
+
*/
|
329
|
+
F: function () {
|
330
|
+
return vSettings.months[vDate.getMonth()];
|
331
|
+
},
|
332
|
+
/**
|
333
|
+
* Month w/leading 0: `01..12`
|
334
|
+
* @return {string}
|
335
|
+
*/
|
336
|
+
m: function () {
|
337
|
+
return _lpad(fmt.n(), 2);
|
338
|
+
},
|
339
|
+
/**
|
340
|
+
* Shorthand month name; `Jan...Dec`
|
341
|
+
* @return {string}
|
342
|
+
*/
|
343
|
+
M: function () {
|
344
|
+
return vSettings.monthsShort[vDate.getMonth()];
|
345
|
+
},
|
346
|
+
/**
|
347
|
+
* Month: `1...12`
|
348
|
+
* @return {number}
|
349
|
+
*/
|
350
|
+
n: function () {
|
351
|
+
return vDate.getMonth() + 1;
|
352
|
+
},
|
353
|
+
/**
|
354
|
+
* Days in month: `28...31`
|
355
|
+
* @return {number}
|
356
|
+
*/
|
357
|
+
t: function () {
|
358
|
+
return (new Date(fmt.Y(), fmt.n(), 0)).getDate();
|
359
|
+
},
|
360
|
+
|
361
|
+
//////////
|
362
|
+
// YEAR //
|
363
|
+
//////////
|
364
|
+
/**
|
365
|
+
* Is leap year? `0 or 1`
|
366
|
+
* @return {number}
|
367
|
+
*/
|
368
|
+
L: function () {
|
369
|
+
var Y = fmt.Y();
|
370
|
+
return (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;
|
371
|
+
},
|
372
|
+
/**
|
373
|
+
* ISO-8601 year
|
374
|
+
* @return {number}
|
375
|
+
*/
|
376
|
+
o: function () {
|
377
|
+
var n = fmt.n(), W = fmt.W(), Y = fmt.Y();
|
378
|
+
return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);
|
379
|
+
},
|
380
|
+
/**
|
381
|
+
* Full year: `e.g. 1980...2010`
|
382
|
+
* @return {number}
|
383
|
+
*/
|
384
|
+
Y: function () {
|
385
|
+
return vDate.getFullYear();
|
386
|
+
},
|
387
|
+
/**
|
388
|
+
* Last two digits of year: `00...99`
|
389
|
+
* @return {string}
|
390
|
+
*/
|
391
|
+
y: function () {
|
392
|
+
return fmt.Y().toString().slice(-2);
|
393
|
+
},
|
394
|
+
|
395
|
+
//////////
|
396
|
+
// TIME //
|
397
|
+
//////////
|
398
|
+
/**
|
399
|
+
* Meridian lower: `am or pm`
|
400
|
+
* @return {string}
|
401
|
+
*/
|
402
|
+
a: function () {
|
403
|
+
return fmt.A().toLowerCase();
|
404
|
+
},
|
405
|
+
/**
|
406
|
+
* Meridian upper: `AM or PM`
|
407
|
+
* @return {string}
|
408
|
+
*/
|
409
|
+
A: function () {
|
410
|
+
var n = fmt.G() < 12 ? 0 : 1;
|
411
|
+
return vSettings.meridiem[n];
|
412
|
+
},
|
413
|
+
/**
|
414
|
+
* Swatch Internet time: `000..999`
|
415
|
+
* @return {string}
|
416
|
+
*/
|
417
|
+
B: function () {
|
418
|
+
var H = vDate.getUTCHours() * HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();
|
419
|
+
return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3);
|
420
|
+
},
|
421
|
+
/**
|
422
|
+
* 12-Hours: `1..12`
|
423
|
+
* @return {number}
|
424
|
+
*/
|
425
|
+
g: function () {
|
426
|
+
return fmt.G() % 12 || 12;
|
427
|
+
},
|
428
|
+
/**
|
429
|
+
* 24-Hours: `0..23`
|
430
|
+
* @return {number}
|
431
|
+
*/
|
432
|
+
G: function () {
|
433
|
+
return vDate.getHours();
|
434
|
+
},
|
435
|
+
/**
|
436
|
+
* 12-Hours with leading 0: `01..12`
|
437
|
+
* @return {string}
|
438
|
+
*/
|
439
|
+
h: function () {
|
440
|
+
return _lpad(fmt.g(), 2);
|
441
|
+
},
|
442
|
+
/**
|
443
|
+
* 24-Hours w/leading 0: `00..23`
|
444
|
+
* @return {string}
|
445
|
+
*/
|
446
|
+
H: function () {
|
447
|
+
return _lpad(fmt.G(), 2);
|
448
|
+
},
|
449
|
+
/**
|
450
|
+
* Minutes w/leading 0: `00..59`
|
451
|
+
* @return {string}
|
452
|
+
*/
|
453
|
+
i: function () {
|
454
|
+
return _lpad(vDate.getMinutes(), 2);
|
455
|
+
},
|
456
|
+
/**
|
457
|
+
* Seconds w/leading 0: `00..59`
|
458
|
+
* @return {string}
|
459
|
+
*/
|
460
|
+
s: function () {
|
461
|
+
return _lpad(vDate.getSeconds(), 2);
|
462
|
+
},
|
463
|
+
/**
|
464
|
+
* Microseconds: `000000-999000`
|
465
|
+
* @return {string}
|
466
|
+
*/
|
467
|
+
u: function () {
|
468
|
+
return _lpad(vDate.getMilliseconds() * 1000, 6);
|
469
|
+
},
|
470
|
+
|
471
|
+
//////////////
|
472
|
+
// TIMEZONE //
|
473
|
+
//////////////
|
474
|
+
/**
|
475
|
+
* Timezone identifier: `e.g. Atlantic/Azores, ...`
|
476
|
+
* @return {string}
|
477
|
+
*/
|
478
|
+
e: function () {
|
479
|
+
var str = /\((.*)\)/.exec(String(vDate))[1];
|
480
|
+
return str || 'Coordinated Universal Time';
|
481
|
+
},
|
482
|
+
/**
|
483
|
+
* Timezone abbreviation: `e.g. EST, MDT, ...`
|
484
|
+
* @return {string}
|
485
|
+
*/
|
486
|
+
T: function () {
|
487
|
+
var str = (String(vDate).match(self.tzParts) || [""]).pop().replace(self.tzClip, "");
|
488
|
+
return str || 'UTC';
|
489
|
+
},
|
490
|
+
/**
|
491
|
+
* DST observed? `0 or 1`
|
492
|
+
* @return {number}
|
493
|
+
*/
|
494
|
+
I: function () {
|
495
|
+
var a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),
|
496
|
+
b = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);
|
497
|
+
return ((a - c) !== (b - d)) ? 1 : 0;
|
498
|
+
},
|
499
|
+
/**
|
500
|
+
* Difference to GMT in hour format: `e.g. +0200`
|
501
|
+
* @return {string}
|
502
|
+
*/
|
503
|
+
O: function () {
|
504
|
+
var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);
|
505
|
+
return (tzo > 0 ? '-' : '+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4);
|
506
|
+
},
|
507
|
+
/**
|
508
|
+
* Difference to GMT with colon: `e.g. +02:00`
|
509
|
+
* @return {string}
|
510
|
+
*/
|
511
|
+
P: function () {
|
512
|
+
var O = fmt.O();
|
513
|
+
return (O.substr(0, 3) + ':' + O.substr(3, 2));
|
514
|
+
},
|
515
|
+
/**
|
516
|
+
* Timezone offset in seconds: `-43200...50400`
|
517
|
+
* @return {number}
|
518
|
+
*/
|
519
|
+
Z: function () {
|
520
|
+
return -vDate.getTimezoneOffset() * 60;
|
521
|
+
},
|
522
|
+
|
523
|
+
////////////////////
|
524
|
+
// FULL DATE TIME //
|
525
|
+
////////////////////
|
526
|
+
/**
|
527
|
+
* ISO-8601 date
|
528
|
+
* @return {string}
|
529
|
+
*/
|
530
|
+
c: function () {
|
531
|
+
return 'Y-m-d\\TH:i:sP'.replace(backspace, doFormat);
|
532
|
+
},
|
533
|
+
/**
|
534
|
+
* RFC 2822 date
|
535
|
+
* @return {string}
|
536
|
+
*/
|
537
|
+
r: function () {
|
538
|
+
return 'D, d M Y H:i:s O'.replace(backspace, doFormat);
|
539
|
+
},
|
540
|
+
/**
|
541
|
+
* Seconds since UNIX epoch
|
542
|
+
* @return {number}
|
543
|
+
*/
|
544
|
+
U: function () {
|
545
|
+
return vDate.getTime() / 1000 || 0;
|
546
|
+
}
|
547
|
+
};
|
548
|
+
return doFormat(vChar, vChar);
|
549
|
+
},
|
550
|
+
formatDate: function (vDate, vFormat) {
|
551
|
+
var self = this, i, n, len, str, vChar, vDateStr = '';
|
552
|
+
if (typeof vDate === 'string') {
|
553
|
+
vDate = self.parseDate(vDate, vFormat);
|
554
|
+
if (vDate === false) {
|
555
|
+
return false;
|
556
|
+
}
|
557
|
+
}
|
558
|
+
if (vDate instanceof Date) {
|
559
|
+
len = vFormat.length;
|
560
|
+
for (i = 0; i < len; i++) {
|
561
|
+
vChar = vFormat.charAt(i);
|
562
|
+
if (vChar === 'S') {
|
563
|
+
continue;
|
564
|
+
}
|
565
|
+
str = self.parseFormat(vChar, vDate);
|
566
|
+
if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {
|
567
|
+
n = parseInt(str);
|
568
|
+
str += self.dateSettings.ordinal(n);
|
569
|
+
}
|
570
|
+
vDateStr += str;
|
571
|
+
}
|
572
|
+
return vDateStr;
|
573
|
+
}
|
574
|
+
return '';
|
575
|
+
}
|
576
|
+
};
|
577
|
+
})();/**
|
2
578
|
* @preserve jQuery DateTimePicker plugin v2.5.3
|
3
579
|
* @homepage http://xdsoft.net/jqplugins/datetimepicker/
|
4
580
|
* @author Chupurnov Valeriy (<chupurnov@gmail.com>)
|
@@ -2368,3 +2944,223 @@
|
|
2368
2944
|
this.style = style;
|
2369
2945
|
}
|
2370
2946
|
}));
|
2947
|
+
/*!
|
2948
|
+
* jQuery Mousewheel 3.1.13
|
2949
|
+
*
|
2950
|
+
* Copyright jQuery Foundation and other contributors
|
2951
|
+
* Released under the MIT license
|
2952
|
+
* http://jquery.org/license
|
2953
|
+
*/
|
2954
|
+
|
2955
|
+
(function (factory) {
|
2956
|
+
if ( typeof define === 'function' && define.amd ) {
|
2957
|
+
// AMD. Register as an anonymous module.
|
2958
|
+
define(['jquery'], factory);
|
2959
|
+
} else if (typeof exports === 'object') {
|
2960
|
+
// Node/CommonJS style for Browserify
|
2961
|
+
module.exports = factory;
|
2962
|
+
} else {
|
2963
|
+
// Browser globals
|
2964
|
+
factory(jQuery);
|
2965
|
+
}
|
2966
|
+
}(function ($) {
|
2967
|
+
|
2968
|
+
var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
|
2969
|
+
toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
|
2970
|
+
['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
|
2971
|
+
slice = Array.prototype.slice,
|
2972
|
+
nullLowestDeltaTimeout, lowestDelta;
|
2973
|
+
|
2974
|
+
if ( $.event.fixHooks ) {
|
2975
|
+
for ( var i = toFix.length; i; ) {
|
2976
|
+
$.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
|
2977
|
+
}
|
2978
|
+
}
|
2979
|
+
|
2980
|
+
var special = $.event.special.mousewheel = {
|
2981
|
+
version: '3.1.12',
|
2982
|
+
|
2983
|
+
setup: function() {
|
2984
|
+
if ( this.addEventListener ) {
|
2985
|
+
for ( var i = toBind.length; i; ) {
|
2986
|
+
this.addEventListener( toBind[--i], handler, false );
|
2987
|
+
}
|
2988
|
+
} else {
|
2989
|
+
this.onmousewheel = handler;
|
2990
|
+
}
|
2991
|
+
// Store the line height and page height for this particular element
|
2992
|
+
$.data(this, 'mousewheel-line-height', special.getLineHeight(this));
|
2993
|
+
$.data(this, 'mousewheel-page-height', special.getPageHeight(this));
|
2994
|
+
},
|
2995
|
+
|
2996
|
+
teardown: function() {
|
2997
|
+
if ( this.removeEventListener ) {
|
2998
|
+
for ( var i = toBind.length; i; ) {
|
2999
|
+
this.removeEventListener( toBind[--i], handler, false );
|
3000
|
+
}
|
3001
|
+
} else {
|
3002
|
+
this.onmousewheel = null;
|
3003
|
+
}
|
3004
|
+
// Clean up the data we added to the element
|
3005
|
+
$.removeData(this, 'mousewheel-line-height');
|
3006
|
+
$.removeData(this, 'mousewheel-page-height');
|
3007
|
+
},
|
3008
|
+
|
3009
|
+
getLineHeight: function(elem) {
|
3010
|
+
var $elem = $(elem),
|
3011
|
+
$parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
|
3012
|
+
if (!$parent.length) {
|
3013
|
+
$parent = $('body');
|
3014
|
+
}
|
3015
|
+
return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
|
3016
|
+
},
|
3017
|
+
|
3018
|
+
getPageHeight: function(elem) {
|
3019
|
+
return $(elem).height();
|
3020
|
+
},
|
3021
|
+
|
3022
|
+
settings: {
|
3023
|
+
adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
|
3024
|
+
normalizeOffset: true // calls getBoundingClientRect for each event
|
3025
|
+
}
|
3026
|
+
};
|
3027
|
+
|
3028
|
+
$.fn.extend({
|
3029
|
+
mousewheel: function(fn) {
|
3030
|
+
return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
|
3031
|
+
},
|
3032
|
+
|
3033
|
+
unmousewheel: function(fn) {
|
3034
|
+
return this.unbind('mousewheel', fn);
|
3035
|
+
}
|
3036
|
+
});
|
3037
|
+
|
3038
|
+
|
3039
|
+
function handler(event) {
|
3040
|
+
var orgEvent = event || window.event,
|
3041
|
+
args = slice.call(arguments, 1),
|
3042
|
+
delta = 0,
|
3043
|
+
deltaX = 0,
|
3044
|
+
deltaY = 0,
|
3045
|
+
absDelta = 0,
|
3046
|
+
offsetX = 0,
|
3047
|
+
offsetY = 0;
|
3048
|
+
event = $.event.fix(orgEvent);
|
3049
|
+
event.type = 'mousewheel';
|
3050
|
+
|
3051
|
+
// Old school scrollwheel delta
|
3052
|
+
if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
|
3053
|
+
if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
|
3054
|
+
if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
|
3055
|
+
if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
|
3056
|
+
|
3057
|
+
// Firefox < 17 horizontal scrolling related to DOMMouseScroll event
|
3058
|
+
if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
|
3059
|
+
deltaX = deltaY * -1;
|
3060
|
+
deltaY = 0;
|
3061
|
+
}
|
3062
|
+
|
3063
|
+
// Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
|
3064
|
+
delta = deltaY === 0 ? deltaX : deltaY;
|
3065
|
+
|
3066
|
+
// New school wheel delta (wheel event)
|
3067
|
+
if ( 'deltaY' in orgEvent ) {
|
3068
|
+
deltaY = orgEvent.deltaY * -1;
|
3069
|
+
delta = deltaY;
|
3070
|
+
}
|
3071
|
+
if ( 'deltaX' in orgEvent ) {
|
3072
|
+
deltaX = orgEvent.deltaX;
|
3073
|
+
if ( deltaY === 0 ) { delta = deltaX * -1; }
|
3074
|
+
}
|
3075
|
+
|
3076
|
+
// No change actually happened, no reason to go any further
|
3077
|
+
if ( deltaY === 0 && deltaX === 0 ) { return; }
|
3078
|
+
|
3079
|
+
// Need to convert lines and pages to pixels if we aren't already in pixels
|
3080
|
+
// There are three delta modes:
|
3081
|
+
// * deltaMode 0 is by pixels, nothing to do
|
3082
|
+
// * deltaMode 1 is by lines
|
3083
|
+
// * deltaMode 2 is by pages
|
3084
|
+
if ( orgEvent.deltaMode === 1 ) {
|
3085
|
+
var lineHeight = $.data(this, 'mousewheel-line-height');
|
3086
|
+
delta *= lineHeight;
|
3087
|
+
deltaY *= lineHeight;
|
3088
|
+
deltaX *= lineHeight;
|
3089
|
+
} else if ( orgEvent.deltaMode === 2 ) {
|
3090
|
+
var pageHeight = $.data(this, 'mousewheel-page-height');
|
3091
|
+
delta *= pageHeight;
|
3092
|
+
deltaY *= pageHeight;
|
3093
|
+
deltaX *= pageHeight;
|
3094
|
+
}
|
3095
|
+
|
3096
|
+
// Store lowest absolute delta to normalize the delta values
|
3097
|
+
absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
|
3098
|
+
|
3099
|
+
if ( !lowestDelta || absDelta < lowestDelta ) {
|
3100
|
+
lowestDelta = absDelta;
|
3101
|
+
|
3102
|
+
// Adjust older deltas if necessary
|
3103
|
+
if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
|
3104
|
+
lowestDelta /= 40;
|
3105
|
+
}
|
3106
|
+
}
|
3107
|
+
|
3108
|
+
// Adjust older deltas if necessary
|
3109
|
+
if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
|
3110
|
+
// Divide all the things by 40!
|
3111
|
+
delta /= 40;
|
3112
|
+
deltaX /= 40;
|
3113
|
+
deltaY /= 40;
|
3114
|
+
}
|
3115
|
+
|
3116
|
+
// Get a whole, normalized value for the deltas
|
3117
|
+
delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
|
3118
|
+
deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
|
3119
|
+
deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
|
3120
|
+
|
3121
|
+
// Normalise offsetX and offsetY properties
|
3122
|
+
if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
|
3123
|
+
var boundingRect = this.getBoundingClientRect();
|
3124
|
+
offsetX = event.clientX - boundingRect.left;
|
3125
|
+
offsetY = event.clientY - boundingRect.top;
|
3126
|
+
}
|
3127
|
+
|
3128
|
+
// Add information to the event object
|
3129
|
+
event.deltaX = deltaX;
|
3130
|
+
event.deltaY = deltaY;
|
3131
|
+
event.deltaFactor = lowestDelta;
|
3132
|
+
event.offsetX = offsetX;
|
3133
|
+
event.offsetY = offsetY;
|
3134
|
+
// Go ahead and set deltaMode to 0 since we converted to pixels
|
3135
|
+
// Although this is a little odd since we overwrite the deltaX/Y
|
3136
|
+
// properties with normalized deltas.
|
3137
|
+
event.deltaMode = 0;
|
3138
|
+
|
3139
|
+
// Add event and delta to the front of the arguments
|
3140
|
+
args.unshift(event, delta, deltaX, deltaY);
|
3141
|
+
|
3142
|
+
// Clearout lowestDelta after sometime to better
|
3143
|
+
// handle multiple device types that give different
|
3144
|
+
// a different lowestDelta
|
3145
|
+
// Ex: trackpad = 3 and mouse wheel = 120
|
3146
|
+
if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
|
3147
|
+
nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
|
3148
|
+
|
3149
|
+
return ($.event.dispatch || $.event.handle).apply(this, args);
|
3150
|
+
}
|
3151
|
+
|
3152
|
+
function nullLowestDelta() {
|
3153
|
+
lowestDelta = null;
|
3154
|
+
}
|
3155
|
+
|
3156
|
+
function shouldAdjustOldDeltas(orgEvent, absDelta) {
|
3157
|
+
// If this is an older event and the delta is divisable by 120,
|
3158
|
+
// then we are assuming that the browser is treating this as an
|
3159
|
+
// older mouse wheel event and that we should divide the deltas
|
3160
|
+
// by 40 to try and get a more usable deltaFactor.
|
3161
|
+
// Side note, this actually impacts the reported scroll distance
|
3162
|
+
// in older browsers and can cause scrolling to be slower than native.
|
3163
|
+
// Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
|
3164
|
+
return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
|
3165
|
+
}
|
3166
|
+
}));
|