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:
co-authored by
Claude Fable 5
parent
24a70ca49e
commit
1bda54ae59
@@ -279,6 +279,42 @@ läuft synchron, es wird nichts davon gezeichnet. Nachgemessen: Knoten auf dem
|
|||||||
Schirm 143 px, im SVG 189,7 px — also die unskalierte Größe, passend zur festen
|
Schirm 143 px, im SVG 189,7 px — also die unskalierte Größe, passend zur festen
|
||||||
Schrift.
|
Schrift.
|
||||||
|
|
||||||
|
**Nachtrag 3 — der Umschalter trägt die Navigation zum Knoten; ein langer
|
||||||
|
Druck im Textfeld verbietet sich.** Gemeldet als Fehler: „Wenn man in der
|
||||||
|
Smartphone-Ansicht den Cursor in den Text setzt, klappt das Text-Edit-Fenster
|
||||||
|
zusammen." Nachgestellt auf der **deployten** Instanz (1.1.39, noch das alte
|
||||||
|
Splitter-Modell von D17): Ein Tipp auf die **Titelzeile des Diagramms** —
|
||||||
|
ein 49 px hoher Streifen unmittelbar über dem Text — schrumpfte den Editor von
|
||||||
|
594 px auf 44 px. Beim Zielen auf die oberen Textzeilen ist der leicht zu
|
||||||
|
treffen. Das Ein-Bereich-Modell aus Nachtrag 1 nimmt dem Fehler die Grundlage:
|
||||||
|
Es gibt keinen Splitter und kein Titelzeilen-Tippen mehr, den Bereich wechselt
|
||||||
|
**allein** der Umschalter. Im aktuellen Stand ließ sich der Fehler nicht mehr
|
||||||
|
auslösen (Maus-Klick, emulierter Touch und synthetische Touch-Folge, jeweils
|
||||||
|
ohne Bereichswechsel).
|
||||||
|
|
||||||
|
Der zweite Teil der Meldung deckte aber eine echte Lücke auf: Für die Richtung
|
||||||
|
**Text → Diagramm** gibt es nur Alt+Klick bzw. Alt+Enter (D25) — und Alt gibt
|
||||||
|
es auf dem Telefon nicht. Die Gegenrichtung hat dort ihren langen Druck, diese
|
||||||
|
hatte nichts.
|
||||||
|
|
||||||
|
**Vorgeschlagen war ein langer Druck im Textfeld — verworfen.** Dort gehört er
|
||||||
|
dem Betriebssystem: Wort markieren, Auswahlgriffe, Einfügen-Leiste. D25 konnte
|
||||||
|
sich diese Geste im Diagramm nehmen (`user-select:none`), 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. Dazu kommt, dass sich das Zusammenspiel mit der
|
||||||
|
nativen Auswahl nach der D25-Lehre nur auf echter Hardware beurteilen ließe.
|
||||||
|
|
||||||
|
**Gewählt: der Umschalter tut es nebenbei.** Wer aus dem Text ins Diagramm
|
||||||
|
wechselt, will nachsehen — und zwar bei dem, woran er gerade geschrieben hat.
|
||||||
|
Der Knopf wird in genau diesem Moment ohnehin gedrückt; er zentriert deshalb
|
||||||
|
den Knoten der Cursor-Zeile und hebt ihn hervor (`focusNodeOfCaret()`, also
|
||||||
|
identisch zum Alt+Klick am Schreibtisch). Kostet kein Bedienelement, keine
|
||||||
|
Geste und kann nicht versehentlich auslösen. Steht der Cursor auf einer Zeile
|
||||||
|
ohne Knoten (Kommentar, Leerzeile), wird nur umgeschaltet — dieselbe stille
|
||||||
|
Regel wie überall sonst bei dieser Geste.
|
||||||
|
|
||||||
**Das Debug-Panel minimiert sich jetzt, statt sich zu schließen.** Ein Klick
|
**Das Debug-Panel minimiert sich jetzt, statt sich zu schließen.** Ein Klick
|
||||||
entfernte es bisher ganz — was nichts half, weil der 15-Sekunden-Takt es sofort
|
entfernte es bisher ganz — was nichts half, weil der 15-Sekunden-Takt es sofort
|
||||||
wieder aufbaute; auf dem Telefon verdeckte es damit dauerhaft die untere rechte
|
wieder aufbaute; auf dem Telefon verdeckte es damit dauerhaft die untere rechte
|
||||||
|
|||||||
+6
-1
@@ -406,7 +406,12 @@ damit genau dann zu sehen, wenn der Text vorn ist. Die übrigen
|
|||||||
**Aktions-Knöpfe** bleiben rechts in der Titelzeile und werden mit
|
**Aktions-Knöpfe** bleiben rechts in der Titelzeile und werden mit
|
||||||
umgeschaltet — jeder Bereich zeigt seine eigenen, in der unten beschriebenen
|
umgeschaltet — jeder Bereich zeigt seine eigenen, in der unten beschriebenen
|
||||||
komprimierten Form. Der sichtbare Bereich wird gemerkt; ein Sprung zwischen
|
komprimierten Form. Der sichtbare Bereich wird gemerkt; ein Sprung zwischen
|
||||||
Diagramm und Text (§9) holt den nötigen Bereich selbst nach vorn.
|
Diagramm und Text (§9) holt den nötigen Bereich selbst nach vorn. **Nur dieser
|
||||||
|
Umschalter wechselt den Bereich** — insbesondere kostet kein Tippen im Text
|
||||||
|
den Editor. Umgekehrt trägt der Umschalter zugleich die Navigation zum Knoten:
|
||||||
|
Wer aus dem Text ins Diagramm wechselt, landet auf dem Knoten der Cursor-Zeile
|
||||||
|
(zentriert und hervorgehoben) — der Alt+Klick dieser Richtung (§9) steht auf
|
||||||
|
dem Telefon nicht zur Verfügung.
|
||||||
Voreinstellung ist das Diagramm. Beide Inhalte werden hier zudem rund **25 %
|
Voreinstellung ist das Diagramm. Beide Inhalte werden hier zudem rund **25 %
|
||||||
kleiner** dargestellt, damit mehr Plan auf die Fläche passt; das ist ein Faktor
|
kleiner** dargestellt, damit mehr Plan auf die Fläche passt; das ist ein Faktor
|
||||||
**auf** den Zoom, der Zoom-Regler arbeitet unverändert relativ dazu und zeigt
|
**auf** den Zoom, der Zoom-Regler arbeitet unverändert relativ dazu und zeigt
|
||||||
|
|||||||
@@ -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
|
einen** Bereich — `body.pane-diagram` bzw. `body.pane-text`, umgeschaltet über
|
||||||
je einen festen Knopf pro Titelzeile (`#paneToText`/`#paneToDiagram`,
|
je einen festen Knopf pro Titelzeile (`#paneToText`/`#paneToDiagram`,
|
||||||
`setMobilePane()`); kein Splitter, keine Fenster-Buttons (D17-Nachtrag).
|
`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** —
|
**Der verborgene Bereich ist `display:none` und misst sich damit zu null** —
|
||||||
`setMobilePane()` MUSS neu zeichnen: zum Diagramm hin dieselben vier Schritte
|
`setMobilePane()` MUSS neu zeichnen: zum Diagramm hin dieselben vier Schritte
|
||||||
wie `applyLayout` (`applyOptStairs`/`alignStems`/`drawCheapPath`/
|
wie `applyLayout` (`applyOptStairs`/`alignStems`/`drawCheapPath`/
|
||||||
|
|||||||
+12
-2
@@ -1102,8 +1102,18 @@ function setMobilePane(pane, save){
|
|||||||
}
|
}
|
||||||
document.getElementById('paneToText')
|
document.getElementById('paneToText')
|
||||||
.addEventListener('click', () => setMobilePane('text', true));
|
.addEventListener('click', () => setMobilePane('text', true));
|
||||||
document.getElementById('paneToDiagram')
|
/* Der Wechsel **ins Diagramm** ist zugleich die Navigation zum Knoten, an dem
|
||||||
.addEventListener('click', () => setMobilePane('diagram', true));
|
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 => {
|
document.querySelectorAll('.winbtn').forEach(b => {
|
||||||
b.addEventListener('click', e => {
|
b.addEventListener('click', e => {
|
||||||
/* Fenster-Buttons sind maßgeblich: nicht zum Titelzeilen-Restore durchreichen */
|
/* Fenster-Buttons sind maßgeblich: nicht zum Titelzeilen-Restore durchreichen */
|
||||||
|
|||||||
Reference in New Issue
Block a user