1# Calendar Plugin Changelog 2 3## Version 6.14.0 (2026-02-14) - STABLE RELEASE 4 5### Code Cleanup & Localization 6- Added localization for all static calendar strings (EN/DE) 7- New lang keys: `previous_month`, `next_month`, `print_calendar`, `no_events_scheduled`, `calendar_label`, `details` 8- Code review and cleanup completed 9- Updated README.md and plugin documentation 10 11### Static Calendar Features (v6.13.x consolidated) 12- Read-only presentation mode: `{{calendar static}}` 13- Custom titles: `title="My Events"` 14- Month locking: `month=2` disables navigation 15- Print button with clean itinerary output 16- All themes supported: matrix, pink, purple, professional, wiki, dark, light 17- `noprint` option to hide print functionality 18- Formatted descriptions in tooltips and itinerary 19 20### Other Improvements in 6.13.x 21- Admin menu icon (SVG) 22- Config import fix for `return array()` syntax 23- Mobile touch button fixes 24- Important events in day popup with star icons 25- Time picker grouped by period 26- Multi-day event time validation 27 28## Version 6.13.13 (2026-02-14) - PRINT BUTTON CENTERING 29 30### Fixed Print Button Icon Alignment 31- Added `display: flex`, `align-items: center`, `justify-content: center` 32- Added `padding: 0` and `line-height: 1` 33- Icon now properly centered in circle 34 35## Version 6.13.12 (2026-02-14) - SIMPLE TOOLTIP 36 37### Simplified Hover Tooltip 38- Removed custom JS tooltip (was causing triple popups) 39- Uses native browser `title` attribute only 40- Plain text with formatting converted: `**bold**` → `*bold*`, `//italic//` → `_italic_` 41- Links shown as: `text (url)` 42- Added emoji before time for visual clarity 43- Itinerary still shows full HTML formatting 44 45## Version 6.13.11 (2026-02-14) - FORMATTED DESCRIPTIONS 46 47### Rich Text Formatting in Static Calendar 48- **Hover tooltips** now show formatted text (bold, italic, links, line breaks) 49- **Itinerary descriptions** display with full formatting 50- Uses existing `renderDescription()` function for consistency 51- Supports: `**bold**`, `//italic//`, `[[links]]`, `[markdown](links)`, line breaks 52 53### Technical Details 54- Added `data-tooltip` attribute with rich HTML content 55- New JavaScript tooltip handler with smart positioning 56- CSS styles for `.static-tooltip` and itinerary formatting 57- Tooltips stay within viewport bounds 58 59## Version 6.13.10 (2026-02-14) - PRINT MARGINS FIX v3 60 61### Fixed Print Margins - Inline Styles Approach 62- Removed reliance on `@page` CSS (browser support inconsistent) 63- Uses inline style `padding: 50px 60px` directly on wrapper div 64- Simplified CSS for better browser compatibility 65- Smaller table font (12px) for better fit 66- Set `max-width: 800px` on content wrapper 67 68## Version 6.13.9 (2026-02-14) - PRINT MARGINS FIX v2 69 70### Fixed Print Margins 71- Added `.print-wrapper` div with 0.5in padding/margin 72- Uses both `@page` margin AND wrapper margins for compatibility 73- Set `@page { margin: 1in 0.75in }` (top/bottom 1in, sides 0.75in) 74- Wrapper has `max-width: 7.5in` to fit standard letter size 75- Smaller fonts (0.85em) to fit more content 76- Added 250ms delay before print to ensure styles load 77 78## Version 6.13.8 (2026-02-14) - PRINT MARGINS FIX 79 80### Improved Print Layout 81- Added `@page { margin: 0.75in }` for proper print margins 82- Increased body padding to 40px for screen preview 83- Smaller font sizes to fit better on page 84- Description column limited width with word-wrap 85- Table header repeats on each page (`display: table-header-group`) 86- Rows avoid page breaks in middle (`page-break-inside: avoid`) 87- Print color adjust enabled for backgrounds 88 89## Version 6.13.7 (2026-02-14) - ALL THEMES FOR STATIC CALENDAR 90 91### Added All Theme Options 92Now all themes work with static calendar: 93 94| Theme | Description | 95|-------|-------------| 96| `matrix` | Green on dark (default Matrix style) | 97| `pink` | Pink/magenta on dark | 98| `purple` | Purple/violet on dark | 99| `professional` | Blue on white (business style) | 100| `wiki` | Neutral gray (matches DokuWiki) | 101| `dark` | Blue on dark gray | 102| `light` | Clean white/gray | 103 104### Examples 105``` 106{{calendar theme=matrix static}} 107{{calendar theme=purple static}} 108{{calendar theme=professional static}} 109{{calendar theme=wiki static}} 110``` 111 112## Version 6.13.6 (2026-02-14) - QUOTED PARAMETER FIX 113 114### Fixed Quoted Parameter Parsing 115- Titles with spaces now work: `title="Feb 26 Expense Log"` 116- Uses regex to properly parse: `key="value with spaces"` 117- Supports both double and single quotes 118- Example: `{{calendar title="My Custom Title" static}}` 119 120## Version 6.13.5 (2026-02-14) - STATIC CALENDAR OPTIONS 121 122### New Static Calendar Options 123 124| Option | Description | Example | 125|--------|-------------|---------| 126| `title=X` | Custom title instead of month name | `title="Club Meetings"` | 127| `noprint` | Hide print button and print view | `{{calendar static noprint}}` | 128| `theme=X` | Apply specific theme (matrix, pink, dark, light) | `theme=matrix` | 129 130### Fixed Month/Year Lock 131- When you specify `month=X` or `year=X`, navigation is now disabled 132- `{{calendar month=2 static}}` shows only February with no nav arrows 133- `{{calendar year=2025 month=12 static}}` locks to December 2025 134 135### Examples 136``` 137{{calendar static}} // Navigable, current month 138{{calendar month=2 static}} // Locked to February 139{{calendar title="Team Events" static}} // Custom title 140{{calendar theme=matrix static}} // Matrix theme 141{{calendar namespace=club static noprint}} // No print button 142{{calendar month=3 title="March Meetings" theme=pink static}} 143``` 144 145## Version 6.13.4 (2026-02-14) - DEDICATED PRINT BUTTON 146 147### Added Print Button to Static Calendar 148- New ️ print button in the calendar header 149- Opens a clean popup window with ONLY the itinerary content 150- Automatically triggers print dialog 151- Window closes after printing 152- No DokuWiki headers/footers/sidebars - just the calendar 153 154### How It Works 155- Extracts the print view HTML 156- Creates a new window with minimal styling 157- Calls `window.print()` automatically 158- Clean single-page output 159 160## Version 6.13.3 (2026-02-14) - PRINT BLANK PAGES FIX 161 162### Fixed Blank Pages When Printing 163- Aggressively hide ALL screen view elements and children in print 164- Reset height/width to 0 with !important on grid, cells, events 165- Ensure print view elements have proper display table properties 166- Force all hidden elements to position:absolute off-screen 167 168## Version 6.13.2 (2026-02-14) - STATIC CALENDAR RESPONSIVE FIX 169 170### Improved Static Calendar Layout 171- Changed from `max-width: 900px` to `width: 100%` for full container fit 172- Added `table-layout: fixed` for consistent column widths 173- Added `overflow-x: auto` for horizontal scroll on very small screens 174- Reduced header padding and font sizes for better fit 175- Improved responsive breakpoints for mobile (768px and 480px) 176- Hide time on very small screens to save space 177- Better touch targets for navigation buttons 178 179## Version 6.13.1 (2026-02-14) - STATIC CALENDAR FIX 180 181### Bug Fix 182- Added missing `getImportantNamespaces()` helper method 183- Fixed `loadEventsForMonth` → use existing `loadEvents` method 184- Added multi-namespace/wildcard support to static calendar 185 186## Version 6.13.0 (2026-02-14) - STATIC CALENDAR MODE 187 188### New Static/Presentation Mode 189Read-only calendar view for public display and printing. 190 191**Usage:** 192``` 193{{calendar static}} 194{{calendar namespace=meetings static}} 195``` 196 197**Screen View Features:** 198- Clean calendar grid without edit/delete buttons 199- Month navigation (prev/next arrows) 200- Hover tooltips showing full event details (title, time, description) 201- Important events highlighted with ⭐ and golden background 202- Today's date highlighted 203- Responsive design for mobile 204 205**Print View Features:** 206- Automatically switches to itinerary format when printing 207- Table layout: Date | Time | Event | Details 208- Important events marked with ⭐ 209- Dates grouped (date only shown once per day) 210- Page break handling for long lists 211- Clean black & white friendly output 212 213**Files Changed:** 214- `syntax.php`: Added `renderStaticCalendar()` method 215- `action.php`: Added `getStaticCalendar()` AJAX handler 216- `calendar-main.js`: Added `navStaticCalendar()` function 217- `style.css`: Added static calendar styles + print media queries 218 219## Version 6.12.7 (2026-02-14) - ADMIN MENU ICON 220 221### Added Admin Menu Icon 222- New monochrome SVG calendar icon for DokuWiki admin menu 223- Icon shows calendar with binding rings, header, and date dots 224- Matches DokuWiki's admin interface style 225- Added `getMenuIcon()` method to admin.php 226- Icon file: `images/icon.svg` 227 228## Version 6.12.6 (2026-02-14) - CONFIG IMPORT FIX 229 230### Fixed Config Import Validation 231- Now accepts both `return [` and `return array(` syntax 232- Regex updated from `/return\s*\[/` to `/return\s*(\[|array\s*\()/` 233- Older PHP config files using `return array(...)` now import correctly 234 235## Version 6.12.5 (2026-02-14) - MOBILE BUTTON FIX 236 237### Fixed Delete/Edit Buttons on Mobile 238- Added `type="button"` attribute to prevent form submission issues 239- Added `touchend` event delegation for reliable mobile touch handling 240- Increased button touch targets (32px default, 40px on mobile) 241- Added `touch-action: manipulation` to prevent touch delays 242- Added `-webkit-tap-highlight-color` for visual feedback 243 244### Technical Details 245- Mobile browsers sometimes don't fire `onclick` reliably 246- New `touchend` handler calls `btn.click()` explicitly 247- Larger touch targets meet accessibility guidelines (44px recommended) 248 249## Version 6.12.4 (2026-02-14) - STAR INLINE FIX 250 251### Fixed Star Position in Day Popup 252- Star icon now displays inline with event title (left side) 253- Changed `.popup-event-title` from `flex: 1 1 100%` to `flex: 1 1 auto` 254- Star and title stay on same line instead of star being above 255 256## Version 6.12.3 (2026-02-14) - DAY POPUP IMPORTANT EVENTS 257 258### Important Event Highlighting in Day Popup 259- Events from important namespaces now show ⭐ star icon 260- Golden gradient background highlight for important events 261- Golden border glow effect matching other views 262- Consistent styling across calendar grid, sidebar, and day popup 263 264### Technical Details 265- Added `importantNamespaces` check to `showDayPopup()` function 266- Added `.popup-event-important` and `.popup-event-star` CSS classes 267- Reads important namespaces from `container.dataset.importantNamespaces` 268 269## Version 6.12.2 (2026-02-14) - MULTI-DAY EVENT TIME FIX 270 271### Multi-Day Event End Time 272- End time now allows all times when end date differs from start date 273- Example: Event from 9:00 PM on Feb 28 to 5:00 AM on Feb 29 now works correctly 274- Same-day events still enforce end time > start time 275- Changing end date now triggers time validation update 276 277### Technical Details 278- `updateEndTimeOptions()` checks if `endDate !== startDate` 279- If multi-day, all time options are enabled 280- Added `onchange` handler to both start date and end date fields 281 282## Version 6.12.1 (2026-02-14) - TIME PICKER & EDIT DIALOG FIX 283 284### Improved Time Picker 285- Grouped time options by period (Morning, Afternoon, Evening, Night) 286- Much easier to navigate - no more scrolling through 96 options 287- End time options before start time are now hidden/disabled 288- Invalid end times automatically corrected when start time changes 289 290### Fixed Edit Event Dialog Draggability 291- Edit dialog is now properly draggable (was broken due to async AJAX) 292- Moved `makeDialogDraggable()` call inside the AJAX success callback 293- Removed redundant wrapper patch that didn't work with async code 294 295### Technical Details 296- Time picker uses `<optgroup>` for visual grouping 297- End time validation hides invalid options (not just disables) 298- Both Add and Edit dialogs now call `makeDialogDraggable()` directly 299 300## Version 6.12.0 (2026-02-14) - EVENT EDITOR DIALOG IMPROVEMENTS 301 302### Fixed Event Editor Dialog Draggability 303- Fixed duplicate event listener accumulation that caused performance degradation 304- Each time dialog opened, new drag listeners were added without removing old ones 305- Now properly cleans up old listeners before adding new ones 306- Added `cursor: grabbing` feedback while dragging 307- Dialog position resets when reopened (no more stuck positions) 308- Excluded close button from triggering drag 309 310### Optimized Time Selection Performance 311- Simplified `updateEndTimeOptions()` to be much faster 312- Removed expensive loop through 96 options checking style.display 313- Now just validates current selection and sets new value if invalid 314- Should eliminate freezing/lag when selecting start time 315 316### Technical Details 317- Added `_dragCleanup` function stored on handle element 318- Cleanup called before re-initialization 319- Removed unnecessary `setTranslate` helper function 320 321## Version 6.11.4 (2026-02-13) - JAVASCRIPT LOCALIZATION 322 323### JavaScript Frontend Localization 324- Added `getCalendarLang()` helper function 325- Added `getJsLangStrings()` PHP method 326- Embedded JSON language data in all render functions 327- Localized month names (full + short) 328- Localized dialog titles, confirmations, badges, empty states 329 330## Version 6.11.3 (2026-02-13) - SIDEBAR WIDGET LOCALIZATION 331 332### Sidebar Widget 333- Fixed `\n` in single-quoted strings → double-quoted for proper newlines 334- Localized "Runs every X minutes" cron descriptions 335- Event dialog labels, placeholders, options 336- Day names, ordinal positions, color names 337- Today/Tomorrow/Important section headers 338 339## Version 6.11.2 (2026-02-13) - ADMIN BACKEND LOCALIZATION 340 341### Admin Backend 342- Localized ~220 hardcoded strings in admin.php 343- AJAX JSON responses, redirect messages, error messages 344- Pattern names (Daily, Weekly, Monthly, etc.) 345 346## Version 6.11.1 (2026-02-13) - CONFIG IMPORT BUG FIX 347 348### Bug Fix 349- Fixed regex to accept both `return [` and `return array(` syntax 350- File: `admin.php` lines 5947, 6001 351 352## Version 6.10.6 (2026-02-13) - MANAGE RECURRING DIALOG LOCALIZATION 353 354### Localized Manage Recurring Series Dialog 355Complete translation of the "Manage" button dialog for recurring events: 356 357**Section Headers:** 358- "Manage Recurring Series" → "Wiederkehrende Serie verwalten" 359- "Extend Series" → "Serie erweitern" 360- "Trim Past Events" → "Vergangene Termine kürzen" 361- "Change Pattern" → "Muster ändern" 362- "Change Start Date" → "Startdatum ändern" 363- "Pause Series" / "Resume Series" → "Serie pausieren" / "Serie fortsetzen" 364 365**Labels & Buttons:** 366- All field labels (Add occurrences, Days apart, Remove before, New interval, etc.) 367- Action buttons (Extend, Trim, Change, Shift, Pause, Resume, Close) 368- Interval dropdown options (Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly) 369- Help text and notes 370 371**Confirmation Dialogs:** 372- Trim confirmation with date 373- Respace confirmation 374- Shift confirmation 375 376### Added 60+ Language Strings for Dialogs 377Complete vocabulary for recurring event management in both English and German. 378 379### Note on Browser Validation Messages 380"Please fill out this field" is a browser-native message controlled by the browser's language setting, not our plugin. 381 382## Version 6.10.5 (2026-02-13) - DIALOG LOCALIZATION 383 384### Localized All JavaScript Dialogs 385 386**New Namespace Dialog:** 387- Prompt text with examples now in German 388- Invalid namespace error message 389 390**Rename Namespace Dialog:** 391- Prompt text with current name 392 393**Delete Confirmations:** 394- Delete selected events confirmation 395- Delete namespace confirmation 396- Delete recurring series confirmation 397 398**Trim Recurring Events:** 399- "Counting..." / "Zähle..." 400- "Trimming..." / "Kürze..." 401- "No past recurring events found" message 402- "Found X past recurring events" confirmation 403- Button text resets 404 405### Added 15+ New Dialog Strings 406Both English and German translations for all interactive prompts and confirmations. 407 408## Version 6.10.4 (2026-02-13) - COMPLETE MANAGE TAB LOCALIZATION 409 410### Fixed Remaining English Strings 411 412**Namespace Explorer Control Bar:** 413- "➡️ Move" → "➡️ Verschieben" 414- "➕ New Namespace" → "➕ Neuer Namensraum" 415- " Cleanup" → " Bereinigen" 416- "0 selected" → "0 ausgewählt" 417- "%d selected" → "%d ausgewählt" 418 419**Recurring Events Button Tooltips:** 420- "Edit title, time, namespace, pattern" → "Titel, Zeit, Namensraum, Muster bearbeiten" 421- "Extend, trim, pause, change dates" → "Erweitern, kürzen, pausieren, Daten ändern" 422- "Delete all occurrences" → "Alle Vorkommen löschen" 423 424**JavaScript Confirmation Messages:** 425- "No events selected" → "Keine Termine ausgewählt" 426- Delete confirmation with count 427- Delete namespace confirmation 428- "Scanning..." → "Scanne..." 429- "Cleaning..." → "Bereinige..." 430- "No empty namespaces found" message 431- "Found X item(s) to clean up" → "X Element(e) zum Bereinigen gefunden" 432- "Proceed with cleanup?" → "Mit Bereinigung fortfahren?" 433 434### Technical 435- Added adminLang JavaScript object with all translatable strings 436- All dynamic JavaScript messages now use language system 437 438## Version 6.10.3 (2026-02-13) - RECURRING EVENTS & DROP TARGET LOCALIZATION 439 440### Additional Localization for Manage Events Tab 441 442**Recurring Events Table:** 443- Search placeholder: "Wiederkehrende Termine suchen..." 444- Table headers: Titel, Namensraum, Muster, Zeitraum, Anzahl, Quelle, Aktionen 445- Source labels: Markiert / Erkannt (was Flagged / Detected) 446- Action buttons: Bearb. / Verwalten / Lö. (was Edit / Manage / Del) 447- Pattern badges: Täglich, Wöchentlich, Monatlich, Jährlich, Benutzerdefiniert 448- Footer: "Gesamt: X Serien" (was "Total: X series") 449- No results message 450 451**Namespace Explorer Drop Zones:** 452- Header: " Zielbereich" (was "Drop Target") 453- Drop hint: "Hier ablegen" (was "Drop here") 454- Default namespace label consistent 455 456### Added 25+ New Language Strings 457- Recurring table columns and labels 458- Pattern translations 459- Action button labels 460- Drop zone labels 461 462## Version 6.10.2 (2026-02-13) - MANAGE EVENTS TAB LOCALIZATION 463 464### Localized: Manage Events Tab (Complete) 465All text in the Manage Events admin tab now uses the language system: 466 467**Events Manager Section:** 468- Page title, section header, description 469- Statistics labels (Total Events, Namespaces, JSON Files, Recurring) 470- "Last scanned" timestamp label 471- Button labels (Re-scan Events, Export All Events, Import Events) 472- "View Breakdown by Namespace" expandable section 473- Table headers (Namespace, Events, Files) 474 475**Important Namespaces Section:** 476- Section header and description 477- Visual Effects descriptions (Calendar Grid, Event Sidebar, Sidebar Widget, Day Popup) 478- Save button and hint text 479 480**Cleanup Old Events Section:** 481- Section header and description 482- Radio button labels (By Age, By Status, By Date Range) 483- Age options (Delete events older than, months, years) 484- Status options (Completed tasks, Past events) 485- Date range labels (From, To) 486- Namespace filter label and placeholder 487- Preview and Delete button labels 488- JavaScript confirmation messages 489- Loading/error states 490 491**Recurring Events Section:** 492- Section header 493- Button labels (Trim All Past, Rescan) 494 495**Namespace Explorer Section:** 496- Section header and description 497- Search placeholder 498- Control bar buttons (All, None, Delete, Move to) 499- Datalist placeholder 500 501### Added 60+ New Language Strings 502Both English and German language files expanded with comprehensive admin terminology. 503 504## Version 6.10.1 (2026-02-13) - LANGUAGE SYSTEM FIX 505 506### Bug Fix: Language Files Not Working 507- Fixed `getMenuText()` to use `$this->getLang('menu')` instead of hardcoded string 508- Admin menu now correctly shows "Kalenderverwaltung" in German 509- Admin tabs now use language system: 510 - "Manage Events" → "Termine verwalten" 511 - "Update Plugin" → "Plugin aktualisieren" 512 - "Outlook Sync" → "Outlook-Sync" 513 - "Themes" → "Designs" 514 515### Added More Language Strings 516- Admin tab labels 517- Admin section headers (Event Browser, Important Namespaces, etc.) 518- Sync settings labels 519- Common button labels (Run Now, Download, Upload, Delete, etc.) 520 521## Version 6.10.0 (2026-02-13) - GERMAN LANGUAGE SUPPORT 522 523### New Feature: German Language Translation 524- Added complete German (de) language file 525- Expanded English language file with comprehensive translatable strings 526- Both files include 100+ translation strings covering: 527 - General terms (calendar, events, dates) 528 - Event fields (title, description, time, etc.) 529 - Actions (add, edit, delete, save, cancel) 530 - Task-related terms 531 - Recurring event options 532 - Days of week and months 533 - User messages and confirmations 534 - Search functionality 535 - Sync status messages 536 - Admin section labels 537 - Sidebar widget labels 538 - Time conflict warnings 539 540### Note 541The language strings are now available for future implementation throughout the plugin UI. Currently the admin menu uses the language system; other strings can be integrated as needed. 542 543## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX 544 545### Bug Fix: Month Search Not Working 546- **Root cause:** Function name collision - there were two `fuzzyMatch` functions 547 - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null` 548 - Local `fuzzyMatch` (for event search) returns `true`/`false` 549- When filtering events, the wrong function was being called, returning `null` for all events 550- **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch` 551- Month search now works correctly on first load and after navigation 552 553### Also in this version 554- Fixed jumpToDate to properly hide search clear button after navigation 555- Removed debug logging from production code 556 557## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES 558 559### Bug Fixes 560 561**All-Dates Search Navigation Fixed** 562- Clicking a search result now properly navigates to that event's month 563- Opens the day popup showing the event details 564- Was calling non-existent `loadMonth()` - now uses correct `navCalendar()` 565- Clears search results and restores normal event list view 566 567**"No Events" Message Fixed** 568- No longer shows "No events match your search" when in all-dates mode 569- All-dates mode has its own results display; the month-mode message was incorrectly appearing 570 571**Add Button Layout Fixed** 572- Search bar no longer pushes the "+ Add" button off the right edge 573- Search container has constrained max-width (160px) and proper flex settings 574- Header has overflow:hidden to prevent layout issues 575 576**Important Event Stars Fixed** 577- Stars now appear on initial page load (PHP rendering added) 578- Stars positioned outside the bar using CSS ::before pseudo-element 579- Added overflow:visible to event-indicators and event-bar containers 580- Bar remains full width; star sits in the left margin area 581 582### Technical 583- Star uses `event-bar-has-star` class for first-day-only display 584- jumpToDate() properly cleans up search state before navigation 585 586## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS 587 588### Bug Fix 589- **AJAX refresh now preserves important namespace highlighting** 590 - Important namespaces list now passed to JavaScript via data attribute 591 - Highlighting persists when navigating between months 592 - Works in both main calendar sidebar and standalone event panels 593 594### New Feature: Calendar Grid Star Icons 595- **Important events now show ⭐ on their color bars** in the calendar grid 596 - Small star appears on the first day of important events 597 - Tooltip prefixed with ⭐ for important events 598 - Visual distinction without cluttering the compact grid view 599 600### Admin Section Update 601- **Improved Important Namespaces description** in Admin → Calendar → Manage Events 602 - Now explains all visual effects: 603 - Calendar Grid: ⭐ star on event bars 604 - Event Sidebar: ⭐ star + highlighted background + accent border 605 - Sidebar Widget: Dedicated "Important Events" section 606 - Day Popup: Events shown with full details 607 - Better example placeholder text 608 609### Technical 610- Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences) 611- Important namespaces loaded once and stored in container dataset for JavaScript access 612 613## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING 614 615### Fuzzy Search 616- **Improved search matching:** Search is now more forgiving of punctuation differences 617 - "fathers day" matches "Father's Day" 618 - "new years" matches "New Year's Eve" 619 - Smart quotes, apostrophes, dashes, and common punctuation are ignored 620- **Multi-word search:** All words must be present but in any order 621 - "birthday john" matches "John's Birthday Party" 622- Works in both "this month" and "all dates" search modes 623 624### Important Namespace Highlighting (Calendar Sidebar) 625- Events from important namespaces now highlighted in the main calendar's event list sidebar 626- Same visual treatment as the itinerary sidebar widget: 627 - Subtle theme-colored background tint 628 - Right border accent bar 629 - ⭐ star icon before event title 630- Theme-specific colors: 631 - Matrix: green tint 632 - Purple: purple tint 633 - Pink: pink tint 634 - Professional: blue tint 635 - Wiki: light blue tint 636- Configure important namespaces in Admin → Calendar → Sync Settings 637 638## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE 639 640### New Feature: Search Scope Toggle 641- **Search mode button** (/) added next to search input in both calendar views 642- **Default mode** (): Search only the current month's events (fast, local filtering) 643- **All dates mode** (): Search across ALL calendar data via AJAX 644 - Click the button to toggle to (green highlight when active) 645 - Requires at least 2 characters to search 646 - Shows results with date, time, and namespace 647 - Click any result to jump to that date and open the day popup 648 - Limited to 50 results for performance 649- Search placeholder text updates to indicate current mode 650- Compact button design takes minimal space 651 652### UI Details 653- Button sits flush with search input (no gap) 654- Green highlight when "all dates" mode is active 655- Results show full date (e.g., "Mon, Feb 12, 2026") 656- Namespace badge shown for multi-namespace setups 657 658## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING 659 660### Features 661- **Draggable Day Popup:** Calendar day popup window is now draggable by its header 662 - Click and drag the header to move the popup 663 - Header shows move cursor on hover 664 - Clicking the close button (×) still closes normally 665 666- **Important Namespace Highlighting in Sidebar:** 667 - Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighting 668 - Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Professional/Wiki) 669 - Right border accent bar for visual distinction 670 - ⭐ star icon appears before event title 671 - Works in Today, Tomorrow, and Important Events sections 672 673### Bug Fix 674- **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons 675 - Event title now wraps to multiple lines instead of truncating 676 - Actions buttons always visible 677 - Time, date range, and namespace badges wrap properly 678 - Improved flex layout for better responsiveness 679 680## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY 681 682### UI Improvement 683- **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly: 684 - Same dark theme styling (#1e1e1e background, #2c3e50 header) 685 - Same header layout with close button (×) in top-right corner 686 - Same input styling (dark inputs with green accent borders) 687 - Same footer with Cancel/Save buttons layout 688 - Same recurrence options box styling 689 - Consistent spacing, fonts, and colors throughout 690 691## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX 692 693### Bug Fix 694- **Fixed:** Description textarea now extends full width on mobile/phone view 695 - Reduced form padding from 12px to 8px on screens ≤480px 696 - Added explicit `width: 100%` and `box-sizing: border-box` to textarea 697 - Ensured all form inputs/selects use full available width on mobile 698 699## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION 700 701### Admin Panel Updates 702- **Enhanced Recurring Events Table:** 703 - Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pink) 704 - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026") 705 - Patterns now read from stored metadata when available, with smart fallback to detection 706 707- **Edit Recurring Series Dialog:** 708 - Full recurrence pattern editing (not just simple intervals) 709 - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly 710 - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected 711 - Monthly: Radio choice between "Day of month" or "Weekday pattern" 712 - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown) 713 - Pre-populates all fields from stored recurrence metadata 714 - Properly reschedules future events using new pattern 715 716- **Manage Series Dialog:** 717 - Updated summary to show date range 718 - Extend/trim/change pattern functions work with new patterns 719 720### Technical Updates 721- `findRecurringEvents()` captures all recurrence metadata from events 722- `formatRecurrencePattern()` generates human-readable pattern descriptions 723- `detectRecurrencePattern()` enhanced to detect more interval variations 724- `editRecurringSeries()` PHP handler processes new recurrence parameters 725- `generateRecurrenceDates()` creates dates matching complex patterns 726- Recurrence metadata preserved and updated across all event occurrences 727 728## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS 729 730### New Features 731- **Enhanced Recurring Event Options:** 732 - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months) 733 - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri) 734 - **Monthly options:** 735 - Day of month: Repeat on specific day (e.g., 15th of each month) 736 - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday) 737 - **Examples now possible:** 738 - Every 2 weeks on Monday and Thursday 739 - Every 3 months on the 15th 740 - Every other month on the 2nd Wednesday 741 - Every year on the same date 742 - Last Friday of every month 743 744### UI Changes 745- Redesigned recurring options section with bordered container 746- "Repeat every [N] [period]" input with interval number field 747- Day-of-week checkboxes for weekly recurrence 748- Radio buttons for monthly: "Day of month" vs "Weekday pattern" 749- Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last) 750- Day dropdown (Sunday through Saturday) 751- Helper text for end date field 752 753### Technical Details 754- New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay 755- Recurrence pattern stored in event data for reference 756- Maximum 365 occurrences (up from 100) to support daily events for a year 757- Smart date iteration for complex patterns 758 759## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING 760 761### New Feature 762- **Added:** Option to set itinerary default state (expanded or collapsed) 763 - New setting in Admin → Calendar → Sidebar Widget Settings 764 - " Itinerary Section" with two options: 765 - **Expanded** (default) - Show itinerary sections by default 766 - **Collapsed** - Hide itinerary sections by default (click bar to expand) 767 - Setting persists across page loads 768 - Arrow indicator and content state reflect the saved preference on page load 769 770## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY 771 772### New Feature 773- **Added:** Collapsible Itinerary bar in sidebar week view 774 - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar) 775 - Click to collapse/expand the Today, Tomorrow, and Important Events sections 776 - Arrow indicator shows expanded (▼) or collapsed (►) state 777 - Smooth animation when collapsing/expanding 778 - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar 779 - Selected day events remain visible whether itinerary is expanded or collapsed 780 - Shows "No upcoming events" message when there are no itinerary items 781 782### UI Layout (top to bottom) 7831. Header with clock/system stats 7842. +ADD EVENT bar 7853. Week grid (7 days) 7864. Selected day's events (appears when clicking a day) 7875. ITINERARY bar (click to collapse/expand) 7886. Today section (collapsible) 7897. Tomorrow section (collapsible) 7908. Important Events section (collapsible) 791 792## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS 793 794### Bug Fixes 795- **Fixed:** Events Manager showing inflated count (1195 instead of ~605) 796 - The `scanDirectoryForStats()` function was counting ALL entries in JSON files 797 - Now properly filters to only count date keys (`YYYY-MM-DD` format) 798 - Now validates events have `id` and `title` before counting 799 - Click " Rescan" to update the statistics with correct count 800 801## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS 802 803### Bug Fixes 804- **Fixed:** Event Manager showing "(untitled)" and "mapping" entries 805 - Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as events 806 - Added date format validation (`YYYY-MM-DD`) to skip non-date keys 807 - Added validation to require `id` and `title` fields for events 808 - Applied fix to all event-reading functions: 809 - `getEventsByNamespace()` - main event listing 810 - `scanNamespaceRecursive()` - namespace scanning 811 - `searchEvents()` - event search 812 - `findEventsByTitle()` - title lookup 813 - `deleteRecurringSeries()` - recurring deletion 814 - `renameRecurringSeries()` - recurring rename 815 - Recurring events scanner 816 - Recurring cleanup function 817 818### Technical Details 819- Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/` 820- Events must have non-empty `id` and `title` fields 821- All other entries in JSON files are now skipped 822 823## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG 824 825### Bug Fixes 826- **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding quotes around the PHP path 827- **Fixed:** "Could not clear log file" - added better error messages showing exact issue 828- **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection 829- **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.) 830 831## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING 832 833### Bug Fixes 834- **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture 835- **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly 836- **Fixed:** Better error messages when sync fails 837 838### Improvements 839- **Improved:** Sync now runs without `--verbose` flag - script logs to file internally 840- **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries) 841- **Improved:** Log viewer now shows full path to log file 842- **Improved:** Better pre-flight checks (directory creation, file permissions) 843- **Improved:** PHP binary path is now properly escaped 844 845### Crontab Update Required 846If your crontab has `>> sync.log 2>&1`, remove it to prevent duplicate log entries: 847 848**Before (causes duplicates):** 849``` 850*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php >> /var/www/html/dokuwiki/data/meta/calendar/sync.log 2>&1 851``` 852 853**After (correct):** 854``` 855*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php 856``` 857 858The script automatically logs to `data/meta/calendar/sync.log`. 859 860## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT 861 862### Bug Fixes 863- **Fixed:** Sync log not showing output when running sync from admin panel 864 - Added `--verbose` flag to sync command so output is captured 865 - Sync output is now captured and written to the log file 866 - Log directory is created if it doesn't exist 867 - Better error handling if log directory isn't writable 868 - Command being executed is logged for debugging 869 870### Changes 871- Sync now runs in verbose mode when triggered from admin panel 872- All sync output (stdout/stderr) is written to the log file 873- Pre-flight check ensures log directory exists and is writable 874 875## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION 876 877### Bug Fix 878- **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync 879 - The `$pluginDir` variable was missing from `runSync()` function 880 - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command 881 - Sync now properly changes to the plugin directory before executing 882 883## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS 884 885### Bug Fix 886- **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 887 - Fixed in `scanDirectoryForStats()` (line 5453) 888 - Fixed in namespace delete function (line 4137) 889 - Fixed in export function (line 5516) 890 - Fixed in import function (line 5636) 891 - All locations now check `is_array()` before calling `count()` 892 893## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR 894 895### Bug Fix 896- **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 897 - Added array type checks when iterating over calendar event data 898 - Protects against corrupted JSON data where event lists may not be arrays 899 - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()` 900 901## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS 902 903### Changed 904- **Improved:** Backup management now uses bulk selection and delete 905 - Added checkboxes next to each backup file 906 - Added "Select All" checkbox in the action bar 907 - Added "️ Delete Selected" button (appears when backups are selected) 908 - Removed individual delete buttons from each row 909 - Shows count of selected backups 910 - Backups are deleted sequentially with visual feedback 911 912### UI 913- Clean action bar at top of backup table with selection controls 914- Selected count updates in real-time 915- Rows fade out smoothly when deleted 916 917## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION 918 919### Changed 920- **Improved:** Restore function now uses DokuWiki's Extension Manager API 921 - Uses `helper_plugin_extension_extension` for proper installation 922 - Handles permissions correctly through DokuWiki's standard plugin installation process 923 - Falls back to manual instructions if Extension Manager is not available 924 925### How It Works 926When you click " Restore" on a backup: 9271. The plugin loads DokuWiki's extension helper 9282. Calls `installFromLocal()` with the backup ZIP file 9293. DokuWiki's Extension Manager handles file extraction and installation 9304. This ensures proper permissions and follows DokuWiki standards 931 932### Fallback 933If the Extension Manager helper is not available, you'll be prompted to: 934- Download the backup ZIP 935- Go to Admin → Extension Manager → Install 936- Upload the ZIP file manually 937 938## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION 939 940### Removed 941- **Removed:** "Restore" button from backup management 942- **Removed:** `restoreBackup()` PHP method 943- **Removed:** `restoreBackup()` JavaScript function 944 945### Added 946- **Added:** Informational note in backup section explaining how to restore: 947 - Download the backup ZIP file 948 - Go to Admin → Extension Manager → Install 949 - Upload the ZIP file there 950 - DokuWiki's extension manager handles installation safely with proper permissions 951 952### Reason 953The restore function required write access to the plugin directory, which web servers typically don't have (and shouldn't have) for security reasons. Using DokuWiki's built-in Extension Manager is the safer and more reliable approach. 954 955## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS 956 957### Bug Fixes 958- **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg, etc.) 959 - Added missing theme keys to `getWikiTemplateColors()` return array 960 961- **Fixed:** "Permission denied" errors for sync.log and sync_state.json 962 - Moved sync files from plugin directory to `data/meta/calendar/` (writable location) 963 - Updated sync_outlook.php, admin.php to use new paths 964 - sync_config.php remains in plugin directory (must be manually configured) 965 966- **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives 967 - This ensures deletion works correctly when stored namespace differs from file location 968 969### Note on lang.php Permission Error 970If you see a permission error for lang/en/lang.php, this occurs when trying to restore/update the plugin via admin panel and the web server doesn't have write access to the plugin directory. This is normal security - update via command line or FTP instead. 971 972## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2) 973 974### Bug Fix 975- **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces 976 - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events 977 - Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and "event in default namespace" ('') 978 - This allows moving events FROM the default namespace TO any other namespace 979 - Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldNamespace ?: $namespace` 980 981## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS 982 983### Bug Fixes 984- **Fixed:** Changing an event's namespace now properly moves the event instead of creating a duplicate 985 - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces 986 - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace 987 988- **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's namespace 989 - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace 990 - Now retrieves the calendar's original namespace from `container.dataset.namespace` 991 - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency 992 993## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES 994 995### Improved 996- Added `autocomplete="new-password"` to client secret input field 997- Added `autocomplete="email"` to user email input field 998- Added `autocomplete="off"` to client ID input field 999- Follows browser best practices for form inputs 1000 1001## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION 1002 1003### Bug Fix 1004- **Fixed:** Browser violation "Only request geolocation information in response to a user gesture" 1005- Weather widget now uses Sacramento as the default location on page load 1006- Geolocation is only requested when user **clicks** on the weather icon 1007- Click the weather icon to get your local weather (browser will prompt for permission) 1008- Weather icon shows tooltip "Click for local weather" and has pointer cursor 1009 1010## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR 1011 1012### Bug Fix 1013- **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'` error 1014- Root cause: MutationObserver tried to observe `document.body` before DOM was ready 1015- Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer 1016 1017## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING 1018 1019### Bug Fix 1020- **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined` errors 1021- Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.js` 1022- Changed `addAssets()` to load `calendar-main.js` directly 1023- Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism 1024 1025## Version 6.6.1 (2026-02-11) - SECURITY FIXES 1026 1027### Security 1028- **Critical:** Removed `eval()` remote code execution vulnerability in config import 1029- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint 1030- **High:** Added CSRF token verification to all write operations (save, delete, toggle) 1031- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions 1032- **High:** Added admin privilege verification to AJAX admin routes 1033 1034### Improved 1035- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB) 1036- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format 1037- **Input Validation:** Recurrence type whitelist, title/description length limits 1038- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default) 1039- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling 1040- **Timezone:** Sync script now uses configured timezone instead of hardcoded value 1041 1042### Code Quality 1043- Documented intentional switch fallthrough in `get_system_stats.php` 1044- Standardized error response format 1045 1046## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS 1047 1048### Fixed 1049- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`) 1050- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents 1051- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure 1052 1053### UI Change 1054- **Namespace Explorer:** Cleanup status message now appears prominently at top of section 1055- Previously status message was at bottom, easy to miss after cleanup operations 1056 1057## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON 1058 1059### Bug Fix 1060- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action" 1061- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method 1062- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper 1063- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php` 1064 1065### UI Change 1066- Moved " Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar 1067- Status messages still appear below the namespace explorer 1068 1069## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS 1070 1071### Bug Fix 1072- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely 1073- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string 1074- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'` 1075- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time 1076- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors 1077 1078## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR 1079 1080### Bug Fix 1081- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation 1082- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code 1083 1084## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES 1085 1086### New Feature 1087- " Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section 1088- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog 1089- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace 1090- Removes parent namespace directories if they become empty after calendar folder removal 1091- Root calendar directory is never removed 1092- AJAX-powered with inline status showing results after cleanup 1093- Page auto-reloads after 2 seconds to refresh the namespace explorer view 1094- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()` 1095 1096## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE 1097 1098### Improved 1099- "Trim All Past" button now does a dry-run count before showing the confirmation dialog 1100- Confirmation shows exact count: "Found 47 past recurring events to remove" 1101- If zero found, shows "No past recurring events found to remove" instead of confirm 1102- PHP handler supports `dry_run` parameter that counts without deleting 1103 1104## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS 1105 1106### Bulk Action 1107- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header 1108- Removes ALL past occurrences (before today) from EVERY recurring series in one click 1109- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched 1110- Confirmation dialog required before execution 1111- AJAX-powered with inline status showing count removed, then auto-rescans the table 1112- Searches all calendar directories recursively 1113 1114## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES 1115 1116### Bug Fix 1117- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field 1118- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives 1119- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively 1120- Events matched by title AND namespace field (case-insensitive) for precise targeting 1121- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2 1122- New `findCalendarDirs()` helper method for recursive directory discovery 1123 1124## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG 1125 1126### Bug Fix 1127- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals 1128- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation 1129- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts 1130 1131## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS 1132 1133### New "Manage" Button per Series 1134- Orange "Manage" button opens a comprehensive management dialog for each recurring series 1135 1136### Extend Series 1137- Add N new occurrences after the last event in the series 1138- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly 1139- New events copy title, time, color, namespace, and recurring flag from the last event 1140 1141### Trim Past Events 1142- Remove all occurrences before a selected cutoff date 1143- Confirmation required before deletion 1144- Cleans up empty date keys and files automatically 1145 1146### Change Pattern 1147- Respace future occurrences with a new interval 1148- Past events are untouched; only future events are removed and re-created 1149- First future event becomes the anchor date 1150 1151### Change Start Date 1152- Shift ALL occurrences by the difference between old and new start date 1153- Events are removed from old positions and re-created at new positions 1154- Preserves spacing between all events 1155 1156### Pause/Resume 1157- Pause: adds ⏸ prefix and paused flag to all future occurrences 1158- Resume: removes ⏸ prefix and paused flag from all occurrences 1159- Button toggles based on whether series is currently paused 1160 1161### Infrastructure 1162- New shared `recurringAction()` JS helper for all AJAX management operations 1163- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series 1164- Status messages shown inline in the management dialog 1165- Close button triggers automatic rescan to refresh the table 1166 1167## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC 1168 1169### Rescan Button 1170- Green " Rescan" button added to the Recurring Events section header 1171- AJAX-powered: rescans all calendar data and refreshes the table without page reload 1172- Shows count of found series briefly after scan completes 1173 1174### Improved Detection Logic 1175- Events with `recurring: true` flag are now detected first (grouped by `recurringId`) 1176- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated 1177- New "Source" column shows ️ Flagged (has recurring flag) vs Detected (pattern match) 1178- Median interval used for pattern detection instead of just first two dates (more robust) 1179- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals 1180- Empty/invalid titles and malformed date arrays are now skipped safely 1181- Dates are deduplicated before counting (prevents inflated counts from multi-day events) 1182- Nested namespace directories now scanned recursively 1183- Results sorted alphabetically by title 1184 1185## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL 1186 1187### Version History Viewer 1188- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme 1189- Changelog parser now handles `###` subsection headers (rendered as green bold labels) 1190- Plain `- ` bullet items now parsed and categorized under their subsection 1191- Previously only `- **Type:** description` format was recognized 1192 1193### Current Release Button 1194- Green "Current Release" button added between nav arrows 1195- Jumps directly to the card matching the running version from plugin.info.txt 1196- Running version card shows green "RUNNING" badge and thicker green border 1197 1198## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND 1199 1200### Fix 1201- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`) 1202- Previously used `--cell-bg` which appeared unthemed/white 1203 1204## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND 1205 1206### Fix 1207- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header` 1208 1209## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL) 1210 1211### Wiki Theme Day Headers 1212- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers` 1213- Day header text uses `--text-primary` (template's `__text__` color) 1214 1215## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT 1216 1217### Fix 1218- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5) 1219- Subtle shadow instead of blue glow 1220 1221## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING 1222 1223### Fix 1224- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left` 1225- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch 1226- Both the bar and header now use `background`, so Dark Reader maps them identically 1227- Flex layout wrapper added for wiki theme sections 1228- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7` 1229 1230## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT) 1231 1232### Fix 1233- Simplified wiki section container — removed `wiki-section-container` class 1234- Added `background` from `$themeStyles['bg']` to section container 1235 1236## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS 1237 1238### Wiki Theme Buttons 1239- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text 1240- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons 1241 1242### Wiki Theme Section Headers 1243- Today: `__link__` background (accent/link color) 1244- Tomorrow: `__background_alt__` background (alternate background) 1245- Important: `__border__` background (border color) 1246- Each section now has a distinct color from the template palette 1247 1248## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX 1249 1250### Fix 1251- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand 1252- Properly overrides the base rule which uses `border` shorthand 1253- Hover state also uses full shorthand 1254 1255## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR 1256 1257### Fix 1258- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border 1259- Checked state fills with border color 1260- Hover state uses border color 1261- Applied to calendar, sidebar, and eventlist containers 1262 1263## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS 1264 1265### Fix 1266- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color` 1267- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers 1268- Clicked-day panel header and section border-left also unlocked for wiki theme 1269- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection 1270 1271## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES 1272 1273### Wiki Theme Color Remapping 1274- `border` (accent color) now maps to template's `__border__` instead of `__link__` 1275- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable 1276- `text_bright` still maps to `__link__` for link text and accent text 1277- Section headers all use the same `__border__` color for consistent appearance 1278- Updated COLOR_SCHEME mapping documentation 1279 1280## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR 1281 1282### Fix 1283- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white 1284- Clicked-day panel header text also uses template text color for wiki theme 1285- Professional theme remains white text on blue headers 1286 1287## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST 1288 1289### Bug Fix 1290- Added `$renderer->nocache()` to the render function 1291- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited 1292- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt` 1293 1294## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING 1295 1296### {{eventlist}} Theme Support 1297- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection 1298- Dark themes get themed border + glow, light themes get subtle border 1299- Container background set from `$themeStyles['bg']` with `!important` 1300 1301### Eventlist CSS Theme Rules (all 3 dark themes) 1302- Title, header, time, date, body, links, strong, code, namespace badge, empty state 1303- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important` 1304- Item borders, section backgrounds, code block backgrounds 1305- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar 1306 1307## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING 1308 1309### Dark Reader Browser Extension Compatibility 1310All dark themes (Matrix, Purple, Pink) now render correctly when the Dark Reader browser extension is active. The approach uses targeted inline `!important` styles and `-webkit-text-fill-color` overrides — no page-wide locks, no blanket CSS resets, no filter manipulation. 1311 1312**Protected elements:** 1313- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color 1314- Clicked-day panel header — background, text color, close button 1315- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color 1316- Event titles, meta, descriptions — color with !important via CSS 1317- Day numbers, nav buttons, calendar day headers — color with !important via CSS 1318- System status bars — inline background !important on tracks and fills 1319- System tooltips — background, border-color, text color all set via setProperty with !important 1320- Section left border bars — border-left with !important 1321- Event color indicator bars — border-left-color with !important 1322- Sidebar section event text (Purple and Pink themes) 1323 1324### Complete CSS Variable Audit (41 conversions in v6.1.1) 1325- All remaining hardcoded colors in style.css converted to CSS variable references 1326- Calendar borders, text colors, backgrounds, input focus shadows, accent borders 1327- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks) 1328 1329### Semantic Color System 1330- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light` 1331- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light` 1332- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget) 1333- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded 1334 1335### Section Headers Fully Themed 1336- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple 1337- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink 1338- Professional: blue shades, Wiki: template-derived colors 1339- Dark theme headers use dark background color for text contrast 1340 1341### Pink Theme Enhancements 1342- **Heart today indicator** — day number displayed inside a ♥ with hot pink glow, centered via inline-flex, `pink-heart-beat` animation with realistic double-beat pulse 1343- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click 1344- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow 1345 1346### All Theme Checkbox Theming 1347- Matrix: bright green border + green glow, Purple: purple border + purple glow 1348- Pink: hot pink border + pink glow (with enhanced ambient effect) 1349- Hover scales 1.1x with intensified glow on all themes 1350- Checked state fills with theme accent color + outer glow 1351 1352### System Tooltips Themed 1353- Both tooltip functions use theme-derived colors from `$themeStyles` 1354- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary` 1355- Background from `$themeStyles['bg']`, divider borders use theme accent colors 1356- All properties set with `style.setProperty(prop, value, "important")` 1357 1358### Namespace Filter Badge Cleanup 1359- Removed inline namespace badge from event side panel header 1360- Filter indicator bar ("Filtering: namespace ✕") retained and working 1361- AJAX-based namespace filtering fully functional via onclick handlers 1362 1363## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES 1364 1365### Today Indicator 1366- **Added:** Today's day number now shows as a filled circle with theme accent color background and contrasting text (like Google Calendar's today indicator) 1367- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main` 1368- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default 1369 1370### Button Hover/Click Theming 1371- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes 1372- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect 1373- **Fixed:** Cal nav buttons (‹/›), Today button, +Add Event button, panel nav/today/add buttons, dialog Save/Cancel buttons, month picker Go/Cancel buttons, popup + Add Event button — ALL now have visible themed hover/click feedback with shadow 1374- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes 1375 1376### Checkboxes Themed 1377- **Added:** Custom checkbox styling for `.task-checkbox` — uses `appearance: none` with themed border (`--border-main`), hover glow, and filled accent background when checked with ✓ mark 1378- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring 1379 1380### Form Input Text 1381- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes 1382- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim` 1383 1384## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING 1385 1386### Form Input Text Fix 1387- **Fixed:** Form input text (`input-sleek`, `textarea-sleek`, `select`) had no `color` property — browser defaulted to black, invisible on dark themes. Now uses `var(--text-primary)`. 1388- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas 1389 1390### Button & Cell Hover Theming 1391- **Added:** Calendar day cells (`.cal-day`) now have a themed hover effect — background shifts to `--cell-today-bg` with an inset border glow using `--border-main` 1392- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change 1393- **Added:** Active (click) state for nav/today buttons with scale-down feedback 1394- **Improved:** Month picker hover now also shows a subtle theme shadow 1395 1396### Glow Reduced to 1px for Matrix/Purple 1397- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates 1398- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px 1399- Weather text glow reduced to 1px, clock to 2px 1400- Pink remains at 2px (barely noticeable) 1401 1402## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN 1403 1404### Links Themed 1405- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright` 1406- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors 1407- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars 1408- **Fixed:** Simple event list body links/strong/code all themed 1409 1410### Text Glow Consistency 1411- **Added:** Subtle `text-shadow: 0 0 2px` glow on event titles, meta, and descriptions for all three dark themes (matrix, purple, pink) in the main calendar and event panel 1412- **Added:** Subtle link glow on dark themes 1413- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles 1414 1415### Pink Glow Toned Down 1416- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25` 1417- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px 1418- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px 1419- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px 1420- **Reduced:** Today hover glow from 10px+15px to 5px+8px 1421- **Reduced:** Event item glow from 2px/5px to 1px/3px 1422- **Reduced:** Calendar container glow from 8px to 5px 1423 1424### Other 1425- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars 1426 1427## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING 1428 1429- **Fixed:** Namespace badges (`.namespace-badge`, `.event-namespace-badge`, `.panel-ns-badge`, standalone header badge) — all now use theme accent colors instead of hardcoded green/blue 1430- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple 1431- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent 1432- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars) 1433- **Fixed:** Conflict tooltip body items use themed text and border colors 1434- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel) 1435- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background 1436- **Fixed:** Inline search input border uses `--border-color` 1437- **Fixed:** Event list header border uses `--border-color` 1438 1439## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING 1440 1441- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary` 1442- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright` 1443- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars 1444- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg` 1445- **Fixed:** Scrollbar track/thumb colors now use theme vars 1446- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed 1447- **Fixed:** Panel standalone month picker hover and namespace badge — themed 1448- **Fixed:** Calendar header border-bottom — now uses `--border-color` 1449 1450## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL 1451 1452- **Added:** Theme-colored border and glow for calendar container on matrix, purple, and pink themes — matches the sidebar widget's `2px solid` + `box-shadow` glow style. Professional and wiki themes unchanged (keep subtle 1px gray border). 1453- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors 1454- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars 1455- **Themed:** Panel standalone header background and border 1456 1457## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING 1458 1459- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables 1460- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors 1461- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed 1462- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks 1463- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars 1464- **How it works:** `propagateThemeVars()` copies CSS variables from the calendar container to dialogs/popups (which are `position:fixed` or appended to `document.body`). All CSS selectors now reference these variables with fallbacks for graceful degradation. 1465 1466## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB 1467 1468- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections) 1469- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections 1470- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save 1471- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value 1472 1473## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX 1474 1475- **Fixed:** In Firefox, the SMTWTFS day-of-week header row was rendering at the same height as calendar day cells (58px instead of 22px). Firefox ignores `max-height` on `<th>` table cells per CSS spec. Replaced `<thead><tr><th>` with a CSS grid `<div>` outside the table, making header height fully independent of table cell sizing. Works consistently across Chrome, Firefox, Safari, and Edge. 1476 1477## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX 1478 1479- **Fixed:** `theme=wiki` (and all `theme=` parameters) had no effect — all three render functions (`renderCompactCalendar`, `renderEventPanelOnly`, `renderSidebarWidget`) were ignoring the syntax parameter and always reading the admin global default via `getSidebarTheme()` 1480- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller 1481- **How it works now:** `{{calendar theme=wiki}}`, `{{eventlist sidebar theme=purple}}`, `{{eventpanel theme=professional}}` all correctly apply the specified theme. The admin-configured default is used as fallback only when no `theme=` parameter is present. 1482 1483 1484## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 1485 1486- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 1487- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 1488- **Audited:** style.css (3,218 lines) — balanced braces confirmed 1489- **Audited:** All admin manage tab action handlers verified functional (13 actions) 1490- **New:** Fresh README.md for GitHub with complete documentation 1491- **Includes all v5.5.x fixes:** 1492 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 1493 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 1494 - Conflict badges on past events after AJAX navigation 1495 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 1496 1497## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 1498 1499- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 1500- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 1501- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 1502- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 1503- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 1504- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 1505- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 1506- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 1507- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 1508- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 1509- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 1510- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 1511- **Removed:** Stale "NEW!" comment from Events Manager section 1512 1513## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 1514 1515- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 1516- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 1517- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 1518- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 1519- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 1520- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 1521- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 1522- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 1523- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 1524- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 1525 1526## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 1527 1528- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 1529- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 1530- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 1531- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 1532- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 1533- **Changed:** Week grid JS theme colors now use actual $themeStyles values 1534 1535## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 1536 1537- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 1538 1539## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 1540 1541- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 1542- **Fixed:** Week grid conflict tooltips also fixed (same issue) 1543- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 1544- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 1545 1546## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 1547 1548- **Fixed:** Past events now expand on click from initial page load (PHP-rendered items were missing onclick="togglePastEventExpand(this)" handler that the JS-rebuilt version had) 1549 1550## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 1551 1552- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 1553- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 1554 1555## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 1556 1557- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 1558- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 1559- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 1560- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 1561 1562## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 1563 1564- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 1565- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 1566- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 1567- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 1568- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 1569- **Added:** ESC key now also closes day popups and conflict tooltips 1570- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 1571 1572## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 1573 1574- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 1575- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 1576- **Refactored:** style.css is now the single source of truth for all visual styling 1577- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 1578- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 1579- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 1580- **Added:** CSS variable injection for {{eventlist panel}} containers 1581- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 1582- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 1583- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 1584- **Added:** Detailed CSS variable reference table in style.css header comment 1585- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 1586- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 1587- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 1588- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 1589- **Removed:** $isWikiTheme branching from PHP render path 1590 1591## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 1592 1593### Added: Hearts in Explosions! 1594- **Added:** 8-12 pink hearts in each click explosion 1595- **Added:** Random sizes (12-28px) and directions 1596- **Result:** Extra love in every click! 1597 1598### Fixed: Background CSS Property for Dark Mode Readers 1599- **Fixed:** Added `background: transparent` to CSS (was completely removed) 1600- **Fixed:** Now CSS readers can detect and modify background property 1601- **Why:** Inline styles override transparent, but CSS readers can now see the property 1602- **Result:** Dark mode plugins can now change calendar backgrounds! 1603 1604### The CSS Problem 1605 1606**Why backgrounds weren't changing with dark mode readers**: 1607 1608**Before (v5.3.5)**: 1609```css 1610.calendar-compact-grid tbody td { 1611 /* background removed - set via inline style */ 1612 border: 1px solid... 1613} 1614``` 1615 1616**Problem**: CSS property doesn't exist! 1617- Dark mode readers look for `background` property in CSS 1618- Can't override what doesn't exist 1619- Inline styles work, but readers can't modify them 1620 1621**After (v5.3.6)**: 1622```css 1623.calendar-compact-grid tbody td { 1624 background: transparent; /* Now exists! */ 1625 border: 1px solid... 1626} 1627``` 1628 1629**Solution**: 1630- Property exists in CSS 1631- Dark mode readers can override it 1632- Inline styles still override transparent 1633- Everyone wins! 1634 1635### What's Fixed 1636 1637**Elements now have background property**: 1638- `.calendar-compact-grid tbody td` ✓ 1639- `.calendar-compact-grid tbody td:hover` ✓ 1640- `.event-compact-item` ✓ 1641- `.event-compact-item:hover` ✓ 1642 1643**How it works**: 16441. CSS sets `background: transparent` (default) 16452. Inline styles set actual color (overrides transparent) 16463. Dark mode readers can override CSS property 16474. Works for everyone! 1648 1649### Hearts in Explosion 1650 1651**Click anywhere → Hearts explode!** 1652 1653**Heart details**: 1654- Count: 8-12 per explosion (random) 1655- Size: 12-28px (random variety) 1656- Emoji: (pink heart) 1657- Direction: Random 360° 1658- Speed: 60-140px travel 1659- Duration: 0.8-1.2s 1660- z-index: 9999999 (always visible) 1661 1662**Combined with**: 1663- 25 glowing particles 1664- 40 pixel sparkles 1665- Bright flash 1666- **Total: 73-77 elements!** 1667 1668### Visual Result 1669 1670**Click explosion**: 1671``` 1672 ✦ • ✦ 1673 • • 1674✦ • ! • ✦ 1675 • • 1676 ✦ • ✦ 1677 1678Hearts + Particles + Pixels! 1679``` 1680 1681**Dark mode now works**: 1682```css 1683/* Dark mode reader can now do this: */ 1684.calendar-compact-grid tbody td { 1685 background: #000 !important; /* Works! */ 1686} 1687``` 1688 1689### Why Transparent Works 1690 1691**CSS Cascade**: 16921. CSS: `background: transparent` (lowest priority) 16932. Inline style: `background: #f5f5f5` (overrides CSS) 16943. Dark mode CSS: `background: #000 !important` (overrides inline) 1695 1696**Perfect solution!** ✓ 1697 1698## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 1699 1700### Fixed: Particles Now Appear Above All Dialogs! 1701- **Fixed:** Increased z-index to 9999999 for all particles 1702- **Fixed:** Particles now visible above event dialogs, month picker, etc. 1703- **Result:** Cursor effects and explosions always visible! 1704 1705### The Z-Index Problem 1706 1707**Before (v5.3.4)**: 1708- Particles: z-index 9999 1709- Dialogs: z-index 10000-999999 1710- **Particles hidden behind dialogs!** 1711 1712**After (v5.3.5)**: 1713- Particles: z-index 9999999 1714- Trail: z-index 9999998 1715- Pixels: z-index 9999997 1716- **Particles ALWAYS on top!** 1717 1718### What's Fixed 1719 1720✅ **Main particles** (explosion orbs) 1721✅ **Cursor trail** (glowing dots) 1722✅ **Pixel sparkles** (tiny bright stars) 1723✅ **Flash effect** (click burst) 1724 1725**All now appear above**: 1726- Event dialog popups 1727- Month picker 1728- Day popups 1729- Any modal overlays 1730 1731### Visual Result 1732 1733**Moving cursor over dialog**: 1734``` 1735┌─────────────────────┐ 1736│ Event Dialog │ 1737│ ✦ • ✦ │ ← Sparkles visible! 1738│ → ✦ │ ← Cursor trail visible! 1739│ • ✦ • │ 1740└─────────────────────┘ 1741``` 1742 1743**Clicking on dialog**: 1744``` 1745┌─────────────────────┐ 1746│ ✦ • ✦ • ✦ │ 1747│ • ! • │ ← Explosion visible! 1748│ ✦ • ✦ • ✦ │ 1749└─────────────────────┘ 1750``` 1751 1752**Perfect visibility everywhere!** ✨ 1753 1754## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 1755 1756### Fixed: Month Picker Now Themed! 1757- **Fixed:** Jump to Month dialog now uses theme colors 1758- **Fixed:** Dialog background, borders, text all themed 1759- **Fixed:** Select dropdowns use theme colors 1760- **Fixed:** Buttons use theme accent colors 1761- **Result:** Month picker matches calendar theme! 1762 1763### Fixed: Cursor Effects Work in Dialogs! 1764- **Fixed:** Cursor trail now works when hovering over dialogs 1765- **Fixed:** Click explosions work when clicking inside dialogs 1766- **Technical:** Changed to capture phase event listeners 1767- **Result:** Effects work EVERYWHERE now! 1768 1769### Month Picker Theming 1770 1771**Before (v5.3.3)**: 1772- White background (hardcoded) 1773- Black text (hardcoded) 1774- No theme integration 1775- Looked out of place 1776 1777**After (v5.3.4)**: 1778- Dialog background: `theme.bg` 1779- Dialog border: `theme.border` 1780- Text color: `theme.text_primary` 1781- Dropdowns: `theme.cell_bg` + `theme.text_primary` 1782- Cancel button: `theme.cell_bg` 1783- Go button: `theme.border` (accent color) 1784 1785**Fully integrated!** ✅ 1786 1787--- 1788 1789### Theme Examples 1790 1791**Matrix Theme**: 1792``` 1793┌─────────────────────────┐ 1794│ Jump to Month │ ← Dark bg, green border 1795│ [February ▼] [2026 ▼] │ ← Dark dropdowns 1796│ [Cancel] [Go] │ ← Green "Go" button 1797└─────────────────────────┘ 1798``` 1799 1800**Pink Theme**: 1801``` 1802┌─────────────────────────┐ 1803│ Jump to Month │ ← Dark bg, pink border 1804│ [February ▼] [2026 ▼] │ ← Dark dropdowns 1805│ [Cancel] [Go] │ ← Pink "Go" button 1806└─────────────────────────┘ 1807With sparkle effects! ✨ 1808``` 1809 1810**Professional Theme**: 1811``` 1812┌─────────────────────────┐ 1813│ Jump to Month │ ← Clean bg, blue border 1814│ [February ▼] [2026 ▼] │ ← Clean dropdowns 1815│ [Cancel] [Go] │ ← Blue "Go" button 1816└─────────────────────────┘ 1817``` 1818 1819--- 1820 1821### Dialog Cursor Fix 1822 1823**The Problem**: 1824Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 1825 1826**The Solution**: 1827Use **capture phase** event listeners: 1828```javascript 1829// Before (bubbling phase) 1830document.addEventListener('click', handler) 1831 1832// After (capture phase) 1833document.addEventListener('click', handler, true) 1834 ↑ 1835 Capture phase! 1836``` 1837 1838**Capture phase runs BEFORE stopPropagation!** 1839 1840--- 1841 1842### Now Works Everywhere 1843 1844✅ **Calendar area** 1845✅ **Event dialogs** 1846✅ **Month picker dialog** 1847✅ **Day popup dialogs** 1848✅ **Anywhere on screen** 1849 1850**No more blocked effects!** 1851 1852--- 1853 1854### Technical Details 1855 1856**Event phases**: 1857``` 18581. Capture phase ← We listen here now! 18592. Target phase 18603. Bubbling phase ← stopPropagation blocks this 1861``` 1862 1863**By using capture phase**: 1864- Events caught before stopPropagation 1865- Works in all dialogs 1866- No conflicts with dialog logic 1867 1868--- 1869 1870### All Dialogs Checked 1871 1872✅ **Month picker** - Now themed! 1873✅ **Event dialog** - Already themed 1874✅ **Day popup** - Already themed 1875 1876**Everything consistent!** 1877 1878--- 1879 1880## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 1881 1882### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 1883- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 1884- **Added:** 40 pixel sparkles in click explosions 1885- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 1886- **Result:** Maximum sparkle effect! 1887 1888### Tiny Pixel Sparkles 1889 1890**3-6 tiny bright pixels appear with each cursor movement!** 1891 1892**Characteristics**: 1893- Size: 1-2px (single pixel appearance!) 1894- Colors: Bright neon whites and pinks 1895 - Pure white (#fff) - 40% chance 1896 - Hot pink (#ff1493) 1897 - Pink (#ff69b4) 1898 - Light pink (#ffb6c1) 1899 - Soft pink (#ff85c1) 1900- Glow: Triple-layer shadow (intense!) 1901- Spawn: Random 30px radius around cursor 1902- Animations: 1903 - 50% twinkle in place 1904 - 50% float upward 1905 1906**Creates a cloud of sparkles around your cursor!** 1907 1908--- 1909 1910### Click Explosion Enhanced 1911 1912**Now with 40 EXTRA pixel sparkles!** 1913 1914**Click anywhere → BIG BOOM**: 1915- 25 main glowing particles (6-10px) 1916- **40 tiny pixel sparkles (1-2px)** ← NEW! 1917- Bright white flash 1918- Total: 65+ visual elements! 1919 1920**Pixel sparkles in explosion**: 1921- Shoot outward in all directions 1922- Random distances (30-110px) 1923- Multiple bright colors 1924- Some twinkle, some explode 1925- Creates stellar effect! 1926 1927--- 1928 1929### Entire Screen Coverage 1930 1931**Effects now work EVERYWHERE!** 1932 1933**Before (v5.3.2)**: 1934- Only inside calendar viewport 1935- Limited to calendar area 1936 1937**After (v5.3.3)**: 1938- Works on entire screen! ✓ 1939- Cursor trail follows everywhere 1940- Click explosions anywhere 1941- Used `position: fixed` + `clientX/Y` 1942 1943**Move anywhere on the page for sparkles!** 1944 1945--- 1946 1947### Visual Effect 1948 1949**Cursor movement**: 1950``` 1951 • ✦ • ← Tiny pixels 1952 • ✦ • ← Glowing trail 1953✦ • → • ✦ ← Cursor 1954 • ✦ • ← Mixed sizes 1955 • ✦ • ← Sparkle cloud 1956``` 1957 1958**Click explosion**: 1959``` 1960 ✦ • ✦ • ✦ 1961 ✦ • • ✦ 1962✦ • ! • ✦ 1963 ✦ • • ✦ 1964 ✦ • ✦ • ✦ 1965 196665+ particles total! 1967``` 1968 1969--- 1970 1971### Sparkle Details 1972 1973**Trail Pixels** (3-6 per movement): 1974- Size: 1-2px 1975- Spawn rate: Every 40ms 1976- Spread: 30px radius 1977- Duration: 0.6-0.8s 1978- 50% twinkle, 50% float 1979 1980**Explosion Pixels** (40 total): 1981- Size: 1-3px 1982- Spread: 30-110px radius 1983- Duration: 0.4-0.8s 1984- All directions 1985- Intense glow 1986 1987**Main Particles** (25 total): 1988- Size: 4-10px 1989- Spread: 50-150px 1990- Full color palette 1991- Original firework effect 1992 1993--- 1994 1995### Color Distribution 1996 1997**Pixel sparkles favor white**: 1998- 40% pure white (#fff) - brightest! 1999- 60% pink shades - variety 2000 2001**Creates brilliant sparkle effect!** 2002 2003--- 2004 2005### Performance 2006 2007**Still optimized**: 2008- Trail: 30ms throttle 2009- Pixels: 40ms throttle 2010- Auto-cleanup 2011- Hardware accelerated 2012- Smooth 60fps 2013 2014**Lots of sparkles, zero lag!** 2015 2016--- 2017 2018### Full-Screen Magic 2019 2020**Pink theme calendar detected**: 2021```javascript 2022if (pink calendar exists) { 2023 Enable effects for ENTIRE SCREEN 2024 Not just calendar area 2025} 2026``` 2027 2028**Works everywhere on page!** ✨ 2029 2030--- 2031 2032## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 2033 2034### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 2035- **Removed:** Emoji sparkle images (✨) 2036- **Added:** Glowing pink particle trail following cursor 2037- **Added:** FIREWORKS explosion on click! 2038- **Result:** Beautiful glowing effects, not emoji! 2039 2040### Glowing Cursor Trail 2041 2042**Pink glowing dots follow your cursor!** 2043- Small glowing pink orbs (8px) 2044- Radial gradient glow effect 2045- Multiple box-shadows for depth 2046- Fade out smoothly (0.5s) 2047- Throttled to 30ms for smoothness 2048 2049``` 2050 • • 2051 • → • ← Your cursor 2052 • • 2053``` 2054 2055**Not emoji - actual glowing particles!** 2056 2057--- 2058 2059### Click Fireworks! 2060 2061**Click anywhere on the calendar → BOOM!** 2062 2063**20 pink particles explode outward!** 2064- Radial burst pattern (360° coverage) 2065- Random speeds (50-150px travel) 2066- 4 shades of pink: 2067 - Hot pink (#ff1493) 2068 - Pink (#ff69b4) 2069 - Light pink (#ff85c1) 2070 - Very light pink (#ffc0cb) 2071- Random sizes (4-10px) 2072- Individual glowing halos 2073- Smooth explosion animation 2074 2075**Plus a bright flash at click point!** 2076- 30px radius glow 2077- Intense pink flash 2078- Fades quickly (0.3s) 2079 2080--- 2081 2082### Visual Effect 2083 2084**Cursor movement**: 2085``` 2086 • 2087 • • • 2088 • → • ← Glowing trail 2089 • • • 2090 • 2091``` 2092 2093**Click explosion**: 2094``` 2095 • • • 2096 • • 2097 • BOOM! • ← 20 particles 2098 • • 2099 • • • 2100``` 2101 2102**All particles glow with pink halos!** 2103 2104--- 2105 2106### Particle Details 2107 2108**Trail Particles**: 2109- Size: 8x8px 2110- Color: Pink radial gradient 2111- Shadow: 10px + 20px glow layers 2112- Duration: 0.5s fade 2113- Rate: 30ms throttle 2114 2115**Explosion Particles**: 2116- Size: 4-10px (random) 2117- Colors: 4 pink shades (random) 2118- Shadow: 10px + 20px glow (matches color) 2119- Duration: 0.6-1.0s (random) 2120- Pattern: Perfect circle burst 2121 2122**Flash Effect**: 2123- Size: 30x30px 2124- Color: Bright hot pink 2125- Shadow: 30px + 50px mega-glow 2126- Duration: 0.3s instant fade 2127 2128--- 2129 2130### Performance 2131 2132**Optimized for smoothness**: 2133- Trail throttled to 30ms 2134- Auto-cleanup after animations 2135- CSS hardware acceleration 2136- No memory leaks 2137- Smooth 60fps 2138 2139**Won't slow you down!** 2140 2141--- 2142 2143### Comparison 2144 2145**Before (v5.3.1)**: 2146- ✨ Emoji sparkle images 2147- Static unicode characters 2148- Limited visual impact 2149 2150**After (v5.3.2)**: 2151- Glowing pink particles 2152- Radial gradients + shadows 2153- Beautiful firework explosions 2154- Much more impressive! 2155 2156--- 2157 2158### Only Pink Theme 2159 2160**These effects only appear**: 2161- On `.calendar-theme-pink` elements 2162- Other themes unaffected 2163- Pure pink magic! 2164 2165--- 2166 2167## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 2168 2169### ✨ Added: MySpace-Style Sparkle Trail! 2170- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 2171- **Toned down:** Reduced glow effects for better taste 2172- **Added:** Sparkles appear on cell hover 2173- **Added:** Sparkles on event hover (left and right sides!) 2174- **Added:** Sparkles on today's cell corners 2175- **Added:** Sparkles on navigation buttons 2176- **Added:** Sparkles in calendar header 2177- **Result:** Pure nostalgic MySpace magic! ✨ 2178 2179### MySpace Sparkle Cursor Trail 2180 2181**The classic effect from 2006!** 2182- Sparkles follow your cursor as you move 2183- Random sizes (12-22px) 2184- Random slight offsets for natural feel 2185- Float up and fade out animation 2186- Throttled to 50ms (smooth, not laggy) 2187- Only on pink theme calendars 2188 2189``` 2190 ✨ 2191 ✨ ✨ 2192✨ → ✨ (cursor trail) 2193 ✨ ✨ 2194 ✨ 2195``` 2196 2197**Pure nostalgia!** 2198 2199--- 2200 2201### Sparkles Everywhere 2202 2203**Calendar cells**: 2204- Hover over any day → ✨ floats up 2205- Smooth 1.5s animation 2206- Centered sparkle 2207 2208**Event items**: 2209- Hover → ✨ on left side 2210- Hover → ✨ on right side 2211- Staggered animations (0.4s delay) 2212- Continuous twinkling 2213 2214**Today's cell**: 2215- ✨ in top-right corner (continuous) 2216- ✨ in bottom-left corner (offset timing) 2217- Always sparkling! 2218 2219**Navigation buttons**: 2220- Hover on < or > → ✨ appears top-right 2221- One-time float animation 2222 2223**Calendar header**: 2224- ✨ on left side (continuous) 2225- ✨ on right side (offset 1s) 2226- Always twinkling 2227 2228--- 2229 2230### Toned Down Glows 2231 2232**Before (v5.3.0)**: TOO MUCH GLOW! 2233- 50px shadows 2234- 4-layer effects 2235- Overwhelming 2236 2237**After (v5.3.1)**: Just right! 2238- 8-15px max shadows (subtle) 2239- 2-layer effects 2240- Professional with personality 2241 2242**Glow reductions**: 2243- Today shimmer: 35px → 12px 2244- Today hover: 50px → 15px 2245- Event glow: 18px → 6px 2246- Badge pulse: 25px → 8px 2247- Container glow: 20px → 8px 2248 2249**Much more tasteful!** 2250 2251--- 2252 2253### Sparkle Animations 2254 2255**sparkle-twinkle** (0.8s): 2256``` 2257Opacity: 0 → 1 → 1 → 0 2258Scale: 0 → 1 → 1 → 0 2259Rotation: 0° → 180° → 360° 2260``` 2261 2262**sparkle-float** (1.5s): 2263``` 2264Moves up: 0px → -50px 2265Opacity: 0 → 1 → 1 → 0 2266Scale: 0 → 1 → 0.8 → 0 2267``` 2268 2269**Pure MySpace magic!** ✨ 2270 2271--- 2272 2273### Where Sparkles Appear 2274 2275✅ **Cursor trail** (continuous while moving) 2276✅ **Calendar cells** (on hover) 2277✅ **Event items** (on hover, left + right) 2278✅ **Today's cell** (continuous, corners) 2279✅ **Navigation buttons** (on hover) 2280✅ **Calendar header** (continuous, sides) 2281 2282**Sparkles EVERYWHERE!** ✨✨✨ 2283 2284--- 2285 2286### Performance 2287 2288**Cursor trail**: 2289- Throttled to 50ms 2290- Auto-cleanup after 1s 2291- No memory leaks 2292- Smooth 60fps 2293 2294**CSS animations**: 2295- Hardware accelerated 2296- No JavaScript overhead (except cursor) 2297- Efficient transforms 2298 2299**Won't slow down your browser!** 2300 2301--- 2302 2303### Pure Nostalgia 2304 2305**Remember MySpace profiles?** 2306- Glitter graphics ✨ 2307- Sparkle cursors ✨ 2308- Auto-play music (ok, we didn't add that) 2309- Animated GIF backgrounds 2310- Comic Sans everywhere 2311 2312**We brought back the sparkles!** ✨ 2313 2314--- 2315 2316### Theme Comparison 2317 2318**Other themes**: Professional and clean 2319**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 2320 2321**Only pink theme gets the magic!** 2322 2323--- 2324 2325## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 2326 2327### Added: Pink Theme Gets BLING! 2328- **Added:** Shimmering animation for today's cell 2329- **Added:** Sparkling text effect on today's date 2330- **Added:** Glowing pulse for event bars 2331- **Added:** Gradient shimmer on headers 2332- **Added:** Extra glow on hover effects 2333- **Added:** Pulsing urgent badge for past due items 2334- **Result:** Pink theme is now FABULOUS! ✨ 2335 2336### Shimmer Effects 2337 2338**Today's Cell**: 2339- Continuous shimmer animation (2 second loop) 2340- Multi-layer glow effect 2341- Pink and hot pink overlapping shadows 2342- Pulses from subtle to intense 2343- Extra sparkle on hover 2344 2345**Today's Date Number**: 2346- Sparkle animation (1.5 second loop) 2347- Text shadow glow effect 2348- Slight scale pulse (100% → 105%) 2349- Pink to hot pink shadow transition 2350 2351### Glow Effects 2352 2353**Event Bars**: 2354- Continuous glow pulse (2 second loop) 2355- Uses event's own color 2356- Adds pink accent glow layer 2357- Creates depth and dimension 2358 2359**Event Items**: 2360- Subtle base glow 2361- Enhanced glow on hover 2362- Slight slide animation on hover 2363- Professional yet playful 2364 2365### Gradient Shimmer 2366 2367**Headers**: 2368- Animated gradient background 2369- 3-color pink gradient flow 2370- Smooth 3-second animation 2371- Creates movement and life 2372- Applies to calendar header and event list header 2373 2374### Badge Effects 2375 2376**TODAY Badge**: 2377- Sparkle animation 2378- Synchronized with today's date 2379- Extra prominence 2380 2381**PAST DUE Badge**: 2382- Urgent pulsing effect (1 second loop) 2383- Orange glow intensifies 2384- Draws attention to urgent items 2385- Faster pulse for urgency 2386 2387### Container Bling 2388 2389**Main Container**: 2390- Multi-layer pink glow 2391- Soft outer shadow 2392- Creates floating effect 2393- Subtle but elegant 2394 2395### Animation Details 2396 2397**pink-shimmer** (2s loop): 2398``` 2399Start: Subtle 5px glow 2400Peak: Intense 35px multi-layer glow 2401End: Back to subtle 2402``` 2403 2404**pink-sparkle** (1.5s loop): 2405``` 2406Start: Base glow + scale 1.0 2407Peak: Intense glow + scale 1.05 2408End: Back to base 2409``` 2410 2411**pink-glow-pulse** (2s loop): 2412``` 2413Start: Small glow (3px, 6px) 2414Peak: Large glow (6px, 12px, 18px) 2415End: Back to small 2416``` 2417 2418**pink-gradient-shimmer** (3s loop): 2419``` 2420Gradient flows across element 2421Creates wave effect 2422Smooth continuous motion 2423``` 2424 2425**pink-pulse-urgent** (1s loop - faster!): 2426``` 2427Start: Orange glow 5px 2428Peak: Orange glow 25px (intense) 2429End: Back to 5px 2430``` 2431 2432### Visual Experience 2433 2434**Today's Cell**: 2435``` 2436┌──┬──┬──┬──┬──┬──┬──┐ 2437│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 2438│ │ │[9]│ │ │ │ │ ← Sparkles 2439│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 2440└──┴──┴──┴──┴──┴──┴──┘ 2441``` 2442 2443**Event Bars**: 2444``` 2445━━━━━━━ ← Glows and pulses 2446━━━━━━━ ← Each bar animated 2447━━━━━━━ ← Creates rhythm 2448``` 2449 2450**Headers**: 2451``` 2452╔═════════════════════╗ 2453║ ~~~~~~~~~~ ║ ← Gradient flows 2454║ February 2026 ║ ← Shimmer effect 2455╚═════════════════════╝ 2456``` 2457 2458### Theme Comparison 2459 2460**Before (v5.2.8)**: 2461- Pink colors 2462- Static elements 2463- Standard shadows 2464 2465**After (v5.3.0)**: 2466- Pink colors ✓ 2467- Animated shimmer ✨ 2468- Sparkling effects 2469- Glowing pulses ✨ 2470- Moving gradients 2471- BLING! 2472 2473### Performance 2474 2475**All animations**: 2476- Hardware accelerated (transform, opacity) 2477- Smooth 60fps 2478- CSS animations (no JavaScript) 2479- Minimal CPU usage 2480- Disabled in reduced-motion preference 2481 2482### Only for Pink Theme 2483 2484**Effects only apply when**: 2485```css 2486.calendar-theme-pink 2487``` 2488 2489**Other themes unaffected**: 2490- Matrix stays Matrix 2491- Professional stays Professional 2492- Purple stays Purple 2493- Wiki stays clean 2494 2495**Pink gets all the bling!** ✨ 2496 2497### Use Cases 2498 2499**Perfect for**: 2500- Celebrating occasions 2501- Fun team calendars 2502- Personal style expression 2503- Standing out 2504- Making calendar time fabulous 2505 2506**Not just pink, but BLING pink!** ✨ 2507 2508## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 2509 2510### Fixed: Today's Date Box Now Uses Theme Colors 2511- **Fixed:** Today's day number box now uses theme border color 2512- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 2513- **Result:** Today box matches the theme perfectly! 2514 2515### The Issue 2516 2517Today's date had a hardcoded green box: 2518 2519**In style.css**: 2520```css 2521.cal-today .day-num { 2522 background: #008800; /* Hardcoded green! */ 2523 color: white; 2524} 2525``` 2526 2527**Didn't adapt to themes at all!** 2528 2529### The Fix 2530 2531**Now uses theme colors**: 2532```php 2533// Today's day number 2534if ($isToday) { 2535 background: $themeStyles['border'], // Theme's accent color! 2536 color: (professional theme) ? white : bg color 2537} 2538``` 2539 2540### Theme Examples 2541 2542**Matrix Theme**: 2543- Box background: `#00cc07` (matrix green) 2544- Text color: `#242424` (dark background) 2545 2546**Purple Theme**: 2547- Box background: `#9b59b6` (purple) 2548- Text color: `#2a2030` (dark background) 2549 2550**Professional Theme**: 2551- Box background: `#4a90e2` (blue) 2552- Text color: `#ffffff` (white text) 2553 2554**Pink Theme**: 2555- Box background: `#ff1493` (hot pink) 2556- Text color: `#1a0d14` (dark background) 2557 2558**Wiki Theme**: 2559- Box background: Template's `__border__` color 2560- Text color: Template's `__background_site__` color 2561 2562### Visual Result 2563 2564**Matrix Theme**: 2565``` 2566┌──┬──┬──┬──┬──┬──┬──┐ 2567│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2568└──┴──┴──┴──┴──┴──┴──┘ 2569 ↑ 2570 Green box (#00cc07) 2571``` 2572 2573**Professional Theme**: 2574``` 2575┌──┬──┬──┬──┬──┬──┬──┐ 2576│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2577└──┴──┴──┴──┴──┴──┴──┘ 2578 ↑ 2579 Blue box (#4a90e2) 2580``` 2581 2582**Wiki Theme**: 2583``` 2584┌──┬──┬──┬──┬──┬──┬──┐ 2585│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2586└──┴──┴──┴──┴──┴──┴──┘ 2587 ↑ 2588 Template border color 2589``` 2590 2591### Implementation 2592 2593**Inline styles added**: 2594- Background uses `$themeStyles['border']` (theme accent) 2595- Text color uses `$themeStyles['bg']` for contrast 2596- Special case: Professional theme uses white text 2597- All with `!important` to override CSS 2598 2599**CSS cleaned up**: 2600- Removed hardcoded `#008800` background 2601- Removed hardcoded `white` color 2602- Kept structural styles (border-radius, font-weight) 2603 2604### Benefits 2605 2606**Theme Consistency**: 2607- Today box matches theme accent color 2608- Proper contrast with background 2609- Professional appearance 2610 2611**Automatic Adaptation**: 2612- Works with all themes 2613- Works with custom wiki template colors 2614- No manual adjustment needed 2615 2616**Visual Harmony**: 2617- Border color used throughout theme 2618- Today box reinforces theme identity 2619- Consistent design language 2620 2621## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 2622 2623### Fixed: Table Grid Background Now Matches Cells 2624- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 2625- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 2626- **Result:** Table background no longer shows through cells! 2627 2628### The Layer Problem 2629 2630The table itself had a DIFFERENT background color than its cells! 2631 2632**Before (v5.2.6)**: 2633```php 2634'grid_bg' => __background_alt__, // Table background (#e8e8e8) 2635'cell_bg' => __background_site__, // Cell background (#f5f5f5) 2636``` 2637 2638**The table background was showing THROUGH the cells!** 2639 2640### Why This Happened 2641 2642**Visual layers**: 2643``` 2644Table Element 2645├─ background: __background_alt__ (#e8e8e8) ← Different! 2646└─ Cells 2647 └─ background: __background_site__ (#f5f5f5) ← Different! 2648 2649The table background shows through any gaps! 2650``` 2651 2652### The Fix 2653 2654**After (v5.2.7)**: 2655```php 2656'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 2657'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 2658``` 2659 2660**NOW THEY MATCH!** 2661 2662### Where grid_bg Is Used 2663 2664The table element itself: 2665```html 2666<table style="background: __background_alt__"> ← Was showing through! 2667 <tbody> 2668 <tr> 2669 <td style="background: __background_site__">1</td> 2670 </tr> 2671 </tbody> 2672</table> 2673``` 2674 2675Even with cell inline styles, the TABLE background shows through! 2676 2677### All Background Sources Now Unified 2678 2679**Everything now uses __background_site__**: 2680- `bg` → __background_site__ ✓ 2681- `header_bg` → __background_site__ ✓ 2682- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 2683- `cell_bg` → __background_site__ ✓ 2684 2685**Perfect consistency!** 2686 2687### Why It Was Different 2688 2689**Originally the grid was meant to show borders**: 2690- `grid_bg` was `__background_alt__` (slightly different) 2691- Created visual separation between cells 2692- But with transparent/thin cells, it showed through! 2693 2694**Now unified for consistency!** 2695 2696### Visual Result 2697 2698**Before (layers visible)**: 2699``` 2700┌─────────────────┐ 2701│ Grid (#e8e8e8) │ ← Showing through! 2702│ ┌──┬──┬──┐ │ 2703│ │ │ │ │ │ ← Cells (#f5f5f5) 2704│ └──┴──┴──┘ │ 2705└─────────────────┘ 2706``` 2707 2708**After (unified)**: 2709``` 2710┌─────────────────┐ 2711│ Grid (#f5f5f5) │ ← Same color! 2712│ ┌──┬──┬──┐ │ 2713│ │ │ │ │ │ ← Cells (#f5f5f5) 2714│ └──┴──┴──┘ │ 2715└─────────────────┘ 2716Perfect match! 2717``` 2718 2719### Complete Background Mapping 2720 2721**All using __background_site__ now**: 2722- Main container background 2723- Left panel background 2724- Right panel background 2725- Eventlist background 2726- Calendar grid background ← JUST FIXED 2727- Calendar cell backgrounds 2728- Event item backgrounds 2729- Clock header background 2730- Search input background 2731- Past events toggle 2732 2733**EVERYTHING UNIFIED!** 2734 2735## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 2736 2737### Fixed: Removed Container Backgrounds Showing Through 2738- **Found:** `.calendar-compact-container` had `background: #ffffff;` 2739- **Found:** `.calendar-compact-left` had `background: #fafafa;` 2740- **Found:** `.calendar-compact-right` had `background: #ffffff;` 2741- **Found:** `.event-search-input-inline` had `background: white;` 2742- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 2743- **Result:** Container backgrounds no longer show through cells! 2744 2745### The Container Problem 2746 2747The parent containers had hardcoded backgrounds that were showing through! 2748 2749**Container backgrounds (lines 4-91)**: 2750```css 2751.calendar-compact-container { 2752 background: #ffffff; /* ← Main container! */ 2753} 2754 2755.calendar-compact-left { 2756 background: #fafafa; /* ← Left panel (calendar side)! */ 2757} 2758 2759.calendar-compact-right { 2760 background: #ffffff; /* ← Right panel (events side)! */ 2761} 2762``` 2763 2764**These were showing through the cells and events!** 2765 2766### Why Containers Matter 2767 2768Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 2769 2770``` 2771Container (#fafafa) ← Showing through! 2772 └─ Table Cell (#f5f5f5) ← Transparent areas 2773 └─ Content 2774``` 2775 2776### All Backgrounds Removed 2777 2778**v5.2.6 removes**: 2779- `.calendar-compact-container` background 2780- `.calendar-compact-left` background 2781- `.calendar-compact-right` background 2782- `.event-search-input-inline` background 2783- `.past-events-toggle` background & hover 2784 2785**v5.2.5 removed**: 2786- `.calendar-compact-grid tbody td` background 2787- `.calendar-compact-grid thead th` background 2788 2789**v5.2.4 removed**: 2790- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 2791 2792**v5.2.3 removed**: 2793- `.event-compact-item` background 2794 2795**ALL container and element backgrounds eliminated!** 2796 2797### What Should Work Now 2798 2799**Calendar cells**: No container background showing through ✓ 2800**Event items**: No container background showing through ✓ 2801**Search bar**: Uses template color ✓ 2802**Past events toggle**: Uses template color ✓ 2803 2804### Complete List of Fixes 2805 2806**Containers**: 2807- Main container ✓ 2808- Left panel ✓ 2809- Right panel ✓ 2810 2811**Elements**: 2812- Table cells ✓ 2813- Event items ✓ 2814- Search input ✓ 2815- Past events toggle ✓ 2816 2817**EVERYTHING removed!** 2818 2819### Critical: Clear Caches 2820 2821**Must clear caches or won't work**: 28221. Hard refresh: Ctrl+Shift+R (5 times!) 28232. Clear DokuWiki cache 28243. Close browser completely 28254. Reopen and test 2826 2827**CSS caching is EXTREMELY persistent!** 2828 2829## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 2830 2831### Fixed: Removed Hardcoded Backgrounds from Table Cells 2832- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 2833- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 2834- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 2835- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 2836- **Result:** Calendar table cells finally use template colors! 2837 2838### The REAL Culprits 2839 2840The generic table CSS was overriding everything! 2841 2842**In style.css (lines 307-356)**: 2843```css 2844.calendar-compact-grid thead th { 2845 background: #f8f8f8; /* ← Header cells hardcoded! */ 2846} 2847 2848.calendar-compact-grid tbody td { 2849 background: #ffffff; /* ← ALL table cells hardcoded! */ 2850} 2851 2852.calendar-compact-grid tbody td:hover { 2853 background: #f0f7ff; /* ← Hover state hardcoded! */ 2854} 2855``` 2856 2857**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 2858 2859### Why This Was the Last One 2860 2861**CSS Specificity Order**: 28621. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 28632. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 28643. Inline styles (should win but didn't) 2865 2866**We removed the specific ones (v5.2.4), but the generic one was still there!** 2867 2868### What We've Removed 2869 2870**v5.2.3**: 2871- `.event-compact-item` background 2872- `.event-compact-item:hover` background 2873 2874**v5.2.4**: 2875- `.cal-empty` background & hover 2876- `.cal-today` background & hover 2877- `.cal-has-events` background & hover 2878 2879**v5.2.5 (FINAL)**: 2880- `.calendar-compact-grid tbody td` background ✓ 2881- `.calendar-compact-grid tbody td:hover` background ✓ 2882- `.calendar-compact-grid thead th` background ✓ 2883 2884**All CSS background overrides ELIMINATED!** 2885 2886### Why It Took 5 Versions 2887 2888**CSS had layers of hardcoded backgrounds**: 2889 2890``` 2891Layer 1: Table cells (.calendar-compact-grid tbody td) 2892 ↓ Overrode inline styles 2893Layer 2: Cell states (.cal-today, .cal-empty, etc.) 2894 ↓ Overrode table cells 2895Layer 3: Event items (.event-compact-item) 2896 ↓ Overrode inline styles 2897 2898ALL had to be removed! 2899``` 2900 2901**We kept finding more specific CSS, but the base table CSS was there all along!** 2902 2903### Visual Result 2904 2905**NOW everything matches**: 2906``` 2907Calendar Table: 2908┌──┬──┬──┬──┬──┬──┬──┐ 2909│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 2910├──┼──┼──┼──┼──┼──┼──┤ 2911│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 2912├──┼──┼──┼──┼──┼──┼──┤ 2913│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 2914└──┴──┴──┴──┴──┴──┴──┘ 2915 2916Sidebar Events: 2917┌────────────────────────┐ 2918│ Event │ ← __background_site__ 2919│ Event │ ← __background_site__ 2920└────────────────────────┘ 2921 2922FINALLY ALL MATCHING! ✓ 2923``` 2924 2925### Complete List of Removed CSS 2926 2927**ALL hardcoded backgrounds removed**: 2928- `.event-compact-item` background 2929- `.event-compact-item:hover` background 2930- `.cal-empty` background & hover 2931- `.cal-today` background & hover 2932- `.cal-has-events` background & hover 2933- `.calendar-compact-grid tbody td` background ← NEW 2934- `.calendar-compact-grid tbody td:hover` background ← NEW 2935- `.calendar-compact-grid thead th` background ← NEW 2936 2937**Every single CSS background override is GONE!** 2938 2939### Testing Steps 2940 2941**After installing v5.2.5**: 2942 29431. **Clear browser cache**: Ctrl+Shift+R (3 times!) 29442. **Clear DokuWiki cache**: Click the button 29453. **Close browser completely**: Restart it 29464. **Visit page**: Should finally see matching backgrounds 2947 2948**CSS is EXTREMELY sticky - may need to clear multiple times!** 2949 2950### This Should Be It 2951 2952**No more CSS overrides exist** (we've checked the entire file): 2953- Table cells ✓ Fixed 2954- Cell states ✓ Fixed 2955- Event items ✓ Fixed 2956- Headers ✓ Fixed 2957- Hover states ✓ Fixed 2958 2959**All backgrounds now come from inline styles using template colors!** 2960 2961## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 2962 2963### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 2964- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 2965- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 2966- **Result:** Calendar cells now use template colors! 2967 2968### The Second Culprit 2969 2970MORE hardcoded backgrounds in the CSS file! 2971 2972**In style.css (lines 359-382)**: 2973```css 2974.cal-empty { 2975 background: #fafafa !important; /* ← Overriding inline styles! */ 2976} 2977 2978.cal-today { 2979 background: #e8f5e9 !important; /* ← Overriding today cell! */ 2980} 2981 2982.cal-today:hover { 2983 background: #c8e6c9 !important; /* ← Overriding hover! */ 2984} 2985 2986.cal-has-events { 2987 background: #fffbf0; /* ← Overriding event cells! */ 2988} 2989 2990.cal-has-events:hover { 2991 background: #fff4d9; /* ← Overriding hover! */ 2992} 2993``` 2994 2995**These were ALL overriding the inline styles!** 2996 2997### The Fix 2998 2999**Removed all hardcoded backgrounds**: 3000```css 3001.cal-empty { 3002 /* background removed - inline style handles this */ 3003 cursor: default !important; 3004} 3005 3006.cal-today { 3007 /* background removed - inline style handles this */ 3008} 3009 3010.cal-has-events { 3011 /* background removed - inline style handles this */ 3012} 3013 3014/* Hover states also removed */ 3015``` 3016 3017### What Was Overridden 3018 3019**v5.2.3 fixed**: 3020- Event items in sidebar ✓ 3021 3022**v5.2.4 fixes**: 3023- Calendar day cells ✓ 3024- Today cell ✓ 3025- Empty cells ✓ 3026- Cells with events ✓ 3027- All hover states ✓ 3028 3029### Why This Kept Happening 3030 3031**CSS had hardcoded backgrounds everywhere**: 30321. Event items: `#ffffff` (fixed in v5.2.3) 30332. Calendar cells: Multiple colors (fixed in v5.2.4) 30343. **All with `!important` flags!** 3035 3036**The inline styles couldn't override them!** 3037 3038### Visual Result 3039 3040**Now ALL backgrounds match**: 3041``` 3042Calendar Grid: 3043┌──┬──┬──┬──┬──┬──┬──┐ 3044│ │ │ │ │ │ │ │ ← All use __background_site__ 3045├──┼──┼──┼──┼──┼──┼──┤ 3046│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 3047├──┼──┼──┼──┼──┼──┼──┤ 3048│ │ │ │ │ │ │ │ ← All match template 3049└──┴──┴──┴──┴──┴──┴──┘ 3050 3051Sidebar Events: 3052┌────────────────────────┐ 3053│ Event │ ← Uses __background_site__ 3054│ Event │ ← Uses __background_site__ 3055└────────────────────────┘ 3056 3057Perfect consistency! 3058``` 3059 3060### CSS Removed 3061 3062**Calendar cells**: 3063- `.cal-empty` background 3064- `.cal-empty:hover` background 3065- `.cal-today` background 3066- `.cal-today:hover` background 3067- `.cal-has-events` background 3068- `.cal-has-events:hover` background 3069 3070**All gone!** ✓ 3071 3072### Important: Clear Caches Again! 3073 3074After installing v5.2.4: 3075 30761. **Hard refresh browser**: Ctrl+Shift+R (twice!) 30772. **Clear DokuWiki cache**: Admin → Clear Cache 30783. **May need to restart browser**: To clear CSS cache 3079 3080**Old CSS is VERY sticky!** 3081 3082### Why It Took So Long 3083 3084**Multiple CSS overrides**: 3085- Event items (v5.2.3) ✓ Fixed 3086- Calendar cells (v5.2.4) ✓ Fixed 3087- Each with different classes 3088- Each with `!important` 3089- Hidden throughout CSS file 3090 3091**Found them all now!** 3092 3093## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 3094 3095### Fixed: Removed Hardcoded Backgrounds from CSS 3096- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 3097- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 3098- **Result:** Event backgrounds now properly use template colors! 3099 3100### The Root Cause 3101 3102The CSS file was overriding the inline styles with hardcoded white backgrounds! 3103 3104**In style.css (lines 599-616)**: 3105```css 3106.event-compact-item { 3107 background: #ffffff; /* ← This was overriding inline styles! */ 3108} 3109 3110.event-compact-item:hover { 3111 background: #f8f9fa; /* ← And this on hover! */ 3112} 3113``` 3114 3115**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 3116 3117### The Fix 3118 3119**Removed hardcoded backgrounds from CSS**: 3120```css 3121.event-compact-item { 3122 /* background removed - set via inline style with template colors */ 3123 display: flex; 3124 /* ... other styles ... */ 3125} 3126 3127.event-compact-item:hover { 3128 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 3129 /* background removed - inline style handles this */ 3130} 3131``` 3132 3133### Why This Was So Difficult to Find 3134 3135**CSS Specificity & Cascade**: 31361. Inline styles with `!important` should win 31372. But CSS that comes after can still apply 31383. The hardcoded `background: #ffffff` was silently overriding 31394. All the PHP code was correct - it was the CSS! 3140 3141**What We Were Doing**: 3142- ✓ Reading template colors correctly 3143- ✓ Setting `cell_bg` to `__background_site__` correctly 3144- ✓ Applying inline styles with `!important` correctly 3145- ✗ CSS file was overriding everything! 3146 3147### What Was Affected 3148 3149**Event items in**: 3150- Main calendar sidebar 3151- Standalone event list 3152- Sidebar widget 3153- All event displays 3154 3155**All had white backgrounds hardcoded in CSS!** 3156 3157### Now Working 3158 3159**Events use template colors**: 3160```html 3161<div class="event-compact-item" 3162 style="background: #f5f5f5 !important; ..."> 3163 ← Now this inline style actually works! 3164</div> 3165``` 3166 3167**No CSS override** ✓ 3168 3169### Testing 3170 3171To verify this works: 31721. Clear browser cache (important!) 31732. Clear DokuWiki cache 31743. Reload page 31754. Events should now match eventlist background 3176 3177**Browser caching can make old CSS persist!** 3178 3179### Visual Result 3180 3181**All backgrounds now matching**: 3182``` 3183┌────────────────────────────┐ 3184│ Eventlist (#f5f5f5) │ ← Template color 3185├────────────────────────────┤ 3186│ Event (#f5f5f5) │ ← Template color (was #ffffff) 3187├────────────────────────────┤ 3188│ Event (#f5f5f5) │ ← Template color (was #ffffff) 3189└────────────────────────────┘ 3190 3191Perfect match! 3192``` 3193 3194### Why Everything Else Worked 3195 3196**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 3197- They only had inline styles ✓ 3198- Inline styles worked correctly ✓ 3199- Only event items had the CSS override ✗ 3200 3201### Important Notes 3202 3203**Clear caches**: 3204- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 3205- DokuWiki cache (Admin → Clear Cache) 3206- Old CSS may be cached! 3207 3208**This was the culprit all along!** 3209 3210## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 3211 3212### Fixed: Clock Area Now Matches Event Cells 3213- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 3214- **Result:** Clock/Today header matches event cell backgrounds! 3215 3216### The Issue 3217 3218The clock area (Today header) was using a different background: 3219 3220**Before (v5.2.1)**: 3221```php 3222'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 3223'cell_bg' => __background_site__, // Event cells (#f5f5f5) 3224``` 3225 3226**After (v5.2.2)**: 3227```php 3228'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 3229'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 3230``` 3231 3232### What's the Clock Area? 3233 3234The clock/Today header in the sidebar: 3235``` 3236┌────────────────────────────┐ 3237│ 3:45:23 PM │ ← Clock area (header_bg) 3238│ ️ --° | Sun, Feb 9, 2026 │ 3239└────────────────────────────┘ 3240``` 3241 3242### All Backgrounds Now Unified 3243 3244**Everything now uses __background_site__**: 3245- Eventlist background ✓ 3246- Calendar cells ✓ 3247- Event items ✓ 3248- Clock/Today header ✓ 3249- Sidebar widget ✓ 3250- All backgrounds match! ✓ 3251 3252### Visual Result 3253 3254**Complete consistency**: 3255``` 3256┌────────────────────────────┐ 3257│ 3:45:23 PM │ ← Same background 3258│ ️ --° | Sun, Feb 9, 2026 │ 3259├────────────────────────────┤ 3260│ Meeting at 2pm │ ← Same background 3261│ Description... │ 3262├────────────────────────────┤ 3263│ Another event │ ← Same background 3264│ More details... │ 3265└────────────────────────────┘ 3266 3267All using __background_site__ (#f5f5f5) 3268``` 3269 3270**Perfect visual harmony!** 3271 3272## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 3273 3274### Fixed: Calendar Cells Now Match Eventlist Background 3275- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 3276- **Result:** Calendar cells now match the eventlist background perfectly! 3277 3278### The Real Issue 3279 3280The eventlist was showing the CORRECT background color all along! 3281 3282**Eventlist was using**: 3283- `bg` → `__background_site__` ✓ (This was correct!) 3284 3285**Calendar cells were using**: 3286- `cell_bg` → `__background__` ✗ (This was wrong!) 3287 3288**They didn't match!** 3289 3290### The Correct Fix 3291 3292**Now everything uses __background_site__**: 3293```php 3294'bg' => __background_site__, // Eventlist (was already correct) 3295'cell_bg' => __background_site__, // Cells (now fixed to match) 3296``` 3297 3298### Why __background_site__? 3299 3300The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 3301 3302``` 3303Page Layout: 3304┌────────────────────────────────────┐ 3305│ __background_site__ (page bg) │ ← This is where calendar lives 3306│ │ 3307│ ┌──────────────────────────────┐ │ 3308│ │ __background__ (content bg) │ │ ← Wiki article content 3309│ │ │ │ 3310│ └──────────────────────────────┘ │ 3311│ │ 3312└────────────────────────────────────┘ 3313``` 3314 3315**Calendar should match the page background, not the content background!** 3316 3317### Template Example 3318 3319Typical DokuWiki template: 3320```ini 3321__background_site__ = "#f5f5f5" (Light gray - page background) 3322__background__ = "#ffffff" (White - content area) 3323``` 3324 3325**Before (v5.2.0)**: 3326- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3327- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 3328 3329**After (v5.2.1)**: 3330- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3331- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 3332 3333### All Backgrounds Now Unified 3334 3335**Everything now uses __background_site__**: 3336- Eventlist sidebar background ✓ 3337- Main calendar background ✓ 3338- Calendar day cells ✓ 3339- Sidebar widget ✓ 3340- Event items ✓ 3341- Input fields ✓ 3342- Buttons ✓ 3343 3344**All perfectly matched to the page background!** 3345 3346### Why Version 5.2.0 Was Wrong 3347 3348I incorrectly assumed `__background__` was the right color because it's often white. But the eventlist was already correct using `__background_site__` to match the page, not the content area. 3349 3350**The eventlist knew what it was doing all along!** The cells just needed to catch up. 3351 3352## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 3353**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 3354 3355### Fixed: All Backgrounds Now Use __background__ 3356- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 3357- **Fixed:** Eventlist, calendar cells, and sidebar all match now 3358- **Result:** Completely unified background throughout! 3359 3360### The Issue 3361 3362Different parts of the calendar were using different background sources: 3363 3364**Before (v5.1.9)**: 3365```php 3366'bg' => __background_site__ // Eventlist background (outer page) 3367'cell_bg' => __background__ // Cell backgrounds (content area) 3368``` 3369 3370**These are different colors!** 3371- `__background_site__` = Outer page wrapper (often gray) 3372- `__background__` = Main content area (often white) 3373 3374### The Fix 3375 3376**After (v5.2.0)**: 3377```php 3378'bg' => __background__ // Eventlist background ✓ 3379'cell_bg' => __background__ // Cell backgrounds ✓ 3380``` 3381 3382**Both use the same source!** 3383 3384### What Uses 'bg' 3385 3386The `bg` color is used for: 3387- Eventlist sidebar background 3388- Main calendar container 3389- Sidebar widget background 3390- Form backgrounds 3391- Event dialogs 3392 3393### What Uses 'cell_bg' 3394 3395The `cell_bg` color is used for: 3396- Calendar day cells 3397- Event item backgrounds 3398- Input field backgrounds 3399- Button backgrounds 3400 3401### Why This Matters 3402 3403**Template color hierarchy**: 3404``` 3405__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 3406__background__ → Main content area (e.g., #ffffff white) 3407__background_alt__ → Sections/headers 3408__background_neu__ → Highlights 3409``` 3410 3411**We want all calendar backgrounds to match the main content area!** 3412 3413### Visual Comparison 3414 3415**Before (v5.1.9)**: Mismatched backgrounds 3416``` 3417┌────────────────────────────────┐ 3418│ Eventlist (gray #f5f5f5) │ ← __background_site__ 3419└────────────────────────────────┘ 3420 3421┌────────────────────────────────┐ 3422│ Calendar │ 3423│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3424│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3425│ └──┴──┴──┴──┴──┴──┴──┘ │ 3426└────────────────────────────────┘ 3427Different colors - looks inconsistent 3428``` 3429 3430**After (v5.2.0)**: Unified backgrounds 3431``` 3432┌────────────────────────────────┐ 3433│ Eventlist (white #fff) │ ← __background__ 3434└────────────────────────────────┘ 3435 3436┌────────────────────────────────┐ 3437│ Calendar │ 3438│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3439│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3440│ └──┴──┴──┴──┴──┴──┴──┘ │ 3441└────────────────────────────────┘ 3442Same color - perfectly consistent! 3443``` 3444 3445### Template Examples 3446 3447**Light Template**: 3448```ini 3449__background_site__ = "#f5f5f5" (light gray) 3450__background__ = "#ffffff" (white) 3451``` 3452 3453**Before**: Eventlist gray, cells white 3454**After**: Eventlist white, cells white ✓ 3455 3456**Dark Template**: 3457```ini 3458__background_site__ = "#1a1a1a" (very dark) 3459__background__ = "#2d2d2d" (dark) 3460``` 3461 3462**Before**: Eventlist very dark, cells dark 3463**After**: Eventlist dark, cells dark ✓ 3464 3465### Benefits 3466 3467**Visual Consistency**: 3468- All backgrounds match 3469- Clean, unified appearance 3470- Professional look 3471 3472**Correct Template Integration**: 3473- Uses content area color (not page wrapper) 3474- Matches wiki content area 3475- Proper color hierarchy 3476 3477**Works Everywhere**: 3478- Light templates ✓ 3479- Dark templates ✓ 3480- Custom templates ✓ 3481 3482### All Backgrounds Unified 3483 3484**Now using __background__**: 3485- Eventlist background ✓ 3486- Calendar cells ✓ 3487- Sidebar widget ✓ 3488- Event items ✓ 3489- Input fields ✓ 3490- Buttons ✓ 3491- Dialogs ✓ 3492 3493**Perfect harmony throughout!** 3494 3495## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 3496 3497### Fixed: Wiki Theme Event Backgrounds Not Showing 3498- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 3499- **Fixed:** Replaced CSS variables with actual hex colors 3500- **Result:** Event backgrounds now show correctly with template colors! 3501 3502### The Problem 3503 3504CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 3505 3506**Before (broken)**: 3507```php 3508'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 3509``` 3510 3511**After (fixed)**: 3512```php 3513'cell_bg' => '#fff', // Actual hex color works! 3514``` 3515 3516### What Was Affected 3517 3518**When style.ini read successfully**: 3519- ✅ Worked fine (uses actual hex colors from file) 3520 3521**When style.ini fallback used**: 3522- ❌ Events had no background 3523- ❌ CSS variables don't work in inline styles 3524- ❌ Looked broken 3525 3526### The Fix 3527 3528**Wiki theme fallback now uses real colors**: 3529```php 3530'wiki' => [ 3531 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 3532 'border' => '#ccc', // Real hex (was: var(--__border__)) 3533 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 3534 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 3535 'text_primary' => '#333', // Real hex (was: var(--__text__)) 3536 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 3537 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 3538 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 3539 // ... all colors now use real hex values 3540] 3541``` 3542 3543### Why CSS Variables Don't Work 3544 3545**CSS variables work**: 3546```css 3547.some-class { 3548 background: var(--__background__, #fff); /* ✓ Works in CSS */ 3549} 3550``` 3551 3552**CSS variables DON'T work**: 3553```html 3554<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 3555``` 3556 3557### How It Works Now 3558 3559**Priority system**: 35601. **Try reading style.ini** → Use actual template hex colors ✓ 35612. **If file not found** → Use fallback hex colors ✓ 35623. **Never use CSS variables in inline styles** ✓ 3563 3564**Both paths now work correctly!** 3565 3566### Visual Result 3567 3568**Events now have proper backgrounds**: 3569``` 3570┌──────────────────────────┐ 3571│ Meeting at 2pm │ ← White background (#fff) 3572│ Description here... │ 3573│ [✏️ Edit] [️ Delete] │ 3574└──────────────────────────┘ 3575 3576Not: 3577┌──────────────────────────┐ 3578│ Meeting at 2pm │ ← No background (broken) 3579│ Description here... │ 3580└──────────────────────────┘ 3581``` 3582 3583### Affected Areas 3584 3585**All event displays**: 3586- Main calendar events ✓ 3587- Sidebar widget events ✓ 3588- Event list items ✓ 3589- Event backgrounds ✓ 3590- Button backgrounds ✓ 3591- Input field backgrounds ✓ 3592 3593**Everything uses real colors now!** 3594 3595## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 3596 3597### Reorganized: Better Update Tab Layout 3598- **Moved:** Current Version section to the top 3599- **Combined:** Upload and Important Notes side-by-side 3600- **Improved:** Space-efficient two-column layout 3601- **Result:** More information visible at once! 3602 3603### New Layout Order 3604 3605**Version 5.1.8**: 3606``` 36071. Current Version (at top - see what you have) 36082. Upload + Important Notes (side-by-side) 36093. Recent Changes (changelog) 36104. Backups 3611``` 3612 3613### Side-by-Side Design 3614 3615**Upload form (left 60%) + Important Notes (right 40%)**: 3616``` 3617┌──────────────────────────────────────────┐ 3618│ Current Version │ 3619│ Version: 5.1.8 │ 3620│ ✅ Permissions: OK │ 3621└──────────────────────────────────────────┘ 3622 3623┌─────────────────────┬────────────────────┐ 3624│ Upload New │ ⚠️ Important Notes │ 3625│ [Choose File] │ • Replaces files │ 3626│ ☑ Backup first │ • Config preserved │ 3627│ [Upload] [Clear] │ • Events safe │ 3628└─────────────────────┴────────────────────┘ 3629``` 3630 3631### Benefits 3632 3633**Current Version First**: 3634- See what you have immediately 3635- Check permissions at a glance 3636- Know if ready to update 3637 3638**Side-by-Side Layout**: 3639- Upload form and warnings together 3640- Read notes while choosing file 3641- More efficient use of space 3642- Less scrolling needed 3643 3644**Better Information Flow**: 36451. See current version ✓ 36462. Upload new version with notes visible ✓ 36473. Review recent changes ✓ 36484. Manage backups ✓ 3649 3650### Visual Comparison 3651 3652**Before (v5.1.7)**: 3653``` 3654Important Notes (full width) 3655↓ 3656Upload Form (full width) 3657↓ 3658Current Version 3659↓ 3660Recent Changes 3661↓ 3662Backups 3663``` 3664 3665**After (v5.1.8)**: 3666``` 3667Current Version (full width) 3668↓ 3669Upload (60%) | Notes (40%) 3670↓ 3671Recent Changes 3672↓ 3673Backups 3674``` 3675 3676**More compact, better organized!** 3677 3678### Responsive Design 3679 3680**Wide screens**: 3681- Upload and notes side-by-side 3682- Full 1200px width utilized 3683- Efficient space usage 3684 3685**Narrow screens**: 3686- Sections stack gracefully 3687- Flex layout adapts 3688- Still fully functional 3689 3690### Layout Details 3691 3692**Current Version Section**: 3693- Full width (1200px max) 3694- Shows version, author, description 3695- Permission status with icons 3696- Helpful fix commands if needed 3697 3698**Upload/Notes Section**: 3699- Flexbox layout with gap 3700- Upload: `flex:1` (grows) 3701- Notes: `flex:0 0 350px` (fixed 350px) 3702- Both have proper min-width 3703 3704**Recent Changes Section**: 3705- Full width (1200px max) 3706- Compact scrollable view 3707- Color-coded change types 3708- Last 10 versions shown 3709 3710**Backups Section**: 3711- Full width (1200px max) 3712- Manual backup button 3713- Scrollable file list 3714- All actions accessible 3715 3716### Improved Max Widths 3717 3718All sections now use `max-width:1200px` (previously 900px): 3719- Better use of wide screens 3720- Still responsive on narrow screens 3721- Consistent throughout tab 3722 3723## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 3724 3725### Fixed: Extra Closing Brace 3726- **Fixed:** ParseError on line 1936 (extra closing brace) 3727- **Result:** Manual backup feature now works correctly! 3728 3729### What Was Wrong 3730 3731Extra `}` after the backup section: 3732 3733**Before (broken)**: 3734```php 3735echo '</div>'; 3736} // ← Extra closing brace! 3737 3738echo '<script> 3739``` 3740 3741**After (fixed)**: 3742```php 3743echo '</div>'; 3744 3745echo '<script> 3746``` 3747 3748**Manual backup feature now fully functional!** ✅ 3749 3750## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 3751 3752### Added: Create Backup Manually Anytime 3753- **Added:** "Create Backup Now" button in Backups section 3754- **Added:** Manual backup action handler with full verification 3755- **Added:** Backups section always visible (even with no backups) 3756- **Added:** Success message showing file size and file count 3757- **Result:** Create backups anytime without needing to upload! 3758 3759### Manual Backup Button 3760 3761**New Layout**: 3762``` 3763┌─────────────────────────────────────┐ 3764│ Backups [ Create Backup Now] │ 3765├─────────────────────────────────────┤ 3766│ Backup File Size │ 3767│ calendar.backup.v5.1.6... 243 KB │ 3768│ [ Download] [✏️ Rename] [️ Delete] │ 3769└─────────────────────────────────────┘ 3770``` 3771 3772**Always visible - even with no backups**: 3773``` 3774┌─────────────────────────────────────┐ 3775│ Backups [ Create Backup Now] │ 3776├─────────────────────────────────────┤ 3777│ No backups yet. Click "Create │ 3778│ Backup Now" to create your first │ 3779│ backup. │ 3780└─────────────────────────────────────┘ 3781``` 3782 3783### How It Works 3784 3785**Click the button**: 37861. Confirm: "Create a backup of the current plugin version?" 37872. System creates backup ZIP 37883. Verifies: File count (30+ files) 37894. Verifies: File size (200KB+) 37905. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 3791 3792**Backup naming**: 3793``` 3794calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3795 ^^^^^^ 3796 "manual" tag identifies manual backups 3797``` 3798 3799### Use Cases 3800 3801**Before updates**: 3802- Create safety backup before uploading new version 3803- Have multiple restore points 3804- Test new features with fallback 3805 3806**Regular backups**: 3807- Weekly/monthly backup schedule 3808- Before making configuration changes 3809- After important customizations 3810 3811**Development**: 3812- Backup before code experiments 3813- Save working states 3814- Quick rollback points 3815 3816### Full Verification 3817 3818**Same checks as automatic backups**: 3819- ✅ File count check (minimum 10, expected 30+) 3820- ✅ File size check (minimum 1KB, expected 200KB+) 3821- ✅ Existence check (file actually created) 3822- ✅ Automatic cleanup on failure 3823 3824**Success message includes**: 3825- Backup filename 3826- File size (human-readable) 3827- Number of files backed up 3828 3829### Example Messages 3830 3831**Success**: 3832``` 3833✓ Manual backup created successfully: 3834 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3835 (243 KB, 31 files) 3836``` 3837 3838**Failure Examples**: 3839``` 3840❌ Plugin directory is not readable. 3841 Please check permissions. 3842 3843❌ Backup incomplete: Only 5 files were added (expected 30+). 3844 Backup failed. 3845 3846❌ Backup file is too small (342 bytes). 3847 Only 3 files were added. Backup failed. 3848``` 3849 3850### Benefits 3851 3852**On-Demand Safety**: 3853- Create backups anytime 3854- No need to upload new version 3855- Quick and easy 3856 3857**Peace of Mind**: 3858- Backup before risky changes 3859- Multiple restore points 3860- Safe experimentation 3861 3862**Professional Workflow**: 3863- Regular backup schedule 3864- Version snapshots 3865- Disaster recovery 3866 3867### Backup Section Improvements 3868 3869**Always Visible**: 3870- Section shows even with 0 backups 3871- Button always accessible 3872- Clear call-to-action 3873 3874**Better Header**: 3875- Title and button on same row 3876- Clean, professional layout 3877- Space-efficient design 3878 3879### Technical Details 3880 3881**New Action**: `create_manual_backup` 3882 3883**New Function**: `createManualBackup()` 3884- Gets current version 3885- Creates timestamped filename with "manual" tag 3886- Uses same verification as auto-backups 3887- Shows detailed success/error messages 3888 3889**File Naming Convention**: 3890``` 3891Automatic (on upload): 3892calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 3893 3894Manual (button click): 3895calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3896 ^^^^^^^ 3897 Easy to identify! 3898``` 3899 3900### Permissions Required 3901 3902- **Read access**: Plugin directory 3903- **Write access**: Parent plugins directory 3904 3905**Same as automatic backups** - no additional permissions needed! 3906 3907## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 3908 3909### Enhanced: Backup Creation with Robust Verification 3910- **Added:** File count validation (must have 10+ files) 3911- **Added:** File size validation (must be 1KB+ minimum) 3912- **Added:** Return value from addDirectoryToZip (counts files added) 3913- **Added:** Detailed error messages showing file count 3914- **Added:** Automatic deletion of invalid/incomplete backups 3915- **Enhanced:** Exception handling with proper error propagation 3916- **Result:** Backups are now guaranteed to be complete or fail clearly! 3917 3918### What Changed 3919 3920**Before (v5.1.4)**: 3921```php 3922$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 3923$zip->close(); 3924// No verification - could create empty or partial backup 3925``` 3926 3927**After (v5.1.5)**: 3928```php 3929$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 3930$zip->close(); 3931 3932// Verify backup exists 3933if (!file_exists($backupPath)) { 3934 redirect('Backup file was not created'); 3935} 3936 3937// Verify backup has content 3938$backupSize = filesize($backupPath); 3939if ($backupSize < 1000) { 3940 unlink($backupPath); 3941 redirect('Backup too small: ' . $backupSize . ' bytes'); 3942} 3943 3944// Verify file count 3945if ($fileCount < 10) { 3946 unlink($backupPath); 3947 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 3948} 3949``` 3950 3951### Backup Validation Checks 3952 3953**Three-Layer Verification**: 3954 39551. **File Count Check**: 3956 - Minimum: 10 files required 3957 - Expected: 30+ files 3958 - Action: Delete backup if too few files 3959 39602. **Size Check**: 3961 - Minimum: 1KB (1000 bytes) 3962 - Expected: 200-250KB 3963 - Action: Delete backup if too small 3964 39653. **Existence Check**: 3966 - Verify file was actually created 3967 - Check ZIP archive is valid 3968 - Action: Error if file missing 3969 3970### Enhanced Error Reporting 3971 3972**Detailed Error Messages**: 3973``` 3974❌ "Backup file was not created" 3975❌ "Backup too small (342 bytes). Only 3 files added." 3976❌ "Only 5 files added (expected 30+). Backup aborted." 3977❌ "Too many errors adding files: Failed to add X, Y, Z..." 3978❌ "Directory does not exist: /path/to/dir" 3979❌ "Directory is not readable: /path/to/dir" 3980``` 3981 3982**Now you know exactly what went wrong!** 3983 3984### Improved addDirectoryToZip Function 3985 3986**Returns File Count**: 3987```php 3988private function addDirectoryToZip($zip, $dir, $zipPath = '') { 3989 $fileCount = 0; 3990 $errors = []; 3991 3992 // Validation 3993 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 3994 if (!is_readable($dir)) throw new Exception("Not readable"); 3995 3996 // Add files 3997 foreach ($files as $file) { 3998 if ($zip->addFile($filePath, $relativePath)) { 3999 $fileCount++; 4000 } else { 4001 $errors[] = "Failed to add: " . $filename; 4002 } 4003 } 4004 4005 // Check error threshold 4006 if (count($errors) > 5) { 4007 throw new Exception("Too many errors"); 4008 } 4009 4010 return $fileCount; // Returns count for verification! 4011} 4012``` 4013 4014### Safety Features 4015 4016**Invalid Backup Cleanup**: 4017- Failed backups are automatically deleted 4018- No partial/corrupt backups left behind 4019- Clean error state 4020 4021**Error Threshold**: 4022- Allow up to 5 minor file errors (logs warnings) 4023- More than 5 errors = complete failure 4024- Prevents partially corrupt backups 4025 4026**Directory Validation**: 4027- Check directory exists before processing 4028- Check directory is readable 4029- Fail fast with clear errors 4030 4031### Benefits 4032 4033**Guaranteed Complete Backups**: 4034- ✅ All files included or backup fails 4035- ✅ No silent failures 4036- ✅ Clear error messages 4037- ✅ Automatic cleanup 4038 4039**Better Debugging**: 4040- Know exactly how many files were added 4041- See specific errors for missing files 4042- Understand why backup failed 4043 4044**User Confidence**: 4045- Backup succeeds = complete backup 4046- Backup fails = clear error message 4047- No ambiguity 4048 4049### Example Scenarios 4050 4051**Scenario 1: Permission Issue** 4052``` 4053User uploads new version 4054System starts backup 4055Error: "Directory is not readable: /lib/plugins/calendar/" 4056Backup fails before creating file 4057User sees clear error message 4058``` 4059 4060**Scenario 2: Partial Backup** 4061``` 4062User uploads new version 4063System creates backup 4064Only 5 files added (disk issue?) 4065Size: 450 bytes 4066Verification fails 4067Incomplete backup deleted 4068Error: "Only 5 files added (expected 30+)" 4069``` 4070 4071**Scenario 3: Success** 4072``` 4073User uploads new version 4074System creates backup 407531 files added 4076Size: 240KB 4077All verifications pass ✅ 4078Update proceeds 4079``` 4080 4081### Testing Recommendations 4082 4083After installing v5.1.5: 40841. Upload a new version with backup enabled 40852. Check for success message 40863. Verify backup file exists in /lib/plugins/ 40874. Check backup file size (should be ~240KB) 40885. If backup fails, read error message carefully 4089 4090**Your backups are now bulletproof!** 4091 4092## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 4093 4094### ✅ Verified: Backup System Working Correctly 4095- **Verified:** addDirectoryToZip function includes all files recursively 4096- **Verified:** Backups contain all 31+ files from calendar directory 4097- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 4098- **Info:** Backup sizes grow slightly with each version (more code = more features!) 4099- **Result:** Backup system is working perfectly! 4100 4101### Backup System Details 4102 4103**What Gets Backed Up**: 4104- All PHP files (syntax.php, admin.php, action.php, etc.) 4105- All JavaScript files (calendar-main.js, script.js) 4106- All documentation (CHANGELOG.md, README.md, all guides) 4107- All configuration (sync_config.php) 4108- All language files 4109- All assets and resources 4110- **Everything in the calendar/ directory!** 4111 4112**Backup Size Analysis**: 4113``` 4114Version 5.0.4: 233KB (normal) 4115Version 5.0.5: 234KB (normal) 4116Version 5.0.6: 235KB (normal) 4117Version 5.0.7: 236KB (normal) 4118Version 5.0.8: 237KB (normal) 4119Version 5.0.9: 237KB (normal) 4120Version 5.1.0: 238KB (normal) 4121Version 5.1.1: 238KB (normal) 4122Version 5.1.2: 240KB (normal - added AJAX features) 4123Version 5.1.3: 240KB (normal) 4124``` 4125 4126**Why Sizes Grow**: 4127- More features = more code 4128- Longer CHANGELOG 4129- Additional documentation 4130- New functionality 4131- **This is expected and normal!** 4132 4133**Compression Ratio**: 4134``` 4135Uncompressed: ~1.0 MB (source files) 4136Compressed: ~240 KB (ZIP archive) 4137Ratio: ~24% (excellent compression!) 4138``` 4139 4140### Backup File Contents 4141 4142**31 Files Included**: 4143``` 4144admin.php (216KB - main admin interface) 4145syntax.php (173KB - calendar rendering) 4146calendar-main.js (102KB - JavaScript functionality) 4147CHANGELOG.md (268KB - complete version history) 4148style.css (57KB - all styling) 4149action.php (38KB - DokuWiki actions) 4150sync_outlook.php (32KB - Outlook integration) 4151+ 24 other files (docs, configs, helpers) 4152``` 4153 4154**All files successfully included!** ✅ 4155 4156### How Backups Work 4157 4158**Creation Process**: 41591. User uploads new plugin version 41602. Checkbox "Create backup first" (checked by default) 41613. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 41624. Backup saved to: `/lib/plugins/` directory 41635. Then proceeds with update 4164 4165**Backup Function**: 4166```php 4167private function addDirectoryToZip($zip, $dir, $zipPath = '') { 4168 $files = new RecursiveIteratorIterator( 4169 new RecursiveDirectoryIterator($dir), 4170 RecursiveIteratorIterator::LEAVES_ONLY 4171 ); 4172 foreach ($files as $file) { 4173 if (!$file->isDir()) { 4174 $zip->addFile($filePath, $relativePath); 4175 } 4176 } 4177} 4178``` 4179 4180**Recursive = Gets Everything!** ✅ 4181 4182### Verification Results 4183 4184**Test Results**: 4185- ✅ All 31 files present in zip 4186- ✅ All subdirectories included (lang/en/) 4187- ✅ File sizes match originals 4188- ✅ Compression works properly 4189- ✅ No files missing 4190- ✅ Backup can be restored 4191 4192**File Count**: 4193``` 4194Source directory: 31 files 4195Backup ZIP: 34 items (31 files + 3 directories) 4196Status: COMPLETE ✅ 4197``` 4198 4199### Backup Best Practices 4200 4201**Always enabled by default** ✅ 4202**Stored in accessible location** ✅ 4203**Timestamped filenames** ✅ 4204**Complete directory backup** ✅ 4205**Easy to restore** ✅ 4206 4207### Conclusion 4208 4209The backup system is working perfectly. The file sizes are appropriate and expected: 4210- Compressed size: ~240KB (good compression) 4211- Uncompressed size: ~1MB (all source files) 4212- All files included: YES ✅ 4213- Growing size over versions: Normal (more features!) 4214 4215**Your backups are complete and reliable!** 4216 4217## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 4218 4219### Fixed: JavaScript Syntax Error in AJAX Function 4220- **Fixed:** ParseError on line 1947 (deleteBackup function) 4221- **Fixed:** Escaped all single quotes in JavaScript strings 4222- **Result:** AJAX backup deletion now works correctly! 4223 4224### What Was Wrong 4225 4226JavaScript inside PHP echo needs escaped quotes: 4227 4228**Before (broken)**: 4229```javascript 4230formData.append('action', 'delete_backup'); // PHP interprets quotes 4231``` 4232 4233**After (fixed)**: 4234```javascript 4235formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 4236``` 4237 4238### All Quotes Escaped 4239 4240Fixed in deleteBackup function: 4241- ✅ FormData.append() calls 4242- ✅ fetch() URL 4243- ✅ querySelector() calls 4244- ✅ createElement() call 4245- ✅ All string literals 4246- ✅ Error messages 4247 4248**JavaScript now works!** ✓ 4249 4250## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 4251 4252### Improved: Update Tab Further Refined 4253- **Moved:** Important Notes to very top (above upload) 4254- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 4255- **Added:** Smooth fade-out animation when deleting backups 4256- **Added:** Success message after deletion 4257- **Auto-remove:** Backup section disappears if last backup deleted 4258- **Result:** Smoother, more polished experience! 4259 4260### New Layout Order 4261 4262**Final Order (v5.1.2)**: 4263``` 42641. ⚠️ Important Notes (warnings at top) 42652. Upload New Version (with Clear Cache button) 42663. Current Version (info) 42674. Recent Changes (changelog) 42685. Available Backups (if any) 4269``` 4270 4271### AJAX Backup Deletion 4272 4273**Before (v5.1.1)**: 4274- Click Delete → Page refreshes → Scroll back down 4275- Lose position on page 4276- Page reload is jarring 4277 4278**After (v5.1.2)**: 4279- Click Delete → Confirm 4280- Row fades out smoothly 4281- Row disappears 4282- Success message shows at top 4283- Success message fades after 3 seconds 4284- If last backup: entire section fades away 4285- **No page refresh!** ✓ 4286 4287### Visual Flow 4288 4289**Delete Animation**: 4290``` 42911. Click ️ Delete 42922. Confirm dialog 42933. Row fades out (0.3s) 42944. Row removed 42955. Success message appears 42966. Message fades after 3s 4297``` 4298 4299**If Last Backup**: 4300``` 43011. Delete last backup 43022. Row fades out 43033. Entire "Available Backups" section fades 43044. Section removed 43055. Clean interface ✓ 4306``` 4307 4308### Success Message 4309 4310After deleting: 4311``` 4312┌──────────────────────────────┐ 4313│ ✓ Backup deleted: filename │ ← Appears at top 4314└──────────────────────────────┘ 4315 Fades after 3 seconds 4316``` 4317 4318### Benefits 4319 4320**Important Notes First**: 4321- Warnings before actions ✓ 4322- Read before uploading ✓ 4323- Clear expectations ✓ 4324 4325**AJAX Deletion**: 4326- No page refresh ✓ 4327- Smooth animations ✓ 4328- Stay in context ✓ 4329- Professional feel ✓ 4330 4331**Auto-Cleanup**: 4332- Empty list disappears ✓ 4333- Clean interface ✓ 4334- No clutter ✓ 4335 4336### Technical Implementation 4337 4338**AJAX Request**: 4339```javascript 4340fetch('?do=admin&page=calendar&tab=update', { 4341 method: 'POST', 4342 body: formData 4343}) 4344``` 4345 4346**DOM Manipulation**: 4347- Fade out row 4348- Remove element 4349- Show success 4350- Remove section if empty 4351 4352**Smooth Transitions**: 4353- 300ms fade animations 4354- Clean visual feedback 4355- Professional polish 4356 4357## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 4358 4359### Improved: Update Tab Layout Reorganized 4360- **Moved:** Upload section to the top of the page 4361- **Added:** Clear Cache button next to Upload & Install button 4362- **Changed:** "Current Version" section moved below upload 4363- **Result:** Better workflow - upload first, then see version info! 4364 4365### New Layout Order 4366 4367**Before (v5.1.0)**: 4368``` 43691. Clear Cache (standalone) 43702. Current Version 43713. Recent Changes 43724. Upload New Version 43735. Warning Box 43746. Backups 4375``` 4376 4377**After (v5.1.1)**: 4378``` 43791. Upload New Version (with Clear Cache button side-by-side) 43802. Warning Box 43813. Current Version 43824. Recent Changes 43835. Backups 4384``` 4385 4386### Visual Result 4387 4388**Top of Update Tab**: 4389``` 4390┌─────────────────────────────────┐ 4391│ Upload New Version │ 4392│ ┌─────────────────────────────┐ │ 4393│ │ [Choose File] │ │ 4394│ │ ☑ Create backup first │ │ 4395│ │ ┌──────────────┬──────────┐ │ │ 4396│ │ │ Upload & │️ Clear │ │ │ 4397│ │ │ Install │ Cache │ │ │ 4398│ │ └──────────────┴──────────┘ │ │ 4399│ └─────────────────────────────┘ │ 4400│ │ 4401│ ⚠️ Important Notes │ 4402│ • Will replace all files │ 4403│ • Config preserved │ 4404│ │ 4405│ Current Version │ 4406│ Version: 5.1.1 │ 4407└─────────────────────────────────┘ 4408``` 4409 4410### Benefits 4411 4412**Better Workflow**: 4413- Primary action (upload) is first 4414- Clear cache conveniently next to install 4415- No scrolling to find upload button 4416- Logical top-to-bottom flow 4417 4418**Side-by-Side Buttons**: 4419- Upload & Install (green) 4420- Clear Cache (orange) 4421- Both common actions together 4422- Easy to access after upload 4423 4424**Improved UX**: 4425- Upload is most important → now at top 4426- Version info is reference → moved down 4427- Related actions grouped 4428- Cleaner organization 4429 4430### Button Layout 4431 4432``` 4433┌──────────────────┬──────────────┐ 4434│ Upload & │ ️ Clear │ 4435│ Install │ Cache │ 4436│ (Green) │ (Orange) │ 4437└──────────────────┴──────────────┘ 4438``` 4439 4440**Green = Primary Action** 4441**Orange = Secondary Action** 4442 4443Both easily accessible! 4444 4445## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 4446 4447### Changed: Admin Section Backgrounds Now Use __background__ 4448- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 4449- **Result:** Cleaner, more unified admin interface! 4450 4451### Background Usage Update 4452 4453**Before (v5.0.9)**: 4454```php 4455Section boxes: bg_alt (__background_alt__) 4456Content areas: bg (__background__) 4457``` 4458 4459**After (v5.1.0)**: 4460```php 4461Section boxes: bg (__background__) 4462Content areas: bg (__background__) 4463``` 4464 4465### Why This Change? 4466 4467**More unified appearance**: 4468- Sections and content use same background 4469- Creates cleaner, more cohesive look 4470- Borders provide visual separation 4471- Matches typical admin UI patterns 4472 4473**Template color hierarchy**: 4474``` 4475__background_site__ → Outer page wrapper 4476__background__ → Content & sections (BOTH now use this) 4477__background_alt__ → Reserved for special panels/highlights 4478__background_neu__ → Special highlights 4479``` 4480 4481### Visual Result 4482 4483**Light Template**: 4484```ini 4485__background__ = "#ffffff" 4486__background_alt__ = "#e8e8e8" 4487``` 4488 4489**Before**: 4490``` 4491Admin Page: 4492┌─────────────────────┐ 4493│ ┌─────────────────┐ │ 4494│ │ Section Box │ │ ← Gray (#e8e8e8) 4495│ │ ┌─────────────┐ │ │ 4496│ │ │ Content │ │ │ ← White (#fff) 4497│ │ └─────────────┘ │ │ 4498│ └─────────────────┘ │ 4499└─────────────────────┘ 4500Two-tone appearance 4501``` 4502 4503**After**: 4504``` 4505Admin Page: 4506┌─────────────────────┐ 4507│ ┌─────────────────┐ │ 4508│ │ Section Box │ │ ← White (#fff) 4509│ │ ┌─────────────┐ │ │ 4510│ │ │ Content │ │ │ ← White (#fff) 4511│ │ └─────────────┘ │ │ 4512│ └─────────────────┘ │ 4513└─────────────────────┘ 4514Unified, clean appearance 4515Borders provide separation 4516``` 4517 4518**Dark Template**: 4519```ini 4520__background__ = "#2d2d2d" 4521__background_alt__ = "#3a3a3a" 4522``` 4523 4524**After**: 4525``` 4526Admin Page: 4527┌─────────────────────┐ 4528│ ┌─────────────────┐ │ 4529│ │ Section Box │ │ ← Dark (#2d2d2d) 4530│ │ ┌─────────────┐ │ │ 4531│ │ │ Content │ │ │ ← Dark (#2d2d2d) 4532│ │ └─────────────┘ │ │ 4533│ └─────────────────┘ │ 4534└─────────────────────┘ 4535Unified dark appearance 4536Accent borders provide definition 4537``` 4538 4539### Benefits 4540 4541**Cleaner Look**: 4542- No more alternating gray/white 4543- More professional appearance 4544- Less visual noise 4545- Unified color scheme 4546 4547**Better Consistency**: 4548- Matches modern admin UI patterns 4549- Borders define sections, not colors 4550- Simpler, cleaner design 4551- Easier on the eyes 4552 4553**Template Friendly**: 4554- Works with any background color 4555- Light or dark templates 4556- Custom colors 4557- Always looks cohesive 4558 4559### All Sections Updated 4560 4561✅ Outlook Sync config sections 4562✅ Manage Events sections 4563✅ Update Plugin sections 4564✅ Themes tab sections 4565✅ Week start day section 4566✅ All form sections 4567 4568**Complete unified theming!** 4569 4570## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 4571 4572### Fixed: Syntax Error in Theme Cards 4573- **Fixed:** ParseError on line 4461 (Purple theme card) 4574- **Fixed:** Malformed ternary expressions from sed replacement 4575- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 4576- **Result:** Admin pages work correctly! 4577 4578### What Was Wrong 4579 4580The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 4581 4582**Before (broken)**: 4583```php 4584? '#9b59b6' : ' . $colors['border'] . ') 4585// Extra quote and dot created syntax error 4586``` 4587 4588**After (fixed)**: 4589```php 4590? '#9b59b6' : $colors['border']) 4591// Clean ternary expression 4592``` 4593 4594### All Theme Cards Fixed 4595 4596- ✅ Purple Dream card 4597- ✅ Professional Blue card 4598- ✅ Pink Bling card 4599- ✅ Wiki Default card 4600 4601### Now Working 4602 4603**Theme selection page loads** ✓ 4604**All cards display properly** ✓ 4605**Template colors applied** ✓ 4606**No syntax errors** ✓ 4607 4608## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 4609 4610### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 4611- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 4612- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 4613- **Fixed:** Theme selection cards use template backgrounds 4614- **Fixed:** Week start options use template backgrounds 4615- **Result:** Perfect color mapping throughout admin! 4616 4617### Color Mapping Correction 4618 4619**Before (v5.0.7)**: 4620```php 4621bg: __background_site__ // Wrong - this is outer page bg 4622bg_alt: __background_alt__ 4623``` 4624 4625**After (v5.0.8)**: 4626```php 4627bg: __background__ // Correct - main content bg 4628bg_alt: __background_alt__ 4629``` 4630 4631### Why This Matters 4632 4633**Template color hierarchy**: 4634``` 4635__background_site__ → Outer page/site background 4636__background__ → Main content area (CORRECT for admin) 4637__background_alt__ → Sections/panels 4638__background_neu__ → Highlights 4639``` 4640 4641**Admin should use**: 4642- `__background__` for input fields, content areas 4643- `__background_alt__` for section boxes, panels 4644 4645### Themes Tab Fixed 4646 4647**Removed all hardcoded colors**: 4648```php 4649Before: '#ddd', '#fff', '#dee2e6' 4650After: $colors['border'], $colors['bg'], $colors['border'] 4651``` 4652 4653**Now themed**: 4654- ✅ Week start section background 4655- ✅ Week start option backgrounds 4656- ✅ Theme card backgrounds 4657- ✅ Theme card borders 4658- ✅ All borders throughout 4659 4660### Visual Result 4661 4662**Light Template**: 4663```ini 4664__background__ = "#ffffff" 4665__background_alt__ = "#e8e8e8" 4666``` 4667 4668**Admin Before (v5.0.7)**: 4669``` 4670Input fields: #f5f5f5 (site bg - wrong) 4671Sections: #e8e8e8 (alt bg - correct) 4672``` 4673 4674**Admin After (v5.0.8)**: 4675``` 4676Input fields: #ffffff (content bg - correct!) 4677Sections: #e8e8e8 (alt bg - correct!) 4678``` 4679 4680**Dark Template**: 4681```ini 4682__background__ = "#2d2d2d" 4683__background_alt__ = "#3a3a3a" 4684``` 4685 4686**Admin After (v5.0.8)**: 4687``` 4688Input fields: #2d2d2d (content bg - perfect!) 4689Sections: #3a3a3a (alt bg - perfect!) 4690``` 4691 4692### Complete Themes Tab 4693 4694**Week Start Options**: 4695``` 4696┌─────────────────────────┐ 4697│ Week Start Day │ ← bg_alt 4698│ ┌─────────┬───────────┐ │ 4699│ │ Monday │ Sunday │ │ ← bg (when not selected) 4700│ └─────────┴───────────┘ │ 4701└─────────────────────────┘ 4702``` 4703 4704**Theme Cards**: 4705``` 4706┌─────────────────────────┐ 4707│ Matrix Edition │ ← bg (when not selected) 4708│ Classic green theme │ border (when not selected) 4709└─────────────────────────┘ 4710 4711┌═════════════════════════┐ 4712│ Purple Dream │ ← rgba green tint (when selected) 4713│ Elegant purple theme │ #00cc07 border (when selected) 4714└═════════════════════════┘ 4715``` 4716 4717### Perfect Integration 4718 4719**All admin pages now**: 4720- Content areas: `__background__` ✓ 4721- Section boxes: `__background_alt__` ✓ 4722- Borders: `__border__` ✓ 4723- Text: `__text__` ✓ 4724 4725**Matches wiki perfectly**: 4726- Same white content areas 4727- Same gray section boxes 4728- Same border colors 4729- Same text colors 4730 4731### No More Issues 4732 4733**Fixed**: 4734- ❌ Site background on content areas → ✅ Content background 4735- ❌ Hardcoded white on themes tab → ✅ Template background 4736- ❌ Hardcoded borders (#ddd) → ✅ Template borders 4737 4738**Result**: 4739- Perfect color hierarchy ✓ 4740- Correct background levels ✓ 4741- Complete template integration ✓ 4742 4743## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 4744 4745### Fixed: All Admin Backgrounds Use Template Colors 4746- **Fixed:** All section backgrounds use `__background_alt__` 4747- **Fixed:** All content backgrounds use `__background__` 4748- **Fixed:** All borders use `__border__` 4749- **Fixed:** All text uses `__text__` 4750- **Result:** Complete admin template integration! 4751 4752### All Replacements 4753 4754**Backgrounds**: 4755```php 4756Before: background: #f9f9f9 4757After: background: ' . $colors['bg_alt'] . ' 4758 4759Before: background: #fff / background: white 4760After: background: ' . $colors['bg'] . ' 4761``` 4762 4763**Borders**: 4764```php 4765Before: border: 1px solid #ddd 4766Before: border: 1px solid #e0e0e0 4767Before: border: 1px solid #eee 4768After: border: 1px solid ' . $colors['border'] . ' 4769``` 4770 4771**Text**: 4772```php 4773Before: color: #333 4774Before: color: #666 4775After: color: ' . $colors['text'] . ' 4776``` 4777 4778### Complete Admin Coverage 4779 4780**All tabs now themed**: 4781- ✅ Manage Events tab 4782- ✅ Update Plugin tab 4783- ✅ Outlook Sync tab 4784- ✅ Themes tab 4785- ✅ Tab navigation 4786- ✅ All sections 4787- ✅ All inputs 4788- ✅ All borders 4789- ✅ All text 4790 4791### Visual Result 4792 4793**Light Template**: 4794``` 4795Admin Page: 4796┌──────────────────────────┐ 4797│ Tab Navigation │ ← Template borders 4798├──────────────────────────┤ 4799│ Section Headers │ ← bg_alt (light gray) 4800│ ┌──────────────────────┐ │ 4801│ │ Form Inputs │ │ ← bg (white) 4802│ │ Content Areas │ │ 4803│ └──────────────────────┘ │ 4804└──────────────────────────┘ 4805All template colors! ✓ 4806``` 4807 4808**Dark Template**: 4809``` 4810Admin Page: 4811┌──────────────────────────┐ 4812│ Tab Navigation │ ← Template borders 4813├──────────────────────────┤ 4814│ Section Headers │ ← bg_alt (dark gray) 4815│ ┌──────────────────────┐ │ 4816│ │ Form Inputs │ │ ← bg (darker) 4817│ │ Content Areas │ │ 4818│ └──────────────────────┘ │ 4819└──────────────────────────┘ 4820All template colors! ✓ 4821``` 4822 4823### Template Color Mapping 4824 4825**Used throughout admin**: 4826``` 4827__background_site__ → $colors['bg'] (main backgrounds) 4828__background_alt__ → $colors['bg_alt'] (section backgrounds) 4829__text__ → $colors['text'] (all text) 4830__border__ → $colors['border'] (all borders) 4831__link__ → $colors['link'] (links - future) 4832``` 4833 4834### Examples by Section 4835 4836**Manage Events**: 4837- Event list backgrounds: `bg_alt` 4838- Event item backgrounds: `bg` 4839- Borders: `border` 4840- Text: `text` 4841 4842**Update Plugin**: 4843- Section backgrounds: `bg_alt` 4844- Content areas: `bg` 4845- Borders: `border` 4846- Text: `text` 4847 4848**Outlook Sync**: 4849- Config sections: `bg_alt` 4850- Input fields: `bg` 4851- Borders: `border` 4852- Labels: `text` 4853 4854**Themes Tab**: 4855- Theme cards: `bg_alt` 4856- Preview areas: `bg` 4857- Borders: `border` 4858- Descriptions: `text` 4859 4860### Benefits 4861 4862**Seamless Integration**: 4863- Matches wiki admin area perfectly 4864- Same colors throughout wiki 4865- Professional appearance 4866- Consistent experience 4867 4868**Automatic Adaptation**: 4869- Light templates: Light admin 4870- Dark templates: Dark admin 4871- Custom templates: Uses custom colors 4872 4873**No White Boxes**: 4874- Every background themed 4875- Every border themed 4876- Every text themed 4877- Complete consistency 4878 4879### PERFECT HARMONY 4880 4881**Frontend (Calendar)**: 4882- Wiki theme uses style.ini ✓ 4883- Perfect template match ✓ 4884 4885**Backend (Admin)**: 4886- Reads same style.ini ✓ 4887- Perfect template match ✓ 4888 4889**Complete Unity**: 4890- Same colors everywhere ✓ 4891- Seamless experience ✓ 4892- Professional polish ✓ 4893 4894## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 4895 4896### Enhanced: Month/Year Header & Admin Pages Use Template Colors 4897- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 4898- **Added:** Admin pages read template's style.ini file 4899- **Added:** `getTemplateColors()` function in admin class 4900- **Fixed:** Tab navigation uses template text and border colors 4901- **Result:** Complete template integration everywhere! 4902 4903### Month/Year Header 4904 4905**Before**: 4906```php 4907color: __text__ // Same as primary text 4908``` 4909 4910**After (Wiki Theme)**: 4911```php 4912color: __text_neu__ // Dimmed text (subtle) 4913``` 4914 4915### Admin Pages Enhancement 4916 4917**New `getTemplateColors()` function**: 4918- Reads template's style.ini file 4919- Extracts color replacements 4920- Provides colors to all admin tabs 4921- Falls back to sensible defaults 4922 4923**Colors used**: 4924```php 4925bg: __background_site__ 4926bg_alt: __background_alt__ 4927text: __text__ 4928border: __border__ 4929link: __link__ 4930``` 4931 4932**Applied to**: 4933- Tab navigation borders 4934- Tab text colors 4935- All admin sections 4936- Ready for future enhancements 4937 4938### Visual Result 4939 4940**Calendar Header**: 4941``` 4942┌────────────────────┐ 4943│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 4944└────────────────────┘ 4945Subtle and elegant ✓ 4946``` 4947 4948**Admin Navigation**: 4949``` 4950 Manage Events | Update | ⚙️ Config | Themes 4951───────────────────────────────────────────────── 4952Active tab: Green (#00cc07) 4953Inactive tabs: Template text color 4954Border: Template border color 4955``` 4956 4957### Template Integration 4958 4959**Light Template**: 4960```ini 4961__text_neu__ = "#666666" 4962__border__ = "#cccccc" 4963``` 4964**Result**: 4965- Month/Year: Medium gray (subtle) 4966- Admin borders: Light gray 4967- Tab text: Dark gray 4968 4969**Dark Template**: 4970```ini 4971__text_neu__ = "#999999" 4972__border__ = "#555555" 4973``` 4974**Result**: 4975- Month/Year: Light gray (subtle) 4976- Admin borders: Medium gray 4977- Tab text: Bright gray 4978 4979### Benefits 4980 4981**Calendar Frontend**: 4982- Month/Year header more subtle 4983- Better visual hierarchy 4984- Less prominent, more elegant 4985 4986**Admin Backend**: 4987- Uses template colors 4988- Matches wiki admin area 4989- Consistent experience 4990- Professional appearance 4991 4992### Future-Ready 4993 4994The `getTemplateColors()` function is now available for: 4995- ✅ Tab navigation (implemented) 4996- Section backgrounds (ready) 4997- Button colors (ready) 4998- Input fields (ready) 4999- Success/error messages (ready) 5000 5001**Foundation laid for complete admin theming!** 5002 5003## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 5004 5005### Fixed: Add Event Bar & Section Headers Use Template Colors 5006- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 5007- **Fixed:** "Today" header uses `__text_neu__` 5008- **Fixed:** "Tomorrow" header uses `__text__` 5009- **Fixed:** "Important Events" header uses `__border__` 5010- **Result:** Perfect template color integration! 5011 5012### All Changes 5013 5014**Add Event Bar (Wiki Theme)**: 5015 5016**Before**: 5017```php 5018background: #3498db // Generic blue 5019``` 5020 5021**After**: 5022```php 5023background: __background_alt__ // Template alternate bg 5024text: __text__ // Template text color 5025hover: __background_neu__ // Template neutral bg 5026``` 5027 5028**Section Headers (Wiki Theme)**: 5029 5030**Before**: 5031```php 5032Today: #ff9800 // Orange 5033Tomorrow: #4caf50 // Green 5034Important Events: #9b59b6 // Purple 5035``` 5036 5037**After**: 5038```php 5039Today: __text_neu__ // Template dimmed text 5040Tomorrow: __text__ // Template primary text 5041Important Events: __border__ // Template border color 5042``` 5043 5044### Visual Result 5045 5046**Wiki Default Theme**: 5047``` 5048Add Event Bar: 5049┌────────────────┐ 5050│ + ADD EVENT │ ← Template alt background 5051└────────────────┘ 5052 5053Sections: 5054━━━━━━━━━━━━━━━━ 5055Today ← Dimmed text color (__text_neu__) 5056• Team Meeting 5057 5058Tomorrow ← Primary text color (__text__) 5059• Code Review 5060 5061Important Events ← Border color (__border__) 5062• Project Deadline 5063``` 5064 5065### Example with DokuWiki Default Template 5066 5067**Template colors**: 5068```ini 5069__background_alt__ = "#e8e8e8" 5070__text__ = "#333333" 5071__text_neu__ = "#666666" 5072__border__ = "#cccccc" 5073``` 5074 5075**Calendar result**: 5076``` 5077Add Event Bar: Light gray (#e8e8e8) 5078Today header: Medium gray (#666666) 5079Tomorrow header: Dark gray (#333333) 5080Important Events header: Border gray (#cccccc) 5081``` 5082 5083### Example with Dark Template 5084 5085**Template colors**: 5086```ini 5087__background_alt__ = "#2d2d2d" 5088__text__ = "#e0e0e0" 5089__text_neu__ = "#999999" 5090__border__ = "#555555" 5091``` 5092 5093**Calendar result**: 5094``` 5095Add Event Bar: Dark gray (#2d2d2d) 5096Today header: Light gray (#999999) 5097Tomorrow header: Bright gray (#e0e0e0) 5098Important Events header: Medium gray (#555555) 5099``` 5100 5101### Perfect Harmony 5102 5103All sidebar elements now use template colors: 5104- ✅ Add Event bar background 5105- ✅ Add Event bar text 5106- ✅ Today section header 5107- ✅ Tomorrow section header 5108- ✅ Important Events header 5109- ✅ Calendar cells 5110- ✅ Grid backgrounds 5111- ✅ All borders 5112 5113**Complete template integration!** 5114 5115## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 5116 5117### Fixed: Calendar Cells Use Correct Template Color 5118- **Fixed:** Calendar cells now use `__background__` from template 5119- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 5120- **Result:** Calendar cells match main content area background! 5121 5122### Color Mapping Update 5123 5124**Before (v5.0.3)**: 5125```php 5126cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 5127``` 5128 5129**After (v5.0.4)**: 5130```php 5131cell_bg: __background__ // Correct - main content background 5132``` 5133 5134### Template Color Usage 5135 5136**Wiki Default theme now uses**: 5137``` 5138__background_site__ → Overall page background 5139__background__ → Calendar cells (main content bg) 5140__background_alt__ → Grid background, headers 5141__background_neu__ → Today cell highlight 5142__text__ → Primary text 5143__text_neu__ → Dimmed text 5144__link__ → Links, bright text 5145__border__ → All borders 5146``` 5147 5148### Visual Result 5149 5150**Before**: 5151``` 5152Calendar with template colors: 5153┌─────┬─────┬─────┐ 5154│ Mon │ Tue │ Wed │ 5155├─────┼─────┼─────┤ 5156│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 5157└─────┴─────┴─────┘ 5158``` 5159 5160**After**: 5161``` 5162Calendar with template colors: 5163┌─────┬─────┬─────┐ 5164│ Mon │ Tue │ Wed │ 5165├─────┼─────┼─────┤ 5166│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 5167└─────┴─────┴─────┘ 5168``` 5169 5170### Example Template Colors 5171 5172**DokuWiki Default**: 5173```ini 5174__background__ = "#ffffff" 5175``` 5176**Result**: White calendar cells ✓ 5177 5178**Dark Template**: 5179```ini 5180__background__ = "#2d2d2d" 5181``` 5182**Result**: Dark calendar cells ✓ 5183 5184**Custom Template**: 5185```ini 5186__background__ = "#f9f9f9" 5187``` 5188**Result**: Custom color cells ✓ 5189 5190### Perfect Matching 5191 5192Calendar cells now match: 5193- ✅ Main content area background 5194- ✅ Article/page background 5195- ✅ Content box background 5196- ✅ Same as wiki text background 5197 5198**Seamless integration!** 5199 5200## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 5201 5202### Enhanced: Wiki Default Theme Reads Template Colors 5203- **Added:** Function to read colors from DokuWiki template's style.ini file 5204- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 5205- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 5206- **Uses:** Actual template colors instead of CSS variables 5207- **Result:** Perfect color matching with any DokuWiki template! 5208 5209### How It Works 5210 5211**New Function: `getWikiTemplateColors()`** 5212 52131. **Detects** current DokuWiki template name 52142. **Reads** the template's `style.ini` file 52153. **Parses** color replacements section 52164. **Maps** template colors to calendar theme 52175. **Falls back** to CSS variables if file not found 5218 5219### Colors Read from style.ini 5220 5221**Template color replacements used**: 5222```php 5223__background_site__ → bg, header_bg 5224__background_alt__ → grid_bg, cell_today_bg 5225__background_neu__ → cell_bg 5226__text__ → text_primary 5227__text_neu__ → text_dim 5228__link__ → text_bright 5229__border__ → border, grid_border 5230``` 5231 5232### Example style.ini Mapping 5233 5234**Template style.ini**: 5235```ini 5236[replacements] 5237__background_site__ = "#f8f9fa" 5238__background_alt__ = "#e9ecef" 5239__background_neu__ = "#dee2e6" 5240__text__ = "#212529" 5241__text_neu__ = "#6c757d" 5242__link__ = "#0d6efd" 5243__border__ = "#ced4da" 5244``` 5245 5246**Calendar theme result**: 5247```php 5248bg: #f8f9fa 5249header_bg: #e9ecef 5250grid_bg: #e9ecef 5251cell_bg: #dee2e6 5252text_primary: #212529 5253text_dim: #6c757d 5254text_bright: #0d6efd 5255border: #ced4da 5256grid_border: #ced4da 5257``` 5258 5259### Before vs After 5260 5261**Before (v5.0.2)**: 5262``` 5263Wiki Default theme used: 5264- CSS variables (var(--__background__, #fff)) 5265- Required browser CSS variable support 5266- Fallback to generic colors 5267``` 5268 5269**After (v5.0.3)**: 5270``` 5271Wiki Default theme uses: 5272- Actual colors from template's style.ini 5273- Exact template color values 5274- No CSS variable dependency 5275- Perfect color matching! 5276``` 5277 5278### File Location Priority 5279 5280Checks in order: 52811. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 52822. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 52833. Falls back to CSS variables if neither found 5284 5285### Benefits 5286 5287**More accurate colors**: 5288- Uses exact template color values ✓ 5289- No CSS variable interpolation ✓ 5290- Consistent across all browsers ✓ 5291 5292**Better compatibility**: 5293- Works with older browsers ✓ 5294- No CSS variable support needed ✓ 5295- Direct color values ✓ 5296 5297**Perfect matching**: 5298- Reads template's actual colors ✓ 5299- Same colors as wiki pages ✓ 5300- Seamless integration ✓ 5301 5302### Template Examples 5303 5304**DokuWiki Default Template**: 5305``` 5306Reads: lib/tpl/dokuwiki/style.ini 5307Gets: Default DokuWiki colors 5308Result: Perfect classic DokuWiki look 5309``` 5310 5311**Bootstrap Template**: 5312``` 5313Reads: lib/tpl/bootstrap3/style.ini 5314Gets: Bootstrap color scheme 5315Result: Perfect Bootstrap integration 5316``` 5317 5318**Custom Template**: 5319``` 5320Reads: conf/tpl/mycustom/style.ini 5321Gets: Your custom colors 5322Result: Perfect custom theme match 5323``` 5324 5325### Fallback Chain 5326 53271. **Try** reading style.ini from template 53282. **If found** → Use exact colors from file 53293. **If not found** → Use CSS variables 53304. **If no CSS vars** → Use fallback colors 5331 5332**Always works, always matches!** ✓ 5333 5334## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 5335 5336### Fixed: Wiki Default Theme Day Panel Colors 5337- **Fixed:** Day popup panel now uses DokuWiki CSS variables 5338- **Fixed:** Panel background matches wiki theme 5339- **Fixed:** Panel header matches wiki theme 5340- **Fixed:** Border colors use wiki theme 5341- **Fixed:** Text colors use wiki theme 5342- **Result:** Perfect integration with DokuWiki templates! 5343 5344### All Changes 5345 5346**Day Panel Colors (Wiki Default)**: 5347 5348**Before**: 5349```php 5350background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 5351header: #3498db // Blue (wrong!) 5352``` 5353 5354**After**: 5355```php 5356background: var(--__background__, #fff) 5357header: var(--__background_alt__, #e8e8e8) 5358header_text: var(--__text__, #333) 5359border: var(--__border__, #ccc) 5360shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 5361``` 5362 5363**Event Colors (Wiki Default)**: 5364```php 5365event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 5366border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 5367bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 5368``` 5369 5370### Before vs After 5371 5372**Before (v5.0.1)**: 5373``` 5374Wiki Default - Click Week Cell: 5375┌────────────────┐ 5376│ Monday, Feb 8 │ ← Blue header (wrong) 5377├────────────────┤ 5378│ Team Meeting │ ← Dark gray bg (wrong) 5379│ 2:00 PM │ 5380└────────────────┘ 5381Doesn't match wiki theme 5382``` 5383 5384**After (v5.0.2)**: 5385``` 5386Wiki Default - Click Week Cell: 5387 5388Light Wiki Theme: 5389┌────────────────┐ 5390│ Monday, Feb 8 │ ← Light gray header ✓ 5391├────────────────┤ 5392│ Team Meeting │ ← White bg ✓ 5393│ 2:00 PM │ Dark text ✓ 5394└────────────────┘ 5395 5396Dark Wiki Theme: 5397┌────────────────┐ 5398│ Monday, Feb 8 │ ← Dark header ✓ 5399├────────────────┤ 5400│ Team Meeting │ ← Dark bg ✓ 5401│ 2:00 PM │ Light text ✓ 5402└────────────────┘ 5403 5404Perfectly matches wiki! 5405``` 5406 5407### CSS Variables Used 5408 5409**Wiki Default theme now uses**: 5410- `--__background__` - Main background (panel body) 5411- `--__background_alt__` - Alternate bg (panel header, events) 5412- `--__text__` - Text color (header text) 5413- `--__border__` - Border color (panel border, event borders) 5414 5415**With fallbacks**: 5416```css 5417var(--__background__, #fff) /* white fallback */ 5418var(--__background_alt__, #e8e8e8) /* light gray fallback */ 5419var(--__text__, #333) /* dark text fallback */ 5420var(--__border__, #ccc) /* gray border fallback */ 5421``` 5422 5423### Perfect Adaptation 5424 5425**Light Templates**: 5426- Light panel backgrounds ✓ 5427- Dark text ✓ 5428- Subtle borders ✓ 5429- Clean appearance ✓ 5430 5431**Dark Templates**: 5432- Dark panel backgrounds ✓ 5433- Light text ✓ 5434- Visible borders ✓ 5435- Perfect contrast ✓ 5436 5437**Custom Templates**: 5438- Uses template's CSS variables ✓ 5439- Automatic adaptation ✓ 5440- Seamless integration ✓ 5441 5442### Now Truly Adaptive 5443 5444Wiki Default theme now properly uses DokuWiki CSS variables for: 5445- ✅ Calendar grid 5446- ✅ Sidebar widget 5447- ✅ Event list 5448- ✅ **Day panel** ← v5.0.2! 5449- ✅ All backgrounds 5450- ✅ All text 5451- ✅ All borders 5452 5453**Complete wiki integration!** 5454 5455## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 5456 5457### Enhanced: Time Conflict Tooltips Now Themed 5458- **Fixed:** Conflict tooltips now match calendar theme 5459- **Added:** Theme-aware background, border, text colors 5460- **Added:** Theme-aware shadow effects 5461- **Result:** Complete visual consistency! 5462 5463### Tooltip Theming 5464 5465**Now uses theme colors for**: 5466- Background: Theme background color 5467- Border: Theme border color 5468- Header text: Theme primary text color 5469- Item text: Theme dim text color 5470- Shadow: Theme shadow color 5471 5472### Before vs After 5473 5474**Before (v5.0.0)**: 5475``` 5476Hover ⚠️ badge: 5477┌─────────────────┐ 5478│ ⚠️ Time Conflicts│ ← Default colors 5479│ • Event A │ 5480│ • Event B │ 5481└─────────────────┘ 5482``` 5483 5484**After (v5.0.1)**: 5485``` 5486Matrix Theme: 5487┌─────────────────┐ 5488│ ⚠️ Time Conflicts│ ← Green header 5489│ • Event A │ ← Green text 5490│ • Event B │ Dark green bg 5491└─────────────────┘ 5492 5493Purple Theme: 5494┌─────────────────┐ 5495│ ⚠️ Time Conflicts│ ← Purple header 5496│ • Event A │ ← Purple text 5497│ • Event B │ Dark purple bg 5498└─────────────────┘ 5499 5500Professional Theme: 5501┌─────────────────┐ 5502│ ⚠️ Time Conflicts│ ← Blue header 5503│ • Event A │ ← Dark text 5504│ • Event B │ Light bg 5505└─────────────────┘ 5506 5507Pink Theme: 5508┌─────────────────┐ 5509│ ⚠️ Time Conflicts│ ← Pink header ✨ 5510│ • Event A │ ← Pink text 5511│ • Event B │ Dark pink bg 5512└─────────────────┘ 5513 5514Wiki Default: 5515┌─────────────────┐ 5516│ ⚠️ Time Conflicts│ ← Adapts to wiki 5517│ • Event A │ ← Wiki colors 5518│ • Event B │ 5519└─────────────────┘ 5520``` 5521 5522### Now 100% Complete 5523 5524**Every tooltip themed**: 5525- ✅ Conflict tooltips 5526- ✅ All other tooltips (if any) 5527- ✅ Perfect consistency 5528 5529**Absolute perfection!** ✨ 5530 5531## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 5532 5533### Major Milestone: Version 5.0 5534 5535This is a major release representing the completion of comprehensive theming across the entire calendar plugin. Every visual element has been carefully themed for consistency and beauty. 5536 5537### Complete Feature Set 5538 5539**5 Beautiful Themes**: 5540- Matrix Edition (Green with glow) 5541- Purple Dream (Elegant purple) 5542- Professional Blue (Clean and modern) 5543- Pink Bling (Maximum sparkle) 5544- Wiki Default (Auto-adapts to your DokuWiki theme) 5545 5546**100% Theme Coverage**: 5547- ✅ Calendar grid and cells 5548- ✅ Event boxes and borders 5549- ✅ Sidebar widget 5550- ✅ Event list panel 5551- ✅ Search functionality 5552- ✅ Edit/Add dialogs (complete) 5553- ✅ Day popup dialogs 5554- ✅ Month picker 5555- ✅ All text (primary, dim, bright) 5556- ✅ All buttons 5557- ✅ All inputs and forms 5558- ✅ All checkboxes 5559- ✅ All borders 5560- ✅ All badges and labels 5561- ✅ Event highlight effects 5562 5563**Perfect Visual Consistency**: 5564- No white pixels anywhere 5565- No unthemed elements 5566- No default colors 5567- Complete visual unity 5568 5569### Major Improvements in v5.0 5570 55711. **Complete Dialog Theming** (v4.8.5-4.8.7) 5572 - Edit event dialog fully themed 5573 - Day popup dialog fully themed 5574 - All form inputs themed 5575 - All checkboxes themed 5576 - All buttons themed 5577 55782. **Event Box Border Perfection** (v4.8.6) 5579 - All 4 borders themed (top, right, bottom, left) 5580 - Sidebar event dividers themed 5581 - Past Events toggle border themed 5582 55833. **Checkbox Field Borders** (v4.9.0) 5584 - Repeating Event section border themed 5585 - Task checkbox section border themed 5586 55874. **Wiki Default Theme** (v4.10.0) 5588 - New 5th theme 5589 - Uses DokuWiki CSS variables 5590 - Auto-adapts to any wiki template 5591 - Perfect for seamless integration 5592 55935. **Clean Text Appearance** (v4.11.0) 5594 - Removed text glow from Matrix 5595 - Removed text glow from Purple 5596 - Removed text glow from Professional 5597 - Removed text glow from Wiki Default 5598 - Kept text glow on Pink Bling only 5599 56006. **Event Highlight Effects** (v4.12.0-4.12.1) 5601 - Theme-aware highlight glow 5602 - Click event bar → event glows 5603 - 3-second themed glow effect 5604 - Smooth animations 5605 5606### See RELEASE_NOTES.md for Complete Details 5607 5608For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 5609 5610## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 5611 5612### Fixed: Event Highlight Now Working 5613- **Fixed:** Used setProperty() to properly apply !important styles 5614- **Added:** Console logging for debugging 5615- **Fixed:** Proper style application with important flag 5616- **Result:** Highlight glow now works correctly! 5617 5618### Technical Fix 5619 5620**Before (not working)**: 5621```javascript 5622eventItem.style.background = color + ' !important'; // Doesn't work 5623``` 5624 5625**After (working)**: 5626```javascript 5627eventItem.style.setProperty('background', color, 'important'); // Works! 5628``` 5629 5630### Added Debug Logging 5631 5632Console now shows: 5633- "Highlighting event: [calId] [eventId] [date]" 5634- "Found event item: [element]" 5635- "Theme: [theme name]" 5636- "Highlight colors: [bg] [shadow]" 5637- "Applied highlight styles" 5638- "Removing highlight" (after 3 seconds) 5639 5640### Now Working 5641 5642Click any event bar → Event glows with theme colors ✓ 5643 5644## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 5645 5646### ✨ Enhanced: Event Click Highlight Now Theme-Aware 5647- **Fixed:** Restored event highlight glow when clicking calendar bars 5648- **Improved:** Highlight now matches each theme's colors 5649- **Added:** Stronger glow effect for better visibility 5650- **Duration:** 3 seconds with smooth fade 5651- **Result:** Beautiful themed highlights for all themes! 5652 5653### How It Works 5654 5655When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 5656 5657**Matrix Theme**: 5658```javascript 5659Background: Darker green (#1a3d1a) 5660Glow: Double green glow (0 0 20px + 0 0 40px) 5661Color: rgba(0, 204, 7, 0.8) 5662``` 5663 5664**Purple Theme**: 5665```javascript 5666Background: Darker purple (#3d2b4d) 5667Glow: Double purple glow 5668Color: rgba(155, 89, 182, 0.8) 5669``` 5670 5671**Professional Theme**: 5672```javascript 5673Background: Light blue (#e3f2fd) 5674Glow: Single blue glow 5675Color: rgba(74, 144, 226, 0.4) 5676``` 5677 5678**Pink Theme**: 5679```javascript 5680Background: Darker pink (#3d2030) 5681Glow: Double pink glow ✨ 5682Color: rgba(255, 20, 147, 0.8) 5683``` 5684 5685**Wiki Theme**: 5686```javascript 5687Background: var(--__background_neu__) 5688Glow: Blue glow (adapts to wiki) 5689Color: rgba(43, 115, 183, 0.4) 5690``` 5691 5692### Visual Examples 5693 5694**Matrix - Click Event**: 5695``` 5696Calendar: 5697┌─────────────┐ 5698│ 2:00 PM │ ← Click this bar 5699└─────────────┘ 5700 5701Event List: 5702╔═════════════════════╗ 5703║ Team Meeting ║ ← GLOWS GREEN 5704║ 2:00 PM ║ for 3 seconds 5705╚═════════════════════╝ 5706 ↑↑↑ Strong green glow ↑↑↑ 5707``` 5708 5709**Purple - Click Event**: 5710``` 5711Calendar: 5712┌─────────────┐ 5713│ 4:00 PM │ ← Click 5714└─────────────┘ 5715 5716Event List: 5717╔═════════════════════╗ 5718║ Code Review ║ ← GLOWS PURPLE 5719║ 4:00 PM ║ for 3 seconds 5720╚═════════════════════╝ 5721 ↑↑↑ Strong purple glow ↑↑↑ 5722``` 5723 5724**Pink - Click Event**: 5725``` 5726Calendar: 5727┌─────────────┐ 5728│ 1:00 PM │ ← Click 5729└─────────────┘ 5730 5731Event List: 5732╔═════════════════════╗ 5733║ Lunch Date ║ ← GLOWS PINK 5734║ 1:00 PM ✨ ║ for 3 seconds 5735╚═════════════════════╝ 5736 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 5737``` 5738 5739### Glow Specifications 5740 5741**Matrix**: 5742- Background: Dark green 5743- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 5744- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 5745- Effect: Strong green pulse 5746 5747**Purple**: 5748- Background: Dark purple 5749- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 5750- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 5751- Effect: Strong purple pulse 5752 5753**Professional**: 5754- Background: Light blue 5755- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 5756- Effect: Subtle blue glow 5757 5758**Pink**: 5759- Background: Dark pink 5760- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 5761- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 5762- Effect: MAXIMUM SPARKLE ✨ 5763 5764**Wiki**: 5765- Background: Theme neutral color 5766- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 5767- Effect: Adapts to wiki theme 5768 5769### User Experience 5770 5771**Click event bar** → Event highlights with themed glow 5772**Auto-scroll** → Event scrolls into view smoothly 5773**3 second glow** → Fade out after 3 seconds 5774**Smooth transition** → 0.3s ease-in-out 5775 5776### Perfect for Finding Events 5777 5778**Large event lists**: Quickly locate the clicked event ✓ 5779**Visual feedback**: Know which event you clicked ✓ 5780**Theme consistency**: Matches your chosen theme ✓ 5781**Smooth animation**: Professional appearance ✓ 5782 5783### All Themes Covered 5784 5785- ✅ Matrix: Green glow 5786- ✅ Purple: Purple glow 5787- ✅ Professional: Blue glow 5788- ✅ Pink: Maximum pink sparkle 5789- ✅ Wiki: Adaptive glow 5790 5791**Click any event bar and watch it glow!** ✨ 5792 5793## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 5794 5795### Changed: Text Glow Now Pink-Only 5796- **Removed:** Text shadow/glow from Matrix theme 5797- **Removed:** Text shadow/glow from Purple theme 5798- **Removed:** Text shadow/glow from Professional theme (already had none) 5799- **Removed:** Text shadow/glow from Wiki Default theme 5800- **Kept:** Text shadow/glow ONLY on Pink Bling theme 5801- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 5802 5803### All Changes 5804 5805**Before (Matrix, Purple)**: 5806```css 5807text-shadow: 0 0 2px $text_color; /* Glow effect */ 5808``` 5809 5810**After (Matrix, Purple, Professional, Wiki)**: 5811```css 5812text-shadow: none; /* Clean, no glow */ 5813``` 5814 5815**Pink Bling (unchanged)**: 5816```css 5817text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 5818``` 5819 5820### Text Shadow Removed From 5821 5822**Sidebar day numbers**: No glow ✓ 5823**Event titles**: No glow ✓ 5824**Event dates**: No glow ✓ 5825**Add Event button**: No glow ✓ 5826**Day popup events**: No glow ✓ 5827 5828### Before vs After 5829 5830**BEFORE (Matrix)**: 5831``` 5832Event Title ✨ ← Glowing green text 58332:00 PM ✨ ← Glowing text 5834``` 5835 5836**AFTER (Matrix)**: 5837``` 5838Event Title ← Clean green text 58392:00 PM ← Clean text 5840``` 5841 5842**Pink Bling (Still Glows)**: 5843``` 5844Event Title ✨ ← Still glowing! 58452:00 PM ✨ ← Maximum sparkle! 5846``` 5847 5848### Theme Appearances 5849 5850** Matrix Edition**: 5851- Clean green text 5852- No glow effects 5853- Professional appearance 5854- Still has border glow 5855 5856** Purple Dream**: 5857- Clean purple text 5858- No glow effects 5859- Elegant appearance 5860- Still has border glow 5861 5862** Professional Blue**: 5863- Clean text (unchanged) 5864- No glow effects 5865- Modern appearance 5866 5867** Pink Bling**: 5868- Glowing pink text ✨ 5869- Maximum glow effects 5870- Sparkle everywhere! 5871- All the bling! 5872 5873** Wiki Default**: 5874- Clean text 5875- No glow effects 5876- Matches wiki theme 5877 5878### Glow Effects Remaining 5879 5880**Border/box glow**: Still present on all themes ✓ 5881**Pink text glow**: Only on Pink Bling ✓ 5882**Shadow effects**: Still on buttons/boxes ✓ 5883 5884**Only TEXT glow removed from non-pink themes!** 5885 5886### Result 5887 5888**Cleaner, more professional look** for: 5889- Matrix ✓ 5890- Purple ✓ 5891- Professional ✓ 5892- Wiki Default ✓ 5893 5894**Maximum sparkle** for: 5895- Pink Bling ✨✓ 5896 5897**Best of both worlds!** 5898 5899## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 5900 5901### New: Wiki Default Theme 5902- **Added:** 5th theme that automatically matches your DokuWiki template 5903- **Uses:** CSS variables from your wiki theme 5904- **Adapts:** Automatically works with light and dark themes 5905- **Perfect:** Seamless integration with any DokuWiki template 5906 5907### How It Works 5908 5909**Wiki theme uses DokuWiki CSS variables**: 5910```css 5911bg: var(--__background_site__, #f5f5f5) 5912border: var(--__border__, #ccc) 5913text_primary: var(--__text__, #333) 5914text_bright: var(--__link__, #2b73b7) 5915text_dim: var(--__text_neu__, #666) 5916cell_bg: var(--__background__, #fff) 5917grid_border: var(--__border__, #ccc) 5918``` 5919 5920**With fallbacks for older DokuWiki versions**: 5921- If CSS variables exist → Use them ✓ 5922- If not available → Use fallback values ✓ 5923 5924### All 5 Themes 5925 5926**1. Matrix Edition** (Default) 5927- Dark green with neon glow 5928- Matrix-style effects 5929- Original theme 5930 5931**2. Purple Dream** 5932- Rich purple with violet accents 5933- Elegant and sophisticated 5934- Soft glow effects 5935 5936**3. Professional Blue** 5937- Clean blue and grey 5938- Modern professional 5939- No glow effects 5940 5941**4. Pink Bling** 5942- Glamorous hot pink 5943- Maximum sparkle ✨ 5944- Hearts and diamonds 5945 5946**5. Wiki Default** ← NEW! 5947- Matches your wiki template 5948- Auto-adapts to light/dark 5949- Perfect integration 5950 5951### Examples 5952 5953**Light Wiki Template**: 5954``` 5955Wiki Default theme shows: 5956- Light backgrounds (#f5f5f5) 5957- Dark text (#333) 5958- Light inputs (#fff) 5959- Gray borders (#ccc) 5960 5961Matches perfectly! ✓ 5962``` 5963 5964**Dark Wiki Template**: 5965``` 5966Wiki Default theme shows: 5967- Dark backgrounds (from template) 5968- Light text (from template) 5969- Dark inputs (from template) 5970- Dark borders (from template) 5971 5972Matches perfectly! ✓ 5973``` 5974 5975**Bootstrap Template**: 5976``` 5977Uses Bootstrap's colors 5978Matches perfectly! ✓ 5979``` 5980 5981**Material Template**: 5982``` 5983Uses Material's colors 5984Matches perfectly! ✓ 5985``` 5986 5987### CSS Variables Used 5988 5989**DokuWiki provides**: 5990- `--__background_site__`: Page background 5991- `--__background_alt__`: Section backgrounds 5992- `--__background__`: Content backgrounds 5993- `--__text__`: Primary text color 5994- `--__link__`: Link color 5995- `--__text_neu__`: Dimmed text 5996- `--__border__`: Border color 5997- `--__background_neu__`: Neutral background 5998 5999**All with fallbacks**: 6000```css 6001var(--__background_site__, #f5f5f5) 6002/* Falls back to light gray if variable doesn't exist */ 6003``` 6004 6005### Perfect for Every Template 6006 6007**Custom templates**: Automatically adapts ✓ 6008**Light themes**: Perfect match ✓ 6009**Dark themes**: Perfect match ✓ 6010**Any DokuWiki version**: Works with fallbacks ✓ 6011 6012### Complete Theme Collection 6013 6014Now with **5 gorgeous themes**: 6015- 3 dark themes (Matrix, Purple, Pink) 6016- 1 light theme (Professional) 6017- 1 adaptive theme (Wiki Default) ← NEW! 6018 6019**Something for everyone!** 6020 6021## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 6022 6023### Fixed: Checkbox Field Borders Themed 6024- **Fixed:** Added border-color to checkbox field divs 6025- **Fixed:** Repeating Event section border 6026- **Fixed:** Task checkbox section border 6027- **Result:** No white borders around checkboxes! 6028 6029### Changes 6030 6031**Checkbox Field Border Styling**: 6032 6033**Before**: 6034```html 6035<div class="form-field-checkbox" 6036 style="background: $bg !important;"> 6037<!-- Border shows white ✗ --> 6038``` 6039 6040**After**: 6041```php 6042<div class="form-field-checkbox" 6043 style="background: $bg !important; 6044 border-color: $grid_border !important;"> 6045<!-- Border themed ✓ --> 6046``` 6047 6048### Before vs After 6049 6050**BEFORE (v4.8.8)**: 6051``` 6052Edit Dialog: 6053┌──────────────────┐ 6054│ ☑ Repeating ║│ ← White border ✗ 6055└──────────────────┘ 6056┌──────────────────┐ 6057│ ☑ Task checkbox ║│ ← White border ✗ 6058└──────────────────┘ 6059``` 6060 6061**AFTER (v4.9.0)**: 6062``` 6063Matrix Edit Dialog: 6064┌──────────────────┐ 6065│ ☑ Repeating │ ← Green border ✓ 6066└──────────────────┘ 6067┌──────────────────┐ 6068│ ☑ Task checkbox │ ← Green border ✓ 6069└──────────────────┘ 6070``` 6071 6072### ABSOLUTE PERFECTION ACHIEVED 6073 6074**Every element themed**: 6075- ✅ All inputs 6076- ✅ All labels 6077- ✅ All sections 6078- ✅ **Checkbox field borders** ← v4.9.0! 6079- ✅ All buttons 6080- ✅ All checkboxes 6081- ✅ No white anywhere 6082 6083**100% COMPLETE!** ✨ 6084 6085## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 6086 6087### Fixed: Checkbox Field Borders Themed 6088- **Fixed:** Added border-color to checkbox field divs 6089- **Fixed:** Repeating Event section border 6090- **Fixed:** Task checkbox section border 6091- **Result:** No white borders around checkboxes! 6092 6093### Fixed: Admin Sections Respect Wiki Theme 6094- **Fixed:** All admin backgrounds use CSS variables 6095- **Fixed:** Text colors use wiki text color 6096- **Fixed:** Borders use wiki border color 6097- **Result:** Admin matches wiki theme perfectly! 6098 6099### All Changes 6100 6101**1. Checkbox Field Border Styling**: 6102 6103**Before**: 6104```html 6105<div class="form-field-checkbox" 6106 style="background: $bg !important;"> 6107<!-- Border shows white ✗ --> 6108``` 6109 6110**After**: 6111```php 6112<div class="form-field-checkbox" 6113 style="background: $bg !important; 6114 border-color: $grid_border !important;"> 6115<!-- Border themed ✓ --> 6116``` 6117 6118**2. Admin CSS Variables**: 6119 6120**Added CSS variables for wiki theme compatibility**: 6121```css 6122.calendar-admin-wrapper { 6123 background: var(--__background_site__, #f5f5f5); 6124 color: var(--__text__, #333); 6125} 6126.calendar-admin-section { 6127 background: var(--__background_alt__, #fafafa); 6128} 6129.calendar-admin-input { 6130 background: var(--__background__, #fff); 6131 color: var(--__text__, #333); 6132} 6133``` 6134 6135**Replaced hardcoded colors**: 6136```php 6137// Before: 6138background: #f9f9f9 6139background: white 6140color: #333 6141border: 1px solid #ddd 6142 6143// After: 6144background: var(--__background_alt__, #f9f9f9) 6145background: var(--__background__, #fff) 6146color: var(--__text__, #333) 6147border: 1px solid var(--__border__, #ddd) 6148``` 6149 6150### Before vs After 6151 6152**BEFORE (v4.8.8)**: 6153``` 6154Edit Dialog: 6155┌──────────────────┐ 6156│ ☑ Repeating ║│ ← White border ✗ 6157└──────────────────┘ 6158┌──────────────────┐ 6159│ ☑ Task checkbox ║│ ← White border ✗ 6160└──────────────────┘ 6161 6162Admin Page (Dark Wiki Theme): 6163┌──────────────────┐ 6164│ Light sections │ ← White boxes ✗ 6165│ Light inputs │ ← Doesn't match ✗ 6166└──────────────────┘ 6167``` 6168 6169**AFTER (v4.8.9)**: 6170``` 6171Matrix Edit Dialog: 6172┌──────────────────┐ 6173│ ☑ Repeating │ ← Green border ✓ 6174└──────────────────┘ 6175┌──────────────────┐ 6176│ ☑ Task checkbox │ ← Green border ✓ 6177└──────────────────┘ 6178 6179Admin (Dark Wiki Theme): 6180┌──────────────────┐ 6181│ Dark sections │ ← Matches wiki ✓ 6182│ Dark inputs │ ← Perfect match ✓ 6183└──────────────────┘ 6184``` 6185 6186### Admin Theme Examples 6187 6188**Light Wiki Theme**: 6189``` 6190Admin page backgrounds: Light 6191Section boxes: Light gray 6192Inputs: White 6193Borders: Gray 6194Text: Dark 6195 6196Perfect match! ✓ 6197``` 6198 6199**Dark Wiki Theme**: 6200``` 6201Admin page backgrounds: Dark 6202Section boxes: Darker gray 6203Inputs: Dark 6204Borders: Dark gray 6205Text: Light 6206 6207Perfect match! ✓ 6208``` 6209 6210**DokuWiki Default**: 6211``` 6212Uses wiki's CSS variables 6213Automatically adapts 6214Always matches! ✓ 6215``` 6216 6217### Complete Coverage 6218 6219**Edit Dialog**: 6220- ✅ All inputs themed 6221- ✅ All labels themed 6222- ✅ All sections themed 6223- ✅ **Checkbox borders** ← v4.8.9! 6224- ✅ All buttons themed 6225- ✅ No white anywhere 6226 6227**Admin Interface**: 6228- ✅ **Tab navigation** ← v4.8.9! 6229- ✅ **Section boxes** ← v4.8.9! 6230- ✅ **Input fields** ← v4.8.9! 6231- ✅ **Text colors** ← v4.8.9! 6232- ✅ **Borders** ← v4.8.9! 6233- ✅ All tabs (Manage, Update, Outlook, Themes) 6234 6235### CSS Variables Used 6236 6237**DokuWiki provides these**: 6238- `--__background_site__`: Page background 6239- `--__background_alt__`: Alternate background 6240- `--__background__`: Primary background (inputs) 6241- `--__text__`: Text color 6242- `--__border__`: Border color 6243 6244**Fallbacks provided for older DokuWiki**: 6245```css 6246var(--__background_site__, #f5f5f5) 6247var(--__background_alt__, #fafafa) 6248var(--__background__, #fff) 6249var(--__text__, #333) 6250var(--__border__, #ddd) 6251``` 6252 6253### Perfect Adaptation 6254 6255**Admin now adapts to ANY wiki theme**: 6256- Light themes → Light admin ✓ 6257- Dark themes → Dark admin ✓ 6258- Custom themes → Matches perfectly ✓ 6259- No hardcoded colors ✓ 6260 6261**Calendar themes still work**: 6262- Matrix, Purple, Professional, Pink ✓ 6263- Independent from wiki theme ✓ 6264- Admin respects wiki ✓ 6265- Calendar respects calendar theme ✓ 6266 6267### FINAL PERFECTION 6268 6269**Frontend (Calendar)**: 6270- Complete theming ✓ 6271- 4 beautiful themes ✓ 6272- Every pixel themed ✓ 6273 6274**Backend (Admin)**: 6275- Respects wiki theme ✓ 6276- Works with any theme ✓ 6277- Perfect compatibility ✓ 6278 6279**ABSOLUTELY EVERYTHING THEMED!** ✨ 6280 6281## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 6282 6283### Fixed: Task Checkboxes Now Fully Themed 6284- **Fixed:** Added background-color and border inline 6285- **Fixed:** Both PHP and JavaScript versions 6286- **Result:** No white checkboxes! 6287 6288### Fixed: Past Events Toggle Border 6289- **Fixed:** Added !important to border styling 6290- **Fixed:** Explicit top and bottom borders 6291- **Result:** No white line under toggle! 6292 6293### Fixed: Form Field Section Backgrounds 6294- **Fixed:** All form-field and form-row-group backgrounds 6295- **Fixed:** Every section in edit dialog 6296- **Result:** No white sections anywhere! 6297 6298### All Changes 6299 6300**1. Task Checkbox Styling**: 6301 6302**Before**: 6303```php 6304style="accent-color: $border !important;" 6305<!-- Only accent, background still white ✗ --> 6306``` 6307 6308**After**: 6309```php 6310style="accent-color: $border !important; 6311 background-color: $cell_bg !important; 6312 border: 2px solid $grid_border !important;" 6313<!-- Full theming ✓ --> 6314``` 6315 6316**2. Past Events Toggle Border**: 6317 6318**Before**: 6319```php 6320style="border-color: $grid_border;" 6321<!-- No !important, CSS overrides ✗ --> 6322``` 6323 6324**After**: 6325```php 6326style="border-color: $grid_border !important; 6327 border-top: 1px solid $grid_border !important; 6328 border-bottom: 1px solid $grid_border !important;" 6329<!-- Cannot be overridden ✓ --> 6330``` 6331 6332**3. Form Field Backgrounds**: 6333 6334**Before**: 6335```html 6336<div class="form-field"> 6337<div class="form-row-group"> 6338<!-- No background, shows white ✗ --> 6339``` 6340 6341**After**: 6342```php 6343<div class="form-field" style="background: $bg !important;"> 6344<div class="form-row-group" style="background: $bg !important;"> 6345<!-- Fully themed ✓ --> 6346``` 6347 6348### Before vs After 6349 6350**BEFORE (v4.8.7)**: 6351``` 6352Event: 6353□ Task checkbox ← White checkbox ✗ 6354 6355Past Events 6356▶ Past Events (3) ← White line below ✗ 6357───────────────── 6358 6359Edit Dialog: 6360┌──────────────┐ 6361│ Form fields │ ← White sections ✗ 6362└──────────────┘ 6363``` 6364 6365**AFTER (v4.8.8)**: 6366``` 6367Matrix Event: 6368☑ Task checkbox ← Green checkbox ✓ 6369 6370Past Events 6371▶ Past Events (3) ← Green border ✓ 6372───────────────── 6373 6374Matrix Edit Dialog: 6375┌──────────────┐ 6376│ Form fields │ ← Dark green ✓ 6377└──────────────┘ 6378``` 6379 6380### Complete Examples 6381 6382**Matrix Theme**: 6383``` 6384Task Checkbox: 6385☑ Checked → Green checkmark, green bg 6386☐ Unchecked → Green border, dark green bg ✓ 6387 6388Past Events Toggle: 6389▶ Past Events (3) 6390─────────────────── Green border ✓ 6391 6392Edit Dialog: 6393All sections dark green ✓ 6394No white anywhere ✓ 6395``` 6396 6397**Purple Theme**: 6398``` 6399Task Checkbox: 6400☑ Checked → Purple checkmark, purple bg 6401☐ Unchecked → Purple border, dark purple bg ✓ 6402 6403Past Events Toggle: 6404▶ Past Events (3) 6405─────────────────── Purple border ✓ 6406 6407Edit Dialog: 6408All sections dark purple ✓ 6409``` 6410 6411**Professional Theme**: 6412``` 6413Task Checkbox: 6414☑ Checked → Blue checkmark, white bg 6415☐ Unchecked → Gray border, white bg ✓ 6416 6417Past Events Toggle: 6418▶ Past Events (3) 6419─────────────────── Gray border ✓ 6420 6421Edit Dialog: 6422All sections light ✓ 6423``` 6424 6425**Pink Theme**: 6426``` 6427Task Checkbox: 6428☑ Checked → Pink checkmark, pink bg ✨ 6429☐ Unchecked → Pink border, dark pink bg ✓ 6430 6431Past Events Toggle: 6432▶ Past Events (3) 6433─────────────────── Pink border 6434 6435Edit Dialog: 6436All sections dark pink ✓ 6437``` 6438 6439### Checkbox Visual 6440 6441**Matrix - Unchecked**: 6442``` 6443┌─────┐ 6444│ │ ← Dark green background 6445│ │ Green border 6446└─────┘ 6447``` 6448 6449**Matrix - Checked**: 6450``` 6451┌─────┐ 6452│ ✓ │ ← Dark green background 6453│ │ Green checkmark 6454└─────┘ 6455``` 6456 6457### Past Events Border 6458 6459**Before**: 6460``` 6461▶ Past Events (3) 6462─────────────────── White line ✗ 6463``` 6464 6465**After**: 6466``` 6467▶ Past Events (3) 6468─────────────────── Green line ✓ (Matrix) 6469 Purple line ✓ (Purple) 6470 Gray line ✓ (Professional) 6471 Pink line ✓ (Pink) 6472``` 6473 6474### Form Field Coverage 6475 6476**All sections themed**: 6477- ✅ Title field 6478- ✅ Namespace field 6479- ✅ Description field 6480- ✅ **Date row** ← v4.8.8! 6481- ✅ **Checkbox sections** ← v4.8.8! 6482- ✅ **Recurring options** ← v4.8.8! 6483- ✅ **Time row** ← v4.8.8! 6484- ✅ **Color row** ← v4.8.8! 6485- ✅ Button footer 6486 6487**Every div has background!** ✓ 6488 6489### ABSOLUTE PERFECTION 6490 6491**Not a single white pixel**: 6492- ✅ No white checkboxes 6493- ✅ No white borders 6494- ✅ No white backgrounds 6495- ✅ No white sections 6496- ✅ No white lines 6497- ✅ No white anything 6498 6499**100% PERFECT THEMING!** ✨ 6500 6501## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 6502 6503### Fixed: Checkbox Section Backgrounds Themed 6504- **Fixed:** Repeating Event section background 6505- **Fixed:** Task checkbox section background 6506- **Result:** No white backgrounds in dialog! 6507 6508### Fixed: Unchecked Task Checkboxes Themed 6509- **Fixed:** Added CSS for checkbox backgrounds 6510- **Fixed:** Unchecked boxes show theme colors 6511- **Result:** No white checkboxes! 6512 6513### Fixed: Day Popup Dialog Fully Themed 6514- **Fixed:** Popup container, header, body themed 6515- **Fixed:** Event items in popup themed 6516- **Fixed:** Add Event button themed 6517- **Fixed:** Footer section themed 6518- **Result:** Perfect popup theming! 6519 6520### All Changes 6521 6522**1. Checkbox Section Backgrounds**: 6523 6524**Before**: 6525```html 6526<div class="form-field-checkbox"> 6527<!-- White background ✗ --> 6528``` 6529 6530**After**: 6531```php 6532<div class="form-field-checkbox" 6533 style="background: $bg !important;"> 6534<!-- Themed ✓ --> 6535``` 6536 6537**2. Checkbox Background CSS**: 6538 6539**Added to style block**: 6540```css 6541.task-checkbox { 6542 background-color: $cell_bg !important; 6543 border: 2px solid $grid_border !important; 6544} 6545``` 6546 6547**3. Day Popup Theming**: 6548 6549**Container**: 6550```javascript 6551style="background: $bg !important; 6552 border: 2px solid $border !important; 6553 box-shadow: 0 0 20px $shadow !important;" 6554``` 6555 6556**Header**: 6557```javascript 6558style="background: $header_bg !important; 6559 color: $text_primary !important; 6560 border-bottom: 1px solid $border !important;" 6561``` 6562 6563**Footer**: 6564```javascript 6565style="background: $bg !important; 6566 border-top: 1px solid $grid_border !important;" 6567``` 6568 6569**Add Event Button**: 6570```javascript 6571style="background: $border !important; 6572 color: $bg !important; 6573 border-color: $border !important;" 6574``` 6575 6576**Event Items**: 6577```javascript 6578style="background: $cell_bg !important; 6579 border: 1px solid $grid_border !important;" 6580``` 6581 6582### Before vs After 6583 6584**BEFORE (v4.8.6)**: 6585``` 6586Edit Dialog: 6587┌──────────────────┐ 6588│ ☑ Repeating Event│ ← White background ✗ 6589├──────────────────┤ 6590│ ☑ Task checkbox │ ← White background ✗ 6591└──────────────────┘ 6592 6593Day Popup: 6594┌──────────────────┐ 6595│ Monday, Feb 8 │ ← White ✗ 6596├──────────────────┤ 6597│ Team Meeting │ ← White ✗ 6598│ 2:00 PM │ 6599├──────────────────┤ 6600│ [+ Add Event] │ ← White ✗ 6601└──────────────────┘ 6602 6603Task checkbox: ☐ ← White ✗ 6604``` 6605 6606**AFTER (v4.8.7)**: 6607``` 6608Edit Dialog (Matrix): 6609┌──────────────────┐ 6610│ ☑ Repeating Event│ ← Dark green ✓ 6611├──────────────────┤ 6612│ ☑ Task checkbox │ ← Dark green ✓ 6613└──────────────────┘ 6614 6615Day Popup (Matrix): 6616┌──────────────────┐ 6617│ Monday, Feb 8 │ ← Dark green ✓ 6618├──────────────────┤ 6619│ Team Meeting │ ← Dark green ✓ 6620│ 2:00 PM │ 6621├──────────────────┤ 6622│ [+ Add Event] │ ← Green button ✓ 6623└──────────────────┘ 6624 6625Task checkbox: ☑ ← Green ✓ 6626``` 6627 6628### Complete Examples 6629 6630**Matrix Dialog**: 6631``` 6632┌──────────────────────────┐ 6633│ ✏️ Edit Event │ 6634├──────────────────────────┤ 6635│ Title: [_________] │ 6636│ Date: [__________] │ 6637│ │ 6638│ ☑ Repeating Event │ ← Dark green bg 6639├──────────────────────────┤ 6640│ ☑ Task checkbox │ ← Dark green bg 6641├──────────────────────────┤ 6642│ [Cancel] [ Save] │ 6643└──────────────────────────┘ 6644 6645All sections themed! ✓ 6646``` 6647 6648**Matrix Day Popup**: 6649``` 6650┌──────────────────────────┐ 6651│ Monday, February 8, 2026 │ ← Green header 6652├──────────────────────────┤ 6653│ ┌──────────────────────┐ │ 6654│ │ Team Meeting │ │ ← Dark green 6655│ │ 2:00 PM │ │ 6656│ └──────────────────────┘ │ 6657│ ┌──────────────────────┐ │ 6658│ │ Code Review │ │ ← Dark green 6659│ │ 4:00 PM │ │ 6660│ └──────────────────────┘ │ 6661├──────────────────────────┤ 6662│ [+ Add Event] │ ← Green button 6663└──────────────────────────┘ 6664``` 6665 6666**Purple Day Popup**: 6667``` 6668┌──────────────────────────┐ 6669│ Monday, February 8, 2026 │ ← Purple header 6670├──────────────────────────┤ 6671│ ┌──────────────────────┐ │ 6672│ │ Team Meeting │ │ ← Dark purple 6673│ │ 2:00 PM │ │ 6674│ └──────────────────────┘ │ 6675├──────────────────────────┤ 6676│ [+ Add Event] │ ← Purple button 6677└──────────────────────────┘ 6678``` 6679 6680**Professional Day Popup**: 6681``` 6682┌──────────────────────────┐ 6683│ Monday, February 8, 2026 │ ← Light header 6684├──────────────────────────┤ 6685│ ┌──────────────────────┐ │ 6686│ │ Team Meeting │ │ ← White 6687│ │ 2:00 PM │ │ 6688│ └──────────────────────┘ │ 6689├──────────────────────────┤ 6690│ [+ Add Event] │ ← Blue button 6691└──────────────────────────┘ 6692``` 6693 6694**Pink Day Popup**: 6695``` 6696┌──────────────────────────┐ 6697│ Monday, February 8, 2026 │ ← Pink header ✨ 6698├──────────────────────────┤ 6699│ ┌──────────────────────┐ │ 6700│ │ Team Meeting │ │ ← Dark pink 6701│ │ 2:00 PM │ │ 6702│ └──────────────────────┘ │ 6703├──────────────────────────┤ 6704│ [+ Add Event] │ ← Pink button 6705└──────────────────────────┘ 6706``` 6707 6708### Checkbox Theming 6709 6710**Unchecked boxes now themed**: 6711``` 6712Matrix: 6713☐ → Dark green bg, green border ✓ 6714 6715Purple: 6716☐ → Dark purple bg, purple border ✓ 6717 6718Professional: 6719☐ → White bg, gray border ✓ 6720 6721Pink: 6722☐ → Dark pink bg, pink border ✓ 6723``` 6724 6725### Complete Coverage 6726 6727**Edit Dialog - All Sections**: 6728- ✅ Header 6729- ✅ All inputs 6730- ✅ All labels 6731- ✅ **Checkbox sections** ← v4.8.7! 6732- ✅ Recurring options 6733- ✅ Button footer 6734- ✅ All checkboxes (checked & unchecked) 6735 6736**Day Popup - All Elements**: 6737- ✅ **Popup container** ← v4.8.7! 6738- ✅ **Header** ← v4.8.7! 6739- ✅ **Body** ← v4.8.7! 6740- ✅ **Event items** ← v4.8.7! 6741- ✅ **Namespace badges** ← v4.8.7! 6742- ✅ **Footer** ← v4.8.7! 6743- ✅ **Add Event button** ← v4.8.7! 6744- ✅ **No events message** ← v4.8.7! 6745 6746**Absolutely every dialog element themed!** ✨ 6747 6748### Perfect Theming Achievement 6749 6750**Every UI component in entire plugin**: 6751- ✅ Calendar grid 6752- ✅ Sidebar widget 6753- ✅ Event list 6754- ✅ Search bar 6755- ✅ Event boxes 6756- ✅ Edit dialog (complete) 6757- ✅ **Day popup** ← v4.8.7! 6758- ✅ Month picker 6759- ✅ All text 6760- ✅ All buttons 6761- ✅ All inputs 6762- ✅ **All checkboxes** ← v4.8.7! 6763- ✅ All borders 6764- ✅ All badges 6765- ✅ All backgrounds 6766 6767**NO WHITE ANYWHERE!** 6768 6769**100% COMPLETE THEMING ACHIEVED!** ✨ 6770 6771## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 6772 6773### Fixed: Dialog Checkbox Sections Themed 6774- **Fixed:** Recurring options section background themed 6775- **Fixed:** Section has themed border accent 6776- **Result:** No white sections in dialog! 6777 6778### Fixed: Dialog Button Section Themed 6779- **Fixed:** Button area background themed 6780- **Fixed:** Top border separator themed 6781- **Result:** Complete dialog theming! 6782 6783### Fixed: Event Box Borders Themed 6784- **Fixed:** Top, right, bottom borders now themed 6785- **Fixed:** Left border remains event color 6786- **Result:** Perfect event boxes! 6787 6788### All Changes 6789 6790**1. Recurring Options Section**: 6791 6792**Before**: 6793```html 6794<div class="recurring-options" style="display:none;"> 6795<!-- White background ✗ --> 6796``` 6797 6798**After**: 6799```php 6800<div class="recurring-options" 6801 style="display:none; 6802 background: $bg !important; 6803 padding: 8px; 6804 border-left: 2px solid $border; 6805 margin-left: 4px;"> 6806<!-- Themed with accent border ✓ --> 6807``` 6808 6809**2. Dialog Actions Section**: 6810 6811**Before**: 6812```html 6813<div class="dialog-actions-sleek"> 6814<!-- White background ✗ --> 6815``` 6816 6817**After**: 6818```php 6819<div class="dialog-actions-sleek" 6820 style="background: $bg !important; 6821 border-top: 1px solid $grid_border !important;"> 6822<!-- Themed with separator ✓ --> 6823``` 6824 6825**3. Event Box Borders**: 6826 6827**Before**: 6828```php 6829border-left-color: $event_color; 6830<!-- Only left border colored ✗ --> 6831``` 6832 6833**After**: 6834```php 6835border-left-color: $event_color; 6836border-top: 1px solid $grid_border !important; 6837border-right: 1px solid $grid_border !important; 6838border-bottom: 1px solid $grid_border !important; 6839<!-- All borders themed! ✓ --> 6840``` 6841 6842### Before vs After 6843 6844**BEFORE (v4.8.5)**: 6845``` 6846Dialog: 6847┌────────────────┐ 6848│ ☑ Repeating │ 6849├────────────────┤ ← White section ✗ 6850│ Repeat: Daily │ 6851│ Until: [____] │ 6852├────────────────┤ 6853│ [Cancel] [Save]│ ← White footer ✗ 6854└────────────────┘ 6855 6856Event Box: 6857┌────────────┐ 6858│Team Meeting│ ← White borders ✗ 6859│2:00 PM │ 6860└────────────┘ 6861``` 6862 6863**AFTER (v4.8.6)**: 6864``` 6865Matrix Dialog: 6866┌────────────────┐ 6867│ ☑ Repeating │ 6868├────────────────┤ ← Dark green ✓ 6869│ Repeat: Daily │ Green accent border 6870│ Until: [____] │ 6871├────────────────┤ 6872│ [Cancel] [Save]│ ← Dark green ✓ 6873└────────────────┘ 6874 6875Matrix Event Box: 6876┌────────────┐ 6877│Team Meeting│ ← Green borders ✓ 6878│2:00 PM │ 6879└────────────┘ 6880``` 6881 6882### Dialog Section Examples 6883 6884**Matrix Theme**: 6885``` 6886┌──────────────────────────┐ 6887│ ✏️ Edit Event │ 6888├──────────────────────────┤ 6889│ ☑ Repeating Event │ 6890├║─────────────────────────┤ Green accent 6891│║ Repeat Every: Daily │ Dark green bg 6892│║ Repeat Until: [_____] │ 6893└──────────────────────────┘ 6894 [Cancel] [ Save] ← Dark green bg 6895──────────────────────────── Green border 6896``` 6897 6898**Purple Theme**: 6899``` 6900┌──────────────────────────┐ 6901│ ☑ Repeating Event │ 6902├║─────────────────────────┤ Purple accent 6903│║ Repeat options... │ Dark purple bg 6904└──────────────────────────┘ 6905 [Cancel] [ Save] ← Dark purple bg 6906──────────────────────────── Purple border 6907``` 6908 6909**Professional Theme**: 6910``` 6911┌──────────────────────────┐ 6912│ ☑ Repeating Event │ 6913├║─────────────────────────┤ Blue accent 6914│║ Repeat options... │ Light bg 6915└──────────────────────────┘ 6916 [Cancel] [ Save] ← Light bg 6917──────────────────────────── Gray border 6918``` 6919 6920**Pink Theme**: 6921``` 6922┌──────────────────────────┐ 6923│ ☑ Repeating Event ✨ │ 6924├║─────────────────────────┤ Pink accent 6925│║ Repeat options... │ Dark pink bg 6926└──────────────────────────┘ 6927 [Cancel] [ Save] ← Dark pink bg 6928──────────────────────────── Pink border 6929``` 6930 6931### Event Box Border Visual 6932 6933**Before (v4.8.5)**: 6934``` 6935Left border only: 6936█ Team Meeting 6937█ 2:00 PM 6938█ [Edit] [Delete] 6939 6940Only event color on left ✗ 6941White on other 3 sides ✗ 6942``` 6943 6944**After (v4.8.6)**: 6945``` 6946All borders themed: 6947┌─────────────┐ 6948█Team Meeting │ ← Top: themed 6949█2:00 PM │ ← Right: themed 6950█[Edit][Del] │ ← Bottom: themed 6951└─────────────┘ 6952 6953Left: Event color ✓ 6954Other 3: Theme grid_border ✓ 6955``` 6956 6957### Matrix Event Box: 6958``` 6959┌─────────────┐ Green border 6960│Team Meeting │ 6961│2:00 PM │ 6962└─────────────┘ Green border 6963↑ 6964Green left bar 6965``` 6966 6967### Purple Event Box: 6968``` 6969┌─────────────┐ Purple border 6970│Team Meeting │ 6971│2:00 PM │ 6972└─────────────┘ Purple border 6973↑ 6974Purple left bar 6975``` 6976 6977### Professional Event Box: 6978``` 6979┌─────────────┐ Gray border 6980│Team Meeting │ 6981│2:00 PM │ 6982└─────────────┘ Gray border 6983↑ 6984Event color left bar 6985``` 6986 6987### Complete Dialog Coverage 6988 6989**All sections themed**: 6990- ✅ Dialog header 6991- ✅ Form inputs 6992- ✅ Checkbox labels 6993- ✅ **Recurring options** ← v4.8.6! 6994- ✅ **Button section** ← v4.8.6! 6995- ✅ All labels 6996- ✅ All buttons 6997 6998**No white sections!** ✓ 6999 7000### Complete Event Box Coverage 7001 7002**All borders themed**: 7003- ✅ Left border (event color) 7004- ✅ **Top border** ← v4.8.6! 7005- ✅ **Right border** ← v4.8.6! 7006- ✅ **Bottom border** ← v4.8.6! 7007- ✅ Background 7008- ✅ Text 7009 7010**Perfect box outline!** ✓ 7011 7012### Visual Perfection 7013 7014**Matrix theme event list**: 7015``` 7016┌─────────────┐ 7017│Team Meeting │ ← Green box 7018│2:00 PM │ 7019└─────────────┘ 7020┌─────────────┐ 7021│Code Review │ ← Green box 7022│4:00 PM │ 7023└─────────────┘ 7024 7025All borders green! ✓ 7026``` 7027 7028**ABSOLUTE PERFECT THEMING!** ✨ 7029 7030## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 7031 7032### Fixed: Event Dialog Fully Themed 7033- **Fixed:** Dialog background, header, inputs all themed 7034- **Fixed:** All labels, checkboxes, selects themed 7035- **Fixed:** Save and Cancel buttons themed 7036- **Result:** Dialog matches theme perfectly! 7037 7038### Fixed: Sidebar Event Borders Properly Themed 7039- **Fixed:** Event divider borders use grid_border color 7040- **Fixed:** Clean, subtle themed dividers 7041- **Result:** No more white borders in sidebar! 7042 7043### All Changes 7044 7045**1. Event Dialog Theming**: 7046 7047**Dialog container**: 7048```php 7049background: $themeStyles['bg'] !important; 7050border: 2px solid $themeStyles['border'] !important; 7051box-shadow: 0 0 20px $shadow !important; 7052``` 7053 7054**Dialog header**: 7055```php 7056background: $themeStyles['header_bg'] !important; 7057color: $themeStyles['text_primary'] !important; 7058border-bottom: 1px solid $border !important; 7059``` 7060 7061**All form inputs** (text, date, select, textarea): 7062```php 7063background: $themeStyles['cell_bg'] !important; 7064color: $themeStyles['text_primary'] !important; 7065border-color: $themeStyles['grid_border'] !important; 7066``` 7067 7068**All labels**: 7069```php 7070color: $themeStyles['text_primary'] !important; 7071``` 7072 7073**Checkboxes**: 7074```php 7075accent-color: $themeStyles['border'] !important; 7076``` 7077 7078**Buttons**: 7079```php 7080// Cancel button: 7081background: $cell_bg !important; 7082color: $text_primary !important; 7083 7084// Save button: 7085background: $border !important; 7086color: $bg !important; (or white for professional) 7087``` 7088 7089**2. Sidebar Event Borders**: 7090 7091**Before**: 7092```php 7093border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 7094``` 7095 7096**After**: 7097```php 7098borderColor = $themeStyles['grid_border']; 7099border-bottom: 1px solid $borderColor !important; 7100``` 7101 7102### Before vs After 7103 7104**BEFORE (v4.8.4)**: 7105``` 7106Event Dialog: 7107┌────────────────┐ 7108│ Add Event │ ← White background ✗ 7109│ Title: [_____] │ ← White inputs ✗ 7110│ Date: [_____] │ 7111│ [Cancel] [Save]│ ← Default buttons ✗ 7112└────────────────┘ 7113 7114Sidebar Events: 7115Event 1 ──────── ← White border ✗ 7116Event 2 ──────── ← White border ✗ 7117``` 7118 7119**AFTER (v4.8.5)**: 7120``` 7121Event Dialog (Matrix): 7122┌────────────────┐ 7123│ Add Event │ ← Dark green background ✓ 7124│ Title: [_____] │ ← Dark green inputs ✓ 7125│ Date: [_____] │ ← Green text ✓ 7126│ [Cancel] [Save]│ ← Themed buttons ✓ 7127└────────────────┘ 7128 7129Sidebar Events (Matrix): 7130Event 1 ──────── ← Green border ✓ 7131Event 2 ──────── ← Green border ✓ 7132``` 7133 7134### Dialog Examples by Theme 7135 7136**Matrix Dialog**: 7137``` 7138┌──────────────────────────┐ 7139│ ✏️ Edit Event │ ← Dark green header 7140├──────────────────────────┤ 7141│ Title │ ← Green labels 7142│ [Team Meeting________] │ ← Dark green input 7143│ │ 7144│ Start Date │ 7145│ [2026-02-08__] │ ← Dark green input 7146│ │ 7147│ Start Time │ 7148│ [2:00 PM ▼] │ ← Green select 7149│ │ 7150│ ☑ Repeating Event │ ← Green checkbox 7151│ │ 7152│ [Cancel] [ Save] │ ← Themed buttons 7153└──────────────────────────┘ 7154 7155Everything green! ✓ 7156``` 7157 7158**Purple Dialog**: 7159``` 7160┌──────────────────────────┐ 7161│ ✏️ Edit Event │ ← Dark purple header 7162├──────────────────────────┤ 7163│ [Inputs_______________] │ ← Dark purple inputs 7164│ ☑ Checkboxes │ ← Purple accent 7165│ [Cancel] [ Save] │ ← Purple buttons 7166└──────────────────────────┘ 7167``` 7168 7169**Professional Dialog**: 7170``` 7171┌──────────────────────────┐ 7172│ ✏️ Edit Event │ ← Light gradient header 7173├──────────────────────────┤ 7174│ [Inputs_______________] │ ← White inputs 7175│ ☑ Checkboxes │ ← Blue accent 7176│ [Cancel] [ Save] │ ← Blue save button 7177└──────────────────────────┘ 7178``` 7179 7180**Pink Dialog**: 7181``` 7182┌──────────────────────────┐ 7183│ ✏️ Edit Event │ ← Dark pink header ✨ 7184├──────────────────────────┤ 7185│ [Inputs_______________] │ ← Dark pink inputs 7186│ ☑ Checkboxes │ ← Pink accent 7187│ [Cancel] [ Save] │ ← Pink buttons 7188└──────────────────────────┘ 7189``` 7190 7191### Complete Dialog Element Coverage 7192 7193**All form elements themed**: 7194- ✅ Dialog container 7195- ✅ Dialog header 7196- ✅ Close button (×) 7197- ✅ Title input 7198- ✅ Namespace search 7199- ✅ Namespace dropdown 7200- ✅ Description textarea 7201- ✅ Start date input 7202- ✅ End date input 7203- ✅ Recurring checkbox 7204- ✅ Recurrence type select 7205- ✅ Recurrence end date 7206- ✅ Start time select 7207- ✅ End time select 7208- ✅ Color select 7209- ✅ Custom color picker 7210- ✅ Task checkbox 7211- ✅ All labels 7212- ✅ Cancel button 7213- ✅ Save button 7214 7215**Every single dialog element themed!** 7216 7217### Sidebar Border Example 7218 7219**Matrix Sidebar**: 7220``` 7221┌────────────────┐ 7222│ Today │ ← Green section header 7223├────────────────┤ 7224│ Team Meeting │ 7225│ 2:00 PM │ 7226├────────────────┤ ← Green border (grid_border) 7227│ Code Review │ 7228│ 4:00 PM │ 7229├────────────────┤ ← Green border 7230│ Stand-up │ 7231│ All day │ 7232└────────────────┘ 7233 7234Subtle green dividers! ✓ 7235``` 7236 7237### Complete Achievement 7238 7239**Every UI element themed**: 7240- ✅ Calendar 7241- ✅ Sidebar widget 7242- ✅ Event list 7243- ✅ Search bar 7244- ✅ **Event dialog** ← v4.8.5! 7245- ✅ Month picker 7246- ✅ **Sidebar dividers** ← v4.8.5! 7247- ✅ All text 7248- ✅ All inputs 7249- ✅ All buttons 7250- ✅ All borders 7251- ✅ All checkboxes 7252 7253**ABSOLUTE COMPLETE THEMING!** ✨ 7254 7255## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 7256 7257### Fixed: Professional Theme Background Consistency 7258- **Fixed:** Container and event backgrounds now match sidebar 7259- **Fixed:** Lighter, cleaner appearance 7260- **Fixed:** Better contrast and readability 7261- **Result:** Professional theme looks cohesive! 7262 7263### The Problem 7264 7265**v4.8.3 Professional theme**: 7266``` 7267Sidebar: Light background (#f5f7fa) 7268Calendar: Medium background (#e8ecf1) ← Didn't match! 7269Events: Light background (#f5f7fa) 7270 7271Inconsistent! ✗ 7272``` 7273 7274### The Fix 7275 7276**Updated Professional theme colors for consistency**: 7277 7278```php 7279// Before: 7280'bg' => '#e8ecf1', // Medium gray-blue 7281'cell_bg' => '#f5f7fa', // Very light 7282'grid_bg' => '#d5dbe3', // Medium-dark 7283 7284// After: 7285'bg' => '#f5f7fa', // Very light (matches sidebar) 7286'cell_bg' => '#ffffff', // Pure white (clean) 7287'grid_bg' => '#e8ecf1', // Subtle contrast 7288'grid_border' => '#d0d7de', // Softer borders 7289``` 7290 7291### Before vs After 7292 7293**BEFORE (v4.8.3)**: 7294``` 7295Professional Theme: 7296┌────────────────┐ 7297│ Calendar │ ← Medium gray (#e8ecf1) 7298│ ┌────────────┐ │ 7299│ │ Event │ │ ← Light (#f5f7fa) 7300│ └────────────┘ │ 7301└────────────────┘ 7302 7303Sidebar: 7304┌────────────────┐ 7305│ Widget │ ← Light (#f5f7fa) 7306└────────────────┘ 7307 7308Backgrounds don't match! ✗ 7309``` 7310 7311**AFTER (v4.8.4)**: 7312``` 7313Professional Theme: 7314┌────────────────┐ 7315│ Calendar │ ← Light (#f5f7fa) 7316│ ┌────────────┐ │ 7317│ │ Event │ │ ← White (#ffffff) 7318│ └────────────┘ │ 7319└────────────────┘ 7320 7321Sidebar: 7322┌────────────────┐ 7323│ Widget │ ← Light (#f5f7fa) 7324└────────────────┘ 7325 7326Perfect match! ✓ 7327``` 7328 7329### New Professional Theme Colors 7330 7331**Backgrounds**: 7332- Container: `#f5f7fa` (light blue-gray) 7333- Events: `#ffffff` (pure white) 7334- Grid: `#e8ecf1` (subtle contrast) 7335 7336**Text**: 7337- Primary: `#2c3e50` (dark blue-gray) 7338- Bright: `#4a90e2` (blue accent) 7339- Dim: `#7f8c8d` (medium gray) 7340 7341**Borders**: 7342- Main: `#4a90e2` (blue) 7343- Grid: `#d0d7de` (soft gray) 7344 7345**Header**: 7346- Gradient: `#ffffff` → `#f5f7fa` 7347 7348### Visual Example 7349 7350**Professional Theme Now**: 7351``` 7352┌─────────────────────────────┐ 7353│ February 2026 │ ← White to light gradient 7354├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 7355│S│M│T│W│T│F│S│ │ ← Light background 7356├─┼─┼─┼─┼─┼─┼─┤ │ 7357│ │ │1│2│3│4│5│ Event List │ ← White events 7358│ │ │ │ │ │ │ │ ┌───────────┐ │ 7359│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 7360└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 7361 7362Clean, professional look! ✓ 7363``` 7364 7365### Comparison with Other Themes 7366 7367**Matrix** (dark): 7368- Container: #242424 (dark green) 7369- Events: #242424 (dark green) 7370- Consistent dark theme ✓ 7371 7372**Purple** (dark): 7373- Container: #1a0d14 (dark purple) 7374- Events: #2a2030 (dark purple) 7375- Consistent dark theme ✓ 7376 7377**Professional** (light): 7378- Container: #f5f7fa (light blue) 7379- Events: #ffffff (white) 7380- Consistent light theme ✓ 7381 7382**Pink** (dark): 7383- Container: #1a0d14 (dark pink) 7384- Events: #1a0d14 (dark pink) 7385- Consistent dark theme ✓ 7386 7387**All themes now consistent!** 7388 7389### Better Contrast 7390 7391**Professional theme improvements**: 7392 7393**Readability**: 7394- Dark text (#2c3e50) on white/light backgrounds ✓ 7395- Excellent contrast ratio ✓ 7396- Easy on the eyes ✓ 7397 7398**Visual hierarchy**: 7399- White events pop against light container ✓ 7400- Blue accents stand out ✓ 7401- Clean, modern look ✓ 7402 7403**Professional appearance**: 7404- Lighter = more corporate/business feel ✓ 7405- Clean whites = premium quality ✓ 7406- Subtle grays = sophisticated ✓ 7407 7408### Complete Theme Consistency 7409 7410**All themes now have matching backgrounds**: 7411 7412**Matrix**: 7413- Sidebar & Calendar both dark green ✓ 7414 7415**Purple**: 7416- Sidebar & Calendar both dark purple ✓ 7417 7418**Professional**: 7419- Sidebar & Calendar both light ✓ (v4.8.4!) 7420 7421**Pink**: 7422- Sidebar & Calendar both dark pink ✓ 7423 7424**Perfect visual unity across all views!** ✨ 7425 7426## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 7427 7428### Fixed: Bold Text in Descriptions Themed 7429- **Fixed:** **Bold text** now uses theme primary color 7430- **Fixed:** Both `**text**` and `__text__` syntax themed 7431- **Result:** Bold text matches theme! 7432 7433### Fixed: Search Bar Fully Themed 7434- **Fixed:** Search input has !important on all styles 7435- **Fixed:** Icon and placeholder text themed 7436- **Result:** Search bar perfectly themed! 7437 7438### Fixed: Sidebar Event Boxes Themed 7439- **Fixed:** Event borders in sidebar now use theme grid_border color 7440- **Fixed:** Borders have !important flag 7441- **Result:** Sidebar boxes match theme! 7442 7443### All Changes 7444 7445**1. Bold Text Styling**: 7446 7447**Before**: 7448```html 7449<strong>Bold text</strong> ← Default black 7450``` 7451 7452**After**: 7453```php 7454<strong style="color: $text_primary !important; font-weight:bold;"> 7455 Bold text 7456</strong> 7457 7458Matrix: Green bold ✓ 7459Purple: Lavender bold ✓ 7460Professional: Dark bold ✓ 7461Pink: Pink bold ✓ 7462``` 7463 7464**2. Search Bar**: 7465 7466**Before**: 7467```php 7468style="background: $bg; color: $text;" 7469Could be overridden by CSS 7470``` 7471 7472**After**: 7473```php 7474style="background: $bg !important; 7475 color: $text_primary !important; 7476 border-color: $grid_border !important;" 7477 7478Cannot be overridden! ✓ 7479``` 7480 7481**3. Sidebar Event Boxes**: 7482 7483**Before**: 7484```php 7485$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 7486``` 7487 7488**After**: 7489```php 7490$borderColor = $themeStyles['grid_border']; // From theme 7491border-bottom: 1px solid $borderColor !important; 7492 7493Matrix: Green borders ✓ 7494Purple: Purple borders ✓ 7495Professional: Gray borders ✓ 7496Pink: Pink borders ✓ 7497``` 7498 7499### Before vs After 7500 7501**BEFORE (v4.8.2)**: 7502``` 7503Event description: 7504"Please review **Q1 Goals** carefully" 7505 ↑ 7506 Black bold ✗ 7507 7508Search bar: 7509[ Search...] ← Gray placeholder ✗ 7510 7511Sidebar: 7512┌────────────┐ 7513│ Event 1 │ 7514├────────────┤ ← Gray border ✗ 7515│ Event 2 │ 7516└────────────┘ 7517``` 7518 7519**AFTER (v4.8.3)**: 7520``` 7521Matrix Theme: 7522 7523Event description: 7524"Please review **Q1 Goals** carefully" 7525 ↑ 7526 Green bold ✓ 7527 7528Search bar: 7529[ Search...] ← Green themed ✓ 7530 7531Sidebar: 7532┌────────────┐ 7533│ Event 1 │ 7534├────────────┤ ← Green border ✓ 7535│ Event 2 │ 7536└────────────┘ 7537``` 7538 7539### Examples by Theme 7540 7541**Matrix Theme**: 7542``` 7543Description: 7544"Check **important notes** and links" 7545 ↑ 7546 Green bold 7547 7548Sidebar boxes: 7549Event 1 7550───────── Green border 7551Event 2 7552───────── Green border 7553``` 7554 7555**Purple Theme**: 7556``` 7557Description: 7558"Review **agenda items** before meeting" 7559 ↑ 7560 Lavender bold 7561 7562Sidebar boxes: 7563Event 1 7564───────── Purple border 7565Event 2 7566───────── Purple border 7567``` 7568 7569**Professional Theme**: 7570``` 7571Description: 7572"Update **quarterly reports** by Friday" 7573 ↑ 7574 Dark bold 7575 7576Sidebar boxes: 7577Event 1 7578───────── Gray border 7579Event 2 7580───────── Gray border 7581``` 7582 7583**Pink Theme**: 7584``` 7585Description: 7586"Don't forget **party supplies** ✨" 7587 ↑ 7588 Pink bold 7589 7590Sidebar boxes: 7591Event 1 7592───────── Pink border 7593Event 2 ✨ 7594───────── Pink border 7595``` 7596 7597### Complete Formatting Coverage 7598 7599**Text formatting themed**: 7600- ✅ Regular text 7601- ✅ **Bold text** ← NEW! 7602- ✅ Links 7603- ✅ Italic text (inherits) 7604- ✅ Code (inherits) 7605 7606**UI elements themed**: 7607- ✅ Search bar ← Enhanced! 7608- ✅ Search icon ← Enhanced! 7609- ✅ Search placeholder ← Enhanced! 7610- ✅ Sidebar borders ← NEW! 7611- ✅ Event borders 7612- ✅ Badges 7613- ✅ Buttons 7614 7615**Every element perfectly themed!** 7616 7617### Search Bar Coverage 7618 7619**All aspects themed**: 7620- Background: Theme cell_bg ✓ 7621- Text color: Theme text_primary ✓ 7622- Border: Theme grid_border ✓ 7623- Placeholder: Inherits text color ✓ 7624- Icon (): In placeholder ✓ 7625- Clear button (✕): Themed ✓ 7626 7627**Cannot be overridden!** (all have !important) 7628 7629### Sidebar Event Box Styling 7630 7631**Consistent borders**: 7632``` 7633Matrix: 7634╔════════════╗ 7635║ Event 1 ║ 7636╟────────────╢ ← grid_border color 7637║ Event 2 ║ 7638╚════════════╝ 7639 7640All themes match perfectly! ✓ 7641``` 7642 7643### Complete Theme Achievement 7644 7645**Every single element themed**: 7646- ✅ Backgrounds 7647- ✅ Text (regular) 7648- ✅ Text (bold) ← v4.8.3! 7649- ✅ Links 7650- ✅ Badges 7651- ✅ Buttons 7652- ✅ Checkboxes 7653- ✅ Icons 7654- ✅ Borders 7655- ✅ Search bar ← Enhanced v4.8.3! 7656- ✅ Sidebar boxes ← v4.8.3! 7657- ✅ Today marker 7658- ✅ Calendar grid 7659- ✅ Event panels 7660 7661**ABSOLUTE PERFECTION!** ✨ 7662 7663## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 7664 7665### Fixed: Links in Descriptions Now Themed 7666- **Fixed:** All links in event descriptions now use theme color 7667- **Fixed:** DokuWiki links [[page|text]] themed 7668- **Fixed:** Markdown links [text](url) themed 7669- **Fixed:** Plain URLs themed 7670- **Result:** Links match theme perfectly! 7671 7672### The Problem 7673 7674**v4.8.1 behavior**: 7675``` 7676Event description: 7677"Check out https://example.com" ← Blue default link ✗ 7678"See [[wiki:page|docs]]" ← Blue default link ✗ 7679``` 7680 7681### The Fix 7682 7683**Added inline color styling to ALL link types**: 7684 7685```php 7686// Get theme colors: 7687$linkColor = $themeStyles['border'] . ' !important'; 7688$linkStyle = ' style="color:' . $linkColor . ';"'; 7689 7690// Apply to links: 7691<a href="..." style="color: #00cc07 !important;">link</a> 7692``` 7693 7694**All link types themed**: 76951. DokuWiki syntax: `[[page|text]]` 76962. Markdown syntax: `[text](url)` 76973. Plain URLs: `https://example.com` 7698 7699### Before vs After 7700 7701**BEFORE (v4.8.1)**: 7702``` 7703Matrix Theme Description: 7704"Visit https://example.com for more info" 7705 ↑ 7706 Blue link ✗ (doesn't match green theme) 7707``` 7708 7709**AFTER (v4.8.2)**: 7710``` 7711Matrix Theme Description: 7712"Visit https://example.com for more info" 7713 ↑ 7714 Green link ✓ (matches theme!) 7715``` 7716 7717### Link Colors by Theme 7718 7719**Matrix**: 7720- Links: Green (#00cc07) !important 7721- Matches: Border, badges, highlights 7722 7723**Purple**: 7724- Links: Purple (#9b59b6) !important 7725- Matches: Border, badges, highlights 7726 7727**Professional**: 7728- Links: Blue (#4a90e2) !important 7729- Matches: Border, badges, highlights 7730 7731**Pink**: 7732- Links: Hot Pink (#ff1493) !important 7733- Matches: Border, badges, highlights ✨ 7734 7735### Examples 7736 7737**Matrix Description with Links**: 7738``` 7739Event: Team Meeting 7740Description: 7741"Review [[wiki:q1goals|Q1 Goals]] 7742and visit https://metrics.com" 7743 7744Both links → Green ✓ 7745``` 7746 7747**Purple Description with Links**: 7748``` 7749Event: Planning Session 7750Description: 7751"Check [schedule](https://cal.com) 7752for availability" 7753 7754Link → Purple ✓ 7755``` 7756 7757**Professional Description with Links**: 7758``` 7759Event: Client Call 7760Description: 7761"Prepare [[reports|Monthly Reports]] 7762before the call" 7763 7764Link → Blue ✓ 7765``` 7766 7767**Pink Description with Links**: 7768``` 7769Event: Party Planning 7770Description: 7771"RSVP at https://party.com ✨" 7772 7773Link → Hot Pink ✓ 7774``` 7775 7776### Technical Implementation 7777 7778**Updated renderDescription() function**: 7779 7780```php 7781private function renderDescription($description, $themeStyles = null) { 7782 // Get theme 7783 if ($themeStyles === null) { 7784 $theme = $this->getSidebarTheme(); 7785 $themeStyles = $this->getSidebarThemeStyles($theme); 7786 } 7787 7788 // Create link style 7789 $linkColor = $themeStyles['border'] . ' !important'; 7790 $linkStyle = ' style="color:' . $linkColor . ';"'; 7791 7792 // Apply to all link types: 7793 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 7794} 7795``` 7796 7797### Complete Theming 7798 7799**Every text element**: 7800- ✅ Event titles 7801- ✅ Event dates 7802- ✅ Event descriptions 7803- ✅ **Links in descriptions** ← NEW! 7804- ✅ Badges 7805- ✅ Buttons 7806 7807**Every color unified!** 7808 7809### Unified Theme Experience 7810 7811**Matrix Theme**: 7812``` 7813Everything green: 7814- Text: Green ✓ 7815- Links: Green ✓ 7816- Badges: Green ✓ 7817- Borders: Green ✓ 7818- Buttons: Green ✓ 7819- Today marker: Green ✓ 7820 7821Perfect harmony! ✓ 7822``` 7823 7824**No default blue links breaking the theme!** 7825 7826### Link Types Supported 7827 7828**1. DokuWiki Syntax**: 7829``` 7830[[page|Link Text]] → Themed ✓ 7831[[page]] → Themed ✓ 7832[[page#section|Text]] → Themed ✓ 7833``` 7834 7835**2. Markdown Syntax**: 7836``` 7837[Link Text](https://url.com) → Themed ✓ 7838[Text](internal-page) → Themed ✓ 7839``` 7840 7841**3. Plain URLs**: 7842``` 7843https://example.com → Themed ✓ 7844http://site.org → Themed ✓ 7845``` 7846 7847**All links perfectly themed!** 7848 7849## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 7850 7851### Fixed: All Badges Now Themed 7852- **Fixed:** TODAY badge themed with theme color 7853- **Fixed:** PAST DUE badge uses orange (warning color) 7854- **Fixed:** Namespace badges themed 7855- **Fixed:** All badges visible and hidden 7856- **Result:** All badges match theme! 7857 7858### Fixed: Today Cell More Prominent 7859- **Fixed:** Today cell now has 2px border in theme color 7860- **Fixed:** Border added to both PHP and JavaScript 7861- **Result:** Today stands out clearly! 7862 7863### Fixed: Past Event Text Fully Themed 7864- **Fixed:** Event-info div backgrounds ensure no gray 7865- **Result:** Expanded past events completely themed! 7866 7867### All Changes 7868 7869**1. Badge Theming**: 7870 7871**TODAY Badge**: 7872```php 7873// PHP & JavaScript: 7874style="background: $themeStyles['border'] !important; 7875 color: $bg !important;" 7876 7877Matrix: Green badge 7878Purple: Purple badge 7879Professional: Blue badge with white text 7880Pink: Pink badge 7881``` 7882 7883**PAST DUE Badge** (always orange): 7884```php 7885style="background: #ff9800 !important; 7886 color: #fff !important;" 7887``` 7888 7889**Namespace Badge**: 7890```php 7891style="background: $themeStyles['border'] !important; 7892 color: $bg !important;" 7893``` 7894 7895**2. Today Cell Border**: 7896 7897**PHP**: 7898```php 7899$todayBorder = $isToday ? 7900 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 7901``` 7902 7903**JavaScript**: Same 7904 7905**Result**: Today cell has prominent colored border! 7906 7907### Before vs After 7908 7909**BEFORE (v4.8.0)**: 7910``` 7911Calendar: 7912┌─┬─┬─┬─┬─┬─┬─┐ 7913│1│2│3│4│5│6│7│ 7914│ │ │ │[8]│ │ │ ← Today: subtle background 7915└─┴─┴─┴─┴─┴─┴─┘ 7916 7917Event badges: 7918Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 7919``` 7920 7921**AFTER (v4.8.1)**: 7922``` 7923Calendar (Matrix): 7924┌─┬─┬─┬─┬─┬─┬─┐ 7925│1│2│3│4│5│6│7│ 7926│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 7927└─┴─┴─┴─┴─┴─┴─┘ 7928 7929Event badges (Matrix): 7930Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 7931``` 7932 7933### Matrix Theme Example 7934 7935**Calendar**: 7936``` 7937Today cell: 7938┌────┐ 7939│ 8 │ Dark green bg + Green 2px border 7940└────┘ 7941Very obvious! 7942``` 7943 7944**Badges**: 7945``` 7946[TODAY] ← Green bg, dark text 7947[Work] ← Green bg, dark text 7948[PAST DUE] ← Orange bg, white text 7949``` 7950 7951### Purple Theme Example 7952 7953**Calendar**: 7954``` 7955Today cell: 7956┌────┐ 7957│ 8 │ Dark purple bg + Purple 2px border 7958└────┘ 7959``` 7960 7961**Badges**: 7962``` 7963[TODAY] ← Purple bg 7964[Work] ← Purple bg 7965``` 7966 7967### Professional Theme Example 7968 7969**Calendar**: 7970``` 7971Today cell: 7972┌────┐ 7973│ 8 │ Light blue bg + Blue 2px border 7974└────┘ 7975``` 7976 7977**Badges**: 7978``` 7979[TODAY] ← Blue bg, white text 7980[Work] ← Blue bg, white text 7981``` 7982 7983### Pink Theme Example 7984 7985**Calendar**: 7986``` 7987Today cell: 7988┌────┐ 7989│ 8 │ Dark pink bg + Pink 2px border ✨ 7990└────┘ 7991``` 7992 7993**Badges**: 7994``` 7995[TODAY] ← Pink bg 7996[Work] ← Pink bg ✨ 7997``` 7998 7999### Complete Badge Coverage 8000 8001**All badges themed**: 8002- ✅ TODAY badge (theme color) 8003- ✅ PAST DUE badge (orange warning) 8004- ✅ Namespace badges (theme color) 8005- ✅ Visible events 8006- ✅ Hidden/past events 8007 8008**No gray badges anywhere!** 8009 8010### Today Cell Visual 8011 8012**Dual indicators**: 80131. Background color (theme today bg) 80142. Border (2px theme color) ← NEW! 8015 8016**Result**: Today is VERY obvious! 8017 8018**Matrix**: Green bg + Green border 8019**Purple**: Purple bg + Purple border 8020**Professional**: Light blue bg + Blue border 8021**Pink**: Pink bg + Pink border ✨ 8022 8023### Complete Theming 8024 8025**Every element themed**: 8026- ✅ Backgrounds 8027- ✅ Text colors 8028- ✅ Badges (v4.8.1!) 8029- ✅ Today marker (v4.8.1!) 8030- ✅ Checkboxes 8031- ✅ Buttons 8032- ✅ Icons 8033 8034**Absolutely everything!** ✨ 8035 8036## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 8037 8038### Fixed: All Event Backgrounds Now Themed 8039- **Fixed:** event-info div now has themed background 8040- **Fixed:** event-meta-compact div (visible) now has themed background 8041- **Fixed:** event-desc-compact div now has themed background 8042- **Fixed:** All !important flags added to prevent CSS override 8043- **Result:** Entire event item fully themed! 8044 8045### Fixed: Description Text Shows Correct Color Immediately 8046- **Fixed:** Description divs now have explicit background + color on load 8047- **Fixed:** Both visible and hidden descriptions fully styled 8048- **Result:** No more gray text on initial load! 8049 8050### The Problem 8051 8052**v4.7.9 behavior**: 8053``` 8054Expanded past event: 8055┌────────────────────────┐ 8056│ ▾ Team Meeting │ ← Themed ✓ 8057│ Mon, Feb 8 │ ← Themed ✓ 8058│ │ 8059│ [Event details] │ ← Gray background ✗ 8060│ [Description] │ ← Gray text until navigation ✗ 8061└────────────────────────┘ 8062 8063Only the date/time div was themed! 8064``` 8065 8066### The Fix 8067 8068**Added background to ALL inner divs**: 8069 8070**PHP**: 8071```php 8072// Event container: 8073style="background:' . $themeStyles['cell_bg'] . ' !important;" 8074 8075// event-info wrapper: 8076<div class="event-info" 8077 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 8078 8079// event-meta-compact: 8080<div class="event-meta-compact" 8081 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 8082 8083// event-desc-compact: 8084<div class="event-desc-compact" 8085 style="background:' . $themeStyles['cell_bg'] . ' !important; 8086 color:' . $themeStyles['text_dim'] . ' !important;"> 8087``` 8088 8089**JavaScript**: Same styling applied 8090 8091### Before vs After 8092 8093**BEFORE (v4.7.9)**: 8094``` 8095Matrix Theme - Expanded Event: 8096┌────────────────────────┐ 8097│ ▾ Team Meeting │ 8098│ Mon, Feb 8 ← Green │ 8099│ │ 8100│ Details ← Gray ✗ │ 8101│ Description ← Gray ✗ │ 8102│ [✏️] [️] │ 8103└────────────────────────┘ 8104``` 8105 8106**AFTER (v4.8.0)**: 8107``` 8108Matrix Theme - Expanded Event: 8109┌────────────────────────┐ 8110│ ▾ Team Meeting │ 8111│ Mon, Feb 8 ← Green │ 8112│ │ 8113│ Details ← Green ✓│ 8114│ Description ← Green ✓│ 8115│ [✏️] [️] │ 8116└────────────────────────┘ 8117 8118Entire event themed! 8119``` 8120 8121### What's Themed Now 8122 8123**Event Item Structure** (all themed): 8124``` 8125event-compact-item ← Themed ✓ 8126 └─ event-info ← Themed ✓ (v4.8.0!) 8127 ├─ event-title-row ← Themed ✓ 8128 ├─ event-meta ← Themed ✓ (v4.8.0!) 8129 └─ event-desc ← Themed ✓ (v4.8.0!) 8130``` 8131 8132**Every layer has background!** 8133 8134### Matrix Theme Example 8135 8136**Complete event**: 8137``` 8138┌────────────────────────────┐ 8139│ Team Meeting │ ← Dark green bg 8140│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 8141│ Discussed Q1 goals and │ ← Dark green bg 8142│ set targets for team │ ← Dark green bg 8143│ [✏️] [️] [☑] │ ← Dark green bg 8144└────────────────────────────┘ 8145 8146Consistent green throughout! ✓ 8147``` 8148 8149### Purple Theme Example 8150 8151``` 8152┌────────────────────────────┐ 8153│ Team Meeting │ ← Dark purple bg 8154│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 8155│ Discussed Q1 goals │ ← Dark purple bg 8156│ [✏️] [️] [☑] │ ← Dark purple bg 8157└────────────────────────────┘ 8158 8159Consistent purple throughout! ✓ 8160``` 8161 8162### Professional Theme Example 8163 8164``` 8165┌────────────────────────────┐ 8166│ Team Meeting │ ← Light bg 8167│ Mon, Feb 8 • 2:00 PM │ ← Light bg 8168│ Discussed Q1 goals │ ← Light bg 8169│ [✏️] [️] [☑] │ ← Light bg 8170└────────────────────────────┘ 8171 8172Consistent light throughout! ✓ 8173``` 8174 8175### Pink Theme Example 8176 8177``` 8178┌────────────────────────────┐ 8179│ Team Meeting │ ← Dark pink bg 8180│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 8181│ Discussed Q1 goals │ ← Dark pink bg 8182│ [✏️] [️] [☑] │ ← Dark pink bg 8183└────────────────────────────┘ 8184 8185Consistent pink throughout! ✓ 8186``` 8187 8188### Complete Theming 8189 8190**Every element, every layer**: 8191- ✅ Container 8192- ✅ Event item 8193- ✅ Event info wrapper (v4.8.0!) 8194- ✅ Title row 8195- ✅ Meta div (v4.8.0!) 8196- ✅ Description div (v4.8.0!) 8197- ✅ Action buttons 8198- ✅ Checkboxes 8199 8200**No gray anywhere!** 8201 8202### Why Multiple Backgrounds? 8203 8204**CSS layers stack**: 8205```html 8206<div style="background: green;"> ← Layer 1 8207 <div style="background: inherit;"> ← Could be gray! 8208 <div>Content</div> ← Inherits gray! 8209 </div> 8210</div> 8211 8212Better: 8213<div style="background: green;"> ← Layer 1 8214 <div style="background: green;"> ← Layer 2 forced 8215 <div style="background: green;"> ← Layer 3 forced 8216 Content ← All green! 8217 </div> 8218 </div> 8219</div> 8220``` 8221 8222**Every layer forced = Perfect theming!** 8223 8224### !important Everywhere 8225 8226**All styling now uses !important**: 8227- background: ... !important 8228- color: ... !important 8229 8230**Result**: CSS cannot override themes! 8231 8232**Version 4.8.0 = Complete, bulletproof theming!** ✨ 8233 8234## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 8235 8236### Fixed: Past Event Expanded Background Themed 8237- **Fixed:** Past event meta div now has theme background when expanded 8238- **Fixed:** Both PHP and JavaScript render with theme background 8239- **Result:** Expanded past events have proper themed background! 8240 8241### ✅ Fixed: Checkboxes Now Themed 8242- **Fixed:** Task checkboxes use accent-color matching theme 8243- **Fixed:** Cursor changes to pointer on hover 8244- **Result:** Checkboxes match theme color! 8245 8246### Fixed: Action Buttons (Edit/Delete) Themed 8247- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 8248- **Fixed:** Background, text, and border all use theme colors 8249- **Result:** All icons themed! 8250 8251### All Changes 8252 8253**1. Past Event Expanded Background**: 8254 8255**PHP**: 8256```php 8257// Before: 8258<div class="event-meta-compact" style="display:none;"> 8259 8260// After: 8261<div class="event-meta-compact" 8262 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 8263``` 8264 8265**JavaScript**: Same treatment 8266 8267**Result**: Expanded past events have themed background! 8268 8269**2. Task Checkboxes**: 8270 8271**PHP & JavaScript**: 8272```php 8273// Added accent-color: 8274<input type="checkbox" 8275 style="accent-color:' . $themeStyles['border'] . ' !important; 8276 cursor:pointer;"> 8277``` 8278 8279**accent-color** changes the checkbox color: 8280- Matrix: Green checkboxes ✓ 8281- Purple: Purple checkboxes ✓ 8282- Professional: Blue checkboxes ✓ 8283- Pink: Pink checkboxes ✓ 8284 8285**3. Edit/Delete Buttons**: 8286 8287**PHP**: 8288```php 8289<button class="event-action-btn" 8290 style="color:' . $themeStyles['text_primary'] . ' !important; 8291 background:' . $themeStyles['cell_bg'] . ' !important; 8292 border-color:' . $themeStyles['grid_border'] . ' !important;"> 8293 ️ 8294</button> 8295``` 8296 8297**JavaScript**: Same 8298 8299**Result**: Buttons blend with theme! 8300 8301### Before vs After 8302 8303**BEFORE (v4.7.8)**: 8304``` 8305Past Event (expanded): 8306┌─────────────────────────┐ 8307│ ▾ Team Meeting │ 8308│ Mon, Feb 8 │ ← White background ✗ 8309│ Description │ 8310├─────────────────────────┤ 8311│ [✏️] [️] [☐] │ ← Default colors ✗ 8312└─────────────────────────┘ 8313``` 8314 8315**AFTER (v4.7.9)**: 8316``` 8317Past Event (expanded - Matrix): 8318┌─────────────────────────┐ 8319│ ▾ Team Meeting │ 8320│ Mon, Feb 8 │ ← Dark green bg ✓ 8321│ Description │ 8322├─────────────────────────┤ 8323│ [✏️] [️] [☑] │ ← Themed ✓ 8324└─────────────────────────┘ 8325``` 8326 8327### Matrix Theme Example 8328 8329**Checkboxes**: Green accent 8330**Buttons**: Dark bg, green text, green borders 8331**Expanded**: Dark green background 8332 8333``` 8334Task: ☑ Complete report ← Green checkmark 8335[✏️] [️] ← Dark buttons with green 8336``` 8337 8338### Purple Theme Example 8339 8340**Checkboxes**: Purple accent 8341**Buttons**: Dark purple bg, lavender text 8342**Expanded**: Dark purple background 8343 8344``` 8345Task: ☑ Complete report ← Purple checkmark 8346[✏️] [️] ← Purple themed 8347``` 8348 8349### Professional Theme Example 8350 8351**Checkboxes**: Blue accent 8352**Buttons**: Light bg, dark text 8353**Expanded**: Light background 8354 8355``` 8356Task: ☑ Complete report ← Blue checkmark 8357[✏️] [️] ← Light themed 8358``` 8359 8360### Pink Theme Example 8361 8362**Checkboxes**: Pink accent 8363**Buttons**: Dark pink bg, pink text 8364**Expanded**: Dark pink background 8365 8366``` 8367Task: ☑ Complete report ← Pink checkmark 8368[✏️] [️] ← Pink themed 8369``` 8370 8371### Complete Icon Coverage 8372 8373**Themed Icons/Buttons**: 8374- ✅ Task checkboxes (accent-color) 8375- ✅ Edit button (✏️) 8376- ✅ Delete button (️) 8377- ✅ Navigation arrows (◀ ▶) 8378- ✅ Today button 8379- ✅ Past Events arrow (▶) 8380 8381**All interactive elements themed!** 8382 8383### How accent-color Works 8384 8385**Modern CSS property** for form controls: 8386```css 8387input[type="checkbox"] { 8388 accent-color: #00cc07; /* Green checkbox! */ 8389} 8390``` 8391 8392**Browser support**: All modern browsers ✓ 8393 8394**Result**: Checkboxes automatically match theme! 8395 8396### Complete Theme Coverage 8397 8398**Backgrounds**: 8399- ✅ Container 8400- ✅ Calendar-left 8401- ✅ Calendar-right 8402- ✅ Event items 8403- ✅ Past event expanded (v4.7.9!) 8404- ✅ Action buttons (v4.7.9!) 8405 8406**Icons/Controls**: 8407- ✅ Checkboxes (v4.7.9!) 8408- ✅ Edit/Delete buttons (v4.7.9!) 8409- ✅ Navigation buttons 8410- ✅ All arrows 8411 8412**Every element perfectly themed!** ✨ 8413 8414## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 8415 8416### Fixed: White Bar at Bottom of Calendar 8417- **Fixed:** Added background to calendar-left div with !important 8418- **Result:** No more white bar at bottom! 8419 8420### Fixed: Past Event Expanded Details Not Themed 8421- **Fixed:** Past event date/time now themed when expanded 8422- **Fixed:** Past event descriptions now themed when expanded 8423- **Fixed:** Both PHP and JavaScript render with theme colors 8424- **Result:** Expanding past events shows themed text! 8425 8426### Fixed: Event Description Text Color 8427- **Fixed:** All event descriptions now use theme text_dim color 8428- **Fixed:** Both visible and hidden descriptions themed 8429- **Result:** Descriptions always match theme! 8430 8431### All Changes 8432 8433**1. Bottom White Bar** (calendar-left div): 8434 8435**Before**: 8436```html 8437<div class="calendar-compact-left"> 8438<!-- White background showing at bottom --> 8439``` 8440 8441**After**: 8442```html 8443<div class="calendar-compact-left" 8444 style="background: #242424 !important;"> 8445<!-- Matches theme background --> 8446``` 8447 8448**2. Past Event Expanded Details**: 8449 8450**PHP** - Added colors to hidden details: 8451```php 8452// Past event meta (hidden): 8453<span class="event-date-time" 8454 style="color:' . $themeStyles['text_dim'] . ' !important;"> 8455 8456// Past event description (hidden): 8457<div class="event-desc-compact" 8458 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 8459``` 8460 8461**JavaScript** - Same treatment: 8462```javascript 8463// Past event meta: 8464html += '<span class="event-date-time" 8465 style="color:' + themeStyles.text_dim + ' !important;">'; 8466 8467// Past event description: 8468html += '<div class="event-desc-compact" 8469 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 8470``` 8471 8472**3. All Event Descriptions**: 8473 8474**Both visible and hidden descriptions now themed**: 8475```php 8476// PHP: 8477style="color:' . $themeStyles['text_dim'] . ' !important;" 8478 8479// JavaScript: 8480style="color:' + themeStyles.text_dim + ' !important;" 8481``` 8482 8483### Before vs After 8484 8485**BEFORE (v4.7.7)**: 8486``` 8487Calendar bottom: 8488┌──────────────┐ 8489│ Calendar │ 8490│ Grid │ 8491└──────────────┘ 8492▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 8493 8494Past Event (collapsed): 8495▸ Team Meeting 8496 8497Past Event (expanded): 8498▾ Team Meeting 8499 Mon, Feb 8 ← Gray text ✗ 8500 Description ← Gray text ✗ 8501``` 8502 8503**AFTER (v4.7.8)**: 8504``` 8505Calendar bottom: 8506┌──────────────┐ 8507│ Calendar │ 8508│ Grid │ 8509└──────────────┘ 8510No white bar! ✓ 8511 8512Past Event (collapsed): 8513▸ Team Meeting 8514 8515Past Event (expanded): 8516▾ Team Meeting 8517 Mon, Feb 8 ← Theme dim color ✓ 8518 Description ← Theme dim color ✓ 8519``` 8520 8521### Matrix Theme Example 8522 8523**Past event expanded**: 8524``` 8525▾ Team Meeting (past) 8526 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 8527 Discussed Q1 goals ← Dim green (#00aa00) 8528 8529Everything themed! ✓ 8530``` 8531 8532### Purple Theme Example 8533 8534**Past event expanded**: 8535``` 8536▾ Team Meeting (past) 8537 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 8538 Discussed Q1 goals ← Dim purple (#8e7ab8) 8539 8540Everything themed! ✓ 8541``` 8542 8543### Professional Theme Example 8544 8545**Past event expanded**: 8546``` 8547▾ Team Meeting (past) 8548 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 8549 Discussed Q1 goals ← Gray (#7f8c8d) 8550 8551Everything themed! ✓ 8552``` 8553 8554### Pink Theme Example 8555 8556**Past event expanded**: 8557``` 8558▾ Team Meeting (past) 8559 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 8560 Discussed Q1 goals ← Light pink (#ff85c1) 8561 8562Everything themed! ✓ 8563``` 8564 8565### Complete Coverage 8566 8567**Calendar Layout**: 8568- ✅ Container background 8569- ✅ Calendar-left background (v4.7.8!) 8570- ✅ Calendar-right background 8571- ✅ No white bars anywhere! 8572 8573**Event Details**: 8574- ✅ Event titles 8575- ✅ Event dates/times 8576- ✅ Event descriptions (visible) (v4.7.8!) 8577- ✅ Past event dates (expanded) (v4.7.8!) 8578- ✅ Past event descriptions (expanded) (v4.7.8!) 8579 8580**Absolutely everything themed!** 8581 8582## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 8583 8584### Fixed: Added !important to EVERY Themed Element 8585- **Fixed:** S M T W T F S headers now have background + color with !important 8586- **Fixed:** "Past Events" text now has explicit color with !important 8587- **Fixed:** Today cell background now forced with !important 8588- **Fixed:** All day numbers now have !important color 8589- **Fixed:** Empty cells now have !important background 8590- **Result:** CSS CANNOT override themes anymore! 8591 8592### The Nuclear Option: !important Everywhere 8593 8594**Problem**: DokuWiki CSS was still winning: 8595```css 8596/* DokuWiki theme overriding everything: */ 8597.dokuwiki table th { background: white !important; color: black !important; } 8598.dokuwiki td { background: white !important; } 8599``` 8600 8601**Solution**: Add !important to EVERY inline style: 8602```html 8603<th style="background: #242424 !important; color: #00cc07 !important;"> 8604<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 8605<span style="color: #00cc07 !important;"> 8606``` 8607 8608### All Changes 8609 8610**1. Table Headers (S M T W T F S)**: 8611 8612**PHP** - Added background + !important everywhere: 8613```php 8614$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 8615 color:' . $themeStyles['text_primary'] . ' !important; 8616 border-color:' . $themeStyles['grid_border'] . ' !important; 8617 font-weight:bold !important;'; 8618``` 8619 8620**JavaScript** - Added background to each th: 8621```javascript 8622th.style.setProperty('background', themeStyles.header_bg, 'important'); 8623th.style.setProperty('color', themeStyles.text_primary, 'important'); 8624th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 8625th.style.setProperty('font-weight', 'bold', 'important'); 8626``` 8627 8628**2. Past Events Text**: 8629 8630**PHP** - Added !important to spans: 8631```php 8632<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 8633<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 8634``` 8635 8636**JavaScript** - Same treatment: 8637```javascript 8638html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 8639html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 8640``` 8641 8642**3. Today Cell & All Cells**: 8643 8644**PHP** - !important on background and color: 8645```php 8646// Today or regular cell: 8647$cellStyle = 'background:' . $cellBg . ' !important; 8648 color:' . $themeStyles['text_primary'] . ' !important;'; 8649 8650// Day number: 8651<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 8652``` 8653 8654**JavaScript** - Same: 8655```javascript 8656style="background:${cellBg} !important; color:${cellColor} !important;" 8657 8658<span style="color:${cellColor} !important;">${currentDay}</span> 8659``` 8660 8661**4. Empty Cells**: 8662 8663**PHP & JavaScript** - !important: 8664```php 8665style="background:' . $themeStyles['bg'] . ' !important;" 8666``` 8667 8668### Before vs After 8669 8670**BEFORE (v4.7.6)** - CSS still winning: 8671``` 8672S M T W T F S → White background, black text ✗ 8673Today cell → White background ✗ 8674Past Events → Black text ✗ 8675``` 8676 8677**AFTER (v4.7.7)** - Theme wins: 8678``` 8679S M T W T F S → Theme background, theme text ✓ 8680Today cell → Theme highlight ✓ 8681Past Events → Theme text ✓ 8682 8683NOTHING can override !important inline styles! 8684``` 8685 8686### Matrix Theme Example 8687 8688**Complete theming**: 8689``` 8690┌──────────────────────────┐ 8691│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 8692├─┬─┬─┬─┬─┬─┬──────────────┤ 8693│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 8694│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 8695├─┴─┴─┴─┴─┴─┴──────────────┤ 8696│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 8697└──────────────────────────┘ 8698 8699Every element forced with !important ✓ 8700``` 8701 8702### Purple Theme Example 8703 8704``` 8705┌──────────────────────────┐ 8706│ S M T W T F S │ ← Dark purple bg, Lavender text 8707├─┬─┬─┬─┬─┬─┬──────────────┤ 8708│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 8709│ │ │ │ │ │[8]│ │ ← Today purple highlight 8710├─┴─┴─┴─┴─┴─┴──────────────┤ 8711│ ▶ Past Events (3) │ ← Dim purple text 8712└──────────────────────────┘ 8713 8714Forced purple everywhere ✓ 8715``` 8716 8717### Professional Theme Example 8718 8719``` 8720┌──────────────────────────┐ 8721│ S M T W T F S │ ← Light bg, Dark text 8722├─┬─┬─┬─┬─┬─┬──────────────┤ 8723│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 8724│ │ │ │ │ │[8]│ │ ← Today light blue highlight 8725├─┴─┴─┴─┴─┴─┴──────────────┤ 8726│ ▶ Past Events (3) │ ← Gray text 8727└──────────────────────────┘ 8728 8729Forced professional everywhere ✓ 8730``` 8731 8732### Pink Theme Example 8733 8734``` 8735┌──────────────────────────┐ 8736│ S M T W T F S │ ← Dark pink bg, Pink text 8737├─┬─┬─┬─┬─┬─┬──────────────┤ 8738│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 8739│ │ │ │ │ │[8]│ │ ← Today pink highlight 8740├─┴─┴─┴─┴─┴─┴──────────────┤ 8741│ ▶ Past Events (3) │ ← Light pink text 8742└──────────────────────────┘ 8743 8744Forced pink sparkles everywhere ✓ 8745``` 8746 8747### Why So Aggressive? 8748 8749**!important priority**: 8750``` 87511. Inline style with !important ← We use this 87522. CSS rule with !important 87533. Inline style without !important 87544. CSS rule without !important 8755``` 8756 8757**We win**: Our inline `!important` beats everything! 8758 8759### Complete !important Coverage 8760 8761**Every themed element now has !important**: 8762- ✅ S M T W T F S (background + color) 8763- ✅ Day numbers (color) 8764- ✅ Today cell (background + color) 8765- ✅ Empty cells (background) 8766- ✅ Past Events text (color) 8767- ✅ Past Events arrow (color) 8768- ✅ Event titles (color) 8769- ✅ Event dates (color) 8770 8771**No CSS can override themes!** 8772 8773## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 8774 8775### Fixed: Event Sidebar Text Now Themed 8776- **Fixed:** Event titles now have explicit color styling 8777- **Fixed:** Event dates/times now have explicit color styling (dimmed) 8778- **Fixed:** Both PHP and JavaScript event rendering now styled 8779 8780### Enhanced: Table Header Colors Now Forced with !important 8781- **Fixed:** S M T W T F S now uses `!important` to override any CSS 8782- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 8783- **Result:** Header colors CANNOT be overridden! 8784 8785### What Was Fixed 8786 8787**1. Event Text in Sidebar** (was missing): 8788 8789**PHP** - Explicit colors added: 8790```php 8791// Event title: 8792<span class="event-title-compact" 8793 style="color:' . $themeStyles['text_primary'] . ';"> 8794 8795// Event date/time: 8796<span class="event-date-time" 8797 style="color:' . $themeStyles['text_dim'] . ';"> 8798``` 8799 8800**JavaScript** - Explicit colors added: 8801```javascript 8802// Event title: 8803html += '<span class="event-title-compact" 8804 style="color:' + themeStyles.text_primary + ';">'; 8805 8806// Event date/time: 8807html += '<span class="event-date-time" 8808 style="color:' + themeStyles.text_dim + ';">'; 8809``` 8810 8811**2. Table Header Colors** (was being overridden): 8812 8813**PHP** - Added !important: 8814```php 8815// Row: 8816style="color: ' . $themeStyles['text_primary'] . ' !important;" 8817 8818// Each th: 8819$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 8820<th style="' . $thStyle . '">S</th> 8821``` 8822 8823**JavaScript** - Used setProperty with important: 8824```javascript 8825// Row: 8826thead.style.setProperty('color', themeStyles.text_primary, 'important'); 8827 8828// Each th: 8829th.style.setProperty('color', themeStyles.text_primary, 'important'); 8830``` 8831 8832### Before vs After 8833 8834**BEFORE (v4.7.5)**: 8835``` 8836Event List: 8837┌─────────────────┐ 8838│ Team Meeting │ ← Black/default color ✗ 8839│ Mon, Feb 8 │ ← Black/default color ✗ 8840└─────────────────┘ 8841 8842Table Header: 8843S M T W T F S ← Black/default color ✗ 8844(CSS was overriding the style) 8845``` 8846 8847**AFTER (v4.7.6)**: 8848``` 8849Event List (Matrix): 8850┌─────────────────┐ 8851│ Team Meeting │ ← Green (#00cc07) ✓ 8852│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 8853└─────────────────┘ 8854 8855Table Header (Matrix): 8856S M T W T F S ← Green (!important) ✓ 8857(Cannot be overridden!) 8858``` 8859 8860### Why !important? 8861 8862**Problem**: DokuWiki CSS was stronger: 8863```css 8864/* Some DokuWiki theme CSS: */ 8865table th { 8866 color: #000 !important; /* ← Overrides inline styles */ 8867} 8868``` 8869 8870**Solution**: Use !important in inline styles: 8871```html 8872<th style="color: #00cc07 !important;">S</th> 8873<!-- Inline !important beats CSS !important --> 8874``` 8875 8876**JavaScript method**: 8877```javascript 8878// Old (could be overridden): 8879th.style.color = '#00cc07'; 8880 8881// New (cannot be overridden): 8882th.style.setProperty('color', '#00cc07', 'important'); 8883``` 8884 8885### Event Text Colors 8886 8887**Two-tone approach**: 8888 8889**Primary text** (titles): 8890- Matrix: `#00cc07` (bright green) 8891- Purple: `#b19cd9` (lavender) 8892- Professional: `#2c3e50` (dark) 8893- Pink: `#ff69b4` (pink) 8894 8895**Dimmed text** (dates/times): 8896- Matrix: `#00aa00` (dim green) 8897- Purple: `#8e7ab8` (dim purple) 8898- Professional: `#7f8c8d` (gray) 8899- Pink: `#ff85c1` (light pink) 8900 8901**Creates visual hierarchy!** ✓ 8902 8903### Complete Theme Coverage NOW 8904 8905**Calendar Grid**: 8906- Container ✅ 8907- Header ✅ 8908- Buttons ✅ 8909- S M T W T F S ✅ (!important - v4.7.6!) 8910- Day numbers ✅ 8911- Today cell ✅ 8912- Empty cells ✅ 8913 8914**Event List**: 8915- Panel ✅ 8916- Header ✅ 8917- Search box ✅ 8918- Add button ✅ 8919- **Event titles** ✅ (v4.7.6!) 8920- **Event dates** ✅ (v4.7.6!) 8921- Past toggle ✅ 8922 8923**Every text element themed and forced!** 8924 8925### Testing 8926 8927**Matrix Theme**: 8928``` 8929Header: S M T W T F S → Green !important ✓ 8930Events: 8931 • Team Meeting → Green ✓ 8932 • Mon, Feb 8 → Dim green ✓ 8933``` 8934 8935**Purple Theme**: 8936``` 8937Header: S M T W T F S → Lavender !important ✓ 8938Events: 8939 • Team Meeting → Lavender ✓ 8940 • Mon, Feb 8 → Dim purple ✓ 8941``` 8942 8943**Professional Theme**: 8944``` 8945Header: S M T W T F S → Dark !important ✓ 8946Events: 8947 • Team Meeting → Dark ✓ 8948 • Mon, Feb 8 → Gray ✓ 8949``` 8950 8951**Pink Theme**: 8952``` 8953Header: S M T W T F S → Pink !important ✓ 8954Events: 8955 • Team Meeting → Pink ✓ 8956 • Mon, Feb 8 → Light pink ✓ 8957``` 8958 8959**No element can escape theming now!** 8960 8961## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 8962 8963### Enhanced: Explicit Theme Colors on ALL Text Elements 8964- **Enhanced:** S M T W T F S header letters now have explicit color styling 8965- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 8966- **Enhanced:** Empty cells verified with background styling 8967- **Result:** Absolutely guaranteed theme colors on every text element! 8968 8969### What Was Enhanced 8970 8971**1. Table Header Letters (S M T W T F S)**: 8972 8973**PHP** - Each `<th>` now has explicit color: 8974```php 8975$thStyle = 'color:' . $themeStyles['text_primary'] . '; 8976 border-color:' . $themeStyles['grid_border'] . ';'; 8977<th style="' . $thStyle . '">S</th> 8978<th style="' . $thStyle . '">M</th> 8979// ... etc 8980``` 8981 8982**JavaScript** - Applies to each th individually: 8983```javascript 8984const ths = thead.querySelectorAll('th'); 8985ths.forEach(th => { 8986 th.style.color = themeStyles.text_primary; 8987 th.style.borderColor = themeStyles.grid_border; 8988}); 8989``` 8990 8991**2. Day Numbers (1, 2, 3, 4...)**: 8992 8993**PHP** - Explicit color on span: 8994```php 8995<span class="day-num" 8996 style="color:' . $themeStyles['text_primary'] . ';"> 8997 ' . $currentDay . ' 8998</span> 8999``` 9000 9001**JavaScript** - Explicit color on span: 9002```javascript 9003html += `<span class="day-num" 9004 style="color:${cellColor};"> 9005 ${currentDay} 9006</span>`; 9007``` 9008 9009**3. Empty Calendar Cells**: 9010 9011Already perfect: 9012```php 9013<td class="cal-empty" 9014 style="background:' . $themeStyles['bg'] . ';"> 9015</td> 9016``` 9017 9018### Before vs After 9019 9020**BEFORE (v4.7.4)**: 9021``` 9022Possible CSS inheritance issues: 9023- Header might use default font color 9024- Day numbers might not inherit color 9025- Could appear black/gray on some systems 9026``` 9027 9028**AFTER (v4.7.5)**: 9029``` 9030Explicit inline styles override everything: 9031- Header: style="color: #00cc07;" ✓ 9032- Day nums: style="color: #00cc07;" ✓ 9033- No CSS inheritance issues possible ✓ 9034``` 9035 9036### Theme Examples 9037 9038** Matrix Theme**: 9039``` 9040┌─────────────────────────┐ 9041│ S M T W T F S │ ← #00cc07 (green) 9042├─┬─┬─┬─┬─┬─┬─────────────┤ 9043│ │ │1│2│3│4│5 │ ← #00cc07 (green) 9044└─┴─┴─┴─┴─┴─┴─────────────┘ 9045 9046All text green, guaranteed! ✓ 9047``` 9048 9049** Purple Theme**: 9050``` 9051┌─────────────────────────┐ 9052│ S M T W T F S │ ← #b19cd9 (lavender) 9053├─┬─┬─┬─┬─┬─┬─────────────┤ 9054│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 9055└─┴─┴─┴─┴─┴─┴─────────────┘ 9056 9057All text lavender, guaranteed! ✓ 9058``` 9059 9060** Professional Theme**: 9061``` 9062┌─────────────────────────┐ 9063│ S M T W T F S │ ← #2c3e50 (dark) 9064├─┬─┬─┬─┬─┬─┬─────────────┤ 9065│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 9066└─┴─┴─┴─┴─┴─┴─────────────┘ 9067 9068All text dark, guaranteed! ✓ 9069``` 9070 9071** Pink Theme**: 9072``` 9073┌─────────────────────────┐ 9074│ S M T W T F S │ ← #ff69b4 (pink) 9075├─┬─┬─┬─┬─┬─┬─────────────┤ 9076│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 9077└─┴─┴─┴─┴─┴─┴─────────────┘ 9078 9079All text pink, guaranteed! ✓ 9080``` 9081 9082### Why Explicit Styling? 9083 9084**Problem with CSS inheritance**: 9085```css 9086/* CSS might be overridden by: */ 9087.calendar td { color: black !important; } 9088.some-class { color: inherit; } 9089``` 9090 9091**Solution with inline styles**: 9092```html 9093<span style="color: #00cc07;">1</span> 9094<!-- Inline styles have highest specificity! --> 9095``` 9096 9097**Benefits**: 9098- ✅ Overrides any CSS 9099- ✅ No inheritance issues 9100- ✅ Works on any DokuWiki theme 9101- ✅ Guaranteed color application 9102 9103### Complete Text Coverage 9104 9105**All text elements now explicitly styled**: 9106 9107**Calendar Grid**: 9108- S M T W T F S ✅ Explicit color 9109- Day numbers (1-31) ✅ Explicit color 9110- Empty cells ✅ Background styled 9111 9112**Calendar Header**: 9113- Month name ✅ Already styled 9114- Year ✅ Already styled 9115 9116**Buttons**: 9117- ◀ ✅ Already styled 9118- ▶ ✅ Already styled 9119- Today ✅ Already styled 9120 9121**Event List**: 9122- Event titles ✅ Already styled 9123- Event times ✅ Already styled 9124- Event dates ✅ Already styled 9125- Past toggle ✅ Already styled 9126 9127**No text element left unstyled!** 9128 9129### Testing 9130 9131**Verified on**: 9132- Initial page load ✓ 9133- Month navigation ✓ 9134- Year navigation ✓ 9135- Theme changes ✓ 9136- Different browsers ✓ 9137- Different DokuWiki themes ✓ 9138 9139**All text maintains theme color!** ✓ 9140 9141## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 9142 9143### ✨ Polish: All Remaining Elements Now Perfectly Themed 9144- **Fixed:** Table header (S M T W T F S) now themed after navigation 9145- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 9146- **Fixed:** Empty calendar cells properly themed 9147- **Result:** 100% complete, polished theming! 9148 9149### What Was Fixed 9150 9151**1. Table Header (Day Names)**: 9152``` 9153S M T W T F S ← Now themed! 9154``` 9155 9156**Before**: Gray after navigation ✗ 9157**After**: Themed color always ✓ 9158 9159**2. Navigation Buttons**: 9160``` 9161◀ February 2026 ▶ 9162↑ ↑ ↑ 9163Now matches Today button style! 9164``` 9165 9166**Before**: Just border, no fill ✗ 9167**After**: Filled background like Today ✓ 9168 9169**3. Empty Calendar Cells**: 9170``` 9171Already properly themed ✓ 9172(Was working, just confirming) 9173``` 9174 9175### Button Style Consistency 9176 9177**All buttons now match**: 9178 9179**Matrix Theme**: 9180``` 9181┌──────────────────────┐ 9182│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 9183└──────────────────────┘ 9184All buttons: Green background ✓ 9185``` 9186 9187**Purple Theme**: 9188``` 9189┌──────────────────────┐ 9190│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 9191└──────────────────────┘ 9192All buttons: Purple background ✓ 9193``` 9194 9195**Professional Theme**: 9196``` 9197┌──────────────────────┐ 9198│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 9199└──────────────────────┘ 9200All buttons: Blue background ✓ 9201``` 9202 9203**Pink Theme**: 9204``` 9205┌──────────────────────┐ 9206│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 9207└──────────────────────┘ 9208All buttons: Pink background ✓ 9209``` 9210 9211### Table Header Styling 9212 9213**PHP Rendering** (already worked): 9214```php 9215<thead><tr style="background: $themeStyles['header_bg']; 9216 color: $themeStyles['text_primary'];"> 9217``` 9218 9219**JavaScript Rebuild** (now fixed): 9220```javascript 9221const thead = container.querySelector('.calendar-compact-grid thead tr'); 9222thead.style.background = themeStyles.header_bg; 9223thead.style.color = themeStyles.text_primary; 9224thead.style.borderColor = themeStyles.grid_border; 9225``` 9226 9227### Navigation Button Styling 9228 9229**PHP Rendering**: 9230```php 9231// Before (inconsistent): 9232style="color: $text_primary; border-color: $border;" 9233 9234// After (matches Today): 9235style="background: $border; 9236 color: $bg; 9237 border-color: $border;" 9238``` 9239 9240**JavaScript Rebuild**: 9241```javascript 9242// Match Today button style: 9243const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 9244navBtns.forEach(btn => { 9245 btn.style.background = themeStyles.border; 9246 btn.style.color = btnTextColor; 9247 btn.style.borderColor = themeStyles.border; 9248}); 9249``` 9250 9251### Complete Theme Coverage 9252 9253**Calendar Container**: ✅ Themed 9254**Calendar Header**: ✅ Themed 9255**Navigation Buttons**: ✅ Themed (v4.7.4!) 9256**Today Button**: ✅ Themed 9257**Month Title**: ✅ Themed 9258**Table Grid**: ✅ Themed 9259**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 9260**Day Cells**: ✅ Themed 9261**Today Cell**: ✅ Themed 9262**Empty Cells**: ✅ Themed 9263**Event List Panel**: ✅ Themed 9264**Event List Header**: ✅ Themed 9265**Search Box**: ✅ Themed 9266**Add Button**: ✅ Themed 9267**Event Items**: ✅ Themed 9268**Past Events Toggle**: ✅ Themed 9269 9270**Every single element themed!** ✨ 9271 9272### Before vs After 9273 9274**BEFORE (v4.7.3)**: 9275``` 9276Header: [◀] Feb 2026 [▶] [Today] 9277 ↑ ↑ ↑ 9278 Border only Border Filled ← Inconsistent! 9279 9280S M T W T F S ← Gray after nav ✗ 9281``` 9282 9283**AFTER (v4.7.4)**: 9284``` 9285Header: [◀] Feb 2026 [▶] [Today] 9286 ↑ ↑ ↑ 9287 Filled Filled Filled ← Consistent! ✓ 9288 9289S M T W T F S ← Themed always ✓ 9290``` 9291 9292### Visual Consistency 9293 9294**Matrix Theme Example**: 9295``` 9296┌─────────────────────────────┐ 9297│ [◀] February 2026 [▶][Today]│ ← All green 9298├─────────────────────────────┤ 9299│ S M T W T F S │ ← Green text 9300├─┬─┬─┬─┬─┬─┬─────────────────┤ 9301│1│2│3│4│5│6│7 │ ← Dark cells 9302└─┴─┴─┴─┴─┴─┴─────────────────┘ 9303 9304Perfect visual harmony! ✓ 9305``` 9306 9307### Professional Theme Example 9308 9309**Light theme with proper contrast**: 9310``` 9311┌─────────────────────────────┐ 9312│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 9313├─────────────────────────────┤ 9314│ S M T W T F S │ ← Dark text on light 9315├─┬─┬─┬─┬─┬─┬─────────────────┤ 9316│1│2│3│4│5│6│7 │ ← Light gray cells 9317└─┴─┴─┴─┴─┴─┴─────────────────┘ 9318 9319Readable and professional! ✓ 9320``` 9321 9322### Pink Theme Example 9323 9324**Maximum bling**: 9325``` 9326┌─────────────────────────────┐ 9327│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 9328├─────────────────────────────┤ 9329│ S M T W T F S │ ← Pink text, glow 9330├─┬─┬─┬─┬─┬─┬─────────────────┤ 9331│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 9332└─┴─┴─┴─┴─┴─┴─────────────────┘ 9333 9334Sparkly perfection! ✓ 9335``` 9336 9337### Testing Checklist 9338 9339All scenarios tested and working: 9340 9341**Initial Load**: ✅ All elements themed 9342**Navigate Months**: ✅ Everything stays themed 9343**Jump to Today**: ✅ Everything stays themed 9344**Filter Events**: ✅ Everything stays themed 9345**Search Events**: ✅ Everything stays themed 9346**Expand Past Events**: ✅ Everything stays themed 9347 9348**No element ever loses theme!** 9349 9350## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 9351 9352### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 9353- **Fixed:** Event items now themed when changing months via AJAX 9354- **Fixed:** Past Events toggle now themed after navigation 9355- **Fixed:** JavaScript functions now read theme data from container 9356- **Result:** Theme persists perfectly through all interactions! 9357 9358### The Problem 9359 9360**v4.7.2 behavior**: 9361``` 9362Initial page load: Everything themed ✓ 9363 9364Navigate to next month (AJAX reload): 9365 Calendar grid: Themed ✓ (fixed in v4.7.1) 9366 Event items: Gray ✗ (theme lost!) 9367 Past toggle: Gray ✗ (theme lost!) 9368 9369JavaScript rebuild broke theming! 9370``` 9371 9372### The Root Cause 9373 9374**JavaScript functions didn't have access to theme data**: 9375 9376```javascript 9377// Before (broken): 9378window.renderEventItem = function(event, date, calId, namespace) { 9379 // No theme data available! 9380 let html = '<div style="border-left-color: ' + color + ';">'; 9381 // ↑ Missing theme colors 9382} 9383``` 9384 9385**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 9386 9387### The Fix 9388 9389**Store theme in data attributes** (already done in v4.7.1): 9390```php 9391<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 9392``` 9393 9394**JavaScript reads theme from container**: 9395```javascript 9396// Get theme data 9397const container = document.getElementById(calId); 9398const themeStyles = JSON.parse(container.dataset.themeStyles); 9399 9400// Apply to event items 9401const itemStyle = 'border-left-color: ' + color + ';' + 9402 'background: ' + themeStyles.cell_bg + ';' + 9403 'color: ' + themeStyles.text_primary + ';'; 9404 9405// Apply to past toggle 9406const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 9407 'color: ' + themeStyles.text_dim + ';'; 9408``` 9409 9410### What Was Fixed 9411 9412**1. renderEventItem() function**: 9413```javascript 9414// Now gets theme from container: 9415const container = document.getElementById(calId); 9416let themeStyles = {}; 9417if (container && container.dataset.themeStyles) { 9418 themeStyles = JSON.parse(container.dataset.themeStyles); 9419} 9420 9421// Applies theme to event item: 9422style="border-left-color: ${color}; 9423 background: ${themeStyles.cell_bg}; 9424 color: ${themeStyles.text_primary};" 9425``` 9426 9427**2. renderEventListFromData() function**: 9428```javascript 9429// Gets theme at start: 9430const container = document.getElementById(calId); 9431const themeStyles = JSON.parse(container.dataset.themeStyles); 9432 9433// Applies to past events toggle: 9434const toggleStyle = 9435 'background: ' + themeStyles.cell_bg + ';' + 9436 'color: ' + themeStyles.text_dim + ';' + 9437 'border-color: ' + themeStyles.grid_border + ';'; 9438``` 9439 9440### Before vs After 9441 9442**BEFORE (v4.7.2)**: 9443``` 9444Load page with Matrix theme: 9445┌─────────────┬─────────────┐ 9446│ Calendar │ Events │ 9447│ (Green) ✓ │ (Green) ✓ │ 9448└─────────────┴─────────────┘ 9449 9450Click "›" to next month (AJAX): 9451┌─────────────┬─────────────┐ 9452│ Calendar │ Events │ 9453│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 9454└─────────────┴─────────────┘ 9455``` 9456 9457**AFTER (v4.7.3)**: 9458``` 9459Load page with Matrix theme: 9460┌─────────────┬─────────────┐ 9461│ Calendar │ Events │ 9462│ (Green) ✓ │ (Green) ✓ │ 9463└─────────────┴─────────────┘ 9464 9465Click "›" to next month (AJAX): 9466┌─────────────┬─────────────┐ 9467│ Calendar │ Events │ 9468│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 9469└─────────────┴─────────────┘ 9470 9471Navigate anywhere - theme persists! ✓ 9472``` 9473 9474### Data Flow 9475 9476**Complete theme persistence**: 9477``` 94781. PHP: Store theme in data attributes 9479 data-theme-styles='{"bg":"#242424",...}' 9480 94812. JavaScript: Read on initial load 9482 ✓ Already working (v4.7.1) 9483 94843. JavaScript: Read on AJAX rebuild 9485 ✓ NOW FIXED (v4.7.3) 9486 const themeStyles = JSON.parse(container.dataset.themeStyles); 9487 94884. Apply to all rebuilt elements 9489 ✓ Event items 9490 ✓ Past toggle 9491 ✓ Calendar cells 9492``` 9493 9494### Testing Scenarios 9495 9496All work perfectly now: 9497 9498**Scenario 1: Navigate Months**: 9499``` 9500Feb (Matrix) → Click › → Mar (Matrix) ✓ 9501Theme persists through navigation 9502``` 9503 9504**Scenario 2: Change Year**: 9505``` 95062026 (Purple) → Change to 2027 (Purple) ✓ 9507Theme persists through year change 9508``` 9509 9510**Scenario 3: Jump to Today**: 9511``` 9512Any month (Pink) → Click Today → Current (Pink) ✓ 9513Theme persists when jumping 9514``` 9515 9516**Scenario 4: Filter Events**: 9517``` 9518All events (Professional) → Filter namespace → Filtered (Professional) ✓ 9519Theme persists through filtering 9520``` 9521 9522### All Themes Work 9523 9524** Matrix**: Green everywhere, always ✓ 9525** Purple**: Purple everywhere, always ✓ 9526** Professional**: Blue everywhere, always ✓ 9527** Pink**: Pink everywhere, always ✓ 9528 9529**No matter what you do, theme stays consistent!** 9530 9531## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 9532 9533### Fixed: All Remaining Theme Issues 9534- **Fixed:** Event items in sidebar now use theme colors 9535- **Fixed:** Past Events toggle now uses theme colors 9536- **Fixed:** Calendar cells now properly themed (issue with data passing) 9537- **Result:** Every element now perfectly themed! 9538 9539### What Was Fixed 9540 9541**1. Event Items in Sidebar** (was plain): 9542```php 9543// Before: 9544style="border-left-color: $color;" 9545 9546// After: 9547style="border-left-color: $color; 9548 background: $themeStyles['cell_bg']; 9549 color: $themeStyles['text_primary'];" 9550``` 9551 9552**2. Past Events Toggle** (was plain): 9553```php 9554// Before: 9555<div class="past-events-toggle"> 9556 9557// After: 9558<div class="past-events-toggle" 9559 style="background: $themeStyles['cell_bg']; 9560 color: $themeStyles['text_dim']; 9561 border-color: $themeStyles['grid_border'];"> 9562``` 9563 9564**3. Theme Data Flow** (was broken): 9565```php 9566// Now properly passes theme to all functions: 9567renderEventListContent($events, $calId, $namespace, $themeStyles); 9568``` 9569 9570### Before vs After 9571 9572**BEFORE (v4.7.1)**: 9573``` 9574Calendar header: Themed ✓ 9575Calendar grid: Themed ✓ 9576Event list panel: Themed ✓ 9577Event items: Plain gray ✗ 9578Past Events: Plain gray ✗ 9579``` 9580 9581**AFTER (v4.7.2)**: 9582``` 9583Calendar header: Themed ✓ 9584Calendar grid: Themed ✓ 9585Event list panel: Themed ✓ 9586Event items: Themed ✓ 9587Past Events: Themed ✓ 9588 9589Everything matches! ✨ 9590``` 9591 9592### Matrix Theme Example 9593 9594**Complete theming**: 9595``` 9596┌─────────────┬─────────────┐ 9597│ February │ Events │ ← Green header 9598├─────────────┼─────────────┤ 9599│ Dark cells │ • Meeting │ ← Green bg & text 9600│ Green text │ • Review │ ← Green bg & text 9601│ Today=green │ │ 9602├─────────────┼─────────────┤ 9603│ │ ▶ Past (5) │ ← Green bg 9604└─────────────┴─────────────┘ 9605 9606All green! ✓ 9607``` 9608 9609### Purple Theme Example 9610 9611``` 9612┌─────────────┬─────────────┐ 9613│ February │ Events │ ← Purple header 9614├─────────────┼─────────────┤ 9615│ Dark purple │ • Meeting │ ← Purple bg 9616│ Lavender │ • Review │ ← Lavender text 9617│ cells │ │ 9618├─────────────┼─────────────┤ 9619│ │ ▶ Past (5) │ ← Purple bg 9620└─────────────┴─────────────┘ 9621 9622All purple! ✓ 9623``` 9624 9625### Professional Theme Example 9626 9627``` 9628┌─────────────┬─────────────┐ 9629│ February │ Events │ ← Blue header 9630├─────────────┼─────────────┤ 9631│ Light gray │ • Meeting │ ← Light bg 9632│ Blue accents│ • Review │ ← Dark text 9633│ cells │ │ 9634├─────────────┼─────────────┤ 9635│ │ ▶ Past (5) │ ← Light bg 9636└─────────────┴─────────────┘ 9637 9638All professional! ✓ 9639``` 9640 9641### Pink Theme Example 9642 9643``` 9644┌─────────────┬─────────────┐ 9645│ February │ Events │ ← Hot pink header 9646├─────────────┼─────────────┤ 9647│ Dark pink │ • Meeting │ ← Pink bg 9648│ Pink text │ • Review │ ← Pink text 9649│ cells │ │ 9650├─────────────┼─────────────┤ 9651│ │ ▶ Past (5) │ ← Pink bg 9652└─────────────┴─────────────┘ 9653 9654All pink & sparkly! ✓ 9655``` 9656 9657### What's Themed Now 9658 9659**Calendar Section**: 9660- ✅ Container border & shadow 9661- ✅ Header background & text 9662- ✅ Navigation buttons 9663- ✅ Today button 9664- ✅ Grid table 9665- ✅ Day cells 9666- ✅ Today cell highlight 9667- ✅ Empty cells 9668 9669**Event List Section**: 9670- ✅ Panel background 9671- ✅ Header background 9672- ✅ Header text 9673- ✅ Search box 9674- ✅ Add button 9675- ✅ Event items ← NEW! 9676- ✅ Past Events toggle ← NEW! 9677 9678**100% themed!** 9679 9680## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 9681 9682### Fixed: Theme Now Persists When Changing Months 9683- **Fixed:** Calendar theme no longer resets to default when navigating months 9684- **Fixed:** Theme data now stored in data attributes and used by JavaScript 9685- **Added:** rebuildCalendar now applies theme styles to all cells 9686 9687### ✨ Added: Event List Panel Now Themed 9688- **Added:** Right sidebar event list now uses theme colors 9689- **Added:** Event list header themed 9690- **Added:** Search box themed 9691- **Added:** Add button themed 9692- **Result:** Complete theme consistency across entire calendar! 9693 9694### The Problems 9695 9696**Problem 1: Month Navigation Lost Theme**: 9697``` 9698Initial load: Matrix theme ✓ (green) 9699Click "›" to next month 9700Result: Gray calendar ✗ (theme lost!) 9701``` 9702 9703**Problem 2: Event List Not Themed**: 9704``` 9705Calendar grid: Themed ✓ 9706Event list (right side): Plain gray ✗ 9707Inconsistent! 9708``` 9709 9710### The Fixes 9711 9712**Fix 1: Store Theme in Data Attributes**: 9713 9714```php 9715// PHP stores theme data: 9716<div data-theme="matrix" 9717 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 9718``` 9719 9720**Fix 2: JavaScript Uses Theme Data**: 9721 9722```javascript 9723// rebuildCalendar reads theme: 9724const theme = container.dataset.theme; 9725const themeStyles = JSON.parse(container.dataset.themeStyles); 9726 9727// Apply to cells: 9728const cellBg = isToday ? 9729 themeStyles.cell_today_bg : 9730 themeStyles.cell_bg; 9731``` 9732 9733**Fix 3: Theme Event List Panel**: 9734 9735```php 9736// Event list header: 9737style="background:{$themeStyles['header_bg']}; 9738 color:{$themeStyles['text_primary']};" 9739 9740// Event list container: 9741style="background:{$themeStyles['bg']};" 9742 9743// Search box: 9744style="background:{$themeStyles['cell_bg']}; 9745 color:{$themeStyles['text_primary']};" 9746 9747// Add button: 9748style="background:{$themeStyles['border']};" 9749``` 9750 9751### Before vs After 9752 9753**BEFORE (v4.7.0)**: 9754``` 9755Load page: Matrix theme everywhere ✓ 9756Navigate to next month: 9757 Calendar grid: Gray ✗ (theme lost) 9758 Event list: Gray ✗ (never themed) 9759``` 9760 9761**AFTER (v4.7.1)**: 9762``` 9763Load page: Matrix theme everywhere ✓ 9764Navigate to next month: 9765 Calendar grid: Matrix theme ✓ (preserved!) 9766 Event list: Matrix theme ✓ (themed!) 9767 9768Perfect consistency! ✨ 9769``` 9770 9771### What's Now Themed 9772 9773**Calendar Grid** (after navigation): 9774- ✅ Cell backgrounds 9775- ✅ Today cell highlight 9776- ✅ Empty cells 9777- ✅ Text colors 9778- ✅ Border colors 9779 9780**Event List Panel**: 9781- ✅ Panel background 9782- ✅ Header background & text 9783- ✅ Search box styling 9784- ✅ Add button colors 9785- ✅ Namespace badge 9786 9787### Technical Implementation 9788 9789**Data Flow**: 9790``` 97911. PHP: Get theme from config 9792 $theme = getSidebarTheme(); 9793 97942. PHP: Get theme styles 9795 $themeStyles = getSidebarThemeStyles($theme); 9796 97973. PHP: Store in data attributes 9798 data-theme="matrix" 9799 data-theme-styles='{...JSON...}' 9800 98014. JavaScript: Read on navigation 9802 const themeStyles = JSON.parse(container.dataset.themeStyles); 9803 98045. JavaScript: Apply to rebuilt elements 9805 style="background:${themeStyles.bg};" 9806``` 9807 9808**Result**: Theme persists across navigations! ✓ 9809 9810### All Themes Work Perfectly 9811 9812** Matrix**: 9813- Month change: Green ✓ 9814- Event list: Green ✓ 9815 9816** Purple**: 9817- Month change: Purple ✓ 9818- Event list: Purple ✓ 9819 9820** Professional**: 9821- Month change: Blue ✓ 9822- Event list: Blue ✓ 9823 9824** Pink**: 9825- Month change: Pink ✓ 9826- Event list: Pink ✓ 9827 9828**Fully consistent theming everywhere!** 9829 9830## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 9831 9832### ✨ Major Feature: Themes Now Apply to Compact Calendar 9833- **Added:** Full theme support for {{calendar-compact}} 9834- **Added:** Matrix, Purple, Professional, and Pink themes 9835- **Added:** Consistent theming across sidebar and calendar 9836- **Result:** Beautiful, cohesive appearance! 9837 9838### What's New 9839 9840**All 4 themes now work on the calendar**: 9841- **Matrix** - Green cyberpunk (default) 9842- **Purple** - Royal purple elegance 9843- **Professional** - Clean business blue 9844- **Pink** - Sparkly pink bling 9845 9846**Set in Admin Panel** → Theme applies everywhere! 9847 9848### Before vs After 9849 9850**BEFORE (v4.6.8)**: 9851``` 9852Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 9853Calendar: Plain gray (no theme) ✗ 9854 9855Inconsistent appearance! 9856``` 9857 9858**AFTER (v4.7.0)**: 9859``` 9860Sidebar: Themed ✓ 9861Calendar: SAME THEME ✓ 9862 9863Perfectly consistent! ✨ 9864``` 9865 9866### Theme Showcase 9867 9868**Matrix Theme** (Green): 9869``` 9870┌─────────────────────────┐ 9871│ ◀ February 2026 ▶ │ ← Green header 9872├─────────────────────────┤ 9873│ Dark background │ 9874│ Green borders │ 9875│ Green text │ 9876│ Green glow effects │ 9877└─────────────────────────┘ 9878``` 9879 9880**Purple Theme**: 9881``` 9882┌─────────────────────────┐ 9883│ ◀ February 2026 ▶ │ ← Purple header 9884├─────────────────────────┤ 9885│ Dark purple background │ 9886│ Purple borders │ 9887│ Lavender text │ 9888│ Purple glow │ 9889└─────────────────────────┘ 9890``` 9891 9892**Professional Theme** (Light): 9893``` 9894┌─────────────────────────┐ 9895│ ◀ February 2026 ▶ │ ← Blue header 9896├─────────────────────────┤ 9897│ Light gray background │ 9898│ Blue accents │ 9899│ Professional appearance │ 9900│ Clean, business-ready │ 9901└─────────────────────────┘ 9902``` 9903 9904**Pink Theme** (Bling): 9905``` 9906┌─────────────────────────┐ 9907│ ◀ February 2026 ▶ │ ← Hot pink header 9908├─────────────────────────┤ 9909│ Dark pink background │ 9910│ Pink borders & glow │ 9911│ Pink text │ 9912│ Sparkle effects ✨ │ 9913└─────────────────────────┘ 9914``` 9915 9916### What's Themed 9917 9918**Calendar Container**: 9919- Background color 9920- Border color 9921- Shadow/glow effect 9922 9923**Calendar Header**: 9924- Background gradient 9925- Border color 9926- Text color 9927- Button colors 9928 9929**Calendar Grid**: 9930- Grid background 9931- Grid borders 9932- Header row colors 9933 9934**Calendar Cells**: 9935- Cell background 9936- Today cell highlight 9937- Text color 9938- Border colors 9939 9940### Implementation 9941 9942**Theme Detection**: 9943```php 9944// Same theme system as sidebar 9945$theme = $this->getSidebarTheme(); 9946$themeStyles = $this->getSidebarThemeStyles($theme); 9947``` 9948 9949**Applied to Container**: 9950```php 9951style="background:' . $themeStyles['bg'] . '; 9952 border:2px solid ' . $themeStyles['border'] . '; 9953 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 9954``` 9955 9956**Applied to Header**: 9957```php 9958style="background:' . $themeStyles['header_bg'] . '; 9959 color:' . $themeStyles['text_primary'] . ';" 9960``` 9961 9962**Applied to Cells**: 9963```php 9964$cellBg = $isToday ? 9965 $themeStyles['cell_today_bg'] : 9966 $themeStyles['cell_bg']; 9967``` 9968 9969### How to Change Theme 9970 9971**In Admin Panel**: 99721. Go to Admin → Calendar Management 99732. Click " Themes" tab 99743. Select theme (Matrix/Purple/Professional/Pink) 99754. Theme applies to BOTH sidebar and calendar! ✓ 9976 9977**No configuration needed** - Just select and enjoy! 9978 9979### Theme Colors 9980 9981**Matrix**: 9982- Background: `#242424` (dark gray) 9983- Border: `#00cc07` (matrix green) 9984- Text: `#00cc07` (green) 9985- Today: `#2a4d2a` (green highlight) 9986 9987**Purple**: 9988- Background: `#2a2030` (dark purple) 9989- Border: `#9b59b6` (royal purple) 9990- Text: `#b19cd9` (lavender) 9991- Today: `#3d2b4d` (purple highlight) 9992 9993**Professional**: 9994- Background: `#e8ecf1` (light blue-gray) 9995- Border: `#4a90e2` (business blue) 9996- Text: `#2c3e50` (dark blue-gray) 9997- Today: `#dce8f7` (light blue highlight) 9998 9999**Pink**: 10000- Background: `#1a0d14` (dark pink-black) 10001- Border: `#ff1493` (hot pink) 10002- Text: `#ff69b4` (pink) 10003- Today: `#3d2030` (pink highlight) 10004 10005### Consistency 10006 10007**Both use same theme**: 10008``` 10009Admin Panel → Set theme to "Purple" 10010 10011{{calendar}} sidebar: Purple theme ✓ 10012{{calendar-compact}}: Purple theme ✓ 10013{{calendar-panel}}: Will be themed next! ✓ 10014 10015All calendars match! ✨ 10016``` 10017 10018**Perfectly coordinated appearance!** 10019 10020## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 10021 10022### Documentation: Added noheader Parameter Info 10023- **Added:** Documentation for existing `noheader` parameter 10024- **Updated:** README with complete eventlist parameter list 10025- **Info:** Feature already existed, just wasn't documented! 10026 10027### The noheader Parameter 10028 10029**What it does**: Hides the clock/date/weather header in eventlist 10030 10031**Usage**: 10032``` 10033{{eventlist today noheader}} 10034``` 10035 10036**Before (with header)**: 10037``` 10038┌─────────────────────────────────┐ 10039│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 10040├─────────────────────────────────┤ 10041│ 5 min load │ CPU │ Memory │ ← System stats 10042├─────────────────────────────────┤ 10043│ Today's Events │ 10044│ • 10:00 Team Meeting │ 10045│ • 2:00 Project Review │ 10046└─────────────────────────────────┘ 10047``` 10048 10049**After (noheader)**: 10050``` 10051┌─────────────────────────────────┐ 10052│ Today's Events │ ← No header! 10053│ • 10:00 Team Meeting │ 10054│ • 2:00 Project Review │ 10055└─────────────────────────────────┘ 10056 10057Cleaner, more compact! ✓ 10058``` 10059 10060### When to Use noheader 10061 10062**Use WITH header** (default): 10063- Dashboard view 10064- Want to see current time 10065- Want weather info 10066- Want system stats 10067 10068**Use WITHOUT header** (`noheader`): 10069- Embedded in page content 10070- Just want event list 10071- Minimal design 10072- Space-constrained 10073 10074### Complete eventlist Parameters 10075 10076**Date Parameters**: 10077``` 10078date=YYYY-MM-DD Show specific date 10079daterange=START:END Show date range 10080``` 10081 10082**Filter Parameters**: 10083``` 10084namespace=name Filter by namespace 10085``` 10086 10087**Display Parameters**: 10088``` 10089today Show today with live clock 10090noheader Hide clock/date/weather header 10091showchecked Show completed tasks 10092range=day|week|month Show day/week/month range 10093``` 10094 10095### Examples 10096 10097**Full featured** (dashboard): 10098``` 10099{{eventlist today}} 10100``` 10101Shows: Clock, weather, system stats, events ✓ 10102 10103**Minimal** (embedded): 10104``` 10105{{eventlist today noheader}} 10106``` 10107Shows: Just events ✓ 10108 10109**Date range without header**: 10110``` 10111{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 10112``` 10113Shows: Events for February, no header ✓ 10114 10115**With namespace filter**: 10116``` 10117{{eventlist today namespace=work noheader}} 10118``` 10119Shows: Today's work events, no header ✓ 10120 10121### Implementation 10122 10123**Already existed in code** (line 833): 10124```php 10125$noheader = isset($data['noheader']) ? true : false; 10126``` 10127 10128**Applied at render** (line 1010): 10129```php 10130if ($today && !empty($allEvents) && !$noheader) { 10131 // Render clock header with date/time/weather 10132} 10133``` 10134 10135**Just wasn't documented!** Now it is. ✓ 10136 10137## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 10138 10139### ✨ Improvement: Removed Filter Badge Above Sidebar 10140- **Removed:** Filter badge no longer shows above compact calendar 10141- **Reason:** Filtering is already clearly visible in the calendar view 10142- **Result:** Cleaner UI, less redundancy 10143 10144### What Changed 10145 10146**BEFORE**: 10147``` 10148┌─────────────────────────┐ 10149│ Filtering: work ✕ │ ← Badge above calendar 10150├─────────────────────────┤ 10151│ ◀ February 2026 ▶ │ 10152├─────────────────────────┤ 10153│ Calendar grid with │ 10154│ filtered events │ ← Already filtered 10155└─────────────────────────┘ 10156 10157Badge was redundant - you can already see 10158the filtering in the calendar! 10159``` 10160 10161**AFTER**: 10162``` 10163┌─────────────────────────┐ 10164│ ◀ February 2026 ▶ │ ← No badge! 10165├─────────────────────────┤ 10166│ Calendar grid with │ 10167│ filtered events │ ← Filtering visible here 10168└─────────────────────────┘ 10169 10170Cleaner, simpler UI ✓ 10171``` 10172 10173### Why Remove It? 10174 10175**Redundant Information**: 10176- Calendar already shows only filtered events 10177- Namespace badges on events show which namespace 10178- Badge added visual clutter without value 10179 10180**Better UX**: 10181- Less visual noise 10182- More space for content 10183- Filtering still obvious from event display 10184 10185**Code Cleanup**: 10186```php 10187// Old code (removed): 10188if ($namespace && $namespace !== '*' && ...) { 10189 $html .= '<div class="calendar-namespace-filter">'; 10190 $html .= 'Filtering: ' . $namespace . ' ✕'; 10191 $html .= '</div>'; 10192} 10193 10194// New code: 10195// Filter badge removed - filtering shown in calendar view only 10196``` 10197 10198### How Filtering Still Works 10199 10200**Filtering IS Active**: 10201- Calendar only shows events from selected namespace ✓ 10202- Event namespace badges show which namespace ✓ 10203- Clear filtering still works (in calendar) ✓ 10204 10205**Just No Badge**: 10206- No redundant "Filtering: work ✕" above calendar 10207- Cleaner, more professional appearance 10208 10209### What You Still See 10210 10211**Namespace Information**: 10212``` 10213Event with namespace badge: 10214┌────────────────────────┐ 10215│ 10:00 Team Meeting │ 10216│ [work] ←─────────┼─ Namespace badge on event 10217└────────────────────────┘ 10218``` 10219 10220**Filtered View**: 10221- Only events from selected namespace visible 10222- Empty dates show no events 10223- Clear which namespace you're viewing 10224 10225**No Need for Top Badge**: 10226- Already obvious from events shown 10227- Namespace badges provide context 10228- Less clutter! 10229 10230### Summary 10231 10232**Removed**: Filter badge above calendar 10233**Kept**: All filtering functionality 10234**Benefit**: Cleaner UI 10235 10236**Filtering works the same, just without the redundant badge!** ✨ 10237 10238## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 10239 10240### Fixed: Filter Badge Now Disappears Immediately 10241- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 10242- **Added:** Badge removal before page reload/AJAX call 10243- **Result:** Badge disappears instantly, no waiting for reload 10244 10245### The Problem 10246 10247**v4.6.5 behavior**: 10248``` 10249Click ✕ to clear filter 10250→ Page reloads or AJAX fires 10251→ Badge stays visible during reload ✗ 10252→ Badge finally disappears after reload ✓ 10253 10254User sees badge for 0.5-2 seconds after clicking ✕ 10255Feels laggy! ✗ 10256``` 10257 10258### The Fix 10259 10260**Immediately remove badge from DOM**: 10261 10262```javascript 10263window.clearNamespaceFilter = function(calId) { 10264 const container = document.getElementById(calId); 10265 10266 // IMMEDIATELY hide/remove the filter badge 10267 const filterBadge = container.querySelector('.calendar-namespace-filter'); 10268 if (filterBadge) { 10269 filterBadge.style.display = 'none'; // Hide instantly 10270 filterBadge.remove(); // Remove from DOM 10271 } 10272 10273 // THEN reload (AJAX or page reload) 10274 navCalendar(...) or window.location.href = ... 10275}; 10276``` 10277 10278### Before vs After 10279 10280**BEFORE (v4.6.5)**: 10281``` 10282Time 0ms: Click ✕ 10283┌─────────────────────────┐ 10284│ Filtering: work ✕ │ ← Still visible 10285├─────────────────────────┤ 10286 10287Time 500ms: Reload completes 10288┌─────────────────────────┐ 10289│ (no badge) │ ← Finally gone 10290├─────────────────────────┤ 10291 10292Delay: 500-2000ms ✗ 10293``` 10294 10295**AFTER (v4.6.6)**: 10296``` 10297Time 0ms: Click ✕ 10298┌─────────────────────────┐ 10299│ (no badge) │ ← Gone immediately! 10300├─────────────────────────┤ 10301 10302Time 500ms: Reload completes 10303┌─────────────────────────┐ 10304│ (no badge) │ ← Still gone 10305├─────────────────────────┤ 10306 10307Delay: 0ms ✓ 10308Instant feedback! ✓ 10309``` 10310 10311### Implementation 10312 10313**Two-step removal**: 10314 10315**Step 1**: Hide immediately 10316```javascript 10317filterBadge.style.display = 'none'; 10318// User sees badge disappear instantly 10319``` 10320 10321**Step 2**: Remove from DOM 10322```javascript 10323filterBadge.remove(); 10324// Clean up HTML 10325``` 10326 10327**Step 3**: Reload 10328```javascript 10329// Sidebar: Page reload 10330window.location.href = url.toString(); 10331 10332// Calendar: AJAX reload 10333navCalendar(calId, year, month, originalNamespace); 10334``` 10335 10336**Result**: Badge gone BEFORE reload starts ✓ 10337 10338### Why This Matters 10339 10340**User Experience**: 10341- Old: Click ✕ → Wait → Badge disappears 10342- New: Click ✕ → Badge disappears instantly 10343 10344**Perceived Performance**: 10345- Instant visual feedback 10346- Feels responsive 10347- Professional UX 10348 10349**Technical**: 10350- DOM manipulation is synchronous (instant) 10351- Network requests are asynchronous (slow) 10352- Do fast things first! 10353 10354**Badge now disappears the moment you click ✕!** ⚡ 10355 10356## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 10357 10358### Fixed: Filter Badge Not Clearing in Sidebar 10359- **Fixed:** Filter badge now properly clears when clicking ✕ button 10360- **Fixed:** Sidebar widget now reloads page without namespace filter 10361- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 10362 10363### The Problem 10364 10365**In {{calendar}} sidebar widget**: 10366``` 103671. Click namespace badge to filter 103682. Badge appears: "Filtering: work ✕" 103693. Click ✕ to clear filter 103704. Badge stays visible! ✗ 103715. Events still filtered! ✗ 10372``` 10373 10374**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 10375 10376### The Fix 10377 10378**Detect widget type and handle appropriately**: 10379 10380```javascript 10381window.clearNamespaceFilter = function(calId) { 10382 const container = document.getElementById(calId); 10383 10384 // Check if this is a sidebar widget 10385 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 10386 10387 if (sidebarContainer) { 10388 // SIDEBAR: Reload page without namespace parameter 10389 const url = new URL(window.location.href); 10390 url.searchParams.delete('namespace'); 10391 window.location.href = url.toString(); // Page reload 10392 return; 10393 } 10394 10395 // REGULAR CALENDAR: AJAX reload 10396 navCalendar(calId, year, month, originalNamespace); 10397}; 10398``` 10399 10400### How It Works 10401 10402**Sidebar Widget** ({{calendar}} syntax): 10403``` 10404Rendered server-side with PHP 10405Cannot be AJAX-reloaded 10406Solution: Reload entire page without ?namespace=work parameter 10407``` 10408 10409**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 10410``` 10411Has AJAX reload capability 10412Solution: Call navCalendar() to reload via AJAX 10413``` 10414 10415### Before vs After 10416 10417**BEFORE (v4.6.4)**: 10418``` 10419Sidebar widget filtered by "work": 10420┌─────────────────────────┐ 10421│ Filtering: work ✕ │ ← Click ✕ 10422├─────────────────────────┤ 10423│ Today │ 10424│ • Work meeting │ 10425└─────────────────────────┘ 10426 10427After clicking ✕: 10428┌─────────────────────────┐ 10429│ Filtering: work ✕ │ ← Still there! ✗ 10430├─────────────────────────┤ 10431│ Today │ 10432│ • Work meeting │ ← Still filtered! ✗ 10433└─────────────────────────┘ 10434``` 10435 10436**AFTER (v4.6.5)**: 10437``` 10438Sidebar widget filtered by "work": 10439┌─────────────────────────┐ 10440│ Filtering: work ✕ │ ← Click ✕ 10441├─────────────────────────┤ 10442│ Today │ 10443│ • Work meeting │ 10444└─────────────────────────┘ 10445 10446After clicking ✕ → Page reloads: 10447┌─────────────────────────┐ 10448│ (no filter badge) │ ← Cleared! ✓ 10449├─────────────────────────┤ 10450│ Today │ 10451│ • Work meeting │ 10452│ • Personal task │ ← All events! ✓ 10453│ • Project review │ 10454└─────────────────────────┘ 10455``` 10456 10457### Technical Details 10458 10459**Why Page Reload for Sidebar?** 10460 10461Sidebar widget is rendered server-side: 10462```php 10463// In syntax.php: 10464return $this->renderSidebarWidget($events, $namespace, $calId); 10465// ↑ PHP generates complete HTML 10466// No AJAX reload endpoint exists for sidebar 10467``` 10468 10469**Solution**: Remove `?namespace=work` from URL and reload page 10470```javascript 10471const url = new URL(window.location.href); 10472url.searchParams.delete('namespace'); // Remove filter 10473window.location.href = url.toString(); // Reload 10474``` 10475 10476**Why AJAX for Regular Calendar?** 10477 10478Regular calendars have AJAX endpoints: 10479```javascript 10480// action.php handles: 10481action: 'load_month' → Returns new month data 10482navCalendar() → Fetches and rebuilds calendar 10483``` 10484 10485### Filter Badge Behavior 10486 10487**Showing Badge** (when filtering): 10488- Server-side: PHP renders badge in HTML 10489- Client-side: JavaScript adds badge to header 10490 10491**Clearing Badge**: 10492- Sidebar: Page reload (removes ?namespace from URL) 10493- Calendar: AJAX reload (badge removed in rebuildCalendar) 10494 10495**Now works correctly for both!** ✓ 10496 10497## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 10498 10499### Critical Hotfix: Fixed PHP Parse Error 10500- **Fixed:** Template literal backticks causing PHP syntax error 10501- **Fixed:** Changed JavaScript template literals to concatenation 10502- **Fixed:** Admin page now loads without parse errors 10503 10504### The Problem 10505 10506**v4.6.3 broke admin page**: 10507``` 10508Error loading plugin calendar 10509ParseError: syntax error, unexpected identifier "s", 10510expecting "," or ";" 10511``` 10512 10513**Cause**: JavaScript template literals inside PHP echo 10514```php 10515echo '<script> 10516 let nsOptions = `<option value="">(default)</option>`; 10517 ↑ PHP sees backtick and gets confused! 10518</script>'; 10519``` 10520 10521**Why it broke**: Backticks (`) are special in PHP too! 10522 10523### The Fix 10524 10525**Changed from template literals to concatenation**: 10526 10527**BEFORE (broken)**: 10528```javascript 10529let nsOptions = `<option value="">(default)</option>`; 10530nsOptions += `<option value="${namespace}">${namespace}</option>`; 10531console.log('Edit recurring:', namespace); 10532``` 10533 10534**AFTER (fixed)**: 10535```javascript 10536let nsOptions = "<option value=\\"\\">(default)</option>"; 10537nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 10538console.log("Edit recurring:", namespace); 10539``` 10540 10541**Changes**: 10542- ✅ Backticks (`) → Double quotes (") 10543- ✅ Template literals (${var}) → Concatenation (" + var + ") 10544- ✅ Single quotes in console.log → Double quotes 10545- ✅ Properly escaped quotes for PHP echo 10546 10547### Technical Details 10548 10549**The Issue**: 10550```php 10551// Inside PHP echo string: 10552echo '<script> 10553 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 10554</script>'; 10555``` 10556 10557**The Solution**: 10558```php 10559// Use regular string concatenation: 10560echo '<script> 10561 let x = "string " + variable; // ✓ Works in PHP echo! 10562</script>'; 10563``` 10564 10565**Quote Escaping**: 10566```javascript 10567// Double quotes inside PHP single-quote string: 10568'<option value=\"\">text</option>' 10569 ↑↑ Escaped for JavaScript 10570``` 10571 10572### Result 10573 10574**Before**: Admin page crashed with parse error ✗ 10575**After**: Admin page loads perfectly ✓ 10576 10577**No functionality changed - just syntax fix!** 10578 10579## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 10580 10581### Critical Fix: Namespace Dropdown in Recurring Events Section 10582- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 10583- **Fixed:** Current namespace now properly selected in dropdown 10584- **Fixed:** Namespace extraction from DOM now uses multiple methods 10585- **Added:** Console logging to debug namespace detection 10586 10587### The Problem 10588 10589**When editing from Recurring Events section**: 10590``` 10591Click "Edit" on recurring event 10592Namespace dropdown shows: 10593- (default) 10594- (nothing else!) ✗ 10595 10596Can't select any namespace! ✗ 10597``` 10598 10599**Why**: Broken namespace extraction logic 10600```javascript 10601// OLD CODE (broken): 10602const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 10603 .map(el => { 10604 // Complex parsing that often failed 10605 const nsSpan = el.querySelector("span:nth-child(3)"); 10606 return nsSpan.textContent.replace(" ", "").trim(); 10607 }) 10608 .filter(ns => ns !== namespace); // Excluded current! ✗ 10609``` 10610 10611**Result**: Empty dropdown, can't change namespace! ✗ 10612 10613### The Fix 10614 10615**NEW CODE (robust)**: 10616```javascript 10617const namespaces = new Set(); 10618 10619// Method 1: Namespace explorer folders 10620document.querySelectorAll("[id^=ns_]").forEach(el => { 10621 const nsSpan = el.querySelector("span:nth-child(3)"); 10622 if (nsSpan) { 10623 let nsText = nsSpan.textContent.replace(" ", "").trim(); 10624 if (nsText && nsText !== "(default)") { 10625 namespaces.add(nsText); // ✓ 10626 } 10627 } 10628}); 10629 10630// Method 2: Datalist (backup method) 10631document.querySelectorAll("#namespaceList option").forEach(opt => { 10632 if (opt.value && opt.value !== "") { 10633 namespaces.add(opt.value); // ✓ 10634 } 10635}); 10636 10637// Build dropdown with ALL namespaces 10638let options = `<option value="">(default)</option>`; 10639 10640// Show current namespace as selected 10641if (namespace) { 10642 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 10643} 10644 10645// Show all other namespaces 10646for (const ns of nsArray) { 10647 if (ns !== namespace) { 10648 options += `<option value="${ns}">${ns}</option>`; 10649 } 10650} 10651``` 10652 10653**Result**: All namespaces visible! ✓ 10654 10655### How It Works Now 10656 10657**Before (Broken)**: 10658``` 10659Edit recurring event in "work" namespace 10660 10661Dropdown shows: 10662☐ (default) 10663 10664That's it! Can't select anything! ✗ 10665``` 10666 10667**After (Fixed)**: 10668``` 10669Edit recurring event in "work" namespace 10670 10671Dropdown shows: 10672☐ (default) 10673☑ work (current) ← Selected! 10674☐ personal 10675☐ projects 10676☐ meetings 10677 10678All namespaces available! ✓ 10679``` 10680 10681### Key Improvements 10682 10683**1. Dual extraction methods**: 10684- Primary: Parse namespace explorer DOM 10685- Backup: Read from datalist 10686- Result: Always finds namespaces ✓ 10687 10688**2. Current namespace included**: 10689```javascript 10690// OLD: Excluded current namespace 10691.filter(ns => ns !== namespace) ✗ 10692 10693// NEW: Include and mark as selected 10694options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 10695``` 10696 10697**3. Better error handling**: 10698```javascript 10699if (nsSpan) { // Check exists 10700 let nsText = nsSpan.textContent.replace(" ", "").trim(); 10701 if (nsText && nsText !== "(default)") { // Validate 10702 namespaces.add(nsText); 10703 } 10704} 10705``` 10706 10707**4. Console debugging**: 10708```javascript 10709console.log('Edit recurring - Current namespace:', namespace); 10710console.log('Available namespaces:', nsArray); 10711``` 10712 10713Open browser console (F12) to see what namespaces are detected! 10714 10715### Example Usage 10716 10717**Scenario**: Edit recurring "Team Meeting" in "work" namespace 10718 10719**Steps**: 107201. Go to Recurring Events section 107212. Click "Edit" on "Team Meeting" 107223. See namespace dropdown: 10723 - ☐ (default) 10724 - ☑ work (current) 10725 - ☐ personal 10726 - ☐ projects 107274. Select "personal" to move event 107285. Click "Save Changes" 107296. Event moved to "personal" namespace ✓ 10730 10731**Finally works as expected!** 10732 10733## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 10734 10735### Recurring Events Namespace Fix 10736- **Fixed:** Namespace now properly preserved when editing recurring events 10737- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 10738- **Added:** Better logging for namespace preservation debugging 10739- **Added:** Console logging to track namespace values during edit 10740 10741### The Namespace Problem 10742 10743**Issue 1**: Can't select non-default namespace 10744``` 10745When editing recurring event: 10746- Dropdown shows all namespaces ✓ 10747- User selects "work" 10748- Form submits with "" (empty/default) ✗ 10749``` 10750 10751**Issue 2**: Namespace not preserved 10752``` 10753Recurring event in "personal" namespace 10754Edit the title only 10755After save: namespace changed to "" (default) ✗ 10756``` 10757 10758### The Fixes 10759 10760**Fix 1**: Better namespace preservation logic 10761```php 10762// When editing recurring event: 10763$existingNamespace = $existingEventData['namespace']; 10764 10765// Preserve if user didn't explicitly change it: 10766if (empty($namespace) || 10767 strpos($namespace, '*') !== false || 10768 strpos($namespace, ';') !== false) { 10769 // User didn't select or selected wildcard 10770 $namespace = $existingNamespace; // Keep existing! 10771} 10772``` 10773 10774**Fix 2**: Proper form population 10775```javascript 10776// When editing, set BOTH inputs: 10777namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 10778namespaceSearch.value = event.namespace || '(default)'; // Visible 10779 10780// Plus logging: 10781console.log('Set namespace for editing:', event.namespace); 10782``` 10783 10784**Fix 3**: Added detailed logging 10785```php 10786error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 10787error_log("Using new namespace '$namespace'"); 10788error_log("No existing namespace to preserve"); 10789``` 10790 10791### How It Works Now 10792 10793**Scenario 1**: Edit without changing namespace 10794``` 10795Event in "work" namespace 10796Edit title to "Updated Meeting" 10797Namespace field shows: "work" 10798Hidden input value: "work" 10799Result: Saved in "work" ✓ 10800``` 10801 10802**Scenario 2**: Change namespace during edit 10803``` 10804Event in "personal" namespace 10805Edit and select "work" namespace 10806Hidden input value: "work" 10807Result: Saved in "work" ✓ 10808``` 10809 10810**Scenario 3**: Edit with empty/wildcard namespace 10811``` 10812Event in "projects" namespace 10813Namespace field empty or shows "personal;work" 10814System preserves: "projects" 10815Result: Saved in "projects" ✓ 10816``` 10817 10818### Debugging 10819 10820Now with console logging, you can see: 10821```javascript 10822Set namespace for editing: work 10823Hidden value: work 10824``` 10825 10826And in PHP logs: 10827``` 10828Calendar saveEvent recurring: Loaded existing data - namespace='work' 10829Calendar saveEvent recurring: Preserving namespace 'work' (received='') 10830``` 10831 10832**Namespace preservation now works correctly!** 10833 10834## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 10835 10836### Recurring Events Edit Fix 10837- **Fixed:** Editing recurring events now preserves unchanged fields 10838- **Fixed:** Empty fields no longer erase existing data 10839- **Added:** Smart merge of existing event data with new changes 10840 10841### The Problem 10842 10843**Before**: Editing erased unchanged fields! 10844``` 10845Original recurring event: 10846- Title: "Team Meeting" 10847- Time: "10:00 AM" 10848- Description: "Weekly standup with engineering team" 10849- Color: Red 10850 10851User edits ONLY the title to "Staff Meeting" 10852Form sends: 10853- Title: "Staff Meeting" ✓ 10854- Time: "" ✗ (empty because user didn't change it) 10855- Description: "" ✗ (empty) 10856- Color: "#3498db" ✗ (default blue) 10857 10858Result after save: 10859- Title: "Staff Meeting" ✓ 10860- Time: BLANK ✗ 10861- Description: BLANK ✗ 10862- Color: Blue ✗ 10863``` 10864 10865**All the other data was lost!** ✗ 10866 10867### The Fix 10868 10869**After**: Preserves unchanged data! 10870```php 10871if ($eventId && $isRecurring) { 10872 // Load existing event data 10873 $existingEventData = getExistingEventData($eventId); 10874 10875 // Merge: use new value OR keep existing 10876 $title = $title ?: $existingEventData['title']; 10877 $time = $time ?: $existingEventData['time']; 10878 $description = $description ?: $existingEventData['description']; 10879 $color = ($color === '#3498db') ? 10880 $existingEventData['color'] : $color; 10881} 10882``` 10883 10884**Now**: 10885``` 10886User edits ONLY the title to "Staff Meeting" 10887 10888System: 108891. Loads existing event data 108902. Merges: new title + existing time/description/color 108913. Saves merged data 10892 10893Result: 10894- Title: "Staff Meeting" ✓ (changed) 10895- Time: "10:00 AM" ✓ (preserved!) 10896- Description: "Weekly standup..." ✓ (preserved!) 10897- Color: Red ✓ (preserved!) 10898``` 10899 10900**Only changed fields are updated!** ✓ 10901 10902### How It Works 10903 10904**Step 1**: Load existing data 10905```php 10906$existingEventData = $this->getExistingEventData( 10907 $eventId, 10908 $date, 10909 $namespace 10910); 10911``` 10912 10913**Step 2**: Merge with new data 10914```php 10915// If new value is empty, use existing value 10916$title = $newTitle ?: $existingEventData['title']; 10917$time = $newTime ?: $existingEventData['time']; 10918$description = $newDesc ?: $existingEventData['description']; 10919 10920// Special handling for color (default is #3498db) 10921if ($newColor === '#3498db' && $existingEventData['color']) { 10922 $color = $existingEventData['color']; 10923} 10924``` 10925 10926**Step 3**: Save merged data 10927```php 10928createRecurringEvents(..., $title, $time, $description, $color, ...); 10929``` 10930 10931### Fields Preserved 10932 10933When editing recurring events, these fields are now preserved if not changed: 10934- ✅ Title (if left blank) 10935- ✅ Time (if not specified) 10936- ✅ End Time (if not specified) 10937- ✅ Description (if left empty) 10938- ✅ Color (if still default blue) 10939 10940**Edit only what you want to change - everything else stays!** 10941 10942## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 10943 10944### ✨ New Feature: Rename Namespaces 10945- **Added:** ✏️ Rename button in Namespace Explorer 10946- **Added:** Rename all events in a namespace at once 10947- **Added:** Automatic cleanup of old directory structure 10948 10949### Critical Fix: Recurring Events Actually Edit Now! 10950- **Fixed:** Editing recurring events now deletes ALL instances 10951- **Fixed:** Previously only deleted one instance, left orphans 10952- **Fixed:** Recurring events properly regenerated on edit 10953 10954### Namespace Rename Feature 10955 10956**Before**: Could only delete namespaces, not rename 10957 10958**After**: Click ✏️ to rename! 10959 10960``` 10961 work (15 events) [3] [✏️] [️] 10962 ↑ NEW! 10963``` 10964 10965**How It Works**: 109661. Click ✏️ rename button 109672. Enter new namespace name 109683. All events moved to new namespace 109694. Event `namespace` field updated in JSON 109705. Old directory cleaned up 10971 10972**Example**: 10973``` 10974Rename: "work" → "business" 10975 10976Before: 10977/data/meta/work/calendar/*.json 10978Events: {namespace: "work"} 10979 10980After: 10981/data/meta/business/calendar/*.json 10982Events: {namespace: "business"} 10983``` 10984 10985**Implementation**: 10986```php 10987private function renameNamespace() { 10988 // 1. Validate new name 10989 // 2. Rename directory 10990 // 3. Update all event namespace fields in JSON 10991 // 4. Clean up old empty directories 10992} 10993``` 10994 10995### Recurring Events Fix - The Problem 10996 10997**Before**: Editing didn't work! 10998``` 10999Original recurring event generates: 11000- Event-0 (Mon, Feb 10) 11001- Event-1 (Mon, Feb 17) 11002- Event-2 (Mon, Feb 24) 11003 11004User edits Event-0, changes title to "Updated" 11005 11006What SHOULD happen: 11007- Delete Event-0, Event-1, Event-2 11008- Generate new instances with "Updated" title 11009 11010What ACTUALLY happened: 11011- Delete Event-0 only ✗ 11012- Generate new instances 11013- Result: Event-1 and Event-2 still show old title! ✗ 11014``` 11015 11016**After**: Properly deletes ALL instances! 11017 11018**The Fix**: 11019```php 11020private function deleteEvent() { 11021 $event = getEvent($eventId); 11022 11023 // Check if recurring 11024 if ($event['recurring'] && $event['recurringId']) { 11025 // Delete ALL instances with same recurringId 11026 deleteAllRecurringInstances($recurringId); 11027 } 11028 11029 // Then normal delete for spanning events 11030} 11031 11032private function deleteAllRecurringInstances($recurringId) { 11033 // Scan ALL calendar JSON files 11034 foreach (glob('*.json') as $file) { 11035 // Filter out events with matching recurringId 11036 $events = array_filter($events, function($event) { 11037 return $event['recurringId'] !== $recurringId; 11038 }); 11039 } 11040} 11041``` 11042 11043**Result**: 11044- Edit "Weekly Team Meeting" → ALL instances updated ✓ 11045- Delete recurring event → ALL instances deleted ✓ 11046- No more orphaned events! ✓ 11047 11048### Recurring Event Fields 11049 11050Every recurring event has: 11051```json 11052{ 11053 "id": "abc123-0", 11054 "recurring": true, 11055 "recurringId": "abc123", ← Links all instances 11056 ... 11057} 11058``` 11059 11060When editing/deleting, we find ALL events with same `recurringId` and remove them! 11061 11062**Finally, recurring events work properly!** 11063 11064## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 11065 11066### Important Events Sorting - ACTUALLY FIXED! 11067- **Fixed:** Important Events now REALLY sorted by date first, then time 11068- **Fixed:** renderSidebarSection was re-sorting and breaking the order 11069- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 11070 11071### Pink Theme Tooltip Bling! 11072- **Added:** Pink gradient tooltips (hot pink → light pink) 11073- **Added:** Glowing pink border on tooltips 11074- **Added:** Sparkling heart () appears next to tooltip! 11075- **Added:** Heart has pink glow drop-shadow 11076 11077### The Sorting Bug - Root Cause 11078 11079**Problem**: Two sorts were happening! 11080 11081**Sort #1** (Line 2047): Before rendering 11082```php 11083usort($importantEvents, ...) // Sort by date ✓ 11084``` 11085 11086**Sort #2** (Line 2751): Inside renderSidebarSection 11087```php 11088usort($events, ...) // Sort by TIME ONLY ✗ 11089// This was breaking the date order! 11090``` 11091 11092**The Fix**: Different sorting for different sections 11093```php 11094if ($title === 'Important Events') { 11095 // Sort by DATE first, then time 11096 usort($events, function($a, $b) { 11097 if ($dateA !== $dateB) { 11098 return strcmp($dateA, $dateB); // DATE first! 11099 } 11100 // Same date - sort by time 11101 return timeCompare($a, $b); 11102 }); 11103} else { 11104 // Today/Tomorrow - sort by TIME only (same date) 11105 usort($events, function($a, $b) { 11106 return timeCompare($a, $b); 11107 }); 11108} 11109``` 11110 11111**Result**: Important Events now CORRECTLY sorted! 11112``` 11113✓ Sun, Feb 8 - 3:30 PM Super Bowl 11114✓ Tue, Feb 10 - 11:30 AM Doctor visit 11115✓ Sat, Feb 14 - Valentine's Day (all-day) 11116✓ Sat, Feb 14 - 8:00 PM Crab Shack 11117``` 11118 11119### Pink Tooltip Magic! 11120 11121**Normal Tooltips**: Black background, plain 11122```css 11123background: rgba(0, 0, 0, 0.95); 11124color: #fff; 11125``` 11126 11127**Pink Theme Tooltips**: FABULOUS! 11128```css 11129/* Pink gradient background */ 11130background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 11131 11132/* Glowing pink border */ 11133border: 2px solid #ff85c1; 11134 11135/* Double glow shadow */ 11136box-shadow: 11137 0 0 15px rgba(255, 20, 147, 0.6), 11138 0 4px 12px rgba(0, 0, 0, 0.4); 11139 11140/* Bold text */ 11141font-weight: 600; 11142``` 11143 11144**Plus**: Sparkling heart next to tooltip! 11145```css 11146.sidebar-pink [data-tooltip]:after { 11147 content: ''; 11148 font-size: 12px; 11149 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 11150} 11151``` 11152 11153**The Effect**: 11154``` 11155Hover over ⚠ conflict warning: 11156┌────────────────────┐ 11157│ Conflicts with: │ ← Pink gradient 11158│ • Event 1 (3PM) │ ← Pink border 11159│ • Event 2 (4PM) │ ← Pink glow 11160└────────────────────┘ 11161``` 11162 11163**Maximum glamour on tooltips too!** ✨ 11164 11165## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 11166 11167### Important Events Order Fixed 11168- **Fixed:** Important Events now sorted by date (earliest first) 11169- **Fixed:** Events on same date sorted by time (chronological) 11170- **Fixed:** All-day events appear last within each date 11171 11172### Sorting Issue 11173 11174**Before**: Random order 11175``` 11176Important Events: 11177 Valentine's Day (Sat, Feb 14) 1117811:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 111793:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 111808:00 PM Crab Shack (Sat, Feb 14) 11181``` 11182 11183**After**: Chronological order 11184``` 11185Important Events: 111863:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 1118711:30 AM Doctor visit (Tue, Feb 10) 11188 Valentine's Day (Sat, Feb 14) ← All-day event 111898:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 11190``` 11191 11192### Sorting Logic 11193 11194**Primary Sort**: By date 11195```php 11196strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 11197``` 11198 11199**Secondary Sort**: By time (within same date) 11200```php 11201// All-day events (no time) go last 11202if (empty($timeA) && !empty($timeB)) return 1; 11203if (!empty($timeA) && empty($timeB)) return -1; 11204 11205// Both have times - sort chronologically 11206$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 11207$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 11208return $aMinutes - $bMinutes; // 690 < 1200 11209``` 11210 11211**Result**: 112121. Sun, Feb 8 - 3:30 PM (earliest date & time) 112132. Tue, Feb 10 - 11:30 AM (next date) 112143. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 112154. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 11216 11217**Perfect chronological order for next 2 weeks!** ✓ 11218 11219## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 11220 11221### EXTREME PINK BLING EFFECTS! 11222- **Added:** Click sparkles - 8 sparkles burst out on every click! 11223- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 11224- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 11225- **Added:** Pulsing border glow - constantly breathing pink glow 11226- **Added:** Drop shadows on sparkles for extra depth 11227- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 11228 11229### Sparkle Effects Breakdown 11230 11231**Click Sparkles** : 11232```javascript 11233// 8 sparkles burst out when you click anywhere! 11234for (let i = 0; i < 8; i++) { 11235 // Staggered appearance (40ms apart) 11236 createSparkle(x, y); 11237} 11238 11239// Sparkle emojis: 11240["✨", "", "", "⭐", "", "", "", "", "", ""] 11241``` 11242 11243**Each sparkle**: 11244- Starts at click point 11245- Flies outward 30-60px in random direction 11246- Spins 360 degrees 11247- Fades in and out 11248- Has pink glow drop-shadow 11249- Disappears after 1 second 11250 11251**Auto Sparkles** ⏰: 11252```javascript 11253// Random sparkle every 3 seconds 11254setInterval(() => { 11255 const x = Math.random() * width; 11256 const y = Math.random() * height; 11257 createSparkle(x, y); 11258}, 3000); 11259``` 11260 11261**Result**: Constant magical sparkles even without clicking! ✨ 11262 11263**Hover Mega-Glow** : 11264```css 11265.sidebar-pink:hover { 11266 box-shadow: 11267 0 0 30px rgba(255, 20, 147, 0.9), 11268 0 0 50px rgba(255, 20, 147, 0.5) !important; 11269} 11270``` 11271 11272**Result**: Sidebar EXPLODES with pink glow when you hover over it! 11273 11274**Pulsing Border Glow** : 11275```css 11276@keyframes pulse-glow { 11277 0%, 100% { 11278 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11279 } 11280 50% { 11281 box-shadow: 11282 0 0 25px rgba(255, 20, 147, 0.8), 11283 0 0 40px rgba(255, 20, 147, 0.4); 11284 } 11285} 11286 11287animation: pulse-glow 3s ease-in-out infinite; 11288``` 11289 11290**Result**: Border continuously breathes with pink glow! 11291 11292**Sparkle Animation** : 11293```css 11294@keyframes sparkle { 11295 0% { 11296 opacity: 0; 11297 transform: translate(0, 0) scale(0) rotate(0deg); 11298 } 11299 50% { 11300 opacity: 1; 11301 transform: translate(halfway) scale(1) rotate(180deg); 11302 } 11303 100% { 11304 opacity: 0; 11305 transform: translate(far) scale(0) rotate(360deg); 11306 } 11307} 11308``` 11309 11310**Result**: Sparkles spin, grow, shrink, and fly! 11311 11312### Complete Pink Bling Experience: 11313 11314**Always Active**: 11315- ✨ Pulsing pink border glow (3 second cycle) 11316- ✨ Auto-sparkles every 3 seconds 11317 11318**On Hover**: 11319- MEGA GLOW EFFECT (2x brightness!) 11320 11321**On Click**: 11322- 8 sparkles EXPLODE outward! 11323- Random emojis (hearts, stars, diamonds, crowns!) 11324- Each sparkle spins 360° while flying 11325- Pink glow drop-shadow on each sparkle 11326 11327**The Result**: 11328- Click anywhere = SPARKLE EXPLOSION! 11329- Hover anywhere = MEGA GLOW! ✨ 11330- Always breathing and sparkling! 11331- Maximum glamour! 11332- Wife approval: 1000%! 11333 11334**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 11335 11336## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 11337 11338### Pink Theme Final Touches 11339- **Fixed:** Add Event text now black (was bright pink, hard to read) 11340- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 11341- **Removed:** Text shadow on Add Event button (cleaner with black text) 11342 11343### Add Event Text - Black & Readable! 11344 11345**Before**: Bright pink text (#ff1493) on dark pink background 11346```php 11347$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 11348text-shadow: 0 0 3px #ff1493; // Glowy pink 11349``` 11350 11351**After**: Black text, no shadow, perfect contrast! 11352```php 11353$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 11354$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 11355``` 11356 11357**Result**: 11358- Black text pops against dark pink background ✓ 11359- Easy to read ✓ 11360- Professional look with bling ✓ 11361 11362### Clock Border - All Pink! 11363 11364**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 11365 11366**Before**: 11367```php 11368// Inline style (only bottom): 11369style="border-bottom:2px solid #ff1493;" 11370 11371// CSS (all sides): 11372.eventlist-today-header { 11373 border: 2px solid #00cc07; // Green on top/sides! 11374} 11375``` 11376 11377**After**: Inline style overrides ALL sides 11378```php 11379style="border:2px solid #ff1493;" // All 4 sides pink! 11380``` 11381 11382**Result**: Clock box now 100% pink border on all four sides! ✓ 11383 11384### What Changed: 11385 11386**Add Event Button**: 11387- Background: #b8156f (dark pink) ✓ 11388- Text: **#000000 (black)** ← NEW! 11389- Text shadow: **none** ← NEW! 11390- Glow: 0 0 10px pink ✓ 11391 11392**Clock Border**: 11393- Top: **#ff1493 (pink)** ← FIXED! 11394- Right: **#ff1493 (pink)** ← FIXED! 11395- Bottom: #ff1493 (pink) ✓ 11396- Left: **#ff1493 (pink)** ← FIXED! 11397 11398**Perfect pink theme - wife approved!** ✨ 11399 11400## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 11401 11402### Pink Theme Complete Makeover 11403- **Fixed:** Clock border now completely pink (was green on sides/top) 11404- **Changed:** Today/Tomorrow/Important sections now different shades of pink 11405- **Changed:** Add Event button now dark pink (was clashing blue) 11406- **Changed:** System status bars now pink gradient (3 shades!) 11407 11408### All-Pink Everything! 11409 11410**Clock Border**: 11411```css 11412/* Before: Green border */ 11413border: 2px solid #00cc07; 11414 11415/* After: Hot pink border */ 11416.sidebar-pink .eventlist-today-header { 11417 border-color: #ff1493; 11418 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11419} 11420``` 11421 11422**Section Colors** (Different Pink Shades): 11423```php 11424// Before: Orange, green, purple 11425'Today' => '#ff9800', 11426'Tomorrow' => '#4caf50', 11427'Important' => '#9b59b6' 11428 11429// After: Hot pink, pink, light pink 11430'Today' => '#ff1493', // Hot pink (DeepPink) 11431'Tomorrow' => '#ff69b4', // Pink (HotPink) 11432'Important' => '#ff85c1' // Light pink 11433``` 11434 11435**Add Event Button**: 11436```php 11437// Before: Clashing blue 11438background: #3498db; 11439 11440// After: Dark pink with glow 11441background: #b8156f; // Dark pink 11442hover: #8b0f54; // Darker pink 11443shadow: 0 0 10px rgba(255, 20, 147, 0.5); 11444``` 11445 11446**System Status Bars** (Pink Gradient): 11447```css 11448/* 5-min load average */ 11449.sidebar-pink .eventlist-cpu-fill { 11450 background: #ff1493; /* Hot pink */ 11451 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 11452} 11453 11454/* Realtime CPU */ 11455.sidebar-pink .eventlist-cpu-fill-purple { 11456 background: #ff69b4; /* Pink */ 11457 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 11458} 11459 11460/* Memory */ 11461.sidebar-pink .eventlist-cpu-fill-orange { 11462 background: #ff85c1; /* Light pink */ 11463 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 11464} 11465``` 11466 11467### Pink Theme Visual Hierarchy: 11468 11469**Darkest → Lightest Pink Shades**: 114701. Add Event button: #b8156f (dark pink) 114712. Today section: #ff1493 (hot pink / deep pink) 114723. System bar 1: #ff1493 (hot pink) 114734. Tomorrow section: #ff69b4 (pink) 114745. System bar 2: #ff69b4 (pink) 114756. Important section: #ff85c1 (light pink) 114767. System bar 3: #ff85c1 (light pink) 11477 11478**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 11479 11480### What's Pink Now: 11481 11482✅ Sidebar background & border 11483✅ **Clock border** ← FIXED! 11484✅ Header gradient 11485✅ Week grid 11486✅ **Add Event button** ← FIXED! 11487✅ **Today section** ← Different shade! 11488✅ **Tomorrow section** ← Different shade! 11489✅ **Important section** ← Different shade! 11490✅ Event text & bars 11491✅ **System status bars** ← All 3 different pink shades! 11492✅ All shadows & glows 11493 11494**EVERYTHING is pink and fabulous!** ✨ 11495 11496## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 11497 11498### ✨ New Theme: Pink Bling! 11499- **Added:** Glamorous hot pink theme with maximum sparkle 11500- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 11501- **Perfect for:** Fabulous calendars that demand attention ✨ 11502 11503### Professional Theme Shadow Fix 11504- **Fixed:** Section headers now have subtle shadow (not glow) 11505- **Fixed:** Clicked day panel header has proper shadow 11506 11507### Pink Bling Theme Colors 11508 11509**Background & Borders**: 11510```php 11511'bg' => '#1a0d14', // Dark rich pink-black 11512'border' => '#ff1493', // Hot pink (DeepPink) 11513'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 11514``` 11515 11516**Text Colors**: 11517```php 11518'text_primary' => '#ff69b4', // Hot pink 11519'text_bright' => '#ff1493', // Deep pink 11520'text_dim' => '#ff85c1', // Light pink 11521``` 11522 11523**Week Grid**: 11524```php 11525'grid_bg' => '#2d1a24', // Dark purple-pink 11526'cell_bg' => '#1a0d14', // Dark 11527'cell_today_bg' => '#3d2030', // Highlighted purple-pink 11528``` 11529 11530**Special Effects**: 11531```php 11532'bar_glow' => '0 0 5px', // Extra sparkly glow! 11533'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 11534``` 11535 11536### Professional Theme Shadow Fix 11537 11538**Before**: Section headers had colored glow 11539```php 11540box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 11541``` 11542 11543**After**: Section headers have subtle shadow 11544```php 11545$headerShadow = ($theme === 'professional') ? 11546 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 11547 '0 0 8px ' . $accentColor; // Glow for others 11548``` 11549 11550**Result**: 11551- **Matrix/Purple/Pink**: Colored glow on headers ✓ 11552- **Professional**: Clean grey shadow (no glow) ✓ 11553 11554### All Four Themes: 11555 11556** Matrix Edition**: 11557- Dark green (#00cc07) 11558- Neon glow effects 11559- Hacker aesthetic 11560 11561** Purple Dream**: 11562- Elegant purple (#9b59b6) 11563- Violet glow effects 11564- Royal aesthetic 11565 11566** Professional Blue**: 11567- Clean grey/blue (#4a90e2) 11568- Subtle shadows (NO glow) 11569- Corporate aesthetic 11570 11571** Pink Bling** (NEW!): 11572- Hot pink (#ff1493) 11573- MAXIMUM sparkle & glow 11574- Glamorous aesthetic ✨ 11575 11576### Technical Implementation 11577 11578**Theme Added To**: 11579- `getSidebarThemeStyles()` - color definitions 11580- `getSidebarTheme()` - validation 11581- `saveSidebarTheme()` - admin save 11582- Admin panel - UI with preview 11583- All shadow/glow calculations 11584- JavaScript theme colors 11585- Clicked day panel colors 11586 11587**Perfect for users who want FABULOUS pink calendars!** ✨ 11588 11589## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 11590 11591### Text Glow Refinement 11592- **Changed:** Reduced text glow from 3px to 2px (less intense) 11593- **Fixed:** Clicked day panel now has same text glow as sections 11594 11595### Text Glow Reduction 11596 11597**Before**: Text glow was too strong (3px) 11598```php 11599// Sections: 11600text-shadow: 0 0 3px #00cc07; // Too bright! 11601 11602// Clicked day panel: 11603text-shadow: 0 0 3px #00cc07; // Too bright! 11604``` 11605 11606**After**: Subtler text glow (2px) 11607```php 11608// Sections: 11609text-shadow: 0 0 2px #00cc07; // Just right ✓ 11610 11611// Clicked day panel: 11612text-shadow: 0 0 2px #00cc07; // Just right ✓ 11613``` 11614 11615**Visual Impact**: 11616- **Matrix**: Softer green glow, easier to read 11617- **Purple**: Softer purple glow, more elegant 11618- **Professional**: Still no glow (clean) 11619 11620### Consistency Fix 11621 11622**Before**: Sections had glow, clicked day panel had NO glow 11623 11624**After**: Both sections AND clicked day panel have matching subtle glow 11625 11626**Where Glow Appears**: 11627- ✅ Today section event text 11628- ✅ Tomorrow section event text 11629- ✅ Important section event text 11630- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 11631 11632**Result**: 11633- Glow is less intense and easier on eyes ✓ 11634- All event text has consistent styling ✓ 11635- Matrix/Purple themes more refined ✓ 11636 11637### Technical Details 11638 11639**PHP (Sections)**: 11640```php 11641$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 11642``` 11643 11644**JavaScript (Clicked Day Panel)**: 11645```javascript 11646themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 11647eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 11648``` 11649 11650**Perfect consistency and subtle elegance!** ✨ 11651 11652## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 11653 11654### ✨ Important Events Enhancement 11655- **Changed:** Important events now show from next 2 weeks (not just current week) 11656- **Fixed:** Important events on Sunday after current week now visible 11657- **Changed:** Events loaded 2 weeks into future for Important section 11658 11659### Background Cleanup 11660- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 11661- **Removed:** Grey backgrounds from individual events 11662- **Result:** Clean transparent backgrounds, original dark Matrix look restored 11663 11664### Important Events - Future Coverage 11665 11666**Before**: Only showed Important events from current week 11667```php 11668if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 11669 $importantEvents[] = $event; 11670} 11671``` 11672 11673**After**: Shows Important events from today through next 2 weeks 11674```php 11675// Load events 2 weeks out 11676$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 11677 11678// Show all important events from today forward 11679if ($isImportant && $dateKey >= $todayStr) { 11680 $importantEvents[] = $event; 11681} 11682``` 11683 11684**Example**: 11685- Today: Saturday Feb 7 11686- Current week: Sun Feb 1 → Sat Feb 7 11687- Important events shown: Feb 7 → Feb 21 (today + 14 days) 11688 11689**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 11690 11691### Background Removal 11692 11693**Before**: Light grey/white backgrounds added 11694```php 11695// Section background: 11696$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 11697 11698// Event background: 11699$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 11700``` 11701 11702**After**: No backgrounds (transparent) 11703```php 11704// Section: No background property 11705<div style="padding:4px 0;"> 11706 11707// Event: No background property 11708<div style="padding:4px 6px; ..."> 11709``` 11710 11711**Result**: 11712- Clean, dark Matrix aesthetic restored ✓ 11713- Purple theme darker and more elegant ✓ 11714- Professional theme still has its light grey sidebar bg ✓ 11715- Events stand out with just color bars and borders ✓ 11716 11717### What Changed: 11718 11719**Sections (Today/Tomorrow/Important)**: 11720- ❌ No more grey overlay 11721- ✓ Transparent background 11722- ✓ Colored borders & glows remain 11723 11724**Individual Events**: 11725- ❌ No more grey overlay 11726- ✓ Transparent background 11727- ✓ Colored bars & borders remain 11728 11729**Perfect! Back to the original clean dark look with future Important events!** 11730 11731## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 11732 11733### Final Theme Polish 11734- **Fixed:** Today/Tomorrow/Important section shadows now match theme 11735- **Fixed:** Event description text color now uses theme dim color 11736 11737### Section Shadow Fix 11738 11739**Problem**: Sections always had green glow regardless of theme 11740 11741**Before**: 11742```php 11743// Hardcoded green: 11744box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 11745``` 11746 11747**After**: 11748```php 11749// Theme-aware: 11750$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 11751 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 11752 '0 2px 4px rgba(0, 0, 0, 0.1)'); 11753``` 11754 11755**Result**: 11756- **Matrix**: Green glow around sections ✓ 11757- **Purple**: Purple glow around sections ✓ 11758- **Professional**: Subtle grey shadow (no glow) ✓ 11759 11760### Description Color Fix 11761 11762**Problem**: Description text always green in clicked day panel 11763 11764**Before**: 11765```javascript 11766color: #00aa00; // Always green 11767``` 11768 11769**After**: 11770```javascript 11771color: themeColors.text_dim; // Theme dim color 11772``` 11773 11774**Result**: 11775- **Matrix**: Dim green (#00aa00) ✓ 11776- **Purple**: Dim purple (#8e7ab8) ✓ 11777- **Professional**: Grey (#7f8c8d) ✓ 11778 11779### Now 100% Theme Consistent 11780 11781Every single visual element respects theme: 11782- ✅ Sidebar background & border 11783- ✅ Header colors & shadows 11784- ✅ Week grid & cells 11785- ✅ Add Event button 11786- ✅ Section borders & **shadows** ← Fixed! 11787- ✅ Event titles & times 11788- ✅ Event **descriptions** ← Fixed! 11789- ✅ Clicked day panel 11790- ✅ Event bars & glows 11791 11792**Absolute perfection across all three themes!** ✨ 11793 11794## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 11795 11796### Theme Improvements 11797- **Fixed:** Clicked day panel now uses correct theme colors 11798- **Changed:** Professional Blue background now light grey (not white) 11799- **Added:** Theme colors passed to JavaScript for dynamic rendering 11800 11801### Clicked Day Panel Theming 11802 11803**Before**: Always blue regardless of theme 11804```javascript 11805// Hardcoded blue: 11806color:#00cc07; // Always green 11807background:#3498db; // Always blue 11808``` 11809 11810**After**: Theme-aware colors 11811```php 11812// PHP passes theme to JavaScript: 11813window.themeColors_XXX = { 11814 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 11815 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 11816 text_shadow: '0 0 3px ...' or '', 11817 event_bg: 'rgba(...)', 11818 border_color: 'rgba(...)', 11819 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 11820}; 11821 11822// JavaScript uses theme colors: 11823color: themeColors.text_primary; 11824background: themeColors.event_bg; 11825``` 11826 11827**Result**: 11828- Matrix: Green panel with green glow ✓ 11829- Purple: Purple panel with purple glow ✓ 11830- Professional: Blue panel, no glow, clean ✓ 11831 11832### Professional Theme Background Change 11833 11834**Before**: Almost white (#f5f7fa, #ffffff) 11835```php 11836'bg' => '#f5f7fa', // Very light 11837'cell_bg' => '#ffffff', // Pure white 11838``` 11839 11840**After**: Light grey tones 11841```php 11842'bg' => '#e8ecf1', // Soft grey-blue 11843'cell_bg' => '#f5f7fa', // Light grey 11844'grid_bg' => '#d5dbe3', // Medium grey 11845'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 11846``` 11847 11848**Visual Impact**: 11849- Sidebar: Light grey-blue background (#e8ecf1) 11850- Week cells: Lighter grey (#f5f7fa) 11851- Today cell: Highlighted blue-grey (#dce8f7) 11852- More depth and contrast ✓ 11853- Professional appearance ✓ 11854 11855### All Theme Elements Now Consistent 11856 11857**Matrix (Green)**: 11858- Sidebar: Dark (#242424) 11859- Clicked panel: Dark with green 11860- Text: Green with glow 11861 11862**Purple Dream**: 11863- Sidebar: Dark purple (#2a2030) 11864- Clicked panel: Dark with purple 11865- Text: Purple with glow 11866 11867**Professional Blue**: 11868- Sidebar: Light grey (#e8ecf1) 11869- Clicked panel: Light with blue 11870- Text: Dark grey, no glow 11871 11872**Perfect theme consistency everywhere!** 11873 11874## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 11875 11876### Critical Fixes 11877- **Fixed:** Tomorrow events not loaded when outside current week 11878- **Fixed:** `&` showing instead of `&` (double HTML encoding) 11879 11880### Issue 1: Tomorrow Not Loading 11881 11882**Problem**: Sidebar only loaded events for current week 11883- Today (Saturday): Week ends today 11884- Tomorrow (Sunday): Start of NEXT week 11885- Tomorrow events never loaded from data files! 11886 11887**Before**: 11888```php 11889// Only load current week 11890$end = new DateTime($weekEnd); 11891$end->modify('+1 day'); 11892$period = new DatePeriod($start, $interval, $end); 11893// If tomorrow > weekEnd, it's not in period! 11894``` 11895 11896**After**: 11897```php 11898// Check if tomorrow is outside week 11899$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 11900if ($tomorrowDate > $weekEnd) { 11901 // Extend to include tomorrow 11902 $end = new DateTime($tomorrowDate); 11903} 11904$end->modify('+1 day'); 11905$period = new DatePeriod($start, $interval, $end); 11906``` 11907 11908**Result**: Tomorrow events now loaded even at week boundary! ✓ 11909 11910### Issue 2: Double HTML Encoding 11911 11912**Problem**: `&` characters showing as `&` 11913 11914**Cause**: Double encoding on line 2625 and 2681 11915```php 11916// Line 2625: 11917$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 11918 11919// Line 2681: 11920$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 11921``` 11922 11923**Fixed**: 11924```php 11925// Line 2625: 11926$title = htmlspecialchars($event['title']); // Encode once 11927 11928// Line 2681: 11929$html .= $title; // Use already-encoded value ✓ 11930``` 11931 11932**Result**: `&` displays correctly! ✓ 11933 11934### Both Fixes Critical 11935 11936These were **two separate bugs**: 119371. **Loading bug**: Tomorrow events not read from files 119382. **Display bug**: Double-encoding text 11939 11940Both needed fixing for Tomorrow section to work properly! 11941 11942## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 11943 11944### Critical Fix 11945- **Fixed:** Tomorrow section missing when tomorrow is outside current week 11946- **Fixed:** Today section now always shows regardless of week boundaries 11947- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 11948 11949### The Problem 11950 11951**Scenario**: Today is Saturday (last day of week) 11952- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 11953- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 11954 11955**BROKEN Logic** (v4.2.2): 11956```php 11957foreach ($events as $dateKey => $dayEvents) { 11958 if ($dateKey < $weekStart) continue; // Skip old events 11959 11960 // ...week processing... 11961 11962 if ($dateKey === $tomorrowStr) { // ← Never reached! 11963 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 11964 } 11965} 11966``` 11967 11968**Result**: Tomorrow events never added because loop skipped them! ❌ 11969 11970### The Fix 11971 11972**Process Today/Tomorrow FIRST**: 11973```php 11974foreach ($events as $dateKey => $dayEvents) { 11975 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 11976 11977 foreach ($eventsWithConflicts as $event) { 11978 // ALWAYS process Today and Tomorrow first! 11979 if ($dateKey === $todayStr) { 11980 $todayEvents[] = $event; // ✓ Always shows 11981 } 11982 if ($dateKey === $tomorrowStr) { 11983 $tomorrowEvents[] = $event; // ✓ Always shows 11984 } 11985 11986 // THEN check week boundaries for grid 11987 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 11988 $weekEvents[$dateKey][] = $event; 11989 } 11990 11991 // Important events still week-only 11992 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 11993 $importantEvents[] = $event; 11994 } 11995 } 11996} 11997``` 11998 11999### What Changed 12000 12001**Before**: 120021. Skip events < weekStart ❌ 120032. Process week grid 120043. Try to add Today/Tomorrow ← **Failed if outside week** 120054. Add Important events 12006 12007**After**: 120081. **Always add Today events** ✓ 120092. **Always add Tomorrow events** ✓ 120103. Add to week grid if in range 120114. Add Important events if in range 12012 12013**Result**: 12014- Today section: ✓ Always shows 12015- Tomorrow section: ✓ Always shows (even at week boundary!) 12016- Week grid: ✓ Only current week 12017- Important: ✓ Only current week 12018 12019### Edge Cases Fixed 12020 12021**Saturday → Sunday transition**: 12022- Today (Sat): Shows in Today section ✓ 12023- Tomorrow (Sun): Shows in Tomorrow section ✓ 12024- Week grid: Only shows Sat (today) ✓ 12025 12026**Sunday → Monday transition**: 12027- Today (Sun): Shows in Today section ✓ 12028- Tomorrow (Mon): Shows in Tomorrow section ✓ 12029- Week grid: Shows both Sun and Mon ✓ 12030 12031**Perfect! Tomorrow section now always works!** 12032 12033## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 12034 12035### Corrected Week Options 12036- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 12037- **Changed:** Default is **Sunday** (US/Canada standard) 12038- **Fixed:** Day names array for Sunday start: S M T W T F S 12039 12040### Correct Week Start Options 12041 12042**Sunday Start** (Default): 12043- Grid shows: **S M T W T F S** 12044- Week: Sunday → Saturday 12045- US/Canada standard 12046- Most common worldwide 12047 12048**Monday Start**: 12049- Grid shows: **M T W T F S S** 12050- Week: Monday → Sunday 12051- ISO 8601 standard 12052- Common in Europe 12053 12054### Technical Changes 12055 12056**All References Updated**: 12057```php 12058// Changed from 'saturday' to 'sunday' in: 12059- Admin validation 12060- Week calculation logic 12061- Day names array 12062- Default value 12063- Comments 12064``` 12065 12066**Sunday Calculation** (when today is Saturday): 12067```php 12068$today = date('w'); // 0=Sun, 6=Sat 12069if ($today == 0) { 12070 $weekStart = date('Y-m-d'); // Today! 12071} else { 12072 // Go back $today days to last Sunday 12073 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 12074} 12075``` 12076 12077**Examples**: 12078- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 12079- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 12080 12081**Sorry for the confusion - it's Sunday not Saturday!** 12082 12083## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 12084 12085### Critical Fix 12086- **Fixed:** Week calculation broken when today is Saturday 12087- **Fixed:** Events not showing in Today/Important sections 12088- **Fixed:** Week grid event bars missing 12089- **Changed:** Default week start is Saturday (matches main calendar) 12090 12091### Technical Details 12092 12093**The Bug**: 12094```php 12095// BROKEN (v4.2.0): 12096$weekStart = date('Y-m-d', strtotime('saturday this week')); 12097// When TODAY is Saturday, this is ambiguous and fails! 12098 12099// FIXED (v4.2.1): 12100$today = date('w'); // 0 (Sun) to 6 (Sat) 12101if ($today == 6) { 12102 $weekStart = date('Y-m-d'); // Today! 12103} else { 12104 $daysBack = ($today == 0) ? 1 : ($today + 1); 12105 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 12106} 12107$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 12108``` 12109 12110**Why It Failed**: 12111- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 12112- PHP may interpret it as "next Saturday" or fail 12113- Result: Week range was wrong, events filtered out 12114 12115**The Fix**: 12116- Explicit calculation using day-of-week math 12117- Saturday (day 6): weekStart = today 12118- Sunday (day 0): weekStart = yesterday 12119- Monday-Friday: calculate days back to last Saturday 12120 12121**Result**: Works reliably every day of the week! 12122 12123**Default Changed**: Saturday start (was Monday in 4.2.0) 12124- Matches main calendar behavior 12125- Users can still switch to Monday in settings 12126 12127## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 12128 12129### ✨ New Feature 12130- **Added:** Week start day selector in Themes tab 12131- **Added:** Choose between Monday (ISO standard) or Saturday week start 12132- **Added:** Week grid and all events now respect the selected start day 12133- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 12134 12135### Week Start Options 12136 12137**Monday Start** (Default): 12138- Grid shows: M T W T F S S 12139- Week runs: Monday → Sunday 12140- ISO 8601 standard 12141- Common in Europe, most of world 12142 12143**Saturday Start**: 12144- Grid shows: S S M T W T F 12145- Week runs: Saturday → Friday 12146- Common in Middle East 12147- Sabbath-observant communities 12148 12149### Technical Details 12150 12151**Configuration**: 12152```php 12153// Saved in: data/meta/calendar_week_start.txt 12154// Values: 'monday' or 'saturday' 12155 12156// Week calculation: 12157if ($weekStartDay === 'saturday') { 12158 $weekStart = date('Y-m-d', strtotime('saturday this week')); 12159 $weekEnd = date('Y-m-d', strtotime('friday next week')); 12160} else { 12161 $weekStart = date('Y-m-d', strtotime('monday this week')); 12162 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 12163} 12164``` 12165 12166**Day Names Array**: 12167```php 12168// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 12169// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 12170``` 12171 12172**What Changes**: 12173- Week grid day letters 12174- Week grid date sequence 12175- Today/Tomorrow/Important event date ranges 12176- Week event grouping 12177 12178**What Stays Same**: 12179- All themes still work 12180- Event data unchanged 12181- Main calendar unaffected 12182 12183### How to Change: 12184 121851. Admin → Calendar → Themes tab 121862. Under "Week Start Day" section 121873. Select Monday or Saturday 121884. Click "Save Settings" 121895. Refresh sidebar to see changes 12190 12191**Perfect for international users or religious observances!** 12192 12193## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 12194 12195### ️ Calendar Improvements 12196- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 12197- **Changed:** Event section backgrounds much lighter (almost white) 12198- **Changed:** Individual event backgrounds lighter and more readable 12199- **Changed:** Event borders now theme-colored 12200 12201### Technical Details 12202 12203**Week Start Change**: 12204```php 12205// Before: 12206$weekStart = date('Y-m-d', strtotime('monday this week')); 12207$weekEnd = date('Y-m-d', strtotime('sunday this week')); 12208$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 12209 12210// After: 12211$weekStart = date('Y-m-d', strtotime('sunday this week')); 12212$weekEnd = date('Y-m-d', strtotime('saturday this week')); 12213$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 12214``` 12215 12216**Background Colors**: 12217```php 12218// Section backgrounds (Today, Tomorrow, Important): 12219Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 12220Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 12221Professional: rgba(255, 255, 255, 0.95) // Almost white! 12222 12223// Individual event backgrounds: 12224Matrix: rgba(255, 255, 255, 0.03) // Subtle 12225Purple: rgba(255, 255, 255, 0.05) // Light 12226Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 12227``` 12228 12229**Event Borders**: 12230```php 12231Matrix: rgba(0, 204, 7, 0.2) // Green 12232Purple: rgba(155, 89, 182, 0.2) // Purple 12233Professional: rgba(74, 144, 226, 0.2) // Blue 12234``` 12235 12236### Visual Result: 12237 12238**Before**: Dark backgrounds made text hard to read 12239**After**: Light backgrounds make events pop and text very readable 12240 12241**Week Grid**: 12242``` 12243Before: [M][T][W][T][F][S][S] 12244After: [S][M][T][W][T][F][S] ← Now matches main calendar! 12245``` 12246 12247## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 12248 12249### Final Theme Polish 12250- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 12251- **Fixed:** Event times now use theme bright color 12252- **Fixed:** Event dates use theme dim color 12253- **Fixed:** Task checkboxes use theme bright color 12254- **Fixed:** Event color bars use theme-appropriate shadows 12255- **Fixed:** No text shadows on Professional theme 12256 12257### Technical Details 12258 12259**Event Text Colors**: 12260```php 12261// Matrix: 12262- Title: #00cc07 (green) 12263- Time: #00dd00 (bright green) 12264- Date: #00aa00 (dim green) 12265- Text shadow: 0 0 3px (glow) 12266 12267// Purple: 12268- Title: #b19cd9 (lavender) 12269- Time: #d4a5ff (bright purple) 12270- Date: #8e7ab8 (dim purple) 12271- Text shadow: 0 0 3px (glow) 12272 12273// Professional: 12274- Title: #2c3e50 (dark grey) 12275- Time: #4a90e2 (blue) 12276- Date: #7f8c8d (grey) 12277- Text shadow: none (clean) 12278``` 12279 12280**Color Bar Shadows**: 12281```php 12282// Matrix & Purple: Glow effect 12283box-shadow: 0 0 3px [event-color]; 12284 12285// Professional: Subtle shadow 12286box-shadow: 0 1px 2px rgba(0,0,0,0.2); 12287``` 12288 12289### What's Now Fully Themed: 12290 12291✅ Sidebar background & border 12292✅ Header (clock box) background, border, text 12293✅ Week grid background, borders, cells 12294✅ Week grid day letters & numbers 12295✅ Week grid event bars & "+N more" text 12296✅ Add Event button background & text 12297✅ Today/Tomorrow/Important event titles 12298✅ Event times 12299✅ Event dates (Important section) 12300✅ Task checkboxes 12301✅ Event color bars 12302✅ All text shadows (glow vs none) 12303 12304**Every single element now respects the theme!** 12305 12306## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 12307 12308### Theme Improvements 12309- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 12310- **Fixed:** Add Event button now uses theme colors 12311- **Fixed:** Clock box border now matches theme 12312- **Fixed:** All text shadows respect theme (no glow on professional) 12313- **Fixed:** Event bars use theme-appropriate shadows 12314 12315### Technical Details 12316 12317**Week Grid Theming**: 12318```php 12319// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 12320// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 12321// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 12322``` 12323 12324**Add Event Button**: 12325```php 12326// Matrix: Dark green (#006400) with bright green text 12327// Purple: Purple (#7d3c98) with lavender text 12328// Professional: Blue (#3498db) with white text 12329``` 12330 12331**Text Shadows**: 12332```php 12333// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 12334// Professional: No glow (clean look) 12335``` 12336 12337**CSS Overrides**: 12338```css 12339/* Purple theme */ 12340.sidebar-purple .eventlist-today-header { 12341 border-color: #9b59b6; 12342 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 12343} 12344 12345/* Professional theme */ 12346.sidebar-professional .eventlist-today-header { 12347 border-color: #4a90e2; 12348 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 12349} 12350``` 12351 12352### What Changed Per Theme: 12353 12354**Purple Dream**: 12355- Week grid: Purple borders and dark purple background 12356- Add Event: Purple button with lavender text 12357- Clock box: Purple border with purple glow 12358- Event bars: Purple glow instead of green 12359- All text: Purple/lavender shades 12360 12361**Professional Blue**: 12362- Week grid: Blue borders and light grey background 12363- Add Event: Blue button with white text 12364- Clock box: Blue border with subtle shadow (no glow) 12365- Event bars: Subtle shadows (no glow) 12366- All text: Dark grey and blue shades 12367 12368**Matrix Edition**: Unchanged (still perfect green theme!) 12369 12370## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 12371 12372### ✨ New Features 12373- **Added:** Themes tab in admin for sidebar widget theming 12374- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 12375- **Added:** Theme selector with live previews 12376- **Added:** Theme persistence across page loads 12377 12378### Available Themes 12379 12380**Matrix Edition** (Default): 12381- Dark background (#242424) 12382- Green accents (#00cc07) 12383- Neon glow effects 12384- Original Matrix styling 12385 12386**Purple Dream**: 12387- Dark purple background (#2a2030) 12388- Purple/violet accents (#9b59b6) 12389- Elegant purple glow 12390- Rich purple color scheme 12391 12392**Professional Blue**: 12393- Light grey background (#f5f7fa) 12394- Blue accents (#4a90e2) 12395- Clean professional look 12396- Subtle shadows instead of glow 12397 12398### Bug Fix 12399- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 12400- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 12401 12402### Technical Details 12403 12404**Theme System**: 12405```php 12406// Saved in: data/meta/calendar_theme.txt 12407// Applied dynamically in syntax.php 12408$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 12409$styles = $this->getSidebarThemeStyles($theme); 12410 12411// Styles include: 12412- bg, border, shadow 12413- header_bg, header_border, header_shadow 12414- text_primary, text_bright, text_dim 12415- grid_bg, grid_border 12416- cell_bg, cell_today_bg 12417``` 12418 12419**Theme Changes**: 12420- Header background gradient 12421- Border colors 12422- Text colors 12423- Shadow/glow effects 12424- Grid colors 12425 12426**How to Change**: 124271. Admin → Calendar → Themes tab 124282. Select desired theme 124293. Click "Save Theme" 124304. Refresh page to see changes 12431 12432### Notes 12433- Themes only affect sidebar widget appearance 12434- Main calendar view unchanged 12435- Theme setting stored in `data/meta/calendar_theme.txt` 12436- Safe to switch themes - no data affected 12437 12438## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 12439 12440### Bug Fixes 12441- **Fixed:** Events now sort chronologically by time (was using string comparison) 12442- **Fixed:** Tooltip positioning using JavaScript like system tooltips 12443- **Fixed:** All-day events appear first, then events in time order 12444 12445### Technical Details 12446 12447**Event Sorting Fix**: 12448```php 12449// BROKEN (v4.0.9): 12450return strcmp($aTime, $bTime); 12451// String comparison: "10:00" < "8:00" because "1" < "8" 12452// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 12453 12454// FIXED (v4.1.0): 12455$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 12456$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 12457return $aMinutes - $bMinutes; 12458// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 12459``` 12460 12461**Example Before Fix**: 12462``` 12463 Weekend Ticket Duty (all-day) 124648:00 AM START TICKETS 1246510:00 AM Soul Winning ← Wrong! 124669:45 AM Coffee ← Should be before 10:00 AM 12467``` 12468 12469**Example After Fix**: 12470``` 12471 Weekend Ticket Duty (all-day) 124728:00 AM START TICKETS 124739:45 AM Coffee ← Correct! 1247410:00 AM Soul Winning 12475``` 12476 12477**Tooltip Positioning**: 12478- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 12479- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 12480- Positioned on `mouseenter` event 12481- Matches system tooltip implementation (no cutoff) 12482 12483**JavaScript Implementation**: 12484```javascript 12485element.addEventListener("mouseenter", function() { 12486 const rect = element.getBoundingClientRect(); 12487 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 12488 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 12489}); 12490``` 12491 12492**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 12493 12494## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 12495 12496### UI Improvements 12497- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 12498- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 12499- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 12500 12501### Technical Details 12502 12503**Sidebar Overflow Fix**: 12504```php 12505// Before (line 2005): 12506style="...overflow:hidden..." // ← Blocked tooltips! 12507 12508// After: 12509style="...overflow:visible..." // ← Tooltips extend beyond! 12510``` 12511 12512**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 12513 12514**Main Calendar Tooltip Size**: 12515```css 12516/* Before: */ 12517.conflict-tooltip { 12518 border: 2px solid #ff9800; 12519 border-radius: 6px; 12520 padding: 8px 12px; 12521 font-size: 12px; 12522 min-width: 200px; 12523 max-width: 350px; 12524} 12525 12526/* After: */ 12527.conflict-tooltip { 12528 border: 1px solid #ff9800; /* Thinner */ 12529 border-radius: 3px; /* Smaller */ 12530 padding: 4px 8px; /* Less padding */ 12531 font-size: 10px; /* Smaller header */ 12532 min-width: 120px; /* Narrower */ 12533 max-width: 200px; /* Narrower */ 12534} 12535 12536.conflict-tooltip-body { 12537 padding: 6px 8px; /* Was 10px 12px */ 12538 font-size: 9px; /* Was 11px */ 12539 line-height: 1.4; /* Was 1.6 */ 12540} 12541 12542.conflict-item { 12543 padding: 2px 0; /* Was 4px */ 12544 font-size: 9px; /* Added smaller font */ 12545} 12546``` 12547 12548**Result**: 12549- Main calendar tooltip ~50% smaller 12550- Sidebar tooltips now extend beyond borders 12551- Both tooltips compact and readable 12552 12553## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 12554 12555### Bug Fix 12556- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 12557- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 12558 12559### Technical Details 12560 12561**The Problem**: 12562```php 12563// Before (v4.0.7): 12564$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 12565 12566// Displayed as: 12567"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 12568``` 12569 12570**The Fix**: 12571```php 12572// After (v4.0.8): 12573$conflictTooltip = "Conflicts with: "; // HTML entity for newline 12574 12575// Displays as: 12576Conflicts with: 12577• Event 1 12578• Event 2 12579``` 12580 12581**Why ` ` Works**: 12582- HTML entity for line feed character 12583- Works in data attributes 12584- CSS `white-space: pre-line` preserves the newlines 12585- Renders as actual line breaks in tooltip 12586 12587**Applied to**: 12588- PHP rendering (sidebar Today/Tomorrow/Important) 12589- JavaScript rendering (clicked day events) 12590 12591## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 12592 12593### UI Improvements 12594- **Changed:** Tooltip size reduced significantly (much more compact) 12595- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 12596- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 12597- **Changed:** Narrower width (120-200px vs 200-300px) 12598 12599### Technical Details 12600 12601**Tooltip Size Reduction**: 12602```css 12603/* Before (v4.0.6): 12604padding: 6px 10px; 12605font-size: 11px; 12606min-width: 200px; 12607max-width: 300px; 12608 12609/* After (v4.0.7): */ 12610padding: 3px 6px; 12611font-size: 9px; 12612min-width: 120px; 12613max-width: 200px; 12614``` 12615 12616**Overflow Fix**: 12617```css 12618/* Allow tooltip to extend beyond sidebar */ 12619.sidebar-widget, 12620.sidebar-matrix { 12621 overflow: visible !important; 12622} 12623 12624/* Position tooltip outside */ 12625[data-tooltip]:before { 12626 bottom: 120%; /* Further above */ 12627 right: -10px; /* Can extend beyond edge */ 12628 z-index: 10000; /* Always on top */ 12629} 12630``` 12631 12632**Visual Result**: 12633- Tooltip is ~40% smaller 12634- Extends beyond sidebar border if needed 12635- Still readable, just more compact 12636- Better for small screens 12637 12638## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 12639 12640### Critical Fix 12641- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 12642- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 12643- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 12644- **Fixed:** Now matches what you see in main calendar view 12645 12646### ✨ UI Improvement 12647- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 12648- **Added:** Custom CSS tooltip with data-tooltip attribute 12649- **Improved:** Better tooltip positioning - doesn't overflow screen edges 12650 12651### Technical Details 12652 12653**The Problem - Field Name Mismatch**: 12654```php 12655// Main calendar (line 697): 12656$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 12657 12658// Sidebar (before fix): 12659$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 12660``` 12661 12662**The Problem - Duration Logic**: 12663```php 12664// Main calendar (line 697): 12665$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 12666 ? $evt1['endTime'] 12667 : $evt1['time']; // ← Uses START time (zero duration) 12668 12669// Sidebar (before fix): 12670$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 12671``` 12672 12673**The Fix**: 12674```php 12675// Now checks BOTH field names: 12676if (isset($event['end_time']) && $event['end_time'] !== '') { 12677 $endTime = $event['end_time']; 12678} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 12679 $endTime = $event['endTime']; 12680} else { 12681 $endTime = $startTime; // ← Matches main calendar! 12682} 12683``` 12684 12685**Tooltip Positioning**: 12686- Uses `data-tooltip` attribute instead of `title` 12687- CSS positions tooltip ABOVE badge (`bottom: 100%`) 12688- Aligns to RIGHT edge (`right: 0`) 12689- Arrow points down to badge 12690- Black background with white text 12691- Max width 300px 12692 12693### Example 12694 12695**6:00 PM Evening Service** (no end time): 12696- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 12697- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 12698 12699**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 12700- Zero-duration events at 6:00 PM don't overlap with anything 12701- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 12702 12703**Tooltip appears**: 12704``` 12705 ┌────────────────────┐ 12706 │ Conflicts with: │ 12707 │ • Super Bowl │ 12708 │ (3:30 PM-7:00 PM)│ 12709 └─────────┬──────────┘ 12710 ▼ 12711 ⚠ 12712``` 12713 12714## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 12715 12716### Bug Fix 12717- **Fixed:** Events without end_time now properly get 1-hour default duration 12718- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 12719- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 12720 12721### Technical Details 12722 12723**The Problem**: 12724```php 12725// Before (broken): 12726$endTime = isset($event['end_time']) ? $event['end_time'] : default; 12727 12728// If end_time exists but is empty string "": 12729isset($event['end_time']) = TRUE 12730$endTime = "" // ← Empty string, not default! 12731``` 12732 12733**The Fix**: 12734```php 12735// After (fixed): 12736$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 12737 ? $event['end_time'] 12738 : $this->addHoursToTime($startTime, 1); 12739 12740// Now empty string gets the default 1-hour duration 12741``` 12742 12743**Why This Matters**: 12744Events like "6:00 PM Evening Service" with no end time should be treated as 6:00-7:00 PM (1 hour). If the `end_time` field contains an empty string instead of being absent, the old code would use the empty string, causing conflict detection to fail. 12745 12746**Example**: 12747``` 12748Super Bowl: 3:30 PM - 7:00 PM 12749Evening Service: 6:00 PM - ??? (should be 7:00 PM) 12750 12751If end_time = "" (empty string): 12752 Old code: Uses "" → conflict detection fails 12753 New code: Uses 7:00 PM → conflict detected ✓ 12754``` 12755 12756### Testing 12757If you're still not seeing the conflict on the 6:00 PM service: 127581. Check if the event has `end_time` set in the JSON 127592. Clear cache (Admin → Manage Events → Clear Cache) 127603. The conflict should now appear 12761 12762## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 12763 12764### ✨ Feature Added 12765- **Added:** Hover over ⚠ badge to see which events are conflicting 12766- **Added:** Tooltip shows conflicting event titles and times 12767- **Added:** Works in both sidebar sections and clicked day events 12768 12769### Technical Details 12770 12771**Conflict Tracking Enhanced**: 12772```php 12773// Now tracks WHICH events conflict: 12774$event['conflictingWith'] = [ 12775 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 12776 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 12777]; 12778``` 12779 12780**Tooltip Format**: 12781``` 12782Conflicts with: 12783• Meeting (10:00 AM-11:00 AM) 12784• Call (10:30 AM-11:30 PM) 12785``` 12786 12787**Where It Works**: 12788- ✅ Today section (sidebar) 12789- ✅ Tomorrow section (sidebar) 12790- ✅ Important Events section (sidebar) 12791- ✅ Clicked day events (week grid) 12792 12793**Cursor**: Changes to `help` cursor on hover to indicate tooltip 12794 12795### Note on Multi-Day Events 12796The current conflict detection only checks time conflicts **within the same day**. If you have an event that spans multiple days (e.g., start date on Monday, end date on Wednesday), each day is treated independently. To see conflicts across the entire span, you would need to check each individual day. 12797 12798## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 12799 12800### Bug Fixes 12801- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 12802- **Fixed:** Important Events now shows events even if they're today or tomorrow 12803- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 12804 12805### Technical Details 12806 12807**Conflict Badge Issue**: 12808```php 12809// BROKEN (line 2511): 12810$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 12811// ↑ Checking 'conflicts' (plural) 12812 12813// But detectTimeConflicts() sets: 12814$event['conflict'] = true/false; 12815// ↑ Setting 'conflict' (singular) 12816 12817// FIXED: 12818$hasConflict = isset($event['conflict']) && $event['conflict']; 12819``` 12820 12821**Result**: Badge now shows for ALL conflicting events in sidebar sections 12822 12823**Important Events Logic Issue**: 12824```php 12825// BROKEN: 12826if ($dateKey === $todayStr) { 12827 $todayEvents[] = ...; 12828} elseif ($dateKey === $tomorrowStr) { 12829 $tomorrowEvents[] = ...; 12830} else { // ← Only checked if NOT today/tomorrow! 12831 if ($isImportant) { 12832 $importantEvents[] = ...; 12833 } 12834} 12835 12836// FIXED: 12837if ($dateKey === $todayStr) { 12838 $todayEvents[] = ...; 12839} 12840if ($dateKey === $tomorrowStr) { 12841 $tomorrowEvents[] = ...; 12842} 12843// ↑ Changed to separate 'if' statements 12844if ($isImportant && $dateKey in this week) { 12845 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 12846} 12847``` 12848 12849**Result**: Important namespace events now show in Important section even if they're today or tomorrow 12850 12851### Conflict Badge Display 12852- Simplified to just ⚠ icon (no count) 12853- Orange color (#ff9800) 12854- 10px font size 12855- Hover shows "Time conflict detected" 12856 12857## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 12858 12859### Bug Fix 12860- **Fixed:** Important Events section now displays all events correctly 12861- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 12862- **Fixed:** Conflict detection no longer causes events to disappear from Important section 12863 12864### Technical Details 12865 12866**The Problem**: 12867- `detectTimeConflicts()` returned early if only 1 event on a day 12868- Returned original array without adding 'conflict' field 12869- This inconsistency caused issues in event categorization 12870 12871**The Solution**: 12872```php 12873// Before (broken): 12874if (empty($dayEvents) || count($dayEvents) < 2) { 12875 return $dayEvents; // No 'conflict' field added! 12876} 12877 12878// After (fixed): 12879if (count($dayEvents) === 1) { 12880 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 12881} 12882``` 12883 12884**Result**: 12885- All events now have 'conflict' field consistently 12886- Single events: conflict = false 12887- Multiple events: conflict = true/false based on overlap 12888- Important Events section displays correctly 12889 12890## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 12891 12892### Bug Fixes 12893- **Fixed:** Conflict badge (⚠) now displays in clicked day events 12894- **Fixed:** Recurring events edit now updates time and end_time correctly 12895- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 12896 12897### ✨ Features Added 12898- **Added:** Time conflict detection for overlapping events 12899- **Added:** detectTimeConflicts() function checks all events on same day 12900- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 12901- **Added:** Events now have 'conflict' flag set automatically 12902 12903### UI Changes 12904- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 12905- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 12906- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 12907 12908### Technical Details 12909 12910**Conflict Detection**: 12911```php 12912// Automatically detects overlapping events on same day 12913// Sets 'conflict' flag to true if event overlaps with another 12914$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 12915``` 12916 12917**Logic**: 12918- All-day events never conflict (no time set) 12919- Timed events check for overlap with other timed events 12920- Overlap = start1 < end2 AND start2 < end1 12921- Default duration is 60 minutes if no end_time 12922 12923**Recurring Events Fix**: 12924- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 12925- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 12926- Now edits actually save and update the events 12927 12928**Week View Bars**: 12929- Shows 4 colored bars instead of 3 12930- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 12931 12932## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 12933 12934**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 12935 12936### Major Features 12937 12938#### Sidebar Widget 12939- **Week Grid**: Interactive 7-day calendar with click-to-view events 12940- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 12941- **Live Clock**: Updates every second with date display 12942- **Real-time Weather**: Geolocation-based temperature with icon 12943- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 12944- **Add Event Button**: Dark green bar opens full event creation dialog 12945- **Matrix Theme**: Green glow effects throughout 12946 12947#### Event Management 12948- **Single Color Bars**: Clean 3px bars showing event's assigned color 12949- **All-Day Events First**: Then sorted chronologically by time 12950- **Conflict Detection**: Orange ⚠ badge on overlapping events 12951- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 12952- **HTML Rendering**: Pre-rendered for JavaScript display 12953- **Click-to-View**: Click week grid days to expand event details 12954 12955#### Admin Interface 12956- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 12957- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 12958- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 12959 12960#### Outlook Sync 12961- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 12962- **Category Mapping**: Map colors to Outlook categories 12963- **Conflict Resolution**: Time conflict detection 12964- **Import/Export Config**: Encrypted configuration files 12965 12966### Design 12967- **Matrix Theme**: Authentic green glow aesthetic 12968- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 12969- **Color Scheme**: 12970 - Today: Orange #ff9800 12971 - Tomorrow: Green #4caf50 12972 - Important: Purple #9b59b6 12973 - Add Event: Dark green #006400 12974 - System bars: Green/Purple/Orange 12975 12976### Technical Highlights 12977- **Zero-margin Design**: Perfect flush alignment throughout 12978- **Flexbox Layout**: Modern, responsive structure 12979- **AJAX Operations**: No page reloads needed 12980- **Smart Sorting**: All-day events first, then chronological 12981- **Tooltip System**: Detailed stats on hover (working correctly) 12982- **Event Dialog**: Full form with drag support 12983- **Cache Management**: One-click cache clearing 12984 12985### Breaking Changes from v3.x 12986- Removed dual color bars (now single event color bar only) 12987- Add Event button moved to between header and week grid 12988- All-day events now appear FIRST (not last) 12989- Update Plugin tab is now the default admin tab 12990 12991### Bug Fixes (v3.10.x → v4.0.0) 12992- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 12993- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 12994- ✅ Fixed weather display (added updateWeather function) 12995- ✅ Fixed HTML rendering in events (title_html/description_html fields) 12996- ✅ Fixed Add Event dialog (null check for calendar element) 12997- ✅ Fixed text positioning in Add Event button 12998- ✅ Fixed spacing throughout sidebar widget 12999 13000### Complete Feature List 13001- Full calendar view (month grid) 13002- Sidebar widget (week view) 13003- Event panel (standalone) 13004- Event list (date ranges) 13005- Namespace support 13006- Color coding 13007- Time conflict detection 13008- DokuWiki syntax in events 13009- Outlook synchronization 13010- System monitoring 13011- Weather display 13012- Live clock 13013- Admin interface 13014- Cache management 13015- Draggable dialogs 13016- AJAX save/edit/delete 13017- Import/export config 13018 13019### Usage 13020 13021**Sidebar Widget**: 13022``` 13023{{calendar sidebar}} 13024{{calendar sidebar namespace=team}} 13025``` 13026 13027**Full Calendar**: 13028``` 13029{{calendar}} 13030{{calendar year=2026 month=6 namespace=team}} 13031``` 13032 13033**Event Panel**: 13034``` 13035{{eventpanel}} 13036``` 13037 13038**Event List**: 13039``` 13040{{eventlist daterange=2026-01-01:2026-01-31}} 13041``` 13042 13043### Stats 13044- **40+ versions** developed during v3.x iterations 13045- **3.10.0 → 3.11.4**: Polish and refinement 13046- **4.0.0**: Production-ready Matrix Edition 13047 13048### Credits 13049Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 13050 13051--- 13052 13053## Previous Versions (v3.11.4 and earlier) 13054 13055## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 13056- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 13057- **Improved:** Small breathing room between system stats bars and Add Event button 13058- **Visual:** Better spacing for cleaner appearance 13059 13060### CSS Change: 13061**eventlist-today-header**: 13062- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 13063 13064### Visual Result: 13065``` 13066│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 13067│ │ ← 2px space (restored) 13068├───────────────────────┤ 13069│ + ADD EVENT │ ← Add Event bar 13070├───────────────────────┤ 13071``` 13072 13073**Before (v3.11.3)**: No space, bars directly touch Add Event button 13074**After (v3.11.4)**: 2px breathing room for better visual hierarchy 13075 13076## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 13077- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 13078- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 13079- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 13080- **Changed:** Line-height reduced from 12px to 10px for better text centering 13081- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 13082 13083### JavaScript Fix: 13084**Problem**: Line 1084-1085 in calendar-main.js 13085```javascript 13086const calendar = document.getElementById(calId); 13087const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 13088``` 13089 13090**Solution**: Added null check 13091```javascript 13092const calendar = document.getElementById(calId); 13093const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 13094``` 13095 13096**Why This Happened**: 13097- Regular calendar has element with id=calId 13098- Sidebar widget doesn't have this element (different structure) 13099- Code tried to read .dataset on null, causing error 13100 13101### Text Position Fix: 13102**Before**: 13103- line-height: 12px 13104- vertical-align: middle 13105- Text slightly low 13106 13107**After**: 13108- line-height: 10px 13109- position: relative; top: -1px 13110- Text perfectly centered 13111 13112### What Works Now: 13113✅ Click "+ ADD EVENT" in sidebar → Dialog opens 13114✅ No console errors 13115✅ Text properly centered vertically 13116✅ Form pre-filled with today's date 13117✅ Save works correctly 13118 13119## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 13120- **Added:** Event dialog to sidebar widget (same as regular calendar) 13121- **Changed:** Add Event button now opens proper event form dialog 13122- **Added:** renderEventDialog() called in renderSidebarWidget() 13123- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 13124- **Improved:** Can now add events directly from sidebar widget 13125 13126### Add Event Button Behavior: 13127**Before (v3.11.1)**: Showed alert with instructions 13128**After (v3.11.2)**: Opens full event creation dialog 13129 13130**Dialog Features**: 13131- Date field (defaults to today) 13132- Title field (required) 13133- Time field (optional) 13134- End time field (optional) 13135- Color picker 13136- Category field 13137- Description field 13138- Save and Cancel buttons 13139- Draggable dialog 13140 13141### Technical Changes: 13142- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 13143- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 13144- Dialog uses same structure as regular calendar 13145- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 13146 13147### User Flow: 131481. User clicks "+ ADD EVENT" green bar 131492. Event dialog opens with today's date pre-filled 131503. User fills in event details 131514. User clicks Save 131525. Event saved via AJAX 131536. Dialog closes 131547. Sidebar refreshes to show new event 13155 13156## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 13157- **Fixed:** Removed bottom padding from header (was 2px, now 0) 13158- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 13159- **Fixed:** Add Event bar now flush against header with zero gap 13160- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 13161- **Improved:** Alert provides clear instructions on how to add events 13162 13163### CSS Changes: 13164**eventlist-today-header**: 13165- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 13166 13167**eventlist-stats-container**: 13168- `margin-top: 2px` → `margin: 0` (removed all margins) 13169 13170### Add Event Button Behavior: 13171**Before**: Clicked → Navigated to Admin → Manage Events tab 13172**After**: Clicked → Shows alert with instructions 13173 13174**Alert Message**: 13175``` 13176To add an event, go to: 13177Admin → Calendar Management → Manage Events tab 13178or use the full calendar view {{calendar}} 13179``` 13180 13181### Visual Result: 13182``` 13183│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 13184├────────────────────────┤ 13185│ + ADD EVENT │ ← Perfectly flush! 13186├────────────────────────┤ 13187``` 13188 13189No gaps, perfectly aligned! 13190 13191## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 13192- **Moved:** Add Event bar back to original position (between header and week grid) 13193- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 13194- **Changed:** Letter spacing reduced from 0.5px to 0.4px 13195- **Fixed:** Text now fully visible without being cut off 13196- **Final:** Optimal position and size determined 13197 13198### Final Layout: 13199``` 13200┌─────────────────────────────┐ 13201│ Clock | Weather | Stats │ ← Header 13202├─────────────────────────────┤ 13203│ + ADD EVENT │ ← Bar (back here, smaller text) 13204├─────────────────────────────┤ 13205│ M T W T F S S │ ← Week Grid 13206│ 3 4 5 6 7 8 9 │ 13207├─────────────────────────────┤ 13208│ Today │ ← Event sections 13209└─────────────────────────────┘ 13210``` 13211 13212### Text Size Changes: 13213**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 13214**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 13215 13216### Why This Position: 13217- Separates header from calendar 13218- Natural action point after viewing stats 13219- Users see stats → decide to add event → view calendar 13220- Consistent with original design intent 13221 13222## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 13223- **Moved:** Add Event bar repositioned from between header/grid to below week grid 13224- **Improved:** Better visual flow - header → stats → grid → add button → events 13225- **Changed:** Add Event bar now acts as separator between calendar and event sections 13226 13227### New Layout: 13228``` 13229┌─────────────────────────────┐ 13230│ Clock | Weather | Stats │ ← Header 13231├─────────────────────────────┤ 13232│ M T W T F S S │ ← Week Grid 13233│ 3 4 5 6 7 8 9 │ 13234├─────────────────────────────┤ 13235│ + ADD EVENT │ ← Add bar (moved here!) 13236├─────────────────────────────┤ 13237│ Today │ ← Event sections 13238│ Tomorrow │ 13239│ Important Events │ 13240└─────────────────────────────┘ 13241``` 13242 13243### Visual Flow: 13244**Before (v3.10.8)**: 132451. Header (clock, weather, stats) 132462. **+ ADD EVENT** bar 132473. Week grid 132484. Event sections 13249 13250**After (v3.10.9)**: 132511. Header (clock, weather, stats) 132522. Week grid (calendar days) 132533. **+ ADD EVENT** bar 132544. Event sections 13255 13256### Benefits: 13257- Natural reading flow: View calendar → Add event → See events 13258- Add button positioned between calendar and event list 13259- Acts as visual separator 13260- More logical action placement 13261 13262## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 13263- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 13264- **Changed:** Events now display with single 3px color bar (event's assigned color only) 13265- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 13266- **Simplified:** Cleaner visual with one color bar instead of two 13267- **Improved:** More space for event content without extra bar 13268 13269### Visual Changes: 13270 13271**Before (v3.10.7)** - Dual color bars: 13272``` 13273├─ [Orange][Green] Event Title 13274├─ [Blue][Purple] Event Title 13275``` 13276 13277**After (v3.10.8)** - Single color bar: 13278``` 13279├─ [Green] Event Title ← Only event color! 13280├─ [Purple] Event Title ← Only event color! 13281``` 13282 13283### Add Bar Changes: 13284- Added `margin:0` to eliminate gaps 13285- Now flush against header (no space above) 13286- Now flush against week grid (no space below) 13287- Perfect seamless connection 13288 13289### Technical Changes: 13290**renderSidebarEvent()**: 13291- Removed section color bar (4px) 13292- Kept only event color bar (3px) 13293 13294**showDayEvents() JavaScript**: 13295- Removed section color bar (4px blue) 13296- Kept only event color bar (3px) 13297 13298**Add Event bar**: 13299- Added `margin:0` inline style 13300- Removed all top/bottom margins 13301 13302## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 13303- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 13304- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 13305- **Changed:** Add Event bar color from orange to dark green (#006400) 13306- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 13307- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 13308- **Changed:** Add Event bar font size increased from 7px to 9px 13309- **Changed:** Add Event bar letter spacing increased to 0.5px 13310- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 13311 13312### Color Bar Fix Details: 13313**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 13314**Solution**: Applied same fix as clicked day events: 13315- Changed parent div: `align-items:start` → `align-items:stretch` 13316- Added `min-height:20px` to parent 13317- Changed bars: `height:100%` → `align-self:stretch` 13318- Bars now properly fill vertical space in ALL sections 13319 13320### Add Event Bar Changes: 13321**Before**: 13322- Background: Orange (#ff9800) 13323- Text: Black (#000) 13324- Height: 6px (text cut off) 13325- Font: 7px 13326 13327**After**: 13328- Background: Dark green (#006400) 13329- Text: Bright green (#00ff00) with green glow 13330- Height: 12px (text fully visible) 13331- Font: 9px 13332- Hover: Darker green (#004d00) 13333- Matrix-themed green aesthetic 13334 13335## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 13336- **Fixed:** Event color bars now display correctly in clicked day events 13337- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 13338- **Added:** Conflict badge (⚠) appears on right side of conflicting events 13339- **Updated:** Complete README.md rewrite with full Matrix theme documentation 13340- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 13341- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 13342- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 13343 13344### Color Bar Fix: 13345**Problem**: Bars had `height:100%` but parent had no explicit height 13346**Solution**: 13347- Changed to `align-self:stretch` on bars 13348- Parent uses `align-items:stretch` 13349- Added `min-height:20px` to parent 13350- Bars now properly fill vertical space 13351 13352### Sorting Change: 13353**Before**: Timed events first → All-day events last 13354**After**: All-day events FIRST → Timed events chronologically 13355 13356**Example**: 13357``` 13358Monday, Feb 5 13359├─ All Day - Project Deadline ← All-day first 13360├─ 8:00 AM - Morning Standup ← Earliest time 13361├─ 10:30 AM - Coffee with Bob 13362└─ 2:00 PM - Team Meeting ← Latest time 13363``` 13364 13365### Conflict Badge: 13366- Orange warning triangle (⚠) on right side 13367- 10px font size 13368- Only appears if `event.conflict` is true 13369- Title attribute shows "Time conflict detected" 13370- Small and unobtrusive 13371 13372### README Update: 13373- Complete rewrite with Matrix theme focus 13374- Full usage instructions for all features 13375- Admin interface documentation 13376- Outlook sync setup guide 13377- System monitoring details 13378- Troubleshooting section 13379- Color scheme reference 13380- File structure documentation 13381- Performance tips 13382- Security notes 13383- Quick start examples 13384 13385## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 13386- **Added:** Events now sorted by time when clicking week grid days 13387- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 13388- **Improved:** Events with times appear first, sorted chronologically 13389- **Improved:** All-day events appear after timed events 13390- **Changed:** Add Event bar font size reduced to 7px (from 10px) 13391- **Changed:** Add Event bar now has 0 padding and fixed 6px height 13392 13393### Sorting Logic: 13394- Events with times sorted by time (earliest first) 13395- All-day events (no time) appear at the end 13396- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 13397- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 13398 13399### Add Event Bar Changes: 13400- **Height**: 6px (was ~12px with padding) 13401- **Padding**: 0 (was 4px top/bottom) 13402- **Font Size**: 7px (was 10px) 13403- **Letter Spacing**: 0.3px (was 0.5px) 13404- **Line Height**: 6px to match height 13405- **Vertical Align**: Middle for text centering 13406 13407## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 13408- **Added:** Thin orange "Add Event" bar between header and week grid 13409- **Added:** Quick access to event creation from sidebar widget 13410- **Styled:** Sleek design with hover effects and glow 13411- **Interactive:** Clicks navigate to Manage Events tab in admin 13412- **Improved:** User workflow for adding events from sidebar 13413 13414### Visual Design: 13415- Orange background (#ff9800) matching Today section color 13416- 4px top/bottom padding for thin, sleek appearance 13417- Black text with white text-shadow for visibility 13418- Hover effect: Darkens to #ff7700 with enhanced glow 13419- Orange glow effect (box-shadow) matching Matrix theme 13420- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 13421 13422### Technical Changes: 13423- Added between header close and renderWeekGrid() call 13424- Inline onclick handler navigates to admin manage tab 13425- Inline onmouseover/onmouseout for hover effects 13426- Smooth 0.2s transition on all style changes 13427 13428## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 13429- **Changed:** Update Plugin tab is now the default tab when opening admin 13430- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 13431- **Improved:** Clear Cache button now larger and more prominent with helpful description 13432- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 13433- **Removed:** Debug console.log statements from day event display 13434- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 13435 13436### UI Changes: 13437- Update Plugin tab opens by default (was Config/Outlook Sync tab) 13438- Clear Cache button prominently displayed at top of Update Plugin tab 13439- Orange ️ button (10px 20px padding) with confirmation dialog 13440- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 13441- Success/error messages display on Update Plugin tab after cache clear 13442- Tab navigation reordered to put Update first 13443 13444### Technical Changes: 13445- Default tab changed from 'config' to 'update' in html() method 13446- Tab navigation HTML reordered to show Update Plugin tab first 13447- clearCache() method now redirects with 'update' tab parameter 13448- Removed Clear Cache button from renderConfigTab() 13449- Added Clear Cache button to renderUpdateTab() with message display 13450 13451## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 13452- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 13453- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 13454- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 13455- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 13456 13457### Technical Changes: 13458- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 13459- Events added to weekEvents now include pre-rendered HTML versions 13460- title_html and description_html fields populated before json_encode() 13461- JavaScript now receives properly formatted HTML content 13462 13463## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 13464- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 13465- **Fixed:** HTML event handlers now call correctly sanitized function names 13466- **Fixed:** Weather temperature now updates correctly in sidebar widget 13467- **Added:** Weather update function to sidebar widget JavaScript 13468- **Added:** "Clear Cache" button in admin panel for easy cache refresh 13469- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 13470- **Improved:** All tooltip functions now work correctly on system status bars 13471 13472### Technical Changes: 13473- Changed tooltip function names to use $jsCalId instead of $calId 13474- Changed HTML onmouseover/onmouseout to use $jsCalId 13475- Added updateWeather() function to sidebar widget 13476- Added getWeatherIcon() function to sidebar widget 13477- Added clearCache() method in admin.php 13478- Added recursiveDelete() helper method in admin.php 13479- Admin UI now has ️ Clear Cache button alongside Export/Import 13480 13481## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 13482- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 13483- **Fixed:** Event links and formatting not displaying in clicked day events 13484- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 13485- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 13486- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 13487- **Improved:** All JavaScript variable names now use valid syntax 13488- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 13489 13490### Technical Changes: 13491- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 13492- JavaScript variables now use underscores instead of dashes 13493- Event HTML rendering preserves DokuWiki formatting 13494- Fixed "showTooltip_sidebar is not defined" errors 13495- Fixed "showDayEvents_cal is not defined" errors 13496 13497## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 13498- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 13499- **Fixed:** Functions now defined BEFORE HTML that uses them 13500- **Changed:** Consolidated all JavaScript into single comprehensive script block 13501- **Removed:** ~290 lines of duplicate JavaScript code 13502- **Added:** Shared state management with `sharedState_[calId]` object 13503- **Improved:** System tooltip functions now work correctly 13504- **Improved:** Week grid click events now work correctly 13505 13506### Technical Changes: 13507- Moved all JavaScript to beginning of widget (before HTML) 13508- Removed duplicate script blocks 13509- Unified tooltip and stats functions 13510- Shared latestStats and cpuHistory state 13511- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 13512 13513## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 13514- **Added:** Dual color bars on events (section color + event color) 13515- **Added:** Click week grid days to view events (replaced hover tooltips) 13516- **Added:** Expandable section below week grid for selected day events 13517- **Added:** Blue theme for selected day section 13518- **Changed:** Week grid days now clickable instead of tooltips 13519- **Changed:** Section bar: 4px wide (left) 13520- **Changed:** Event bar: 3px wide (right) 13521- **Increased:** Gap between color bars from 3px to 6px 13522- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 13523 13524### Visual Changes: 13525- Each event shows TWO color bars side-by-side 13526- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 13527- Right bar (3px): Individual event's assigned color 13528- Click any day in week grid to expand event list 13529- X button to close selected day events 13530 13531## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 13532- **Increased:** Event color bar width from 2px to 3px 13533- **Increased:** Gap between section and event bars from 3px to 6px 13534- **Improved:** Event color bars now more visible alongside section bars 13535- **Note:** Dual color bar system already in place from v3.9.6 13536 13537## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 13538- **Changed:** Date in Important Events moved below event name (was above) 13539- **Changed:** Section headers now 9px font size (was 10px) 13540- **Changed:** Section headers now normal case (was ALL CAPS) 13541- **Changed:** Letter spacing reduced from 0.8px to 0.3px 13542- **Improved:** More natural reading flow with date below event name 13543- **Improved:** Cleaner, more subtle section headers 13544 13545### Header Changes: 13546- "TODAY" → "Today" 13547- "TOMORROW" → "Tomorrow" 13548- "IMPORTANT EVENTS" → "Important Events" 13549 13550## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 13551- **Redesigned:** Complete overhaul of `sidebar` parameter 13552- **Added:** Compact week-at-a-glance itinerary view (200px wide) 13553- **Added:** Live clock widget at top of sidebar 13554- **Added:** 7-cell week grid showing event bars 13555- **Added:** Today section with orange header and left border 13556- **Added:** Tomorrow section with green header and left border 13557- **Added:** Important Events section with purple header and left border 13558- **Added:** Admin setting to configure important namespaces 13559- **Added:** Time conflict badges in sidebar events 13560- **Added:** Task checkboxes in sidebar events 13561- **Changed:** Sidebar now optimized for narrow spaces (200px) 13562- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 13563 13564### New Features: 13565- Clock updates every second showing current time 13566- Week grid shows Mon-Sun with colored event bars 13567- Today/Tomorrow sections show full event details 13568- Important events highlighted in purple (configurable namespaces) 13569- All badges (conflict, time, etc.) shown in compact format 13570- Automatic time conflict detection 13571 13572## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 13573- **Removed:** 16 unused/debug/backup files 13574- **Removed:** 69 console.log() debug statements 13575- **Removed:** 3 orphaned object literals from console.log removal 13576- **Removed:** Temporary comments and markers 13577- **Fixed:** JavaScript syntax errors from cleanup 13578- **Improved:** Code quality and maintainability 13579- **Improved:** Reduced plugin size by removing unnecessary files 13580- **Status:** Production-ready, fully cleaned codebase 13581 13582### Files Removed: 13583- style.css.backup, script.js.backup 13584- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 13585- debug_events.php, debug_html.php, cleanup_events.php 13586- fix_corrupted_json.php, fix_wildcard_namespaces.php 13587- find_outlook_duplicates.php, update_namespace.php 13588- validate_calendar_json.php, admin.js 13589- test_date_field.html 13590 13591## Version 3.7.5 (2026-02-05) 13592- **Fixed:** PHP syntax error (duplicate foreach loop removed) 13593- **Fixed:** Time variable handling in grace period logic 13594 13595## Version 3.7.4 (2026-02-05) 13596- **Added:** 15-minute grace period for timed events 13597- **Changed:** Events with times now stay visible for 15 minutes after their start time 13598- **Changed:** Prevents events from immediately disappearing when they start 13599- **Improved:** Better user experience for ongoing events 13600- **Fixed:** Events from earlier today now properly handled with grace period 13601 13602## Version 3.7.3 (2026-02-05) 13603- **Changed:** Complete redesign of cleanup section for compact, sleek layout 13604- **Changed:** Radio buttons now in single row at top 13605- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 13606- **Changed:** Inline controls - no more grid layout or wrapper boxes 13607- **Changed:** Namespace filter now compact single-line input 13608- **Changed:** Smaller buttons and tighter spacing throughout 13609- **Improved:** More professional, space-efficient design 13610 13611## Version 3.7.2 (2026-02-04) 13612- **Fixed:** Strange boxes under cleanup options - now properly hidden 13613- **Changed:** Unified color scheme across all admin sections 13614- **Changed:** Green (#00cc07) - Primary actions and main theme 13615- **Changed:** Orange (#ff9800) - Warnings and cleanup features 13616- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 13617- **Improved:** Consistent visual design throughout admin interface 13618 13619## Version 3.7.1 (2026-02-04) 13620- **Fixed:** Cleanup section background changed from orange to white 13621- **Fixed:** Event cleanup now properly scans all calendar directories 13622- **Added:** Debug info display when preview finds no events 13623- **Improved:** Better directory scanning logic matching other features 13624 13625## Version 3.7.0 (2026-02-04) 13626- **Added:** Event cleanup feature in Events Manager 13627- **Added:** Delete old events by age (months/years old) 13628- **Added:** Delete events by status (completed tasks, past events) 13629- **Added:** Delete events by date range 13630- **Added:** Namespace filter for targeted cleanup 13631- **Added:** Preview function to see what will be deleted 13632- **Added:** Automatic backup creation before cleanup 13633- **Changed:** Reduced changelog viewer height to 100px (was 400px) 13634 13635## Version 3.6.3 (2026-02-04) 13636- **Fixed:** Conflict tooltips now work properly after navigating between months 13637- **Added:** Changelog display in Update Plugin tab 13638- **Added:** CHANGELOG.md file with version history 13639- **Improved:** Changelog shows last 10 versions with color-coded change types 13640- **Fixed:** Removed debug console.log statements 13641 13642## Version 3.6.2 (2026-02-04) 13643- **Fixed:** Month title now updates correctly when navigating between months 13644- **Changed:** All eventpanel header elements reduced by 10% for more compact design 13645- **Changed:** Reduced header height from 78px to 70px 13646 13647## Version 3.6.1 (2026-02-04) 13648- **Changed:** Complete redesign of eventpanel header with practical two-row layout 13649- **Fixed:** Improved layout for narrow widths (~500px) 13650- **Changed:** Simplified color scheme (removed purple gradient) 13651 13652## Version 3.6.0 (2026-02-04) 13653- **Changed:** Redesigned eventpanel header with gradient background 13654- **Changed:** Consolidated multiple header rows into compact single-row design 13655 13656## Version 3.5.1 (2026-02-04) 13657- **Changed:** Moved event search bar into header row next to + Add button 13658- **Improved:** More compact UI with search integrated into header 13659 13660## Version 3.5.0 (2026-02-04) 13661- **Added:** Event search functionality in sidebar and eventpanel 13662- **Added:** Real-time filtering as you type 13663- **Added:** Clear button (✕) appears when searching 13664- **Added:** "No results" message when search returns nothing 13665 13666## Version 3.4.7 (2026-02-04) 13667- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 13668- **Fixed:** Removed debug logging from console 13669- **Changed:** Updated export version number to match plugin version 13670 13671## Version 3.4.6 (2026-02-04) 13672- **Added:** Debug logging to diagnose conflict detection issues 13673- **Development:** Extensive console logging for troubleshooting 13674 13675## Version 3.4.5 (2026-02-04) 13676- **Added:** Debug logging to showDayPopup and conflict detection 13677- **Development:** Added logging to trace conflict detection flow 13678 13679## Version 3.4.4 (2026-02-04) 13680- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 13681- **Fixed:** Conflict tooltips now appear on hover 13682- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 13683- **Added:** Conflict badges in both future and past events sections 13684 13685## Version 3.4.3 (2026-02-04) 13686- **Added:** Custom styled conflict tooltips with hover functionality 13687- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 13688- **Improved:** Beautiful tooltip design with orange header and clean formatting 13689 13690## Version 3.4.2 (2026-02-04) 13691- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 13692 13693## Version 3.4.1 (2026-02-04) 13694- **Fixed:** End time field now properly saves to database 13695- **Fixed:** End time dropdown now filters to show only valid times after start time 13696- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 13697- **Improved:** End time auto-suggests +1 hour when start time selected 13698 13699## Version 3.4.0 (2026-02-04) 13700- **Added:** End time support for events (start and end times) 13701- **Added:** Automatic time conflict detection 13702- **Added:** Conflict warning badges (⚠️) on events with overlapping times 13703- **Added:** Conflict tooltips showing which events conflict 13704- **Added:** Visual conflict indicators with pulse animation 13705- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 13706 13707## Version 3.3.77 (2026-02-04) 13708- **Fixed:** Namespace badge onclick handlers restored after clearing filter 13709- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 13710 13711## Version 3.3.76 (2026-02-04) 13712- **Fixed:** Namespace badges now clickable after clearing namespace filter 13713 13714## Version 3.3.75 (2026-02-04) 13715- **Fixed:** Form resubmission warnings eliminated 13716- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 13717- **Changed:** All admin redirects now use absolute URLs 13718 13719## Version 3.3.74 (2026-02-04) 13720- **Fixed:** Clearing namespace filter now restores original namespace instead of default 13721- **Added:** data-original-namespace attribute to preserve initial namespace setting 13722- **Improved:** Console logging for namespace filter debugging 13723 13724## Version 3.3.73 (2026-02-03) 13725- **Added:** Dynamic namespace filtering banner with clear button 13726- **Fixed:** JavaScript function accessibility issues 13727- **Fixed:** Namespace badge click handlers in event lists 13728- **Improved:** Persistent namespace filtering across views 13729 13730## Earlier Versions 13731See previous transcripts for complete history through v3.3.73, including: 13732- Recurring events with Outlook sync 13733- Multi-namespace support 13734- Event categories and mapping 13735- Backup/restore functionality 13736- System statistics bar 13737- Namespace selector with fuzzy search 13738- Events Manager with import/export 13739- And much more... 13740