@@ -390,6 +390,19 @@ $.fn.calendar = function(parameters) {
390
390
cell . attr ( "data-variation" , disabledDate [ metadata . variation ] ) ;
391
391
}
392
392
}
393
+ if ( mode === 'hour' ) {
394
+ var disabledHour = module . helper . findHourAsObject ( cellDate , mode , settings . disabledHours ) ;
395
+ if ( disabledHour !== null && disabledHour [ metadata . message ] ) {
396
+ cell . attr ( "data-tooltip" , disabledHour [ metadata . message ] ) ;
397
+ cell . attr ( "data-position" , disabledHour [ metadata . position ] || tooltipPosition ) ;
398
+ if ( disabledHour [ metadata . inverted ] || ( isInverted && disabledHour [ metadata . inverted ] === undefined ) ) {
399
+ cell . attr ( "data-inverted" , '' ) ;
400
+ }
401
+ if ( disabledHour [ metadata . variation ] ) {
402
+ cell . attr ( "data-variation" , disabledHour [ metadata . variation ] ) ;
403
+ }
404
+ }
405
+ }
393
406
} else {
394
407
eventDate = module . helper . findDayAsObject ( cellDate , mode , settings . eventDates ) ;
395
408
if ( eventDate !== null ) {
@@ -975,7 +988,7 @@ $.fn.calendar = function(parameters) {
975
988
976
989
helper : {
977
990
isDisabled : function ( date , mode ) {
978
- return ( mode === 'day' || mode === 'month' || mode === 'year' ) && ( ( mode === 'day' && settings . disabledDaysOfWeek . indexOf ( date . getDay ( ) ) !== - 1 ) || settings . disabledDates . some ( function ( d ) {
991
+ return ( mode === 'day' || mode === 'month' || mode === 'year' || mode === 'hour' ) && ( ( ( mode === 'day' && settings . disabledDaysOfWeek . indexOf ( date . getDay ( ) ) !== - 1 ) || settings . disabledDates . some ( function ( d ) {
979
992
if ( typeof d === 'string' ) {
980
993
d = module . helper . sanitiseDate ( d ) ;
981
994
}
@@ -1008,7 +1021,45 @@ $.fn.calendar = function(parameters) {
1008
1021
}
1009
1022
}
1010
1023
}
1011
- } ) ) ;
1024
+ } ) ) || ( mode === 'hour' && settings . disabledHours . some ( function ( d ) {
1025
+ if ( typeof d === 'string' ) {
1026
+ d = module . helper . sanitiseDate ( d ) ;
1027
+ }
1028
+ if ( d instanceof Date ) {
1029
+ return module . helper . dateEqual ( date , d , mode ) ;
1030
+ } else if ( typeof d === 'number' ) {
1031
+ return date . getHours ( ) === d ;
1032
+ }
1033
+ if ( d !== null && typeof d === 'object' ) {
1034
+ var blocked = true ;
1035
+
1036
+ if ( d [ metadata . date ] ) {
1037
+ if ( d [ metadata . date ] instanceof Date ) {
1038
+ blocked = module . helper . dateEqual ( date , module . helper . sanitiseDate ( d [ metadata . date ] ) ) ;
1039
+ } else if ( Array . isArray ( d [ metadata . date ] ) ) {
1040
+ return d [ metadata . date ] . some ( function ( idate ) {
1041
+ blocked = module . helper . dateEqual ( date , idate , mode ) ;
1042
+ } ) ;
1043
+ }
1044
+ }
1045
+
1046
+ if ( d [ metadata . days ] ) {
1047
+ if ( typeof d [ metadata . days ] === 'number' ) {
1048
+ blocked = date . getDay ( ) == d [ metadata . days ] ;
1049
+ } else if ( Array . isArray ( d [ metadata . days ] ) ) {
1050
+ blocked = d [ metadata . days ] . indexOf ( date . getDay ( ) ) > - 1 ;
1051
+ }
1052
+ }
1053
+
1054
+ if ( d [ metadata . hours ] ) {
1055
+ if ( typeof d [ metadata . hours ] === 'number' ) {
1056
+ return blocked && date . getHours ( ) == d [ metadata . hours ] ;
1057
+ } else if ( Array . isArray ( d [ metadata . hours ] ) ) {
1058
+ return blocked && d [ metadata . hours ] . indexOf ( date . getHours ( ) ) > - 1 ;
1059
+ }
1060
+ }
1061
+ }
1062
+ } ) ) ) ;
1012
1063
} ,
1013
1064
isEnabled : function ( date , mode ) {
1014
1065
if ( mode === 'day' ) {
@@ -1076,6 +1127,49 @@ $.fn.calendar = function(parameters) {
1076
1127
}
1077
1128
return null ;
1078
1129
} ,
1130
+ findHourAsObject : function ( date , mode , hours ) {
1131
+ if ( mode === 'hour' ) {
1132
+ var d ;
1133
+ var hourCheck = function ( date , d ) {
1134
+ if ( d [ metadata . hours ] ) {
1135
+ if ( typeof d [ metadata . hours ] === 'number' && date . getHours ( ) == d [ metadata . hours ] ) {
1136
+ return d ;
1137
+ } else if ( Array . isArray ( d [ metadata . hours ] ) ) {
1138
+ if ( d [ metadata . hours ] . indexOf ( date . getHours ( ) ) > - 1 ) {
1139
+ return d ;
1140
+ }
1141
+ }
1142
+ }
1143
+ }
1144
+ for ( var i = 0 ; i < hours . length ; i ++ ) {
1145
+ d = hours [ i ] ;
1146
+ if ( typeof d === 'number' && date . getHours ( ) == d ) {
1147
+ return null ;
1148
+ } else if ( d !== null && typeof d === 'object' ) {
1149
+ if ( d [ metadata . days ] && hourCheck ( date , d ) ) {
1150
+ if ( typeof d [ metadata . days ] === 'number' && date . getDay ( ) == d [ metadata . days ] ) {
1151
+ return d ;
1152
+ } else if ( Array . isArray ( d [ metadata . days ] ) ) {
1153
+ if ( d [ metadata . days ] . indexOf ( date . getDay ( ) ) > - 1 ) {
1154
+ return d ;
1155
+ }
1156
+ }
1157
+ } else if ( d [ metadata . date ] && hourCheck ( date , d ) ) {
1158
+ if ( d [ metadata . date ] instanceof Date && module . helper . dateEqual ( date , module . helper . sanitiseDate ( d [ metadata . date ] ) ) ) {
1159
+ return d ;
1160
+ } else if ( Array . isArray ( d [ metadata . date ] ) ) {
1161
+ if ( d [ metadata . date ] . some ( function ( idate ) { return module . helper . dateEqual ( date , idate , mode ) ; } ) ) {
1162
+ return d ;
1163
+ }
1164
+ }
1165
+ } else if ( hourCheck ( date , d ) ) {
1166
+ return d ;
1167
+ }
1168
+ }
1169
+ }
1170
+ }
1171
+ return null ;
1172
+ } ,
1079
1173
sanitiseDate : function ( date ) {
1080
1174
if ( ! ( date instanceof Date ) ) {
1081
1175
date = parser . date ( '' + date , settings ) ;
@@ -1361,6 +1455,7 @@ $.fn.calendar.settings = {
1361
1455
multiMonth : 1 , // show multiple months when in 'day' mode
1362
1456
minTimeGap : 5 ,
1363
1457
showWeekNumbers : null , // show Number of Week at the very first column of a dayView
1458
+ disabledHours : [ ] , // specific hour(s) which won't be selectable and contain additional information.
1364
1459
disabledDates : [ ] , // specific day(s) which won't be selectable and contain additional information.
1365
1460
disabledDaysOfWeek : [ ] , // day(s) which won't be selectable(s) (0 = Sunday)
1366
1461
enabledDates : [ ] , // specific day(s) which will be selectable, all other days will be disabled
@@ -1766,7 +1861,9 @@ $.fn.calendar.settings = {
1766
1861
variation : 'variation' ,
1767
1862
position : 'position' ,
1768
1863
month : 'month' ,
1769
- year : 'year'
1864
+ year : 'year' ,
1865
+ hours : 'hours' ,
1866
+ days : 'days'
1770
1867
} ,
1771
1868
1772
1869
eventClass : 'blue'
0 commit comments