Files
gott/wwwroot/js/pages/settings-page.js
T
Meleki e930268476 refactor(js): 4. Iteration – Card-Preview-Helper, Button-Loading, Stream-Events vereinfacht
Neue Helper:
- _renderCardPreview(): Gemeinsamer Helper für Agent/Session-Card-Vorschau
  (ersetzt renderAgentInCard + renderSessionSelectCard Duplikate)
- withButtonLoading(btn, text, fn): Eliminiert ~15x identisches
  disable/text/try/finally/reset Pattern in allen Pages
- formatDate(): Nach ui-helpers.js verschoben (war in dashboard.js)
- createMDE(): maxHeight-Option hinzugefügt

Dedupliziert:
- handleStreamEvent: 12 Preparer/Review/Finalizer cases → 7 durch
  case-Grouping (start/text/tool_use shared)
- _escCmdAttr() entfernt → nutzt jetzt esc() aus ui-helpers.js
- feInitEasyMDE() nutzt jetzt createMDE() statt eigener EasyMDE-Init

Betroffene Dateien: ui-helpers.js, chat.js, commands-ui.js,
file-explorer.js, dashboard.js, session-page.js, cronjob-page.js,
profile-page.js, admin-page.js, server-settings-page.js, settings-page.js
2026-03-07 22:34:37 +01:00

79 lines
2.6 KiB
JavaScript

// ── Settings Page ──
registerPage('settings', {
init() {
const slider = document.getElementById('settingPageWidth');
const display = document.getElementById('settingPageWidthValue');
const toolCallSelect = document.getElementById('settingToolCallDisplay');
const chainMetaSelect = document.getElementById('settingChainMetaDisplay');
const showDeletedToggle = document.getElementById('settingShowDeletedMessages');
const resetBtn = document.getElementById('settingsResetBtn');
const backupSection = document.getElementById('settingsBackupSection');
// Backup nur für Admins
if (currentUser && currentUser.isAdmin) {
backupSection.style.display = '';
}
const s = loadSettings();
slider.value = s.pageWidth;
display.textContent = s.pageWidth + 'px';
toolCallSelect.value = s.toolCallDisplay;
chainMetaSelect.value = s.chainMetaDisplay;
showDeletedToggle.checked = s.showDeletedMessages;
slider.addEventListener('input', () => {
display.textContent = slider.value + 'px';
});
slider.addEventListener('change', () => {
var s = loadSettings();
s.pageWidth = parseInt(slider.value, 10);
saveSettings(s);
});
toolCallSelect.addEventListener('change', () => {
var s = loadSettings();
s.toolCallDisplay = toolCallSelect.value;
saveSettings(s);
});
chainMetaSelect.addEventListener('change', () => {
var s = loadSettings();
s.chainMetaDisplay = chainMetaSelect.value;
saveSettings(s);
});
showDeletedToggle.addEventListener('change', () => {
var s = loadSettings();
s.showDeletedMessages = showDeletedToggle.checked;
saveSettings(s);
});
const backupBtn = document.getElementById('settingsBackupBtn');
if (backupBtn) backupBtn.addEventListener('click', () => withButtonLoading(backupBtn, 'Wird erstellt...', async () => {
try {
await apiBackupDb();
} catch (e) {
console.error('Backup fehlgeschlagen:', e);
}
}));
resetBtn.addEventListener('click', async () => {
if (!confirm('Alle Einstellungen auf Standard zurücksetzen?')) return;
await saveSettings(Object.assign({}, SETTINGS_DEFAULTS));
// Update UI
slider.value = SETTINGS_DEFAULTS.pageWidth;
display.textContent = SETTINGS_DEFAULTS.pageWidth + 'px';
toolCallSelect.value = SETTINGS_DEFAULTS.toolCallDisplay;
chainMetaSelect.value = SETTINGS_DEFAULTS.chainMetaDisplay;
showDeletedToggle.checked = SETTINGS_DEFAULTS.showDeletedMessages;
});
},
destroy() {}
});