fix: Umschalter navigiert zum Knoten der Cursor-Zeile (Touch-Weg Text -> Diagramm)

Zum gemeldeten Fehler „Cursor in den Text setzen klappt den Editor zusammen":
Auf der deployten Instanz (1.1.39, noch das alte Splitter-Modell) nachgestellt —
ein Tipp auf die Titelzeile des Diagramms, ein 49-px-Streifen unmittelbar über
dem Text, schrumpfte den Editor von 594 px auf 44 px. Beim Zielen auf die oberen
Textzeilen leicht zu treffen. Das Ein-Bereich-Modell nimmt dem die Grundlage:
kein Splitter, kein Titelzeilen-Tippen, den Bereich wechselt allein der
Umschalter. Im aktuellen Stand nicht mehr auslösbar (Maus, emulierter Touch und
synthetische Touch-Folge je ohne Bereichswechsel).

Der zweite Teil der Meldung deckte eine echte Lücke auf: Für Text -> Diagramm
gibt es nur Alt+Klick/Alt+Enter — und Alt gibt es auf dem Telefon nicht. Die
Gegenrichtung hat dort ihren langen Druck, diese hatte nichts.

Ein langer Druck IM TEXTFELD verbietet sich allerdings: Dort gehört er dem
Betriebssystem (Wort markieren, Auswahlgriffe). D25 konnte sich die Geste im
Diagramm nehmen, weil es da nichts zu markieren gibt; in einem editierbaren Feld
ist sie die Bedien-Grundlage zum Bearbeiten — sie zu überschreiben löste ein
Navigationsproblem auf Kosten des Bearbeitens, in einer Meldung, deren Kern
gerade lautet, dass Bearbeiten nicht bestraft werden darf.

Stattdessen trägt der Umschalter die Geste nebenbei: Wer aus dem Text ins
Diagramm wechselt, will bei dem nachsehen, woran er geschrieben hat — der Knopf
wird in genau diesem Moment ohnehin gedrückt. Er zentriert und markiert den
Knoten der Cursor-Zeile (focusNodeOfCaret, identisch zum Alt+Klick am
Schreibtisch); auf einer Zeile ohne Knoten wird nur umgeschaltet.

SPEC §9 und D17 (Nachtrag 3) nachgezogen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-23 08:13:35 +02:00
co-authored by Claude Fable 5
parent 24a70ca49e
commit 1bda54ae59
4 changed files with 61 additions and 3 deletions
+7
View File
@@ -391,6 +391,13 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der
einen** Bereich — `body.pane-diagram` bzw. `body.pane-text`, umgeschaltet über
je einen festen Knopf pro Titelzeile (`#paneToText`/`#paneToDiagram`,
`setMobilePane()`); kein Splitter, keine Fenster-Buttons (D17-Nachtrag).
**Nur der Umschalter darf den Bereich wechseln** — im alten Splitter-Modell
kostete ein Tipp auf die Diagramm-Titelzeile (49-px-Streifen über dem Text)
den Editor; genau das war der gemeldete Fehler (D17-Nachtrag 3). `#paneToDiagram`
ruft `focusNodeOfCaret()`, wenn die Cursor-Zeile einen Knoten hat: Das ist die
**einzige** Touch-Navigation Text → Diagramm (Alt gibt es dort nicht). Keinen
langen Druck ins Textfeld legen — der gehört dem OS (Wortauswahl,
Auswahlgriffe), anders als im Diagramm, wo D25 ihn sich nehmen konnte.
**Der verborgene Bereich ist `display:none` und misst sich damit zu null**
`setMobilePane()` MUSS neu zeichnen: zum Diagramm hin dieselben vier Schritte
wie `applyLayout` (`applyOptStairs`/`alignStems`/`drawCheapPath`/
+12 -2
View File
@@ -1102,8 +1102,18 @@ function setMobilePane(pane, save){
}
document.getElementById('paneToText')
.addEventListener('click', () => setMobilePane('text', true));
document.getElementById('paneToDiagram')
.addEventListener('click', () => setMobilePane('diagram', true));
/* Der Wechsel **ins Diagramm** ist zugleich die Navigation zum Knoten, an dem
man gerade geschrieben hat. Für diese Richtung gibt es sonst nur Alt+Klick
(D25) — und Alt gibt es auf dem Telefon nicht; die Gegenrichtung hat dort
ihren langen Druck, diese hatte nichts. Ein eigener langer Druck im Textfeld
verbietet sich: Dort gehört er dem Betriebssystem (Wort markieren,
Auswahlgriffe) — das ist die Bedien-Grundlage zum Bearbeiten, die man einem
Textfeld nicht wegnehmen darf. Der Umschalter trägt die Geste stattdessen
umsonst: Er wird ohnehin gedrückt, wenn man nachsehen will. */
document.getElementById('paneToDiagram').addEventListener('click', () => {
if(caretLine != null && nodeOfLine(caretLine)) focusNodeOfCaret();
else setMobilePane('diagram', true);
});
document.querySelectorAll('.winbtn').forEach(b => {
b.addEventListener('click', e => {
/* Fenster-Buttons sind maßgeblich: nicht zum Titelzeilen-Restore durchreichen */