Einheitliche Leistungs-Skala (%) + Farbcodes ueberall vereinheitlicht
- Schwellen NEU (Thomas): >=90 Dunkelgruen / >=80 Hellgruen / >=60 Gelb / >=50 Orange / <50 Rot. Sterne entfallen. - teacher.html: _pctColor (kanonisch) — _tagTraffic + _liveBar + _liveBarColor delegieren jetzt alle daran (EINE Skala; 'niedrig-ist-gut' invertiert). Neu: _leistungPct(simId,state) = das eine 0-100-% je Sim (eigener Score oder abgeleitet), _pctBar (kompakt, schmal). Neue Spalte 'Leistung' in 'Aktuell'. _liveMood aus _leistungPct (>=80 gut / >=50 mittel / <50) — deckungsgleich mit Triage Foerdern/Begleiten/Laeuft gut (50/80). - admin-styleguide.html: neue Sektion 'Leistungs-Skala' (5 Stufen, %+Balken, Triage, CSS-Variablen). - admin-lehrer-view.html: Schwellen/Triage/Preview auf neue Werte, Balken kompakt, Sterne-Hinweis raus. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+12
-10
@@ -97,7 +97,7 @@
|
||||
<p><b>Der Zeilen-Prozentwert</b> in „Ergebnisse/Aktuell" entsteht in <code>live.php · extractScore</code>: liefert die Sim einen eigenen <b>0–100-Score</b>, wird der genommen; sonst aus den Sternen: <code>% = Sterne / 5 × 100</code>.</p>
|
||||
<p><b>Die Sterne</b> berechnet jede App am Ende selbst — aus unterschiedlichen Kennzahlen und Schwellen (je Sim unten dokumentiert). Deshalb bedeuten 4★ heute nicht überall dasselbe.</p>
|
||||
<p><b>Uneinheitlichkeiten:</b> Busfahrt · Fluggesellschaft · Kofferdetektiv liefern nur <b>0–3 Sterne</b> statt 0–5. Busfahrt/Fluggesellschaft senden als <code>score</code> rohe Punkte (nicht 0–100 → Zeilen-% verzerrt). Weltküche wertet <b>pro Gericht</b> statt pro Durchgang. <b>Logistik überträgt weder Sterne noch Score</b>. Ein echter 0–100-Live-Score existiert nur bei Klima, Fluss, Heli, Kofferdetektiv, Tourismusregion (abgeleitet Tourismustal).</p>
|
||||
<div class="rec"><b>Vorschlag (ein System):</b> Jede App liefert genau <b>eine Funktion → Leistungs-% (0–100)</b> als Wahrheit (grün→rot-Balken). Sterne werden daraus mit <b>denselben globalen Schwellen für alle</b> abgeleitet (z. B. ≥90→5★ · ≥75→4 · ≥55→3 · ≥35→2 · sonst 1). Dann bedeuten Sterne überall dasselbe und % ↔ Sterne sind konsistent.</div>
|
||||
<div class="rec"><b>Beschlossen:</b> <b>Sterne entfallen.</b> Jede App liefert genau <b>eine Funktion → Leistungs-% (0–100)</b> als Wahrheit, überall gezeigt als Prozent + Balken in der 5-stufigen Farbskala. Auch Fördern/Begleiten/Läuft gut leiten sich aus diesem % ab.</div>
|
||||
</div>
|
||||
|
||||
<div id="preview"></div>
|
||||
@@ -539,21 +539,23 @@ var PROPOSED_PCT = {
|
||||
};
|
||||
|
||||
// 5-stufige Farbskala (= _tagTraffic).
|
||||
function pctColor(v){ v=Math.max(0,Math.min(100,v||0)); return v>=80?'#1f7a3d':v>=65?'#7cb342':v>=50?'#f9c33b':v>=35?'#ef8b2c':'#d8453a'; }
|
||||
// Standard-Anzeige überall: Prozent in Ampelfarbe + dünner Balken darunter.
|
||||
// ≥90 Dunkelgrün · ≥80 Hellgrün · ≥60 Gelb · ≥50 Orange · <50 Rot
|
||||
function pctColor(v){ v=Math.max(0,Math.min(100,v||0)); return v>=90?'#1f7a3d':v>=80?'#7cb342':v>=60?'#f9c33b':v>=50?'#ef8b2c':'#d8453a'; }
|
||||
// Standard-Anzeige überall: Prozent in Ampelfarbe + schmaler Balken darunter (kompakt).
|
||||
function pctBar(pct){
|
||||
if (pct==null) return '<span style="color:#9a9a9a">—</span>';
|
||||
var c=pctColor(pct);
|
||||
return '<div style="min-width:72px">'
|
||||
+ '<div style="font-weight:800;color:'+c+';font-size:.86rem;font-variant-numeric:tabular-nums">'+pct+' %</div>'
|
||||
+ '<div style="margin-top:2px;height:6px;border-radius:99px;background:rgba(0,0,0,.07);overflow:hidden"><div style="height:100%;width:'+pct+'%;background:'+c+'"></div></div>'
|
||||
return '<div style="width:40px">'
|
||||
+ '<div style="font-weight:800;color:'+c+';font-size:.78rem;font-variant-numeric:tabular-nums;line-height:1">'+pct+'<span style="font-size:.6rem"> %</span></div>'
|
||||
+ '<div style="margin-top:2px;height:4px;border-radius:99px;background:rgba(0,0,0,.07);overflow:hidden"><div style="height:100%;width:'+pct+'%;background:'+c+'"></div></div>'
|
||||
+ '</div>';
|
||||
}
|
||||
// Triage aus Leistungs-% × Aktivität — Grenzen = Farbgrenzen, damit Feld ↔ Farbe stimmen.
|
||||
// <50 (Rot) → Fördern · 50–79 (Orange+Gelb) → Begleiten · ≥80 (Grün) → Läuft gut.
|
||||
function triage(pct, active){
|
||||
if (pct==null || !active) return {lab:'inaktiv', col:'#8a8a8a', bg:'#efeee8'};
|
||||
if (pct<50) return {lab:'Fördern', col:'#b04a3e', bg:'#f7e2dc'};
|
||||
if (pct<65) return {lab:'Begleiten', col:'#9a6a12', bg:'#f7edd6'};
|
||||
if (pct<80) return {lab:'Begleiten', col:'#9a6a12', bg:'#f7edd6'};
|
||||
return {lab:'Läuft gut', col:'#3a6b3e', bg:'#dceadd'};
|
||||
}
|
||||
function triageChip(pct, active){ var t=triage(pct,active); return '<span style="display:inline-block;font-size:.62rem;font-weight:700;color:'+t.col+';background:'+t.bg+';padding:1px 7px;border-radius:10px">'+t.lab+'</span>'; }
|
||||
@@ -780,20 +782,20 @@ function renderSim(meta){
|
||||
|
||||
// Vorschau-Karte: neues Bewertungssystem (Skala · %+Balken · Triage)
|
||||
function renderPreviewCard(){
|
||||
var samples=[92,71,55,40,22];
|
||||
var samples=[95,84,68,54,30];
|
||||
var h='<div class="gbox" style="border-left-color:#5a8a5e">';
|
||||
h+='<h2>🎯 Neues Bewertungssystem — Vorschau zum Abnehmen</h2>';
|
||||
h+='<p><b>Standard überall:</b> ein Leistungs-% (0–100) in der Ampelfarbe + dünner Balken darunter — Sterne fallen weg. Beispiele:</p>';
|
||||
h+='<div style="display:flex;gap:1.4rem;flex-wrap:wrap;margin:.4rem 0 .9rem">'+samples.map(function(v){return pctBar(v);}).join('')+'</div>';
|
||||
h+='<p><b>5-stufige Farbskala</b> (= bestehende Tag-Skala):</p>';
|
||||
h+='<div style="display:flex;gap:.5rem;flex-wrap:wrap;margin:.3rem 0 .9rem;font-size:.72rem">'
|
||||
+[['≥ 80','sehr gut',92],['65–79','gut',71],['50–64','solide',55],['35–49','wackelig',40],['< 35','kritisch',22]]
|
||||
+[['≥ 90','sehr gut',95],['80–89','gut',84],['60–79','solide',68],['50–59','wackelig',54],['< 50','kritisch',30]]
|
||||
.map(function(b){var c=pctColor(b[2]);return '<span style="display:inline-flex;align-items:center;gap:.35rem;background:#fff;border:1px solid rgba(0,0,0,.08);border-radius:20px;padding:.2rem .6rem"><span style="width:14px;height:14px;border-radius:4px;background:'+c+'"></span><b>'+b[0]+' %</b> · '+b[1]+'</span>';}).join('')+'</div>';
|
||||
h+='<p><b>Triage-Felder aus %×Fleiß</b> — die Grenzen sind die Farbgrenzen, damit Balkenfarbe und Feld immer übereinstimmen:</p>';
|
||||
h+='<div style="display:flex;gap:1.2rem;flex-wrap:wrap;margin:.3rem 0 .6rem">'
|
||||
+[22,55,80].map(function(v){return '<div style="text-align:center">'+pctBar(v)+'<div style="margin-top:3px">'+triageChip(v,true)+'</div></div>';}).join('')
|
||||
+'<div style="text-align:center">'+pctBar(null)+'<div style="margin-top:3px">'+triageChip(null,false)+'</div></div>'+'</div>';
|
||||
h+='<div class="rec"><b>< 50 % → Fördern</b> · <b>50–64 % → Begleiten</b> · <b>≥ 65 % → Läuft gut</b> — jeweils nur, wenn aktiv gearbeitet wurde; sonst „inaktiv".</div>';
|
||||
h+='<div class="rec"><b>< 50 % → Fördern</b> · <b>50–79 % → Begleiten</b> · <b>≥ 80 % → Läuft gut</b> — jeweils nur, wenn aktiv gearbeitet wurde; sonst „inaktiv".</div>';
|
||||
h+='<p style="font-size:.72rem;color:#8a8a8a;margin-top:.6rem">Unten hat jede Tabelle die neue Spalte <b>🎯 Leistung</b> — die Vorschlags-Formel je Sim, auf die Testdaten gerechnet. Bei Busfahrt · Fluggesellschaft · Sonnensystem ist der Wert eine Näherung (Topo-/Erstversuch-Rohwerte fehlen in den Testdaten).</p>';
|
||||
h+='</div>';
|
||||
return h;
|
||||
|
||||
Reference in New Issue
Block a user