From cc834930553108f48f037a4fcf7e5ffc4fdad629 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 23 Aug 2026 15:11:20 +0200 Subject: [PATCH] Lehrer-Live: idle-pausierte gelten in Aktuell als pausiert (nicht aktiv) + Tag-App-Symbol immer sichtbar - Aktuell: paused beruecksichtigt jetzt __idlePaused/__paused (heartbeatet trotz Pause weiter) -> kein Widerspruch mehr "navigiert UND pausiert" (Klara). - Tag: App-Symbol als immer sichtbares Overlay am Balkenstart, auch bei winzigem Balken (darf ueberstehen). Co-Authored-By: Claude Opus 4.8 --- App/teacher.html | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/App/teacher.html b/App/teacher.html index 945d741..c263d71 100644 --- a/App/teacher.html +++ b/App/teacher.html @@ -1569,9 +1569,12 @@ async function renderLive() { var simStr = sinceSimBase ? _fmtSince(sinceSim) : '—'; var missionStr = sinceMissionBase ? _fmtSince(sinceMission) : '—'; var lastSeen = ls.last_seen_ms ? Math.max(0, Math.round((Date.now() - ls.last_seen_ms)/1000)) : 0; - var paused = !_liveIsActive(ls); - var dotColor = lastSeen < 8 ? '#5a8a5e' : lastSeen < 20 ? '#e8833a' : '#c07a6b'; var s = ls.state || {}; + // Pausiert = veralteter Heartbeat ODER die Sim/Plattform meldet Pause + // (Idle-Overlay __idlePaused / Sim-Pause __paused). Sonst gilt ein idle- + // pausierter, aber weiter heartbeatender Schüler fälschlich als „aktiv". + var paused = !_liveIsActive(ls) || !!(s.__idlePaused || s.__paused); + var dotColor = lastSeen < 8 ? '#5a8a5e' : lastSeen < 20 ? '#e8833a' : '#c07a6b'; var help = !paused && _liveNeedsHelp(ls.module_id, s); var restBg = help ? '#fdf3ee' : (paused ? '#f6f5f2' : ''); var hoverBg = help ? '#f9e7e0' : '#f0efe9'; @@ -2275,9 +2278,9 @@ async function renderLiveSummary() { + ' · ' + _fmtHM(sess.startMs) + '–' + _fmtHM(endMs) + ' · ' + _liveFmtMin(realDurSec) + ' · ' + stateWord + (score!=null?' · Erfolg '+score+' %':''); - // Symbol immer sichtbar; ab etwas Breite zusätzlich der Sim-Name - var inner = (pctW < 2) ? '' : (pctW < 9 ? ''+icon+'' - : ''+icon+' '+esc(simName)+''); + // Sim-Name nur bei breiterem Balken IM Balken (mit Platz für das Symbol links); + // das App-Symbol selbst kommt separat als IMMER sichtbares Overlay (s.u.). + var inner = (pctW < 9) ? '' : ''+esc(simName)+''; var sessKey = s.studentId + ':' + sess.simId + ':' + (sess.lessonLabel||'_') + ':' + sess.startMs; html += '
' + inner + '
'; + // App-Symbol IMMER sichtbar am Balkenstart — auch bei winzigem Balken (steht dann + // über den Rand hinaus, das ist gewollt). Schatten macht es auf Balken UND Hintergrund lesbar. + html += ''+icon+''; // Pausen im Verlauf: jede geloggte Pausen-Spanne bleibt als halbhohes, // gedämpftes Segment im Balken stehen — auch nachdem die Schüler:in wieder // weiterarbeitet. So sieht man, WANN und WIE LANGE pausiert wurde.