diff --git a/frontend/css/app.css b/frontend/css/app.css index 74654d8..d3a38f0 100644 --- a/frontend/css/app.css +++ b/frontend/css/app.css @@ -975,15 +975,11 @@ a { color: var(--primary); text-decoration: none; } } .ctx-item:hover { background: var(--bg-hover); } -<<<<<<< HEAD /* ── Event Popup ────────────────────────────────────────── Layout: Color-Dot + Title links, kleine Icon-Toolbar rechts oben. Icons sind im Ruhezustand transparent (nur das SVG selbst sichtbar), bekommen erst beim Hover einen runden farbigen Hintergrund. Wirkt modern und lässt dem Titel die meiste Breite. */ -======= -/* ── Event Popup ────────────────────────────────────────── */ ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 .event-popup { position: fixed; z-index: 600; background: var(--bg-surface); @@ -1701,24 +1697,12 @@ a { color: var(--primary); text-decoration: none; } .topbar-left { gap: 0; } .topbar-right { gap: 0; } -<<<<<<< HEAD /* Event-Popup auf Mobile: an Viewport-Breite anpassen */ .event-popup { width: min(94vw, 380px); max-width: 94vw; } .popup-header { padding: 10px 8px 10px 14px; } .popup-header h4 { font-size: 13.5px; } .popup-icon-btn { width: 32px; height: 32px; } .popup-icon-btn svg { width: 16px; height: 16px; } -======= - /* Event-Popup: Buttons kompakt halten, kein 44px-Override ───── */ - .event-popup .icon-btn { - min-width: 32px !important; - min-height: 32px !important; - width: 32px; - height: 32px; - } - .event-popup .popup-header { gap: 2px; padding: 10px 12px; } - .event-popup { width: min(92vw, 340px); max-width: 92vw; } ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 /* Monatsansicht: Startzeit ausblenden — nur Titel anzeigen ──── */ .month-event-time { display: none; } diff --git a/frontend/js/calendar.js b/frontend/js/calendar.js index de0be27..3d15ac5 100644 --- a/frontend/js/calendar.js +++ b/frontend/js/calendar.js @@ -123,7 +123,6 @@ export async function initCalendar() { bindProfileModal(); bindSwipeNavigation(); handleHAOAuthReturn(); -<<<<<<< HEAD // Browser-Back/Forward: URL-Hash → State synchronisieren window.addEventListener('hashchange', () => { @@ -140,8 +139,6 @@ export async function initCalendar() { } if (changed) fetchAndRender(); }); -======= ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 } function handleHAOAuthReturn() { @@ -155,11 +152,7 @@ function handleHAOAuthReturn() { }; if (params.has('ha_connected')) { showToast('Home Assistant verbunden'); -<<<<<<< HEAD window.history.replaceState({}, '', window.location.pathname + window.location.hash); -======= - window.history.replaceState({}, '', window.location.pathname); ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 fetchAndRender(true); api.get('/homeassistant/accounts').then(accs => { state.haAccounts = accs || []; @@ -169,11 +162,7 @@ function handleHAOAuthReturn() { } else if (params.has('ha_error')) { const code = params.get('ha_error'); showToast(errMap[code] || `HA-Anmeldung fehlgeschlagen: ${code}`, true); -<<<<<<< HEAD window.history.replaceState({}, '', window.location.pathname + window.location.hash); -======= - window.history.replaceState({}, '', window.location.pathname); ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 } } @@ -268,10 +257,7 @@ async function fetchAndRender(force = false, silent = false) { renderView(); updateTitle(); renderMiniCal(); -<<<<<<< HEAD writeUrlState(); -======= ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 prefetchIfNeeded(start, end); // extend cache in background if approaching an edge return; } diff --git a/frontend/js/i18n.js b/frontend/js/i18n.js index c918a7e..c443647 100644 --- a/frontend/js/i18n.js +++ b/frontend/js/i18n.js @@ -158,11 +158,7 @@ const translations = { rec_every: 'Alle', rec_days: 'Tage', rec_weeks: 'Wochen', rec_months: 'Monate', rec_ends: 'Endet', rec_never: 'Nie', rec_after_count: 'Nach Anzahl', rec_on_date: 'Am Datum', rec_occurrences: 'Termine', -<<<<<<< HEAD copy_to_calendar: 'Kopieren nach…', event_copied: 'Termin kopiert', copy: 'Kopieren', -======= - copy_to_calendar: 'Kopieren nach…', event_copied: 'Termin kopiert', ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 edit_before_copy: 'Vor dem Kopieren bearbeiten', event_updated: 'Termin aktualisiert', event_created: 'Termin erstellt', confirm_delete_event: '"{title}" wirklich löschen?', @@ -377,11 +373,7 @@ const translations = { rec_every: 'Every', rec_days: 'days', rec_weeks: 'weeks', rec_months: 'months', rec_ends: 'Ends', rec_never: 'Never', rec_after_count: 'After count', rec_on_date: 'On date', rec_occurrences: 'occurrences', -<<<<<<< HEAD copy_to_calendar: 'Copy to…', event_copied: 'Event copied', copy: 'Copy', -======= - copy_to_calendar: 'Copy to…', event_copied: 'Event copied', ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 edit_before_copy: 'Edit before copying', event_updated: 'Event updated', event_created: 'Event created', confirm_delete_event: 'Really delete "{title}"?', diff --git a/frontend/js/version.js b/frontend/js/version.js index c7fd4d5..7cd23f5 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 = 'v21'; +export const APP_VERSION = 'v22'; diff --git a/frontend/js/views/week.js b/frontend/js/views/week.js index 4aa14d0..e84c0cb 100644 --- a/frontend/js/views/week.js +++ b/frontend/js/views/week.js @@ -63,7 +63,6 @@ export function renderWeek(container, currentDate, events, onSlotClick, onEventC const color = ev.color || ev.calendarColor || '#4285f4'; const pastCls = isPast(ev) ? 'past' : ''; const multiCls = isMultiTimed ? 'multiday-timed' : ''; -<<<<<<< HEAD // continues-left/right: compute on date-only basis for all-day events let evStart = new Date(ev.start); let evEnd = new Date(ev.end); @@ -77,10 +76,6 @@ export function renderWeek(container, currentDate, events, onSlotClick, onEventC const lastDay = new Date(days[n-1]); lastDay.setHours(0, 0, 0, 0); const cL = evStart < firstDay ? 'continues-left' : ''; const cR = (ev.allDay ? evEnd > lastDay : evEnd > lastDayMidnight) ? 'continues-right' : ''; -======= - const cL = new Date(ev.start) < new Date(days[0]) ? 'continues-left' : ''; - const cR = new Date(ev.end) > (() => { const d = new Date(days[n-1]); d.setHours(24,0,0,0); return d; })() ? 'continues-right' : ''; ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 const label = isMultiTimed && isSameDay(new Date(ev.start), days[colStart]) ? `${fmtTime(new Date(ev.start))} ${ev.title}` : ev.title; @@ -252,7 +247,6 @@ function renderNowLine(container, days, hourH = 60) { function layoutWeekAllDay(evs, days) { const items = []; evs.forEach(ev => { -<<<<<<< HEAD // For all-day events, normalize to date-only with inclusive end-day // (iCal stores exclusive end → subtract 1). For timed events, keep // the original strict-overlap logic so events ending exactly at @@ -275,13 +269,6 @@ function layoutWeekAllDay(evs, days) { matches = new Date(ev.start) < de && new Date(ev.end) > ds; } if (matches) { -======= - let colStart = -1, colEnd = -1; - days.forEach((day, i) => { - const ds = new Date(day); ds.setHours(0, 0, 0, 0); - const de = new Date(day); de.setHours(24, 0, 0, 0); - if (new Date(ev.start) < de && new Date(ev.end) > ds) { ->>>>>>> e744b1829e99db6b80922f75542ced329138e474 if (colStart === -1) colStart = i; colEnd = i; } diff --git a/frontend/sw.js b/frontend/sw.js index efb9c6b..4626683 100644 --- a/frontend/sw.js +++ b/frontend/sw.js @@ -7,7 +7,7 @@ // the entry HTML / version files). New releases take effect on the next // reload, no manual SW unregister required. -const CACHE_VERSION = 'calendarr-v21'; +const CACHE_VERSION = 'calendarr-v22'; const OFFLINE_SHELL = ['/', '/index.html']; self.addEventListener('install', event => {