Fix many issues with sliceMultiDayEvents

This commit is contained in:
Michaël Arnauts 2019-04-10 10:31:55 +02:00
parent 834ab5c6b9
commit 4677a3fd89

View File

@ -462,10 +462,11 @@ Module.register("calendar", {
var events = []; var events = [];
var today = moment().startOf("day"); var today = moment().startOf("day");
var now = new Date(); var now = new Date();
var future = moment().startOf("day").add(this.config.maximumNumberOfDays, "days").toDate();
for (var c in this.calendarData) { for (var c in this.calendarData) {
var calendar = this.calendarData[c]; var calendar = this.calendarData[c];
for (var e in calendar) { for (var e in calendar) {
var event = calendar[e]; var event = JSON.parse(JSON.stringify(calendar[e])); // clone object
if(this.config.hidePrivate) { if(this.config.hidePrivate) {
if(event.class === "PRIVATE") { if(event.class === "PRIVATE") {
// do not add the current event, skip it // do not add the current event, skip it
@ -487,23 +488,30 @@ Module.register("calendar", {
* otherwise, esp. in dateheaders mode it is not clear how long these events are. * otherwise, esp. in dateheaders mode it is not clear how long these events are.
*/ */
if (this.config.sliceMultiDayEvents) { if (this.config.sliceMultiDayEvents) {
var midnight = moment(event.startDate, "x").clone().startOf("day").add(1, "day").format("x"); //next midnight var splitEvents = [];
var midnight = moment(event.startDate, "x").clone().startOf("day").add(1, "day").format("x");
var count = 1; var count = 1;
var maxCount = Math.ceil(((event.endDate - 1) - moment(event.startDate, "x").endOf("day").format("x"))/(1000*60*60*24)) + 1 var maxCount = Math.ceil(((event.endDate - 1) - moment(event.startDate, "x").endOf("day").format("x"))/(1000*60*60*24)) + 1;
if (event.endDate > midnight) { while (event.endDate > midnight) {
while (event.endDate > midnight) { var thisEvent = JSON.parse(JSON.stringify(event)) // clone object
var nextEvent = JSON.parse(JSON.stringify(event)); //make a copy without reference to the original event thisEvent.today = thisEvent.startDate >= today && thisEvent.startDate < (today + 24 * 60 * 60 * 1000);
nextEvent.startDate = midnight; thisEvent.endDate = midnight;
event.endDate = midnight; thisEvent.title += " (" + count + "/" + maxCount + ")";
event.title += " (" + count + "/" + maxCount + ")"; splitEvents.push(thisEvent);
events.push(event);
event = nextEvent; event.startDate = midnight;
count += 1; count += 1;
midnight = moment(midnight, "x").add(1, "day").format("x"); //move further one day for next split midnight = moment(midnight, "x").add(1, "day").format("x"); // next day
} }
event.title += " ("+count+"/"+maxCount+")"; // Last day
} event.title += " ("+count+"/"+maxCount+")";
events.push(event); splitEvents.push(event);
for (event of splitEvents) {
if ((event.endDate > now) && (event.endDate <= future)) {
events.push(event);
}
}
} else { } else {
events.push(event); events.push(event);
} }
@ -513,7 +521,6 @@ Module.register("calendar", {
events.sort(function (a, b) { events.sort(function (a, b) {
return a.startDate - b.startDate; return a.startDate - b.startDate;
}); });
return events.slice(0, this.config.maximumEntries); return events.slice(0, this.config.maximumEntries);
}, },