Dieser Commit ist enthalten in:
hendrik_gebhardt@gmx.de
2026-01-04 21:21:11 +00:00
committet von Server Deploy
Ursprung c21be47428
Commit 623bbdf5dd
19 geänderte Dateien mit 6290 neuen und 48 gelöschten Zeilen

Datei anzeigen

@ -108,6 +108,14 @@
font-weight: 600;
font-size: 1rem;
flex-shrink: 0;
position: relative;
}
.admin-user-initials {
font-size: 0.875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.admin-user-info {

Datei anzeigen

@ -150,15 +150,34 @@ class AdminManager {
});
}
/**
* Holt die Initialen des Benutzers
*/
getInitials(user) {
// Verwende primär das initials Feld
if (user.initials) {
return user.initials.toUpperCase();
}
// Fallback auf custom_initials für Kompatibilität
if (user.custom_initials) {
return user.custom_initials.toUpperCase();
}
// Letzer Fallback
return 'XX';
}
renderUserCard(user) {
const initial = (user.display_name || user.username).charAt(0).toUpperCase();
const initials = this.getInitials(user);
console.log('Rendering user card for:', user.email || user.username, '- Initials:', initials);
const isLocked = user.locked_until && new Date(user.locked_until) > new Date();
const permissions = user.permissions || [];
return `
<div class="admin-user-card" data-user-id="${user.id}">
<div class="admin-user-avatar" style="background-color: ${user.color || '#808080'}">
${initial}
<span class="admin-user-initials">${initials}</span>
</div>
<div class="admin-user-info">
<div class="admin-user-name">${this.escapeHtml(user.display_name)}</div>
@ -236,8 +255,8 @@ class AdminManager {
this.currentEditUser = user;
this.userModalTitle.textContent = 'Benutzer bearbeiten';
this.editUserId.value = user.id;
this.usernameInput.value = user.username;
this.usernameInput.disabled = true; // Username cannot be changed
this.usernameInput.value = user.initials || '';
this.usernameInput.disabled = false; // Initials can be changed
this.displayNameInput.value = user.display_name;
this.emailInput.value = user.email || '';
this.emailInput.disabled = false;
@ -285,9 +304,8 @@ class AdminManager {
permissions: this.roleSelect.value === 'admin' ? [] : this.getSelectedPermissions()
};
if (!isEdit) {
data.username = this.usernameInput.value.trim().toUpperCase();
}
// Kürzel immer mitschicken (bei Create und Update)
data.initials = this.usernameInput.value.trim().toUpperCase();
if (this.passwordInput.value) {
data.password = this.passwordInput.value;

Datei anzeigen

@ -135,12 +135,14 @@ class AuthManager {
// Get user initials
getUserInitials() {
if (!this.user) return '?';
return this.user.username
.split(' ')
.map(part => part.charAt(0).toUpperCase())
.slice(0, 2)
.join('');
// Verwende das initials Feld direkt
if (this.user.initials) {
return this.user.initials.toUpperCase();
}
// Fallback für alte Daten
return '??';
}
// Get user color

Datei anzeigen

@ -372,6 +372,7 @@ class BoardManager {
const currentUser = users.find(u => u.id === assignee.id);
const color = currentUser?.color || assignee.color || '#888';
const name = currentUser?.display_name || assignee.display_name || assignee.username || 'Benutzer';
const initials = currentUser?.initials || assignee.initials || getInitials(name);
const avatar = createElement('span', {
className: 'avatar task-assignee-avatar stacked',
@ -380,7 +381,7 @@ class BoardManager {
zIndex: 10 - index
},
title: name
}, [getInitials(name)]);
}, [initials]);
assigneesContainer.appendChild(avatar);
});

Datei anzeigen

@ -868,7 +868,7 @@ class CalendarViewManager {
if (task.assignees && task.assignees.length > 0) {
task.assignees.forEach(assignee => {
const currentUser = users.find(u => u.id === assignee.id);
const initials = currentUser?.username || assignee.username || '??';
const initials = currentUser?.initials || assignee.initials || '??';
const color = currentUser?.color || assignee.color || '#6B7280';
badges.push({ initials, color });
});
@ -879,7 +879,7 @@ class CalendarViewManager {
if (task.assignedTo) {
const user = users.find(u => u.id === task.assignedTo);
if (user) {
const initials = user.username || '??';
const initials = user.initials || '??';
badges.push({ initials, color: user.color || '#6B7280' });
return badges;
}

Datei anzeigen

@ -251,7 +251,7 @@ class DashboardManager {
createElement('span', {
className: 'avatar avatar-sm',
style: { backgroundColor: task.assignee.color || '#888' }
}, [getInitials(task.assignee.username)])
}, [task.assignee.initials || getInitials(task.assignee.username || '??')])
]) : null
].filter(Boolean));

Datei anzeigen

@ -443,7 +443,7 @@ class ListViewManager {
className: 'avatar',
style: { backgroundColor: user.color || '#6366F1' },
title: user.displayName // Tooltip zeigt Name beim Hover
}, [getInitials(user.displayName)]);
}, [user.initials || getInitials(user.displayName)]);
avatarContainer.appendChild(avatar);
}
});

Datei anzeigen

@ -818,7 +818,7 @@ class TaskModalManager {
const avatar = createElement('div', {
class: 'multi-select-option-avatar',
style: `background-color: ${user.color || '#6366F1'}`
}, [getInitials(user.display_name || user.username)]);
}, [user.initials || getInitials(user.display_name || user.username)]);
const name = createElement('span', { class: 'multi-select-option-name' }, [user.display_name || user.username]);

Datei anzeigen

@ -4,7 +4,7 @@
* Offline support and caching
*/
const CACHE_VERSION = '189';
const CACHE_VERSION = '197';
const CACHE_NAME = 'taskmate-v' + CACHE_VERSION;
const STATIC_CACHE_NAME = 'taskmate-static-v' + CACHE_VERSION;
const DYNAMIC_CACHE_NAME = 'taskmate-dynamic-v' + CACHE_VERSION;