UI-Verbesserungen: Favicon, Tab-Titel, Kalender umbenennen, Avatar-Crop, Farbpalette

- SVG-Favicon hinzugefügt
- Dynamischer Tab-Titel (z.B. "Calendarr - März 2026")
- Kalender per Doppelklick umbenennen (Backend + Frontend)
- Avatar-Anzeige im Topbar gefixt (onerror Fallback, robustes Laden)
- Avatar-Upload mit Cropper.js Bildausschnitt-Wahl
- Avatar-Limit auf 5 MB erhöht, Thumbnail auf 512px
- Farbpalette statt nativem Color-Picker für Kalenderfarben
This commit is contained in:
2026-03-26 15:14:34 +01:00
parent 77d6e20f86
commit 1bbabd6c4d
7 changed files with 256 additions and 43 deletions

View File

@@ -86,8 +86,10 @@ async function launchApp() {
// Load avatar image if available
try {
const me = await api.get('/auth/me');
// Store extended user info
localStorage.setItem('user', JSON.stringify({ ...user, ...me }));
if (me.has_avatar) {
avatar.innerHTML = `<img src="/api/profile/avatar?t=${Date.now()}" style="width:100%;height:100%;object-fit:cover;border-radius:50%">`;
loadAvatarImage(avatar, user.username);
}
} catch (_) {}
@@ -158,5 +160,20 @@ function bindLoginForm() {
});
}
// ── Avatar Helper ────────────────────────────────────────
function loadAvatarImage(avatarEl, username) {
const img = new Image();
img.onload = () => {
avatarEl.textContent = '';
img.style.cssText = 'width:100%;height:100%;object-fit:cover;border-radius:50%';
avatarEl.appendChild(img);
};
img.onerror = () => {
// Fallback to letter
avatarEl.textContent = (username || '?')[0].toUpperCase();
};
img.src = `/api/profile/avatar?t=${Date.now()}`;
}
// ── Start ─────────────────────────────────────────────────
boot();