From 54acdb9b411e68b152db4a239f402deb8d6dc6ee Mon Sep 17 00:00:00 2001 From: "Janus C. H. Knudsen" Date: Thu, 2 Oct 2025 15:57:11 +0200 Subject: [PATCH] WIP --- src/managers/AllDayManager.ts | 89 ++++++++++++++++------------- wwwroot/css/calendar-layout-css.css | 14 ++++- 2 files changed, 59 insertions(+), 44 deletions(-) diff --git a/src/managers/AllDayManager.ts b/src/managers/AllDayManager.ts index 8e4dbf1..290de3a 100644 --- a/src/managers/AllDayManager.ts +++ b/src/managers/AllDayManager.ts @@ -462,7 +462,7 @@ export class AllDayManager { element.style.gridColumn = `${layout.startColumn} / ${layout.endColumn + 1}`; if (layout.row > ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS) - element.style.display = "none"; + element.classList.add('max-event-overflow-hide'); // Remove transition class after animation setTimeout(() => element.classList.remove('transitioning'), 200); @@ -523,68 +523,75 @@ export class AllDayManager { private toggleExpanded(): void { this.isExpanded = !this.isExpanded; this.checkAndAnimateAllDayHeight(); - } + + + let elements = document.querySelectorAll('swp-allday-container swp-event'); + elements.forEach(element: HTMLElement => { + + element.classList.toggle('max-event-overflow-hide'); + + } /** * Count number of events in a specific column using ColumnBounds */ private countEventsInColumn(columnBounds: ColumnBounds): number { - let columnIndex = columnBounds.index; - let count = 0; + let columnIndex = columnBounds.index; + let count = 0; - this.currentLayouts.forEach((layout) => { - // Check if event spans this column - if (layout.startColumn <= columnIndex && layout.endColumn >= columnIndex) { - count++; - } - }); - return count; - } + this.currentLayouts.forEach((layout) => { + // Check if event spans this column + if (layout.startColumn <= columnIndex && layout.endColumn >= columnIndex) { + count++; + } + }); + return count; + } /** * Update overflow indicators for collapsed state */ private updateOverflowIndicators(): void { - const container = this.getAllDayContainer(); - if (!container) return; + const container = this.getAllDayContainer(); + if(!container) return; - // Create overflow indicators for each column that needs them - let columns = ColumnDetectionUtils.getColumns(); + // Create overflow indicators for each column that needs them + let columns = ColumnDetectionUtils.getColumns(); - columns.forEach((columnBounds) => { - let totalEventsInColumn = this.countEventsInColumn(columnBounds); - let overflowCount = totalEventsInColumn - ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS + columns.forEach((columnBounds) => { + let totalEventsInColumn = this.countEventsInColumn(columnBounds); + let overflowCount = totalEventsInColumn - ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS - if (overflowCount > 0) { - // Create new overflow indicator element - let overflowElement = document.createElement('swp-event'); - overflowElement.className = 'max-event-overflow'; - overflowElement.style.gridRow = ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS.toString(); - overflowElement.style.gridColumn = columnBounds.index.toString(); - overflowElement.innerHTML = `+${overflowCount + 1} more`; - overflowElement.onclick = (e) => { - e.stopPropagation(); - this.toggleExpanded(); - }; + if (overflowCount > 0) { + // Create new overflow indicator element + let overflowElement = document.createElement('swp-event'); + overflowElement.className = 'max-event-indicator'; + overflowElement.style.gridRow = ALL_DAY_CONSTANTS.MAX_COLLAPSED_ROWS.toString(); + overflowElement.style.gridColumn = columnBounds.index.toString(); + overflowElement.innerHTML = `+${overflowCount + 1} more`; + overflowElement.onclick = (e) => { + e.stopPropagation(); + this.toggleExpanded(); + }; - container.appendChild(overflowElement); - } - }); - } + container.appendChild(overflowElement); + } + }); + } /** * Clear overflow indicators and restore normal state */ private clearOverflowIndicators(): void { - const container = this.getAllDayContainer(); - if (!container) return; + const container = this.getAllDayContainer(); + if(!container) return; - // Remove all overflow indicator elements - container.querySelectorAll('.max-event-overflow').forEach((element) => { - element.remove(); - }); + // Remove all overflow indicator elements + container.querySelectorAll('.max-event-indicator').forEach((element) => { + element.remove(); + }); - } + } } \ No newline at end of file diff --git a/wwwroot/css/calendar-layout-css.css b/wwwroot/css/calendar-layout-css.css index 42b8c95..61d1ffc 100644 --- a/wwwroot/css/calendar-layout-css.css +++ b/wwwroot/css/calendar-layout-css.css @@ -353,7 +353,7 @@ swp-allday-container swp-event { } /* Overflow indicator styling */ -swp-allday-container swp-event.max-event-overflow { +swp-allday-container swp-event.max-event-indicator { background: #e0e0e0 !important; color: #666 !important; border: 1px dashed #999 !important; @@ -364,13 +364,13 @@ swp-allday-container swp-event.max-event-overflow { justify-content: center; } -swp-allday-container swp-event.max-event-overflow:hover { +swp-allday-container swp-event.max-event-indicator:hover { background: #d0d0d0 !important; color: #333 !important; opacity: 1; } -swp-allday-container swp-event.max-event-overflow span { +swp-allday-container swp-event.max-event-indicator span { display: block; width: 100%; text-align: center; @@ -378,6 +378,14 @@ swp-allday-container swp-event.max-event-overflow span { font-weight: normal; } +swp-allday-container swp-event.max-event-overflow-show { + display: block; +} + +swp-allday-container swp-event.max-event-overflow-hide { + display: none; +} + /* Hide time element for all-day styled events */ swp-allday-container swp-event swp-event-time{ display: none;