diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 13df45e8..3aaed2ae 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -462,10 +462,11 @@ Module.register("calendar", { var events = []; var today = moment().startOf("day"); var now = new Date(); + var future = moment().startOf("day").add(this.config.maximumNumberOfDays, "days").toDate(); for (var c in this.calendarData) { var calendar = this.calendarData[c]; for (var e in calendar) { - var event = calendar[e]; + var event = JSON.parse(JSON.stringify(calendar[e])); // clone object if(this.config.hidePrivate) { if(event.class === "PRIVATE") { // 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. */ 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 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) { - var nextEvent = JSON.parse(JSON.stringify(event)); //make a copy without reference to the original event - nextEvent.startDate = midnight; - event.endDate = midnight; - event.title += " (" + count + "/" + maxCount + ")"; - events.push(event); - event = nextEvent; - count += 1; - midnight = moment(midnight, "x").add(1, "day").format("x"); //move further one day for next split - } - event.title += " ("+count+"/"+maxCount+")"; - } - events.push(event); + var maxCount = Math.ceil(((event.endDate - 1) - moment(event.startDate, "x").endOf("day").format("x"))/(1000*60*60*24)) + 1; + while (event.endDate > midnight) { + var thisEvent = JSON.parse(JSON.stringify(event)) // clone object + thisEvent.today = thisEvent.startDate >= today && thisEvent.startDate < (today + 24 * 60 * 60 * 1000); + thisEvent.endDate = midnight; + thisEvent.title += " (" + count + "/" + maxCount + ")"; + splitEvents.push(thisEvent); + + event.startDate = midnight; + count += 1; + midnight = moment(midnight, "x").add(1, "day").format("x"); // next day + } + // Last day + event.title += " ("+count+"/"+maxCount+")"; + splitEvents.push(event); + + for (event of splitEvents) { + if ((event.endDate > now) && (event.endDate <= future)) { + events.push(event); + } + } } else { events.push(event); } @@ -513,7 +521,6 @@ Module.register("calendar", { events.sort(function (a, b) { return a.startDate - b.startDate; }); - return events.slice(0, this.config.maximumEntries); },