Fett, kursiv, unterstrichen, durchgestrichen -- ueberall

Filipe, 21.09.2026: "dan will ich dass die leute auch immer die art
von text aussuchen können, fettgedrückt, unterstrichen und so alles.
das überall sei es im chat jeder für sich oder sei es wenn die modis
oder rechte hand oder dogfather eine aufgabe oder sachen posten."

VORHER GEMESSEN: Es gab genau EINE Auszeichnung im ganzen Haus --
fett, und nur auf den Brettern (`mitFett` in bereich.js). Im Chat
konnte niemand etwas hervorheben.

EINE QUELLE FUER DAS GANZE HAUS: workspace/assets/js/textform.js.
Chat, Bretter und Aufgaben zeichnen ihren Text jetzt durch denselben
Zerleger. Drei Fassungen derselben Regel waeren drei Fassungen, die
verschieden altern.

  **fett**   _kursiv_   __unterstrichen__   ~~durchgestrichen~~

Dazu eine Leiste ueber jedem Schreibfeld: F K U S, 44 px am Finger,
Strg+B/I/U, und ein zweiter Druck nimmt die Zeichen wieder weg.

DIE WORTGRENZEN SIND DER EIGENTLICHE BAU. Ein Zerleger, der alles
auszeichnet, ist schlimmer als keiner: `datei_name_hier` hiesse
plotzlich anders, als es heisst, und `@max_muster` ebenso. Deshalb
stehen bei den Unterstrichen Wortgrenzen -- bei Sternchen und Tilden
nicht, die kommen in Text nicht versehentlich paarweise vor.

GEBAUT MIT createTextNode, NIE innerHTML. Wer Text zu Auszeichnung
macht, ist einen Tippfehler von einer Luecke entfernt. Das ist heute
sicher; pruef-textform misst es, damit es das morgen auch ist.

EIN ECHTER FEHLER DABEI GEFUNDEN -- in meinem eigenen Einbau von
vorhin: Auf dem Aufgabenbrett stand `$('f-text')` in einem Block, der
`$` gar nicht kennt (die Datei hat drei getrennte Bloecke).
`ReferenceError: $ is not defined`, die Leiste kam dort nie an, und
die Seite sah dabei vollkommen normal aus. Derselbe Block beginnt
ausserdem mit `if (!feld) return;` auf ein Aufwand-Feld, das mit
Textgestaltung nichts zu tun hat -- die Leiste haette an einer
voellig fremden Bedingung gehangen. Jetzt ein eigener Block, ohne
fremden Helfer und ohne fremde Bedingung.

Gefunden hat es die Pruefung, weil sie die Leiste AM FELD sucht,
statt den Aufruf im Quelltext zu zaehlen. Sie sammelt seitdem auch
Skriptfehler ein -- ein ReferenceError ist immer ein Befund, auch
wenn man noch nicht weiss, was er anrichtet.

pruef-textform.mjs, 50 Aussagen:
  - welche Seite das Modul braucht, wird ABGELEITET (beide
    Richtungen: keine ohne, keine umsonst) -- 3 brauchen, 32 nicht
  - 13 Regelfaelle im echten Browser an der echten Datei, davon
    sechs, die NICHT gestaltet werden duerfen
  - eine echte Nachricht wird zu <strong>/<em>/<u>/<s>
  - Sicherheitsprobe: <b> und <img onerror> bleiben Text, nichts
    wird ausgefuehrt -- und die echte Auszeichnung daneben wirkt
    trotzdem (sonst waere nur bewiesen, dass gar nichts passiert)
  - die Leiste legt Zeichen wirklich um und wieder ab
  - Gegenproben fuer beide Richtungen

Nachbarn unveraendert gruen: pruef-chat-optik 45/0 (war 39 -- die
Antwortleiste kam dazu), pruef-aufgabenbrett 49/0, pruef-nachfrage
49/0, pruef-css-klassen 30/0, pruef-tippziele 11/0, pruef-meldungen
8/0.
This commit is contained in:
2026-09-21 16:42:43 +02:00
parent 7305f694d5
commit bfbe6feafe
44 changed files with 1503 additions and 528 deletions
+34 -14
View File
@@ -1388,22 +1388,32 @@
Ein einzelnes Sternchen bleibt ein Sternchen: `3 * 4` ist keine
Hervorhebung, und wer das anders faende, haette eine Regel, die
beim Rechnen zuschlaegt. */
/* AUS EINER QUELLE FUER DAS GANZE HAUS (21.09.2026).
Hier stand eine eigene kleine Fassung, die nur `**fett**` kannte
-- und sie war die EINZIGE Gestaltung im Haus. Im Chat gab es
nichts, bei den Aufgaben nichts.
Filipe: "ich will dass die leute auch immer die art von text
aussuchen können, fettgedrückt, unterstrichen und so alles ...
das überall."
Jetzt kommt sie aus textform.js -- dieselbe, die auch der Chat
benutzt. Vier Zeichen statt einem, und wer sie nicht kennt,
bekommt eine Leiste ueber dem Schreibfeld.
ALTES BLEIBT LESBAR: `**fett**` funktioniert unveraendert weiter,
es ist dort das erste der vier Zeichen. Nichts, was jemand schon
geschrieben hat, sieht ab heute anders aus.
DER RUECKFALL IST ABSICHT: Faellt textform.js aus (alte Fassung im
Zwischenspeicher), steht der Text roh da -- mit Sternchen, aber
vollstaendig. Ein leerer Eintrag waere schlimmer als ein
ungestalteter. */
function mitFett(text) {
if (window.Textform) return window.Textform.zeichne(text);
const stueck = document.createDocumentFragment();
const teile = String(text).split(/\*\*(.+?)\*\*/s);
/* split mit einer Gruppe liefert abwechselnd: normal, fett,
normal, fett … Der ungerade Platz ist immer der Inhalt der
Klammern. */
teile.forEach((t, i) => {
if (!t) return;
if (i % 2 === 1) {
const b = document.createElement('strong');
b.textContent = t;
stueck.append(b);
} else {
stueck.append(document.createTextNode(t));
}
});
stueck.append(document.createTextNode(String(text == null ? '' : text)));
return stueck;
}
@@ -2745,5 +2755,15 @@
if (window.zielSchluessel?.() === 'offen') filter = 'offen';
await laden();
/* DIE LEISTE FUER DIE TEXTGESTALTUNG (21.09.2026). Nach `laden()`,
weil das Formular davor noch nicht zusammengesetzt ist -- die
Felder haengen am Bereich, und der steht erst danach fest. */
if (window.Textform) {
for (const id of ['f-text', 'f-aufgaben', 'f-regeln']) {
const feld = document.getElementById(id);
if (feld) window.Textform.leiste(feld);
}
}
})();
})();