Skip to content

Commit d77cc99

Browse files
authored
feat(calendar): disabledhours
This PR allow some hours to be disabled trough a new parameter called disabledHours.
1 parent 32be6c7 commit d77cc99

File tree

1 file changed

+100
-3
lines changed

1 file changed

+100
-3
lines changed

src/definitions/modules/calendar.js

Lines changed: 100 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,19 @@ $.fn.calendar = function(parameters) {
390390
cell.attr("data-variation", disabledDate[metadata.variation]);
391391
}
392392
}
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+
}
393406
} else {
394407
eventDate = module.helper.findDayAsObject(cellDate, mode, settings.eventDates);
395408
if (eventDate !== null) {
@@ -975,7 +988,7 @@ $.fn.calendar = function(parameters) {
975988

976989
helper: {
977990
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){
979992
if(typeof d === 'string') {
980993
d = module.helper.sanitiseDate(d);
981994
}
@@ -1008,7 +1021,45 @@ $.fn.calendar = function(parameters) {
10081021
}
10091022
}
10101023
}
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+
})));
10121063
},
10131064
isEnabled: function(date, mode) {
10141065
if (mode === 'day') {
@@ -1076,6 +1127,49 @@ $.fn.calendar = function(parameters) {
10761127
}
10771128
return null;
10781129
},
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+
},
10791173
sanitiseDate: function (date) {
10801174
if (!(date instanceof Date)) {
10811175
date = parser.date('' + date, settings);
@@ -1361,6 +1455,7 @@ $.fn.calendar.settings = {
13611455
multiMonth : 1, // show multiple months when in 'day' mode
13621456
minTimeGap : 5,
13631457
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.
13641459
disabledDates : [], // specific day(s) which won't be selectable and contain additional information.
13651460
disabledDaysOfWeek : [], // day(s) which won't be selectable(s) (0 = Sunday)
13661461
enabledDates : [], // specific day(s) which will be selectable, all other days will be disabled
@@ -1766,7 +1861,9 @@ $.fn.calendar.settings = {
17661861
variation: 'variation',
17671862
position: 'position',
17681863
month: 'month',
1769-
year: 'year'
1864+
year: 'year',
1865+
hours: 'hours',
1866+
days: 'days'
17701867
},
17711868

17721869
eventClass: 'blue'

0 commit comments

Comments
 (0)