diff --git a/CHANGELOG.md b/CHANGELOG.md index ca9184d796..9c417fd6bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ _This release is scheduled to be released on 2023-10-01._ - Added AnimateIn and animateOut in module config definition - Apply AnimateIn rules on the first start - Added automatic client page reload when server was restarted by setting `reloadAfterServerRestart: true` in `config.js`, per default `false` (#3105) +- Added eventClass option for customEvents on the default calendar ### Removed diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 30f7baa226..681177d514 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -42,7 +42,7 @@ Module.register("calendar", { hideDuplicates: true, showTimeToday: false, colored: false, - customEvents: [], // Array of {keyword: "", symbol: "", color: ""} where Keyword is a regexp and symbol/color are to be applied for matched + customEvents: [], // Array of {keyword: "", symbol: "", color: "", eventClass: ""} where Keyword is a regexp and symbol/color/eventClass are to be applied for matched tableClass: "small", calendars: [ { @@ -321,12 +321,12 @@ Module.register("calendar", { } } - // Color events if custom color is specified + // Color events if custom color or eventClass are specified if (this.config.customEvents.length > 0) { for (let ev in this.config.customEvents) { - if (typeof this.config.customEvents[ev].color !== "undefined" && this.config.customEvents[ev].color !== "") { - let needle = new RegExp(this.config.customEvents[ev].keyword, "gi"); - if (needle.test(event.title)) { + let needle = new RegExp(this.config.customEvents[ev].keyword, "gi"); + if (needle.test(event.title)) { + if (typeof this.config.customEvents[ev].color !== "undefined" && this.config.customEvents[ev].color !== "") { // Respect parameter ColoredSymbolOnly also for custom events if (this.config.coloredText) { eventWrapper.style.cssText = `color:${this.config.customEvents[ev].color}`; @@ -337,6 +337,9 @@ Module.register("calendar", { } break; } + if (typeof this.config.customEvents[ev].eventClass !== "undefined" && this.config.customEvents[ev].eventClass !== "") { + eventWrapper.className += ` ${this.config.customEvents[ev].eventClass}`; + } } } } diff --git a/tests/configs/modules/calendar/custom.js b/tests/configs/modules/calendar/custom.js index 993ac483e6..4153da0460 100644 --- a/tests/configs/modules/calendar/custom.js +++ b/tests/configs/modules/calendar/custom.js @@ -11,7 +11,7 @@ let config = { module: "calendar", position: "bottom_bar", config: { - customEvents: [{ keyword: "CustomEvent", symbol: "dice" }], + customEvents: [{ keyword: "CustomEvent", symbol: "dice", eventClass: "undo" }], calendars: [ { maximumEntries: 5, diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js index fc9c1a174e..299bdf664e 100644 --- a/tests/e2e/modules/calendar_spec.js +++ b/tests/e2e/modules/calendar_spec.js @@ -60,6 +60,10 @@ describe("Calendar module", () => { await testElementLength(".calendar .event .fa-dice", 1); }); + it("should show a customEvent calendar eventClass in one event", async () => { + await testElementLength(".calendar .event.undo", 1); + }); + it("should show two custom icons for repeating events", async () => { await testElementLength(".calendar .event .fa-undo", 2); });