merge: beta into master
This commit is contained in:
@@ -115,6 +115,7 @@ export async function initCalendar() {
|
||||
bindProfileModal();
|
||||
bindSwipeNavigation();
|
||||
handleHAOAuthReturn();
|
||||
<<<<<<< HEAD
|
||||
|
||||
// Browser-Back/Forward: URL-Hash → State synchronisieren
|
||||
window.addEventListener('hashchange', () => {
|
||||
@@ -131,6 +132,8 @@ export async function initCalendar() {
|
||||
}
|
||||
if (changed) fetchAndRender();
|
||||
});
|
||||
=======
|
||||
>>>>>>> e744b1829e99db6b80922f75542ced329138e474
|
||||
}
|
||||
|
||||
function handleHAOAuthReturn() {
|
||||
@@ -144,7 +147,11 @@ 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 || [];
|
||||
@@ -154,7 +161,11 @@ 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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,7 +260,10 @@ 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;
|
||||
}
|
||||
|
||||
@@ -154,7 +154,11 @@ 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?',
|
||||
@@ -365,7 +369,11 @@ 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}"?',
|
||||
|
||||
@@ -1,2 +1,6 @@
|
||||
// Increment APP_VERSION with every code change
|
||||
<<<<<<< HEAD
|
||||
export const APP_VERSION = 'v17';
|
||||
=======
|
||||
export const APP_VERSION = 'v11';
|
||||
>>>>>>> e744b1829e99db6b80922f75542ced329138e474
|
||||
|
||||
@@ -63,6 +63,7 @@ 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);
|
||||
@@ -76,6 +77,10 @@ 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;
|
||||
@@ -247,6 +252,7 @@ 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
|
||||
@@ -269,6 +275,13 @@ 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user