diff --git a/metric_visualization/js/ui.js b/metric_visualization/js/ui.js new file mode 100644 index 0000000..96299b7 --- /dev/null +++ b/metric_visualization/js/ui.js @@ -0,0 +1,63 @@ +/** + * UI Renderer Module for Metric Visualization + * Verantwortlich für DOM-Updates und Darstellung von Summary und Tabelle + * © 2026 Donau2Space.de + */ + +/** + * Rendert die Zusammenfassungspanel-Informationen. + * @param {Array} data - Analyse-Daten [{run_id, t_index_visible, t_gate_read, delta_t, warn_rate, unknown_rate}] + */ +export function renderSummarySection(data = []) { + const container = document.getElementById('summary-section'); + if (!container) return; + + const totalRuns = data.length; + const deltaNegCount = data.filter(d => d.delta_t < 0).length; + + const avgWarnRate = totalRuns === 0 ? 0 : data.reduce((acc, d) => acc + (d.warn_rate ?? 0), 0) / totalRuns; + const avgUnknownRate = totalRuns === 0 ? 0 : data.reduce((acc, d) => acc + (d.unknown_rate ?? 0), 0) / totalRuns; + + container.innerHTML = ''; + + const summaryHtml = ` +
Runs: ${totalRuns}
+
Δt < 0 Count: ${deltaNegCount}
+
Ø Warn Rate: ${(avgWarnRate * 100).toFixed(2)}%
+
Ø Unknown Rate: ${(avgUnknownRate * 100).toFixed(2)}%
+ `; + + container.insertAdjacentHTML('beforeend', summaryHtml); +} + +/** + * Befüllt Tabelle mit individuellen Run-Metriken. + * @param {Array} data - Analyse-Daten [{run_id, t_index_visible, t_gate_read, delta_t, warn_rate, unknown_rate}] + */ +export function renderDataTable(data = []) { + const table = document.getElementById('data-table'); + if (!table) return; + + const tbody = table.querySelector('tbody'); + if (!tbody) return; + + tbody.innerHTML = ''; + + const rows = data.map(d => { + const isDeltaNeg = d.delta_t < 0; + const rowClass = isDeltaNeg ? 'data-table__row--negative' : ''; + + return ` + + ${d.run_id} + ${d.t_index_visible} + ${d.t_gate_read} + ${d.delta_t} + ${(d.warn_rate * 100).toFixed(2)}% + ${(d.unknown_rate * 100).toFixed(2)}% + + `; + }).join(''); + + tbody.insertAdjacentHTML('beforeend', rows); +}