diff --git a/server/pruef-chat-optik.mjs b/server/pruef-chat-optik.mjs index 717be9e7..9f4f2e40 100644 --- a/server/pruef-chat-optik.mjs +++ b/server/pruef-chat-optik.mjs @@ -755,6 +755,15 @@ melde("\n=== Die Schreibzeile auf dem Handy ==="); drueber, quer: document.documentElement.scrollWidth - window.innerWidth, werkzeugZahl: werk ? werk.querySelectorAll("button").length : 0, + /* WIE VIELE WERKZEUGE GIBT ES UEBERHAUPT -- unabhaengig davon, + wo sie stehen. Die Zahl daneben sagt, wie viele IN der + Gruppe sitzen; erst der Vergleich beider sagt, ob eines + danebenliegt. Eine feste Zahl kann das nicht: Sie wird + falsch, sobald ein Werkzeug dazukommt -- und genau das ist + am 25.09.2026 passiert (der Schriftknopf „Aa"). */ + werkzeugAlle: document.querySelectorAll( + "#schreiben :is(.chat__anhang, .chat__ton, .chat__gif," + + " .chat__emoji, .chat__schriftknopf)").length, }; }); @@ -809,8 +818,112 @@ melde("\n=== Die Schreibzeile auf dem Handy ==="); in einer ANDEREN Zeile stehen als das Feld -- sonst hiesse "Senden steht daneben" nur, dass alles in einer Zeile liegt und die Messung gar nicht unterscheiden kann. */ - ok(zeile.werkzeugZahl === 4, - `die vier Werkzeuge stehen in einer Gruppe (${zeile.werkzeugZahl})`); + /* HIER STAND EINE 4 (nachgebessert 25.09.2026). + + Sie war vom ersten Tag an eine Rechnung von gestern: Kommt ein + Werkzeug dazu, wird die Zeile rot, obwohl nichts kaputt ist -- + und wer sie dann einfach auf 5 hochsetzt, macht denselben Fehler + mit einer anderen Zahl. Dieses Haus ist an festen Zahlen schon + dreimal hereingefallen (Kopfleiste 06.09., Schriftgroessen + 14.09., Tippziele 20.09.). + + GEFRAGT WIRD JETZT, WAS GEMEINT IST: Liegt KEINES der Werkzeuge + ausserhalb der Gruppe? Das ist die Sache -- sie sollen als Block + umbrechen, damit nicht eines allein auf einer Zeile landet. Die + Regel misst damit, statt zu rechnen, und der naechste Knopf + bringt sie nicht zu Fall. + + DIE ANZAHL STEHT TROTZDEM IN DER BEDINGUNG: Waere die Gruppe + leer, weil jemand die Klasse umbenennt, waeren „0 von 0" sonst + gruen -- ein Haken ohne Gegenstand. */ + ok(zeile.werkzeugAlle >= 4 && zeile.werkzeugZahl === zeile.werkzeugAlle, + `alle ${zeile.werkzeugAlle} Werkzeuge stehen in EINER Gruppe ` + + `(${zeile.werkzeugZahl} davon drin)`); + + /* ==== DIE SCHRIFTLEISTE KLAPPT AUF UND ZU (25.09.2026) ========= + + Filipe: „die sachen von screen3 verbinde die mit dem auf + screen4. so dass wenn man drauf drückt man die anderen zu sehen + bekommt. damit es nicht zu viel platz nimmt." + + GEMESSEN WIRD DER PLATZ, nicht nur der Zustand: Die Konsole muss + zugeklappt SPUERBAR niedriger sein. Ein Knopf, der ein Merkmal + umstellt, ohne dass Platz frei wird, haette den Auftrag nicht + erfuellt -- und ein `aria-expanded`, das sich aendert, waere + trotzdem gruen. + + UND DIE TASTENKUERZEL: Sie haengen am Schreibfeld, nicht an der + Leiste. Waere das anders, haette das Zuklappen Strg+B + mitgenommen -- eine Funktion, die verschwindet, weil man Platz + sparen wollte. */ + const vorher = await handy.seite.evaluate(() => ({ + hoehe: Math.round(document.getElementById("schreiben").getBoundingClientRect().height), + leiste: !!document.querySelector(".textform")?.getBoundingClientRect().height, + auf: document.getElementById("schrift-auf")?.getAttribute("aria-expanded"), + })); + ok(vorher.auf === "false" && vorher.leiste === false, + `die Schriftleiste ist von sich aus zu (aria-expanded=${vorher.auf})`); + + await handy.seite.click("#schrift-auf"); + await handy.seite.waitForTimeout(350); + const offen = await handy.seite.evaluate(() => ({ + hoehe: Math.round(document.getElementById("schreiben").getBoundingClientRect().height), + knoepfe: [...document.querySelectorAll(".textform__knopf")] + .filter((e) => e.getBoundingClientRect().height > 1).length, + auf: document.getElementById("schrift-auf")?.getAttribute("aria-expanded"), + })); + ok(offen.auf === "true" && offen.knoepfe === 4, + `ein Druck macht sie auf -- vier Zeichen (${offen.knoepfe})`); + ok(offen.hoehe > vorher.hoehe + 20, + `und zugeklappt spart das wirklich Platz ` + + `(${vorher.hoehe} px zu ${offen.hoehe} px, ${offen.hoehe - vorher.hoehe} px)`); + + /* DIE WAHL UEBERLEBT DAS NEULADEN -- wer viel gestaltet, gestaltet + weiter. Ohne diese Zeile waere „sie klappt auf" ein Zustand, den + man bei jeder Nachricht neu herstellen muesste. */ + await handy.seite.reload({ waitUntil: "networkidle" }); + await handy.seite.waitForSelector("#schreiben:not([hidden])", { timeout: 8000 }); + await handy.seite.waitForTimeout(700); + const danach = await handy.seite.evaluate(() => ({ + auf: document.getElementById("schrift-auf")?.getAttribute("aria-expanded"), + knoepfe: [...document.querySelectorAll(".textform__knopf")] + .filter((e) => e.getBoundingClientRect().height > 1).length, + })); + ok(danach.auf === "true" && danach.knoepfe === 4, + `und bleibt nach dem Neuladen offen (${danach.auf}, ${danach.knoepfe} Zeichen)`); + + /* GEGENPROBE: ZUGEKLAPPT IST NICHT ABGEBAUT. + + Der erste Anlauf wollte hier Strg+B tippen und pruefen, ob "**" + im Feld landet. Das lief in eine Zeitbombe: Der Treff hat eine + NACHTRUHE, und zwischen 22 und 6 Uhr ist das Schreibfeld + `disabled`. Die Pruefung waere sechs Stunden am Tag rot gewesen, + ohne dass an der Sache etwas ist -- genau die Sorte Fehlalarm, + die dieses Haus am 06.09.2026 schon einmal notiert hat („ein + Test, der die Wanduhr als Annahme benutzt"). + + GEMESSEN WIRD STATTDESSEN DIE SACHE SELBST: Die vier Knoepfe + sind weiterhin IM DOKUMENT, sie haben nur keine Flaeche mehr. + Das ist der Unterschied zwischen „versteckt" und „abgebaut" -- + und daran haengt, dass die Tastenkuerzel weiterlaufen: Sie + haengen am Schreibfeld (textform.js), und die Leiste wird nicht + neu gebaut, wenn man sie wieder aufmacht. Waere sie beim + Zuklappen entfernt worden, waere der naechste Aufbau ein zweiter + Satz Zuhoerer -- und Strg+B haette doppelt zugeschlagen. */ + await handy.seite.click("#schrift-auf"); + await handy.seite.waitForTimeout(300); + const zu = await handy.seite.evaluate(() => ({ + imDokument: document.querySelectorAll(".textform__knopf").length, + sichtbar: [...document.querySelectorAll(".textform__knopf")] + .filter((e) => e.getBoundingClientRect().height > 1).length, + hoehe: Math.round(document.getElementById("schreiben").getBoundingClientRect().height), + merker: document.getElementById("text")?.dataset.textform, + })); + ok(zu.imDokument === 4 && zu.sichtbar === 0, + `Gegenprobe: zugeklappt sind sie versteckt, nicht abgebaut ` + + `(${zu.imDokument} im Dokument, ${zu.sichtbar} sichtbar)`); + ok(zu.merker === "ja" && zu.hoehe === vorher.hoehe, + `und die Konsole ist wieder so hoch wie am Anfang (${zu.hoehe} px)`); /* `!!zeile.werkzeuge` GEHOERT IN DIE BEDINGUNG, und das ist kein Zierrat: In der Gegenprobe gab es die Gruppe nicht, `y` war `undefined`, und `(undefined || 0) < 834` ist wahr -- die Zeile diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 9e64136a..e656858e 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,15 +16,15 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +