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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user