Skip to content

Commit

Permalink
feat(calendar): add eventDates support and onSelect handler
Browse files Browse the repository at this point in the history
Adds support for eventDates and a new event handler onSelect to provide individual functionality whenever a cell-item was clicked.
This works similar as disabledDates by providing the option to set a tooltip given a message to a date cell.In addition a given class can be added to the cell. Otherwise a default eventClass (default blue) will be added to every event-cell.

Closes #674
  • Loading branch information
lubber-de authored and Sean committed Apr 27, 2019
1 parent 9604a02 commit 1b4a264
Showing 1 changed file with 36 additions and 14 deletions.
50 changes: 36 additions & 14 deletions src/definitions/modules/calendar.js
Original file line number Diff line number Diff line change
Expand Up @@ -336,11 +336,20 @@ $.fn.calendar = function(parameters) {
var adjacent = isDay && cellDate.getMonth() !== ((month + 12) % 12);
var disabled = (!settings.selectAdjacentDays && adjacent) || !module.helper.isDateInRange(cellDate, mode) || settings.isDisabled(cellDate, mode) || module.helper.isDisabled(cellDate, mode) || !module.helper.isEnabled(cellDate, mode);
if (disabled) {
var disabledReason = module.helper.disabledReason(cellDate, mode);
if (disabledReason !== null) {
cell.attr("data-tooltip", disabledReason[metadata.message]);
var disabledDate = module.helper.findDayAsObject(cellDate, mode, settings.disabledDates);
if (disabledDate !== null && disabledDate[metadata.message]) {
cell.attr("data-tooltip", disabledDate[metadata.message]);
cell.attr("data-position", tooltipPosition);
}
} else {
var eventDate = module.helper.findDayAsObject(cellDate, mode, settings.eventDates);
if (eventDate !== null) {
cell.addClass(eventDate[metadata.class] || settings.eventClass);
if (eventDate[metadata.message]) {
cell.attr("data-tooltip", eventDate[metadata.message]);
cell.attr("data-position", tooltipPosition);
}
}
}
var active = module.helper.dateEqual(cellDate, date, mode);
var isToday = module.helper.dateEqual(cellDate, today, mode);
Expand Down Expand Up @@ -483,7 +492,7 @@ $.fn.calendar = function(parameters) {
var date = target.data(metadata.date);
var focusDate = target.data(metadata.focusDate);
var mode = target.data(metadata.mode);
if (date) {
if (date && settings.onSelect.call(element, date, module.get.mode()) !== false) {
var forceSet = target.hasClass(className.today);
module.selectDate(date, forceSet);
}
Expand Down Expand Up @@ -845,14 +854,19 @@ $.fn.calendar = function(parameters) {
return true;
}
},
disabledReason: function(date, mode) {
findDayAsObject: function(date, mode, dates) {
if (mode === 'day') {
for (var i = 0; i < settings.disabledDates.length; i++) {
var d = settings.disabledDates[i];
if (d !== null && typeof d === 'object' && module.helper.dateEqual(date, d[metadata.date], mode)) {
var reason = {};
reason[metadata.message] = d[metadata.message];
return reason;
var i = 0, il = dates.length;
var d;
for (; i < il; i++) {
d = dates[i];
if (d instanceof Date && module.helper.dateEqual(date, d, mode)) {
var dateObject = {};
dateObject[metadata.date] = d;
return dateObject;
}
else if (d !== null && typeof d === 'object' && d[metadata.date] && module.helper.dateEqual(date, d[metadata.date], mode) ) {
return d;
}
}
}
Expand All @@ -865,7 +879,7 @@ $.fn.calendar = function(parameters) {
if (!(date instanceof Date)) {
date = parser.date('' + date, settings);
}
if (isNaN(date.getTime())) {
if (!date || date === null || isNaN(date.getTime())) {
return undefined;
}
return date;
Expand Down Expand Up @@ -1146,6 +1160,7 @@ $.fn.calendar.settings = {
disabledDates : [], // specific day(s) which won't be selectable and contain additional information.
disabledDaysOfWeek : [], // day(s) which won't be selectable(s) (0 = Sunday)
enabledDates : [], // specific day(s) which will be selectable, all other days will be disabled
eventDates : [], // specific day(s) which will be shown in a different color and using tooltips
centuryBreak : 60, // starting short year until 99 where it will be assumed to belong to the last century
currentCentury : 2000, // century to be added to 2-digit years (00 to {centuryBreak}-1)
selectAdjacentDays : false, // The calendar can show dates from adjacent month. These adjacent month dates can also be made selectable.
Expand Down Expand Up @@ -1463,6 +1478,10 @@ $.fn.calendar.settings = {
onHidden: function () {
},

// callback before item is selected, return false to prevent selection
onSelect: function (date, mode) {
},

// is the given date disabled?
isDisabled: function (date, mode) {
return false;
Expand Down Expand Up @@ -1516,8 +1535,11 @@ $.fn.calendar.settings = {
maxDate: 'maxDate',
mode: 'mode',
monthOffset: 'monthOffset',
message: 'message'
}
message: 'message',
class: 'class'
},

eventClass: 'blue'
};

})(jQuery, window, document);

0 comments on commit 1b4a264

Please sign in to comment.