Zoek/vervangen: focus springt per karakter weg + HTML-fout na vervangen #1760
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#1760
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?
Wat wordt gevraagd
Twee problemen met zoeken/vervangen in de documenteditor:
Onderzoek
Probleem 1: focus springt weg per karakter
De zoekbalk (
MarkdownFindBar,lib/widgets/editors/markdown_find_bar.dart) geeftonQueryChanged: _find.setQuerydoor (lib/widgets/document_editor_screen.dart:767).FindReplaceSession.setQuery(lib/widgets/editors/find_replace_session.dart:103-106) roeptrecount(selectFirst: true)aan.recount(regel 133-158) doet twee dingen:onReveal(matches[index])aanroepen om naar de eerste treffer te springen.onRevealis_jumpToMatch(document_editor_screen.dart:789-802), dat in bron-modus_controller.selectionzet (focus naar de editor) en in visuele modus eensetStatemet_findSelectionSignal++(signaal naar de Quill-editor om de cursor te verplaatsen).Elk karakter in het zoekveld trekt dus de focus/cursor naar het document. Er bestaat al een methode
refreshWhileTyping(regel 163-175) die wél telt maar níet springt — maar die wordt alleen vanuit_onControllerChangedaangeroepen (typen in het document zelf), niet vanuit het zoekveld.Probleem 2: HTML-foutmelding na vervangen
replaceCurrent(regel 198-207) enreplaceAll(regel 212-225) zettencontroller.textop de nieuwe tekst. Dat activeert_onControllerChanged(document_editor_screen.dart:235-261), diemarkdownRoundTripsVisually(body)controleert (regel 250). Bevat de vervangtekst een constructie die de visuele laag niet aankan (rauwe HTML, ontsnapte leestekens), dan isisVisualEditfalse.De visuele editor (
MarkdownNotesEditor) herlaadt bij een externe controller-wijziging de tekst. Komt de nieuwe tekst niet verliesvrij door de Quill-brug, dan valt de editor terug op bewerkbare brontekst met een waarschuwingsregel (MarkdownVisualLimitation.rawHtml→ de HTML-foutmelding die de gebruiker zag). De fallback is correct gedrag (de bron bevat nu iets dat niet visueel kan), maar de gebruiker ervaart het als een onverwachte sprong.Voorgestelde oplossing
Probleem 1
Laat
setQueryniet naar de eerste treffer springen tijdens het typen. De kleinste diff:onQueryChangedin_findBar()doorgeven aan een nieuwe methode dierefreshWhileTyping-gedrag gebruikt (tellen zonder springen) in plaats vansetQuery. Of:setQueryeen parameterjump: boolgeven die standaardfalseis bij typen entruebij expliciet openen.Concreet: in
FindReplaceSessioneen methodeonQueryFieldChanged(String)toevoegen die_queryzet enrefreshWhileTyping()aanroept (tellen, geenonReveal).MarkdownFindBar.onQueryChangedbinden aan die methode.setQuery(met sprong) blijft vooropen()en programma-aanroepen.Probleem 2
Dit is grotendeels correct gedrag: een vervanging die HTML introduceert kan niet visueel. Twee verbeteringen:
replaceAllvooraf controleren of het resultaat nog visueel rondreist, en zo ja, de gebruiker waarschuwen vóór de actie in plaats van erna te laten terugvallen.Voorkeur: oplossing 1 (helderdere melding) als kleine diff; oplossing 2 als aanvulling wanneer de vervangtekst expliciet HTML bevat.
Impact