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:
2026-10-07 22:39:03 +02:00
co-authored by Claude Opus 5
parent d7720a3687
commit cadab24a5f
58 changed files with 3950 additions and 798 deletions
+23 -3
View File
@@ -76,6 +76,7 @@ import {
db, protokolliere, echteIp, sitzungLesen, istLeitung,
DATEN_ORDNER, hausFuerNeuenEintrag } from "./workspace.js";
import { bildArtVon } from "./workspace-dateien.js";
import { EVENT_TEXT_MAX } from "./workspace-bereiche.js";
import {
linkAusText, folgeUmleitung, holeSeite, holeMitFrist, bildAdresseErlaubt,
hostVon, FRIST_SEITE_MS } from "./helfer-tiktok.mjs";
@@ -116,8 +117,15 @@ const DRAENGT_AB_TAGEN = 7;
OEFFNEN, aber nicht SPEICHERN kann: Er aendert ein Wort, drueckt
Speichern und bekommt eine Fehlermeldung ueber etwas, das er nie
getippt hat. Ein Formular, das der Server ablehnt, laesst den
Menschen davor sich selbst fuer den Fehler halten. */
const FELD_MAX = 6000;
Menschen davor sich selbst fuer den Fehler halten.
SEIT DEM 07.10.2026 STEHT DIE ZAHL NUR NOCH AN EINER STELLE
(`EVENT_TEXT_MAX` in workspace-bereiche.js) und ist dort von
6000 auf 20000 gehoben worden -- der Regeltext von
„Gipfelstuermer" passt jetzt vollstaendig hinein. Abgeschrieben
wird sie nicht: Zwei Fassungen derselben Grenze laufen
auseinander. */
const FELD_MAX = EVENT_TEXT_MAX;
/** Kuerzt an einer ABSCHNITTSGRENZE und sagt, dass gekuerzt wurde.
*
@@ -127,7 +135,19 @@ const FELD_MAX = 6000;
*
* Verloren geht nichts: Das Gelesene steht gegliedert in
* kampagne_daten. */
function kuerzen(text, max = FELD_MAX) {
/* AUSGEFUEHRT SEIT DEM 07.10.2026, damit sie pruefbar bleibt.
Seit das Feld 20000 Zeichen fasst, wird der laengste gemessene
Regeltext (7679 Zeichen) nicht mehr gekuerzt -- und damit liefe
diese Funktion im echten Betrieb nie. Eine Funktion, die nie
laeuft, ist eine Funktion, die beim naechsten Umbau still
kaputtgeht: Kommt eine Kampagne mit 25000 Zeichen, soll sie
genau dann richtig arbeiten.
Also wird sie einzeln geprueft, mit einer kleinen Grenze
(pruef-kampagne.mjs, Abschnitt 4). Das ist der Unterschied
zwischen „laeuft gerade nicht" und „ist ungeprueft". */
export function kuerzen(text, max = FELD_MAX) {
const s = String(text || "");
if (s.length <= max) return s;
const fussnote = "\n\n* Der Regeltext war länger als das Feld fasst und endet "