Slim plakken in de visuele editor gebruikt de oude broncursor #1667
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1667
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Probleem
Bij gewone tekst of HTML uit de Quill-editor schrijft Slim plakken rechtstreeks in de broncontroller. De actuele visuele caret wordt wel apart in _visualCaret bijgehouden, maar de bronselectie blijft staan waar zij vóór het wisselen naar Visueel stond. De geplakte tekst kan daardoor op de verkeerde plek terechtkomen waarna de visuele editor herlaadt.
Reproductie
Verwacht
Plakken gebruikt de actuele Quill-selectie/caret.
Technische aanwijzing
lib/widgets/document_editor_screen.dart:_smartPaste roept voor niet-tabellen _insertPastedMarkdown aan; die leest _controller.selection in plaats van _visualCaret of een visueel insert-signaal. _insertBlock kent deze visuele route wel.
Gevonden bij audit van commit
d439638c6b.Triage: accepted
Bevestigd tegen
main(e93ef205c)._insertPastedMarkdown(lib/widgets/parts/document_editor_layouts.dart) leest_controller.selection— de cursor van de bron-controller. In de visuele stand staat die waar hij stond vóór het wisselen; de echte caret leeft in Quill en wordt apart in_visualCaretbijgehouden._insertBlockkent die weg wél:lib/widgets/document_editor_screen.dartstuurt in Visueel (en als het document rondreist) door naar_requestVisualInsert. De tak voor platte tekst en HTML slaat dat over.Oplossingsrichting
Eerste keus:
_insertPastedMarkdownlangs dezelfde poort sturen als_insertBlock— dus in Visueel + rondreisbaar het geplakte fragment als invoegsignaal aan de editor geven in plaats van het in de bron te schrijven. Controleer ofinsertMarkdownBlockdaarvoor bruikbaar is; het verschil met een blok is dat een plak inline mag landen (midden in een alinea), en dat moet het signaal kunnen dragen.Tweede keus, als dat signaal geen inline-invoeging aankan:
_visualCaretnaar een bronpositie vertalen metMarkdownCaretMap.of(text).sourceOffsetOf(...)— exact de omzetting die_changeViewMode(document_editor_screen.dart) al doet — en op dát punt invoegen. Dan herlaadt de visuele editor daarna wel, maar op de goede plek.Regressietest (verplicht)
test/document_editor_screen_test.dart: rondreisbaar document in Visueel, Quill-caret naar de tweede alinea, platte tekst plakken → de tekst staat bij die caret, niet op de oude bronpositie. Herhaal met HTML op het klembord, want dat is een tweede tak inresolveClipboardMarkdown.Kosten
Klein tot middel, afhankelijk van of het invoegsignaal inline aankan.
Prioriteit
Middel: direct zichtbaar, en het leest voor de gebruiker als verlies van tekst.