Vier rote Pruefungen -- drei Phantome und ein echtes Gewicht
Weiter durch die rote Liste. Drei der vier Befunde zeigten auf
gesunden Code; die Pruefungen selbst waren seit einem Umbau nicht
nachgezogen worden.
pruef-schritt (2 rot -> 71 gruen statt 47)
Meldete "1 von 6 Kategorien". Die Karte geht seit dem 01.10.2026
gefiltert auf ("zugetragen"), Bloecke ohne solche Punkte werden gar
nicht gezeichnet. Die Pruefung zaehlte danach alle. Schlimmer: Weil
dann kein Block mehr zugeklappt war, lief der Klick auf einen
zugeklappten 30 Sekunden in die Frist und riss den Lauf mit -- 24 von
71 Pruefungen liefen nie. Jetzt wird erst die Vorgabe geprueft (sie
ist eine Zusage), dann auf "Alle" gestellt.
pruef-glocke (1 rot -> 34 gruen)
Meldete "auf der Anmeldeseite steht der Knopf". Gemessen landete sie
auf start.html: Dieselbe Seite war eine Zeile zuvor angemeldet durch
zwanzig Arbeitsseiten gelaufen, und angemeldet fuehrt /workspace/
nicht zur Wand. Jetzt eigener Kontext ohne Keks -- und davor die
Zeile, dass die Wand wirklich erreicht wurde.
pruef-zeichen (1 rot -> 8 gruen)
Meldete content: "·" als Kodierungstruemmer. Die Bytes sind C2 B7,
also korrektes UTF-8; der Mittelpunkt ist ein begruendeter Trennpunkt
(seit 03.10.). Die Regel stammt aus einer Zeit, in der sie selbst
festhielt: "KEINE einzige benutzt ein Zeichen aus diesem Block."
Jetzt eine benannte Ausnahme MIT Veraltungsschutz: Jedes Zeichen
darin muss wirklich vorkommen, sonst wird die Ausnahme rot.
pruef-tempo-workspace (1 rot -> 9 gruen) -- DER ECHTE BEFUND
uebersicht.html 959 KB, bereich.html?b=live 1094 KB bei einer Grenze
von 900. Die Pruefung sagt jetzt auch, WORAN es liegt, und die
Antwort war eindeutig: ZWEI Buehnenbilder auf einer Seite, die eines
zeigt (281 KB studio + 262 KB portal).
Ursache: start.css traegt an body.start::before einen Rueckfall
(studio), und kopf.js setzt `data-buehne` erst, wenn die Seite steht.
Bis dahin ist der Rueckfall geholt -- auf 43 von 45 Seiten.
Jetzt steht die Szene fest im <body>, erzeugt aus bereiche.js
(tools/buehne-festschreiben.mjs, 20 Seiten). bereich.html bedient
fuenf Bretter und kann das nicht; sie bekommt ein kleines Skript
gleich hinter <body>, das die Szene aus `?b=` setzt, bevor gezeichnet
wird. Gemessen: 1094 -> 879 KB, und die Grenze haelt wieder.
DIE ZUORDNUNG STEHT DAMIT AN ZWEI STELLEN. Das ist nur vertretbar,
weil sie nicht auseinanderlaufen kann: pruef-buehnen-fest.mjs (neu,
13 Pruefungen) haelt HTML gegen bereiche.js, prueft die Lage des
Skripts und dass jede genannte Szene eine Regel hat.
Dabei gefunden und berichtigt -- zweimal an mir selbst: Der erste
Entwurf verglich Szenen mit Dateinamen und meldete teamlage.html
("eingang") als Fehler; die Szene gibt es, ihre Regel zeigt nur auf
ein crew-Bild. Und der Lage-Anker suchte `data-buehne`, das Skript
schreibt `dataset.buehne` -- indexOf gab -1, die Rechnung wurde
negativ und meldete "-2276 Zeichen dahinter".
Gegenproben gefahren: Szene verschoben -> rot mit Abstand; Ausnahme
verwaist -> rot; erfundene Szene -> erkannt.
Dazu gruen: css-klassen, workspace-seiten, neue-seiten, haus-trennung,
kopfleiste-farbe.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
/* =====================================================================
|
||||
buehne-festschreiben.mjs — die Szene gehört in die HTML (07.10.2026)
|
||||
=====================================================================
|
||||
|
||||
WAS GEMESSEN WURDE, BEVOR ES DIESES WERKZEUG GAB:
|
||||
|
||||
`pruef-tempo-workspace` meldete zwei Seiten über der Grenze von
|
||||
900 KB (uebersicht.html 959 KB, bereich.html?b=live 1094 KB). Die
|
||||
Prüfung sagt seit heute auch, WORAN es liegt, und die Antwort war
|
||||
eindeutig:
|
||||
|
||||
281 KB buehne-studio-breit.webp
|
||||
262 KB buehne-portal-breit.webp
|
||||
|
||||
ZWEI Bühnenbilder auf einer Seite, die nur eines zeigt. Der Grund
|
||||
steht in start.css: `body.start::before` trägt als Rückfall das
|
||||
Studio-Bild, und `kopf.js` setzt `data-buehne` erst, nachdem die
|
||||
Seite steht. Bis dahin hat der Browser den Rückfall längst geholt.
|
||||
|
||||
Das betrifft nicht eine Seite, sondern 43 von 45: Nur material.html
|
||||
und teamlage.html schreiben ihre Szene fest -- und zwar mit genau
|
||||
dieser Begründung, die dort schon steht („steht hier fest und nicht
|
||||
im Skript").
|
||||
|
||||
---------------------------------------------------------------------
|
||||
WAS DIESES WERKZEUG TUT
|
||||
|
||||
Es liest die Zuordnung „Seite -> Szene" aus bereiche.js -- der
|
||||
Stelle, an der sie ohnehin gepflegt wird -- und schreibt sie als
|
||||
`data-buehne` in das <body>-Element der jeweiligen Seite.
|
||||
|
||||
DIE ZWEITE STELLE IST KEIN WIDERSPRUCH ZUR HAUSREGEL, solange sie
|
||||
nicht auseinanderlaufen kann: `pruef-buehnen-fest.mjs` hält beide
|
||||
gegeneinander und wird rot, sobald sich eine ändert. Eine Abschrift
|
||||
mit Wächter ist etwas anderes als eine Abschrift.
|
||||
|
||||
NICHT BETROFFEN ist bereich.html: Dort hängt die Szene am
|
||||
`?b=`-Parameter (vier verschiedene), sie kann also nicht fest im
|
||||
Dokument stehen. Diese eine Seite holt weiterhin zuerst den
|
||||
Rückfall -- dafür bleibt der Rückfall auch stehen.
|
||||
|
||||
AUFRUF: node tools/buehne-festschreiben.mjs [--probe]
|
||||
===================================================================== */
|
||||
|
||||
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
||||
import { join, dirname } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const HIER = dirname(fileURLToPath(import.meta.url));
|
||||
const WURZEL = join(HIER, "..");
|
||||
const SEITEN = join(WURZEL, "workspace");
|
||||
const nurProbe = process.argv.includes("--probe");
|
||||
|
||||
/* Die Zuordnung kommt aus bereiche.js. Gelesen wird mit einem Muster
|
||||
und nicht per Import: Die Datei ist für den Browser gebaut (IIFE,
|
||||
kein Export), und ein Modul daraus zu machen wäre ein Umbau am
|
||||
Lieferstand für ein Werkzeug. */
|
||||
const quelle = readFileSync(join(SEITEN, "assets", "js", "bereiche.js"), "utf8");
|
||||
const zuordnung = new Map();
|
||||
for (const m of quelle.matchAll(/ziel:\s*'([^']+)'\s*,\s*szene:\s*'([^']+)'/g)) {
|
||||
const [, ziel, szene] = m;
|
||||
/* Seiten mit Fragezeichen hängen am Parameter -- siehe oben. */
|
||||
if (ziel.includes("?")) continue;
|
||||
const vorhanden = zuordnung.get(ziel);
|
||||
if (vorhanden && vorhanden !== szene) {
|
||||
console.log(` !! ${ziel}: zwei Szenen (${vorhanden} und ${szene}) -- übersprungen`);
|
||||
zuordnung.set(ziel, null);
|
||||
continue;
|
||||
}
|
||||
if (!vorhanden) zuordnung.set(ziel, szene);
|
||||
}
|
||||
|
||||
let gesetzt = 0, schonDa = 0, fehlt = 0;
|
||||
for (const [datei, szene] of zuordnung) {
|
||||
if (!szene) continue;
|
||||
const pfad = join(SEITEN, datei);
|
||||
if (!existsSync(pfad)) { console.log(` ?? ${datei} gibt es nicht`); fehlt++; continue; }
|
||||
let text = readFileSync(pfad, "utf8");
|
||||
|
||||
const body = text.match(/<body class="start"([^>]*)>/);
|
||||
if (!body) { console.log(` ?? ${datei}: kein <body class="start">`); fehlt++; continue; }
|
||||
if (/data-buehne="/.test(body[1])) { schonDa++; continue; }
|
||||
|
||||
const neu = `<body class="start"${body[1]} data-buehne="${szene}">`;
|
||||
text = text.replace(body[0], neu);
|
||||
if (!nurProbe) writeFileSync(pfad, text);
|
||||
console.log(` ${nurProbe ? "waere" : "gesetzt"}: ${datei.padEnd(22)} ${szene}`);
|
||||
gesetzt++;
|
||||
}
|
||||
|
||||
console.log(`\n${gesetzt} gesetzt, ${schonDa} standen schon fest, ${fehlt} nicht möglich`
|
||||
+ (nurProbe ? " (nur Probe, nichts geschrieben)" : ""));
|
||||
Reference in New Issue
Block a user