document.addEventListener("DOMContentLoaded", function() { const savedPassword = localStorage.getItem("adminPassword"); const loginForm = document.getElementById("login-form"); const adminArea = document.getElementById("admin-area"); const sidebar = document.getElementById("sidebar"); const errorMessage = document.getElementById("error-message"); const passwordInput = document.querySelector("input[name='password']"); const timerDisplay = document.getElementById('logout-timer'); // Logout-Timer Element let inactivityTimeout; let logoutTimerInterval; // Variable für den Timer-Interval let timeRemaining = 5 * 60 * 1000; // 5 Minuten in Millisekunden function resetInactivityTimer() { clearTimeout(inactivityTimeout); clearInterval(logoutTimerInterval); // Timer-Interval zurücksetzen timeRemaining = 5 * 60 * 1000; // Reset des verbleibenden Zeitlimits startLogoutTimer(); // Timer neu starten inactivityTimeout = setTimeout(() => { logout(); // Automatischer Logout nach Inaktivität }, 5 * 60 * 1000); // 5 Minuten Timeout } // Überprüfen, ob ein Passwort gespeichert ist if (savedPassword) { loginForm.style.display = 'none'; adminArea.style.display = 'block'; sidebar.style.display = 'block'; timerDisplay.style.display = 'block'; // Timer anzeigen, wenn eingeloggt loadDashboard(); resetInactivityTimer(); // Timer bei Start setzen startLogoutTimer(); // Starte den Timer, wenn der Benutzer eingeloggt ist } else { // Standardmäßig den Timer ausblenden, wenn der Benutzer nicht eingeloggt ist timerDisplay.style.display = 'none'; } // Holen Sie sich das Passwort und die letzten 3 Passwörter von der API fetch('/api/admin-password') .then(response => response.json()) .then(data => { const correctPassword = data.password; const passwordChangeRequired = data.passwordChangeRequired; // Passwortänderung erforderlich const lastThreePasswords = data.lastThreePasswords || []; // Letzte 3 Passwörter // Wenn Passwortänderung erforderlich ist, blockiere den Login if (passwordChangeRequired) { errorMessage.textContent = "⚠️ Das Passwort muss geändert werden, bevor ein Login möglich ist."; errorMessage.style.display = 'block'; loginForm.style.display = 'none'; // Verhindere den Login return; } document.getElementById("form").onsubmit = function(event) { event.preventDefault(); const password = event.target.password.value; if (password === correctPassword) { localStorage.setItem("adminPassword", password); loginForm.style.display = 'none'; adminArea.style.display = 'block'; sidebar.style.display = 'block'; timerDisplay.style.display = 'block'; // Timer anzeigen, wenn eingeloggt errorMessage.style.display = 'none'; loadDashboard(); resetInactivityTimer(); } else { // Passwortfeld verstecken und Fehlermeldung anstelle des Passwortfelds anzeigen passwordInput.style.display = 'none'; errorMessage.style.display = 'block'; // Nach 3 Sekunden das Passwortfeld wieder anzeigen und Fehlermeldung ausblenden setTimeout(() => { passwordInput.style.display = 'block'; errorMessage.style.display = 'none'; passwordInput.value = ''; // Passwortfeld leeren }, 3000); // 3 Sekunden Timeout } }; }) .catch(error => { console.error('Fehler beim Abrufen des Passworts:', error); errorMessage.textContent = 'Fehler beim Laden des Passworts.'; errorMessage.style.display = 'block'; }); // Passwortänderungsfunktion mit Überprüfung der letzten 3 Passwörter window.changePassword = function(newPassword) { fetch('/api/change-password', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ newPassword }), }) .then(response => response.json()) .then(data => { const lastThreePasswords = data.lastThreePasswords || []; // Prüfen, ob das neue Passwort in den letzten 3 Passwörtern enthalten ist if (lastThreePasswords.includes(newPassword)) { alert("⚠️ Das neue Passwort darf nicht eines der letzten 3 verwendeten Passwörter sein."); return; } // Passwort ändern und aktualisieren fetch('/api/update-password', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ newPassword }), }) .then(() => { alert("✅ Passwort erfolgreich geändert."); localStorage.setItem("adminPassword", newPassword); // Neues Passwort speichern location.reload(); // Seite neu laden, um das neue Passwort zu aktivieren }) .catch(error => { console.error('Fehler beim Ändern des Passworts:', error); alert("❌ Fehler beim Ändern des Passworts."); }); }) .catch(error => { console.error('Fehler beim Überprüfen des Passworts:', error); }); }; window.logout = function() { localStorage.removeItem("adminPassword"); adminArea.style.display = 'none'; loginForm.style.display = 'block'; sidebar.style.display = 'none'; timerDisplay.style.display = 'none'; // Timer ausblenden beim Logout // Login-Seite neu laden location.reload(); }; // Events, die Inaktivität verhindern: Mausbewegung, Tastatureingabe, etc. window.addEventListener('mousemove', resetInactivityTimer); window.addEventListener('keydown', resetInactivityTimer); window.addEventListener('click', resetInactivityTimer); // Timer-Funktion für den automatischen Logout function startLogoutTimer() { logoutTimerInterval = setInterval(() => { const minutes = Math.floor((timeRemaining / 1000 / 60) % 60); const seconds = Math.floor((timeRemaining / 1000) % 60); timerDisplay.textContent = `Automatischer Logout in: ${minutes}:${seconds < 10 ? '0' : ''}${seconds}`; timeRemaining -= 1000; // Jede Sekunde 1000ms abziehen if (timeRemaining < 0) { clearInterval(logoutTimerInterval); logout(); // Führe Logout-Funktion aus } }, 1000); } document.getElementById('dashboard-link').onclick = function() { document.getElementById('dashboard').style.display = 'block'; document.getElementById('logs').style.display = 'none'; document.getElementById('wishes').style.display = 'none'; // Wünsche ausblenden document.getElementById('feedback').style.display = 'none'; // Feedback ausblenden document.getElementById('users').style.display = 'none'; document.getElementById('admin-help').style.display = 'none'; document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden document.getElementById('backups').style.display = 'none'; document.getElementById('dev-report').style.display = 'none'; }; document.getElementById('logs-link').onclick = function() { document.getElementById('dashboard').style.display = 'none'; document.getElementById('logs').style.display = 'block'; document.getElementById('wishes').style.display = 'none'; // Wünsche ausblenden document.getElementById('feedback').style.display = 'none'; // Feedback ausblenden loadLogs(); // Logs laden, wenn der Bereich angezeigt wird document.getElementById('users').style.display = 'none'; document.getElementById('admin-help').style.display = 'none'; document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden document.getElementById('backups').style.display = 'none'; document.getElementById('dev-report').style.display = 'none'; }; document.getElementById('wishes-link').onclick = function() { document.getElementById('dashboard').style.display = 'none'; document.getElementById('logs').style.display = 'none'; document.getElementById('wishes').style.display = 'block'; // Wünsche anzeigen loadWishes(); // Offene Wünsche laden, wenn der Bereich angezeigt wird document.getElementById('users').style.display = 'none'; document.getElementById('feedback').style.display = 'none'; document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden document.getElementById('admin-help').style.display = 'none'; document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden document.getElementById('backups').style.display = 'none'; document.getElementById('dev-report').style.display = 'none'; }; document.getElementById('feedback-link').onclick = function() { document.getElementById('dashboard').style.display = 'none'; document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden document.getElementById('logs').style.display = 'none'; document.getElementById('wishes').style.display = 'none'; // Wünsche ausblenden document.getElementById('feedback').style.display = 'block'; // Feedback anzeigen loadFeedback(); // Feedback laden, wenn der Bereich angezeigt wird document.getElementById('users').style.display = 'none'; document.getElementById('admin-help').style.display = 'none'; document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden document.getElementById('backups').style.display = 'none'; document.getElementById('dev-report').style.display = 'none'; }; document.getElementById('admin-help-link').onclick = function() { document.getElementById('dashboard').style.display = 'none'; document.getElementById('logs').style.display = 'none'; document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden document.getElementById('wishes').style.display = 'none'; // Wünsche ausblenden document.getElementById('feedback').style.display = 'none'; // Feedback ausblenden document.getElementById('admin-help').style.display = 'block'; // Admin Hilfe anzeigen document.getElementById('users').style.display = 'none'; document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden document.getElementById('backups').style.display = 'none'; document.getElementById('dev-report').style.display = 'none'; }; document.getElementById('users-link').onclick = function() { document.getElementById('dashboard').style.display = 'none'; document.getElementById('logs').style.display = 'none'; document.getElementById('wishes').style.display = 'none'; document.getElementById('feedback').style.display = 'none'; document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden document.getElementById('users').style.display = 'block'; loadUsers(); // Benutzer laden, wenn der Bereich angezeigt wird document.getElementById('admin-help').style.display = 'none'; document.getElementById('send-message').style.display = 'none'; document.getElementById('dev-report').style.display = 'none'; document.getElementById('backups').style.display = 'none'; }; // Send Message Link document.getElementById('send-message-link').onclick = function() { document.getElementById('dashboard').style.display = 'none'; document.getElementById('logs').style.display = 'none'; document.getElementById('wishes').style.display = 'none'; document.getElementById('feedback').style.display = 'none'; document.getElementById('users').style.display = 'none'; document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden document.getElementById('admin-help').style.display = 'none'; document.getElementById('send-message').style.display = 'block'; // Send Message anzeigen document.getElementById('dev-report').style.display = 'none'; document.getElementById('backups').style.display = 'none'; }; document.getElementById('backups-link').onclick = function() { document.getElementById('dashboard').style.display = 'none'; document.getElementById('logs').style.display = 'none'; document.getElementById('wishes').style.display = 'none'; document.getElementById('feedback').style.display = 'none'; document.getElementById('users').style.display = 'none'; document.getElementById('admin-help').style.display = 'none'; document.getElementById('send-message').style.display = 'none'; document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden document.getElementById('dev-report').style.display = 'none'; document.getElementById('backups').style.display = 'block'; // Backups anzeigen loadBackups(); // Backups laden, wenn der Bereich angezeigt wird }; document.getElementById('dev-report-link').onclick = function() { document.getElementById('dashboard').style.display = 'none'; document.getElementById('logs').style.display = 'none'; document.getElementById('wishes').style.display = 'none'; document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden document.getElementById('users').style.display = 'none'; document.getElementById('feedback').style.display = 'none'; document.getElementById('admin-help').style.display = 'none'; document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden document.getElementById('backups').style.display = 'none'; document.getElementById('dev-report').style.display = 'block'; // Dev Report anzeigen loadDevReports(); // Dev Reports laden, wenn der Bereich angezeigt wird }; document.getElementById('faq-link').onclick = function() { document.getElementById('dashboard').style.display = 'none'; document.getElementById('logs').style.display = 'none'; document.getElementById('wishes').style.display = 'none'; document.getElementById('feedback').style.display = 'none'; document.getElementById('faq-container').style.display = 'block'; // FAQ-Bereich anzeigen document.getElementById('users').style.display = 'none'; document.getElementById('admin-help').style.display = 'none'; document.getElementById('send-message').style.display = 'none'; document.getElementById('backups').style.display = 'none'; document.getElementById('dev-report').style.display = 'none'; fetchFaqs(); // FAQs laden, wenn der Bereich angezeigt wird }; }); function loadDashboard() { fetchBotUptime(); fetchFileCheck(); fetchServerInfo(); document.getElementById('dashboard').style.display = 'block'; } function loadLogs() { fetchCommandHistory(); fetchErrorLog(); } // Funktion zum Laden der Wünsche function loadWishes() { fetch('/api/wishes') // Endpoint für offene Wünsche .then(response => response.json()) .then(data => { const wishesDiv = document.getElementById('wishes-content'); wishesDiv.innerHTML = ''; // Vorherige Inhalte leeren if (data.length === 0) { wishesDiv.innerHTML = '
Keine offenen Wünsche vorhanden.
'; } else { data.forEach((wish) => { wishesDiv.innerHTML += `Fehler beim Laden der Wünsche.
'; }); } // Automatisches Aktualisieren des Wunsch alle 10 Sekunden setInterval(() => { loadWishes(); }, 10000); // 10 Sekunden (10000 Millisekunden) // Funktion zum Laden des Feedbacks function loadFeedback() { fetch('/api/feedback') .then(response => response.text()) .then(data => { const feedbackDiv = document.getElementById('feedback-content'); feedbackDiv.innerHTML = ''; // Vorherige Inhalte leeren const feedbackLines = data.split('\n'); feedbackLines.slice(1).forEach((line) => { // Ignoriere die erste Zeile if (line.trim()) { const feedbackMessage = line.split(' - ')[1]; // Nur den Feedback-Teil extrahieren feedbackDiv.innerHTML += `Kein Feedback vorhanden.
'; } }) .catch(error => { console.error('Fehler beim Laden des Feedbacks:', error); document.getElementById('feedback-content').innerHTML = 'Fehler beim Laden des Feedbacks.
'; }); } // Automatisches Aktualisieren des Feedbacks alle 10 Sekunden setInterval(() => { loadFeedback(); }, 10000); // 10 Sekunden (10000 Millisekunden) function fetchBotUptime() { fetch('/api/bot-uptime') .then(response => response.json()) .then(data => { document.getElementById('bot-uptime').innerText = `Aktuelle Laufzeit des Bots: ${data.runtime}`; }) .catch(error => console.error('Fehler beim Abrufen der Bot-Laufzeit:', error)); } // Funktion, um die Bot-Laufzeit regelmäßig zu aktualisieren function startUptimeUpdate() { fetchBotUptime(); // Initialen Aufruf setInterval(fetchBotUptime, 1000); // Alle 5 Sekunden aktualisieren } // Aufruf der Startfunktion, wenn das Admin-Dashboard geladen wird document.addEventListener("DOMContentLoaded", function() { startUptimeUpdate(); }); function fetchFileCheck() { fetch('/api/file-check') .then(response => response.json()) .then(data => { const fileCheckDiv = document.getElementById('file-check'); fileCheckDiv.innerHTML = '${file.exists ? '✅' : '❌'} Datei ${file.file} ${file.exists ? 'ist vorhanden.' : 'fehlt.'}
`; }); }) .catch(error => console.error('Fehler beim Abrufen der Dateiüberprüfung:', error)); } // Automatisches Abrufen der Dateiüberprüfung alle 10 Sekunden setInterval(fetchFileCheck, 10000); // Optional: Einmaliges Abrufen, wenn die Seite geladen wird window.onload = fetchFileCheck; function fetchServerInfo() { fetch('/api/server-info') .then(response => response.json()) .then(data => { document.getElementById('server-info').innerHTML = `Plattform: ${data.platform}
Architektur: ${data.architecture}
Gesamter Speicher: ${data.totalMemory} GB
Freier Speicher: ${data.freeMemory} GB
`; }) .catch(error => console.error('Fehler beim Abrufen der Serverinformationen:', error)); } // Funktion zum Abrufen des Fehlerprotokolls function fetchErrorLog() { fetch('/api/error-log') .then(response => response.text()) .then(data => { document.getElementById('error-log').querySelector('pre').innerText = data; }) .catch(error => console.error('Fehler beim Abrufen des Fehlerprotokolls:', error)); } let errorNotified = false; // Variable, um den Status der Benachrichtigung zu verfolgen // Funktion zum Überprüfen des error.log function checkErrorLog() { const savedPassword = localStorage.getItem("adminPassword"); // Überprüfen, ob der Benutzer eingeloggt ist if (!savedPassword) return; // Beende die Funktion, wenn der Benutzer nicht eingeloggt ist fetch('/api/error-log') .then(response => response.text()) .then(data => { const welcomeBox = document.querySelector('.welcome-box'); // Überprüfe, ob Fehler im Log vorhanden sind if (data && data.trim().length > 0) { if (!errorNotified) { // Nur Benachrichtigung anzeigen, wenn sie noch nicht angezeigt wird welcomeBox.innerHTML += `Keine Benutzer vorhanden.
'; } else { data.forEach((user, index) => { // Bestimme die Klasse basierend auf der Index-Position const className = index % 2 === 0 ? 'even' : 'odd'; // Klassen für gerade und ungerade Indizes // Verwende favoriteGenres (Plural) und überprüfe, ob es Genres gibt const favoriteGenres = user.favoriteGenres ? user.favoriteGenres : (user.favoriteGenre || 'Nicht festgelegt'); usersDiv.innerHTML += `Benutzername: ${user.username}
Benutzerlevel: ${user.userLevel}
Benachrichtigungen: ${user.notifications ? 'Aktiviert' : 'Deaktiviert'}
Nachtmodus: ${user.nightMode}
Befehlsanzahl: ${user.commandCount}
Erstnutzung: ${user.firstUsed}
Lieblingsgenres: ${favoriteGenres}
Fehler beim Laden der Benutzerinformationen.
'; }); } // Funktion zum Löschen eines Benutzers function deleteUser(userId) { if (confirm('Möchtest du diesen Benutzer wirklich löschen?')) { fetch(`/api/users/${userId}`, { method: 'DELETE', }) .then(response => response.json()) .then(data => { alert(data.message); loadUsers(); // Nach dem Löschen die Benutzerliste neu laden }) .catch(error => { console.error('Fehler beim Löschen des Benutzers:', error); alert('Fehler beim Löschen des Benutzers.'); }); } } // Funktion zum Starten der automatischen Aktualisierung function startAutoRefresh() { loadUsers(); // Einmaliges Laden der Benutzer beim Start setInterval(loadUsers, 10000); // Alle 10 Sekunden aktualisieren } // Stelle sicher, dass die Funktion beim Laden der Seite aufgerufen wird window.onload = startAutoRefresh; function fetchLastRestart() { fetch('/api/last-restart') .then(response => response.json()) .then(data => { document.getElementById('bot-restart').innerText = `Letzter Neustart: ${data.lastRestart}`; }) .catch(error => console.error('Fehler beim Abrufen des letzten Neustarts:', error)); } // Stelle sicher, dass die Funktion beim Laden des Dashboards aufgerufen wird function loadDashboard() { fetchBotUptime(); fetchLastRestart(); // Hinzufügen dieser Zeile fetchFileCheck(); fetchServerInfo(); document.getElementById('dashboard').style.display = 'block'; } function sendMessage() { const message = document.getElementById('message-input').value; const statusDiv = document.getElementById('send-message-status'); if (!message) { statusDiv.innerHTML = 'Bitte gib eine Nachricht ein.'; return; } fetch('/api/send-message', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ message }), }) .then(response => response.json()) .then(data => { if (data.success) { statusDiv.innerHTML = 'Nachricht erfolgreich gesendet!'; } else { statusDiv.innerHTML = `Fehler: ${data.error}`; } }) .catch(error => { console.error('Fehler beim Senden der Nachricht:', error); statusDiv.innerHTML = 'Ein Fehler ist aufgetreten.'; }); } // Hier kann eine Funktion hinzugefügt werden, um den Abschnitt anzuzeigen document.getElementById('send-message-link').addEventListener('click', function() { document.getElementById('send-message').style.display = 'block'; }); async function loadMediaCount() { try { const response = await fetch('/api/media-count'); if (!response.ok) { throw new Error('Netzwerkantwort war nicht ok'); } const data = await response.json(); console.log('Medienanzahl-Daten:', data); // Debugging-Ausgabe const mediaCountContent = document.getElementById('media-count-content'); mediaCountContent.innerHTML = ` 📽️ Filme: ${data.movieCount}Keine Backups vorhanden.
'; } }) .catch(error => { console.error('Fehler beim Laden der Backups:', error); document.getElementById('backups-list').innerHTML = 'Fehler beim Laden der Backups.
'; }); } // Funktion zum Löschen eines Backups function deleteBackup(backupName) { fetch('/api/delete-backup', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ backupName }) }) .then(response => response.json()) .then(data => { if (data.success) { // Nach dem Löschen die Backups erneut laden loadBackups(); } else { console.error('Fehler beim Löschen des Backups:', data.error); } }) .catch(error => { console.error('Fehler beim Löschen des Backups:', error); }); } // Automatisches Laden der Berichte alle 5 Sekunden (5000 Millisekunden) setInterval(loadDevReports, 5000); function loadDevReports() { fetch('/api/dev-reports') // Ersetze den URL mit deinem tatsächlichen Endpunkt .then(response => response.json()) .then(data => { const devReportDiv = document.getElementById('dev-report-content'); devReportDiv.innerHTML = ''; // Vorherige Inhalte leeren if (data.length === 0) { devReportDiv.innerHTML = 'Keine Entwicklerberichte vorhanden.
'; document.getElementById('notification').style.display = 'none'; // Benachrichtigung verstecken } else { // Für jeden Bericht im Dev-Report durchlaufen und anzeigen data.forEach(report => { const reportClass = report.type === "Bug" ? "bug" : report.type === "Funktionswunsch" ? "feature-request" : report.type === "Film Report" ? "film-report" : ""; const userName = report.user.name; // Den Namen des Benutzers aus dem Bericht holen const message = report.message; // Den Text der Nachricht holen devReportDiv.innerHTML += `Fehler beim Laden der Entwicklerberichte.
'; }); } // Funktion zum Löschen eines Entwicklerberichts function deleteDevReport(reportId) { fetch(`/api/dev-reports?id=${reportId}`, { method: 'DELETE' }) // Verwende hier die korrekte URL mit Query-Parameter .then(response => { if (response.ok) { loadDevReports(); // Berichte nach dem Löschen neu laden } else { console.error('Fehler beim Löschen des Berichts:', response.statusText); } }) .catch(error => console.error('Fehler beim Löschen des Berichts:', error)); } // Funktion zum Abrufen der FAQs function fetchFaqs() { fetch('/api/faqs') .then(response => response.json()) .then(data => { const faqSection = document.getElementById('faq-container'); // ID anpassen let faqText = ''; if (data.length === 0) { faqText = 'Es gibt derzeit keine FAQs.'; } else { data.forEach((faq, index) => { faqText += `${index + 1}. *${faq.question}*\n${faq.answer}\n\n`; }); } faqSection.querySelector('pre').innerText = faqText; // Text im-Tag setzen }) .catch(error => console.error('Fehler beim Abrufen der FAQs:', error)); } // Funktion zum Hinzufügen einer neuen FAQ function addFaq() { const question = prompt('Bitte geben Sie die FAQ-Frage ein:'); if (question) { const answer = prompt('Bitte geben Sie die Antwort ein:'); if (answer) { fetch('/api/add-faq', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ question, answer }), }) .then(response => response.json()) .then(data => { const alertBox = document.createElement('div'); alertBox.className = 'alert'; // Grundlegende Alert-Klasse if (data.success) { alertBox.classList.add('success'); // Erfolgsklasse hinzufügen alertBox.innerText = '✅ FAQ erfolgreich hinzugefügt.'; } else { alertBox.classList.add('error'); // Fehlerklasse hinzufügen alertBox.innerText = '❌ Fehler beim Hinzufügen der FAQ.'; } // Füge die Alert-Meldung zum FAQ-Bereich hinzu document.getElementById('faq-container').appendChild(alertBox); alertBox.style.display = 'block'; // Zeige die Meldung an // Nach einer kurzen Zeit die Meldung ausblenden setTimeout(() => { alertBox.style.display = 'none'; }, 5000); // 5 Sekunden warten, dann ausblenden fetchFaqs(); // FAQs neu laden }) .catch(error => { const alertBox = document.createElement('div'); alertBox.className = 'alert error'; // Fehlerklasse hinzufügen alertBox.innerText = '❌ Fehler beim Hinzufügen der FAQ.'; document.getElementById('faq-container').appendChild(alertBox); alertBox.style.display = 'block'; // Zeige die Fehlermeldung an // Nach einer kurzen Zeit die Meldung ausblenden setTimeout(() => { alertBox.style.display = 'none'; }, 5000); // 5 Sekunden warten, dann ausblenden console.error('Fehler beim Hinzufügen der FAQ:', error); }); } } } // Funktion zum Löschen einer FAQ function deleteFaq() { fetch('/api/faqs') .then(response => response.json()) .then(data => { if (data.length === 0) { alert('Es gibt derzeit keine FAQs zum Löschen.'); return; } let faqText = 'Welche FAQ möchten Sie löschen?\n\n'; data.forEach((faq, index) => { faqText += `${index + 1}. *${faq.question}*\n`; }); const faqIndex = prompt(faqText); const index = parseInt(faqIndex, 10) - 1; if (index >= 0 && index < data.length) { fetch('/api/delete-faq', { method: 'DELETE', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ index }), }) .then(response => response.json()) .then(data => { if (data.success) { alert('✅ FAQ erfolgreich gelöscht.'); fetchFaqs(); // FAQs neu laden } else { alert('❌ Fehler beim Löschen der FAQ.'); } }) .catch(error => console.error('Fehler beim Löschen der FAQ:', error)); } else { alert('❌ Ungültige Auswahl.'); } }) .catch(error => console.error('Fehler beim Abrufen der FAQs:', error)); } // Darkmode umschalten const toggle = document.getElementById('dark-mode-toggle'); // Darkmode-Zustand beim Laden der Seite überprüfen und anwenden const darkModeEnabled = localStorage.getItem('darkMode') === 'true'; toggle.checked = darkModeEnabled; if (darkModeEnabled) { document.body.classList.add('dark-mode'); } toggle.addEventListener('change', () => { const isChecked = toggle.checked; document.body.classList.toggle('dark-mode', isChecked); // Speichere den Zustand in localStorage localStorage.setItem('darkMode', isChecked); }); // Funktion, um die WEB_NAME-Variable abzurufen und einzufügen document.addEventListener('DOMContentLoaded', () => { fetch('/api/web-name') .then(response => response.json()) .then(data => { const webName = data.name; // Ersetze den Text im h1- und title-Tag document.getElementById('welcome-title').textContent = `Willkommen bei ${webName}`; document.getElementById('web-title').textContent = webName; }) .catch(error => console.error('Fehler beim Abrufen des Web-Namens:', error)); });