feat: Umklappen im Diagramm schreibt die Faltmarke in den Text zurück
Erster Schritt der Schreibrichtung Diagramm -> Text. Damit ist der Text auch für
die Faltung die eine Quelle der Wahrheit (D14): Was man sieht, steht
geschrieben, und ein Neuladen stellt es wieder her. Kehrt die bisherige
Festlegung aus D34/D38 um („die Marken bestimmen nur den Anfangszustand").
Verfahren: minimal patchen, dann nachrechnen. Die Ableitung Text -> Zustand ist
nicht umkehrbar — mehrere Markensätze ergeben denselben Zustand, und `<` faltet
Knoten, die gar keine Marke tragen. Statt zu invertieren wird der Kandidat
befragt: `>` an die eine Zeile, initialCollapsed() darauf, mit dem Soll
vergleichen. Passt es, bleibt alles andere unangetastet — so überleben von Hand
gesetzte `<`. Passt es nicht, werden alle Marken neu gesetzt (das `<` löst sich
dabei auf). Passt auch das nicht (ein `!!!` holt seinen Knoten immer wieder
hervor), wird gar nicht geschrieben: Ein Text, der etwas anderes sagt als das
Bild, wäre schlimmer als eine fehlende Marke. initialCollapsed() bleibt die
einzige Stelle, die die Marken versteht.
Undo-fähig über execCommand('insertText') — gemessen: value= UND setRangeText
machen Strg+Z wirkungslos, wer tippt und dann faltet käme an sein Getipptes
nicht mehr heran. Falten ist damit ein eigener Undo-Schritt (geprüft: einmal
Strg+Z nimmt die Faltung, ein zweites das Getippte).
Zwei gemessene Fallen: Ein Textfeld mit display:none-Vorfahr nimmt kein
execCommand an (liefert false, obwohl activeElement es meldet) — auf Mobil ist
der Editor beim Falten genau das, deshalb schaltet ihn `writing-fold` für die
Dauer des synchronen Schreibens aus dem Bild heraus sichtbar. Und der nötige
Fokus zöge dort die Tastatur hoch, dagegen inputmode="none" wie beim Sprung
(D25); danach geht der Fokus an den Knoten zurück.
Bei schreibgeschütztem Text (Pad, D31) wird nicht geschrieben — dort trägt
weiter die Sitzungs-Überlagerung. Schreibmarke und Scrollstand bleiben erhalten.
Im Browser geprüft: `<` bleibt stehen, wenn es noch stimmt, und löst sich auf,
wenn nicht; Falten bei verborgenem Editor auf Mobil; Pad-Fall sitzungsweise;
Hin- und Herklappen führt zeichengenau zum Ausgangstext zurück.
7 neue Tests für setFoldMark (215 gesamt). SPEC §1/§9, D38 (Nachtrag 2) und
frontend/CLAUDE.md nachgezogen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
38104a4c5d
commit
321bdc9dfa
+20
-6
@@ -34,9 +34,10 @@ dieser Reihenfolge (wichtig für Kollisionsfreiheit):
|
||||
- `>` heißt: der Teilbaum dieses Knotens ist beim Öffnen **eingeklappt**.
|
||||
- `<` innerhalb eines eingeklappten Bereichs holt den **eigenen Teilbaum**
|
||||
gezielt wieder hervor (Mechanik: §9).
|
||||
- Die Marken bestimmen nur den **Anfangszustand** — im Diagramm wird danach
|
||||
unabhängig vom Text gefaltet (§9). Sie sagen nichts über Fortschritt (§4)
|
||||
oder Notwendigkeit (§3) und ändern weder Kosten noch Warnungen.
|
||||
- Die Marken beschreiben den **Faltzustand des Dokuments**: Beim Öffnen stellen
|
||||
sie ihn her, und Umklappen im Diagramm schreibt sie zurück (§9) — Text und
|
||||
Bild sagen dasselbe. Sie sagen nichts über Fortschritt (§4) oder
|
||||
Notwendigkeit (§3) und ändern weder Kosten noch Warnungen.
|
||||
|
||||
**Knoten-ID `#name`** — benennt einen Knoten im **ganzen Dokument** eindeutig;
|
||||
sie ist die Adresse für Abhängigkeiten und Beschreibungsblöcke (§11).
|
||||
@@ -665,9 +666,22 @@ fokussierten Knoten (WAI-ARIA-Baum-Idiom).
|
||||
hervorgeholten Teilbaums bleibt respektiert.
|
||||
- Auch ein **`!!!`-markierter Knoten** (§1) holt sich auf diese Weise hervor —
|
||||
ein Zeigefinger auf etwas Unsichtbares zeigte ins Leere.
|
||||
- Der interaktive Eingriff gilt **je Knoten** (Identität = Label-Pfad, wie bei
|
||||
„Was ist neu?“) und **für die Sitzung**; er wird nicht gespeichert — die
|
||||
dauerhafte Aussage steht im Text (D34). Ein Dokumentwechsel setzt zurück.
|
||||
- **Umklappen im Diagramm schreibt die Marke in den Text zurück.** Damit ist
|
||||
der Text auch für die Faltung die eine Quelle der Wahrheit: Was du siehst,
|
||||
steht geschrieben, und ein Neuladen stellt es wieder her. Die Änderung ist
|
||||
eine gewöhnliche Textänderung — sie lässt sich mit **Rückgängig** zurücknehmen
|
||||
und macht ein mitgeliefertes Dokument zu einem bearbeiteten (§9, D27).
|
||||
Geschrieben wird **minimal**: Nur die Zeile des umgeklappten Knotens wird
|
||||
angefasst, solange die übrigen Marken den Zustand noch richtig beschreiben —
|
||||
ein von Hand gesetztes `<` bleibt also stehen. Trifft es nicht mehr zu, werden
|
||||
alle Marken neu gesetzt und das `<` dabei aufgelöst.
|
||||
- Wo der Text **nicht beschreibbar** ist — bei einem Pad-Dokument (§9) —, gilt
|
||||
der Eingriff **je Knoten** (Identität = Label-Pfad, wie bei „Was ist neu?“)
|
||||
und **nur für die Sitzung**; ein Dokumentwechsel setzt ihn zurück. Dasselbe
|
||||
gilt für einen Zustand, der sich in Marken gar nicht ausdrücken lässt (etwa
|
||||
weil eine Fokusmarke `!!!` ihren Knoten immer wieder hervorholt): Dann wird
|
||||
lieber nichts geschrieben, als einen Text zu hinterlassen, der etwas anderes
|
||||
sagt als das Bild.
|
||||
- Faltung ist **reine Ansicht**: Warnungen aus eingeklappten Teilbäumen werden
|
||||
weiter gemeldet (sie gelten dem Text), und der günstigste Pfad rechnet
|
||||
unverändert über den ganzen Baum.
|
||||
|
||||
Reference in New Issue
Block a user