Skip to content

Commit ac115ac

Browse files
authored
feat(calendar): add ability to disable months and years
This PR add the ability to disable entire month(s) and year(s) by using the disabledDates object. Example: disabledDates: [ { date: new Date("03/05/2020"), message: "One disabled date" }, { date: [new Date("02/11/2020"), new Date("02/12/2020"), new Date("02/13/2020")], message: "Array of disabled dates" }, { month: 3, message: "All April month are disabled" }, { month: [4, 5, 6], message: "May, June and July are disabled" }, { month: new Date("2020-03-01"), message: "Disabled month thank to a Date object" }, { year: 2021, message: "One disabled year" }, { year: [2018, 2019], message: "Array of disabled years" } ]
1 parent e3468c7 commit ac115ac

File tree

1 file changed

+62
-9
lines changed

1 file changed

+62
-9
lines changed

src/definitions/modules/calendar.js

Lines changed: 62 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -845,15 +845,38 @@ $.fn.calendar = function(parameters) {
845845

846846
helper: {
847847
isDisabled: function(date, mode) {
848-
return mode === 'day' && ((settings.disabledDaysOfWeek.indexOf(date.getDay()) !== -1) || settings.disabledDates.some(function(d){
848+
return (mode === 'day' || mode === 'month' || mode === 'year') && ((settings.disabledDaysOfWeek.indexOf(date.getDay()) !== -1) || settings.disabledDates.some(function(d){
849849
if(typeof d === 'string') {
850850
d = module.helper.sanitiseDate(d);
851851
}
852852
if (d instanceof Date) {
853853
return module.helper.dateEqual(date, d, mode);
854854
}
855-
if (d !== null && typeof d === 'object' && d[metadata.date]) {
856-
return module.helper.dateEqual(date, module.helper.sanitiseDate(d[metadata.date]), mode);
855+
if (d !== null && typeof d === 'object') {
856+
if (d[metadata.year]) {
857+
if (typeof d[metadata.year] === 'number') {
858+
return date.getFullYear() == d[metadata.year];
859+
} else if (Array.isArray(d[metadata.year])) {
860+
return d[metadata.year].indexOf(date.getFullYear()) > -1;
861+
}
862+
} else if (d[metadata.month]) {
863+
if (typeof d[metadata.month] === 'number') {
864+
return date.getMonth() == d[metadata.month];
865+
} else if (Array.isArray(d[metadata.month])) {
866+
return d[metadata.month].indexOf(date.getMonth()) > -1;
867+
} else if (d[metadata.month] instanceof Date) {
868+
var sdate = module.helper.sanitiseDate(d[metadata.month]);
869+
return (date.getMonth() == sdate.getMonth()) && (date.getFullYear() == sdate.getFullYear())
870+
}
871+
} else if (d[metadata.date] && mode === 'day') {
872+
if (d[metadata.date] instanceof Date) {
873+
return module.helper.dateEqual(date, module.helper.sanitiseDate(d[metadata.date]), mode);
874+
} else if (Array.isArray(d[metadata.date])) {
875+
return d[metadata.date].some(function(idate) {
876+
return module.helper.dateEqual(date, idate, mode);
877+
});
878+
}
879+
}
857880
}
858881
}));
859882
},
@@ -875,10 +898,9 @@ $.fn.calendar = function(parameters) {
875898
}
876899
},
877900
findDayAsObject: function(date, mode, dates) {
878-
if (mode === 'day') {
879-
var i = 0, il = dates.length;
901+
if (mode === 'day' || mode === 'month' || mode === 'year') {
880902
var d;
881-
for (; i < il; i++) {
903+
for (var i = 0; i < dates.length; i++) {
882904
d = dates[i];
883905
if(typeof d === 'string') {
884906
d = module.helper.sanitiseDate(d);
@@ -888,8 +910,37 @@ $.fn.calendar = function(parameters) {
888910
dateObject[metadata.date] = d;
889911
return dateObject;
890912
}
891-
else if (d !== null && typeof d === 'object' && d[metadata.date] && module.helper.dateEqual(date,module.helper.sanitiseDate(d[metadata.date]), mode) ) {
892-
return d;
913+
else if (d !== null && typeof d === 'object') {
914+
if (d[metadata.year]) {
915+
if (typeof d[metadata.year] === 'number' && date.getFullYear() == d[metadata.year]) {
916+
return d;
917+
} else if (Array.isArray(d[metadata.year])) {
918+
if (d[metadata.year].indexOf(date.getFullYear()) > -1) {
919+
return d;
920+
}
921+
}
922+
} else if (d[metadata.month]) {
923+
if (typeof d[metadata.month] === 'number' && date.getMonth() == d[metadata.month]) {
924+
return d;
925+
} else if (Array.isArray(d[metadata.month])) {
926+
if (d[metadata.month].indexOf(date.getMonth()) > -1) {
927+
return d;
928+
}
929+
} else if (d[metadata.month] instanceof Date) {
930+
var sdate = module.helper.sanitiseDate(d[metadata.month]);
931+
if ((date.getMonth() == sdate.getMonth()) && (date.getFullYear() == sdate.getFullYear())) {
932+
return d;
933+
}
934+
}
935+
} else if (d[metadata.date] && mode === 'day') {
936+
if (d[metadata.date] instanceof Date && module.helper.dateEqual(date, module.helper.sanitiseDate(d[metadata.date]), mode)) {
937+
return d;
938+
} else if (Array.isArray(d[metadata.date])) {
939+
if(d[metadata.date].some(function(idate) { return module.helper.dateEqual(date, idate, mode); })) {
940+
return d;
941+
}
942+
}
943+
}
893944
}
894945
}
895946
}
@@ -1576,7 +1627,9 @@ $.fn.calendar.settings = {
15761627
type: 'type',
15771628
monthOffset: 'monthOffset',
15781629
message: 'message',
1579-
class: 'class'
1630+
class: 'class',
1631+
month: 'month',
1632+
year: 'year'
15801633
},
15811634

15821635
eventClass: 'blue'

0 commit comments

Comments
 (0)