From be7d9fce1a4b5494e93e7d7479e74b23f25678fd Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 23 Aug 2026 15:05:08 +0200 Subject: [PATCH] Empfehlung: 6. Karte 'Laeuft gut' in gleicher Form (volle Liste mit Balken) statt Kompakt-Streifen Co-Authored-By: Claude Opus 4.8 --- App/teacher.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/App/teacher.html b/App/teacher.html index b529c50..945d741 100644 --- a/App/teacher.html +++ b/App/teacher.html @@ -2753,16 +2753,18 @@ var IV_ICON={ more:'', work:'', good:'', - idle:''}; + idle:'', + calm:''}; var IV_META={support:['Fördern','zuletzt schwächere Läufe','--ivns'],more:['Fordern','zuletzt sicher, kaum gefordert','--ivnm'], - work:['Begleiten','zuletzt viel gearbeitet, wenig Ertrag','--ivnw'],good:['Bestätigen','zuletzt besser geworden','--ivngd'],idle:['Nicht aktiv','länger nicht mehr dran (oder noch nie)','--ivni']}; + work:['Begleiten','zuletzt viel gearbeitet, wenig Ertrag','--ivnw'],good:['Bestätigen','zuletzt besser geworden','--ivngd'], + calm:['Läuft gut','solide unterwegs, keine Auffälligkeiten','--ivg'],idle:['Nicht aktiv','länger nicht mehr dran (oder noch nie)','--ivni']}; var IV_WEEK_CAP = 10800; // eine Woche zählt max. 3 h aktive Zeit (Ausreißer-Schutz) // Rendert die 5 Triage-Karten (support/more/work/good/idle) aus fertigen Gruppen. // Wiederverwendet für „HEUTE" und „insgesamt". todayMode passt Untertitel/Tooltips an. function _ivTriageCards(groups, maxSec, todayMode){ var h='
'; - ['support','more','work','good','idle'].forEach(function(key){ + ['support','more','work','good','calm','idle'].forEach(function(key){ var rows=groups[key], m=IV_META[key]; var sub=(todayMode && key==='idle')?'heute noch nicht dran':m[1]; h+='
'+IV_ICON[key]+'

'+m[0]+'

'+sub+'

'+rows.length+'
'; @@ -2828,7 +2830,7 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){ var playsById={}; ((matrix&&matrix.students)||[]).forEach(function(s){ playsById[s.id]=(matrix.totals[s.id]||{}).plays||0; }); - var groups={support:[],more:[],work:[],good:[],idle:[]}, calm=[], erfSum=0,erfN=0, weekTotals=[]; + var groups={support:[],more:[],work:[],good:[],calm:[],idle:[]}, erfSum=0,erfN=0, weekTotals=[]; cs.forEach(function(s){ var sid=s.studentId||s.id; var recErf=(s.recentErfolg!=null)?s.recentErfolg:null; // Ø letzte 3 Läufe @@ -2843,7 +2845,7 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){ weekTotals.push(secs); var g=ivTriage(recErf, days, rplays, rising); var row={sid:sid, name:s.displayName, erf:recErf, status:s.status, secs:secs, days:days}; - if(g) groups[g].push(row); else calm.push(s.displayName); + if(g) groups[g].push(row); else groups.calm.push(row); }); var erfAvg = erfN? Math.round(erfSum/erfN):null; @@ -2894,7 +2896,7 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){ todayPlaysById[su.studentId]=sess.length; todayErfById[su.studentId]= sco.length? Math.round(sco.reduce(function(a,b){return a+b;},0)/sco.length) : null; }); - var heuteGroups={support:[],more:[],work:[],good:[],idle:[]}, heuteCalm=[]; + var heuteGroups={support:[],more:[],work:[],good:[],calm:[],idle:[]}; cs.forEach(function(s){ var sid=s.studentId||s.id; var played=(todayPlaysById[sid]||0)>0; @@ -2903,7 +2905,7 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){ while(secs2.length<10) secs2.unshift(0); var g2 = !played ? 'idle' : ivTriage(tErf, 0, todayPlaysById[sid], false); var row2={sid:sid, name:s.displayName, erf:played?tErf:null, status:s.status, secs:secs2, days:played?0:(s.daysSince!=null?s.daysSince:null)}; - if(g2) heuteGroups[g2].push(row2); else heuteCalm.push(s.displayName); + if(g2) heuteGroups[g2].push(row2); else heuteGroups.calm.push(row2); }); var heutePlayed=Object.keys(todayPlaysById).length; var need=groups.support.length+groups.more.length+groups.work.length+groups.good.length+groups.idle.length; @@ -2911,12 +2913,10 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){ // 1) HEUTE (oben) — genau dieselbe Darstellung, nur auf heute gefiltert h+='
Empfohlene Aktivität für dich — HEUTE'+heutePlayed+' heute aktiv
'; h+=_ivTriageCards(heuteGroups, maxSec, true); - if(heuteCalm.length) h+='
Heute rund gelaufen — '+heuteCalm.length+''+heuteCalm.map(esc).join(' · ')+'
'; // 2) insgesamt (darunter) — der bisherige Allzeit-/Zuletzt-Blick h+='
Empfohlene Aktivität für dich — insgesamt'+need+' von '+studentsCount+'
'; h+=_ivTriageCards(groups, maxSec, false); - if(calm.length) h+='
Läuft rund — '+calm.length+''+calm.map(esc).join(' · ')+'
'; // Legende h+='
' +'
Die Empfehlung beruht nur auf der aktuellen Leistung: dem Erfolg der letzten Läufe und den Tagen seit dem letzten Mal. Der Verlauf daneben ist nur Historie.
'