feat: Anzeigename im Web (Profil bearbeiten + Anzeige)

- Profil: Anzeigename + Login-Name editierbar (vorher Benutzername read-only).
  Login-Namenwechsel speichert den frisch zurueckgegebenen Token.
- Menue/Dropdown und "Erstellt von"/Picker zeigen den Anzeigenamen.
- localStorage-User um display_name ergaenzt. Version v32.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-05-31 17:49:19 +02:00
parent f9923b022e
commit 2033cf99d4
5 changed files with 41 additions and 10 deletions

View File

@@ -2951,9 +2951,10 @@ function bindSettingsModal() {
export function openProfileModal() {
const user = JSON.parse(localStorage.getItem('user') || '{}');
// Username & email
// Names & email
document.getElementById('profile-username').value = user.username || '';
document.getElementById('profile-display-name').textContent = user.username || '';
document.getElementById('profile-display-name-input').value = user.display_name || user.username || '';
document.getElementById('profile-display-name').textContent = user.display_name || user.username || '';
// Load fresh profile data
api.get('/profile/').then(profile => {
@@ -3021,11 +3022,26 @@ function renderProfileCalendars() {
}
function bindProfileModal() {
// Save profile info (email)
// Save profile info (display name, login name, email)
document.getElementById('profile-save-info').onclick = async () => {
const email = document.getElementById('profile-email').value.trim();
const displayName = document.getElementById('profile-display-name-input').value.trim();
const loginName = document.getElementById('profile-username').value.trim();
const user = JSON.parse(localStorage.getItem('user') || '{}');
const body = { email: email || null };
if (displayName) body.display_name = displayName;
if (loginName && loginName.toLowerCase() !== (user.username || '')) body.username = loginName;
try {
await api.put('/profile/', { email: email || null });
const res = await api.put('/profile/', body);
// A login-name change returns a fresh token (the old one is now invalid).
if (res && res.access_token) localStorage.setItem('token', res.access_token);
// Keep the cached user (menu, "created by", etc.) in sync.
const updated = { ...user };
if (displayName) updated.display_name = displayName;
if (body.username) updated.username = body.username.toLowerCase();
localStorage.setItem('user', JSON.stringify(updated));
const dd = document.getElementById('dropdown-username');
if (dd) dd.textContent = updated.display_name || updated.username || 'Benutzer';
showToast(t('profile_saved'));
} catch (e) { showToast(e.message, true); }
};