2
2
* jQuery timepicker addon
3
3
* By: Trent Richardson [http://trentrichardson.com]
4
4
* Version 0.9.5
5
- * Last Modified: 05/25/2011
6
5
*
6
+ * Fork by Luke Niland [http://beakersoft.co.uk]
7
+ * Modified to include a slider for millseconds
8
+ *
7
9
* Copyright 2011 Trent Richardson
8
10
* Dual licensed under the MIT and GPL licenses.
9
11
* http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
@@ -53,16 +55,16 @@ function Timepicker() {
53
55
stepHour : 0.05 ,
54
56
stepMinute : 0.05 ,
55
57
stepSecond : 0.05 ,
56
- stepMillisec : 100 ,
58
+ stepMillisec : 0.05 ,
57
59
hour : 0 ,
58
60
minute : 0 ,
59
61
second : 0 ,
60
- millisecond : 0 ,
62
+ millisecond : 000 ,
61
63
timezone : '+0000' ,
62
64
hourMin : 0 ,
63
65
minuteMin : 0 ,
64
66
secondMin : 0 ,
65
- millisecMin : 0 ,
67
+ millisecMin : 000 ,
66
68
hourMax : 23 ,
67
69
minuteMax : 59 ,
68
70
secondMax : 59 ,
@@ -72,6 +74,7 @@ function Timepicker() {
72
74
hourGrid : 0 ,
73
75
minuteGrid : 0 ,
74
76
secondGrid : 0 ,
77
+ millisecGrid : 0 ,
75
78
alwaysSetTime : true ,
76
79
separator : ' ' ,
77
80
altFieldTimeOnly : true ,
@@ -163,7 +166,7 @@ $.extend(Timepicker.prototype, {
163
166
tp_inst . hour = tp_inst . _defaults . hour ;
164
167
tp_inst . minute = tp_inst . _defaults . minute ;
165
168
tp_inst . second = tp_inst . _defaults . second ;
166
- tp_inst . millisecond = tp_inst . defaults . millisecond ;
169
+ tp_inst . millisecond = tp_inst . _defaults . millisecond ;
167
170
tp_inst . ampm = '' ;
168
171
tp_inst . $input = $input ;
169
172
@@ -274,9 +277,10 @@ $.extend(Timepicker.prototype, {
274
277
// Added by Peter Medeiros:
275
278
// - Figure out what the hour/minute/second max should be based on the step values.
276
279
// - Example: if stepMinute is 15, then minMax is 45.
277
- hourMax = ( o . hourMax - ( o . hourMax % o . stepHour ) ) . toFixed ( 0 ) ,
278
- minMax = ( o . minuteMax - ( o . minuteMax % o . stepMinute ) ) . toFixed ( 0 ) ,
279
- secMax = ( o . secondMax - ( o . secondMax % o . stepSecond ) ) . toFixed ( 0 ) ,
280
+ hourMax = ( o . hourMax - ( o . hourMax % o . stepHour ) ) . toFixed ( 0 ) ,
281
+ minMax = ( o . minuteMax - ( o . minuteMax % o . stepMinute ) ) . toFixed ( 0 ) ,
282
+ secMax = ( o . secondMax - ( o . secondMax % o . stepSecond ) ) . toFixed ( 0 ) ,
283
+ milliSecMax = ( o . millisecMax - ( o . millisecMax % o . stepMillisec ) ) . toFixed ( 0 ) ,
280
284
dp_id = this . inst . id . toString ( ) . replace ( / ( [ ^ A - Z a - z 0 - 9 _ ] ) / g, '' ) ;
281
285
282
286
// Prevent displaying twice
@@ -293,6 +297,7 @@ $.extend(Timepicker.prototype, {
293
297
hourGridSize = 0 ,
294
298
minuteGridSize = 0 ,
295
299
secondGridSize = 0 ,
300
+ millisecGridSize = 0 ,
296
301
size ;
297
302
298
303
if ( o . showHour && o . hourGrid > 0 ) {
@@ -354,7 +359,27 @@ $.extend(Timepicker.prototype, {
354
359
'</dd>' ;
355
360
} else html += '<dd class="ui_tpicker_second" id="ui_tpicker_second_' + dp_id + '"' +
356
361
( ( o . showSecond ) ? '' : noDisplay ) + '></dd>' ;
362
+
363
+ //show the milliseconds
364
+ html += '<dt class="ui_tpicker_millisecond_label" id="ui_tpicker_millisecond_label_' + dp_id + '"' +
365
+ ( ( o . showMillisec ) ? '' : noDisplay ) + '>' + o . millisecText + '</dt>' ;
357
366
367
+ if ( o . showMillisec && o . millisecGrid > 0 ) {
368
+ html += '<dd class="ui_tpicker_millisecond ui_tpicker_millisecond_' + o . millisecGrid + '">' +
369
+ '<div id="ui_tpicker_millisecond_' + dp_id + '"' +
370
+ ( ( o . showMillisec ) ? '' : noDisplay ) + '></div>' +
371
+ '<div style="padding-left: 1px"><table><tr>' ;
372
+
373
+ for ( var s = o . millisecMin ; s < millisecMax ; s += o . millisecGrid ) {
374
+ millisecGridSize ++ ;
375
+ html += '<td>' + ( ( s < 10 ) ? '0' : '' ) + s + '</td>' ;
376
+ }
377
+
378
+ html += '</tr></table></div>' +
379
+ '</dd>' ;
380
+ } else html += '<dd class="ui_tpicker_millisecond" id="ui_tpicker_millisecond_' + dp_id + '"' +
381
+ ( ( o . showMillisec ) ? '' : noDisplay ) + '></dd>' ;
382
+
358
383
html += '<dt class="ui_tpicker_timezone_label" id="ui_tpicker_timezone_label_' + dp_id + '"' +
359
384
( ( o . showTimezone ) ? '' : noDisplay ) + '>' + o . timezoneText + '</dt>' ;
360
385
html += '<dd class="ui_tpicker_timezone" id="ui_tpicker_timezone_' + dp_id + '"' +
@@ -410,7 +435,18 @@ $.extend(Timepicker.prototype, {
410
435
tp_inst . _onTimeChange ( ) ;
411
436
}
412
437
} ) ;
413
-
438
+
439
+ this . millisecond_slider = $tp . find ( '#ui_tpicker_millisecond_' + dp_id ) . slider ( {
440
+ orientation : "horizontal" ,
441
+ value : this . millisecond ,
442
+ min : o . millisecMin ,
443
+ max : milliSecMax ,
444
+ step : o . stepMillisec ,
445
+ slide : function ( event , ui ) {
446
+ tp_inst . millisecond_slider . slider ( "option" , "value" , ui . value ) ;
447
+ tp_inst . _onTimeChange ( ) ;
448
+ }
449
+ } ) ;
414
450
415
451
this . timezone_select = $tp . find ( '#ui_tpicker_timezone_' + dp_id ) . append ( '<select></select>' ) . find ( "select" ) ;
416
452
$ . fn . append . apply ( this . timezone_select ,
@@ -496,6 +532,26 @@ $.extend(Timepicker.prototype, {
496
532
} ) ;
497
533
}
498
534
535
+ //add the millisecond functionality
536
+ if ( o . showMillisec && o . millisecGrid > 0 ) {
537
+ $tp . find ( ".ui_tpicker_millisecond table" ) . css ( {
538
+ width : size + "%" ,
539
+ marginLeft : ( size / ( - 2 * millisecGridSize ) ) + "%" ,
540
+ borderCollapse : 'collapse'
541
+ } ) . find ( "td" ) . each ( function ( index ) {
542
+ $ ( this ) . click ( function ( ) {
543
+ tp_inst . millisecond_slider . slider ( "option" , "value" , $ ( this ) . html ( ) ) ;
544
+ tp_inst . _onTimeChange ( ) ;
545
+ tp_inst . _onSelectHandler ( ) ;
546
+ } ) . css ( {
547
+ cursor : 'pointer' ,
548
+ width : ( 100 / millisecGridSize ) + '%' ,
549
+ textAlign : 'center' ,
550
+ overflow : 'hidden'
551
+ } ) ;
552
+ } ) ;
553
+ }
554
+
499
555
var $buttonPanel = $dp . find ( '.ui-datepicker-buttonpane' ) ;
500
556
if ( $buttonPanel . length ) $buttonPanel . before ( $tp ) ;
501
557
else $dp . append ( $tp ) ;
@@ -515,6 +571,7 @@ $.extend(Timepicker.prototype, {
515
571
this . hour_slider . bind ( 'slidestop' , onSelectDelegate ) ;
516
572
this . minute_slider . bind ( 'slidestop' , onSelectDelegate ) ;
517
573
this . second_slider . bind ( 'slidestop' , onSelectDelegate ) ;
574
+ this . millisecond_slider . bind ( 'slidestop' , onSelectDelegate ) ;
518
575
}
519
576
} ,
520
577
@@ -532,10 +589,11 @@ $.extend(Timepicker.prototype, {
532
589
var minDateTime = this . _defaults . minDateTime ,
533
590
minDateTimeDate = new Date ( minDateTime . getFullYear ( ) , minDateTime . getMonth ( ) , minDateTime . getDate ( ) , 0 , 0 , 0 , 0 ) ;
534
591
535
- if ( this . hourMinOriginal === null || this . minuteMinOriginal === null || this . secondMinOriginal === null ) {
592
+ if ( this . hourMinOriginal === null || this . minuteMinOriginal === null || this . secondMinOriginal === null || this . millisecondMinOriginal === null ) {
536
593
this . hourMinOriginal = o . hourMin ;
537
594
this . minuteMinOriginal = o . minuteMin ;
538
595
this . secondMinOriginal = o . secondMin ;
596
+ this . millisecondMinOriginal = o . millisecMin ;
539
597
}
540
598
541
599
if ( dp_inst . settings . timeOnly || minDateTimeDate . getTime ( ) == dp_date . getTime ( ) ) {
@@ -546,29 +604,35 @@ $.extend(Timepicker.prototype, {
546
604
if ( this . minute <= this . _defaults . minuteMin ) {
547
605
this . minute = this . _defaults . minuteMin ;
548
606
this . _defaults . secondMin = minDateTime . getSeconds ( ) ;
607
+ this . _defaults . millisecMin = minDateTime . getMilliseconds ( ) ;
549
608
} else {
550
609
if ( this . second < this . _defaults . secondMin ) this . second = this . _defaults . secondMin ;
551
610
this . _defaults . secondMin = this . secondMinOriginal ;
552
- }
611
+ if ( this . millisecond < this . _defaults . millisecMin ) this . millisecond = this . _defaults . millisecMin ;
612
+ this . _defaults . millisecMin = this . millisecondMinOriginal ;
613
+ }
553
614
} else {
554
615
this . _defaults . minuteMin = this . minuteMinOriginal ;
555
616
this . _defaults . secondMin = this . secondMinOriginal ;
617
+ this . _defaults . millisecMin = this . millisecondMinOriginal ;
556
618
}
557
619
} else {
558
620
this . _defaults . hourMin = this . hourMinOriginal ;
559
621
this . _defaults . minuteMin = this . minuteMinOriginal ;
560
622
this . _defaults . secondMin = this . secondMinOriginal ;
623
+ this . _defaults . millisecMin = this . millisecondMinOriginal ;
561
624
}
562
625
}
563
626
564
627
if ( this . _defaults . maxDateTime !== null && dp_date ) {
565
628
var maxDateTime = this . _defaults . maxDateTime ,
566
629
maxDateTimeDate = new Date ( maxDateTime . getFullYear ( ) , maxDateTime . getMonth ( ) , maxDateTime . getDate ( ) , 0 , 0 , 0 , 0 ) ;
567
630
568
- if ( this . hourMaxOriginal === null || this . minuteMaxOriginal === null || this . secondMaxOriginal === null ) {
631
+ if ( this . hourMaxOriginal === null || this . minuteMaxOriginal === null || this . secondMaxOriginal === null || this . millisecondMaxOriginal === null ) {
569
632
this . hourMaxOriginal = o . hourMax ;
570
633
this . minuteMaxOriginal = o . minuteMax ;
571
634
this . secondMaxOriginal = o . secondMax ;
635
+ this . millisecondMaxOriginal = o . millisecondMax ;
572
636
}
573
637
574
638
if ( dp_inst . settings . timeOnly || maxDateTimeDate . getTime ( ) == dp_date . getTime ( ) ) {
@@ -579,18 +643,23 @@ $.extend(Timepicker.prototype, {
579
643
if ( this . minute >= this . _defaults . minuteMax ) {
580
644
this . minute = this . _defaults . minuteMax ;
581
645
this . _defaults . secondMin = maxDateTime . getSeconds ( ) ;
646
+ this . _defaults . millisecMin = minDateTime . getMilliseconds ( ) ;
582
647
} else {
583
648
if ( this . second > this . _defaults . secondMax ) this . second = this . _defaults . secondMax ;
584
649
this . _defaults . secondMax = this . secondMaxOriginal ;
650
+ if ( this . millisecond > this . _defaults . millisecMax ) this . millisecond = this . _defaults . millisecMax ;
651
+ this . _defaults . millisecMax = this . millisecondMaxOriginal ;
585
652
}
586
653
} else {
587
654
this . _defaults . minuteMax = this . minuteMaxOriginal ;
588
655
this . _defaults . secondMax = this . secondMaxOriginal ;
656
+ this . _defaults . millisecMax = this . millisecondMaxOriginal ;
589
657
}
590
658
} else {
591
659
this . _defaults . hourMax = this . hourMaxOriginal ;
592
660
this . _defaults . minuteMax = this . minuteMaxOriginal ;
593
661
this . _defaults . secondMax = this . secondMaxOriginal ;
662
+ this . _defaults . millisecMax = this . millisecondMaxOriginal ;
594
663
}
595
664
}
596
665
@@ -599,7 +668,6 @@ $.extend(Timepicker.prototype, {
599
668
this . minute_slider . slider ( "option" , { min : this . _defaults . minuteMin , max : this . _defaults . minuteMax } ) . slider ( 'value' , this . minute ) ;
600
669
this . second_slider . slider ( "option" , { min : this . _defaults . secondMin , max : this . _defaults . secondMax } ) . slider ( 'value' , this . second ) ;
601
670
}
602
-
603
671
} ,
604
672
605
673
@@ -611,29 +679,32 @@ $.extend(Timepicker.prototype, {
611
679
var hour = ( this . hour_slider ) ? this . hour_slider . slider ( 'value' ) : false ,
612
680
minute = ( this . minute_slider ) ? this . minute_slider . slider ( 'value' ) : false ,
613
681
second = ( this . second_slider ) ? this . second_slider . slider ( 'value' ) : false ,
682
+ millisecond = ( this . millisecond_slider ) ? this . millisecond_slider . slider ( 'value' ) : false ,
614
683
timezone = ( this . timezone_select ) ? this . timezone_select . val ( ) : false ;
615
684
616
685
if ( hour !== false ) hour = parseInt ( hour , 10 ) ;
617
686
if ( minute !== false ) minute = parseInt ( minute , 10 ) ;
618
687
if ( second !== false ) second = parseInt ( second , 10 ) ;
688
+ if ( millisecond !== false ) millisecond = parseInt ( millisecond , 10 ) ;
619
689
620
690
var ampm = ( hour < 12 ) ? 'AM' : 'PM' ;
621
691
622
692
// If the update was done in the input field, the input field should not be updated.
623
693
// If the update was done using the sliders, update the input field.
624
- var hasChanged = ( hour != this . hour || minute != this . minute || second != this . second || ( this . ampm . length > 0 && this . ampm != ampm ) || timezone != this . timezone ) ;
694
+ var hasChanged = ( hour != this . hour || minute != this . minute || second != this . second || millisecond != this . millisecond || ( this . ampm . length > 0 && this . ampm != ampm ) || timezone != this . timezone ) ;
625
695
626
696
if ( hasChanged ) {
627
697
628
698
if ( hour !== false ) this . hour = hour ;
629
699
if ( minute !== false ) this . minute = minute ;
630
700
if ( second !== false ) this . second = second ;
701
+ if ( millisecond !== false ) this . millisecond = millisecond ;
631
702
if ( timezone !== false ) this . timezone = timezone ;
632
703
this . _limitMinMaxDateTime ( this . inst , true ) ;
633
704
}
634
705
if ( this . _defaults . ampm ) this . ampm = ampm ;
635
706
636
- this . _formatTime ( ) ;
707
+ this . _formatTime ( ) ;
637
708
if ( this . $timeObj ) this . $timeObj . text ( this . formattedTime ) ;
638
709
this . timeDefined = true ;
639
710
if ( hasChanged ) this . _updateDateTime ( ) ;
@@ -656,7 +727,7 @@ $.extend(Timepicker.prototype, {
656
727
//########################################################################
657
728
_formatTime : function ( time , format , ampm ) {
658
729
if ( ampm == undefined ) ampm = this . _defaults . ampm ;
659
- time = time || { hour : this . hour , minute : this . minute , second : this . second , ampm : this . ampm , timezone : this . timezone } ;
730
+ time = time || { hour : this . hour , minute : this . minute , second : this . second , millisecond : this . millisecond , ampm : this . ampm , timezone : this . timezone } ;
660
731
var tmptime = format || this . _defaults . timeFormat . toString ( ) ;
661
732
662
733
if ( ampm ) {
@@ -668,7 +739,8 @@ $.extend(Timepicker.prototype, {
668
739
. replace ( / m m / g, ( ( time . minute < 10 ) ? '0' : '' ) + time . minute )
669
740
. replace ( / m / g, time . minute )
670
741
. replace ( / s s / g, ( ( time . second < 10 ) ? '0' : '' ) + time . second )
671
- . replace ( / s / g, time . second )
742
+ . replace ( / s / g, time . second )
743
+ . replace ( / l / g, ( ( time . millisecond < 10 ) ? '00' : ( time . millisecond < 100 ) ? '0' : '' ) + time . millisecond )
672
744
. replace ( / T T / g, time . ampm . toUpperCase ( ) )
673
745
. replace ( / T t / g, time . ampm . toUpperCase ( ) )
674
746
. replace ( / t T / g, time . ampm . toLowerCase ( ) )
@@ -684,6 +756,7 @@ $.extend(Timepicker.prototype, {
684
756
. replace ( / m / g, time . minute )
685
757
. replace ( / s s / g, ( ( time . second < 10 ) ? '0' : '' ) + time . second )
686
758
. replace ( / s / g, time . second )
759
+ . replace ( / l / g, ( ( time . millisecond < 10 ) ? '00' : ( time . millisecond < 100 ) ? '0' : '' ) + time . millisecond )
687
760
. replace ( / z / g, time . timezone ) ;
688
761
tmptime = $ . trim ( tmptime . replace ( / t / gi, '' ) ) ;
689
762
}
@@ -809,7 +882,7 @@ $.datepicker._updateDatepicker = function(inst) {
809
882
} ;
810
883
811
884
//#######################################################################################
812
- // third bad hack :/ override datepicker so it allows spaces and colan in the input field
885
+ // third bad hack :/ override datepicker so it allows spaces and colon in the input field
813
886
//#######################################################################################
814
887
$ . datepicker . _base_doKeyPress = $ . datepicker . _doKeyPress ;
815
888
$ . datepicker . _doKeyPress = function ( event ) {
@@ -904,12 +977,14 @@ $.datepicker._setTime = function(inst, date) {
904
977
hour = date ? date . getHours ( ) : defaults . hour ,
905
978
minute = date ? date . getMinutes ( ) : defaults . minute ,
906
979
second = date ? date . getSeconds ( ) : defaults . second ;
980
+ millisecond = date ? date . getMilliseconds ( ) : defaults . millisecond ;
907
981
908
982
//check if within min/max times..
909
- if ( ( hour < defaults . hourMin || hour > defaults . hourMax ) || ( minute < defaults . minuteMin || minute > defaults . minuteMax ) || ( second < defaults . secondMin || second > defaults . secondMax ) ) {
983
+ if ( ( hour < defaults . hourMin || hour > defaults . hourMax ) || ( minute < defaults . minuteMin || minute > defaults . minuteMax ) || ( second < defaults . secondMin || second > defaults . secondMax ) || ( millisecond < defaults . millisecMin || millisecond > defaults . millisecMax ) ) {
910
984
hour = defaults . hourMin ;
911
985
minute = defaults . minuteMin ;
912
986
second = defaults . secondMin ;
987
+ millisecond = defaults . millisecond ;
913
988
}
914
989
915
990
if ( tp_inst . hour_slider ) tp_inst . hour_slider . slider ( 'value' , hour ) ;
@@ -918,6 +993,8 @@ $.datepicker._setTime = function(inst, date) {
918
993
else tp_inst . minute = minute ;
919
994
if ( tp_inst . second_slider ) tp_inst . second_slider . slider ( 'value' , second ) ;
920
995
else tp_inst . second = second ;
996
+ if ( tp_inst . millisecond_slider ) tp_inst . millisecond_slider . slider ( 'value' , millisecond ) ;
997
+ else tp_inst . millisecond = millisecond ;
921
998
922
999
tp_inst . _onTimeChange ( ) ;
923
1000
tp_inst . _updateDateTime ( inst ) ;
@@ -938,7 +1015,7 @@ $.datepicker._setTimeDatepicker = function(target, date, withDate) {
938
1015
if ( typeof date == "string" ) {
939
1016
tp_inst . _parseTime ( date , withDate ) ;
940
1017
tp_date = new Date ( ) ;
941
- tp_date . setHours ( tp_inst . hour , tp_inst . minute , tp_inst . second ) ;
1018
+ tp_date . setHours ( tp_inst . hour , tp_inst . minute , tp_inst . second , tp_inst . millisecond ) ;
942
1019
}
943
1020
else tp_date = new Date ( date . getTime ( ) ) ;
944
1021
if ( tp_date . toString ( ) == 'Invalid Date' ) tp_date = undefined ;
@@ -972,7 +1049,7 @@ $.datepicker._getDateDatepicker = function(target, noDefault) {
972
1049
if ( tp_inst ) {
973
1050
this . _setDateFromField ( inst , noDefault ) ;
974
1051
var date = this . _getDate ( inst ) ;
975
- if ( date && tp_inst . _parseTime ( $ ( target ) . val ( ) , tp_inst . timeOnly ) ) date . setHours ( tp_inst . hour , tp_inst . minute , tp_inst . second ) ;
1052
+ if ( date && tp_inst . _parseTime ( $ ( target ) . val ( ) , tp_inst . timeOnly ) ) date . setHours ( tp_inst . hour , tp_inst . minute , tp_inst . second , tp_inst . millisecond ) ;
976
1053
return date ;
977
1054
}
978
1055
return this . _base_getDateDatepicker ( target , noDefault ) ;
0 commit comments