From ad8c6b7d7e47fadaaf1a0fcde58fc250ef0cbdd4 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 22 Aug 2026 14:55:32 +0200 Subject: [PATCH] Gesamt: "Jetzt live"-Streifen oben (laufende Spiele, blinkend) In Ergebnisse/Gesamt fehlten laufende Sessions (Fleiss baut nur auf fertigen Laeufen). Neuer blinkender Live-Streifen ganz oben aus live_sessions: Name + Sim-Symbol + Laufzeit, Klick = zuschauen. Co-Authored-By: Claude Opus 4.8 --- App/teacher.html | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/App/teacher.html b/App/teacher.html index 62395e8..2c2cd4e 100644 --- a/App/teacher.html +++ b/App/teacher.html @@ -3758,11 +3758,13 @@ async function loadResults() { host.innerHTML = '

Lade Ergebnisse…

'; // Drei parallele API-Calls: Fleiß (NEU oben) + Matrix + Activity (alt) - var [fleiss, matrix, activity] = await Promise.all([ + var [fleiss, matrix, activity, live] = await Promise.all([ api('results?class_id=' + currentClassId + '&view=fleiss&range=' + _resultsState.fleissRange + '&module_id=' + encodeURIComponent(_resultsState.fleissModule)), api('results?class_id=' + currentClassId + '&view=matrix'), api('results?class_id=' + currentClassId + '&view=activity&range=' + _resultsState.range + '&groupBy=' + (_resultsState.groupBy || 'module')), + api('live?class_id=' + currentClassId), ]); + _resultsState.live = Array.isArray(live) ? live : []; if (matrix.error) { host.innerHTML = '

'+esc(matrix.error)+'

'; return; } if (activity.error) { host.innerHTML = '

'+esc(activity.error)+'

'; return; } @@ -3777,16 +3779,41 @@ async function loadResults() { function renderResults() { var host = document.getElementById(_resultsHost) || document.getElementById('tab-results'); host.innerHTML = '' + + '
' + '
' + '
' + '
' + '
'; + renderResultsLive(); renderFleiss(); renderMatrix(); renderActivity(); renderModuleCards(); } +// „Jetzt live"-Streifen ganz oben in Gesamt: laufende Spiele (aus live_sessions), +// als langsam blinkende Blöcke — sonst fehlen sie hier (Fleiß baut nur auf fertigen Läufen). +function renderResultsLive() { + var host = document.getElementById('res-live'); if (!host) return; + var live = (_resultsState.live || []).filter(function(ls){ return ls.last_seen_ms && (Date.now() - ls.last_seen_ms) < 90000; }); + if (!live.length) { host.innerHTML = ''; return; } + var html = '
' + + '
Jetzt live · '+live.length+'
' + + '
'; + live.forEach(function(ls){ + var el = ls.started_at_ms ? Math.max(0, Math.round((Date.now() - ls.started_at_ms)/60000)) : 0; + var av = (typeof ls.emoji === 'string' && ls.emoji.indexOf('avatar:') === 0) + ? '' + : ''+(ls.emoji || '🧑‍🎓')+''; + html += ''; + }); + html += '
'; + host.innerHTML = html; +} + // ---------- Sektion 0 (NEU oben): Fleiß pro Schüler:in ---------- // Layout: Matrix mit Zeilen=Schüler:innen, Spalten=Zeitbuckets (Mo–So // bei Woche, 24 Stunden bei Tag etc.). Pro Zelle eine vertikale Säule;