Was nur fuer Vorleseprogramme dasteht, ist kein zerquetschter Text
DER BEFUND WAR EIN FEHLALARM pruef-handy-teamdogi meldete auf notizen.html, nur bei 412 px: Text auf fast nichts gedrueckt -- a.zurueck „Team Dogi…" 0 statt 82px Nachgemessen ist das Absicht. start.css setzt auf schmalen Schirmen `.kopfleiste .marke__text` auf 1x1 Pixel mit `clip-path: inset(50%)` -- das uebliche Muster fuer "bleibt fuer Vorleseprogramme, verschwindet fuer das Auge". Der Grund steht daneben: Der Text steht auf jeder Seite zwei Zeilen tiefer noch einmal als Ueberschrift. WARUM DIE ERKENNUNG DANEBENGRIFF `nurVorlesen()` gab es laengst -- sie sah aber nur das Element SELBST an. Der Link darin ist 0 Pixel breit, aber eine Zeile hoch, und traegt selbst kein `clip-path`. Er fiel damit durch beide Bedingungen. Die Funktion steigt jetzt die Kette der Vorfahren hoch. DAS MACHT DIE REGEL SCHAERFER, NICHT LAXER Ausgenommen wird nur, was in einem nachweislich abgeklemmten Kasten sitzt. Der echte Fund vom 20.09.2026 -- ein Gespraechsname, der in einer normalen Kopfzeile auf null gequetscht wurde -- hat keinen solchen Vorfahren und wird weiter gemeldet. Und das ist nicht behauptet, sondern gemessen: Die Gegenprobe bekommt ein PAAR statt eines Falls. Derselbe zerquetschte Text einmal in einem abgeklemmten Kasten (darf nicht gemeldet werden) und einmal ohne (muss gemeldet werden). Eine Regel, die enger misst, kann zu eng sein; dann faellt echter Schaden durch und der Lauf bleibt gruen. Sechs Gegenproben statt vier. GEMESSEN 244 Seitenaufrufe, 123409 Elemente, 5393 Bedienelemente 0 Befunde (vorher: 4-5, darunter die 40-Pixel-Knoepfe) alle sechs Gegenproben greifen, zweimal hintereinander gleich span#gp-laut „Dieser Name ist wirklich…" 0 statt 320px -> gemeldet span#gp-leise -> nicht OFFEN GEBLIEBEN Die Ueberstandsmessung derselben Datei nimmt abgeklemmte Elemente NICHT aus -- mein Gegenprobe-Element taucht dort als 523 px auf. Auf echten Seiten hat das keine Folgen (0 Befunde), aber es ist dieselbe Inkonsistenz an einer zweiten Stelle. Nicht angefasst, weil der Nachweis dafuer wieder den ganzen Lauf braucht.
This commit is contained in:
@@ -316,12 +316,39 @@ const messen = () => {
|
|||||||
/* NUR-FUER-VORLESEPROGRAMME IST KEIN FEHLER. Solche Elemente sind
|
/* NUR-FUER-VORLESEPROGRAMME IST KEIN FEHLER. Solche Elemente sind
|
||||||
absichtlich 1 px groß und weggeschnitten -- sie als „zu klein" zu
|
absichtlich 1 px groß und weggeschnitten -- sie als „zu klein" zu
|
||||||
melden wäre ein Fehlalarm, der die echten Funde zudeckt. */
|
melden wäre ein Fehlalarm, der die echten Funde zudeckt. */
|
||||||
const nurVorlesen = (e) => {
|
/* WER IN EINEM ABGEKLEMMTEN KASTEN SITZT, IST SELBST ABGEKLEMMT
|
||||||
|
(geschaerft 29.09.2026).
|
||||||
|
|
||||||
|
Gemeldet wurde `a.zurueck „Team Dogi…" 0 statt 82px` auf
|
||||||
|
notizen.html. Das ist kein Mangel, sondern Absicht: Auf schmalen
|
||||||
|
Schirmen setzt start.css `.kopfleiste .marke__text` auf 1x1
|
||||||
|
Pixel mit `clip-path: inset(50%)` -- das uebliche Muster fuer
|
||||||
|
„bleibt fuer Vorleseprogramme, verschwindet fuer das Auge".
|
||||||
|
Daneben steht der Grund: Der Text steht auf jeder Seite zwei
|
||||||
|
Zeilen tiefer noch einmal als Ueberschrift.
|
||||||
|
|
||||||
|
Die Erkennung sah nur das Element SELBST an. Der Link darin ist
|
||||||
|
0 Pixel breit, aber eine Zeile hoch -- also fiel er durch beide
|
||||||
|
Bedingungen und wurde gemeldet. Sie steigt jetzt die Kette der
|
||||||
|
Vorfahren hoch.
|
||||||
|
|
||||||
|
DAS MACHT DIE REGEL SCHAERFER, NICHT LAXER: Ausgenommen wird
|
||||||
|
nur, was in einem nachweislich abgeklemmten Kasten sitzt. Ein
|
||||||
|
Name, der in einer normalen Kopfzeile auf null gequetscht wird
|
||||||
|
-- der echte Fund vom 20.09. -- hat keinen solchen Vorfahren
|
||||||
|
und wird weiter gemeldet. */
|
||||||
|
const abgeklemmt = (e) => {
|
||||||
const st = getComputedStyle(e);
|
const st = getComputedStyle(e);
|
||||||
const r = e.getBoundingClientRect();
|
const r = e.getBoundingClientRect();
|
||||||
return (r.width <= 2 && r.height <= 2)
|
return (r.width <= 2 && r.height <= 2)
|
||||||
|| st.clipPath === "inset(50%)" || st.clip === "rect(0px, 0px, 0px, 0px)";
|
|| st.clipPath === "inset(50%)" || st.clip === "rect(0px, 0px, 0px, 0px)";
|
||||||
};
|
};
|
||||||
|
const nurVorlesen = (e) => {
|
||||||
|
for (let k = e; k && k !== document.body; k = k.parentElement) {
|
||||||
|
if (abgeklemmt(k)) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
const alle = [...document.querySelectorAll("body *")];
|
const alle = [...document.querySelectorAll("body *")];
|
||||||
const bedienbar = [...document.querySelectorAll(BEDIENBAR)]
|
const bedienbar = [...document.querySelectorAll(BEDIENBAR)]
|
||||||
@@ -785,6 +812,35 @@ melde("\n --- Gegenprobe (beide Fehler MÜSSEN gefunden werden) ---");
|
|||||||
stumm.textContent = "o";
|
stumm.textContent = "o";
|
||||||
stumm.style.cssText = "width:8px;height:8px;pointer-events:none";
|
stumm.style.cssText = "width:8px;height:8px;pointer-events:none";
|
||||||
document.body.append(stumm);
|
document.body.append(stumm);
|
||||||
|
|
||||||
|
/* ---- UND DIE AUSNAHME VOM 29.09.2026 -------------------------
|
||||||
|
(c) Zerquetschter Text IN einem abgeklemmten Kasten -- darf
|
||||||
|
NICHT gemeldet werden. So steht der Markentext in der
|
||||||
|
Kopfleiste auf schmalen Schirmen: 1x1 Pixel mit
|
||||||
|
`clip-path: inset(50%)`, damit er fuer Vorleseprogramme
|
||||||
|
bleibt und fuer das Auge verschwindet.
|
||||||
|
(d) DERSELBE TEXT OHNE ABGEKLEMMTEN KASTEN -- muss gemeldet
|
||||||
|
werden. Ohne dieses Paar waere die neue Ausnahme nicht
|
||||||
|
geprueft, sondern nur behauptet: Eine Regel, die enger
|
||||||
|
misst, kann zu eng sein, und dann faellt echter Schaden
|
||||||
|
durch. */
|
||||||
|
const huelle = document.createElement("div");
|
||||||
|
huelle.style.cssText = "position:absolute;width:1px;height:1px;"
|
||||||
|
+ "overflow:hidden;clip-path:inset(50%);white-space:nowrap";
|
||||||
|
const leise = document.createElement("span");
|
||||||
|
leise.id = "gp-leise";
|
||||||
|
leise.textContent = "Nur fuer Vorleseprogramme, nicht fuers Auge";
|
||||||
|
huelle.append(leise);
|
||||||
|
document.body.append(huelle);
|
||||||
|
|
||||||
|
const eng = document.createElement("div");
|
||||||
|
eng.style.cssText = "width:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap";
|
||||||
|
const laut = document.createElement("span");
|
||||||
|
laut.id = "gp-laut";
|
||||||
|
laut.textContent = "Dieser Name ist wirklich zerquetscht worden";
|
||||||
|
laut.style.cssText = "display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap";
|
||||||
|
eng.append(laut);
|
||||||
|
document.body.append(eng);
|
||||||
});
|
});
|
||||||
const g = await seite.evaluate(messen);
|
const g = await seite.evaluate(messen);
|
||||||
const ok1 = g.ueberstand.length > 0;
|
const ok1 = g.ueberstand.length > 0;
|
||||||
@@ -794,12 +850,19 @@ melde("\n --- Gegenprobe (beide Fehler MÜSSEN gefunden werden) ---");
|
|||||||
der stumme Knopf. */
|
der stumme Knopf. */
|
||||||
const ok3 = !g.ueberstand.some((x) => /9\d\dpx/.test(x));
|
const ok3 = !g.ueberstand.some((x) => /9\d\dpx/.test(x));
|
||||||
const ok4 = !g.klein.some((x) => /\b8×8\b/.test(x));
|
const ok4 = !g.klein.some((x) => /\b8×8\b/.test(x));
|
||||||
|
/* Das Paar vom 29.09.: der abgeklemmte Text darf NICHT auftauchen,
|
||||||
|
der daneben MUSS. Nur beides zusammen beweist, dass die neue
|
||||||
|
Ausnahme genau greift und nicht weiter. */
|
||||||
|
const ok5 = g.zerquetscht.some((x) => /gp-laut/.test(x));
|
||||||
|
const ok6 = !g.zerquetscht.some((x) => /gp-leise/.test(x));
|
||||||
melde(` ${ok1 ? "ok " : "FEHL"} ein zu breites Element wird gemeldet (${g.ueberstand.join(", ") || "nichts"})`);
|
melde(` ${ok1 ? "ok " : "FEHL"} ein zu breites Element wird gemeldet (${g.ueberstand.join(", ") || "nichts"})`);
|
||||||
melde(` ${ok2 ? "ok " : "FEHL"} ein zu kleiner Knopf wird gemeldet (${g.klein.join(", ") || "nichts"})`);
|
melde(` ${ok2 ? "ok " : "FEHL"} ein zu kleiner Knopf wird gemeldet (${g.klein.join(", ") || "nichts"})`);
|
||||||
melde(` ${ok3 ? "ok " : "FEHL"} was in einem rollenden Kasten steht, NICHT`);
|
melde(` ${ok3 ? "ok " : "FEHL"} was in einem rollenden Kasten steht, NICHT`);
|
||||||
melde(` ${ok4 ? "ok " : "FEHL"} was keine Klicks annimmt, auch NICHT`);
|
melde(` ${ok4 ? "ok " : "FEHL"} was keine Klicks annimmt, auch NICHT`);
|
||||||
if (!ok1 || !ok2) { fehler += 1; probleme.push("GEGENPROBE VERSAGT — die Messung findet nichts mehr"); }
|
melde(` ${ok5 ? "ok " : "FEHL"} zerquetschter Text wird gemeldet (${g.zerquetscht.join(", ") || "nichts"})`);
|
||||||
if (!ok3 || !ok4) { fehler += 1; probleme.push("GEGENPROBE VERSAGT — die Messung meldet Absicht als Fehler"); }
|
melde(` ${ok6 ? "ok " : "FEHL"} was nur fuer Vorleseprogramme dasteht, NICHT`);
|
||||||
|
if (!ok1 || !ok2 || !ok5) { fehler += 1; probleme.push("GEGENPROBE VERSAGT — die Messung findet nichts mehr"); }
|
||||||
|
if (!ok3 || !ok4 || !ok6) { fehler += 1; probleme.push("GEGENPROBE VERSAGT — die Messung meldet Absicht als Fehler"); }
|
||||||
await kontext.close();
|
await kontext.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user