Visuele documentmodus: een pijl in een tabel, je plek bij het wisselen, en opmaak die opmaak blijft (#1565, #1566, #1567) #1574

Merged
brenno merged 7 commits from fix/visuele-modus-bron into main 2026-08-19 11:14:56 +00:00
Owner

Drie klachten uit één sessie schrijven in de documentmodus. Ze bleken elkaars
buren, dus ze zitten in één tak — elk met een eigen commit en een eigen test.

#1565 — een pijl in een tabel gooide je stil naar de brontekst

Een invulbare cel is een tekstveld binnen een Quill-embed, en een
EditableText laat zijn tekstbewerkingsacties bewust overschrijven door een
Actions hoger in de boom (Action.overridable) — precies waar Quill die van
hem zet. Gevolg: elke pijltjestoets in een cel liet Quill de cursor van het
document verzetten en dat resultaat ín de cel schrijven. De hele
documenttekst belandde met <br>-tekens in één cel, en omdat rauwe HTML de
visuele stand op brontekst terugwerpt, viel de editor om. Zonder dat er iets van
te zien was: de standknop zei nog "Visueel" en de melding was een grijze regel
van 10,5 punt.

  • EmbeddedFieldActions zet dezelfde acties dichter bij het veld en laat ze de
    eigen standaardactie van het veld aanroepen (Action.callingAction). Ook om
    de notenregel heen, want die had hetzelfde probleem.
  • tableArrowTarget onderscheidt nu "binnen de cel", "naar een buurcel" en
    "aan de rand van de tabel". Die laatste eet de toets op in plaats van hem door
    te laten — wat de regel eromheen altijd al beloofde.
  • De visuele editor schrijft het document niet meer opnieuw weg wanneer alleen
    de cursor verschoof. De heen-en-terugweg naar Markdown is niet byte-getrouw,
    dus één klik in het schrijfvlak was genoeg voor een bewerking (en een
    ongedaan-stap) die niemand had gemaakt.
  • De melding "je bewerkt nu de bron" is een zichtbare balk geworden.

#1566 — wisselen van stand bracht je bij het begin

MarkdownCaretMap vertaalt de cursor heen en weer. Per regel, want zo staat de
tekst er aan beide kanten in: de visuele editor zet elk blok op een eigen regel,
laat lege bronregels weg en vervangt een tabel, een scheidingslijn of een
afbeelding door één objectteken. Binnen een regel lopen bron en zichtbare tekst
samen door — die zichtbare tekst is altijd een deelrij van de bron, want opmaak
haalt tekens weg en voegt er nooit een toe. Zo klopt de kolom ook midden in
**vet**.

De toets legt de kaart naast de échte platte tekst van de omzetting in
plaats van naast zelfbedachte getallen: waar een woord in de visuele editor
staat, is waar de cursor heen moet.

#1567 — sterretjes bleven in tabelcellen staan

De cel was een kaal tekstveld met de rauwe celtekst erin. Nu toont de cel waar je
niet in staat de opgemaakte lezing (dezelfde InlineMarkdownText als de
gelezen tabel), over het tekstveld heen; het veld blijft eronder staan met
onzichtbare tekst, zodat focus, cursor, kolombreedte en rijhoogte niet
verspringen op het moment dat je erin klikt. De cel waar de cursor in staat toont
zijn Markdown — dát is wat je bewerkt. En code kreeg in de documentweergave
hetzelfde vlakje als in het schrijfvlak.

Getoetst

  • make check groen (volledige suite + beide dekkingsvloeren), make check-secrets en make sast groen. make dast niet gedraaid: colima draait
    niet op deze machine, en deze wijziging raakt geen geserveerd oppervlak.
  • Elke reparatie heeft een regressietest die één keer rood is gemaakt tegen de
    ónherstelde code (document_visual_table_navigation_test,
    document_visual_inline_markup_test, document_caret_across_modes_test).
  • En met eigen ogen in de draaiende app gekeken. Dat leverde nog een echte
    bevinding op die geen test zag: de opgemaakte lezing kwam een haar hoger uit
    dan het tekstveld, en de rij sneed de staarten van de letters af. Zie de
    laatste commit.

Weging (bewaker)

Er verandert niets aan wat er in het .md staat — #1565 haalt juist een pad wég
dat de bron stukschreef. Geen nieuwe afhankelijkheid, geen netwerk, geen opslag.
Eén botsing hardop: "een cel leest zoals hij drukt" tegen "de gebruiker moet de
Markdown-drager blijven zien". Uitwisselbaarheid gaat voor — de cel waar de
cursor in staat toont zijn Markdown, en Bron toont het hele bestand. Ik kom
hierop terug als blijkt dat mensen de tekens juist tijdens het typen in álle
cellen willen; dan wordt het een instelling, geen stille wijziging.

Sluit #1565, #1566 en #1567.

Drie klachten uit één sessie schrijven in de documentmodus. Ze bleken elkaars buren, dus ze zitten in één tak — elk met een eigen commit en een eigen test. ## #1565 — een pijl in een tabel gooide je stil naar de brontekst Een invulbare cel is een tekstveld binnen een Quill-embed, en een `EditableText` laat zijn tekstbewerkingsacties bewust overschrijven door een `Actions` hoger in de boom (`Action.overridable`) — precies waar Quill die van hem zet. Gevolg: elke pijltjestoets in een cel liet *Quill* de cursor van het **document** verzetten en dat resultaat ín de cel schrijven. De hele documenttekst belandde met `<br>`-tekens in één cel, en omdat rauwe HTML de visuele stand op brontekst terugwerpt, viel de editor om. Zonder dat er iets van te zien was: de standknop zei nog "Visueel" en de melding was een grijze regel van 10,5 punt. - `EmbeddedFieldActions` zet dezelfde acties dichter bij het veld en laat ze de eigen standaardactie van het veld aanroepen (`Action.callingAction`). Ook om de notenregel heen, want die had hetzelfde probleem. - `tableArrowTarget` onderscheidt nu "binnen de cel", "naar een buurcel" en "aan de rand van de tabel". Die laatste eet de toets op in plaats van hem door te laten — wat de regel eromheen altijd al beloofde. - De visuele editor schrijft het document niet meer opnieuw weg wanneer alleen de cursor verschoof. De heen-en-terugweg naar Markdown is niet byte-getrouw, dus één klik in het schrijfvlak was genoeg voor een bewerking (en een ongedaan-stap) die niemand had gemaakt. - De melding "je bewerkt nu de bron" is een zichtbare balk geworden. ## #1566 — wisselen van stand bracht je bij het begin `MarkdownCaretMap` vertaalt de cursor heen en weer. Per regel, want zo staat de tekst er aan beide kanten in: de visuele editor zet elk blok op een eigen regel, laat lege bronregels weg en vervangt een tabel, een scheidingslijn of een afbeelding door één objectteken. Binnen een regel lopen bron en zichtbare tekst samen door — die zichtbare tekst is altijd een *deelrij* van de bron, want opmaak haalt tekens weg en voegt er nooit een toe. Zo klopt de kolom ook midden in `**vet**`. De toets legt de kaart naast de **échte** platte tekst van de omzetting in plaats van naast zelfbedachte getallen: waar een woord in de visuele editor staat, is waar de cursor heen moet. ## #1567 — sterretjes bleven in tabelcellen staan De cel was een kaal tekstveld met de rauwe celtekst erin. Nu toont de cel waar je *niet* in staat de opgemaakte lezing (dezelfde `InlineMarkdownText` als de gelezen tabel), over het tekstveld heen; het veld blijft eronder staan met onzichtbare tekst, zodat focus, cursor, kolombreedte en rijhoogte niet verspringen op het moment dat je erin klikt. De cel waar de cursor in staat toont zijn Markdown — dát is wat je bewerkt. En `code` kreeg in de documentweergave hetzelfde vlakje als in het schrijfvlak. ## Getoetst - `make check` groen (volledige suite + beide dekkingsvloeren), `make check-secrets` en `make sast` groen. `make dast` niet gedraaid: colima draait niet op deze machine, en deze wijziging raakt geen geserveerd oppervlak. - Elke reparatie heeft een regressietest die één keer rood is gemaakt tegen de ónherstelde code (`document_visual_table_navigation_test`, `document_visual_inline_markup_test`, `document_caret_across_modes_test`). - **En met eigen ogen in de draaiende app gekeken.** Dat leverde nog een echte bevinding op die geen test zag: de opgemaakte lezing kwam een haar hoger uit dan het tekstveld, en de rij sneed de staarten van de letters af. Zie de laatste commit. ## Weging (bewaker) Er verandert niets aan wat er in het `.md` staat — #1565 haalt juist een pad wég dat de bron stukschreef. Geen nieuwe afhankelijkheid, geen netwerk, geen opslag. Eén botsing hardop: "een cel leest zoals hij drukt" tegen "de gebruiker moet de Markdown-drager blijven zien". Uitwisselbaarheid gaat voor — de cel waar de cursor in staat toont zijn Markdown, en Bron toont het hele bestand. Ik kom hierop terug als blijkt dat mensen de tekens juist tijdens het typen in álle cellen willen; dan wordt het een instelling, geen stille wijziging. Sluit #1565, #1566 en #1567.
brenno force-pushed fix/visuele-modus-bron from db60e7caab
All checks were successful
scans / scans (pull_request) Successful in 2m37s
static-gate / static-gate (pull_request) Successful in 6m16s
to ece7478546
Some checks failed
scans / scans (pull_request) Successful in 2m32s
static-gate / static-gate (pull_request) Has been cancelled
2026-08-19 11:02:35 +00:00
Compare
brenno force-pushed fix/visuele-modus-bron from ece7478546
Some checks failed
scans / scans (pull_request) Successful in 2m32s
static-gate / static-gate (pull_request) Has been cancelled
to 952a0c5eba
All checks were successful
scans / scans (pull_request) Successful in 2m51s
static-gate / static-gate (pull_request) Successful in 6m35s
2026-08-19 11:07:26 +00:00
Compare
brenno merged commit f3389a4933 into main 2026-08-19 11:14:56 +00:00
Sign in to join this conversation.
No description provided.