diff --git a/frontend/css/app.css b/frontend/css/app.css index 21d6757..2fac119 100644 --- a/frontend/css/app.css +++ b/frontend/css/app.css @@ -1455,9 +1455,9 @@ a { color: var(--primary); text-decoration: none; } .ct-dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; margin-right: 5px; vertical-align: middle; flex-shrink: 0; } .ct-empty { color: var(--text-3); font-size: 13px; padding: 16px 0; text-align: center; } .ct-toggle { cursor: pointer; } -.ct-eye { opacity: .55; transition: opacity .15s; } -.ct-eye[data-ct-visible="1"] { opacity: 1; } -.ct-eye:hover { opacity: 1; } +.ct-eye, .ct-bell { opacity: .45; transition: opacity .15s; } +.ct-eye[data-ct-visible="1"], .ct-bell[data-ct-on="1"] { opacity: 1; } +.ct-eye:hover, .ct-bell:hover { opacity: 1; } /* ── Month View (spanning bars) ─────────────────────────── */ .month-body { diff --git a/frontend/js/calendar.js b/frontend/js/calendar.js index e893a34..e0ebb94 100644 --- a/frontend/js/calendar.js +++ b/frontend/js/calendar.js @@ -3356,14 +3356,16 @@ function renderCalendarTable() { if (!container) return; const TRASH = ``; - const EYE_ON = ``; - const EYE_OFF = ``; + const EYE_ON = ``; + const EYE_OFF = ``; + const BELL_ON = ``; + const BELL_OFF = ``; let rowCount = 0; const hid = (src, id, isVisible) => ``; - const rem = (src, id, checked) => - ``; + const rem = (src, id, on) => + ``; const dot = (color, fb) => ``; @@ -3503,20 +3505,22 @@ function renderCalendarTable() { }); }); - // Reminders toggle - container.querySelectorAll('.ct-toggle[data-ct-rem]').forEach(cb => { - cb.addEventListener('change', async () => { - const src = cb.dataset.ctRem, id = parseInt(cb.dataset.ctId), enabled = cb.checked; + // Reminders bell toggle + container.querySelectorAll('.ct-bell[data-ct-rem]').forEach(btn => { + btn.addEventListener('click', async () => { + const src = btn.dataset.ctRem, id = parseInt(btn.dataset.ctId); + const enabled = btn.dataset.ctOn !== '1'; // currently on → turn off, currently off → turn on const path = src === 'ical' ? `/ical/subscriptions/${id}` : `/${src === 'ha' ? 'homeassistant' : src}/calendars/${id}`; try { await api.put(path, { reminders_enabled: enabled }); - if (src === 'local') { const c = state.localCalendars.find(c => c.id === id); if (c) c.reminders_enabled = enabled; } - else if (src === 'ical') { const s = state.icalSubscriptions.find(s => s.id === id); if (s) s.reminders_enabled = enabled; } - else if (src === 'caldav') { for (const acc of state.accounts) { const c = acc.calendars.find(c => c.id === id); if (c) c.reminders_enabled = enabled; } } + if (src === 'local') { const c = state.localCalendars.find(c => c.id === id); if (c) c.reminders_enabled = enabled; } + else if (src === 'ical') { const s = state.icalSubscriptions.find(s => s.id === id); if (s) s.reminders_enabled = enabled; } + else if (src === 'caldav') { for (const acc of state.accounts) { const c = acc.calendars.find(c => c.id === id); if (c) c.reminders_enabled = enabled; } } else if (src === 'google') { for (const acc of state.googleAccounts) { const c = acc.calendars.find(c => c.id === id); if (c) c.reminders_enabled = enabled; } } else if (src === 'ha') { for (const acc of state.haAccounts) { const c = acc.calendars.find(c => c.id === id); if (c) c.reminders_enabled = enabled; } } + renderCalendarTable(); renderCalendarList(); - } catch (e) { showToast(e.message, true); cb.checked = !cb.checked; } + } catch (e) { showToast(e.message, true); } }); }); diff --git a/frontend/js/version.js b/frontend/js/version.js index ff8bd7c..54a26e6 100644 --- a/frontend/js/version.js +++ b/frontend/js/version.js @@ -1,2 +1,2 @@ // Increment APP_VERSION with every code change -export const APP_VERSION = 'v53'; +export const APP_VERSION = 'v54';