Files
gott/wwwroot/js/pages/profile-page.js
T
Meleki df68843e82 feat: EasyMDE-Editor für Persona und Session-Kontext
- profile-page.js: #profilePersona textarea → EasyMDE mit Toolbar und Dark-Theme
- session-page.js: #sessionContext textarea → EasyMDE mit Toolbar und Dark-Theme
- form.css: Override-Styles für EasyMDE in Formularen (height: auto, border-radius)
- base.css: ul margin-left für korrekte Listen-Einrückung
- Beide Editoren: sauberes Cleanup via toTextArea() in destroy()
- Nutzt bestehende fe-mde-wrap Styles aus file-explorer.css
2026-03-05 20:24:30 +01:00

134 lines
4.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ── Profile Page ──
var _profileMde = null;
registerPage('profile', {
async init() {
var profile = await apiGetProfile();
if (!profile) return;
var usernameInput = document.getElementById('profileUsername');
var displayNameInput = document.getElementById('profileDisplayName');
var personaInput = document.getElementById('profilePersona');
var saveBtn = document.getElementById('profileSaveBtn');
var messageDiv = document.getElementById('profileMessage');
// EasyMDE für Persona
_profileMde = new EasyMDE({
element: personaInput,
initialValue: profile.persona || '',
toolbar: ['bold', 'italic', 'heading', '|', 'unordered-list', 'ordered-list', '|', 'link', 'code', '|', 'preview'],
status: false,
spellChecker: false,
autoDownloadFontAwesome: false,
minHeight: '150px',
placeholder: 'Beschreibe dich selbst – Name, Rolle, Präferenzen, Kommunikationsstil...',
previewClass: ['editor-preview', 'markdown']
});
_profileMde.codemirror.setOption('theme', 'default');
_profileMde.codemirror.getWrapperElement().closest('.EasyMDEContainer').classList.add('fe-mde-wrap');
var currentPwInput = document.getElementById('profileCurrentPassword');
var newPwInput = document.getElementById('profileNewPassword');
var confirmPwInput = document.getElementById('profileConfirmPassword');
var passwordBtn = document.getElementById('profilePasswordBtn');
var passwordMessageDiv = document.getElementById('profilePasswordMessage');
var logoutBtn = document.getElementById('profileLogoutBtn');
// Felder befüllen
usernameInput.value = profile.username || '';
displayNameInput.value = profile.displayName || '';
// Profil speichern
saveBtn.addEventListener('click', async function() {
saveBtn.disabled = true;
saveBtn.textContent = 'Speichern...';
messageDiv.hidden = true;
try {
var updated = await apiUpdateProfile({
displayName: displayNameInput.value.trim(),
persona: _profileMde.value().trim()
});
// currentUser aktualisieren
if (currentUser) {
currentUser.displayName = updated.displayName;
}
messageDiv.textContent = 'Profil gespeichert';
messageDiv.className = 'profile-message profile-message-success';
messageDiv.hidden = false;
setTimeout(function() { messageDiv.hidden = true; }, 3000);
} catch (err) {
messageDiv.textContent = err.message;
messageDiv.className = 'profile-message profile-message-error';
messageDiv.hidden = false;
} finally {
saveBtn.disabled = false;
saveBtn.textContent = 'Speichern';
}
});
// Passwort ändern
passwordBtn.addEventListener('click', async function() {
passwordMessageDiv.hidden = true;
var currentPw = currentPwInput.value;
var newPw = newPwInput.value;
var confirmPw = confirmPwInput.value;
if (!currentPw || !newPw) {
passwordMessageDiv.textContent = 'Alle Felder ausfüllen';
passwordMessageDiv.className = 'profile-message profile-message-error';
passwordMessageDiv.hidden = false;
return;
}
if (newPw !== confirmPw) {
passwordMessageDiv.textContent = 'Neue Passwörter stimmen nicht überein';
passwordMessageDiv.className = 'profile-message profile-message-error';
passwordMessageDiv.hidden = false;
return;
}
passwordBtn.disabled = true;
passwordBtn.textContent = 'Ändern...';
try {
await apiChangePassword(currentPw, newPw);
currentPwInput.value = '';
newPwInput.value = '';
confirmPwInput.value = '';
passwordMessageDiv.textContent = 'Passwort geändert';
passwordMessageDiv.className = 'profile-message profile-message-success';
passwordMessageDiv.hidden = false;
setTimeout(function() { passwordMessageDiv.hidden = true; }, 3000);
} catch (err) {
passwordMessageDiv.textContent = err.message;
passwordMessageDiv.className = 'profile-message profile-message-error';
passwordMessageDiv.hidden = false;
} finally {
passwordBtn.disabled = false;
passwordBtn.textContent = 'Passwort ändern';
}
});
// Logout
logoutBtn.addEventListener('click', async function() {
await apiLogout();
currentUser = null;
navigateTo('login');
});
},
destroy() {
if (_profileMde) {
_profileMde.toTextArea();
_profileMde = null;
}
}
});