```
### How It Works Now
**Priority system**:
1. **Try reading style.ini** → Use actual template hex colors ✓
2. **If file not found** → Use fallback hex colors ✓
3. **Never use CSS variables in inline styles** ✓
**Both paths now work correctly!**
### Visual Result
**Events now have proper backgrounds**:
```
┌──────────────────────────┐
│ 📅 Meeting at 2pm │ ← White background (#fff)
│ Description here... │
│ [✏️ Edit] [🗑️ Delete] │
└──────────────────────────┘
Not:
┌──────────────────────────┐
│ 📅 Meeting at 2pm │ ← No background (broken)
│ Description here... │
└──────────────────────────┘
```
### Affected Areas
**All event displays**:
- Main calendar events ✓
- Sidebar widget events ✓
- Event list items ✓
- Event backgrounds ✓
- Button backgrounds ✓
- Input field backgrounds ✓
**Everything uses real colors now!**
## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT
### 🎨 Reorganized: Better Update Tab Layout
- **Moved:** Current Version section to the top
- **Combined:** Upload and Important Notes side-by-side
- **Improved:** Space-efficient two-column layout
- **Result:** More information visible at once!
### New Layout Order
**Version 5.1.8**:
```
1. Current Version (at top - see what you have)
2. Upload + Important Notes (side-by-side)
3. Recent Changes (changelog)
4. Backups
```
### Side-by-Side Design
**Upload form (left 60%) + Important Notes (right 40%)**:
```
┌──────────────────────────────────────────┐
│ 📋 Current Version │
│ Version: 5.1.8 │
│ ✅ Permissions: OK │
└──────────────────────────────────────────┘
┌─────────────────────┬────────────────────┐
│ 📤 Upload New │ ⚠️ Important Notes │
│ [Choose File] │ • Replaces files │
│ ☑ Backup first │ • Config preserved │
│ [Upload] [Clear] │ • Events safe │
└─────────────────────┴────────────────────┘
```
### Benefits
**Current Version First**:
- See what you have immediately
- Check permissions at a glance
- Know if ready to update
**Side-by-Side Layout**:
- Upload form and warnings together
- Read notes while choosing file
- More efficient use of space
- Less scrolling needed
**Better Information Flow**:
1. See current version ✓
2. Upload new version with notes visible ✓
3. Review recent changes ✓
4. Manage backups ✓
### Visual Comparison
**Before (v5.1.7)**:
```
Important Notes (full width)
↓
Upload Form (full width)
↓
Current Version
↓
Recent Changes
↓
Backups
```
**After (v5.1.8)**:
```
Current Version (full width)
↓
Upload (60%) | Notes (40%)
↓
Recent Changes
↓
Backups
```
**More compact, better organized!**
### Responsive Design
**Wide screens**:
- Upload and notes side-by-side
- Full 1200px width utilized
- Efficient space usage
**Narrow screens**:
- Sections stack gracefully
- Flex layout adapts
- Still fully functional
### Layout Details
**Current Version Section**:
- Full width (1200px max)
- Shows version, author, description
- Permission status with icons
- Helpful fix commands if needed
**Upload/Notes Section**:
- Flexbox layout with gap
- Upload: `flex:1` (grows)
- Notes: `flex:0 0 350px` (fixed 350px)
- Both have proper min-width
**Recent Changes Section**:
- Full width (1200px max)
- Compact scrollable view
- Color-coded change types
- Last 10 versions shown
**Backups Section**:
- Full width (1200px max)
- Manual backup button
- Scrollable file list
- All actions accessible
### Improved Max Widths
All sections now use `max-width:1200px` (previously 900px):
- Better use of wide screens
- Still responsive on narrow screens
- Consistent throughout tab
## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR
### 🐛 Fixed: Extra Closing Brace
- **Fixed:** ParseError on line 1936 (extra closing brace)
- **Result:** Manual backup feature now works correctly!
### What Was Wrong
Extra `}` after the backup section:
**Before (broken)**:
```php
echo '
';
} // ← Extra closing brace!
echo '';
```
**Why it broke**: Backticks (`) are special in PHP too!
### The Fix
**Changed from template literals to concatenation**:
**BEFORE (broken)**:
```javascript
let nsOptions = `
// Event: No background property
```
**Result**:
- Clean, dark Matrix aesthetic restored ✓
- Purple theme darker and more elegant ✓
- Professional theme still has its light grey sidebar bg ✓
- Events stand out with just color bars and borders ✓
### What Changed:
**Sections (Today/Tomorrow/Important)**:
- ❌ No more grey overlay
- ✓ Transparent background
- ✓ Colored borders & glows remain
**Individual Events**:
- ❌ No more grey overlay
- ✓ Transparent background
- ✓ Colored bars & borders remain
**Perfect! Back to the original clean dark look with future Important events!** 🌙
## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR
### 🎨 Final Theme Polish
- **Fixed:** Today/Tomorrow/Important section shadows now match theme
- **Fixed:** Event description text color now uses theme dim color
### Section Shadow Fix
**Problem**: Sections always had green glow regardless of theme
**Before**:
```php
// Hardcoded green:
box-shadow: 0 0 5px rgba(0, 204, 7, 0.2);
```
**After**:
```php
// Theme-aware:
$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' :
($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' :
'0 2px 4px rgba(0, 0, 0, 0.1)');
```
**Result**:
- **Matrix**: Green glow around sections ✓
- **Purple**: Purple glow around sections ✓
- **Professional**: Subtle grey shadow (no glow) ✓
### Description Color Fix
**Problem**: Description text always green in clicked day panel
**Before**:
```javascript
color: #00aa00; // Always green
```
**After**:
```javascript
color: themeColors.text_dim; // Theme dim color
```
**Result**:
- **Matrix**: Dim green (#00aa00) ✓
- **Purple**: Dim purple (#8e7ab8) ✓
- **Professional**: Grey (#7f8c8d) ✓
### Now 100% Theme Consistent
Every single visual element respects theme:
- ✅ Sidebar background & border
- ✅ Header colors & shadows
- ✅ Week grid & cells
- ✅ Add Event button
- ✅ Section borders & **shadows** ← Fixed!
- ✅ Event titles & times
- ✅ Event **descriptions** ← Fixed!
- ✅ Clicked day panel
- ✅ Event bars & glows
**Absolute perfection across all three themes!** 🎨✨
## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND
### 🎨 Theme Improvements
- **Fixed:** Clicked day panel now uses correct theme colors
- **Changed:** Professional Blue background now light grey (not white)
- **Added:** Theme colors passed to JavaScript for dynamic rendering
### Clicked Day Panel Theming
**Before**: Always blue regardless of theme
```javascript
// Hardcoded blue:
color:#00cc07; // Always green
background:#3498db; // Always blue
```
**After**: Theme-aware colors
```php
// PHP passes theme to JavaScript:
window.themeColors_XXX = {
text_primary: '#00cc07' or '#b19cd9' or '#2c3e50',
text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2',
text_shadow: '0 0 3px ...' or '',
event_bg: 'rgba(...)',
border_color: 'rgba(...)',
bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)'
};
// JavaScript uses theme colors:
color: themeColors.text_primary;
background: themeColors.event_bg;
```
**Result**:
- Matrix: Green panel with green glow ✓
- Purple: Purple panel with purple glow ✓
- Professional: Blue panel, no glow, clean ✓
### Professional Theme Background Change
**Before**: Almost white (#f5f7fa, #ffffff)
```php
'bg' => '#f5f7fa', // Very light
'cell_bg' => '#ffffff', // Pure white
```
**After**: Light grey tones
```php
'bg' => '#e8ecf1', // Soft grey-blue
'cell_bg' => '#f5f7fa', // Light grey
'grid_bg' => '#d5dbe3', // Medium grey
'cell_today_bg' => '#dce8f7' // Highlighted grey-blue
```
**Visual Impact**:
- Sidebar: Light grey-blue background (#e8ecf1)
- Week cells: Lighter grey (#f5f7fa)
- Today cell: Highlighted blue-grey (#dce8f7)
- More depth and contrast ✓
- Professional appearance ✓
### All Theme Elements Now Consistent
**Matrix (Green)**:
- Sidebar: Dark (#242424)
- Clicked panel: Dark with green
- Text: Green with glow
**Purple Dream**:
- Sidebar: Dark purple (#2a2030)
- Clicked panel: Dark with purple
- Text: Purple with glow
**Professional Blue**:
- Sidebar: Light grey (#e8ecf1)
- Clicked panel: Light with blue
- Text: Dark grey, no glow
**Perfect theme consistency everywhere!** 🎨
## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING
### 🐛 Critical Fixes
- **Fixed:** Tomorrow events not loaded when outside current week
- **Fixed:** `&` showing instead of `&` (double HTML encoding)
### Issue 1: Tomorrow Not Loading
**Problem**: Sidebar only loaded events for current week
- Today (Saturday): Week ends today
- Tomorrow (Sunday): Start of NEXT week
- Tomorrow events never loaded from data files!
**Before**:
```php
// Only load current week
$end = new DateTime($weekEnd);
$end->modify('+1 day');
$period = new DatePeriod($start, $interval, $end);
// If tomorrow > weekEnd, it's not in period!
```
**After**:
```php
// Check if tomorrow is outside week
$tomorrowDate = date('Y-m-d', strtotime('+1 day'));
if ($tomorrowDate > $weekEnd) {
// Extend to include tomorrow
$end = new DateTime($tomorrowDate);
}
$end->modify('+1 day');
$period = new DatePeriod($start, $interval, $end);
```
**Result**: Tomorrow events now loaded even at week boundary! ✓
### Issue 2: Double HTML Encoding
**Problem**: `&` characters showing as `&`
**Cause**: Double encoding on line 2625 and 2681
```php
// Line 2625:
$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea"
// Line 2681:
$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee & Tea" ❌
```
**Fixed**:
```php
// Line 2625:
$title = htmlspecialchars($event['title']); // Encode once
// Line 2681:
$html .= $title; // Use already-encoded value ✓
```
**Result**: `&` displays correctly! ✓
### Both Fixes Critical
These were **two separate bugs**:
1. **Loading bug**: Tomorrow events not read from files
2. **Display bug**: Double-encoding text
Both needed fixing for Tomorrow section to work properly!
## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY
### 🐛 Critical Fix
- **Fixed:** Tomorrow section missing when tomorrow is outside current week
- **Fixed:** Today section now always shows regardless of week boundaries
- **Changed:** Today/Tomorrow processed BEFORE week boundary checks
### The Problem
**Scenario**: Today is Saturday (last day of week)
- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today
- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week**
**BROKEN Logic** (v4.2.2):
```php
foreach ($events as $dateKey => $dayEvents) {
if ($dateKey < $weekStart) continue; // Skip old events
// ...week processing...
if ($dateKey === $tomorrowStr) { // ← Never reached!
$tomorrowEvents[] = $event; // Tomorrow > weekEnd
}
}
```
**Result**: Tomorrow events never added because loop skipped them! ❌
### The Fix
**Process Today/Tomorrow FIRST**:
```php
foreach ($events as $dateKey => $dayEvents) {
$eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
foreach ($eventsWithConflicts as $event) {
// ALWAYS process Today and Tomorrow first!
if ($dateKey === $todayStr) {
$todayEvents[] = $event; // ✓ Always shows
}
if ($dateKey === $tomorrowStr) {
$tomorrowEvents[] = $event; // ✓ Always shows
}
// THEN check week boundaries for grid
if ($dateKey >= $weekStart && $dateKey <= $weekEnd) {
$weekEvents[$dateKey][] = $event;
}
// Important events still week-only
if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
$importantEvents[] = $event;
}
}
}
```
### What Changed
**Before**:
1. Skip events < weekStart ❌
2. Process week grid
3. Try to add Today/Tomorrow ← **Failed if outside week**
4. Add Important events
**After**:
1. **Always add Today events** ✓
2. **Always add Tomorrow events** ✓
3. Add to week grid if in range
4. Add Important events if in range
**Result**:
- Today section: ✓ Always shows
- Tomorrow section: ✓ Always shows (even at week boundary!)
- Week grid: ✓ Only current week
- Important: ✓ Only current week
### Edge Cases Fixed
**Saturday → Sunday transition**:
- Today (Sat): Shows in Today section ✓
- Tomorrow (Sun): Shows in Tomorrow section ✓
- Week grid: Only shows Sat (today) ✓
**Sunday → Monday transition**:
- Today (Sun): Shows in Today section ✓
- Tomorrow (Mon): Shows in Tomorrow section ✓
- Week grid: Shows both Sun and Mon ✓
**Perfect! Tomorrow section now always works!** 📅
## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY!
### 🔄 Corrected Week Options
- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!)
- **Changed:** Default is **Sunday** (US/Canada standard)
- **Fixed:** Day names array for Sunday start: S M T W T F S
### 📅 Correct Week Start Options
**Sunday Start** (Default):
- Grid shows: **S M T W T F S**
- Week: Sunday → Saturday
- US/Canada standard
- Most common worldwide
**Monday Start**:
- Grid shows: **M T W T F S S**
- Week: Monday → Sunday
- ISO 8601 standard
- Common in Europe
### Technical Changes
**All References Updated**:
```php
// Changed from 'saturday' to 'sunday' in:
- Admin validation
- Week calculation logic
- Day names array
- Default value
- Comments
```
**Sunday Calculation** (when today is Saturday):
```php
$today = date('w'); // 0=Sun, 6=Sat
if ($today == 0) {
$weekStart = date('Y-m-d'); // Today!
} else {
// Go back $today days to last Sunday
$weekStart = date('Y-m-d', strtotime('-' . $today . ' days'));
}
```
**Examples**:
- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7
- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14
**Sorry for the confusion - it's Sunday not Saturday!** 🌅
## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY
### 🐛 Critical Fix
- **Fixed:** Week calculation broken when today is Saturday
- **Fixed:** Events not showing in Today/Important sections
- **Fixed:** Week grid event bars missing
- **Changed:** Default week start is Saturday (matches main calendar)
### Technical Details
**The Bug**:
```php
// BROKEN (v4.2.0):
$weekStart = date('Y-m-d', strtotime('saturday this week'));
// When TODAY is Saturday, this is ambiguous and fails!
// FIXED (v4.2.1):
$today = date('w'); // 0 (Sun) to 6 (Sat)
if ($today == 6) {
$weekStart = date('Y-m-d'); // Today!
} else {
$daysBack = ($today == 0) ? 1 : ($today + 1);
$weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days'));
}
$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
```
**Why It Failed**:
- `strtotime('saturday this week')` is ambiguous when run ON a Saturday
- PHP may interpret it as "next Saturday" or fail
- Result: Week range was wrong, events filtered out
**The Fix**:
- Explicit calculation using day-of-week math
- Saturday (day 6): weekStart = today
- Sunday (day 0): weekStart = yesterday
- Monday-Friday: calculate days back to last Saturday
**Result**: Works reliably every day of the week!
**Default Changed**: Saturday start (was Monday in 4.2.0)
- Matches main calendar behavior
- Users can still switch to Monday in settings
## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR
### ✨ New Feature
- **Added:** Week start day selector in Themes tab
- **Added:** Choose between Monday (ISO standard) or Saturday week start
- **Added:** Week grid and all events now respect the selected start day
- **Changed:** Themes tab renamed to "Sidebar Widget Settings"
### 📅 Week Start Options
**Monday Start** (Default):
- Grid shows: M T W T F S S
- Week runs: Monday → Sunday
- ISO 8601 standard
- Common in Europe, most of world
**Saturday Start**:
- Grid shows: S S M T W T F
- Week runs: Saturday → Friday
- Common in Middle East
- Sabbath-observant communities
### Technical Details
**Configuration**:
```php
// Saved in: data/meta/calendar_week_start.txt
// Values: 'monday' or 'saturday'
// Week calculation:
if ($weekStartDay === 'saturday') {
$weekStart = date('Y-m-d', strtotime('saturday this week'));
$weekEnd = date('Y-m-d', strtotime('friday next week'));
} else {
$weekStart = date('Y-m-d', strtotime('monday this week'));
$weekEnd = date('Y-m-d', strtotime('sunday this week'));
}
```
**Day Names Array**:
```php
// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S']
// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F']
```
**What Changes**:
- Week grid day letters
- Week grid date sequence
- Today/Tomorrow/Important event date ranges
- Week event grouping
**What Stays Same**:
- All themes still work
- Event data unchanged
- Main calendar unaffected
### How to Change:
1. Admin → Calendar → 🎨 Themes tab
2. Under "Week Start Day" section
3. Select Monday or Saturday
4. Click "Save Settings"
5. Refresh sidebar to see changes
**Perfect for international users or religious observances!** 📅
## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS
### 🗓️ Calendar Improvements
- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar)
- **Changed:** Event section backgrounds much lighter (almost white)
- **Changed:** Individual event backgrounds lighter and more readable
- **Changed:** Event borders now theme-colored
### Technical Details
**Week Start Change**:
```php
// Before:
$weekStart = date('Y-m-d', strtotime('monday this week'));
$weekEnd = date('Y-m-d', strtotime('sunday this week'));
$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
// After:
$weekStart = date('Y-m-d', strtotime('sunday this week'));
$weekEnd = date('Y-m-d', strtotime('saturday this week'));
$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
```
**Background Colors**:
```php
// Section backgrounds (Today, Tomorrow, Important):
Matrix: rgba(255, 255, 255, 0.05) // Very light overlay
Purple: rgba(255, 255, 255, 0.08) // Slightly lighter
Professional: rgba(255, 255, 255, 0.95) // Almost white!
// Individual event backgrounds:
Matrix: rgba(255, 255, 255, 0.03) // Subtle
Purple: rgba(255, 255, 255, 0.05) // Light
Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white
```
**Event Borders**:
```php
Matrix: rgba(0, 204, 7, 0.2) // Green
Purple: rgba(155, 89, 182, 0.2) // Purple
Professional: rgba(74, 144, 226, 0.2) // Blue
```
### Visual Result:
**Before**: Dark backgrounds made text hard to read
**After**: Light backgrounds make events pop and text very readable
**Week Grid**:
```
Before: [M][T][W][T][F][S][S]
After: [S][M][T][W][T][F][S] ← Now matches main calendar!
```
## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS
### 🎨 Final Theme Polish
- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors
- **Fixed:** Event times now use theme bright color
- **Fixed:** Event dates use theme dim color
- **Fixed:** Task checkboxes use theme bright color
- **Fixed:** Event color bars use theme-appropriate shadows
- **Fixed:** No text shadows on Professional theme
### Technical Details
**Event Text Colors**:
```php
// Matrix:
- Title: #00cc07 (green)
- Time: #00dd00 (bright green)
- Date: #00aa00 (dim green)
- Text shadow: 0 0 3px (glow)
// Purple:
- Title: #b19cd9 (lavender)
- Time: #d4a5ff (bright purple)
- Date: #8e7ab8 (dim purple)
- Text shadow: 0 0 3px (glow)
// Professional:
- Title: #2c3e50 (dark grey)
- Time: #4a90e2 (blue)
- Date: #7f8c8d (grey)
- Text shadow: none (clean)
```
**Color Bar Shadows**:
```php
// Matrix & Purple: Glow effect
box-shadow: 0 0 3px [event-color];
// Professional: Subtle shadow
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
```
### What's Now Fully Themed:
✅ Sidebar background & border
✅ Header (clock box) background, border, text
✅ Week grid background, borders, cells
✅ Week grid day letters & numbers
✅ Week grid event bars & "+N more" text
✅ Add Event button background & text
✅ Today/Tomorrow/Important event titles
✅ Event times
✅ Event dates (Important section)
✅ Task checkboxes
✅ Event color bars
✅ All text shadows (glow vs none)
**Every single element now respects the theme!** 🎨
## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION
### 🎨 Theme Improvements
- **Fixed:** Week calendar grid now uses theme colors (purple/blue)
- **Fixed:** Add Event button now uses theme colors
- **Fixed:** Clock box border now matches theme
- **Fixed:** All text shadows respect theme (no glow on professional)
- **Fixed:** Event bars use theme-appropriate shadows
### Technical Details
**Week Grid Theming**:
```php
// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders
// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders
// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders
```
**Add Event Button**:
```php
// Matrix: Dark green (#006400) with bright green text
// Purple: Purple (#7d3c98) with lavender text
// Professional: Blue (#3498db) with white text
```
**Text Shadows**:
```php
// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color)
// Professional: No glow (clean look)
```
**CSS Overrides**:
```css
/* Purple theme */
.sidebar-purple .eventlist-today-header {
border-color: #9b59b6;
box-shadow: 0 0 8px rgba(155, 89, 182, 0.2);
}
/* Professional theme */
.sidebar-professional .eventlist-today-header {
border-color: #4a90e2;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
```
### What Changed Per Theme:
**Purple Dream**:
- Week grid: Purple borders and dark purple background
- Add Event: Purple button with lavender text
- Clock box: Purple border with purple glow
- Event bars: Purple glow instead of green
- All text: Purple/lavender shades
**Professional Blue**:
- Week grid: Blue borders and light grey background
- Add Event: Blue button with white text
- Clock box: Blue border with subtle shadow (no glow)
- Event bars: Subtle shadows (no glow)
- All text: Dark grey and blue shades
**Matrix Edition**: Unchanged (still perfect green theme!)
## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING
### ✨ New Features
- **Added:** 🎨 Themes tab in admin for sidebar widget theming
- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey)
- **Added:** Theme selector with live previews
- **Added:** Theme persistence across page loads
### 🎨 Available Themes
**Matrix Edition** (Default):
- Dark background (#242424)
- Green accents (#00cc07)
- Neon glow effects
- Original Matrix styling
**Purple Dream**:
- Dark purple background (#2a2030)
- Purple/violet accents (#9b59b6)
- Elegant purple glow
- Rich purple color scheme
**Professional Blue**:
- Light grey background (#f5f7fa)
- Blue accents (#4a90e2)
- Clean professional look
- Subtle shadows instead of glow
### 🐛 Bug Fix
- **Fixed:** Tooltips now go UP and to the LEFT (was going right)
- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px`
### Technical Details
**Theme System**:
```php
// Saved in: data/meta/calendar_theme.txt
// Applied dynamically in syntax.php
$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional'
$styles = $this->getSidebarThemeStyles($theme);
// Styles include:
- bg, border, shadow
- header_bg, header_border, header_shadow
- text_primary, text_bright, text_dim
- grid_bg, grid_border
- cell_bg, cell_today_bg
```
**Theme Changes**:
- Header background gradient
- Border colors
- Text colors
- Shadow/glow effects
- Grid colors
**How to Change**:
1. Admin → Calendar → 🎨 Themes tab
2. Select desired theme
3. Click "Save Theme"
4. Refresh page to see changes
### Notes
- Themes only affect sidebar widget appearance
- Main calendar view unchanged
- Theme setting stored in `data/meta/calendar_theme.txt`
- Safe to switch themes - no data affected
## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING
### 🐛 Bug Fixes
- **Fixed:** Events now sort chronologically by time (was using string comparison)
- **Fixed:** Tooltip positioning using JavaScript like system tooltips
- **Fixed:** All-day events appear first, then events in time order
### Technical Details
**Event Sorting Fix**:
```php
// BROKEN (v4.0.9):
return strcmp($aTime, $bTime);
// String comparison: "10:00" < "8:00" because "1" < "8"
// Result: 10:00 AM shown BEFORE 8:00 AM ❌
// FIXED (v4.1.0):
$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480
$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600
return $aMinutes - $bMinutes;
// Result: 8:00 AM shown BEFORE 10:00 AM ✓
```
**Example Before Fix**:
```
🔖 Weekend Ticket Duty (all-day)
8:00 AM START TICKETS
10:00 AM Soul Winning ← Wrong!
9:45 AM Coffee ← Should be before 10:00 AM
```
**Example After Fix**:
```
🔖 Weekend Ticket Duty (all-day)
8:00 AM START TICKETS
9:45 AM Coffee ← Correct!
10:00 AM Soul Winning
```
**Tooltip Positioning**:
- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()`
- Uses CSS custom properties `--tooltip-left` and `--tooltip-top`
- Positioned on `mouseenter` event
- Matches system tooltip implementation (no cutoff)
**JavaScript Implementation**:
```javascript
element.addEventListener("mouseenter", function() {
const rect = element.getBoundingClientRect();
element.style.setProperty("--tooltip-left", (rect.right - 10) + "px");
element.style.setProperty("--tooltip-top", (rect.top - 30) + "px");
});
```
**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically!
## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX
### 🎨 UI Improvements
- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge
- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar
- **Changed:** Main calendar conflict tooltip now much smaller (was too big)
### Technical Details
**Sidebar Overflow Fix**:
```php
// Before (line 2005):
style="...overflow:hidden..." // ← Blocked tooltips!
// After:
style="...overflow:visible..." // ← Tooltips extend beyond!
```
**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important`
**Main Calendar Tooltip Size**:
```css
/* Before: */
.conflict-tooltip {
border: 2px solid #ff9800;
border-radius: 6px;
padding: 8px 12px;
font-size: 12px;
min-width: 200px;
max-width: 350px;
}
/* After: */
.conflict-tooltip {
border: 1px solid #ff9800; /* Thinner */
border-radius: 3px; /* Smaller */
padding: 4px 8px; /* Less padding */
font-size: 10px; /* Smaller header */
min-width: 120px; /* Narrower */
max-width: 200px; /* Narrower */
}
.conflict-tooltip-body {
padding: 6px 8px; /* Was 10px 12px */
font-size: 9px; /* Was 11px */
line-height: 1.4; /* Was 1.6 */
}
.conflict-item {
padding: 2px 0; /* Was 4px */
font-size: 9px; /* Added smaller font */
}
```
**Result**:
- Main calendar tooltip ~50% smaller
- Sidebar tooltips now extend beyond borders
- Both tooltips compact and readable
## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP
### 🐛 Bug Fix
- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text)
- **Changed:** Using HTML entity `
` for newlines instead of `\n`
### Technical Details
**The Problem**:
```php
// Before (v4.0.7):
$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip
// Displayed as:
"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n
```
**The Fix**:
```php
// After (v4.0.8):
$conflictTooltip = "Conflicts with:
"; // HTML entity for newline
// Displays as:
Conflicts with:
• Event 1
• Event 2
```
**Why `
` Works**:
- HTML entity for line feed character
- Works in data attributes
- CSS `white-space: pre-line` preserves the newlines
- Renders as actual line breaks in tooltip
**Applied to**:
- PHP rendering (sidebar Today/Tomorrow/Important)
- JavaScript rendering (clicked day events)
## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX
### 🎨 UI Improvements
- **Changed:** Tooltip size reduced significantly (much more compact)
- **Fixed:** Tooltip now overflows sidebar borders (not cut off)
- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px)
- **Changed:** Narrower width (120-200px vs 200-300px)
### Technical Details
**Tooltip Size Reduction**:
```css
/* Before (v4.0.6):
padding: 6px 10px;
font-size: 11px;
min-width: 200px;
max-width: 300px;
/* After (v4.0.7): */
padding: 3px 6px;
font-size: 9px;
min-width: 120px;
max-width: 200px;
```
**Overflow Fix**:
```css
/* Allow tooltip to extend beyond sidebar */
.sidebar-widget,
.sidebar-matrix {
overflow: visible !important;
}
/* Position tooltip outside */
[data-tooltip]:before {
bottom: 120%; /* Further above */
right: -10px; /* Can extend beyond edge */
z-index: 10000; /* Always on top */
}
```
**Visual Result**:
- Tooltip is ~40% smaller
- Extends beyond sidebar border if needed
- Still readable, just more compact
- Better for small screens
## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING
### 🐛 Critical Fix
- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly
- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names
- **Fixed:** Events without end time now treated as zero-duration (not +1 hour)
- **Fixed:** Now matches what you see in main calendar view
### ✨ UI Improvement
- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right)
- **Added:** Custom CSS tooltip with data-tooltip attribute
- **Improved:** Better tooltip positioning - doesn't overflow screen edges
### Technical Details
**The Problem - Field Name Mismatch**:
```php
// Main calendar (line 697):
$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase)
// Sidebar (before fix):
$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case)
```
**The Problem - Duration Logic**:
```php
// Main calendar (line 697):
$end1 = isset($evt1['endTime']) && !empty($evt1['endTime'])
? $evt1['endTime']
: $evt1['time']; // ← Uses START time (zero duration)
// Sidebar (before fix):
$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour!
```
**The Fix**:
```php
// Now checks BOTH field names:
if (isset($event['end_time']) && $event['end_time'] !== '') {
$endTime = $event['end_time'];
} elseif (isset($event['endTime']) && $event['endTime'] !== '') {
$endTime = $event['endTime'];
} else {
$endTime = $startTime; // ← Matches main calendar!
}
```
**Tooltip Positioning**:
- Uses `data-tooltip` attribute instead of `title`
- CSS positions tooltip ABOVE badge (`bottom: 100%`)
- Aligns to RIGHT edge (`right: 0`)
- Arrow points down to badge
- Black background with white text
- Max width 300px
### Example
**6:00 PM Evening Service** (no end time):
- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌
- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar!
**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**:
- Zero-duration events at 6:00 PM don't overlap with anything
- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict
**Tooltip appears**:
```
┌────────────────────┐
│ Conflicts with: │
│ • Super Bowl │
│ (3:30 PM-7:00 PM)│
└─────────┬──────────┘
▼
⚠
```
## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING
### 🐛 Bug Fix
- **Fixed:** Events without end_time now properly get 1-hour default duration
- **Fixed:** Empty string end_time values now treated as missing (was causing issues)
- **Improved:** More robust checking for `end_time` field (checks both isset and not empty)
### Technical Details
**The Problem**:
```php
// Before (broken):
$endTime = isset($event['end_time']) ? $event['end_time'] : default;
// If end_time exists but is empty string "":
isset($event['end_time']) = TRUE
$endTime = "" // ← Empty string, not default!
```
**The Fix**:
```php
// After (fixed):
$endTime = (isset($event['end_time']) && $event['end_time'] !== '')
? $event['end_time']
: $this->addHoursToTime($startTime, 1);
// Now empty string gets the default 1-hour duration
```
**Why This Matters**:
Events 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.
**Example**:
```
Super Bowl: 3:30 PM - 7:00 PM
Evening Service: 6:00 PM - ??? (should be 7:00 PM)
If end_time = "" (empty string):
Old code: Uses "" → conflict detection fails
New code: Uses 7:00 PM → conflict detected ✓
```
### Testing
If you're still not seeing the conflict on the 6:00 PM service:
1. Check if the event has `end_time` set in the JSON
2. Clear cache (Admin → Manage Events → Clear Cache)
3. The conflict should now appear
## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS
### ✨ Feature Added
- **Added:** Hover over ⚠ badge to see which events are conflicting
- **Added:** Tooltip shows conflicting event titles and times
- **Added:** Works in both sidebar sections and clicked day events
### Technical Details
**Conflict Tracking Enhanced**:
```php
// Now tracks WHICH events conflict:
$event['conflictingWith'] = [
['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'],
['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30']
];
```
**Tooltip Format**:
```
Conflicts with:
• Meeting (10:00 AM-11:00 AM)
• Call (10:30 AM-11:30 PM)
```
**Where It Works**:
- ✅ Today section (sidebar)
- ✅ Tomorrow section (sidebar)
- ✅ Important Events section (sidebar)
- ✅ Clicked day events (week grid)
**Cursor**: Changes to `help` cursor on hover to indicate tooltip
### Note on Multi-Day Events
The 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.
## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC
### 🐛 Bug Fixes
- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections
- **Fixed:** Important Events now shows events even if they're today or tomorrow
- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular)
### Technical Details
**Conflict Badge Issue**:
```php
// BROKEN (line 2511):
$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']);
// ↑ Checking 'conflicts' (plural)
// But detectTimeConflicts() sets:
$event['conflict'] = true/false;
// ↑ Setting 'conflict' (singular)
// FIXED:
$hasConflict = isset($event['conflict']) && $event['conflict'];
```
**Result**: Badge now shows for ALL conflicting events in sidebar sections
**Important Events Logic Issue**:
```php
// BROKEN:
if ($dateKey === $todayStr) {
$todayEvents[] = ...;
} elseif ($dateKey === $tomorrowStr) {
$tomorrowEvents[] = ...;
} else { // ← Only checked if NOT today/tomorrow!
if ($isImportant) {
$importantEvents[] = ...;
}
}
// FIXED:
if ($dateKey === $todayStr) {
$todayEvents[] = ...;
}
if ($dateKey === $tomorrowStr) {
$tomorrowEvents[] = ...;
}
// ↑ Changed to separate 'if' statements
if ($isImportant && $dateKey in this week) {
$importantEvents[] = ...; // ← Now includes today/tomorrow too!
}
```
**Result**: Important namespace events now show in Important section even if they're today or tomorrow
### Conflict Badge Display
- Simplified to just ⚠ icon (no count)
- Orange color (#ff9800)
- 10px font size
- Hover shows "Time conflict detected"
## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY
### 🐛 Bug Fix
- **Fixed:** Important Events section now displays all events correctly
- **Fixed:** Single-event days now get conflict flag (was returning early without flag)
- **Fixed:** Conflict detection no longer causes events to disappear from Important section
### Technical Details
**The Problem**:
- `detectTimeConflicts()` returned early if only 1 event on a day
- Returned original array without adding 'conflict' field
- This inconsistency caused issues in event categorization
**The Solution**:
```php
// Before (broken):
if (empty($dayEvents) || count($dayEvents) < 2) {
return $dayEvents; // No 'conflict' field added!
}
// After (fixed):
if (count($dayEvents) === 1) {
return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag
}
```
**Result**:
- All events now have 'conflict' field consistently
- Single events: conflict = false
- Multiple events: conflict = true/false based on overlap
- Important Events section displays correctly
## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES
### 🐛 Bug Fixes
- **Fixed:** Conflict badge (⚠) now displays in clicked day events
- **Fixed:** Recurring events edit now updates time and end_time correctly
- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit
### ✨ Features Added
- **Added:** Time conflict detection for overlapping events
- **Added:** detectTimeConflicts() function checks all events on same day
- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions
- **Added:** Events now have 'conflict' flag set automatically
### 🎨 UI Changes
- **Changed:** Admin tab order: 📅 Manage Events (first), 📦 Update Plugin, ⚙️ Outlook Sync
- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin")
- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars)
### Technical Details
**Conflict Detection**:
```php
// Automatically detects overlapping events on same day
// Sets 'conflict' flag to true if event overlaps with another
$eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
```
**Logic**:
- All-day events never conflict (no time set)
- Timed events check for overlap with other timed events
- Overlap = start1 < end2 AND start2 < end1
- Default duration is 60 minutes if no end_time
**Recurring Events Fix**:
- Old: Updated `$event['start']` and `$event['end']` (wrong fields)
- New: Updates `$event['time']` and `$event['end_time']` (correct fields)
- Now edits actually save and update the events
**Week View Bars**:
- Shows 4 colored bars instead of 3
- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc.
## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 🎉
**Major Release**: Complete Matrix-themed calendar plugin with advanced features!
### 🌟 Major Features
#### Sidebar Widget
- **Week Grid**: Interactive 7-day calendar with click-to-view events
- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips
- **Live Clock**: Updates every second with date display
- **Real-time Weather**: Geolocation-based temperature with icon
- **Event Sections**: Today (orange), Tomorrow (green), Important (purple)
- **Add Event Button**: Dark green bar opens full event creation dialog
- **Matrix Theme**: Green glow effects throughout
#### Event Management
- **Single Color Bars**: Clean 3px bars showing event's assigned color
- **All-Day Events First**: Then sorted chronologically by time
- **Conflict Detection**: Orange ⚠ badge on overlapping events
- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//)
- **HTML Rendering**: Pre-rendered for JavaScript display
- **Click-to-View**: Click week grid days to expand event details
#### Admin Interface
- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button
- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings
- **Manage Events Tab**: Browse, edit, delete, move events across namespaces
#### Outlook Sync
- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook
- **Category Mapping**: Map colors to Outlook categories
- **Conflict Resolution**: Time conflict detection
- **Import/Export Config**: Encrypted configuration files
### 🎨 Design
- **Matrix Theme**: Authentic green glow aesthetic
- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections
- **Color Scheme**:
- Today: Orange #ff9800
- Tomorrow: Green #4caf50
- Important: Purple #9b59b6
- Add Event: Dark green #006400
- System bars: Green/Purple/Orange
### 🔧 Technical Highlights
- **Zero-margin Design**: Perfect flush alignment throughout
- **Flexbox Layout**: Modern, responsive structure
- **AJAX Operations**: No page reloads needed
- **Smart Sorting**: All-day events first, then chronological
- **Tooltip System**: Detailed stats on hover (working correctly)
- **Event Dialog**: Full form with drag support
- **Cache Management**: One-click cache clearing
### 📝 Breaking Changes from v3.x
- Removed dual color bars (now single event color bar only)
- Add Event button moved to between header and week grid
- All-day events now appear FIRST (not last)
- Update Plugin tab is now the default admin tab
### 🐛 Bug Fixes (v3.10.x → v4.0.0)
- ✅ Fixed color bars not showing (align-self:stretch vs height:100%)
- ✅ Fixed tooltip function naming (sanitized calId for JavaScript)
- ✅ Fixed weather display (added updateWeather function)
- ✅ Fixed HTML rendering in events (title_html/description_html fields)
- ✅ Fixed Add Event dialog (null check for calendar element)
- ✅ Fixed text positioning in Add Event button
- ✅ Fixed spacing throughout sidebar widget
### 📦 Complete Feature List
- Full calendar view (month grid)
- Sidebar widget (week view)
- Event panel (standalone)
- Event list (date ranges)
- Namespace support
- Color coding
- Time conflict detection
- DokuWiki syntax in events
- Outlook synchronization
- System monitoring
- Weather display
- Live clock
- Admin interface
- Cache management
- Draggable dialogs
- AJAX save/edit/delete
- Import/export config
### 🎯 Usage
**Sidebar Widget**:
```
{{calendar sidebar}}
{{calendar sidebar namespace=team}}
```
**Full Calendar**:
```
{{calendar}}
{{calendar year=2026 month=6 namespace=team}}
```
**Event Panel**:
```
{{eventpanel}}
```
**Event List**:
```
{{eventlist daterange=2026-01-01:2026-01-31}}
```
### 📊 Stats
- **40+ versions** developed during v3.x iterations
- **3.10.0 → 3.11.4**: Polish and refinement
- **4.0.0**: Production-ready Matrix Edition
### 🙏 Credits
Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration.
---
## Previous Versions (v3.11.4 and earlier)
## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING
- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px)
- **Improved:** Small breathing room between system stats bars and Add Event button
- **Visual:** Better spacing for cleaner appearance
### CSS Change:
**eventlist-today-header**:
- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px`
### Visual Result:
```
│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars
│ │ ← 2px space (restored)
├───────────────────────┤
│ + ADD EVENT │ ← Add Event bar
├───────────────────────┤
```
**Before (v3.11.3)**: No space, bars directly touch Add Event button
**After (v3.11.4)**: 2px breathing room for better visual hierarchy
## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION
- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset
- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error
- **Changed:** Add Event text moved up 1px (position:relative; top:-1px)
- **Changed:** Line-height reduced from 12px to 10px for better text centering
- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets
### JavaScript Fix:
**Problem**: Line 1084-1085 in calendar-main.js
```javascript
const calendar = document.getElementById(calId);
const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error!
```
**Solution**: Added null check
```javascript
const calendar = document.getElementById(calId);
const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null;
```
**Why This Happened**:
- Regular calendar has element with id=calId
- Sidebar widget doesn't have this element (different structure)
- Code tried to read .dataset on null, causing error
### Text Position Fix:
**Before**:
- line-height: 12px
- vertical-align: middle
- Text slightly low
**After**:
- line-height: 10px
- position: relative; top: -1px
- Text perfectly centered
### What Works Now:
✅ Click "+ ADD EVENT" in sidebar → Dialog opens
✅ No console errors
✅ Text properly centered vertically
✅ Form pre-filled with today's date
✅ Save works correctly
## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR
- **Added:** Event dialog to sidebar widget (same as regular calendar)
- **Changed:** Add Event button now opens proper event form dialog
- **Added:** renderEventDialog() called in renderSidebarWidget()
- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date
- **Improved:** Can now add events directly from sidebar widget
### Add Event Button Behavior:
**Before (v3.11.1)**: Showed alert with instructions
**After (v3.11.2)**: Opens full event creation dialog
**Dialog Features**:
- Date field (defaults to today)
- Title field (required)
- Time field (optional)
- End time field (optional)
- Color picker
- Category field
- Description field
- Save and Cancel buttons
- Draggable dialog
### Technical Changes:
- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget()
- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')`
- Dialog uses same structure as regular calendar
- Uses existing openAddEvent() and saveEventCompact() JavaScript functions
### User Flow:
1. User clicks "+ ADD EVENT" green bar
2. Event dialog opens with today's date pre-filled
3. User fills in event details
4. User clicks Save
5. Event saved via AJAX
6. Dialog closes
7. Sidebar refreshes to show new event
## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG
- **Fixed:** Removed bottom padding from header (was 2px, now 0)
- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0)
- **Fixed:** Add Event bar now flush against header with zero gap
- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin
- **Improved:** Alert provides clear instructions on how to add events
### CSS Changes:
**eventlist-today-header**:
- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom)
**eventlist-stats-container**:
- `margin-top: 2px` → `margin: 0` (removed all margins)
### Add Event Button Behavior:
**Before**: Clicked → Navigated to Admin → Manage Events tab
**After**: Clicked → Shows alert with instructions
**Alert Message**:
```
To add an event, go to:
Admin → Calendar Management → Manage Events tab
or use the full calendar view {{calendar}}
```
### Visual Result:
```
│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom)
├────────────────────────┤
│ + ADD EVENT │ ← Perfectly flush!
├────────────────────────┤
```
No gaps, perfectly aligned!
## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE
- **Moved:** Add Event bar back to original position (between header and week grid)
- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff)
- **Changed:** Letter spacing reduced from 0.5px to 0.4px
- **Fixed:** Text now fully visible without being cut off
- **Final:** Optimal position and size determined
### Final Layout:
```
┌─────────────────────────────┐
│ Clock | Weather | Stats │ ← Header
├─────────────────────────────┤
│ + ADD EVENT │ ← Bar (back here, smaller text)
├─────────────────────────────┤
│ M T W T F S S │ ← Week Grid
│ 3 4 5 6 7 8 9 │
├─────────────────────────────┤
│ Today │ ← Event sections
└─────────────────────────────┘
```
### Text Size Changes:
**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off
**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible
### Why This Position:
- Separates header from calendar
- Natural action point after viewing stats
- Users see stats → decide to add event → view calendar
- Consistent with original design intent
## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID
- **Moved:** Add Event bar repositioned from between header/grid to below week grid
- **Improved:** Better visual flow - header → stats → grid → add button → events
- **Changed:** Add Event bar now acts as separator between calendar and event sections
### New Layout:
```
┌─────────────────────────────┐
│ Clock | Weather | Stats │ ← Header
├─────────────────────────────┤
│ M T W T F S S │ ← Week Grid
│ 3 4 5 6 7 8 9 │
├─────────────────────────────┤
│ + ADD EVENT │ ← Add bar (moved here!)
├─────────────────────────────┤
│ Today │ ← Event sections
│ Tomorrow │
│ Important Events │
└─────────────────────────────┘
```
### Visual Flow:
**Before (v3.10.8)**:
1. Header (clock, weather, stats)
2. **+ ADD EVENT** bar
3. Week grid
4. Event sections
**After (v3.10.9)**:
1. Header (clock, weather, stats)
2. Week grid (calendar days)
3. **+ ADD EVENT** bar
4. Event sections
### Benefits:
- Natural reading flow: View calendar → Add event → See events
- Add button positioned between calendar and event list
- Acts as visual separator
- More logical action placement
## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR
- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color
- **Changed:** Events now display with single 3px color bar (event's assigned color only)
- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly
- **Simplified:** Cleaner visual with one color bar instead of two
- **Improved:** More space for event content without extra bar
### Visual Changes:
**Before (v3.10.7)** - Dual color bars:
```
├─ [Orange][Green] Event Title
├─ [Blue][Purple] Event Title
```
**After (v3.10.8)** - Single color bar:
```
├─ [Green] Event Title ← Only event color!
├─ [Purple] Event Title ← Only event color!
```
### Add Bar Changes:
- Added `margin:0` to eliminate gaps
- Now flush against header (no space above)
- Now flush against week grid (no space below)
- Perfect seamless connection
### Technical Changes:
**renderSidebarEvent()**:
- Removed section color bar (4px)
- Kept only event color bar (3px)
**showDayEvents() JavaScript**:
- Removed section color bar (4px blue)
- Kept only event color bar (3px)
**Add Event bar**:
- Added `margin:0` inline style
- Removed all top/bottom margins
## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR
- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day)
- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%`
- **Changed:** Add Event bar color from orange to dark green (#006400)
- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off)
- **Changed:** Add Event bar text now bright green (#00ff00) with green glow
- **Changed:** Add Event bar font size increased from 7px to 9px
- **Changed:** Add Event bar letter spacing increased to 0.5px
- **Improved:** Hover effect on Add Event bar now darker green (#004d00)
### Color Bar Fix Details:
**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars
**Solution**: Applied same fix as clicked day events:
- Changed parent div: `align-items:start` → `align-items:stretch`
- Added `min-height:20px` to parent
- Changed bars: `height:100%` → `align-self:stretch`
- Bars now properly fill vertical space in ALL sections
### Add Event Bar Changes:
**Before**:
- Background: Orange (#ff9800)
- Text: Black (#000)
- Height: 6px (text cut off)
- Font: 7px
**After**:
- Background: Dark green (#006400)
- Text: Bright green (#00ff00) with green glow
- Height: 12px (text fully visible)
- Font: 9px
- Hover: Darker green (#004d00)
- Matrix-themed green aesthetic
## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE
- **Fixed:** Event color bars now display correctly in clicked day events
- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events
- **Added:** Conflict badge (⚠) appears on right side of conflicting events
- **Updated:** Complete README.md rewrite with full Matrix theme documentation
- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering)
- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px`
- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning
### Color Bar Fix:
**Problem**: Bars had `height:100%` but parent had no explicit height
**Solution**:
- Changed to `align-self:stretch` on bars
- Parent uses `align-items:stretch`
- Added `min-height:20px` to parent
- Bars now properly fill vertical space
### Sorting Change:
**Before**: Timed events first → All-day events last
**After**: All-day events FIRST → Timed events chronologically
**Example**:
```
Monday, Feb 5
├─ All Day - Project Deadline ← All-day first
├─ 8:00 AM - Morning Standup ← Earliest time
├─ 10:30 AM - Coffee with Bob
└─ 2:00 PM - Team Meeting ← Latest time
```
### Conflict Badge:
- Orange warning triangle (⚠) on right side
- 10px font size
- Only appears if `event.conflict` is true
- Title attribute shows "Time conflict detected"
- Small and unobtrusive
### README Update:
- Complete rewrite with Matrix theme focus
- Full usage instructions for all features
- Admin interface documentation
- Outlook sync setup guide
- System monitoring details
- Troubleshooting section
- Color scheme reference
- File structure documentation
- Performance tips
- Security notes
- Quick start examples
## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR
- **Added:** Events now sorted by time when clicking week grid days
- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px)
- **Improved:** Events with times appear first, sorted chronologically
- **Improved:** All-day events appear after timed events
- **Changed:** Add Event bar font size reduced to 7px (from 10px)
- **Changed:** Add Event bar now has 0 padding and fixed 6px height
### Sorting Logic:
- Events with times sorted by time (earliest first)
- All-day events (no time) appear at the end
- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare
- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event
### Add Event Bar Changes:
- **Height**: 6px (was ~12px with padding)
- **Padding**: 0 (was 4px top/bottom)
- **Font Size**: 7px (was 10px)
- **Letter Spacing**: 0.3px (was 0.5px)
- **Line Height**: 6px to match height
- **Vertical Align**: Middle for text centering
## Version 3.10.4 (2026-02-06) - ADD EVENT BAR
- **Added:** Thin orange "Add Event" bar between header and week grid
- **Added:** Quick access to event creation from sidebar widget
- **Styled:** Sleek design with hover effects and glow
- **Interactive:** Clicks navigate to Manage Events tab in admin
- **Improved:** User workflow for adding events from sidebar
### Visual Design:
- Orange background (#ff9800) matching Today section color
- 4px top/bottom padding for thin, sleek appearance
- Black text with white text-shadow for visibility
- Hover effect: Darkens to #ff7700 with enhanced glow
- Orange glow effect (box-shadow) matching Matrix theme
- Centered "+ ADD EVENT" text (10px, bold, letter-spacing)
### Technical Changes:
- Added between header close and renderWeekGrid() call
- Inline onclick handler navigates to admin manage tab
- Inline onmouseover/onmouseout for hover effects
- Smooth 0.2s transition on all style changes
## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION
- **Changed:** Update Plugin tab is now the default tab when opening admin
- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab
- **Improved:** Clear Cache button now larger and more prominent with helpful description
- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events
- **Removed:** Debug console.log statements from day event display
- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab
### UI Changes:
- Update Plugin tab opens by default (was Config/Outlook Sync tab)
- Clear Cache button prominently displayed at top of Update Plugin tab
- Orange 🗑️ button (10px 20px padding) with confirmation dialog
- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin"
- Success/error messages display on Update Plugin tab after cache clear
- Tab navigation reordered to put Update first
### Technical Changes:
- Default tab changed from 'config' to 'update' in html() method
- Tab navigation HTML reordered to show Update Plugin tab first
- clearCache() method now redirects with 'update' tab parameter
- Removed Clear Cache button from renderConfigTab()
- Added Clear Cache button to renderUpdateTab() with message display
## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX
- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days
- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML
- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields
- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events
### Technical Changes:
- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render()
- Events added to weekEvents now include pre-rendered HTML versions
- title_html and description_html fields populated before json_encode()
- JavaScript now receives properly formatted HTML content
## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON
- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123)
- **Fixed:** HTML event handlers now call correctly sanitized function names
- **Fixed:** Weather temperature now updates correctly in sidebar widget
- **Added:** Weather update function to sidebar widget JavaScript
- **Added:** "Clear Cache" button in admin panel for easy cache refresh
- **Added:** Default weather location set to Irvine, CA when geolocation unavailable
- **Improved:** All tooltip functions now work correctly on system status bars
### Technical Changes:
- Changed tooltip function names to use $jsCalId instead of $calId
- Changed HTML onmouseover/onmouseout to use $jsCalId
- Added updateWeather() function to sidebar widget
- Added getWeatherIcon() function to sidebar widget
- Added clearCache() method in admin.php
- Added recursiveDelete() helper method in admin.php
- Admin UI now has 🗑️ Clear Cache button alongside Export/Import
## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES
- **Fixed:** JavaScript syntax error "Missing initializer in const declaration"
- **Fixed:** Event links and formatting not displaying in clicked day events
- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores
- **Changed:** Event titles now use `title_html` field to preserve HTML formatting
- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting
- **Improved:** All JavaScript variable names now use valid syntax
- **Improved:** Links, bold, italic, and other HTML formatting preserved in events
### Technical Changes:
- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);`
- JavaScript variables now use underscores instead of dashes
- Event HTML rendering preserves DokuWiki formatting
- Fixed "showTooltip_sidebar is not defined" errors
- Fixed "showDayEvents_cal is not defined" errors
## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX
- **Fixed:** Critical JavaScript loading order issue causing ReferenceError
- **Fixed:** Functions now defined BEFORE HTML that uses them
- **Changed:** Consolidated all JavaScript into single comprehensive script block
- **Removed:** ~290 lines of duplicate JavaScript code
- **Added:** Shared state management with `sharedState_[calId]` object
- **Improved:** System tooltip functions now work correctly
- **Improved:** Week grid click events now work correctly
### Technical Changes:
- Moved all JavaScript to beginning of widget (before HTML)
- Removed duplicate script blocks
- Unified tooltip and stats functions
- Shared latestStats and cpuHistory state
- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined"
## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS
- **Added:** Dual color bars on events (section color + event color)
- **Added:** Click week grid days to view events (replaced hover tooltips)
- **Added:** Expandable section below week grid for selected day events
- **Added:** Blue theme for selected day section
- **Changed:** Week grid days now clickable instead of tooltips
- **Changed:** Section bar: 4px wide (left)
- **Changed:** Event bar: 3px wide (right)
- **Increased:** Gap between color bars from 3px to 6px
- **Improved:** Click is more reliable and mobile-friendly than hover tooltips
### Visual Changes:
- Each event shows TWO color bars side-by-side
- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue)
- Right bar (3px): Individual event's assigned color
- Click any day in week grid to expand event list
- X button to close selected day events
## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY
- **Increased:** Event color bar width from 2px to 3px
- **Increased:** Gap between section and event bars from 3px to 6px
- **Improved:** Event color bars now more visible alongside section bars
- **Note:** Dual color bar system already in place from v3.9.6
## Version 3.9.6 (2026-02-05) - UI REFINEMENTS
- **Changed:** Date in Important Events moved below event name (was above)
- **Changed:** Section headers now 9px font size (was 10px)
- **Changed:** Section headers now normal case (was ALL CAPS)
- **Changed:** Letter spacing reduced from 0.8px to 0.3px
- **Improved:** More natural reading flow with date below event name
- **Improved:** Cleaner, more subtle section headers
### Header Changes:
- "TODAY" → "Today"
- "TOMORROW" → "Tomorrow"
- "IMPORTANT EVENTS" → "Important Events"
## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN
- **Redesigned:** Complete overhaul of `sidebar` parameter
- **Added:** Compact week-at-a-glance itinerary view (200px wide)
- **Added:** Live clock widget at top of sidebar
- **Added:** 7-cell week grid showing event bars
- **Added:** Today section with orange header and left border
- **Added:** Tomorrow section with green header and left border
- **Added:** Important Events section with purple header and left border
- **Added:** Admin setting to configure important namespaces
- **Added:** Time conflict badges in sidebar events
- **Added:** Task checkboxes in sidebar events
- **Changed:** Sidebar now optimized for narrow spaces (200px)
- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets
### New Features:
- Clock updates every second showing current time
- Week grid shows Mon-Sun with colored event bars
- Today/Tomorrow sections show full event details
- Important events highlighted in purple (configurable namespaces)
- All badges (conflict, time, etc.) shown in compact format
- Automatic time conflict detection
## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP
- **Removed:** 16 unused/debug/backup files
- **Removed:** 69 console.log() debug statements
- **Removed:** 3 orphaned object literals from console.log removal
- **Removed:** Temporary comments and markers
- **Fixed:** JavaScript syntax errors from cleanup
- **Improved:** Code quality and maintainability
- **Improved:** Reduced plugin size by removing unnecessary files
- **Status:** Production-ready, fully cleaned codebase
### Files Removed:
- style.css.backup, script.js.backup
- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php
- debug_events.php, debug_html.php, cleanup_events.php
- fix_corrupted_json.php, fix_wildcard_namespaces.php
- find_outlook_duplicates.php, update_namespace.php
- validate_calendar_json.php, admin.js
- test_date_field.html
## Version 3.7.5 (2026-02-05)
- **Fixed:** PHP syntax error (duplicate foreach loop removed)
- **Fixed:** Time variable handling in grace period logic
## Version 3.7.4 (2026-02-05)
- **Added:** 15-minute grace period for timed events
- **Changed:** Events with times now stay visible for 15 minutes after their start time
- **Changed:** Prevents events from immediately disappearing when they start
- **Improved:** Better user experience for ongoing events
- **Fixed:** Events from earlier today now properly handled with grace period
## Version 3.7.3 (2026-02-05)
- **Changed:** Complete redesign of cleanup section for compact, sleek layout
- **Changed:** Radio buttons now in single row at top
- **Changed:** All options visible with grayed-out inactive states (opacity 0.4)
- **Changed:** Inline controls - no more grid layout or wrapper boxes
- **Changed:** Namespace filter now compact single-line input
- **Changed:** Smaller buttons and tighter spacing throughout
- **Improved:** More professional, space-efficient design
## Version 3.7.2 (2026-02-04)
- **Fixed:** Strange boxes under cleanup options - now properly hidden
- **Changed:** Unified color scheme across all admin sections
- **Changed:** Green (#00cc07) - Primary actions and main theme
- **Changed:** Orange (#ff9800) - Warnings and cleanup features
- **Changed:** Purple (#7b1fa2) - Secondary actions and accents
- **Improved:** Consistent visual design throughout admin interface
## Version 3.7.1 (2026-02-04)
- **Fixed:** Cleanup section background changed from orange to white
- **Fixed:** Event cleanup now properly scans all calendar directories
- **Added:** Debug info display when preview finds no events
- **Improved:** Better directory scanning logic matching other features
## Version 3.7.0 (2026-02-04)
- **Added:** Event cleanup feature in Events Manager
- **Added:** Delete old events by age (months/years old)
- **Added:** Delete events by status (completed tasks, past events)
- **Added:** Delete events by date range
- **Added:** Namespace filter for targeted cleanup
- **Added:** Preview function to see what will be deleted
- **Added:** Automatic backup creation before cleanup
- **Changed:** Reduced changelog viewer height to 100px (was 400px)
## Version 3.6.3 (2026-02-04)
- **Fixed:** Conflict tooltips now work properly after navigating between months
- **Added:** Changelog display in Update Plugin tab
- **Added:** CHANGELOG.md file with version history
- **Improved:** Changelog shows last 10 versions with color-coded change types
- **Fixed:** Removed debug console.log statements
## Version 3.6.2 (2026-02-04)
- **Fixed:** Month title now updates correctly when navigating between months
- **Changed:** All eventpanel header elements reduced by 10% for more compact design
- **Changed:** Reduced header height from 78px to 70px
## Version 3.6.1 (2026-02-04)
- **Changed:** Complete redesign of eventpanel header with practical two-row layout
- **Fixed:** Improved layout for narrow widths (~500px)
- **Changed:** Simplified color scheme (removed purple gradient)
## Version 3.6.0 (2026-02-04)
- **Changed:** Redesigned eventpanel header with gradient background
- **Changed:** Consolidated multiple header rows into compact single-row design
## Version 3.5.1 (2026-02-04)
- **Changed:** Moved event search bar into header row next to + Add button
- **Improved:** More compact UI with search integrated into header
## Version 3.5.0 (2026-02-04)
- **Added:** Event search functionality in sidebar and eventpanel
- **Added:** Real-time filtering as you type
- **Added:** Clear button (✕) appears when searching
- **Added:** "No results" message when search returns nothing
## Version 3.4.7 (2026-02-04)
- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding)
- **Fixed:** Removed debug logging from console
- **Changed:** Updated export version number to match plugin version
## Version 3.4.6 (2026-02-04)
- **Added:** Debug logging to diagnose conflict detection issues
- **Development:** Extensive console logging for troubleshooting
## Version 3.4.5 (2026-02-04)
- **Added:** Debug logging to showDayPopup and conflict detection
- **Development:** Added logging to trace conflict detection flow
## Version 3.4.4 (2026-02-04)
- **Fixed:** Conflict detection now persists across page refreshes (PHP-based)
- **Fixed:** Conflict tooltips now appear on hover
- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation)
- **Added:** Conflict badges in both future and past events sections
## Version 3.4.3 (2026-02-04)
- **Added:** Custom styled conflict tooltips with hover functionality
- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2)
- **Improved:** Beautiful tooltip design with orange header and clean formatting
## Version 3.4.2 (2026-02-04)
- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3)
## Version 3.4.1 (2026-02-04)
- **Fixed:** End time field now properly saves to database
- **Fixed:** End time dropdown now filters to show only valid times after start time
- **Added:** Smart dropdown behavior - expands on focus, filters invalid options
- **Improved:** End time auto-suggests +1 hour when start time selected
## Version 3.4.0 (2026-02-04)
- **Added:** End time support for events (start and end times)
- **Added:** Automatic time conflict detection
- **Added:** Conflict warning badges (⚠️) on events with overlapping times
- **Added:** Conflict tooltips showing which events conflict
- **Added:** Visual conflict indicators with pulse animation
- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM")
## Version 3.3.77 (2026-02-04)
- **Fixed:** Namespace badge onclick handlers restored after clearing filter
- **Fixed:** Namespace filtering works infinitely (filter → clear → filter)
## Version 3.3.76 (2026-02-04)
- **Fixed:** Namespace badges now clickable after clearing namespace filter
## Version 3.3.75 (2026-02-04)
- **Fixed:** Form resubmission warnings eliminated
- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303
- **Changed:** All admin redirects now use absolute URLs
## Version 3.3.74 (2026-02-04)
- **Fixed:** Clearing namespace filter now restores original namespace instead of default
- **Added:** data-original-namespace attribute to preserve initial namespace setting
- **Improved:** Console logging for namespace filter debugging
## Version 3.3.73 (2026-02-03)
- **Added:** Dynamic namespace filtering banner with clear button
- **Fixed:** JavaScript function accessibility issues
- **Fixed:** Namespace badge click handlers in event lists
- **Improved:** Persistent namespace filtering across views
## Earlier Versions
See previous transcripts for complete history through v3.3.73, including:
- Recurring events with Outlook sync
- Multi-namespace support
- Event categories and mapping
- Backup/restore functionality
- System statistics bar
- Namespace selector with fuzzy search
- Events Manager with import/export
- And much more...