diff --git a/server/pruef-buehnen-fest.mjs b/server/pruef-buehnen-fest.mjs new file mode 100644 index 00000000..8b0807d9 --- /dev/null +++ b/server/pruef-buehnen-fest.mjs @@ -0,0 +1,183 @@ +/* ===================================================================== + DIE SZENE STEHT FEST IM DOKUMENT -- und stimmt mit bereiche.js + ===================================================================== + + WARUM ES DIESE PRUEFUNG GIBT (07.10.2026) + + `pruef-tempo-workspace` meldete zwei Seiten ueber 900 KB. Die + Ursache war nicht ein zu grosses Bild, sondern ZWEI: `start.css` + traegt an `body.start::before` einen Rueckfall (das Studio-Bild), + und `kopf.js` setzt `data-buehne` erst, nachdem die Seite steht. + Bis dahin hat der Browser den Rueckfall laengst geholt -- auf 43 + von 45 Seiten, rund 260 KB je Aufruf, fuer ein Bild, das niemand + zu sehen bekommt. + + Seit heute steht die Szene fest im
. Damit gibt es die + Zuordnung an ZWEI Stellen: in bereiche.js (wo sie gepflegt wird) + und im Dokument (wo sie frueh genug ankommt). + + EINE ABSCHRIFT MIT WAECHTER IST ETWAS ANDERES ALS EINE ABSCHRIFT. + Diese Datei haelt beide gegeneinander. Wer in bereiche.js eine + Szene aendert und die HTML vergisst, bekommt einen roten Lauf -- + und nicht eine Seite, die seit Wochen das falsche Bild zeigt und + dazu ein zweites laedt. + + NICHT BETROFFEN ist bereich.html: Dort haengt die Szene am + `?b=`-Parameter (vier verschiedene), sie kann also nicht fest im + Dokument stehen. Das steht hier ausdruecklich und nicht als + stille Luecke. + + Aufrufen mit: node server/pruef-buehnen-fest.mjs + ===================================================================== */ +import { readFileSync, existsSync, readdirSync } from "node:fs"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +const HIER = dirname(fileURLToPath(import.meta.url)); +const SEITEN = join(HIER, "..", "workspace"); + +let geprueft = 0, fehler = 0; +const ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; }; + +/* ---- Die Zuordnung aus bereiche.js --------------------------------- */ +const quelle = readFileSync(join(SEITEN, "assets", "js", "bereiche.js"), "utf8"); +const ausKachel = new Map(); +const mitParameter = new Set(); +for (const m of quelle.matchAll(/ziel:\s*'([^']+)'\s*,\s*szene:\s*'([^']+)'/g)) { + const [, ziel, szene] = m; + if (ziel.includes("?")) { mitParameter.add(ziel.split("?")[0]); continue; } + if (ausKachel.has(ziel) && ausKachel.get(ziel) !== szene) ausKachel.set(ziel, null); + else if (!ausKachel.has(ziel)) ausKachel.set(ziel, szene); +} + +console.log("\n=== 1. Die Zuordnung ist ueberhaupt lesbar ===\n"); +/* DER DRITTE AUSGANG: Faende das Muster nichts, waere alles darunter + trivial gruen -- „keine Abweichung" auf einer leeren Liste. */ +ok(ausKachel.size >= 15, + `${ausKachel.size} Seiten mit fester Szene in bereiche.js gefunden`); +ok(mitParameter.size >= 1, + `und ${mitParameter.size} Seite(n) mit Parameter, die keine feste haben kann ` + + `(${[...mitParameter].join(", ")})`); + +console.log("\n=== 2. Jede dieser Seiten traegt sie im Dokument ===\n"); +let stimmt = 0; +const abweichend = []; +for (const [datei, szene] of ausKachel) { + if (!szene) continue; + const pfad = join(SEITEN, datei); + if (!existsSync(pfad)) { abweichend.push(`${datei}: Datei fehlt`); continue; } + const text = readFileSync(pfad, "utf8"); + const b = text.match(/]*>/); + const steht = b?.[0].match(/data-buehne="([^"]+)"/)?.[1] ?? null; + if (steht === szene) stimmt++; + else abweichend.push(`${datei}: Dokument "${steht}" gegen bereiche.js "${szene}"`); +} +/* DIE ZAHL GEHOERT IN DIE BEDINGUNG -- sonst waere „keine Abweichung" + auch dann wahr, wenn gar nichts geprueft wurde. */ +ok(stimmt >= 15 && abweichend.length === 0, + `${stimmt} Seiten tragen ihre Szene fest und richtig` + + (abweichend.length ? `:\n ` + abweichend.slice(0, 6).join("\n ") : "")); + +console.log("\n=== 2b. Und die Seite mit Parameter setzt sie frueh genug ===\n"); +{ + /* bereich.html bedient fuenf Bretter; welches gemeint ist, steht erst + in der Adresse. Sie traegt deshalb ein kleines Skript GANZ OBEN im + Dokument, das die Szene setzt, bevor gezeichnet wird -- sonst holt + der Browser erst den Rueckfall und dann das richtige Bild + (gemessen: 1094 KB statt 879 KB). + + Die Zuordnung steht damit an zwei Stellen. Hier wird sie + gegeneinander gehalten. */ + const html = readFileSync(join(SEITEN, "bereich.html"), "utf8"); + const ausSeite = new Map([...html.matchAll(/(\w+):\s*"([a-z-]+)"/g)] + .filter((m) => /SZENE\s*=|live|community|technik|schutz|agentur/.test(m[0])) + .map((m) => [m[1], m[2]])); + const ausBereiche = new Map([...quelle.matchAll( + /ziel:\s*'bereich\.html\?b=([a-z]+)'\s*,\s*szene:\s*'([a-z-]+)'/g)] + .map((m) => [m[1], m[2]])); + + ok(ausBereiche.size >= 4, + `bereiche.js nennt ${ausBereiche.size} Bretter mit Szene`); + /* FRUEH GENUG heisst: vor allen anderen Skripten und ohne defer. + Ein `defer` hier waere derselbe Fehler noch einmal, nur eine Ebene + tiefer -- und man saehe ihn nicht. */ + /* `dataset.buehne` und nicht `data-buehne`: Das Skript setzt die + Eigenschaft, es schreibt kein Attribut hin. Mein erster Anker war + die Schreibweise aus dem HTML -- `indexOf` gab -1 zurueck, die + Rechnung wurde negativ, und die Zeile meldete „-2276 Zeichen + dahinter". Ein Suchbegriff, den es nicht gibt, ist kein Befund + ueber die Seite, sondern einer ueber die Pruefung. */ + const stelleSkript = html.indexOf("dataset.buehne"); + const stelleBody = html.indexOf(" stelleBody && stelleSkript - stelleBody < 2000, + `das Skript steht gleich hinter (${stelleSkript - stelleBody} Zeichen dahinter)`); + ok(!/ + - - - - - - + + + + + + diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index b51fcae3..0cc578b3 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,8 +16,8 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +