refactor(frontend): Duplikate in JS eliminieren – Runde 2

Neue Helper-Funktionen:
- _openCardMenu(trigger, dropdown): Card-Menü-Positionierung (4x in dashboard.js dedupliziert)
- _createModal(title, extraClasses): Modal-Boilerplate (3 Modals in modals.js dedupliziert)
- _openPickerModal(title, items, currentId, onSelect, opts): Picker-Modal (Agent + Session zusammengeführt)
- createMDE(element, opts): EasyMDE-Initialisierung (3x in agent/session/profile-page dedupliziert)

Weitere Bereinigungen:
- _formatReplyTimestamp() entfernt, durch _formatTimestamp() ersetzt (reply.js + chat.js)
- showFormMessage/showPageMessage in admin-page.js durch showToast() ersetzt
- Inline-Nachrichten (profileMessage, profilePasswordMessage, adminMessage, adminFormMessage) durch Toast-Notifications ersetzt, zugehörige HTML-Elemente entfernt
- profile-page.js: messageDiv/passwordMessageDiv-Logik durch showToast() ersetzt

11 Dateien, -210 Zeilen netto
This commit is contained in:
Meleki committed 2026-03-07 21:50:23 +01:00
1 parent b56b83ad1e
commit 1a2c407538
11 files changed
+177 -387

No files matched your search

+7 -30
View File
@@ -22,26 +22,6 @@ registerPage('admin', {
var defaultPathBrowse = document.getElementById('adminDefaultPathBrowse');
var isAdminCheckbox = document.getElementById('adminIsAdmin');
var saveBtn = document.getElementById('adminFormSaveBtn');
var formMessage = document.getElementById('adminFormMessage');
var pageMessage = document.getElementById('adminMessage');
// ── Hilfsfunktionen ──
function showFormMessage(text, isError) {
formMessage.textContent = text;
formMessage.className = 'profile-message ' + (isError ? 'profile-message-error' : 'profile-message-success');
formMessage.hidden = false;
if (!isError) {
setTimeout(function() { formMessage.hidden = true; }, 3000);
}
}
function showPageMessage(text, isError) {
pageMessage.textContent = text;
pageMessage.className = 'profile-message ' + (isError ? 'profile-message-error' : 'profile-message-success');
pageMessage.hidden = false;
setTimeout(function() { pageMessage.hidden = true; }, 4000);
}
function renderUsers() {
list.innerHTML = '';
@@ -111,7 +91,7 @@ registerPage('admin', {
users = await apiAdminGetUsers();
renderUsers();
} catch (err) {
showPageMessage(err.message, true);
showToast(err.message, 'error');
}
}
@@ -128,7 +108,6 @@ registerPage('admin', {
defaultPathInput.value = user.defaultPath || '';
isAdminCheckbox.checked = user.isAdmin;
saveBtn.textContent = 'Speichern';
formMessage.hidden = true;
userForm.hidden = false;
usernameInput.focus();
}
@@ -142,7 +121,7 @@ registerPage('admin', {
await apiAdminDeleteUser(user.userId);
await loadUsers();
} catch (err) {
showPageMessage(err.message, true);
showToast(err.message, 'error');
}
}
@@ -152,7 +131,7 @@ registerPage('admin', {
var link = window.location.origin + '/api/auth/autologin?token=' + result.token;
showLoginLinkModal(user, link);
} catch (err) {
showPageMessage(err.message, true);
showToast(err.message, 'error');
}
}
@@ -249,14 +228,12 @@ registerPage('admin', {
defaultPathInput.value = '';
isAdminCheckbox.checked = false;
saveBtn.textContent = 'Erstellen';
formMessage.hidden = true;
userForm.hidden = false;
usernameInput.focus();
});
// Speichern
saveBtn.addEventListener('click', async function() {
formMessage.hidden = true;
saveBtn.disabled = true;
try {
@@ -276,14 +253,14 @@ registerPage('admin', {
await apiAdminResetPassword(editingUserId, pw);
}
showFormMessage('Benutzer aktualisiert', false);
showToast('Benutzer aktualisiert');
} else {
// Create
var username = usernameInput.value.trim();
var password = passwordInput.value;
if (!username || !password) {
showFormMessage('Benutzername und Passwort erforderlich', true);
showToast('Benutzername und Passwort erforderlich', 'error');
return;
}
@@ -295,13 +272,13 @@ registerPage('admin', {
isAdmin: isAdminCheckbox.checked
});
showFormMessage('Benutzer erstellt', false);
showToast('Benutzer erstellt');
}
userForm.hidden = true;
await loadUsers();
} catch (err) {
showFormMessage(err.message, true);
showToast(err.message, 'error');
} finally {
saveBtn.disabled = false;
}