Spaces:
Runtime error
Runtime error
| class Logger { | |
| static isDebugMode = false; | |
| static debug(message, data = null) { | |
| if (this.isDebugMode) { | |
| console.log(`[Debug] ${message}`, data || ''); | |
| } | |
| } | |
| static error(message, error = null) { | |
| console.error(`[Error] ${message}`, error || ''); | |
| } | |
| static initializeDebugMode() { | |
| try { | |
| const urlParams = new URLSearchParams(window.location.search); | |
| this.isDebugMode = urlParams.has('debug'); | |
| } catch (error) { | |
| console.error('Fehler beim Initialisieren des Debug-Modus:', error); | |
| this.isDebugMode = false; | |
| } | |
| } | |
| } | |
| const utils = { | |
| showLoading() { | |
| if (document.body) { | |
| document.body.classList.add('loading'); | |
| Logger.debug('Loading-Status aktiviert'); | |
| } else { | |
| Logger.error('document.body nicht verfügbar'); | |
| } | |
| }, | |
| hideLoading() { | |
| if (document.body) { | |
| document.body.classList.remove('loading'); | |
| Logger.debug('Loading-Status deaktiviert'); | |
| } else { | |
| Logger.error('document.body nicht verfügbar'); | |
| } | |
| }, | |
| safeGetElement(id) { | |
| const element = document.getElementById(id); | |
| if (!element) { | |
| Logger.error(`Element mit ID '${id}' nicht gefunden`); | |
| return null; | |
| } | |
| return element; | |
| }, | |
| async withLoading(asyncFn) { | |
| try { | |
| this.showLoading(); | |
| await asyncFn(); | |
| } finally { | |
| this.hideLoading(); | |
| } | |
| } | |
| }; | |
| class BackendManager { | |
| constructor() { | |
| this.selectedItems = new Set(); | |
| this.initializeEventListeners(); | |
| } | |
| initializeEventListeners() { | |
| // Event-Listener für Dark Mode Toggle | |
| const darkModeToggle = document.getElementById('darkModeToggle'); | |
| if (darkModeToggle) { | |
| darkModeToggle.addEventListener('click', () => this.toggleDarkMode()); | |
| } | |
| // Event-Listener für Aktualisieren-Button | |
| const refreshButton = document.querySelector(".btn-primary[onclick='refreshData()']"); | |
| if (refreshButton) { | |
| refreshButton.addEventListener("click", () => { | |
| this.refreshData(); | |
| }); | |
| } | |
| } | |
| toggleDarkMode() { | |
| document.body.classList.toggle('dark-mode'); | |
| const isDarkMode = document.body.classList.contains('dark-mode'); | |
| localStorage.setItem('darkMode', isDarkMode); | |
| // Aktualisiere das Icon | |
| const icon = document.querySelector('#darkModeToggle i'); | |
| if (isDarkMode) { | |
| icon.classList.remove('bi-moon'); | |
| icon.classList.add('bi-sun'); | |
| } else { | |
| icon.classList.remove('bi-sun'); | |
| icon.classList.add('bi-moon'); | |
| } | |
| } | |
| async updateStats() { | |
| try { | |
| const response = await fetch('/backend/stats'); | |
| if (!response.ok) { | |
| throw new Error('Network response was not ok'); | |
| } | |
| const stats = await response.json(); | |
| console.log("Stats from backend:", stats); | |
| // Aktualisiere die Statistik-Anzeige | |
| document.getElementById('totalImages').textContent = stats.total_images; | |
| document.getElementById('totalAlbums').textContent = stats.albums.total; | |
| document.getElementById('totalCategories').textContent = stats.categories.total; | |
| document.getElementById('storageUsage').textContent = `${(stats.storage_usage_mb).toFixed(2)} MB`; | |
| } catch (error) { | |
| console.error('Fehler beim Laden der Statistiken:', error); | |
| } | |
| } | |
| async refreshData() { | |
| try { | |
| await this.updateStats(); | |
| this.showToast('Erfolg', 'Daten erfolgreich aktualisiert', 'success'); | |
| } catch (error) { | |
| this.showToast('Fehler', 'Fehler beim Aktualisieren der Daten', 'danger'); | |
| } | |
| } | |
| showToast(title, message, type = 'info') { | |
| const toast = document.getElementById('toast'); | |
| const toastTitle = document.getElementById('toastTitle'); | |
| const toastMessage = document.getElementById('toastMessage'); | |
| toast.classList.remove('bg-success', 'bg-danger', 'bg-info', 'bg-warning'); | |
| toast.classList.add(`bg-${type}`); | |
| toastTitle.textContent = title; | |
| toastMessage.textContent = message; | |
| const bsToast = new bootstrap.Toast(toast); | |
| bsToast.show(); | |
| } | |
| } | |
| // Initialisierung | |
| document.addEventListener('DOMContentLoaded', () => { | |
| new BackendManager(); | |
| updateStatistics(); // Statistiken beim Laden der Seite abrufen | |
| // Dark Mode aus localStorage wiederherstellen, falls vorhanden | |
| if (localStorage.getItem('darkMode') === 'true') { | |
| document.body.classList.add('dark-mode'); | |
| const icon = document.querySelector('#darkModeToggle i'); | |
| if (icon) { | |
| icon.classList.remove('bi-moon'); | |
| icon.classList.add('bi-sun'); | |
| } | |
| } | |
| }); |