diff --git a/server/pruef-chat-aufloesen.mjs b/server/pruef-chat-aufloesen.mjs index 2dc70d6a..d809ac1d 100644 --- a/server/pruef-chat-aufloesen.mjs +++ b/server/pruef-chat-aufloesen.mjs @@ -679,6 +679,14 @@ console.log("=== Das Neu-Fenster ==="); { mit: [idEins], name: "Reagieren sichtbar" }, "POST")).json(); await rufe(hand.keks, `/workspace/api/chat/raeume/${rRaum.raum_id}/nachrichten`, { text: "Reagier mal drauf" }, "POST"); + /* UND EINE VON JEMAND ANDEREM. Ohne sie gibt es in diesem Raum nur + eigene Nachrichten -- und genau daran ist die Prüfung am 15.09. + vorbeigelaufen: Bei einer eigenen Nachricht hat das Raster nur eine + Spalte, die Tafel bekam die volle Breite, alles war grün. Kaputt + war es bei jeder FREMDEN, wo der Kreis mit den Initialen eine + 30-px-Spalte aufmacht. */ + await rufe(eins.keks, `/workspace/api/chat/raeume/${rRaum.raum_id}/nachrichten`, + { text: "Und hier steht was von Ayla" }, "POST"); await seite.goto(BASIS + `/workspace/chat.html?raum=${rRaum.raum_id}`, { waitUntil: "networkidle" }); await seite.waitForTimeout(1500); @@ -711,6 +719,90 @@ console.log("=== Das Neu-Fenster ==="); `darunter der Katalog: ${teile.gruppen} Gruppen, ${teile.katalog} Zeichen`); ok(teile.suche && teile.stern, "Suchfeld und Favoriten-Schalter sind da"); + /* ===== UND SIE MUSS AUCH AUSSEHEN WIE EINE TAFEL (15.09.2026) ====== + + Filipe, mit einem Bildschirmfoto: „was ist das den für eine + scheisse verbesser das sofort." Darauf: ein dreissig Pixel + schmaler Streifen, sechs Zeichen untereinander, ein Rollbalken + daneben. + + ALLE PRÜFUNGEN OBEN WAREN DABEI GRÜN. Sie fragen, ob es die + Elemente gibt und ob die Suche sucht -- beides stimmte. Wie breit + die Tafel ist, hat nie jemand gemessen. Genau die Sorte Prüfung, + die bestätigt und nichts beweist. + + Gemessen wird deshalb die GEOMETRIE: Ist sie so breit, wie eine + Karte sein muss? Und stehen die sechs Vorschläge NEBENeinander -- + also auf derselben Höhe? */ + const masse = await seite.evaluate(() => { + const t = document.querySelector(".reagieren-tafel"); + if (!t) return null; + const k = t.getBoundingClientRect(); + const z = [...document.querySelectorAll( + ".reagieren-tafel__schnell .reagieren-tafel__zeichen")].map((x) => Math.round( + x.getBoundingClientRect().top)); + const n = t.closest(".chat-nachricht"); + return { breite: Math.round(k.width), hoehe: Math.round(k.height), + reihen: new Set(z).size, zeichen: z.length, + selbst: n?.dataset.selbst || "nein", + spalten: n ? getComputedStyle(n).gridTemplateColumns : "", + zelle: getComputedStyle(t).gridColumnStart }; + }); + ok(!!masse, "die Tafel liegt im Bild"); + ok(masse.selbst === "ja", "hier haengt sie an einer EIGENEN Nachricht"); + ok(masse.breite >= 280, + `sie ist eine Karte, kein Streifen (${masse.breite} px breit)`); + /* Sechs Zeichen auf EINER Zeile. Zwei Zeilen wären kein Fehler -- + dreissig Pixel Breite sind einer, und dort stünden sechs. */ + ok(masse.reihen === 1, + `die ${masse.zeichen} Vorschläge stehen nebeneinander (${masse.reihen} Zeile)`); + ok(masse.hoehe < masse.breite * 1.6, + `und sie ist breiter als hoch (${masse.breite} x ${masse.hoehe} px)`); + + /* ===== UND JETZT DER FALL, DER WIRKLICH KAPUTT WAR ================== + + Alles oben wurde an einer EIGENEN Nachricht gemessen. Dort hat das + Raster nur eine Spalte, und die Tafel bekam die volle Breite -- + deshalb war diese Prüfung gruen, waehrend es bei jeder FREMDEN + Nachricht dreissig Pixel waren. + + Eine Prüfung, die nur den Fall misst, in dem es ohnehin + funktioniert, ist keine Prüfung. */ + await seite.evaluate(() => document.querySelector(".reagieren-tafel")?.remove()); + const fremdeDa = await seite.evaluate(() => { + const n = [...document.querySelectorAll('.chat-nachricht:not([data-selbst="ja"])')] + .find((x) => x.querySelector(".chat-nachricht__reag-knopf")); + if (!n) return false; + n.querySelector(".chat-nachricht__reag-knopf").click(); + return true; + }); + /* KEIN ÜBERSPRINGEN: Findet sich keine fremde Nachricht, ist die + Prüfung nicht durchführbar -- und das ist ein Fehler, kein + stilles Weiterlaufen. */ + ok(fremdeDa, "es gibt eine Nachricht von jemand anderem zum Messen"); + await seite.waitForTimeout(500); + const fremdeTafel = await seite.evaluate(() => { + const t = document.querySelector(".reagieren-tafel"); + if (!t) return null; + const k = t.getBoundingClientRect(); + const z = [...document.querySelectorAll( + ".reagieren-tafel__schnell .reagieren-tafel__zeichen")].map((x) => Math.round( + x.getBoundingClientRect().top)); + const n = t.closest(".chat-nachricht"); + const kreis = n?.querySelector(".chat-nachricht__zeichen")?.getBoundingClientRect(); + return { breite: Math.round(k.width), reihen: new Set(z).size, + selbst: n?.dataset.selbst || "nein", + /* Steht sie NEBEN dem Kreis oder darunter in seiner Spalte? */ + nebenDemKreis: kreis ? Math.round(k.left - kreis.left) : null }; + }); + ok(fremdeTafel?.selbst === "nein", "die Tafel haengt jetzt an einer fremden Nachricht"); + ok(fremdeTafel.breite >= 280, + `auch dort ist sie eine Karte (${fremdeTafel.breite} px statt der 30 von vorher)`); + ok(fremdeTafel.reihen === 1, + `und die Vorschlaege stehen nebeneinander (${fremdeTafel.reihen} Zeile)`); + ok(fremdeTafel.nebenDemKreis >= 30, + `sie steht in der Spalte der Blase, nicht in der des Kreises (+${fremdeTafel.nebenDemKreis} px)`); + if (process.env.SCHIRM) { await seite.locator(".chat-nachricht").last().screenshot( { path: join(HIER_BILD, "pruef-chat-tafel.png") }); diff --git a/workspace/app.webmanifest b/workspace/app.webmanifest index 93581974..22b3c758 100644 --- a/workspace/app.webmanifest +++ b/workspace/app.webmanifest @@ -13,25 +13,25 @@ "theme_color": "#06090f", "icons": [ { - "src": "/assets/img/app-symbole/workspace-192.png?v=202609151721", + "src": "/assets/img/app-symbole/workspace-192.png?v=202609151730", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-512.png?v=202609151721", + "src": "/assets/img/app-symbole/workspace-512.png?v=202609151730", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609151721", + "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609151730", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609151721", + "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609151730", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/assets/css/chat.css b/workspace/assets/css/chat.css index f4b5a9c4..9caca9af 100644 --- a/workspace/assets/css/chat.css +++ b/workspace/assets/css/chat.css @@ -1029,6 +1029,24 @@ bunten Punkte sind. */ .reagieren-tafel { position: relative; z-index: 5; + /* SIE MUSS SAGEN, IN WELCHE SPALTE SIE GEHOERT (15.09.2026). + + Filipe, mit einem Bildschirmfoto: "was ist das den fuer eine + scheisse verbesser das sofort." Darauf ein dreissig Pixel schmaler + Streifen mit sechs Zeichen untereinander. + + .chat-nachricht ist ein RASTER aus zwei Spalten: dreissig Pixel + fuer den Kreis mit den Initialen, der Rest fuer die Blase. Ein + Kind ohne Spaltenangabe wird automatisch in die naechste freie + Zelle gesetzt -- und das ist die Spalte des Kreises. Die Tafel + bekam damit dreissig Pixel, `width: min(330px, 100%)` machte + brav 30 daraus, und die Zeichen stapelten sich. + + BEI EIGENEN NACHRICHTEN FIEL ES NIE AUF: Dort hat das Raster nur + EINE Spalte (der Kreis entfaellt), die Tafel bekam die volle + Breite. Und genau diesen Fall hat die Pruefung gemessen -- sie war + gruen, waehrend es bei jeder fremden Nachricht kaputt war. */ + grid-column: 2; justify-self: start; margin: 8px 0 2px; width: min(330px, 100%); border: 1px solid var(--rand-hell, var(--rand)); @@ -1048,6 +1066,11 @@ @media (prefers-reduced-motion: reduce) { .reagieren-tafel { animation: none; } } +/* Die eigene Nachricht hat nur eine Spalte -- dort waere `2` eine + Spalte, die es nicht gibt, und das Raster legte still eine an. */ +.chat-nachricht[data-selbst="ja"] .reagieren-tafel { + grid-column: 1; justify-self: end; +} /* Kopf: die Vorschlaege nehmen den Platz, der Stern bleibt rechts. */ .reagieren-tafel__kopf { diff --git a/workspace/aufgaben.html b/workspace/aufgaben.html index 5e7ba09d..7795b6e0 100644 --- a/workspace/aufgaben.html +++ b/workspace/aufgaben.html @@ -12,19 +12,19 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - + + + + + + - + @@ -282,10 +282,10 @@ - - - - - + + + + + diff --git a/workspace/automation.html b/workspace/automation.html index 81040fe1..3c0ae591 100644 --- a/workspace/automation.html +++ b/workspace/automation.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -168,10 +168,10 @@ - - - - - + + + + + diff --git a/workspace/befinden.html b/workspace/befinden.html index 42977888..e96d05ee 100644 --- a/workspace/befinden.html +++ b/workspace/befinden.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -84,9 +84,9 @@ - - - - + + + + diff --git a/workspace/bereich.html b/workspace/bereich.html index 504b6d87..2141e5da 100644 --- a/workspace/bereich.html +++ b/workspace/bereich.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -181,14 +181,14 @@ - - - - - - - - - + + + + + + + + + diff --git a/workspace/calls.html b/workspace/calls.html index 3d6f83c9..da63eb3e 100644 --- a/workspace/calls.html +++ b/workspace/calls.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -89,11 +89,11 @@ - - - - - - + + + + + + diff --git a/workspace/chat.html b/workspace/chat.html index 44794f88..d0e87d25 100644 --- a/workspace/chat.html +++ b/workspace/chat.html @@ -12,26 +12,26 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - + + + + - - - + + + - + @@ -341,10 +341,10 @@ - - - - - + + + + + diff --git a/workspace/content.html b/workspace/content.html index 7198de32..4cd98b9e 100644 --- a/workspace/content.html +++ b/workspace/content.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -179,12 +179,12 @@ - - - - - - - + + + + + + + diff --git a/workspace/crew-index.html b/workspace/crew-index.html index a14861f8..6bbf179f 100644 --- a/workspace/crew-index.html +++ b/workspace/crew-index.html @@ -36,15 +36,15 @@ - - - + + + - + @@ -339,6 +339,6 @@ - + diff --git a/workspace/crew.webmanifest b/workspace/crew.webmanifest index 1fd07492..ff1c145e 100644 --- a/workspace/crew.webmanifest +++ b/workspace/crew.webmanifest @@ -13,25 +13,25 @@ "theme_color": "#06090f", "icons": [ { - "src": "/assets/img/app-symbole/crew-192.png?v=202609151721", + "src": "/assets/img/app-symbole/crew-192.png?v=202609151730", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/crew-512.png?v=202609151721", + "src": "/assets/img/app-symbole/crew-512.png?v=202609151730", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609151721", + "src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609151730", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609151721", + "src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609151730", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/dateien.html b/workspace/dateien.html index b6b199be..eee8d02d 100644 --- a/workspace/dateien.html +++ b/workspace/dateien.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -108,10 +108,10 @@ - - - - - + + + + + diff --git a/workspace/entwicklung.html b/workspace/entwicklung.html index ad373eb4..e00ddeb2 100644 --- a/workspace/entwicklung.html +++ b/workspace/entwicklung.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -102,9 +102,9 @@ - - - - + + + + diff --git a/workspace/index.html b/workspace/index.html index 9b08bf18..3dec07ba 100644 --- a/workspace/index.html +++ b/workspace/index.html @@ -30,9 +30,9 @@ - - - + + + @@ -401,6 +401,6 @@ - + diff --git a/workspace/kalender.html b/workspace/kalender.html index 0587aaf7..576e8678 100644 --- a/workspace/kalender.html +++ b/workspace/kalender.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -377,11 +377,11 @@ - - - - - - + + + + + + diff --git a/workspace/leistung.html b/workspace/leistung.html index 49ec972f..ab37c23e 100644 --- a/workspace/leistung.html +++ b/workspace/leistung.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -423,10 +423,10 @@ - - - - - + + + + + diff --git a/workspace/personen.html b/workspace/personen.html index d1a155d8..cb6fcfe3 100644 --- a/workspace/personen.html +++ b/workspace/personen.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -423,10 +423,10 @@ - - - - - + + + + + diff --git a/workspace/profil.html b/workspace/profil.html index 34fd8eb2..fcd19707 100644 --- a/workspace/profil.html +++ b/workspace/profil.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -214,11 +214,11 @@ - - - - - - + + + + + + diff --git a/workspace/rechte.html b/workspace/rechte.html index 58b53d74..033109ca 100644 --- a/workspace/rechte.html +++ b/workspace/rechte.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -134,9 +134,9 @@ Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, die seit dem 07.09. jede Seite danach absucht. --> - - - - + + + + diff --git a/workspace/report.html b/workspace/report.html index e3ea7650..09de32ca 100644 --- a/workspace/report.html +++ b/workspace/report.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -106,11 +106,11 @@ - - - - - - + + + + + + diff --git a/workspace/scouting.html b/workspace/scouting.html index 279dd18f..00f2927b 100644 --- a/workspace/scouting.html +++ b/workspace/scouting.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -173,10 +173,10 @@ - - - - - + + + + + diff --git a/workspace/start.html b/workspace/start.html index 778bac00..79c1c19e 100644 --- a/workspace/start.html +++ b/workspace/start.html @@ -12,21 +12,21 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - + + + + - - + + - + @@ -674,10 +674,10 @@

- - - - - + + + + + diff --git a/workspace/startcheck.html b/workspace/startcheck.html index 61b14e69..a6b5fd65 100644 --- a/workspace/startcheck.html +++ b/workspace/startcheck.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -85,11 +85,11 @@ - - - - - - + + + + + + diff --git a/workspace/steckbrief.html b/workspace/steckbrief.html index b8e067bb..3b499725 100644 --- a/workspace/steckbrief.html +++ b/workspace/steckbrief.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -146,11 +146,11 @@ - - - - - - + + + + + + diff --git a/workspace/talente.html b/workspace/talente.html index 5dea6f94..0eddb571 100644 --- a/workspace/talente.html +++ b/workspace/talente.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -94,9 +94,9 @@ - - - - + + + + diff --git a/workspace/team.html b/workspace/team.html index 269af9f5..c62a383c 100644 --- a/workspace/team.html +++ b/workspace/team.html @@ -7,20 +7,20 @@ - - - - - - - + + + + + + + - + @@ -110,10 +110,10 @@ - - - - - + + + + + diff --git a/workspace/teamlage.html b/workspace/teamlage.html index 52ae32dd..11e88872 100644 --- a/workspace/teamlage.html +++ b/workspace/teamlage.html @@ -7,20 +7,20 @@ - - - - - - - + + + + + + + - + - - - - + + + + diff --git a/workspace/treff-moderation.html b/workspace/treff-moderation.html index 402df76b..f205ed43 100644 --- a/workspace/treff-moderation.html +++ b/workspace/treff-moderation.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -110,9 +110,9 @@ - - - - + + + + diff --git a/workspace/treff-regeln.html b/workspace/treff-regeln.html index e2aa481d..10547d86 100644 --- a/workspace/treff-regeln.html +++ b/workspace/treff-regeln.html @@ -7,18 +7,18 @@ - - - - - - - + + + + + + + - + @@ -210,10 +210,10 @@ Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, die seit dem 07.09. jede Seite danach absucht. --> - - - - - + + + + + diff --git a/workspace/uebersicht.html b/workspace/uebersicht.html index 43543401..12b158ab 100644 --- a/workspace/uebersicht.html +++ b/workspace/uebersicht.html @@ -12,22 +12,22 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - + + + + - - - + + + - + @@ -149,11 +149,11 @@ - + - - - - + + + + diff --git a/workspace/wissen.html b/workspace/wissen.html index e875a595..31a7d905 100644 --- a/workspace/wissen.html +++ b/workspace/wissen.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -190,10 +190,10 @@ - - - - - + + + + +