From 0b67ad4cfb42c83500b1703c7cd74cffa4ca9ffa Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 3 May 2026 16:35:17 +0200 Subject: [PATCH] =?UTF-8?q?Kalender-UI:=20Ber=C3=BCcksichtige=20INTERVAL?= =?UTF-8?q?=20und=20DTSTART=20bei=20monatlichen=20RRULEs.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der JS-RRULE-Parser im Kalender ignorierte bisher INTERVAL=, sodass z.B. FREQ=MONTHLY;INTERVAL=3 als reines monatliches Event angezeigt wurde. Außerdem wurden monatliche Events auch in Monaten vor ihrem DTSTART angezeigt. Co-Authored-By: Claude Opus 4.7 (1M context) Signed-off-by: Hauke Mehrtens --- assets/js/calendar.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/js/calendar.js b/assets/js/calendar.js index 5aa9d6b..ffb3c7e 100644 --- a/assets/js/calendar.js +++ b/assets/js/calendar.js @@ -131,6 +131,12 @@ document.addEventListener('DOMContentLoaded', function() { else if (rruleStr.includes("FREQ=MONTHLY") && rruleStr.includes("BYDAY")) { const bydayMatch = rruleStr.match(/BYDAY=([^;]+)/); if (bydayMatch) { + const intervalMatch = rruleStr.match(/INTERVAL=(\d+)/); + const interval = intervalMatch ? parseInt(intervalMatch[1]) : 1; + const monthsFromStart = (year - startDate.getFullYear()) * 12 + (month - startDate.getMonth()); + if (monthsFromStart < 0 || monthsFromStart % interval !== 0) { + return []; + } const bydays = bydayMatch[1].split(','); const dayMap = { 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6, 'SU': 0