From b808171704bfe0e9df4bd726a18cf4ca9b0a7e1f Mon Sep 17 00:00:00 2001 From: Dogfather Date: Fri, 2 Oct 2026 14:04:05 +0200 Subject: [PATCH] Der Kamerahinweis wird wieder sichtbar -- und eine eigene Regression weg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ICH HATTE ES GESTERN FALSCH BEHAUPTET UND HEUTE SELBST VERSCHLIMMERT. Beides steht hier, weil beides zum Befund gehoert. WAS ICH GESAGT HATTE: „Auf 390 px ist der Hinweis 0 px hoch und deshalb nicht zu lesen -- wo er hingehoert, ist eine Gestaltungsfrage und gehoert Filipe." Der zweite Halbsatz war eine Ausrede. Im Quelltext stand die ganze Zeit eine 6-Sekunden-Uhr (reaktion.js, `sagFehler`), die ihn wieder ausblendet. Statt das nachzusehen, habe ich aus zwei Messungen zu verschiedenen Zeitpunkten einen Widerspruch gebaut (62 px hier, 0 px dort) und ihn fuer eine Eigenschaft der Breite gehalten. ALSO ABGETASTET STATT HERGELEITET (390x844, nach dem Laden): nach 500 ms Text 104 Zeichen · hidden=nein · 0 px nach 5000 ms Text 104 Zeichen · hidden=nein · 0 px nach 7000 ms Text 104 Zeichen · hidden=ja · 0 px Die Uhr stimmt also -- und trotzdem ist er die ganzen sechs Sekunden NULL PIXEL hoch. Ein `role="alert"`, den niemand sehen kann. Das war auf 390 px schon vorher so. UND AUF 320 PIXELN HABE ICH ES HEUTE SELBST KAPUTTGEMACHT. Vorher bekam `#fehler` dort eine stillschweigende fuenfte Rasterzeile mit 71 Pixeln -- sichtbar, aber auf Kosten des Bildes (56 statt 127). Seit die Regie aus dem Fluss ist, bleibt fuer diese Zeile nichts uebrig: Der Hinweis kostete nichts mehr und war dafuer unsichtbar. Von „sichtbar und zu teuer" auf „gratis und wirkungslos" ist keine Verbesserung. DIE URSACHE, und sie steht seit dem 30.09. im Haus beschrieben: `#fehler` ist ein Kind des Saals ohne Platzangabe. Der Saal hat vier Zeilen; das Feld landet in einer fuenften, die es nicht gibt. ERSTER REPARATURVERSUCH, GEMESSEN UND ZURUECKGENOMMEN: `grid-row: 2` ohne `position: absolute`. Damit belegte das Feld die Zelle, der Raum wich in eine stillschweigende zweite SPALTE aus, und das BILD fiel auf 0 px (320) bzw. 2 px (360). Bei `.raum` steht der gleiche Satz fuer eine zweite ZEILE -- derselbe Fehler, andere Achse. Ich habe den Kommentar gelesen, nachdem die Messung ihn mir bestaetigt hatte, nicht davor. SO GEHT ES: dasselbe Muster wie beim Pult. `position: absolute` nimmt das Feld aus dem Fluss -- es belegt keine Zelle und verdraengt nichts. `grid-row: 2` sagt dann nur noch, WORIN es liegt, `align-self: end` setzt es an die Unterkante. Keine gerechnete Zahl. GEMESSEN DANACH: 320x568 Hinweis 62 px · im Fenster · obenauf · Bild 180 -> 180 390x844 Hinweis 42 px · im Fenster · obenauf · Bild 219 -> 219 430x932 · Bild 242 -> 242 Sichtbar, wenn er kommt. Nach sechs Sekunden wieder weg. Und er kostet dem Bild kein Pixel mehr. DIE PRUEFUNG STELLT DEN ZUSTAND SELBST HER (pruef-reaktion-schmal, 38 -> 44). Im Betrieb erscheint der Hinweis, wenn Kamera oder Mikrofon fehlen -- auf einem Messrechner immer, auf einem Handy mit Freigabe nie. Eine Pruefung, die darauf wartet, prueft die Messumgebung. Sie schreibt den Text jetzt selbst hinein, macht ihn sichtbar, misst Hoehe UND Bildhoehe, und raeumt wieder auf. GEPRUEFT: pruef-reaktion-schmal 44 ok · pruef-reaktion 421 ok · pruef-css-klassen 37 ok · pruef-community-sicht 10 ok · pruef-breiten 23 ok. Co-Authored-By: Claude Opus 5 --- server/pruef-reaktion-schmal.mjs | 51 +++++++++++++++++++++++++++++++ workspace/anruf-probe.html | 10 +++--- workspace/app.webmanifest | 8 ++--- workspace/assets/css/reaktion.css | 45 +++++++++++++++++++++++++++ workspace/aufgaben.html | 38 +++++++++++------------ workspace/automation.html | 32 +++++++++---------- workspace/befinden.html | 34 ++++++++++----------- workspace/bereich.html | 44 +++++++++++++------------- workspace/bewerben.html | 38 +++++++++++------------ workspace/bewerbungen.html | 36 +++++++++++----------- workspace/buehne.html | 6 ++-- workspace/calls.html | 34 ++++++++++----------- workspace/chat.html | 40 ++++++++++++------------ workspace/content.html | 34 ++++++++++----------- workspace/crew-index.html | 12 ++++---- workspace/crew.webmanifest | 8 ++--- workspace/dateien.html | 34 ++++++++++----------- workspace/entwicklung.html | 36 +++++++++++----------- workspace/hilfe.html | 30 +++++++++--------- workspace/index.html | 10 +++--- workspace/kalender.html | 34 ++++++++++----------- workspace/leistung.html | 32 +++++++++---------- workspace/material.html | 32 +++++++++---------- workspace/notizen.html | 28 ++++++++--------- workspace/personen.html | 32 +++++++++---------- workspace/profil.html | 36 +++++++++++----------- workspace/reaktion.html | 38 +++++++++++------------ workspace/rechte.html | 34 ++++++++++----------- workspace/report.html | 36 +++++++++++----------- workspace/scouting.html | 32 +++++++++---------- workspace/start.html | 32 +++++++++---------- workspace/startcheck.html | 34 ++++++++++----------- workspace/steckbrief.html | 36 +++++++++++----------- workspace/support.html | 28 ++++++++--------- workspace/tafel.html | 6 ++-- workspace/talente.html | 36 +++++++++++----------- workspace/team.html | 32 +++++++++---------- workspace/teamlage.html | 34 ++++++++++----------- workspace/teilen.html | 30 +++++++++--------- workspace/treff-moderation.html | 32 +++++++++---------- workspace/treff-regeln.html | 32 +++++++++---------- workspace/uebersicht.html | 32 +++++++++---------- workspace/unsere-seiten.html | 30 +++++++++--------- workspace/unterstuetzen.html | 32 +++++++++---------- workspace/werdegang.html | 32 +++++++++---------- workspace/willkommen.html | 30 +++++++++--------- workspace/wissen.html | 34 ++++++++++----------- 47 files changed, 766 insertions(+), 670 deletions(-) diff --git a/server/pruef-reaktion-schmal.mjs b/server/pruef-reaktion-schmal.mjs index 86c809ef..7b76c7b0 100644 --- a/server/pruef-reaktion-schmal.mjs +++ b/server/pruef-reaktion-schmal.mjs @@ -322,6 +322,57 @@ for (const [breite, hoehe, wie] of GERAETE) { " und der Knopf zum Zumachen ist auch jetzt da und anklickbar — " + "das trennt einen Schoenheitsfehler von einer Falle"); + /* ==== DER HINWEIS: SICHTBAR, ABER NICHT AUF KOSTEN DES BILDES === + + Zwei Fehler an einer Stelle, beide am 02.10.2026 gemessen: + + · Er war NULL PIXEL hoch, obwohl `hidden=false` und 104 + Zeichen Text -- ein `role="alert"`, den niemand sieht. + · Und auf 320 px hatte er sich vorher eine stillschweigende + fuenfte Rasterzeile genommen: 71 Pixel, die dem Bild + fehlten (56 statt 127). + + HIER WIRD DER ZUSTAND SELBST HERGESTELLT und nicht abgewartet. + Im Betrieb erscheint der Hinweis, wenn Kamera oder Mikrofon + fehlen -- auf einem Messrechner ist das immer so, auf einem + Handy mit Freigabe nie. Eine Pruefung, die auf die Kamera des + Messrechners baut, prueft die Messumgebung. Also: Text + hineinschreiben, sichtbar machen, messen. */ + const hinweis = await seite.evaluate(() => { + const f = document.getElementById("fehler"); + const bildVorher = Math.round( + document.getElementById("leinwand").getBoundingClientRect().height); + f.textContent = "Kamera oder Mikrofon sind nicht freigegeben. " + + "Im Browser oben in der Adresszeile laesst sich das aendern."; + f.hidden = false; + return { bildVorher }; + }); + await seite.waitForTimeout(300); + const hinweisLage = await seite.evaluate(() => { + const f = document.getElementById("fehler"); + const r = f.getBoundingClientRect(); + const mitte = document.elementFromPoint( + Math.min(innerWidth - 1, Math.max(0, r.left + r.width / 2)), + Math.min(innerHeight - 1, Math.max(0, r.top + r.height / 2))); + return { + hoch: Math.round(r.height), + imFenster: r.height > 0 && r.top >= 0 && r.bottom <= innerHeight, + obenauf: !!mitte && (mitte === f || f.contains(mitte)), + bildNachher: Math.round( + document.getElementById("leinwand").getBoundingClientRect().height), + }; + }); + ok(hinweisLage.hoch > 0 && hinweisLage.imFenster && hinweisLage.obenauf, + `der Kamerahinweis ist lesbar, wenn er erscheint (${hinweisLage.hoch} px, im Fenster` + + `, obenauf) — vorher war er 0 px hoch`); + ok(hinweisLage.bildNachher === hinweis.bildVorher, + ` und er kostet das Bild nichts (${hinweis.bildVorher} -> ${hinweisLage.bildNachher} px)` + + " — vorher nahm er sich auf 320 px eine eigene Rasterzeile"); + await seite.evaluate(() => { + const f = document.getElementById("fehler"); + f.textContent = ""; f.hidden = true; + }); + ok(konsole.length === 0, konsole.length ? "Fehler im Browser: " + konsole.join(" | ") : "kein Absturz im Browser"); diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 79472dd4..44db2211 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`. --> - - + + - +