'use strict'; /** * Initialisiert die Anwendung, lädt Daten über API und ruft UI-Rendering-Module auf. * Modul: initApp */ async function initApp() { try { const response = await fetch('/api/analysis'); if (!response.ok) { throw new Error(`API Error: ${response.status}`); } const analysisData = await response.json(); if (!Array.isArray(analysisData)) { throw new Error('Ungültiges Datenschema der Antwort'); } renderAnalysisDashboard(analysisData); bindEvents(); } catch (error) { console.error('Fehler bei der Initialisierung:', error); const errorContainer = document.getElementById('error-container'); if (errorContainer) { errorContainer.textContent = 'Fehler beim Laden der Analysedaten.'; errorContainer.setAttribute('role', 'alert'); } } } /** * Bindet Event-Listener an Filter und UI-Elemente. * Modul: bindEvents */ function bindEvents() { const filterDeltaNeg = document.getElementById('filter-delta-neg'); const resetButton = document.getElementById('reset-filters'); if (filterDeltaNeg) { filterDeltaNeg.addEventListener('change', event => { const isActive = event.target.checked; const allRows = document.querySelectorAll('.metric__row'); allRows.forEach(row => { const delta = parseFloat(row.dataset.deltaT); if (isActive && delta >= 0) { row.classList.add('hidden'); } else { row.classList.remove('hidden'); } }); }); } if (resetButton) { resetButton.addEventListener('click', () => { document.querySelectorAll('.hidden').forEach(row => row.classList.remove('hidden')); if (filterDeltaNeg) filterDeltaNeg.checked = false; }); } } /** * Rendert das Dashboard basierend auf den Analysedaten. * @param {Array} data - Array mit Analyse-Ergebnissen */ function renderAnalysisDashboard(data) { const container = document.getElementById('analysis-dashboard'); if (!container) return; container.innerHTML = ''; data.forEach(item => { const row = document.createElement('div'); row.className = 'metric__row'; row.dataset.deltaT = item.delta_t; const runIdEl = document.createElement('span'); runIdEl.className = 'metric__run-id'; runIdEl.textContent = `Run: ${item.run_id}`; const deltaEl = document.createElement('span'); deltaEl.className = 'metric__delta'; deltaEl.textContent = `${item.delta_t.toFixed(3)} s`; const warnEl = document.createElement('span'); warnEl.className = 'metric__warn-rate'; warnEl.textContent = `Warn: ${(item.warn_rate * 100).toFixed(2)}%`; const unknownEl = document.createElement('span'); unknownEl.className = 'metric__unknown-rate'; unknownEl.textContent = `Unknown: ${(item.unknown_rate * 100).toFixed(2)}%`; if (item.delta_t < 0) { row.classList.add('metric__row--negative'); row.title = 'Δt < 0 - Auffälliger Wert'; } row.appendChild(runIdEl); row.appendChild(deltaEl); row.appendChild(warnEl); row.appendChild(unknownEl); container.appendChild(row); }); } window.addEventListener('load', initApp);