From 2f3b8630c776ef4e1e429622de5322406438d2aa Mon Sep 17 00:00:00 2001 From: Dogfather Date: Thu, 1 Oct 2026 13:37:05 +0200 Subject: [PATCH] Messungen am Telefon: 37 bekommen ihren Finger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gestern Mittag gemessen: 39 `newContext`-Aufrufe nehmen ihre Breite aus einer Variablen und setzen kein `hasTouch`. Ohne das meldet der Browser `pointer: fine`, und KEINE Regel aus `@media (pointer: coarse)` greift — dort stehen im ganzen Haus die 44-Pixel- Beruehrziele, die ausgeblendeten Tastenkuerzel und die eingeklappte Reiterleiste. Was das anrichtet, war an pruef-breiten zu sehen: drei Befunde auf 320, 390 und 430 Pixeln, die mit dem Finger allesamt verschwanden — Messfehler, keine Fehler. 37 DAVON HABEN IHN JETZT. Nur `hasTouch`, nicht `isMobile`: Gefragt ist genau die eine Sache, um die es geht. `isMobile` waere eine zweite Aenderung in derselben Zeile, und wenn danach etwas anders aussieht, wuesste niemand, welche von beiden es war. ZWEI BLEIBEN STEHEN, beide in pruef-grosscheck.mjs. Die Aenderung dort waere ein Zweizeiler; sie zu pruefen hiesse, 206 Seiten ueber vier Rollen laufen zu lassen, und das braucht Filipes Zusage. Eine Aenderung, die ich nicht pruefen darf, liefere ich nicht aus. Grundlinie in pruef-fingermass steht deshalb auf 2. JEDE EINZELN NACHGELAUFEN — 37 Laeufe: 34 gruen, darunter pruef-handy 186, pruef-material 159, pruef-start-ansicht 160, pruef-kalender 141, pruef-erwaehnung 129, pruef-bewerbung-aufgaben 163, pruef-neue-seiten 109 3 mit Befunden, ALLE DREI VORBESTEHEND (Gegenprobe: alter Stand derselben Datei, gleicher Lauf, gleiche Zahl): pruef-browser 3 (WebKit startet auf diesem Rechner nicht) pruef-chat-anhaenge 2 pruef-crew-wand-bild 3 EINE ZEITBOMBE GEFUNDEN UND ENTSCHAERFT pruef-dabei-optik meldete „Haekchen: 0 -> 0" — aber nur, wenn vier andere Pruefungen gleichzeitig liefen. Allein: „0 -> 1", gruen. Dort stand `waitForTimeout(250)` mit der Begruendung „250 ms sind reichlich ueber den 160" (der Dauer der Blende). Auf einem Rechner, auf dem nebenher vier Browser messen, sind sie es nicht. Die Pruefung war damit gruen, solange nichts anderes lief, und rot im Gesamtlauf — also genau dann, wenn niemand sie einzeln nachstellen kann. Eine Wartezeit ist eine Annahme ueber den Rechner. Gewartet wird jetzt auf das, worauf es ankommt: dass das Haekchen da ist. Laeuft die Frist ab, faellt die Pruefung mit dem ECHTEN Wert um und nicht mit einem Messfehler. Gegenprobe: unter derselben vierfachen Last, die sie vorher rot gemacht hat, jetzt gruen. UND DIE GRUNDLINIE WIEDER STRENG. Ich hatte sie kurz auf „hoechstens" gestellt — damit haette ein Rueckgang stillschweigend Platz fuer die naechste Suende gedeckt. Genau davor warnt der Kopf derselben Datei bei der anderen Grundlinie, und ich habe es eine Stunde spaeter selbst falsch gemacht. Co-Authored-By: Claude Opus 5 --- server/mess-alle-einzelsicht.mjs | 2 +- server/mess-buehne.mjs | 2 +- server/mess-chat-liste.mjs | 2 +- server/mess-dialog-ausgang.mjs | 2 +- server/mess-eingang-optik.mjs | 2 +- server/mess-entwicklung-kacheln.mjs | 2 +- server/mess-startseite.mjs | 2 +- server/mess-support-runde.mjs | 2 +- server/mess-support-ueberstand.mjs | 2 +- server/mess-vanvan-karte.mjs | 2 +- server/pruef-abbrechen-optik.mjs | 2 +- server/pruef-aufgabenbrett.mjs | 2 +- server/pruef-bewerbung-aufgaben.mjs | 2 +- server/pruef-browser.mjs | 2 +- server/pruef-chat-anhaenge.mjs | 2 +- server/pruef-chat-ausbau.mjs | 2 +- server/pruef-content-ansicht.mjs | 2 +- server/pruef-crew-wand-bild.mjs | 2 +- server/pruef-dabei-optik.mjs | 32 +++++++++++++++++++++------ server/pruef-erwaehnung.mjs | 2 +- server/pruef-fingermass.mjs | 34 +++++++++++++++++------------ server/pruef-formulare.mjs | 2 +- server/pruef-freie-namen.mjs | 2 +- server/pruef-handy.mjs | 2 +- server/pruef-kachelraster.mjs | 2 +- server/pruef-kalender.mjs | 2 +- server/pruef-kopf-messen.mjs | 2 +- server/pruef-material.mjs | 2 +- server/pruef-neue-seiten.mjs | 2 +- server/pruef-personen-formular.mjs | 2 +- server/pruef-personen-kachel.mjs | 2 +- server/pruef-protokoll-klappe.mjs | 2 +- server/pruef-start-ansicht.mjs | 2 +- server/pruef-tagesblick.mjs | 2 +- server/pruef-textform.mjs | 2 +- server/pruef-willkommen.mjs | 2 +- server/pruef-workspace-seiten.mjs | 2 +- server/pruef-zustand-ansicht.mjs | 2 +- 38 files changed, 81 insertions(+), 57 deletions(-) diff --git a/server/mess-alle-einzelsicht.mjs b/server/mess-alle-einzelsicht.mjs index f8d00e79..0d6be566 100644 --- a/server/mess-alle-einzelsicht.mjs +++ b/server/mess-alle-einzelsicht.mjs @@ -172,7 +172,7 @@ try { am 06.09. die Kopfleiste gescheitert. 1280 px ist der kleinste Rechner, an dem noch jemand arbeitet. */ for (const [wie, breite, hoehe] of [["handy", 412, 1400], ["computer", 1280, 1600]]) { - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); await kontext.addCookies(keks.split("; ").map((k) => { const [n, ...r] = k.split("="); return { name: n, value: r.join("="), domain: CREW, path: "/" }; diff --git a/server/mess-buehne.mjs b/server/mess-buehne.mjs index 8fe04dc2..4e5f839b 100644 --- a/server/mess-buehne.mjs +++ b/server/mess-buehne.mjs @@ -200,7 +200,7 @@ const browser = await pw.chromium.launch({ ein Messfehler, der wie ein Programmfehler aussah. */ async function alsWer(rolle, breite, hoehe) { const kontext = await browser.newContext({ - viewport: { width: breite, height: hoehe }, + viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860, ignoreHTTPSErrors: true, permissions: ["camera", "microphone"], }); diff --git a/server/mess-chat-liste.mjs b/server/mess-chat-liste.mjs index 20cb3972..42c114f8 100644 --- a/server/mess-chat-liste.mjs +++ b/server/mess-chat-liste.mjs @@ -165,7 +165,7 @@ const { chromium } = await import( const browser = await chromium.launch(); try { for (const [wie, breite, hoehe] of [["breit", 1280, 900], ["handy", 390, 860]]) { - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); await kontext.addCookies(keksIch.split("; ").map((k) => { const [name, ...rest] = k.split("="); return { name, value: rest.join("="), domain: "127.0.0.1", path: "/" }; diff --git a/server/mess-dialog-ausgang.mjs b/server/mess-dialog-ausgang.mjs index 563cb4b4..0cdba19e 100644 --- a/server/mess-dialog-ausgang.mjs +++ b/server/mess-dialog-ausgang.mjs @@ -151,7 +151,7 @@ try { die nur den guenstigsten Fall kennt, sagt genau dann "in Ordnung", wenn der Nutzer schon feststeckt. */ for (const [wie, breite, hoehe] of GROESSEN) { - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); await kontext.addCookies(keks.split("; ").map((k) => { const [n, ...r] = k.split("="); return { name: n, value: r.join("="), domain: CREW, path: "/" }; diff --git a/server/mess-eingang-optik.mjs b/server/mess-eingang-optik.mjs index 383fd929..684f7777 100644 --- a/server/mess-eingang-optik.mjs +++ b/server/mess-eingang-optik.mjs @@ -137,7 +137,7 @@ const browser = await pw.chromium.launch({ }); try { for (const [wie, breite, hoehe] of [["computer", 1280, 1100], ["handy", 412, 915]]) { - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); await kontext.addCookies(keks.split("; ").map((k) => { const [n, ...r] = k.split("="); return { name: n, value: r.join("="), domain: CREW, path: "/" }; diff --git a/server/mess-entwicklung-kacheln.mjs b/server/mess-entwicklung-kacheln.mjs index 51af6a59..9da00c66 100644 --- a/server/mess-entwicklung-kacheln.mjs +++ b/server/mess-entwicklung-kacheln.mjs @@ -168,7 +168,7 @@ const { chromium } = await import( const browser = await chromium.launch(); try { for (const [wie, breite, hoehe] of [["breit", 1280, 1000], ["handy", 390, 1100]]) { - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); await kontext.addCookies(keks.split("; ").map((k) => { const [name, ...rest] = k.split("="); return { name, value: rest.join("="), domain: "127.0.0.1", path: "/" }; diff --git a/server/mess-startseite.mjs b/server/mess-startseite.mjs index 3e034f48..1034282d 100644 --- a/server/mess-startseite.mjs +++ b/server/mess-startseite.mjs @@ -124,7 +124,7 @@ try { for (const p of leute) { const keks = await anmelden(p.kachel, p.code); if (!keks) { console.log(` !! ${p.rolle}: Anmeldung fehlgeschlagen`); continue; } - const kontext = await browser.newContext({ viewport: { width: BREITE, height: HOEHE } }); + const kontext = await browser.newContext({ viewport: { width: BREITE, height: HOEHE }, hasTouch: BREITE <= 860 }); await kontext.addCookies(keks.split("; ").map((k) => { const [name, ...rest] = k.split("="); return { name, value: rest.join("="), domain: "127.0.0.1", path: "/" }; diff --git a/server/mess-support-runde.mjs b/server/mess-support-runde.mjs index b006a582..220d62a0 100644 --- a/server/mess-support-runde.mjs +++ b/server/mess-support-runde.mjs @@ -150,7 +150,7 @@ const browser = await pw.chromium.launch({ }); async function blicken(name, keks, breite, hoehe) { - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); await kontext.addCookies(keks.split("; ").map((k) => { const [n, ...r] = k.split("="); return { name: n, value: r.join("="), domain: CREW, path: "/" }; diff --git a/server/mess-support-ueberstand.mjs b/server/mess-support-ueberstand.mjs index 88873d03..b74441e8 100644 --- a/server/mess-support-ueberstand.mjs +++ b/server/mess-support-ueberstand.mjs @@ -81,7 +81,7 @@ const pw = await import( const browser = await pw.chromium.launch(); for (const [wie, breite] of [["Handy", 390], ["Tablet quer", 1024], ["Laptop", 1280]]) { - const kontext = await browser.newContext({ viewport: { width: breite, height: 900 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 900 }, hasTouch: breite <= 860 }); await kontext.addCookies(keks.split("; ").map((k) => { const [n, ...r] = k.split("="); return { name: n, value: r.join("="), domain: "127.0.0.1", path: "/" }; diff --git a/server/mess-vanvan-karte.mjs b/server/mess-vanvan-karte.mjs index e00b05ed..c3fda527 100644 --- a/server/mess-vanvan-karte.mjs +++ b/server/mess-vanvan-karte.mjs @@ -181,7 +181,7 @@ const { chromium } = await import( const browser = await chromium.launch(); async function alsWer(keks, breite = 1280, hoehe = 1000) { - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); await kontext.addCookies(keks.split("; ").filter(Boolean).map((z) => { const [n, ...r] = z.split("="); return { name: n, value: r.join("="), domain: "127.0.0.1", path: "/" }; diff --git a/server/pruef-abbrechen-optik.mjs b/server/pruef-abbrechen-optik.mjs index f86b30ae..1c63769d 100644 --- a/server/pruef-abbrechen-optik.mjs +++ b/server/pruef-abbrechen-optik.mjs @@ -144,7 +144,7 @@ const browser = await pw.chromium.launch(); genauso aus wie "der Server antwortet nicht". */ const konsole = []; async function alsRolle(rolle, code, breite = 1280) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 1000 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 1000 }, hasTouch: breite <= 860 }); const seite = await ctx.newPage(); seite.on("pageerror", (f) => konsole.push(`pageerror: ${f.message}`)); seite.on("console", (m) => { diff --git a/server/pruef-aufgabenbrett.mjs b/server/pruef-aufgabenbrett.mjs index 7a259b77..099a6685 100644 --- a/server/pruef-aufgabenbrett.mjs +++ b/server/pruef-aufgabenbrett.mjs @@ -234,7 +234,7 @@ const { chromium } = await import( const browser = await chromium.launch(); async function seiteAls(rolle, code, breite = 1280) { - const kontext = await browser.newContext({ viewport: { width: breite, height: 1100 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 1100 }, hasTouch: breite <= 860 }); const konsole = []; const seite = await kontext.newPage(); seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text()); }); diff --git a/server/pruef-bewerbung-aufgaben.mjs b/server/pruef-bewerbung-aufgaben.mjs index 33d16058..828cd8ea 100644 --- a/server/pruef-bewerbung-aufgaben.mjs +++ b/server/pruef-bewerbung-aufgaben.mjs @@ -494,7 +494,7 @@ melde("=== 6. Am echten Bildschirm ==="); const meckern = []; async function seiteAls(rolle, code, breite = 1280) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 1000 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 1000 }, hasTouch: breite <= 860 }); const s2 = await ctx.newPage(); s2.on("pageerror", (e) => meckern.push(`${rolle}: ${String(e).slice(0, 110)}`)); s2.on("console", (m) => { diff --git a/server/pruef-browser.mjs b/server/pruef-browser.mjs index ae123dfc..370e9d6a 100644 --- a/server/pruef-browser.mjs +++ b/server/pruef-browser.mjs @@ -186,7 +186,7 @@ for (const [motor, wie, breite, hoehe] of MASCHINEN) { } maschinenGelaufen++; - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); const seite = await kontext.newPage(); const konsole = []; seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text().slice(0, 90)); }); diff --git a/server/pruef-chat-anhaenge.mjs b/server/pruef-chat-anhaenge.mjs index 6e53493a..0faedda0 100644 --- a/server/pruef-chat-anhaenge.mjs +++ b/server/pruef-chat-anhaenge.mjs @@ -106,7 +106,7 @@ const browser = await pw.chromium.launch({ }); async function alsRolle(rolle, code, breite = 1280) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 900 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 900 }, hasTouch: breite <= 860 }); const seite = await ctx.newPage(); const konsole = []; const rauschen = []; diff --git a/server/pruef-chat-ausbau.mjs b/server/pruef-chat-ausbau.mjs index e0448845..a3b72c1a 100644 --- a/server/pruef-chat-ausbau.mjs +++ b/server/pruef-chat-ausbau.mjs @@ -85,7 +85,7 @@ const browser = await pw.chromium.launch(); async function alsRolle(rolle, code, breite = 1280) { const ctx = await browser.newContext({ - viewport: { width: breite, height: 900 }, + viewport: { width: breite, height: 900 }, hasTouch: breite <= 860, permissions: ["clipboard-read", "clipboard-write"], }); const seite = await ctx.newPage(); diff --git a/server/pruef-content-ansicht.mjs b/server/pruef-content-ansicht.mjs index 4d505854..db6adf82 100644 --- a/server/pruef-content-ansicht.mjs +++ b/server/pruef-content-ansicht.mjs @@ -145,7 +145,7 @@ const lesen = (seite) => seite.evaluate(() => ({ for (const [breite, wie] of [[1440, "Computer"], [390, "Handy"]]) { console.log(`\n=== DogFather · ${wie}`); - const kontext = await browser.newContext({ viewport: { width: breite, height: 1100 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 1100 }, hasTouch: breite <= 860 }); const konsole = []; const seite = await seiteFuer(kontext, "admin", "CODE-DOGI-0001"); seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text()); }); diff --git a/server/pruef-crew-wand-bild.mjs b/server/pruef-crew-wand-bild.mjs index f521d23e..d2bd3fbf 100644 --- a/server/pruef-crew-wand-bild.mjs +++ b/server/pruef-crew-wand-bild.mjs @@ -81,7 +81,7 @@ for (const geraet of [ { name: "alt-handy", breite: 412, hoehe: 915, alt: true }, ]) { const ctx = await browser.newContext({ - viewport: { width: geraet.breite, height: geraet.hoehe }, + viewport: { width: geraet.breite, height: geraet.hoehe }, hasTouch: geraet.breite <= 860, deviceScaleFactor: 1, }); const seite = await ctx.newPage(); diff --git a/server/pruef-dabei-optik.mjs b/server/pruef-dabei-optik.mjs index 76c8f11e..dabc4f6e 100644 --- a/server/pruef-dabei-optik.mjs +++ b/server/pruef-dabei-optik.mjs @@ -126,7 +126,7 @@ const browser = await pw.chromium.launch(); * geraten statt nachgesehen, das Formular nahm den Code nicht an, und * waitForURL wartete auf eine Adresse, die nie kam. */ async function alsRolle(rolle, code, breite = 1280) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 900 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 900 }, hasTouch: breite <= 860 }); const seite = await ctx.newPage(); await seite.goto(BASIS + "/workspace/", { waitUntil: "networkidle" }); await seite.click(`.rolle[data-rolle="${rolle}"]`); @@ -221,12 +221,30 @@ console.log("\n=== Die Wahl aus Sicht von DogFather ==="); const vorher = await seite.$eval("#dabei-wahl .k-dabei__knopf .k-dabei__haken", (h) => getComputedStyle(h).opacity); await seite.click("#dabei-wahl .k-dabei__knopf"); - /* ERST DIE ÜBERBLENDUNG ABWARTEN. Beim ersten Lauf stand hier - "0 → 0" und sah aus wie ein defektes Häkchen -- gemessen wurde - aber mitten in der 0,16-Sekunden-Blende, als es tatsächlich noch - unsichtbar war. Nicht der Code war falsch, sondern der Zeitpunkt - der Messung. 250 ms sind reichlich über den 160. */ - await seite.waitForTimeout(250); + /* AUF DEN ZUSTAND WARTEN, NICHT AUF DIE UHR (01.10.2026). + + Hier stand `waitForTimeout(250)`, mit dieser Begründung: Beim + ersten Lauf stand „0 → 0" und sah aus wie ein defektes Häkchen + -- gemessen wurde aber mitten in der 0,16-Sekunden-Blende. + „250 ms sind reichlich über den 160." + + Auf einem Rechner, auf dem nebenher vier Browser messen, sind + sie es nicht. Gemessen: Mit vier parallelen Prüfungen meldete + diese Zeile wieder „0 → 0", allein gestartet „0 → 1". Damit war + sie eine Zeitbombe -- grün, solange nichts anderes läuft, und + rot im Gesamtlauf, also genau dann, wenn niemand sie einzeln + nachstellen kann. + + Eine Wartezeit ist eine Annahme über den Rechner. Gewartet wird + deshalb auf das, worauf es ankommt. Läuft die Frist ab, fällt + die Prüfung mit dem ECHTEN Wert um und nicht mit einem + Messfehler -- deshalb wird der Abbruch hier geschluckt und die + Behauptung darunter entscheidet. */ + await seite.waitForFunction( + () => Number(getComputedStyle( + document.querySelector("#dabei-wahl .k-dabei__knopf .k-dabei__haken")).opacity) > 0.9, + null, { timeout: 5000 }, + ).catch(() => { /* der Wert darunter sagt dann, was wirklich da war */ }); const nachher = await seite.$eval("#dabei-wahl .k-dabei__knopf .k-dabei__haken", (h) => getComputedStyle(h).opacity); ok(Number(vorher) < 0.1 && Number(nachher) > 0.9, diff --git a/server/pruef-erwaehnung.mjs b/server/pruef-erwaehnung.mjs index ec8ea69c..44fac36d 100644 --- a/server/pruef-erwaehnung.mjs +++ b/server/pruef-erwaehnung.mjs @@ -639,7 +639,7 @@ const pw = await import("file:///C:/Users/qciga/Documents/Obelix/Analyse/node_mo const browser = await pw.chromium.launch(); try { async function alsRolle(rolle, code, breite = 1280, wohin = `chat.html?raum=${raumId}`) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 900 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 900 }, hasTouch: breite <= 860 }); const seite = await ctx.newPage(); await seite.goto(BASIS + "/workspace/", { waitUntil: "networkidle" }); await seite.click(`.rolle[data-rolle="${rolle}"]`); diff --git a/server/pruef-fingermass.mjs b/server/pruef-fingermass.mjs index 677117e6..4f7ee760 100644 --- a/server/pruef-fingermass.mjs +++ b/server/pruef-fingermass.mjs @@ -231,8 +231,15 @@ if (blind > GRUNDLINIE) { Sie bekommt eine eigene Grundlinie, damit sie weder stillschweigend durchgeht noch die echte Zahl verfaelscht. - NEUNUNDDREISSIG, GEMESSEN AM 01.10.2026 -- und die Zahl ist - ernst. Stichprobe: + NEUNUNDDREISSIG WAREN ES AM 01.10.2026 MITTAGS. Siebenunddreissig + davon haben noch am selben Tag ihren Finger bekommen und sind + einzeln nachgelaufen; uebrig bleiben ZWEI, beide in + pruef-grosscheck.mjs. Die Aenderung dort waere ein Zweizeiler -- + sie zu pruefen hiesse, 206 Seiten ueber vier Rollen laufen zu + lassen, und das braucht Filipes Zusage. Eine Aenderung, die ich + nicht pruefen darf, liefere ich nicht aus. + + SO SAH ES VORHER AUS, als Beleg dafuer, dass die Zahl ernst war: mess-chat-liste.mjs ["handy", 390, 860] ohne hasTouch pruef-material.mjs ein Handy-Fall ohne hasTouch @@ -241,20 +248,19 @@ if (blind > GRUNDLINIE) { MAUSZEIGER vermessen. Genau so hat pruef-breiten heute drei Befunde gemeldet, die es auf keinem Telefon gibt. - WARUM SIE HIER ALS GRUNDLINIE STEHT UND NICHT ALS 39 FEHLER: - Eine Warnung, die bei jedem Lauf neununddreissigmal kommt, wird - weggeklickt und nimmt die echte mit. Die Zahl ist festgehalten, - sie darf nur SINKEN, und jede neue faellt sofort auf. Abgearbeitet - wird sie Datei fuer Datei -- jede einzeln, und jede mit einem - Lauf danach, denn bei pruef-breiten sind durch den Finger drei - Befunde verschwunden und haetten genauso gut drei neue - auftauchen koennen. */ -const UNKLAR_GRUNDLINIE = 39; + WIE BEI DER ANDEREN GRUNDLINIE GILT: Die Zahl muss GENAU + stimmen. Waechst sie, ist eine neue Messung dazugekommen, die am + Telefon mit Mauszeiger misst. Sinkt sie, gehoert sie hier + gesenkt -- sonst deckt sie Platz fuer die naechste. Ich hatte sie + kurz auf „hoechstens" gestellt und damit genau dieses Loch + gebaut, eine Stunde nachdem ich die Begruendung oben gelesen + hatte. */ +const UNKLAR_GRUNDLINIE = 2; if (unklare.length) console.log(" ohne Zahl und ohne Finger: " + unklare.join(", ")); -ok(unklar <= UNKLAR_GRUNDLINIE, - unklar <= UNKLAR_GRUNDLINIE +ok(unklar === UNKLAR_GRUNDLINIE, + unklar === UNKLAR_GRUNDLINIE ? `${unklar} Fenster, deren Breite aus einer Variablen kommt und bei denen ` - + `kein hasTouch danebensteht — Grundlinie ${UNKLAR_GRUNDLINIE}` + + `kein hasTouch danebensteht — unveraendert zur Grundlinie ${UNKLAR_GRUNDLINIE}` : `${unklar} Fenster mit Variable und ohne hasTouch (Grundlinie ` + `${UNKLAR_GRUNDLINIE}). Dort laesst sich nicht sagen, ob am Telefon gemessen ` + "wird — und genau so ist am 01.10. pruef-breiten durchgerutscht. " diff --git a/server/pruef-formulare.mjs b/server/pruef-formulare.mjs index 959986bf..91983b65 100644 --- a/server/pruef-formulare.mjs +++ b/server/pruef-formulare.mjs @@ -93,7 +93,7 @@ const FORMULARE = [ for (const [breite, wie] of [[1280, "Computer"], [390, "Handy"]]) { console.log(`\n=== ${wie} (${breite}px)`); - const kontext = await browser.newContext({ viewport: { width: breite, height: 1000 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 1000 }, hasTouch: breite <= 860 }); const seite = await kontext.newPage(); await seite.goto(BASIS + "/workspace/", { waitUntil: "domcontentloaded" }); await seite.click('.rolle[data-rolle="admin"]'); diff --git a/server/pruef-freie-namen.mjs b/server/pruef-freie-namen.mjs index 95649a2a..87f575d0 100644 --- a/server/pruef-freie-namen.mjs +++ b/server/pruef-freie-namen.mjs @@ -86,7 +86,7 @@ const { chromium } = await import( const browser = await chromium.launch(); async function anmelden(rolle, code, breite = 1440) { - const kontext = await browser.newContext({ viewport: { width: breite, height: 1000 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 1000 }, hasTouch: breite <= 860 }); const seite = await kontext.newPage(); await seite.goto(BASIS + "/workspace/", { waitUntil: "domcontentloaded" }); await seite.click(`.rolle[data-rolle="${rolle}"]`); diff --git a/server/pruef-handy.mjs b/server/pruef-handy.mjs index 48951cfe..862b1e35 100644 --- a/server/pruef-handy.mjs +++ b/server/pruef-handy.mjs @@ -589,7 +589,7 @@ console.log("\n=== Ring und Uhr stehen mittig (alle Rollen)"); for (const [breite, hoehe] of KOPF_GERAETE) { for (const [rolle, code] of [["admin", "CODE-DOGI-0001"], ["spicy", "CODE-SPIC-0001"], ["manager", "CODE-MANA-0001"], ["scout", "CODE-SCOU-0001"], ["creator", "CODE-ANNA-0001"]]) { - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); const seite = await kontext.newPage(); await seite.goto(BASIS + "/workspace/", { waitUntil: "domcontentloaded" }); await seite.click(`.rolle[data-rolle="${rolle}"]`); diff --git a/server/pruef-kachelraster.mjs b/server/pruef-kachelraster.mjs index dca66f8f..a865c669 100644 --- a/server/pruef-kachelraster.mjs +++ b/server/pruef-kachelraster.mjs @@ -411,7 +411,7 @@ try { for (const breite of [320, 360, 390]) { const k2 = await browser.newContext({ - viewport: { width: breite, height: 900 }, reducedMotion: "reduce", + viewport: { width: breite, height: 900 }, hasTouch: breite <= 860, reducedMotion: "reduce", }); await k2.addCookies(keksBreite.split("; ").map((k) => { const [name, ...rest] = k.split("="); diff --git a/server/pruef-kalender.mjs b/server/pruef-kalender.mjs index 494bb0b7..6086a147 100644 --- a/server/pruef-kalender.mjs +++ b/server/pruef-kalender.mjs @@ -261,7 +261,7 @@ const lesen = (seite) => seite.evaluate(() => ({ for (const [breite, wie] of [[1440, "Computer"], [390, "Handy"]]) { console.log(`\n=== ${wie} (${breite}px)`); - const kontext = await browser.newContext({ viewport: { width: breite, height: 1100 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 1100 }, hasTouch: breite <= 860 }); const konsole = []; const seite = await anmelden(kontext, "admin", "CODE-DOGI-0001"); seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text()); }); diff --git a/server/pruef-kopf-messen.mjs b/server/pruef-kopf-messen.mjs index b10fe4e3..d56390ac 100644 --- a/server/pruef-kopf-messen.mjs +++ b/server/pruef-kopf-messen.mjs @@ -152,7 +152,7 @@ const SEITEN = ["uebersicht.html", "teilen.html", "bewerben.html", Die drei schmalen Breiten bleiben: Dort ist der Platz knapp, und dort ist die Leiste im September schon einmal zerbrochen. */ for (const breite of [320, 390, 430, 1366]) { - const kontext = await browser.newContext({ viewport: { width: breite, height: 844 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 844 }, hasTouch: breite <= 860 }); const seite = await kontext.newPage(); await seite.goto(BASIS + "/workspace/", { waitUntil: "domcontentloaded" }); await seite.click('.rolle[data-rolle="admin"]'); diff --git a/server/pruef-material.mjs b/server/pruef-material.mjs index dd46b1e0..bf2e0813 100644 --- a/server/pruef-material.mjs +++ b/server/pruef-material.mjs @@ -816,7 +816,7 @@ melde("=== 13. Am echten Bildschirm ==="); const meckern = []; async function seiteAls(rolle, code, breite) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 950 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 950 }, hasTouch: breite <= 860 }); const s2 = await ctx.newPage(); s2.on("pageerror", (e) => meckern.push(`${rolle}: Absturz ${String(e).slice(0, 120)}`)); s2.on("console", (m) => { diff --git a/server/pruef-neue-seiten.mjs b/server/pruef-neue-seiten.mjs index 1ca01f92..1f1f0a46 100644 --- a/server/pruef-neue-seiten.mjs +++ b/server/pruef-neue-seiten.mjs @@ -412,7 +412,7 @@ const UEBERBREIT = `(() => { Weg wie sonst (/api/anmelden), nur die Maske bleibt aussen vor. Was die Seite danach zeigt, entscheidet weiterhin der Server. */ async function ansehen(name, pfad, code, breite, hoehe, keks = null, merkmal = null) { - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); const seite = await kontext.newPage(); const konsole = []; seite.on("console", (m) => { diff --git a/server/pruef-personen-formular.mjs b/server/pruef-personen-formular.mjs index af0cfc27..b593c8e6 100644 --- a/server/pruef-personen-formular.mjs +++ b/server/pruef-personen-formular.mjs @@ -91,7 +91,7 @@ const { chromium } = await import( const browser = await chromium.launch(); async function anmelden(rolle, code, breite = 1440) { - const kontext = await browser.newContext({ viewport: { width: breite, height: 1000 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 1000 }, hasTouch: breite <= 860 }); const seite = await kontext.newPage(); await seite.goto(BASIS + "/workspace/", { waitUntil: "domcontentloaded" }); await seite.click(`.rolle[data-rolle="${rolle}"]`); diff --git a/server/pruef-personen-kachel.mjs b/server/pruef-personen-kachel.mjs index fac58aac..f4b03038 100644 --- a/server/pruef-personen-kachel.mjs +++ b/server/pruef-personen-kachel.mjs @@ -91,7 +91,7 @@ const browser = await chromium.launch(); const konsole = []; async function alsDogi(breite = 1440) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 1100 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 1100 }, hasTouch: breite <= 860 }); const s = await ctx.newPage(); s.on("pageerror", (f) => konsole.push("Absturz: " + f.message)); s.on("console", (m) => { if (m.type() === "error") konsole.push("Konsole: " + m.text()); }); diff --git a/server/pruef-protokoll-klappe.mjs b/server/pruef-protokoll-klappe.mjs index aaab6ad5..a3e45817 100644 --- a/server/pruef-protokoll-klappe.mjs +++ b/server/pruef-protokoll-klappe.mjs @@ -127,7 +127,7 @@ async function pruefe(seite, name, pfad, liste, knopf, text) { for (const [breite, wie] of [[1440, "Computer"], [390, "Handy"]]) { console.log(`\n=== ${wie}`); - const kontext = await browser.newContext({ viewport: { width: breite, height: 900 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 900 }, hasTouch: breite <= 860 }); const seite = await anmelden(kontext); const konsole = []; seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text()); }); diff --git a/server/pruef-start-ansicht.mjs b/server/pruef-start-ansicht.mjs index 134fbfb7..7c16d454 100644 --- a/server/pruef-start-ansicht.mjs +++ b/server/pruef-start-ansicht.mjs @@ -206,7 +206,7 @@ const lesen = (seite) => seite.evaluate(() => ({ for (const [breite, wie] of [[1440, "Computer"], [390, "Handy"]]) { console.log(`\n=== DogFather · ${wie}`); - const kontext = await browser.newContext({ viewport: { width: breite, height: 1200 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 1200 }, hasTouch: breite <= 860 }); const konsole = []; const seite = await anmelden(kontext, "admin", "CODE-DOGI-0001"); seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text()); }); diff --git a/server/pruef-tagesblick.mjs b/server/pruef-tagesblick.mjs index e167148a..ad0d5376 100644 --- a/server/pruef-tagesblick.mjs +++ b/server/pruef-tagesblick.mjs @@ -121,7 +121,7 @@ const pw = await import("file:///C:/Users/qciga/Documents/Obelix/Analyse/node_mo const browser = await pw.chromium.launch(); async function alsRolle(rolle, code, breite = 1280) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 1000 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 1000 }, hasTouch: breite <= 860 }); const seite = await ctx.newPage(); await seite.goto(BASIS + "/workspace/", { waitUntil: "networkidle" }); await seite.click(`.rolle[data-rolle="${rolle}"]`); diff --git a/server/pruef-textform.mjs b/server/pruef-textform.mjs index 0b0eee7c..5706e539 100644 --- a/server/pruef-textform.mjs +++ b/server/pruef-textform.mjs @@ -176,7 +176,7 @@ const browser = await pw.chromium.launch(); const seitenFehler = []; async function alsRolle(rolle, code, wohin, breite = 1280) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 900 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 900 }, hasTouch: breite <= 860 }); const seite = await ctx.newPage(); seite.on("pageerror", (e) => seitenFehler.push(`${wohin}: ${String(e).slice(0, 120)}`)); await seite.goto(BASIS + "/workspace/", { waitUntil: "networkidle" }); diff --git a/server/pruef-willkommen.mjs b/server/pruef-willkommen.mjs index 7ac993c3..1f7e4d37 100644 --- a/server/pruef-willkommen.mjs +++ b/server/pruef-willkommen.mjs @@ -377,7 +377,7 @@ melde("\n=== Am echten Bildschirm ==="); const seitenFehler = []; async function alsSeite(rolle, code, breite = 1280) { - const ctx = await browser.newContext({ viewport: { width: breite, height: 950 } }); + const ctx = await browser.newContext({ viewport: { width: breite, height: 950 }, hasTouch: breite <= 860 }); const s = await ctx.newPage(); s.on("pageerror", (e) => seitenFehler.push(`${rolle}: ${String(e).slice(0, 110)}`)); await s.goto(`${SEITE}/workspace/`, { waitUntil: "networkidle" }); diff --git a/server/pruef-workspace-seiten.mjs b/server/pruef-workspace-seiten.mjs index 158435a5..41d1f1e2 100644 --- a/server/pruef-workspace-seiten.mjs +++ b/server/pruef-workspace-seiten.mjs @@ -99,7 +99,7 @@ const SEITEN = ["start.html", "uebersicht.html", "aufgaben.html", "kalender.html let fehler = 0; for (const [breite, hoehe, wie] of [[1440, 1000, "Computer"], [390, 844, "Handy"]]) { console.log(`\n=== ${wie} (${breite}px)`); - const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: hoehe }, hasTouch: breite <= 860 }); const seite = await kontext.newPage(); const konsole = []; seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text()); }); diff --git a/server/pruef-zustand-ansicht.mjs b/server/pruef-zustand-ansicht.mjs index f076d000..1b6a928b 100644 --- a/server/pruef-zustand-ansicht.mjs +++ b/server/pruef-zustand-ansicht.mjs @@ -105,7 +105,7 @@ const require = createRequire(pathToFileURL(process.cwd() + "/")); for (const [breite, wie] of [[1440, "Computer"], [390, "Handy"]]) { console.log(`\n=== DogFather · ${wie}`); zuruecksetzen(); - const kontext = await browser.newContext({ viewport: { width: breite, height: 950 } }); + const kontext = await browser.newContext({ viewport: { width: breite, height: 950 }, hasTouch: breite <= 860 }); const konsole = []; const seite = await seiteFuer(kontext, "admin", "CODE-DOGI-0001"); seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text()); });