1 | /*
|
---|
2 | * jQuery Mobile Framework : plugin to provide a date and time picker.
|
---|
3 | * Copyright (c) JTSage
|
---|
4 | * CC 3.0 Attribution. May be relicensed without permission/notification.
|
---|
5 | * https://github.com/jtsage/jquery-mobile-datebox
|
---|
6 | */
|
---|
7 | /* CORE Functions */
|
---|
8 |
|
---|
9 | (function($) {
|
---|
10 | $.widget( "mobile.datebox", $.mobile.widget, {
|
---|
11 | options: {
|
---|
12 | // All widget options, including some internal runtime details
|
---|
13 | version: '2-1.4.0-2013070300', // jQMMajor.jQMMinor.DBoxMinor-YrMoDaySerial
|
---|
14 | mobVer: parseInt($.mobile.version.replace(/\./g,'')),
|
---|
15 | theme: false,
|
---|
16 | themeDefault: 'a',
|
---|
17 | themeHeader: 'a',
|
---|
18 | mode: false,
|
---|
19 |
|
---|
20 | centerHoriz: false,
|
---|
21 | centerVert: false,
|
---|
22 | transition: 'pop',
|
---|
23 | useAnimation: true,
|
---|
24 | hideInput: false,
|
---|
25 | hideFixedToolbars: false,
|
---|
26 |
|
---|
27 | lockInput: true,
|
---|
28 | enhanceInput: true,
|
---|
29 |
|
---|
30 | zindex: '500',
|
---|
31 | clickEvent: 'vclick',
|
---|
32 | clickEventAlt: 'click',
|
---|
33 | resizeListener: true,
|
---|
34 |
|
---|
35 | defaultValue: false,
|
---|
36 | showInitialValue: false,
|
---|
37 |
|
---|
38 | dialogEnable: false,
|
---|
39 | dialogForce: false,
|
---|
40 | enablePopup: false,
|
---|
41 |
|
---|
42 | popupPosition: false,
|
---|
43 | popupForceX: false,
|
---|
44 | popupForceY: false,
|
---|
45 |
|
---|
46 | useModal: false,
|
---|
47 | useInline: false,
|
---|
48 | useInlineBlind: false,
|
---|
49 | useHeader: true,
|
---|
50 | useImmediate: false,
|
---|
51 | useNewStyle: false,
|
---|
52 | useAltIcon: false,
|
---|
53 | overrideStyleClass: false,
|
---|
54 |
|
---|
55 | useButton: true,
|
---|
56 | useFocus: false,
|
---|
57 | useClearButton: false,
|
---|
58 | useCollapsedBut: false,
|
---|
59 | usePlaceholder: false,
|
---|
60 |
|
---|
61 | openCallback: false,
|
---|
62 | openCallbackArgs: [],
|
---|
63 | closeCallback: false,
|
---|
64 | closeCallbackArgs: [],
|
---|
65 |
|
---|
66 | startOffsetYears: false,
|
---|
67 | startOffsetMonths: false,
|
---|
68 | startOffsetDays: false,
|
---|
69 | afterToday: false,
|
---|
70 | beforeToday: false,
|
---|
71 | notToday: false,
|
---|
72 | maxDays: false,
|
---|
73 | minDays: false,
|
---|
74 | maxYear: false,
|
---|
75 | minYear: false,
|
---|
76 | blackDates: false,
|
---|
77 | blackDatesRec: false,
|
---|
78 | blackDays: false,
|
---|
79 | minHour: false,
|
---|
80 | maxHour: false,
|
---|
81 | minuteStep: 1,
|
---|
82 | minuteStepRound: 0,
|
---|
83 |
|
---|
84 | rolloverMode: { 'm': true, 'd': true, 'h': true, 'i': true, 's': true },
|
---|
85 |
|
---|
86 | useLang: 'default',
|
---|
87 | lang: {
|
---|
88 | 'default' : {
|
---|
89 | setDateButtonLabel: 'Set Date',
|
---|
90 | setTimeButtonLabel: 'Set Time',
|
---|
91 | setDurationButtonLabel: 'Set Duration',
|
---|
92 | calTodayButtonLabel: 'Jump to Today',
|
---|
93 | titleDateDialogLabel: 'Set Date',
|
---|
94 | titleTimeDialogLabel: 'Set Time',
|
---|
95 | daysOfWeek: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
---|
96 | daysOfWeekShort: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
|
---|
97 | monthsOfYear: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
---|
98 | monthsOfYearShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
---|
99 | durationLabel: ['Days', 'Hours', 'Minutes', 'Seconds'],
|
---|
100 | durationDays: ['Day', 'Days'],
|
---|
101 | timeFormat: 24,
|
---|
102 | headerFormat: '%A, %B %-d, %Y',
|
---|
103 | tooltip: 'Open Date Picker',
|
---|
104 | nextMonth: 'Next Month',
|
---|
105 | prevMonth: 'Previous Month',
|
---|
106 | dateFieldOrder: ['m', 'd', 'y'],
|
---|
107 | timeFieldOrder: ['h', 'i', 'a'],
|
---|
108 | slideFieldOrder: ['y', 'm', 'd'],
|
---|
109 | dateFormat: '%Y-%m-%d',
|
---|
110 | useArabicIndic: false,
|
---|
111 | isRTL: false,
|
---|
112 | calStartDay: 0,
|
---|
113 | clearButton: 'Clear',
|
---|
114 | durationOrder: ['d', 'h', 'i', 's'],
|
---|
115 | meridiem: ['AM', 'PM'],
|
---|
116 | timeOutput: '%k:%M', //{ '12': '%l:%M %p', '24': '%k:%M' },
|
---|
117 | durationFormat: '%Dd %DA, %Dl:%DM:%DS',
|
---|
118 | calDateListLabel: 'Other Dates',
|
---|
119 | calHeaderFormat: '%B %Y'
|
---|
120 | }
|
---|
121 | }
|
---|
122 | },
|
---|
123 | _enhanceDate: function() {
|
---|
124 | $.extend(this._date.prototype, {
|
---|
125 | copy: function(adjust, override) {
|
---|
126 | /* Get a modified copy of the date.
|
---|
127 | * First array - Offset the new date by # (position determines date part)
|
---|
128 | * Second array - If non-zero, force the new date by # (position determines date part)
|
---|
129 | */
|
---|
130 | if ( typeof adjust === 'undefined' ) { adjust = [0,0,0,0,0,0,0]; }
|
---|
131 | if ( typeof override === 'undefined' ) { override = [0,0,0,0,0,0,0]; }
|
---|
132 | while ( adjust.length < 7 ) { adjust.push(0); }
|
---|
133 | while ( override.length < 7 ) { override.push(0); }
|
---|
134 | return new Date(
|
---|
135 | ((override[0] > 0 ) ? override[0] : this.getFullYear() + adjust[0]),
|
---|
136 | ((override[1] > 0 ) ? override[1] : this.getMonth() + adjust[1]),
|
---|
137 | ((override[2] > 0 ) ? override[2] : this.getDate() + adjust[2]),
|
---|
138 | ((override[3] > 0 ) ? override[3] : this.getHours() + adjust[3]),
|
---|
139 | ((override[4] > 0 ) ? override[4] : this.getMinutes() + adjust[4]),
|
---|
140 | ((override[5] > 0 ) ? override[5] : this.getSeconds() + adjust[5]),
|
---|
141 | ((override[6] > 0 ) ? override[5] : this.getMilliseconds() + adjust[6]));
|
---|
142 | },
|
---|
143 | adj: function (type, amount) {
|
---|
144 | /* Adjust the date. Yes, this is chainable */
|
---|
145 | if ( typeof amount !== 'number' ) {
|
---|
146 | throw new Error("Adjustment value not specified");
|
---|
147 | }
|
---|
148 | if ( typeof type !== 'number' ) {
|
---|
149 | throw new Error("Adjustment type not specified");
|
---|
150 | }
|
---|
151 | switch ( type ) {
|
---|
152 | case 0: this.setFullYear(this.getFullYear() + amount); break;
|
---|
153 | case 1: this.setMonth(this.getMonth() + amount); break;
|
---|
154 | case 2: this.setDate(this.getDate() + amount); break;
|
---|
155 | case 3: this.setHours(this.getHours() + amount); break;
|
---|
156 | case 4: this.setMinutes(this.getMinutes() + amount); break;
|
---|
157 | case 5: this.setSeconds(this.getSeconds() + amount); break;
|
---|
158 | case 6: this.setMilliseconds(this.getMilliseconds() + amount); break;
|
---|
159 | }
|
---|
160 | return this;
|
---|
161 | },
|
---|
162 | setD: function(type, amount) {
|
---|
163 | /* A chainable version of setWhatever() */
|
---|
164 | switch ( type ) {
|
---|
165 | case 0: this.setFullYear(amount); break;
|
---|
166 | case 1: this.setMonth(amount); break;
|
---|
167 | case 2: this.setDate(amount); break;
|
---|
168 | case 3: this.setHours(amount); break;
|
---|
169 | case 4: this.setMinutes(amount); break;
|
---|
170 | case 5: this.setSeconds(amount); break;
|
---|
171 | case 6: this.setMilliseconds(amount); break;
|
---|
172 | }
|
---|
173 | return this;
|
---|
174 | },
|
---|
175 | get: function(type) {
|
---|
176 | switch ( type ) {
|
---|
177 | case 0: return this.getFullYear();
|
---|
178 | case 1: return this.getMonth();
|
---|
179 | case 2: return this.getDate();
|
---|
180 | case 3: return this.getHours();
|
---|
181 | case 4: return this.getMinutes();
|
---|
182 | case 5: return this.getSeconds();
|
---|
183 | }
|
---|
184 | return false;
|
---|
185 | },
|
---|
186 | iso: function() {
|
---|
187 | return String(this.getFullYear()) + '-' + (( this.getMonth() < 9 ) ? "0" : "") + String(this.getMonth()+1) + '-' + ((this.getDate() < 10 ) ? "0" : "") + String(this.getDate());
|
---|
188 | },
|
---|
189 | comp: function () {
|
---|
190 | return parseInt(this.iso().replace(/-/g,''),10);
|
---|
191 | },
|
---|
192 | getEpoch: function() {
|
---|
193 | return (this.getTime() - this.getMilliseconds()) / 1000;
|
---|
194 | },
|
---|
195 | getArray: function() {
|
---|
196 | return [this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds()];
|
---|
197 | },
|
---|
198 | setFirstDay: function (day) {
|
---|
199 | this.setD(2,1).adj(2, (day - this.getDay()));
|
---|
200 | if ( this.get(2) > 10 ) { this.adj(2,7); }
|
---|
201 | return this;
|
---|
202 | },
|
---|
203 | setDWeek: function (type,num) {
|
---|
204 | if ( type === 4 ) {
|
---|
205 | return this.setD(1,0).setD(2,1).setFirstDay(4).adj(2,-3).adj(2,(num-1)*7);
|
---|
206 | }
|
---|
207 | return this.setD(1,0).setD(2,1).setFirstDay(type).adj(2,(num-1)*7);
|
---|
208 | },
|
---|
209 | getDWeek: function (type) {
|
---|
210 | var t1, t2;
|
---|
211 |
|
---|
212 | switch ( type ) {
|
---|
213 | case 0:
|
---|
214 | t1 = this.copy([0,-1*this.getMonth()]).setFirstDay(0);
|
---|
215 | return Math.floor((this.getTime() - ( t1.getTime() + (( this.getTimezoneOffset() - t1.getTimezoneOffset()) * 60000))) / 6048e5) + 1;
|
---|
216 | //return Math.floor((this.getTime() - t1.getTime()) / 6048e5) + 1;
|
---|
217 | case 1:
|
---|
218 | t1 = this.copy([0,-1*this.getMonth()]).setFirstDay(1);
|
---|
219 | return Math.floor((this.getTime() - ( t1.getTime() + (( this.getTimezoneOffset() - t1.getTimezoneOffset()) * 60000))) / 6048e5) + 1;
|
---|
220 | //return Math.floor((this.getTime() - t1.getTime()) / 6048e5) + 1;
|
---|
221 | case 4:
|
---|
222 | // this line is some bullshit. but it does work.
|
---|
223 | // (trap for dec 29, 30, or 31st being in the new year's week - these are the
|
---|
224 | // only 3 that can possibly fall like this)
|
---|
225 | if ( this.getMonth() === 11 && this.getDate() > 28 ) { return 1; }
|
---|
226 |
|
---|
227 | t1 = this.copy([0,-1*this.getMonth()],true).setFirstDay(4).adj(2,-3);
|
---|
228 | t2 = Math.floor((this.getTime() - ( t1.getTime() + (( this.getTimezoneOffset() - t1.getTimezoneOffset()) * 60000))) / 6048e5) + 1;
|
---|
229 |
|
---|
230 | if ( t2 < 1 ) {
|
---|
231 | t1 = this.copy([-1,-1*this.getMonth()]).setFirstDay(4).adj(2,-3);
|
---|
232 | return Math.floor((this.getTime() - t1.getTime()) / 6048e5) + 1;
|
---|
233 | }
|
---|
234 | return t2;
|
---|
235 | default:
|
---|
236 | return 0;
|
---|
237 | }
|
---|
238 | }
|
---|
239 | });
|
---|
240 | },
|
---|
241 | _event: function(e, p) {
|
---|
242 | var w = $(this).data(parseInt($.mobile.version.replace(/\./g,''),10) > 110 ? 'mobile-datebox' : 'datebox');
|
---|
243 | if ( ! e.isPropagationStopped() ) {
|
---|
244 | switch (p.method) {
|
---|
245 | case 'close':
|
---|
246 | w.close(); break;
|
---|
247 | case 'open':
|
---|
248 | w.open(); break;
|
---|
249 | case 'set':
|
---|
250 | $(this).val(p.value);
|
---|
251 | $(this).trigger('change');
|
---|
252 | break;
|
---|
253 | case 'doset':
|
---|
254 | if ( $.isFunction(w['_'+w.options.mode+'DoSet']) ) {
|
---|
255 | w['_'+w.options.mode+'DoSet'].apply(w,[]);
|
---|
256 | } else {
|
---|
257 | $(this).trigger('datebox', {'method':'set', 'value':w._formatter(w.__fmt(), w.theDate), 'date':w.theDate});
|
---|
258 | }
|
---|
259 | break;
|
---|
260 | case 'dooffset':
|
---|
261 | if (p.type) { w._offset(p.type, p.amount, true); } break;
|
---|
262 | case 'dorefresh':
|
---|
263 | w.refresh(); break;
|
---|
264 | case 'doreset':
|
---|
265 | w.hardreset(); break;
|
---|
266 | case 'doclear':
|
---|
267 | $(this).val('').trigger('change'); break;
|
---|
268 | case 'clear':
|
---|
269 | $(this).trigger('change');
|
---|
270 | }
|
---|
271 | }
|
---|
272 | },
|
---|
273 | _hoover: function(item) {
|
---|
274 | // Hover toggle class, for calendar
|
---|
275 | $(item).toggleClass('ui-btn-up-'+$(item).jqmData('theme')+' ui-btn-down-'+$(item).jqmData('theme'));
|
---|
276 | },
|
---|
277 | _ord: {
|
---|
278 | 'default': function (num) {
|
---|
279 | // Return an ordinal suffix (1st, 2nd, 3rd, etc)
|
---|
280 | var ending = num % 10;
|
---|
281 | if ( num > 9 && num < 21 ) { return 'th'; }
|
---|
282 | if ( ending > 3 ) { return 'th'; }
|
---|
283 | return ['th','st','nd','rd'][ending];
|
---|
284 | }
|
---|
285 | },
|
---|
286 | __ : function(val) {
|
---|
287 | var o = this.options,
|
---|
288 | oride = 'override' + val.charAt(0).toUpperCase() + val.slice(1);
|
---|
289 |
|
---|
290 | if ( typeof o[oride] !== 'undefined' ) { return o[oride]; }
|
---|
291 | if ( typeof o.lang[o.useLang][val] !== 'undefined' ) { return o.lang[o.useLang][val]; }
|
---|
292 | if ( typeof o[o.mode+'lang'] !== 'undefined' && typeof o[o.mode+'lang'][val] !== 'undefined' ) { return o[o.mode+'lang'][val]; }
|
---|
293 | return o.lang['default'][val];
|
---|
294 | },
|
---|
295 | __fmt: function() {
|
---|
296 | var w = this,
|
---|
297 | o = this.options;
|
---|
298 |
|
---|
299 | switch ( o.mode ) {
|
---|
300 | case 'timebox':
|
---|
301 | case 'timeflipbox':
|
---|
302 | return w.__('timeOutput');
|
---|
303 | case 'durationbox':
|
---|
304 | case 'durationflipbox':
|
---|
305 | return w.__('durationFormat');
|
---|
306 | default:
|
---|
307 | return w.__('dateFormat');
|
---|
308 | }
|
---|
309 | },
|
---|
310 | _zPad: function(number) {
|
---|
311 | return (( number < 10 ) ? '0' + String(number) : String(number));
|
---|
312 | },
|
---|
313 | _dRep: function(oper, direction) {
|
---|
314 | var start = 48,
|
---|
315 | end = 57,
|
---|
316 | adder = 1584,
|
---|
317 | i = null,
|
---|
318 | ch = null,
|
---|
319 | newd = '';
|
---|
320 |
|
---|
321 | if ( direction === -1 ) {
|
---|
322 | start += adder;
|
---|
323 | end += adder;
|
---|
324 | adder = -1584;
|
---|
325 | }
|
---|
326 |
|
---|
327 | for ( i=0; i<oper.length; i++ ) {
|
---|
328 | ch = oper.charCodeAt(i);
|
---|
329 | if ( ch >= start && ch <= end ) {
|
---|
330 | newd = newd + String.fromCharCode(ch+adder);
|
---|
331 | } else {
|
---|
332 | newd = newd + String.fromCharCode(ch);
|
---|
333 | }
|
---|
334 | }
|
---|
335 |
|
---|
336 | return newd;
|
---|
337 | },
|
---|
338 | _doIndic: function() {
|
---|
339 | var w = this;
|
---|
340 |
|
---|
341 | w.d.intHTML.find('*').each(function() {
|
---|
342 | if ( $(this).children().length < 1 ) {
|
---|
343 | $(this).text(w._dRep($(this).text()));
|
---|
344 | } else if ( $(this).hasClass('ui-datebox-slideday') ) {
|
---|
345 | $(this).html(w._dRep($(this).html()));
|
---|
346 | }
|
---|
347 | });
|
---|
348 | w.d.intHTML.find('input').each(function() {
|
---|
349 | $(this).val(w._dRep($(this).val()));
|
---|
350 | });
|
---|
351 | },
|
---|
352 | _parser: {
|
---|
353 | 'default': function (str) { return false; }
|
---|
354 | },
|
---|
355 | _n: function (val,def) {
|
---|
356 | return ( val < 0 ) ? def : val;
|
---|
357 | },
|
---|
358 | _pa: function (arr,date) {
|
---|
359 | if ( typeof date === 'boolean' ) { return new this._date(arr[0],arr[1],arr[2],0,0,0,0); }
|
---|
360 | return new this._date(date.getFullYear(), date.getMonth(), date.getDate(), arr[0], arr[1], arr[2], 0);
|
---|
361 | },
|
---|
362 | _makeDate: function (str) {
|
---|
363 | // Date Parser
|
---|
364 | str = $.trim(((this.__('useArabicIndic') === true)?this._dRep(str, -1):str));
|
---|
365 | var w = this,
|
---|
366 | o = this.options,
|
---|
367 | adv = w.__fmt(),
|
---|
368 | exp_input = null,
|
---|
369 | exp_names = [],
|
---|
370 | exp_format = null,
|
---|
371 | exp_temp = null,
|
---|
372 | date = new w._date(),
|
---|
373 | d = { year: -1, mont: -1, date: -1, hour: -1, mins: -1, secs: -1, week: false, wtyp: 4, wday: false, yday: false, meri: 0 },
|
---|
374 | i;
|
---|
375 |
|
---|
376 | if ( typeof o.mode === 'undefined' ) { return date; }
|
---|
377 | if ( typeof w._parser[o.mode] !== 'undefined' ) { return w._parser[o.mode].apply(w,[str]); }
|
---|
378 |
|
---|
379 | if ( o.mode === 'durationbox' || o.mode === 'durationflipbox' ) {
|
---|
380 | adv = adv.replace(/%D([a-z])/gi, function(match, oper) {
|
---|
381 | switch (oper) {
|
---|
382 | case 'd':
|
---|
383 | case 'l':
|
---|
384 | case 'M':
|
---|
385 | case 'S': return '(' + match + '|' +'[0-9]+' + ')';
|
---|
386 | default: return '.+?';
|
---|
387 | }
|
---|
388 | });
|
---|
389 |
|
---|
390 | adv = new RegExp('^' + adv + '$');
|
---|
391 | exp_input = adv.exec(str);
|
---|
392 | exp_format = adv.exec(w.__fmt());
|
---|
393 |
|
---|
394 | if ( exp_input === null || exp_input.length !== exp_format.length ) {
|
---|
395 | if ( typeof o.defaultValue === "number" && o.defaultValue > 0 ) {
|
---|
396 | return new w._date((w.initDate.getEpoch() + parseInt(o.defaultValue,10))*1000);
|
---|
397 | }
|
---|
398 | return new w._date(w.initDate.getTime());
|
---|
399 | }
|
---|
400 |
|
---|
401 | exp_temp = w.initDate.getEpoch();
|
---|
402 | for ( i=0; i<exp_input.length; i++ ) { //0y 1m 2d 3h 4i 5s
|
---|
403 | if ( exp_format[i].match(/^%Dd$/i) ) { exp_temp = exp_temp + (parseInt(exp_input[i],10)*60*60*24); }
|
---|
404 | if ( exp_format[i].match(/^%Dl$/i) ) { exp_temp = exp_temp + (parseInt(exp_input[i],10)*60*60); }
|
---|
405 | if ( exp_format[i].match(/^%DM$/i) ) { exp_temp = exp_temp + (parseInt(exp_input[i],10)*60); }
|
---|
406 | if ( exp_format[i].match(/^%DS$/i) ) { exp_temp = exp_temp + (parseInt(exp_input[i],10)); }
|
---|
407 | }
|
---|
408 | return new w._date((exp_temp*1000));
|
---|
409 | }
|
---|
410 |
|
---|
411 | adv = adv.replace(/%(0|-)*([a-z])/gi, function(match, pad, oper) {
|
---|
412 | exp_names.push(oper);
|
---|
413 | switch (oper) {
|
---|
414 | case 'p':
|
---|
415 | case 'P':
|
---|
416 | case 'b':
|
---|
417 | case 'B': return '(' + match + '|' +'.+?' + ')';
|
---|
418 | case 'H':
|
---|
419 | case 'k':
|
---|
420 | case 'I':
|
---|
421 | case 'l':
|
---|
422 | case 'm':
|
---|
423 | case 'M':
|
---|
424 | case 'S':
|
---|
425 | case 'V':
|
---|
426 | case 'U':
|
---|
427 | case 'u':
|
---|
428 | case 'W':
|
---|
429 | case 'd': return '(' + match + '|' + (( pad === '-' ) ? '[0-9]{1,2}' : '[0-9]{2}') + ')';
|
---|
430 | case 'j': return '(' + match + '|' + '[0-9]{3}' + ')';
|
---|
431 | case 's': return '(' + match + '|' + '[0-9]+' + ')';
|
---|
432 | case 'g':
|
---|
433 | case 'y': return '(' + match + '|' + '[0-9]{2}' + ')';
|
---|
434 | case 'E':
|
---|
435 | case 'G':
|
---|
436 | case 'Y': return '(' + match + '|' + '[0-9]{1,4}' + ')';
|
---|
437 | default: exp_names.pop(); return '.+?';
|
---|
438 | }
|
---|
439 | });
|
---|
440 |
|
---|
441 | adv = new RegExp('^' + adv + '$');
|
---|
442 | exp_input = adv.exec(str);
|
---|
443 | exp_format = adv.exec(w.__fmt());
|
---|
444 |
|
---|
445 | if ( exp_input === null || exp_input.length !== exp_format.length ) {
|
---|
446 | if ( o.defaultValue !== false ) {
|
---|
447 | switch ( typeof o.defaultValue ) {
|
---|
448 | case 'object':
|
---|
449 | if ( o.defaultValue.length === 3 ) {
|
---|
450 | date = w._pa(o.defaultValue,((o.mode === 'timebox' || o.mode === 'timeflipbox') ? date : false));
|
---|
451 | } break;
|
---|
452 | case 'number':
|
---|
453 | date = new w._date(o.defaultValue * 1000); break;
|
---|
454 | case 'string':
|
---|
455 | if ( o.mode === 'timebox' || o.mode === 'timeflipbox' ) {
|
---|
456 | exp_temp = o.defaultValue.split(':');
|
---|
457 | if ( exp_temp.length === 3 ) { date = w._pa([exp_temp[0],exp_temp[1],exp_temp[2]], date); }
|
---|
458 | else if ( exp_temp.length === 2 ) { date = w._pa([exp_temp[0],exp_temp[1],0], date); }
|
---|
459 | } else {
|
---|
460 | exp_temp = o.defaultValue.split('-');
|
---|
461 | if ( exp_temp.length === 3 ) { date = w._pa([exp_temp[0],exp_temp[1]-1,exp_temp[2]], false); }
|
---|
462 | } break;
|
---|
463 | }
|
---|
464 | }
|
---|
465 | if ( isNaN(date.getDate()) ) { date = new w._date(); }
|
---|
466 | } else {
|
---|
467 | for ( i=1; i<exp_input.length; i++ ) {
|
---|
468 | switch ( exp_names[i-1] ) {
|
---|
469 | case 's': return new w._date(parseInt(exp_input[i],10) * 1000);
|
---|
470 | case 'Y':
|
---|
471 | case 'G': d.year = parseInt(exp_input[i],10); break;
|
---|
472 | case 'E': d.year = parseInt(exp_input[i],10) - 543; break;
|
---|
473 | case 'y':
|
---|
474 | case 'g':
|
---|
475 | if ( o.afterToday === true || parseInt(exp_input[i],10) < 38 ) {
|
---|
476 | d.year = parseInt('20' + exp_input[i],10);
|
---|
477 | } else {
|
---|
478 | d.year = parseInt('19' + exp_input[i],10);
|
---|
479 | } break;
|
---|
480 | case 'm': d.mont = parseInt(exp_input[i],10)-1; break;
|
---|
481 | case 'd': d.date = parseInt(exp_input[i],10); break;
|
---|
482 | case 'H':
|
---|
483 | case 'k':
|
---|
484 | case 'I':
|
---|
485 | case 'l': d.hour = parseInt(exp_input[i],10); break;
|
---|
486 | case 'M': d.mins = parseInt(exp_input[i],10); break;
|
---|
487 | case 'S': d.secs = parseInt(exp_input[i],10); break;
|
---|
488 | case 'u': d.wday = parseInt(exp_input[i],10)-1; break;
|
---|
489 | case 'w': d.wday = parseInt(exp_input[i],10); break;
|
---|
490 | case 'j': d.yday = parseInt(exp_input[i],10); break;
|
---|
491 | case 'V': d.week = parseInt(exp_input[i],10); d.wtyp = 4; break;
|
---|
492 | case 'U': d.week = parseInt(exp_input[i],10); d.wtyp = 0; break;
|
---|
493 | case 'W': d.week = parseInt(exp_input[i],10); d.wtyp = 1; break;
|
---|
494 | case 'p':
|
---|
495 | case 'P': d.meri = (( exp_input[i].toLowerCase() === w.__('meridiem')[0].toLowerCase() )? -1:1); break;
|
---|
496 | case 'b':
|
---|
497 | exp_temp = $.inArray(exp_input[i], w.__('monthsOfYearShort'));
|
---|
498 | if ( exp_temp > -1 ) { d.mont = exp_temp; }
|
---|
499 | break;
|
---|
500 | case 'B':
|
---|
501 | exp_temp = $.inArray(exp_input[i], w.__('monthsOfYear'));
|
---|
502 | if ( exp_temp > -1 ) { d.mont = exp_temp; }
|
---|
503 | break;
|
---|
504 | }
|
---|
505 | }
|
---|
506 | if ( d.meri !== 0 ) {
|
---|
507 | if ( d.meri === -1 && d.hour === 12 ) { d.hour = 0; }
|
---|
508 | if ( d.meri === 1 && d.hour !== 12 ) { d.hour = d.hour + 12; }
|
---|
509 | }
|
---|
510 |
|
---|
511 | date = new w._date(w._n(d.year,0),w._n(d.mont,0),w._n(d.date,1),w._n(d.hour,0),w._n(d.mins,0),w._n(d.secs,0),0);
|
---|
512 |
|
---|
513 | if ( d.year < 100 && d.year !== -1 ) { date.setFullYear(d.year); }
|
---|
514 |
|
---|
515 | if ( ( d.mont > -1 && d.date > -1 ) || ( d.hour > -1 && d.mins > -1 && d.secs > -1 ) ) { return date; }
|
---|
516 |
|
---|
517 | if ( d.week !== false ) {
|
---|
518 | date.setDWeek(d.wtyp, d.week);
|
---|
519 | if ( d.date > -1 ) { date.setDate(d.date); }
|
---|
520 | }
|
---|
521 | if ( d.yday !== false ) { date.setD(1,0).setD(2,1).adj(2,(d.yday-1)); }
|
---|
522 | if ( d.wday !== false ) { date.adj(2,(d.wday - date.getDay())); }
|
---|
523 | }
|
---|
524 | return date;
|
---|
525 | },
|
---|
526 | _customformat: {
|
---|
527 | 'default': function(oper, date) { return false; }
|
---|
528 | },
|
---|
529 | _formatter: function(format, date) {
|
---|
530 | var w = this,
|
---|
531 | o = this.options, tmp,
|
---|
532 | dur = {
|
---|
533 | part: [0,0,0,0], tp: 0
|
---|
534 | };
|
---|
535 |
|
---|
536 | if ( o.mode === 'durationbox' || o.mode === 'durationflipbox' ) {
|
---|
537 | dur.tp = this.theDate.getEpoch() - this.initDate.getEpoch();
|
---|
538 | dur.part[0] = parseInt( dur.tp / (60*60*24),10); dur.tp -=(dur.part[0]*60*60*24); // Days
|
---|
539 | dur.part[1] = parseInt( dur.tp / (60*60),10); dur.tp -= (dur.part[1]*60*60); // Hours
|
---|
540 | dur.part[2] = parseInt( dur.tp / (60),10); dur.tp -= (dur.part[2]*60); // Minutes
|
---|
541 | dur.part[3] = dur.tp; // Seconds
|
---|
542 |
|
---|
543 | if ( ! format.match(/%Dd/) ) { dur.part[1] += (dur.part[0]*24);}
|
---|
544 | if ( ! format.match(/%Dl/) ) { dur.part[2] += (dur.part[1]*60);}
|
---|
545 | if ( ! format.match(/%DM/) ) { dur.part[3] += (dur.part[2]*60);}
|
---|
546 | }
|
---|
547 |
|
---|
548 | format = format.replace(/%(D|X|0|-)*([1-9a-zA-Z])/g, function(match, pad, oper) {
|
---|
549 | if ( pad === 'X' ) {
|
---|
550 | if ( typeof w._customformat[o.mode] !== 'undefined' ) { return w._customformat[o.mode](oper, date, o); }
|
---|
551 | return match;
|
---|
552 | }
|
---|
553 | if ( pad === 'D' ) {
|
---|
554 | switch ( oper ) {
|
---|
555 | case 'd': return dur.part[0];
|
---|
556 | case 'l': return w._zPad(dur.part[1]);
|
---|
557 | case 'M': return w._zPad(dur.part[2]);
|
---|
558 | case 'S': return w._zPad(dur.part[3]);
|
---|
559 | case 'A': return ((dur.part[0] > 1)?w.__('durationDays')[1]:w.__('durationDays')[0]);
|
---|
560 | default: return match;
|
---|
561 | }
|
---|
562 | }
|
---|
563 | switch ( oper ) {
|
---|
564 | case '%': // Literal %
|
---|
565 | return '%';
|
---|
566 | case 'a': // Short Day
|
---|
567 | return w.__('daysOfWeekShort')[date.getDay()];
|
---|
568 | case 'A': // Full Day of week
|
---|
569 | return w.__('daysOfWeek')[date.getDay()];
|
---|
570 | case 'b': // Short month
|
---|
571 | return w.__('monthsOfYearShort')[date.getMonth()];
|
---|
572 | case 'B': // Full month
|
---|
573 | return w.__('monthsOfYear')[date.getMonth()];
|
---|
574 | case 'C': // Century
|
---|
575 | return date.getFullYear().toString().substr(0,2);
|
---|
576 | case 'd': // Day of month
|
---|
577 | return (( pad === '-' ) ? date.getDate() : w._zPad(date.getDate()));
|
---|
578 | case 'H': // Hour (01..23)
|
---|
579 | case 'k':
|
---|
580 | return (( pad === '-' ) ? date.getHours() : w._zPad(date.getHours()));
|
---|
581 | case 'I': // Hour (01..12)
|
---|
582 | case 'l':
|
---|
583 | return (( pad === '-' ) ? ((date.getHours() === 0 || date.getHours() === 12)?12:((date.getHours()<12)?date.getHours():(date.getHours()-12))) : w._zPad(((date.getHours() === 0 || date.getHours() === 12)?12:((date.getHours()<12)?date.getHours():date.getHours()-12))));
|
---|
584 | case 'm': // Month
|
---|
585 | return (( pad === '-' ) ? date.getMonth()+1 : w._zPad(date.getMonth()+1));
|
---|
586 | case 'M': // Minutes
|
---|
587 | return (( pad === '-' ) ? date.getMinutes() : w._zPad(date.getMinutes()));
|
---|
588 | case 'p': // AM/PM (ucase)
|
---|
589 | return ((date.getHours() < 12)?w.__('meridiem')[0].toUpperCase():w.__('meridiem')[1].toUpperCase());
|
---|
590 | case 'P': // AM/PM (lcase)
|
---|
591 | return ((date.getHours() < 12)?w.__('meridiem')[0].toLowerCase():w.__('meridiem')[1].toLowerCase());
|
---|
592 | case 's': // Unix Seconds
|
---|
593 | return date.getEpoch();
|
---|
594 | case 'S': // Seconds
|
---|
595 | return (( pad === '-' ) ? date.getSeconds() : w._zPad(date.getSeconds()));
|
---|
596 | case 'u': // Day of week (1-7)
|
---|
597 | return (( pad === '-' ) ? date.getDay() + 1 : w._zPad(date.getDay() + 1));
|
---|
598 | case 'w': // Day of week
|
---|
599 | return date.getDay();
|
---|
600 | case 'y': // Year (2 digit)
|
---|
601 | return date.getFullYear().toString().substr(2,2);
|
---|
602 | case 'Y': // Year (4 digit)
|
---|
603 | return date.getFullYear();
|
---|
604 | case 'E': // BE (Buddist Era, 4 Digit)
|
---|
605 | return date.getFullYear() + 543;
|
---|
606 | case 'V':
|
---|
607 | return (( pad === '-' ) ? date.getDWeek(4) : w._zPad(date.getDWeek(4)));
|
---|
608 | case 'U':
|
---|
609 | return (( pad === '-' ) ? date.getDWeek(0) : w._zPad(date.getDWeek(0)));
|
---|
610 | case 'W':
|
---|
611 | return (( pad === '-' ) ? date.getDWeek(1) : w._zPad(date.getDWeek(1)));
|
---|
612 | case 'o': // Ordinals
|
---|
613 | if ( typeof w._ord[o.useLang] !== 'undefined' ) { return w._ord[o.useLang](date.getDate()); }
|
---|
614 | return w._ord['default'](date.getDate());
|
---|
615 | case 'j':
|
---|
616 | tmp = new Date(date.getFullYear(),0,1);
|
---|
617 | tmp = Math.ceil((date - tmp) / 86400000)+1;
|
---|
618 | return (( tmp < 100 ) ? (( tmp < 10 )? '00' : '0') : '' ) + String(tmp);
|
---|
619 | case 'G':
|
---|
620 | if ( date.getDWeek(4) === 1 && date.getMonth() > 0 ) { return date.getFullYear() + 1; }
|
---|
621 | if ( date.getDWeek(4) > 51 && date.getMonth() < 11 ) { return date.getFullYear() - 1; }
|
---|
622 | return date.getFullYear();
|
---|
623 | case 'g':
|
---|
624 | if ( date.getDWeek(4) === 1 && date.getMonth() > 0 ) { return parseInt(date.getFullYear().toString().substr(2,2),10) + 1; }
|
---|
625 | if ( date.getDWeek(4) > 51 && date.getMonth() < 11 ) { return parseInt(date.getFullYear().toString().substr(2,2),10) - 1; }
|
---|
626 | return date.getFullYear().toString().substr(2,2);
|
---|
627 | default:
|
---|
628 | return match;
|
---|
629 | }
|
---|
630 | });
|
---|
631 |
|
---|
632 | if ( w.__('useArabicIndic') === true ) {
|
---|
633 | format = w._dRep(format);
|
---|
634 | }
|
---|
635 |
|
---|
636 | return format;
|
---|
637 | },
|
---|
638 | _btwn: function(value, low, high) {
|
---|
639 | return ( value > low && value < high );
|
---|
640 | },
|
---|
641 | _minStepFix: function() {
|
---|
642 | var tempMin = this.theDate.get(4), tmp,
|
---|
643 | w = this,
|
---|
644 | o = this.options;
|
---|
645 |
|
---|
646 | if ( o.minuteStep > 1 && tempMin % o.minuteStep > 0 ) {
|
---|
647 | if ( o.minuteStepRound < 0 ) {
|
---|
648 | tempMin = tempMin - (tempMin % o.minuteStep);
|
---|
649 | } else if ( o.minStepRound > 0 ) {
|
---|
650 | tempMin = tempMin + ( o.minuteStep - ( tempMin % o.minuteStep ) );
|
---|
651 | } else {
|
---|
652 | if ( tempMin % o.minuteStep < o.minuteStep / 2 ) {
|
---|
653 | tempMin = tempMin - (tempMin % o.minuteStep);
|
---|
654 | } else {
|
---|
655 | tempMin = tempMin + ( o.minuteStep - ( tempMin % o.minuteStep ) );
|
---|
656 | }
|
---|
657 | }
|
---|
658 | w.theDate.setMinutes(tempMin);
|
---|
659 | }
|
---|
660 | },
|
---|
661 | _offset: function(mode, amount, update) {
|
---|
662 | // Compute a date/time offset.
|
---|
663 | // update = false to prevent controls refresh
|
---|
664 | var w = this,
|
---|
665 | o = this.options,
|
---|
666 | ok = false;
|
---|
667 |
|
---|
668 | mode = (mode || "").toLowerCase();
|
---|
669 |
|
---|
670 | if ( typeof(update) === "undefined" ) { update = true; }
|
---|
671 | w.d.input.trigger('datebox', {'method':'offset', 'type':mode, 'amount':amount});
|
---|
672 |
|
---|
673 | if ( mode !== 'a' && ( typeof o.rolloverMode[mode] === 'undefined' || o.rolloverMode[mode] === true )) {
|
---|
674 | ok = $.inArray(mode, ['y','m','d','h','i','s']);
|
---|
675 | } else {
|
---|
676 | switch(mode) {
|
---|
677 | case 'y': ok = 0; break;
|
---|
678 | case 'm':
|
---|
679 | if ( w._btwn(w.theDate.getMonth()+amount,-1,12) ) { ok = 1; }
|
---|
680 | break;
|
---|
681 | case 'd':
|
---|
682 | if ( w._btwn(w.theDate.getDate() + amount,0,(32 - w.theDate.copy([0],[0,0,32,13]).getDate() + 1) )) { ok = 2; }
|
---|
683 | break;
|
---|
684 | case 'h':
|
---|
685 | if ( w._btwn(w.theDate.getHours() + amount,-1,24) ) { ok = 3; }
|
---|
686 | break;
|
---|
687 | case 'i':
|
---|
688 | if ( w._btwn(w.theDate.getMinutes() + amount,-1,60) ) { ok = 4; }
|
---|
689 | break;
|
---|
690 | case 's':
|
---|
691 | if ( w._btwn(w.theDate.getSeconds() + amount,-1,60) ) { ok = 5; }
|
---|
692 | break;
|
---|
693 | case 'a':
|
---|
694 | w._offset('h',((amount>0)?1:-1)*12,false);
|
---|
695 | break;
|
---|
696 | }
|
---|
697 | }
|
---|
698 | if ( ok !== false ) { w.theDate.adj(ok,amount); }
|
---|
699 | if ( update === true ) { w.refresh(); }
|
---|
700 | if ( o.useImmediate ) { w.d.input.trigger('datebox', {'method':'doset'}); }
|
---|
701 | },
|
---|
702 | _startOffset: function(date) {
|
---|
703 | var o = this.options;
|
---|
704 |
|
---|
705 | if ( o.startOffsetYears !== false ) {
|
---|
706 | date.adj(0, o.startOffsetYears);
|
---|
707 | }
|
---|
708 | if ( o.startOffsetMonths !== false ) {
|
---|
709 | date.adj(1, o.startOffsetMonths);
|
---|
710 | }
|
---|
711 | if ( o.startOffsetDays !== false ) {
|
---|
712 | date.adj(2, o.startOffsetDays);
|
---|
713 | }
|
---|
714 | return date;
|
---|
715 | },
|
---|
716 | _create: function() {
|
---|
717 | // Create the widget, called automatically by widget system
|
---|
718 | $( document ).trigger( "dateboxcreate" );
|
---|
719 |
|
---|
720 | var w = this,
|
---|
721 | o = $.extend(this.options, (typeof this.element.jqmData('options') !== 'undefined') ? this.element.jqmData('options') : this._getLongOptions(this.element) ),
|
---|
722 | thisTheme = ( o.theme === false && typeof($(this).jqmData('theme')) === 'undefined' ) ?
|
---|
723 | ( ( typeof(this.element.parentsUntil(':jqmData(theme)').parent().jqmData('theme')) === 'undefined' ) ?
|
---|
724 | o.themeDefault : this.element.parentsUntil(':jqmData(theme)').parent().jqmData('theme') )
|
---|
725 | : o.theme,
|
---|
726 | trans = o.useAnimation ? o.transition : 'none',
|
---|
727 | d = o.useNewStyle === false ? {
|
---|
728 | input: this.element,
|
---|
729 | wrap: this.element.wrap('<div class="ui-input-datebox ui-shadow-inset ui-corner-all '+ (this.element.jqmData("mini") === true ? 'ui-mini ':'') +'ui-body-'+ thisTheme +'"></div>').parent(),
|
---|
730 | mainWrap: $("<div>", { "class": 'ui-datebox-container ui-overlay-shadow ui-corner-all ui-datebox-hidden '+trans+' ui-body-'+thisTheme} ).css('zIndex', o.zindex),
|
---|
731 | intHTML: false
|
---|
732 | } : {
|
---|
733 | input: this.element,
|
---|
734 | wrap: this.element,
|
---|
735 | mainWrap: $("<div>", { "class": 'ui-datebox-container ui-overlay-shadow ui-corner-all ui-datebox-hidden '+trans+' ui-body-'+thisTheme} ).css('zIndex', o.zindex),
|
---|
736 | intHTML: false
|
---|
737 | },
|
---|
738 | touch = ( typeof window.ontouchstart !== 'undefined' ),
|
---|
739 | drag = {
|
---|
740 | eStart : (touch ? 'touchstart' : 'mousedown')+'.datebox',
|
---|
741 | eMove : (touch ? 'touchmove' : 'mousemove')+'.datebox',
|
---|
742 | eEnd : (touch ? 'touchend' : 'mouseup')+'.datebox',
|
---|
743 | eEndA : (touch ? 'mouseup.datebox touchend.datebox touchcancel.datebox touchmove.datebox' : 'mouseup.datebox'),
|
---|
744 | move : false,
|
---|
745 | start : false,
|
---|
746 | end : false,
|
---|
747 | pos : false,
|
---|
748 | target : false,
|
---|
749 | delta : false,
|
---|
750 | tmp : false
|
---|
751 | },
|
---|
752 | calc = { },
|
---|
753 | ns = (typeof $.mobile.ns !== 'undefined')?$.mobile.ns:'';
|
---|
754 |
|
---|
755 | $.extend(w, {d: d, ns: ns, drag: drag, touch:touch});
|
---|
756 |
|
---|
757 | if ( o.usePlaceholder !== false ) {
|
---|
758 | if ( o.usePlaceholder === true && w._grabLabel() !== false ) { w.d.input.attr('placeholder', w._grabLabel()); }
|
---|
759 | if ( typeof o.usePlaceholder === 'string' ) { w.d.input.attr('placeholder', o.usePlaceholder); }
|
---|
760 | }
|
---|
761 |
|
---|
762 | o.theme = thisTheme;
|
---|
763 |
|
---|
764 | w.clearFunc = false;
|
---|
765 | w.disabled = false;
|
---|
766 | w.runButton = false;
|
---|
767 | w._date = window.Date;
|
---|
768 | w._enhanceDate();
|
---|
769 | w.baseID = w.d.input.attr('id');
|
---|
770 |
|
---|
771 | w.initDate = new w._date();
|
---|
772 | w.theDate = (o.defaultValue) ? w._makeDate(o.defaultValue) : ( (w.d.input.val() !== "") ? w._makeDate(w.d.input.val()) : new w._date() );
|
---|
773 | w.initDone = false;
|
---|
774 |
|
---|
775 | if ( o.showInitialValue === true ) {
|
---|
776 | w.d.input.val(w._formatter(w.__fmt(), w.theDate));
|
---|
777 | }
|
---|
778 |
|
---|
779 | if ( o.useButton === true && o.useInline === false && o.useNewStyle === false ) {
|
---|
780 | w.d.open = $('<a href="#" class="ui-input-clear" title="'+this.__('tooltip')+'">'+this.__('tooltip')+'</a>')
|
---|
781 | .on(o.clickEvent, function(e) {
|
---|
782 | e.preventDefault();
|
---|
783 | if ( !w.disabled ) { w.d.input.trigger('datebox', {'method': 'open'}); w.d.wrap.parent().addClass('ui-focus'); w.d.input.parent().removeClass('ui-focus'); }
|
---|
784 | setTimeout( function() { $(e.target).closest('a').removeClass($.mobile.activeBtnClass); }, 300);
|
---|
785 | }).appendTo(w.d.wrap).buttonMarkup({icon: 'grid', iconpos: 'notext', corners:true, shadow:true})
|
---|
786 | .css({'vertical-align': 'middle', 'display': 'inline-block'});
|
---|
787 | }
|
---|
788 |
|
---|
789 | w.d.screen = $("<div>", {'class':'ui-datebox-screen ui-datebox-hidden'+((o.useModal)?' ui-datebox-screen-modal':'')})
|
---|
790 | .css({'z-index': o.zindex-1})
|
---|
791 | .on(o.clickEventAlt, function(e) {
|
---|
792 | e.preventDefault();
|
---|
793 | w.d.input.trigger('datebox', {'method':'close'});
|
---|
794 | });
|
---|
795 |
|
---|
796 | if ( o.enhanceInput === true && navigator.userAgent.match(/Android/i) ){
|
---|
797 | w.inputType = 'number';
|
---|
798 | } else {
|
---|
799 | w.inputType = 'text';
|
---|
800 | }
|
---|
801 |
|
---|
802 | if ( o.hideInput ) { w.d.wrap.parent().hide(); }
|
---|
803 |
|
---|
804 | if ( o.mobVer < 140 ) {
|
---|
805 | $('label[for=\''+w.d.input.attr('id')+'\']').addClass('ui-input-text').css('verticalAlign', 'middle');
|
---|
806 | }
|
---|
807 |
|
---|
808 | w.d.wrap.on(o.clickEvent, function() {
|
---|
809 | if ( !w.disabled && ( o.noButtonFocusMode || o.focusMode ) ) {
|
---|
810 | w.d.input.trigger('datebox', {'method': 'open'});
|
---|
811 | w.d.wrap.addClass('ui-focus');
|
---|
812 | w.d.input.removeClass('ui-focus');
|
---|
813 | }
|
---|
814 | });
|
---|
815 |
|
---|
816 | w.d.input
|
---|
817 | .removeClass('ui-corner-all ui-shadow-inset')
|
---|
818 | .bind(w.touch?'touchend':'click', function(e){
|
---|
819 | if ( w.disabled === false && o.useNewStyle === true && o.useFocus === false ) {
|
---|
820 | if ( ((w.touch ? e.originalEvent.changedTouches[0].pageX : e.pageX) - e.target.offsetLeft) > (e.target.offsetWidth - 20) ) {
|
---|
821 | w.d.input.trigger('datebox', {'method': 'open'}); w.d.wrap.parent().addClass('ui-focus'); w.d.input.removeClass('ui-focus');
|
---|
822 | //setTimeout(function(){w.d.wrap.addClass('ui-focus');}, 200);
|
---|
823 | }
|
---|
824 | }
|
---|
825 | })
|
---|
826 | .focus(function(){
|
---|
827 | if ( w.disabled === false && o.useFocus === true ) {
|
---|
828 | w.d.input.trigger('datebox', {'method': 'open'}); w.d.wrap.addClass('ui-focus'); w.d.input.removeClass('ui-focus');
|
---|
829 | if ( o.useNewStyle === false ) { w.d.input.parent().removeClass('ui-focus'); w.d.wrap.parent().addClass('ui-focus'); }
|
---|
830 | }
|
---|
831 | if ( o.useNewStyle === false ) { w.d.input.removeClass('ui-focus'); }
|
---|
832 | })
|
---|
833 | .blur(function(){
|
---|
834 | w.d.wrap.removeClass('ui-focus');
|
---|
835 | w.d.input.removeClass('ui-focus');
|
---|
836 | })
|
---|
837 | .change(function() {
|
---|
838 | w.theDate = w._makeDate(w.d.input.val());
|
---|
839 | w.refresh();
|
---|
840 | })
|
---|
841 | .attr("readonly", o.lockInput)
|
---|
842 | .on('datebox', w._event);
|
---|
843 |
|
---|
844 | if ( o.useNewStyle === true ) {
|
---|
845 | w.d.input.addClass('ui-corner-all '+((o.useAltIcon===true)?'ui-icon-datebox-alt':'ui-icon-datebox'));
|
---|
846 | if ( o.overrideStyleClass !== false ) { w.d.input.addClass(o.overrideStyleClass); }
|
---|
847 | } else {
|
---|
848 | w.d.input.parent().css('border', 'none').removeClass('ui-shadow-inset');
|
---|
849 | }
|
---|
850 |
|
---|
851 | w.d.wrap.parent().on(o.clickEvent, function() {
|
---|
852 | if ( !w.disabled && o.useFocus === true && o.useNewStyle === false ) {
|
---|
853 | w.d.input.trigger('datebox', {'method': 'open'}); w.d.wrap.addClass('ui-focus'); w.d.input.removeClass('ui-focus');
|
---|
854 | setTimeout(function(){
|
---|
855 | w.d.wrap.removeClass('ui-focus');
|
---|
856 | w.d.wrap.parent().addClass('ui-focus');
|
---|
857 | }, 500);
|
---|
858 | }
|
---|
859 | });
|
---|
860 |
|
---|
861 | // Check if mousewheel plugin is loaded
|
---|
862 | if ( typeof $.event.special.mousewheel !== 'undefined' ) { w.wheelExists = true; }
|
---|
863 |
|
---|
864 | // Disable when done if element attribute disabled is true.
|
---|
865 | if ( w.d.input.is(':disabled') ) {
|
---|
866 | w.disable();
|
---|
867 | }
|
---|
868 |
|
---|
869 | if ( o.useInline === true || o.useInlineBlind ) { w.open(); }
|
---|
870 |
|
---|
871 | w.applyMinMax(false, false);
|
---|
872 |
|
---|
873 | //Throw dateboxinit event
|
---|
874 | $( document ).trigger( "dateboxaftercreate" );
|
---|
875 | },
|
---|
876 | applyMinMax: function(refresh, override) {
|
---|
877 | var w = this,
|
---|
878 | o = this.options,
|
---|
879 | calc = {};
|
---|
880 |
|
---|
881 | if ( typeof refresh === 'undefined' ) { refresh = false; }
|
---|
882 | if ( typeof override === 'undefined' ) { override = true; }
|
---|
883 |
|
---|
884 | if ( ( override === true || o.minDays === false ) && typeof(w.d.input.attr('min')) !== 'undefined' ) {
|
---|
885 | calc.today = new w._date();
|
---|
886 | calc.lod = 24 * 60 * 60 * 1000;
|
---|
887 | calc.todayc = new w._date(calc.today.getFullYear(), calc.today.getMonth(), calc.today.getDate(), 0,0,0,0);
|
---|
888 | calc.fromel = w.d.input.attr('min').split('-');
|
---|
889 | calc.compdt = new w._date(calc.fromel[0],calc.fromel[1]-1,calc.fromel[2],0,0,0,0);
|
---|
890 | o.minDays = parseInt((((calc.compdt.getTime() - calc.todayc.getTime()) / calc.lod))*-1,10);
|
---|
891 | }
|
---|
892 | if ( ( override === true || o.maxDays === false ) && typeof(w.d.input.attr('max')) !== 'undefined' ) {
|
---|
893 | calc.today = new w._date();
|
---|
894 | calc.lod = 24 * 60 * 60 * 1000;
|
---|
895 | calc.todayc = new w._date(calc.today.getFullYear(), calc.today.getMonth(), calc.today.getDate(), 0,0,0,0);
|
---|
896 | calc.fromel = w.d.input.attr('max').split('-');
|
---|
897 | calc.compdt = new w._date(calc.fromel[0],calc.fromel[1]-1,calc.fromel[2],0,0,0,0);
|
---|
898 | o.maxDays = parseInt((((calc.compdt.getTime() - calc.todayc.getTime()) / calc.lod)),10);
|
---|
899 | }
|
---|
900 |
|
---|
901 | if ( refresh === true ) { w.refresh(); }
|
---|
902 | },
|
---|
903 | _build: {
|
---|
904 | 'default': function () {
|
---|
905 | this.d.headerText = "Error";
|
---|
906 | this.d.intHTML = $("<div class='ui-body-b'><h2 style='text-align:center'>There is no mode by that name loaded / mode not given</h2></div>");
|
---|
907 | }
|
---|
908 | },
|
---|
909 | _applyCoords: function(e) {
|
---|
910 | var w = e.widget,
|
---|
911 | o = e.widget.options,
|
---|
912 | fixd = {
|
---|
913 | h: $.mobile.activePage.find('.ui-header').jqmData('position'),
|
---|
914 | f: $.mobile.activePage.find('.ui-footer').jqmData('position'),
|
---|
915 | fh: $.mobile.activePage.find('.ui-footer').outerHeight(),
|
---|
916 | hh: $.mobile.activePage.find('.ui-header').outerHeight()
|
---|
917 | },
|
---|
918 | iput = {
|
---|
919 | x: w.d.wrap.offset().left + (w.d.wrap.outerWidth() / 2),
|
---|
920 | y: w.d.wrap.offset().top + (w.d.wrap.outerHeight() / 2)
|
---|
921 | },
|
---|
922 | size = {
|
---|
923 | w: w.d.mainWrap.outerWidth(),
|
---|
924 | h: w.d.mainWrap.outerHeight()
|
---|
925 | },
|
---|
926 | doc = {
|
---|
927 | t: $(window).scrollTop(),
|
---|
928 | h: $(window).height(),
|
---|
929 | w: $.mobile.activePage.width(),
|
---|
930 | ah: $(document).height()
|
---|
931 | },
|
---|
932 | pos = {
|
---|
933 | y: (o.centerVert) ? doc.t + ((doc.h / 2) - (size.h / 2)) : iput.y - ( size.h / 2 ),
|
---|
934 | x: (doc.w < 400 || o.centerHoriz ) ? (doc.w / 2) - (size.w /2) : iput.x - (size.w / 2)
|
---|
935 | };
|
---|
936 |
|
---|
937 | if ( o.centerVert === false ) {
|
---|
938 | if ( o.hideFixedToolbars === true && ( typeof fixd.f !== 'undefined' || typeof fixd.h !== 'undefined' )) {
|
---|
939 | $.mobile.activePage.find(":jqmData(position='fixed')").fixedtoolbar('hide');
|
---|
940 | fixd.f = undefined;
|
---|
941 | fixd.h = undefined;
|
---|
942 | }
|
---|
943 |
|
---|
944 | if ( typeof fixd.f !== 'undefined' ) {
|
---|
945 | if ( ( pos.y + size.h ) > ( doc.h - fixd.fh - 2 ) ) {
|
---|
946 | pos.y = doc.h - fixd.fh - 2 - size.h;
|
---|
947 | }
|
---|
948 | } else {
|
---|
949 | if ( ( pos.y + size.h ) > ( doc.ah - fixd.fh - 2 ) ) {
|
---|
950 | pos.y = doc.ah - fixd.fh - 2 - size.h;
|
---|
951 | }
|
---|
952 | if ( ( doc.h + doc.t ) < ( size.h + pos.y + 2 ) ) {
|
---|
953 | pos.y = doc.h + doc.t - size.h - 2;
|
---|
954 | }
|
---|
955 | }
|
---|
956 |
|
---|
957 | if ( typeof fixd.h !== 'undefined' ) {
|
---|
958 | if ( ( doc.t + fixd.hh + 2 ) > pos.y ) {
|
---|
959 | pos.y = doc.t + fixd.hh + 2;
|
---|
960 | }
|
---|
961 | } else {
|
---|
962 | if ( fixd.hh + 2 > pos.y ) {
|
---|
963 | pos.y = fixd.hh + 2;
|
---|
964 | }
|
---|
965 | if ( pos.y < doc.t + 2 ) {
|
---|
966 | pos.y = doc.t + 2;
|
---|
967 | }
|
---|
968 | }
|
---|
969 | }
|
---|
970 | w.d.mainWrap.css({'position': 'absolute', 'top': pos.y, 'left': pos.x});
|
---|
971 | },
|
---|
972 | _drag: {
|
---|
973 | 'default': function () { return false; }
|
---|
974 | },
|
---|
975 | open: function () {
|
---|
976 | var w = this,
|
---|
977 | o = this.options,
|
---|
978 | popopts = {},
|
---|
979 | basepop = {'history':false},
|
---|
980 | qns = 'data-'+this.ns,
|
---|
981 | trans = o.useAnimation ? o.transition : 'none';
|
---|
982 |
|
---|
983 | if ( o.useFocus === true && w.fastReopen === true ) { w.d.input.blur(); return false; }
|
---|
984 | if ( w.clearFunc !== false ) {
|
---|
985 | clearTimeout(w.clearFunc); w.clearFunc = false;
|
---|
986 | }
|
---|
987 |
|
---|
988 | // Call the open callback if provided. Additionally, if this
|
---|
989 | // returns false then the open/update will stop.
|
---|
990 | if ( o.openCallback !== false ) {
|
---|
991 | if ( ! $.isFunction(o.openCallback) ) {
|
---|
992 | if ( typeof window[o.openCallback] !== 'undefined' ) {
|
---|
993 | o.openCallback = window[o.openCallback];
|
---|
994 | } else {
|
---|
995 | o.openCallback = new Function(o.openCallback);
|
---|
996 | }
|
---|
997 | }
|
---|
998 | if ( o.openCallback.apply(w, $.merge([w.theDate],o.openCallbackArgs)) === false ) { return false; }
|
---|
999 | }
|
---|
1000 |
|
---|
1001 | w.theDate = w._makeDate(w.d.input.val());
|
---|
1002 | if ( w.d.input.val() === "" ) { w._startOffset(w.theDate); }
|
---|
1003 | w.d.input.blur();
|
---|
1004 |
|
---|
1005 | if ( typeof w._build[o.mode] === 'undefined' ) {
|
---|
1006 | w._build['default'].apply(w,[]);
|
---|
1007 | } else {
|
---|
1008 | w._build[o.mode].apply(w,[]);
|
---|
1009 | }
|
---|
1010 | if ( typeof w._drag[o.mode] !== 'undefined' ) {
|
---|
1011 | w._drag[o.mode].apply(w, []);
|
---|
1012 | }
|
---|
1013 | w.d.input.trigger('datebox', {'method':'refresh'});
|
---|
1014 | if ( w.__('useArabicIndic') === true ) { w._doIndic(); }
|
---|
1015 |
|
---|
1016 | if ( ( o.useInline === true || o.useInlineBlind === true ) && w.initDone === false ) {
|
---|
1017 | w.d.mainWrap.append(w.d.intHTML);
|
---|
1018 | w.d.input.parent().parent().append(w.d.mainWrap);
|
---|
1019 | w.d.mainWrap.removeClass('ui-datebox-hidden');
|
---|
1020 | if ( o.useInline === true ) {
|
---|
1021 | w.d.mainWrap.addClass('ui-datebox-inline');
|
---|
1022 | } else {
|
---|
1023 | w.d.mainWrap.addClass('ui-datebox-inlineblind');
|
---|
1024 | w.d.mainWrap.hide();
|
---|
1025 | }
|
---|
1026 | w.initDone = false;
|
---|
1027 | w.d.input.trigger('datebox',{'method':'postrefresh'});
|
---|
1028 | }
|
---|
1029 |
|
---|
1030 | if ( o.useImmediate ) { w.d.input.trigger('datebox', {'method':'doset'}); }
|
---|
1031 | if ( o.useInline ) { return true; }
|
---|
1032 | if ( o.useInlineBlind ) {
|
---|
1033 | if ( w.initDone ) { w.d.mainWrap.slideDown(); }
|
---|
1034 | else { w.initDone = true; }
|
---|
1035 | return true;
|
---|
1036 | }
|
---|
1037 | if ( w.d.intHTML.is(':visible') ) { return false; } // Ignore if already open
|
---|
1038 |
|
---|
1039 | if ( o.enablePopup === true ) {
|
---|
1040 | w.d.dialogPage = false;
|
---|
1041 | w.d.mainWrap.empty();
|
---|
1042 | if ( o.useHeader === true ) {
|
---|
1043 | w.d.headHTML = $('<div class="ui-header ui-bar-'+o.themeHeader+'"></div>');
|
---|
1044 | $("<a class='ui-btn-left' href='#'>Close</a>").appendTo(w.d.headHTML)
|
---|
1045 | .buttonMarkup({ theme : o.themeHeader, icon : 'delete', iconpos: 'notext', corners: true, shadow : true })
|
---|
1046 | .on(o.clickEventAlt, function(e) { e.preventDefault(); w.d.input.trigger('datebox', {'method':'close'}); });
|
---|
1047 | $('<h1 class="ui-title">'+w.d.headerText+'</h1>').appendTo(w.d.headHTML);
|
---|
1048 | w.d.mainWrap.append(w.d.headHTML);
|
---|
1049 | }
|
---|
1050 | w.d.mainWrap.append(w.d.intHTML).css('zIndex', o.zindex);
|
---|
1051 | w.d.input.trigger('datebox',{'method':'postrefresh'});
|
---|
1052 |
|
---|
1053 | if ( o.useAnimation === true ) {
|
---|
1054 | popopts.transition = o.transition;
|
---|
1055 | } else {
|
---|
1056 | popopts.transition = "none";
|
---|
1057 | }
|
---|
1058 |
|
---|
1059 | if ( o.popupForceX !== false && o.popupForceY !== false ) {
|
---|
1060 | popopts.x = o.popupForceX;
|
---|
1061 | popopts.y = o.popupForceY;
|
---|
1062 | }
|
---|
1063 |
|
---|
1064 | if ( o.popupPosition !== false ) {
|
---|
1065 | popopts.positionTo = o.popupPosition;
|
---|
1066 | } else {
|
---|
1067 | if ( typeof w.baseID !== undefined ) {
|
---|
1068 | popopts.positionTo = '#' + w.baseID;
|
---|
1069 | } else {
|
---|
1070 | popopts.positionTo = 'window';
|
---|
1071 | }
|
---|
1072 | }
|
---|
1073 |
|
---|
1074 | if ( o.useModal === true ) { basepop.overlayTheme = "a"; }
|
---|
1075 |
|
---|
1076 | w.d.mainWrap.removeClass('ui-datebox-hidden').popup(basepop).popup("open", popopts);
|
---|
1077 | w.refresh();
|
---|
1078 | } else {
|
---|
1079 | if ( o.dialogForce || ( o.dialogEnable && window.width() < 400 ) ) {
|
---|
1080 | w.d.dialogPage = $("<div "+qns+"role='dialog' "+qns+"theme='"+o.theme+"' >" +
|
---|
1081 | "<div "+qns+"role='header' "+qns+"theme='"+o.themeHeader+"'>" +
|
---|
1082 | "<h1>"+w.d.headerText+"</h1></div><div "+qns+"role='content'></div>")
|
---|
1083 | .appendTo( $.mobile.pageContainer )
|
---|
1084 | .page().css('minHeight', '0px').addClass(trans);
|
---|
1085 | w.d.dialogPage.find('.ui-header').find('a').off('click vclick').on(o.clickEventAlt, function(e) { e.preventDefault(); w.d.input.trigger('datebox', {'method':'close'}); });
|
---|
1086 | w.d.mainWrap.append(w.d.intHTML).css({'marginLeft':'auto', 'marginRight':'auto'}).removeClass('ui-datebox-hidden');
|
---|
1087 | w.d.dialogPage.find('.ui-content').append(w.d.mainWrap);
|
---|
1088 | w.d.input.trigger('datebox',{'method':'postrefresh'});
|
---|
1089 | $.mobile.activePage.off( "pagehide.remove" );
|
---|
1090 | $.mobile.changePage(w.d.dialogPage, {'transition': trans});
|
---|
1091 | } else {
|
---|
1092 | w.d.dialogPage = false;
|
---|
1093 | w.d.mainWrap.empty();
|
---|
1094 | if ( o.useHeader === true ) {
|
---|
1095 | w.d.headHTML = $('<div class="ui-header ui-bar-'+o.themeHeader+'"></div>');
|
---|
1096 | $("<a class='ui-btn-left' href='#'>Close</a>").appendTo(w.d.headHTML)
|
---|
1097 | .buttonMarkup({ theme : o.themeHeader, icon : 'delete', iconpos: 'notext', corners: true, shadow : true })
|
---|
1098 | .on(o.clickEventAlt, function(e) { e.preventDefault(); w.d.input.trigger('datebox', {'method':'close'}); });
|
---|
1099 | $('<h1 class="ui-title">'+w.d.headerText+'</h1>').appendTo(w.d.headHTML);
|
---|
1100 | w.d.mainWrap.append(w.d.headHTML);
|
---|
1101 | }
|
---|
1102 | w.d.mainWrap.append(w.d.intHTML).css('zIndex', o.zindex);
|
---|
1103 | w.d.mainWrap.appendTo($.mobile.activePage);
|
---|
1104 | w.d.screen.appendTo($.mobile.activePage);
|
---|
1105 | w.d.input.trigger('datebox',{'method':'postrefresh'});
|
---|
1106 | w._applyCoords({widget:w});
|
---|
1107 |
|
---|
1108 | if ( o.useModal === true ) {
|
---|
1109 | if(o.useAnimation) {
|
---|
1110 | w.d.screen.fadeIn('slow');
|
---|
1111 | } else {
|
---|
1112 | w.d.screen.show();
|
---|
1113 | }
|
---|
1114 | } else {
|
---|
1115 | setTimeout(function () { w.d.screen.removeClass('ui-datebox-hidden');}, 500);
|
---|
1116 | }
|
---|
1117 |
|
---|
1118 | w.d.mainWrap.addClass('ui-overlay-shadow in').removeClass('ui-datebox-hidden');
|
---|
1119 |
|
---|
1120 | $(document).on('orientationchange.datebox', {widget:w}, function(e) { w._applyCoords(e.data); });
|
---|
1121 | if ( o.resizeListener === true ) {
|
---|
1122 | $(window).on('resize.datebox', {widget:w}, function (e) { w._applyCoords(e.data); });
|
---|
1123 | }
|
---|
1124 | }
|
---|
1125 | }
|
---|
1126 | },
|
---|
1127 | close: function() {
|
---|
1128 | var w = this,
|
---|
1129 | o = this.options;
|
---|
1130 |
|
---|
1131 | if ( o.useInlineBlind === true ) { w.d.mainWrap.slideUp(); return true;}
|
---|
1132 | if ( o.useInline === true || w.d.intHTML === false ) { return true; }
|
---|
1133 |
|
---|
1134 | if ( w.d.dialogPage !== false ) {
|
---|
1135 | $(w.d.dialogPage).dialog('close');
|
---|
1136 |
|
---|
1137 | if ( ! $.mobile.activePage.jqmData('mobile-page').options.domCache ) {
|
---|
1138 | $.mobile.activePage.on('pagehide.remove', function () { $(this).remove(); });
|
---|
1139 | }
|
---|
1140 |
|
---|
1141 | w.d.intHTML.detach().empty();
|
---|
1142 | w.d.mainWrap.detach().empty();
|
---|
1143 | w.d.wrap.removeClass('ui-focus');
|
---|
1144 | w.clearFunc = setTimeout(function () { w.d.dialogPage.empty().remove(); w.clearFunc = false; }, 1500);
|
---|
1145 | } else {
|
---|
1146 | if ( o.enablePopup === true ) {
|
---|
1147 | w.d.mainWrap.popup('close');
|
---|
1148 | w.d.wrap.removeClass('ui-focus');
|
---|
1149 | } else {
|
---|
1150 | if ( o.useModal ) {
|
---|
1151 | if(o.useAnimation) {
|
---|
1152 | w.d.screen.fadeOut('slow');
|
---|
1153 | } else {
|
---|
1154 | w.d.screen.hide();
|
---|
1155 | }
|
---|
1156 | } else {
|
---|
1157 | w.d.screen.addClass('ui-datebox-hidden');
|
---|
1158 | }
|
---|
1159 | w.d.screen.detach();
|
---|
1160 | w.d.mainWrap.addClass('ui-datebox-hidden').removeAttr('style').removeClass('in ui-overlay-shadow').empty().detach();
|
---|
1161 | w.d.intHTML.detach();
|
---|
1162 | w.d.wrap.removeClass('ui-focus');
|
---|
1163 |
|
---|
1164 | $(document).off('orientationchange.datebox');
|
---|
1165 | if ( o.resizeListener === true ) {
|
---|
1166 | $(window).off('resize.datebox');
|
---|
1167 | }
|
---|
1168 | }
|
---|
1169 | }
|
---|
1170 | w.d.wrap.parent().removeClass('ui-focus');
|
---|
1171 |
|
---|
1172 | $(document).off(w.drag.eMove);
|
---|
1173 | $(document).off(w.drag.eEnd);
|
---|
1174 | $(document).off(w.drag.eEndA);
|
---|
1175 |
|
---|
1176 | if ( o.useFocus ) {
|
---|
1177 | w.fastReopen = true;
|
---|
1178 | setTimeout(function(t) { return function () { t.fastReopen = false; };}(w), 300);
|
---|
1179 | }
|
---|
1180 |
|
---|
1181 | if ( o.closeCallback !== false ) {
|
---|
1182 | if ( ! $.isFunction(o.closeCallback) ) {
|
---|
1183 | if ( typeof window[o.closeCallback] !== 'undefined' ) {
|
---|
1184 | o.closeCallback = window[o.closeCallback];
|
---|
1185 | } else {
|
---|
1186 | o.closeCallback = new Function(o.closeCallback);
|
---|
1187 | }
|
---|
1188 | }
|
---|
1189 | o.closeCallback.apply(w, $.merge([w.theDate], o.closeCallbackArgs));
|
---|
1190 | }
|
---|
1191 | },
|
---|
1192 | refresh: function() {
|
---|
1193 | if ( typeof this._build[this.options.mode] === 'undefined' ) {
|
---|
1194 | this._build['default'].apply(this,[]);
|
---|
1195 | } else {
|
---|
1196 | this._build[this.options.mode].apply(this,[]);
|
---|
1197 | }
|
---|
1198 | if ( this.__('useArabicIndic') === true ) { this._doIndic(); }
|
---|
1199 | this.d.mainWrap.append(this.d.intHTML);
|
---|
1200 | this.d.input.trigger('datebox',{'method':'postrefresh'});
|
---|
1201 | },
|
---|
1202 | _check: function() {
|
---|
1203 | var w = this,
|
---|
1204 | td = null,
|
---|
1205 | o = this.options;
|
---|
1206 |
|
---|
1207 | w.dateOK = true;
|
---|
1208 |
|
---|
1209 | if ( o.afterToday !== false ) {
|
---|
1210 | td = new w._date();
|
---|
1211 | if ( w.theDate < td ) { w.theDate = td; }
|
---|
1212 | }
|
---|
1213 | if ( o.beforeToday !== false ) {
|
---|
1214 | td = new w._date();
|
---|
1215 | if ( w.theDate > td ) { w.theDate = td; }
|
---|
1216 | }
|
---|
1217 | if ( o.maxDays !== false ) {
|
---|
1218 | td = new w._date();
|
---|
1219 | td.adj(2, o.maxDays);
|
---|
1220 | if ( w.theDate > td ) { w.theDate = td; }
|
---|
1221 | }
|
---|
1222 | if ( o.minDays !== false ) {
|
---|
1223 | td = new w._date();
|
---|
1224 | td.adj(2, -1*o.minDays);
|
---|
1225 | if ( w.theDate < td ) { w.theDate = td; }
|
---|
1226 | }
|
---|
1227 | if ( o.minHour !== false ) {
|
---|
1228 | if ( w.theDate.getHours() < o.minHour ) {
|
---|
1229 | w.theDate.setHours(o.minHour);
|
---|
1230 | }
|
---|
1231 | }
|
---|
1232 | if ( o.maxHour !== false ) {
|
---|
1233 | if ( w.theDate.getHours() > o.maxHour ) {
|
---|
1234 | w.theDate.setHours(o.maxHour);
|
---|
1235 | }
|
---|
1236 | }
|
---|
1237 | if ( o.maxYear !== false ) {
|
---|
1238 | td = new w._date(o.maxYear, 0, 1);
|
---|
1239 | td.adj(2, -1);
|
---|
1240 | if ( w.theDate > td ) { w.theDate = td; }
|
---|
1241 | }
|
---|
1242 | if ( o.minYear !== false ) {
|
---|
1243 | td = new w._date(o.minYear, 0, 1);
|
---|
1244 | if ( w.theDate < td ) { w.theDate = td; }
|
---|
1245 | }
|
---|
1246 |
|
---|
1247 | if ( $.inArray(o.mode, ['timebox','durationbox','durationflipbox','timeflipbox']) > -1 ) {
|
---|
1248 | if ( o.mode === 'timeflipbox' && o.validHours !== false ) {
|
---|
1249 | if ( $.inArray(w.theDate.getHours(), o.validHours) < 0 ) { w.dateOK = false; }
|
---|
1250 | }
|
---|
1251 | } else {
|
---|
1252 | if ( o.blackDatesRec !== false ) {
|
---|
1253 | for ( i=0; i<o.blackDatesRec.length; i++ ) {
|
---|
1254 | if (
|
---|
1255 | ( o.blackDatesRec[i][0] === -1 || o.blackDatesRec[i][0] === year ) &&
|
---|
1256 | ( o.blackDatesRec[i][1] === -1 || o.blackDatesRec[i][1] === month ) &&
|
---|
1257 | ( o.blackDatesRec[i][2] === -1 || o.blackDatesRec[i][2] === date )
|
---|
1258 | ) { w.dateOK = false; }
|
---|
1259 | }
|
---|
1260 | }
|
---|
1261 | if ( o.blackDates !== false ) {
|
---|
1262 | if ( $.inArray(w.theDate.iso(), o.blackDates) > -1 ) { w.dateOK = false; }
|
---|
1263 | }
|
---|
1264 | if ( o.blackDays !== false ) {
|
---|
1265 | if ( $.inArray(w.theDate.getDay(), o.blackDays) > -1 ) { w.dateOK = false; }
|
---|
1266 | }
|
---|
1267 | }
|
---|
1268 | },
|
---|
1269 | _grabLabel: function() {
|
---|
1270 | var w = this,
|
---|
1271 | o = this.options;
|
---|
1272 |
|
---|
1273 | if ( typeof o.overrideDialogLabel === 'undefined' ) {
|
---|
1274 | if ( typeof w.d.input.attr('placeholder') !== 'undefined' ) { return w.d.input.attr('placeholder'); }
|
---|
1275 | if ( typeof w.d.input.attr('title') !== 'undefined' ) { return w.d.input.attr('title'); }
|
---|
1276 | if ( w.d.wrap.parent().find('label[for=\''+w.d.input.attr('id')+'\']').text() !== '' ) {
|
---|
1277 | return w.d.wrap.parent().find('label[for=\''+w.d.input.attr('id')+'\']').text();
|
---|
1278 | }
|
---|
1279 | return false;
|
---|
1280 | }
|
---|
1281 | return o.overrideDialogLabel;
|
---|
1282 | },
|
---|
1283 | _makeEl: function(source, parts) {
|
---|
1284 | var part = false,
|
---|
1285 | retty = false;
|
---|
1286 |
|
---|
1287 | retty = source.clone();
|
---|
1288 |
|
---|
1289 | if ( typeof parts.attr !== 'undefined' ) {
|
---|
1290 | for ( part in parts.attr ) {
|
---|
1291 | if ( parts.attr.hasOwnProperty(part) ) {
|
---|
1292 | retty.jqmData(part, parts.attr[part]);
|
---|
1293 | }
|
---|
1294 | }
|
---|
1295 | }
|
---|
1296 | return retty;
|
---|
1297 | },
|
---|
1298 | _getLongOptions: function(element) {
|
---|
1299 | var key, retty = {}, prefix, temp;
|
---|
1300 |
|
---|
1301 | if ( $.mobile.ns === "" ) {
|
---|
1302 | prefix = "datebox";
|
---|
1303 | } else {
|
---|
1304 | prefix = $.mobile.ns.substr(0, $.mobile.ns.length - 1) + 'Datebox';
|
---|
1305 | }
|
---|
1306 |
|
---|
1307 | for ( key in element.data() ) {
|
---|
1308 | if ( key.substr(0, prefix.length) === prefix && key.length > prefix.length ) {
|
---|
1309 | temp = key.substr(prefix.length);
|
---|
1310 | temp = temp.charAt(0).toLowerCase() + temp.slice(1);
|
---|
1311 | retty[temp] = element.data(key);
|
---|
1312 | }
|
---|
1313 | }
|
---|
1314 | return retty;
|
---|
1315 | },
|
---|
1316 | disable: function(){
|
---|
1317 | // Disable the element
|
---|
1318 | this.d.input.attr("disabled",true);
|
---|
1319 | this.d.wrap.addClass("ui-disabled").blur();
|
---|
1320 | this.disabled = true;
|
---|
1321 | this.d.input.trigger('datebox', {'method':'disable'});
|
---|
1322 | },
|
---|
1323 | enable: function(){
|
---|
1324 | // Enable the element
|
---|
1325 | this.d.input.attr("disabled", false);
|
---|
1326 | this.d.wrap.removeClass("ui-disabled");
|
---|
1327 | this.disabled = false;
|
---|
1328 | this.d.input.trigger('datebox', {'method':'enable'});
|
---|
1329 | },
|
---|
1330 | _setOption: function() {
|
---|
1331 | $.Widget.prototype._setOption.apply( this, arguments );
|
---|
1332 | this.refresh();
|
---|
1333 | },
|
---|
1334 | getTheDate: function() {
|
---|
1335 | return this.theDate;
|
---|
1336 | },
|
---|
1337 | getLastDur: function() {
|
---|
1338 | return this.lastDuration;
|
---|
1339 | },
|
---|
1340 | setTheDate: function(newDate) {
|
---|
1341 | this.theDate = newDate;
|
---|
1342 | this.refresh();
|
---|
1343 | },
|
---|
1344 | callFormat: function(format, date) {
|
---|
1345 | return this._formatter(format, date);
|
---|
1346 | }
|
---|
1347 | });
|
---|
1348 |
|
---|
1349 | // Degrade date inputs to text inputs, suppress standard UI functions.
|
---|
1350 | $( document ).on( "pagebeforecreate", function( e ) {
|
---|
1351 | $( ":jqmData(role='datebox')", e.target ).each(function() {
|
---|
1352 | $(this).prop('type', 'text');
|
---|
1353 | });
|
---|
1354 | });
|
---|
1355 | // Automatically bind to data-role='datebox' items.
|
---|
1356 | $( document ).on( "pagecreate create", function( e ){
|
---|
1357 | $( document ).trigger( "dateboxbeforecreate" );
|
---|
1358 | $( ":jqmData(role='datebox')", e.target ).each(function() {
|
---|
1359 | var defed = typeof ($(this).data(parseInt($.mobile.version.replace(/\./g,''),10) > 111 ? 'mobile-datebox' : 'datebox'));
|
---|
1360 | if ( defed === "undefined" ) {
|
---|
1361 | $(this).datebox();
|
---|
1362 | }
|
---|
1363 | });
|
---|
1364 | });
|
---|
1365 | })( jQuery );
|
---|