15
15
* .ui-timepicker-div dl dt{ height: 25px; }
16
16
* .ui-timepicker-div dl dd{ margin: -25px 0 10px 65px; }
17
17
* .ui-timepicker-div td { font-size: 90%; }
18
+ *
19
+ *
20
+ * ADD THIS FOR THE timepicker_with_days:
21
+ *
22
+ * .ui-datepicker-buttonpane{ display: none; }
23
+ *
24
+ * .ui-datepicker {
25
+ * width: 300px;
26
+ * padding: 8px 7px 8px;
27
+ * height: 55px;
28
+ * margin-top: 5px;
29
+ * }
30
+ *
18
31
*/
19
32
20
33
( function ( $ ) {
@@ -32,34 +45,42 @@ function Timepicker() {
32
45
currentText : 'Now' ,
33
46
closeText : 'Done' ,
34
47
ampm : false ,
35
- timeFormat : 'hh:mm tt' ,
48
+ timeFormat : 'hh:mm tt' ,
36
49
timeOnlyTitle : 'Choose Time' ,
37
50
timeText : 'Time' ,
51
+ dayText : 'Day' ,
38
52
hourText : 'Hour' ,
39
53
minuteText : 'Minute' ,
40
54
secondText : 'Second'
41
55
} ;
42
56
this . _defaults = { // Global defaults for all the datetime picker instances
43
57
showButtonPanel : true ,
44
58
timeOnly : false ,
59
+ showTitle : true ,
60
+ showDay : false ,
45
61
showHour : true ,
46
62
showMinute : true ,
47
63
showSecond : false ,
48
64
showTime : true ,
65
+ stepDay : 0.05 ,
49
66
stepHour : 0.05 ,
50
67
stepMinute : 0.05 ,
51
68
stepSecond : 0.05 ,
69
+ day : 0 ,
52
70
hour : 0 ,
53
71
minute : 0 ,
54
72
second : 0 ,
73
+ dayMin : 0 ,
55
74
hourMin : 0 ,
56
75
minuteMin : 0 ,
57
76
secondMin : 0 ,
77
+ dayMax : 20 ,
58
78
hourMax : 23 ,
59
79
minuteMax : 59 ,
60
80
secondMax : 59 ,
61
81
minDateTime : null ,
62
- maxDateTime : null ,
82
+ maxDateTime : null ,
83
+ dayGrid : 0 ,
63
84
hourGrid : 0 ,
64
85
minuteGrid : 0 ,
65
86
secondGrid : 0 ,
@@ -76,15 +97,19 @@ $.extend(Timepicker.prototype, {
76
97
$altInput : null ,
77
98
$timeObj : null ,
78
99
inst : null ,
100
+ day_slider : null ,
79
101
hour_slider : null ,
80
102
minute_slider : null ,
81
103
second_slider : null ,
104
+ day : 0 ,
82
105
hour : 0 ,
83
106
minute : 0 ,
84
107
second : 0 ,
108
+ dayMinOriginal : null ,
85
109
hourMinOriginal : null ,
86
110
minuteMinOriginal : null ,
87
111
secondMinOriginal : null ,
112
+ dayMaxOriginal : null ,
88
113
hourMaxOriginal : null ,
89
114
minuteMaxOriginal : null ,
90
115
secondMaxOriginal : null ,
@@ -108,6 +133,7 @@ $.extend(Timepicker.prototype, {
108
133
var tp_inst = new Timepicker ( ) ,
109
134
inlineSettings = { } ;
110
135
136
+ tp_inst . day = tp_inst . _defaults . day ;
111
137
tp_inst . hour = tp_inst . _defaults . hour ;
112
138
tp_inst . minute = tp_inst . _defaults . minute ;
113
139
tp_inst . second = tp_inst . _defaults . second ;
@@ -248,6 +274,7 @@ $.extend(Timepicker.prototype, {
248
274
// Added by Peter Medeiros:
249
275
// - Figure out what the hour/minute/second max should be based on the step values.
250
276
// - Example: if stepMinute is 15, then minMax is 45.
277
+ dayMax = ( o . dayMax - ( o . dayMax % o . stepDay ) ) . toFixed ( 0 ) ,
251
278
hourMax = ( o . hourMax - ( o . hourMax % o . stepHour ) ) . toFixed ( 0 ) ,
252
279
minMax = ( o . minuteMax - ( o . minuteMax % o . stepMinute ) ) . toFixed ( 0 ) ,
253
280
secMax = ( o . secondMax - ( o . secondMax % o . stepSecond ) ) . toFixed ( 0 ) ,
@@ -262,13 +289,33 @@ $.extend(Timepicker.prototype, {
262
289
( ( o . showTime ) ? '' : noDisplay ) + '>' + o . timeText + '</dt>' +
263
290
'<dd class="ui_tpicker_time" id="ui_tpicker_time_' + dp_id + '"' +
264
291
( ( o . showTime ) ? '' : noDisplay ) + '></dd>' +
265
- '<dt class="ui_tpicker_hour_label" id="ui_tpicker_hour_label_' + dp_id + '"' +
266
- ( ( o . showHour ) ? '' : noDisplay ) + '>' + o . hourText + '</dt>' ,
292
+ '<dt class="ui_tpicker_day_label" id="ui_tpicker_day_label_' + dp_id + '"' +
293
+ ( ( o . showDay ) ? '' : noDisplay ) + '>' + o . dayText + '</dt>' ,
294
+ dayGridSize = 0 ,
267
295
hourGridSize = 0 ,
268
296
minuteGridSize = 0 ,
269
297
secondGridSize = 0 ,
270
298
size ;
271
-
299
+
300
+ if ( o . showDay && o . dayGrid > 0 ) {
301
+ html += '<dd class="ui_tpicker_day">' +
302
+ '<div id="ui_tpicker_day_' + dp_id + '"' + ( ( o . showDay ) ? '' : noDisplay ) + '></div>' +
303
+ '<div style="padding-left: 1px"><table><tr>' ;
304
+
305
+ for ( var h = o . dayMin ; h < hourMax ; h += o . dayGrid ) {
306
+ dayGridSize ++ ;
307
+ html += '<td>' + h + '</td>' ;
308
+ }
309
+
310
+ html += '</tr></table></div>' +
311
+ '</dd>' ;
312
+ } else html += '<dd class="ui_tpicker_day" id="ui_tpicker_day_' + dp_id + '"' +
313
+ ( ( o . showDay ) ? '' : noDisplay ) + '></dd>' ;
314
+
315
+
316
+ html += '<dt class="ui_tpicker_hour_label" id="ui_tpicker_hour_label_' + dp_id + '"' +
317
+ ( ( o . showHour ) ? '' : noDisplay ) + '>' + o . hourText + '</dt>' ;
318
+
272
319
if ( o . showHour && o . hourGrid > 0 ) {
273
320
html += '<dd class="ui_tpicker_hour">' +
274
321
'<div id="ui_tpicker_hour_' + dp_id + '"' + ( ( o . showHour ) ? '' : noDisplay ) + '></div>' +
@@ -334,16 +381,29 @@ $.extend(Timepicker.prototype, {
334
381
335
382
// if we only want time picker...
336
383
if ( o . timeOnly === true ) {
337
- $tp . prepend (
338
- '<div class="ui-widget-header ui-helper-clearfix ui-corner-all">' +
339
- '<div class="ui-datepicker-title">' + o . timeOnlyTitle + '</div>' +
340
- '</div>' ) ;
384
+ if ( o . showTitle )
385
+ $tp . prepend (
386
+ '<div class="ui-widget-header ui-helper-clearfix ui-corner-all">' +
387
+ '<div class="ui-datepicker-title">' + o . timeOnlyTitle + '</div>' +
388
+ '</div>' ) ;
341
389
$dp . find ( '.ui-datepicker-header, .ui-datepicker-calendar' ) . hide ( ) ;
342
390
}
343
391
392
+ this . day_slider = $tp . find ( '#ui_tpicker_day_' + dp_id ) . slider ( {
393
+ orientation : "horizontal" ,
394
+ value : o . day ,
395
+ min : o . dayMin ,
396
+ max : dayMax ,
397
+ step : o . stepDay ,
398
+ slide : function ( event , ui ) {
399
+ tp_inst . day_slider . slider ( "option" , "value" , ui . value ) ;
400
+ tp_inst . _onTimeChange ( ) ;
401
+ }
402
+ } ) ;
403
+
344
404
this . hour_slider = $tp . find ( '#ui_tpicker_hour_' + dp_id ) . slider ( {
345
405
orientation : "horizontal" ,
346
- value : this . hour ,
406
+ value : o . hour ,
347
407
min : o . hourMin ,
348
408
max : hourMax ,
349
409
step : o . stepHour ,
@@ -357,7 +417,7 @@ $.extend(Timepicker.prototype, {
357
417
// - Pass in Event and UI instance into slide function
358
418
this . minute_slider = $tp . find ( '#ui_tpicker_minute_' + dp_id ) . slider ( {
359
419
orientation : "horizontal" ,
360
- value : this . minute ,
420
+ value : o . minute ,
361
421
min : o . minuteMin ,
362
422
max : minMax ,
363
423
step : o . stepMinute ,
@@ -380,6 +440,25 @@ $.extend(Timepicker.prototype, {
380
440
}
381
441
} ) ;
382
442
443
+ if ( o . showDay && o . dayGrid > 0 ) {
444
+ size = 100 * dayGridSize * o . dayGrid / ( minMax - o . dayMin ) ;
445
+ $tp . find ( ".ui_tpicker_day table" ) . css ( {
446
+ width : size + "%" ,
447
+ marginLeft : ( size / ( - 2 * dayGridSize ) ) + "%" ,
448
+ borderCollapse : 'collapse'
449
+ } ) . find ( "td" ) . each ( function ( index ) {
450
+ $ ( this ) . click ( function ( ) {
451
+ tp_inst . day_slider . slider ( "option" , "value" , $ ( this ) . html ( ) ) ;
452
+ tp_inst . _onTimeChange ( ) ;
453
+ } ) . css ( {
454
+ cursor : 'pointer' ,
455
+ width : ( 100 / dayGridSize ) + '%' ,
456
+ textAlign : 'center' ,
457
+ overflow : 'hidden'
458
+ } ) ;
459
+ } ) ;
460
+ }
461
+
383
462
// Add grid functionality
384
463
if ( o . showHour && o . hourGrid > 0 ) {
385
464
size = 100 * hourGridSize * o . hourGrid / ( hourMax - o . hourMin ) ;
@@ -467,6 +546,7 @@ $.extend(Timepicker.prototype, {
467
546
var onSelectHandler = function ( ) {
468
547
onSelect . apply ( inputEl , [ tp_inst . formattedDateTime , tp_inst ] ) ; // trigger custom callback*/
469
548
}
549
+ this . day_slider . bind ( 'slidestop' , onSelectHandler ) ;
470
550
this . hour_slider . bind ( 'slidestop' , onSelectHandler ) ;
471
551
this . minute_slider . bind ( 'slidestop' , onSelectHandler ) ;
472
552
this . second_slider . bind ( 'slidestop' , onSelectHandler ) ;
@@ -546,10 +626,12 @@ $.extend(Timepicker.prototype, {
546
626
// on time change is also called when the time is updated in the text field
547
627
//########################################################################
548
628
_onTimeChange : function ( ) {
549
- var hour = ( this . hour_slider ) ? this . hour_slider . slider ( 'value' ) : false ,
629
+ var day = ( this . day_slider ) ? this . day_slider . slider ( 'value' ) : false ,
630
+ hour = ( this . hour_slider ) ? this . hour_slider . slider ( 'value' ) : false ,
550
631
minute = ( this . minute_slider ) ? this . minute_slider . slider ( 'value' ) : false ,
551
632
second = ( this . second_slider ) ? this . second_slider . slider ( 'value' ) : false ;
552
633
634
+ if ( day !== false ) day = parseInt ( day , 10 ) ;
553
635
if ( hour !== false ) hour = parseInt ( hour , 10 ) ;
554
636
if ( minute !== false ) minute = parseInt ( minute , 10 ) ;
555
637
if ( second !== false ) second = parseInt ( second , 10 ) ;
@@ -558,10 +640,10 @@ $.extend(Timepicker.prototype, {
558
640
559
641
// If the update was done in the input field, the input field should not be updated.
560
642
// If the update was done using the sliders, update the input field.
561
- var hasChanged = ( hour != this . hour || minute != this . minute || second != this . second || ( this . ampm . length > 0 && this . ampm != ampm ) ) ;
643
+ var hasChanged = ( day != this . day || hour != this . hour || minute != this . minute || second != this . second || ( this . ampm . length > 0 && this . ampm != ampm ) ) ;
562
644
563
645
if ( hasChanged ) {
564
-
646
+ if ( day !== false ) this . day = day ;
565
647
if ( hour !== false ) this . hour = hour ;
566
648
if ( minute !== false ) this . minute = minute ;
567
649
if ( second !== false ) this . second = second ;
@@ -579,13 +661,14 @@ $.extend(Timepicker.prototype, {
579
661
//########################################################################
580
662
_formatTime : function ( time , format , ampm ) {
581
663
if ( ampm == undefined ) ampm = this . _defaults . ampm ;
582
- time = time || { hour : this . hour , minute : this . minute , second : this . second , ampm : this . ampm } ;
664
+ time = time || { day : this . day , hour : this . hour , minute : this . minute , second : this . second , ampm : this . ampm } ;
583
665
var tmptime = format || this . _defaults . timeFormat . toString ( ) ;
584
666
585
667
if ( ampm ) {
586
668
var hour12 = ( ( time . ampm == 'AM' ) ? ( time . hour ) : ( time . hour % 12 ) ) ;
587
669
hour12 = ( Number ( hour12 ) === 0 ) ? 12 : hour12 ;
588
670
tmptime = tmptime . toString ( )
671
+ . replace ( / d d / g, time . day )
589
672
. replace ( / h h / g, ( ( hour12 < 10 ) ? '0' : '' ) + hour12 )
590
673
. replace ( / h / g, hour12 )
591
674
. replace ( / m m / g, ( ( time . minute < 10 ) ? '0' : '' ) + time . minute )
@@ -598,6 +681,7 @@ $.extend(Timepicker.prototype, {
598
681
. replace ( / t / g, time . ampm . charAt ( 0 ) . toLowerCase ( ) ) ;
599
682
} else {
600
683
tmptime = tmptime . toString ( )
684
+ . replace ( / d d / g, time . day )
601
685
. replace ( / h h / g, ( ( time . hour < 10 ) ? '0' : '' ) + time . hour )
602
686
. replace ( / h / g, time . hour )
603
687
. replace ( / m m / g, ( ( time . minute < 10 ) ? '0' : '' ) + time . minute )
@@ -665,6 +749,20 @@ $.fn.extend({
665
749
} ) ;
666
750
} ,
667
751
752
+ //########################################################################
753
+ // shorthand just to use timepicker_with_hours..
754
+ //########################################################################
755
+ timepicker_with_days : function ( o ) {
756
+ o = o || { } ;
757
+ var tmp_args = arguments ;
758
+
759
+ if ( typeof o == 'object' ) tmp_args [ 0 ] = $ . extend ( o , { timeFormat : 'dd:hh:mm' , timeOnly : true , showDay : true , showTime : false , showTitle : false } ) ;
760
+
761
+ return $ ( this ) . each ( function ( ) {
762
+ $ . fn . datetimepicker . apply ( $ ( this ) , tmp_args ) ;
763
+ } ) ;
764
+ } ,
765
+
668
766
//########################################################################
669
767
// extend timepicker to datepicker
670
768
//########################################################################
@@ -908,4 +1006,4 @@ function extendRemove(target, props) {
908
1006
$ . timepicker = new Timepicker ( ) ; // singleton instance
909
1007
$ . timepicker . version = "0.9.3" ;
910
1008
911
- } ) ( jQuery ) ;
1009
+ } ) ( jQuery ) ;
0 commit comments