Kampagnen-Kacheln: gegliederte Texte, Geschenke mit Preis, aufklappbar
Filipe, mit einem Bildschirmfoto des Regelblocks: "man soll die titel
in den texten besser erkennen und sehen was zu was passt. ich will
auch dass man sieht welche geschenke bei dem event zaehlen und so.
ich will alle informationen die moeglich sind wenn man den link
hochlaedt. ... auch wenn man teilt soll es einfach perfekt sein. man
soll alle infos sehen die man braucht. die kacheln von den events
soll auch nicht so lang sein, die soll man aufklappen koennen. genau
wie eine trennung fuer heute, letzte woche letzten monat und so."
DER FEHLER LAG NICHT IM TEXT, SONDERN IN SEINER ANZEIGE. Im Feld
stand die ganze Zeit eine Gliederung -- Hinweise mit "* ", eine
Ueberschrift mit Untertitel hinter einem Gedankenstrich, Absaetze
ohne Zeichen, Aufzaehlungen mit "- ". Die Kachel hat daraus mit
punkteAusText() EINE flache Liste gemacht: jede Zeile derselbe
Strich, alle gleich gross.
gliederung() liest die Gliederung, die schon dasteht, statt
den Text umzuschreiben. Die beiden Kampagnen, die
heute in der Datenbank liegen, sehen dadurch
sofort richtig aus -- ohne Umstellung.
Geschenke kommen aus der gelesenen LISTE, nicht aus dem
Text, und stehen OHNE Aufklappen auf der Kachel.
Aufklappen alles Uebrige hinter einem Druck: gemessen 555 px
weniger je Kachel bei Gipfelstuermer.
Gruppen je Spalte laeuft / kommt / vorbei, Vergangenes
nach diese Woche, dieser Monat, aelter.
NEU GELESEN (stand in allen vier gespeicherten Seiten und wurde nie
angesehen): die Rangliste mit ihren Gruppen ("Superstars" bis
"5. Liga", bei Glow Up "Team Glow"/"Team Shine"), die Beschreibung je
Missionsgruppe, der Steckbrief (Kurznummer, Markt, Sprache, Zone),
der zweite Bildbaustein, und Ueberschriften INNERHALB der Klapptexte
-- "WELCHE LIGA BIN ICH?" hat jetzt sechs eingerueckte Unterpunkte
statt zwoelf gleichrangiger Zeilen.
EVENT_TEXT_MAX 6000 -> 20000. Der Regeltext von Gipfelstuermer ist
7679 Zeichen lang; es fielen bisher jedes Mal rund 1600 Zeichen
echter Inhalt weg. Die Zahl steht jetzt an EINER Stelle.
TEILEN: Was die KAMPAGNE sagt, geht hinaus (Aufgaben, Geschenke,
Regeln) -- wer WIR sind, nicht (Name, Rolle, Haus, Kampagnennummer,
Steckbrief). Und keine Hinweiszeile: "Die Preise konnten nicht
gelesen werden -- bitte nachtragen" ist eine Notiz an DogFather und
hat auf einer Seite, die er in Discord postet, nichts zu suchen.
BERICHTIGT, WEIL NACHGEMESSEN:
- Number(null) ist 0 und 0 ist endlich -- "Feuerwerk" bekam an drei
Stellen "0 Coins" angeschrieben, also eine falsche Preisangabe.
- Ein Kommentar im Leser behauptete, der Wertungszeitraum weiche
vom Kampagnenzeitraum ab. Nachgemessen ist er in allen drei
Seiten mit Rangliste auf die Millisekunde gleich; ich hatte zwei
verschiedene Kampagnen verglichen.
- bild-kampagne.mjs verlangte "jede Kachel traegt den Ton ihrer
Seite" und war damit seit dem 07.10. rot, weil an dem Tag bewusst
das Gegenteil entschieden wurde (Zustandston, Seitenkante). Nicht
aufgefallen, weil nach dem Lauf nur die Zahl der MESSUNGEN notiert
wurde, nicht die der FEHLER.
- .kv-seite > .eintrag-karte wird .kv-seite .eintrag-karte: Die
Karten haengen durch die Gruppen eine Ebene tiefer. Das waere der
fuenfte Direktkind-Selektor gewesen, der nach einem Umbau still
ausfaellt -- diesmal vorher gesehen.
GEPRUEFT: 186 (lesen, +58), 148 (Route/Teilen, +25), 158 (Kachel,
+64), 67 (Agentur, +5), 67 Messungen (Bild, +14), dazu struktur,
css-klassen, zeichen, deutsche-texte, tippziele, lesbarkeit und
haus-trennung (107, unveraendert). Sechs Gegenproben: alle sechs
Sabotagen werden bemerkt, alle Dateien byte-gleich wiederhergestellt.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -726,7 +726,33 @@ melde("\n=== Die Kachel ===");
|
||||
marke: k.querySelector(".ev-noch")?.textContent.trim(),
|
||||
spanne: k.querySelector(".ev-spanne")?.textContent.trim(),
|
||||
schilder: [...k.querySelectorAll(".ev-block__schild")].map((s) => s.textContent.trim()),
|
||||
/* `.ev-punkt__text` SIND DIE AUFGABEN, `.ev-zeile__text` DIE
|
||||
REGELN (07.10.2026). Bis dahin war beides dieselbe flache
|
||||
Liste; seit der Gliederung sind es zwei Sorten Zeile, und
|
||||
die Regeln haben kein Kästchen mehr davor. Gelesen werden
|
||||
beide -- und getrennt, damit die Prüfung unten sagen kann,
|
||||
WELCHE Sorte fehlt, statt nur „einer von zweien fehlt". */
|
||||
texte: [...k.querySelectorAll(".ev-punkt__text")].map((s) => s.textContent.trim()),
|
||||
/* ZEILEN **UND** ABSAETZE. Eine Regelzeile MIT
|
||||
Aufzaehlungszeichen wird ein `.ev-zeile`, eine OHNE ein
|
||||
`.ev-absatz` -- und das ist richtig so: Sonst wuerden die
|
||||
Prosa-Absaetze einer Kampagnenseite („LIVE Glow Up ist
|
||||
eine exklusive 4-woechige Challenge ...") alle zu
|
||||
Aufzaehlungspunkten, also wieder zu der flachen Liste, die
|
||||
am 07.10.2026 abgeschafft wurde.
|
||||
|
||||
Dieses Testevent wird ueber die Schnittstelle angelegt,
|
||||
ohne Zeichen davor. Der Zeileneditor im Formular setzt sie
|
||||
sonst selbst (geprueft in pruef-eventkarte.mjs:
|
||||
„gleichmaessig gesetzte Zeichen"), im echten Betrieb ist
|
||||
also meist die erste Form zu sehen. Gemessen werden beide,
|
||||
getrennt -- so sagt die Prüfung, WELCHE Form herauskam. */
|
||||
regelzeilen: [...k.querySelectorAll(".ev-zeile__text")].map((s) => s.textContent.trim()),
|
||||
regelabsaetze: [...k.querySelectorAll(".ev-absatz")].map((s) => s.textContent.trim()),
|
||||
/* Und ob die Regeln hinter dem Aufklappen liegen -- das ist
|
||||
der Grund, warum die Kachel kürzer geworden ist. */
|
||||
klappZu: k.querySelector(".ev-mehr__inhalt")?.hidden ?? null,
|
||||
klappWort: k.querySelector(".ev-mehr__wort")?.textContent.trim() || null,
|
||||
};
|
||||
});
|
||||
ok(!!event, "die Event-Karte Sommer-Aktion steht auf der Seite");
|
||||
@@ -736,10 +762,48 @@ melde("\n=== Die Kachel ===");
|
||||
ok(/^(noch \d+ Tage?|heute ist der letzte Tag)$/.test(event?.marke || ""),
|
||||
`der Zustand steht als WORT da, nicht nur als Farbe ("${event?.marke}")`);
|
||||
ok(/–/.test(event?.spanne || ""), `und der Zeitraum als Spanne ("${event?.spanne}")`);
|
||||
ok(event?.schilder.join(",") === "Aufgaben,Regeln",
|
||||
/* „Regeln & Infos" SEIT DEM 07.10.2026. Der Block trägt nicht
|
||||
mehr nur die Regeln, sondern die ganze Gliederung der
|
||||
Kampagnenseite -- Zeitplan, Rangliste, Teilnahme. „Regeln"
|
||||
allein wäre dafür zu wenig gesagt. */
|
||||
ok(event?.schilder.join(",") === "Aufgaben,Regeln & Infos",
|
||||
`beide Bloecke sind beschriftet (${event?.schilder.join(", ")})`);
|
||||
ok(event?.texte.includes("1 Punkt je Live-Stunde") && event?.texte.includes("Nur eigenes Konto"),
|
||||
`und tragen wirklich ihren Inhalt (${JSON.stringify(event?.texte)})`);
|
||||
ok(event?.texte.includes("1 Punkt je Live-Stunde"),
|
||||
`die Aufgabe steht als abhakbarer Punkt da (${JSON.stringify(event?.texte)})`);
|
||||
/* OHNE AUFZAEHLUNGSZEICHEN GETIPPT -> ABSATZ. Begruendung oben
|
||||
bei der Messung. Geprueft wird, dass die Regel ANKOMMT, und
|
||||
daneben, in welcher Form -- ein „irgendwo steht es" waere
|
||||
auch dann gruen, wenn die Gliederung alles in einen Topf
|
||||
wirft. */
|
||||
ok(event?.regelabsaetze.includes("Nur eigenes Konto")
|
||||
|| event?.regelzeilen.includes("Nur eigenes Konto"),
|
||||
`die Regel kommt in der Gliederung an (Zeilen `
|
||||
+ `${JSON.stringify(event?.regelzeilen)}, Absaetze `
|
||||
+ `${JSON.stringify(event?.regelabsaetze)})`);
|
||||
ok(event?.regelabsaetze.includes("Nur eigenes Konto"),
|
||||
" und zwar als Absatz, weil kein Aufzaehlungszeichen davorstand");
|
||||
/* GEGENPROBE: Sie steht NICHT zwischen den Aufgaben. Ohne sie
|
||||
waere unbelegt, dass Aufgaben und Regeln getrennt bleiben --
|
||||
und genau das war der Mangel im Bildschirmfoto vom
|
||||
07.10.2026. */
|
||||
ok(!event?.texte.includes("Nur eigenes Konto"),
|
||||
"und nicht zwischen den abhakbaren Aufgaben");
|
||||
|
||||
/* ---- UND DIE REGELN LIEGEN HINTER EINEM DRUCK (07.10.2026) --
|
||||
|
||||
Filipe: „die kacheln von den events soll auch nicht so lang
|
||||
sein, die soll man aufklappen koennen." Hier wird nur geprüft,
|
||||
DASS es so ist; wie viel Höhe das spart, misst
|
||||
pruef-eventkarte.mjs in Abschnitt 4b.
|
||||
|
||||
DIE ZEILE DARÜBER BLEIBT TROTZDEM GÜLTIG: `hidden` nimmt ein
|
||||
Element nicht aus dem Baum, der Inhalt ist also vorhanden und
|
||||
nur zugeklappt. Genau das soll es sein -- verborgen, nicht
|
||||
verloren. */
|
||||
ok(event?.klappZu === true,
|
||||
`die Gliederung steht zugeklappt da (${event?.klappZu})`);
|
||||
ok(event?.klappWort === "Alle Infos",
|
||||
`und der Knopf dazu ist beschriftet ("${event?.klappWort}")`);
|
||||
|
||||
/* GEGENPROBE dazu: Eine Karte, die KEIN Event ist, darf nichts davon
|
||||
haben. Sonst bewiese der Block oben nur, dass die Elemente
|
||||
|
||||
Reference in New Issue
Block a user