1
1
/*
2
2
* jQuery timepicker addon
3
3
* By: Trent Richardson [http://trentrichardson.com]
4
- * Version 0.9.9
4
+ * Version 1.0.0-dev
5
5
* Last Modified: 02/05/2012
6
- *
6
+ *
7
7
* Copyright 2012 Trent Richardson
8
8
* Dual licensed under the MIT and GPL licenses.
9
9
* http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
10
10
* http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
11
- *
11
+ *
12
12
* HERES THE CSS:
13
13
* .ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
14
14
* .ui-timepicker-div dl { text-align: left; }
20
20
21
21
( function ( $ ) {
22
22
23
- $ . extend ( $ . ui , { timepicker : { version : "0.9.9" } } ) ;
23
+ // Prevent "Uncaught RangeError: Maximum call stack size exceeded"
24
+ $ . ui . timepicker = $ . ui . timepicker || { } ;
25
+ if ( $ . ui . timepicker . version ) {
26
+ return ;
27
+ }
28
+
29
+ $ . extend ( $ . ui , { timepicker : { version : "1.0.0" } } ) ;
24
30
25
31
/* Time picker manager.
26
32
Use the singleton instance of this class, $.timepicker, to interact with the time picker.
@@ -133,7 +139,7 @@ $.extend(Timepicker.prototype, {
133
139
_newInst : function ( $input , o ) {
134
140
var tp_inst = new Timepicker ( ) ,
135
141
inlineSettings = { } ;
136
-
142
+
137
143
for ( var attrName in this . _defaults ) {
138
144
var attrValue = $input . attr ( 'time:' + attrName ) ;
139
145
if ( attrValue ) {
@@ -163,8 +169,8 @@ $.extend(Timepicker.prototype, {
163
169
} ,
164
170
timepicker : tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');
165
171
} ) ;
166
- tp_inst . amNames = $ . map ( tp_inst . _defaults . amNames , function ( val ) { return val . toUpperCase ( ) } ) ;
167
- tp_inst . pmNames = $ . map ( tp_inst . _defaults . pmNames , function ( val ) { return val . toUpperCase ( ) } ) ;
172
+ tp_inst . amNames = $ . map ( tp_inst . _defaults . amNames , function ( val ) { return val . toUpperCase ( ) ; } ) ;
173
+ tp_inst . pmNames = $ . map ( tp_inst . _defaults . pmNames , function ( val ) { return val . toUpperCase ( ) ; } ) ;
168
174
169
175
if ( tp_inst . _defaults . timezoneList === null ) {
170
176
var timezoneList = [ ] ;
@@ -188,7 +194,7 @@ $.extend(Timepicker.prototype, {
188
194
tp_inst . $altInput = $ ( o . altField )
189
195
. css ( { cursor : 'pointer' } )
190
196
. focus ( function ( ) { $input . trigger ( "focus" ) ; } ) ;
191
-
197
+
192
198
if ( tp_inst . _defaults . minDate == 0 || tp_inst . _defaults . minDateTime == 0 )
193
199
{
194
200
tp_inst . _defaults . minDate = new Date ( ) ;
@@ -197,7 +203,7 @@ $.extend(Timepicker.prototype, {
197
203
{
198
204
tp_inst . _defaults . maxDate = new Date ( ) ;
199
205
}
200
-
206
+
201
207
// datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..
202
208
if ( tp_inst . _defaults . minDate !== undefined && tp_inst . _defaults . minDate instanceof Date )
203
209
tp_inst . _defaults . minDateTime = new Date ( tp_inst . _defaults . minDate . getTime ( ) ) ;
@@ -215,7 +221,7 @@ $.extend(Timepicker.prototype, {
215
221
//########################################################################
216
222
_addTimePicker : function ( dp_inst ) {
217
223
var currDT = ( this . $altInput && this . _defaults . altFieldTimeOnly ) ?
218
- this . $input . val ( ) + ' ' + this . $altInput . val ( ) :
224
+ this . $input . val ( ) + ' ' + this . $altInput . val ( ) :
219
225
this . $input . val ( ) ;
220
226
221
227
this . timeDefined = this . _parseTime ( currDT ) ;
@@ -249,7 +255,7 @@ $.extend(Timepicker.prototype, {
249
255
var specials = new RegExp ( "[.*+?|()\\[\\]{}\\\\]" , "g" ) ;
250
256
regstr = '^.{' + dp_dateFormat . length + ',}?' + this . _defaults . separator . replace ( specials , "\\$&" ) + regstr ;
251
257
}
252
-
258
+
253
259
treg = timeString . match ( new RegExp ( regstr , 'i' ) ) ;
254
260
255
261
if ( treg ) {
@@ -297,7 +303,7 @@ $.extend(Timepicker.prototype, {
297
303
}
298
304
this . timezone = tz ;
299
305
}
300
-
306
+
301
307
return true ;
302
308
303
309
}
@@ -308,13 +314,13 @@ $.extend(Timepicker.prototype, {
308
314
// pattern for standard and localized AM/PM markers
309
315
//########################################################################
310
316
_getPatternAmpm : function ( ) {
311
- var markers = [ ] ;
317
+ var markers = [ ] ,
312
318
o = this . _defaults ;
313
319
if ( o . amNames )
314
320
$ . merge ( markers , o . amNames ) ;
315
321
if ( o . pmNames )
316
322
$ . merge ( markers , o . pmNames ) ;
317
- markers = $ . map ( markers , function ( val ) { return val . replace ( / [ . * + ? | ( ) \[ \] { } \\ ] / g, '\\$&' ) } ) ;
323
+ markers = $ . map ( markers , function ( val ) { return val . replace ( / [ . * + ? | ( ) \[ \] { } \\ ] / g, '\\$&' ) ; } ) ;
318
324
return '(' + markers . join ( '|' ) + ')?' ;
319
325
} ,
320
326
@@ -364,7 +370,7 @@ $.extend(Timepicker.prototype, {
364
370
minuteGridSize = 0 ,
365
371
secondGridSize = 0 ,
366
372
millisecGridSize = 0 ,
367
- size ;
373
+ size = null ;
368
374
369
375
// Hours
370
376
html += '<dd class="ui_tpicker_hour"><div id="ui_tpicker_hour_' + dp_id + '"' +
@@ -472,7 +478,7 @@ $.extend(Timepicker.prototype, {
472
478
}
473
479
} ) ;
474
480
475
-
481
+
476
482
// Updated by Peter Medeiros:
477
483
// - Pass in Event and UI instance into slide function
478
484
this . minute_slider = $tp . find ( '#ui_tpicker_minute_' + dp_id ) . slider ( {
@@ -634,7 +640,7 @@ $.extend(Timepicker.prototype, {
634
640
this . minute_slider . bind ( 'slidestop' , onSelectDelegate ) ;
635
641
this . second_slider . bind ( 'slidestop' , onSelectDelegate ) ;
636
642
this . millisec_slider . bind ( 'slidestop' , onSelectDelegate ) ;
637
-
643
+
638
644
// slideAccess integration: http://trentrichardson.com/2011/11/11/jquery-ui-sliders-and-touch-accessibility/
639
645
if ( this . _defaults . addSliderAccess ) {
640
646
var sliderAccessArgs = this . _defaults . sliderAccessArgs ;
@@ -651,15 +657,15 @@ $.extend(Timepicker.prototype, {
651
657
oldMarginLeft = $g . css ( 'marginLeft' ) . toString ( ) . replace ( '%' , '' ) ,
652
658
newWidth = oldWidth - sliderAccessWidth ,
653
659
newMarginLeft = ( ( oldMarginLeft * newWidth ) / oldWidth ) + '%' ;
654
-
660
+
655
661
$g . css ( { width : newWidth , marginLeft : newMarginLeft } ) ;
656
662
} ) ;
657
663
}
658
664
}
659
665
} , 0 ) ;
660
666
}
661
667
// end slideAccess integration
662
-
668
+
663
669
}
664
670
} ,
665
671
@@ -770,7 +776,7 @@ $.extend(Timepicker.prototype, {
770
776
771
777
} ,
772
778
773
-
779
+
774
780
//########################################################################
775
781
// when a slider moves, set the internal time...
776
782
// on time change is also called when the time is updated in the text field
@@ -803,30 +809,30 @@ $.extend(Timepicker.prototype, {
803
809
|| ( this . ampm . length > 0
804
810
&& ( hour < 12 ) != ( $ . inArray ( this . ampm . toUpperCase ( ) , this . amNames ) !== - 1 ) )
805
811
|| timezone != this . timezone ) ;
806
-
812
+
807
813
if ( hasChanged ) {
808
814
809
815
if ( hour !== false ) this . hour = hour ;
810
816
if ( minute !== false ) this . minute = minute ;
811
817
if ( second !== false ) this . second = second ;
812
818
if ( millisec !== false ) this . millisec = millisec ;
813
819
if ( timezone !== false ) this . timezone = timezone ;
814
-
820
+
815
821
if ( ! this . inst ) this . inst = $ . datepicker . _getInst ( this . $input [ 0 ] ) ;
816
-
822
+
817
823
this . _limitMinMaxDateTime ( this . inst , true ) ;
818
824
}
819
825
if ( o . ampm ) this . ampm = ampm ;
820
-
826
+
821
827
//this._formatTime();
822
828
this . formattedTime = $ . datepicker . formatTime ( this . _defaults . timeFormat , this , this . _defaults ) ;
823
829
if ( this . $timeObj ) this . $timeObj . text ( this . formattedTime + o . timeSuffix ) ;
824
830
this . timeDefined = true ;
825
831
if ( hasChanged ) this . _updateDateTime ( ) ;
826
832
} ,
827
-
833
+
828
834
//########################################################################
829
- // call custom onSelect.
835
+ // call custom onSelect.
830
836
// bind to sliders slidestop, and grid click.
831
837
//########################################################################
832
838
_onSelectHandler : function ( ) {
@@ -845,7 +851,7 @@ $.extend(Timepicker.prototype, {
845
851
var tmptime = ( format || this . _defaults . timeFormat ) . toString ( ) ;
846
852
847
853
tmptime = $ . datepicker . formatTime ( tmptime , time , this . _defaults ) ;
848
-
854
+
849
855
if ( arguments . length ) return tmptime ;
850
856
else this . formattedTime = tmptime ;
851
857
} ,
@@ -883,7 +889,7 @@ $.extend(Timepicker.prototype, {
883
889
} else {
884
890
this . $input . val ( formattedDateTime ) ;
885
891
}
886
-
892
+
887
893
this . $input . trigger ( "change" ) ;
888
894
}
889
895
@@ -909,13 +915,12 @@ $.fn.extend({
909
915
//########################################################################
910
916
datetimepicker : function ( o ) {
911
917
o = o || { } ;
912
- var $input = this ,
913
918
tmp_args = arguments ;
914
919
915
920
if ( typeof ( o ) == 'string' ) {
916
- if ( o == 'getDate' )
921
+ if ( o == 'getDate' )
917
922
return $ . fn . datepicker . apply ( $ ( this [ 0 ] ) , tmp_args ) ;
918
- else
923
+ else
919
924
return this . each ( function ( ) {
920
925
var $t = $ ( this ) ;
921
926
$t . datepicker . apply ( $t , tmp_args ) ;
@@ -930,7 +935,7 @@ $.fn.extend({
930
935
} ) ;
931
936
932
937
//########################################################################
933
- // format the time all pretty...
938
+ // format the time all pretty...
934
939
// format = string format of the time
935
940
// time = a {}, not a Date() for timezones
936
941
// options = essentially the regional[].. amNames, pmNames, ampm
@@ -939,7 +944,7 @@ $.datepicker.formatTime = function(format, time, options) {
939
944
options = options || { } ;
940
945
options = $ . extend ( $ . timepicker . _defaults , options ) ;
941
946
time = $ . extend ( { hour :0 , minute :0 , second :0 , millisec :0 , timezone :'+0000' } , time ) ;
942
-
947
+
943
948
var tmptime = format ;
944
949
var ampmName = options [ 'amNames' ] [ 0 ] ;
945
950
@@ -975,7 +980,7 @@ $.datepicker.formatTime = function(format, time, options) {
975
980
976
981
tmptime = $ . trim ( tmptime ) ;
977
982
return tmptime ;
978
- }
983
+ } ;
979
984
980
985
//########################################################################
981
986
// the bad hack :/ override datepicker so it doesnt close on select
@@ -1015,9 +1020,9 @@ $.datepicker._updateDatepicker = function(inst) {
1015
1020
}
1016
1021
1017
1022
if ( typeof ( inst . stay_open ) !== 'boolean' || inst . stay_open === false ) {
1018
-
1023
+
1019
1024
this . _base_updateDatepicker ( inst ) ;
1020
-
1025
+
1021
1026
// Reload the time control when changing something in the input text field.
1022
1027
var tp_inst = this . _get ( inst , 'timepicker' ) ;
1023
1028
if ( tp_inst ) tp_inst . _addTimePicker ( inst ) ;
@@ -1055,7 +1060,7 @@ $.datepicker._doKeyPress = function(event) {
1055
1060
return event . ctrlKey || ( chr < ' ' || ! dateChars || datetimeChars . indexOf ( chr ) > - 1 ) ;
1056
1061
}
1057
1062
}
1058
-
1063
+
1059
1064
return $ . datepicker . _base_doKeyPress ( event ) ;
1060
1065
} ;
1061
1066
@@ -1102,7 +1107,7 @@ $.datepicker._gotoToday = function(id) {
1102
1107
tp_inst . timezone_select . val ( tzoffset ) ;
1103
1108
}
1104
1109
this . _setTime ( inst , now ) ;
1105
- $ ( '.ui-datepicker-today' , $dp ) . click ( ) ;
1110
+ $ ( '.ui-datepicker-today' , $dp ) . click ( ) ;
1106
1111
} ;
1107
1112
1108
1113
//#######################################################################################
@@ -1245,14 +1250,11 @@ $.datepicker.parseDate = function(format, value, settings) {
1245
1250
//#######################################################################################
1246
1251
// override formatDate to set date with time to the input
1247
1252
//#######################################################################################
1248
- $ . datepicker . _base_formatDate = $ . datepicker . _formatDate ;
1253
+ $ . datepicker . _base_formatDate = $ . datepicker . _formatDate ;
1249
1254
$ . datepicker . _formatDate = function ( inst , day , month , year ) {
1250
1255
var tp_inst = this . _get ( inst , 'timepicker' ) ;
1251
- if ( tp_inst )
1252
- {
1253
- if ( day )
1254
- var b = this . _base_formatDate ( inst , day , month , year ) ;
1255
- tp_inst . _updateDateTime ( inst ) ;
1256
+ if ( tp_inst ) {
1257
+ tp_inst . _updateDateTime ( inst ) ;
1256
1258
return tp_inst . $input . val ( ) ;
1257
1259
}
1258
1260
return this . _base_formatDate ( inst ) ;
@@ -1266,16 +1268,16 @@ $.datepicker._optionDatepicker = function(target, name, value) {
1266
1268
var inst = this . _getInst ( target ) ,
1267
1269
tp_inst = this . _get ( inst , 'timepicker' ) ;
1268
1270
if ( tp_inst ) {
1269
- var min , max , onselect ;
1271
+ var min = null , max = null , onselect = null ;
1270
1272
if ( typeof name == 'string' ) { // if min/max was set with the string
1271
- if ( name === 'minDate' || name === 'minDateTime' )
1273
+ if ( name === 'minDate' || name === 'minDateTime' )
1272
1274
min = value ;
1273
- else if ( name === 'maxDate' || name === 'maxDateTime' )
1275
+ else if ( name === 'maxDate' || name === 'maxDateTime' )
1274
1276
max = value ;
1275
- else if ( name === 'onSelect' )
1276
- onselect = value ;
1277
+ else if ( name === 'onSelect' )
1278
+ onselect = value ;
1277
1279
} else if ( typeof name == 'object' ) { //if min/max was set with the JSON
1278
- if ( name . minDate )
1280
+ if ( name . minDate )
1279
1281
min = name . minDate ;
1280
1282
else if ( name . minDateTime )
1281
1283
min = name . minDateTime ;
@@ -1284,24 +1286,23 @@ $.datepicker._optionDatepicker = function(target, name, value) {
1284
1286
else if ( name . maxDateTime )
1285
1287
max = name . maxDateTime ;
1286
1288
}
1287
- if ( min ) { //if min was set
1288
- if ( min == 0 )
1289
- min = new Date ( ) ;
1289
+ if ( min ) { //if min was set
1290
+ if ( min == 0 )
1291
+ min = new Date ( ) ;
1290
1292
else
1291
- min = new Date ( min ) ;
1292
-
1293
+ min = new Date ( min ) ;
1294
+
1293
1295
tp_inst . _defaults . minDate = min ;
1294
1296
tp_inst . _defaults . minDateTime = min ;
1295
- } else if ( max ) { //if max was set
1297
+ } else if ( max ) { //if max was set
1296
1298
if ( max == 0 )
1297
1299
max = new Date ( ) ;
1298
1300
else
1299
1301
max = new Date ( max ) ;
1300
1302
tp_inst . _defaults . maxDate = max ;
1301
1303
tp_inst . _defaults . maxDateTime = max ;
1302
- }
1303
- else if ( onselect )
1304
- tp_inst . _defaults . onSelect = onselect ;
1304
+ } else if ( onselect )
1305
+ tp_inst . _defaults . onSelect = onselect ;
1305
1306
}
1306
1307
if ( value === undefined )
1307
1308
return this . _base_optionDatepicker ( target , name ) ;
@@ -1320,7 +1321,6 @@ function extendRemove(target, props) {
1320
1321
} ;
1321
1322
1322
1323
$ . timepicker = new Timepicker ( ) ; // singleton instance
1323
- $ . timepicker . version = "0.9.9 " ;
1324
+ $ . timepicker . version = "1.0.0 " ;
1324
1325
1325
1326
} ) ( jQuery ) ;
1326
-
0 commit comments