Zoeken en springen: één herkenbare gebruikersreis voor documenten en presentaties #2705

Open
opened 2026-11-02 21:49:02 +00:00 by brenno · 1 comment
Owner

Doel en prioriteit

Als gebruiker wil ik een tekst kunnen vinden, begrijpen waar die staat en er direct naartoe springen, zonder van weergave te hoeven wisselen of zelf verder te zoeken. Maximale gebruikersvriendelijkheid is het leidende criterium. Dit overzicht legt het gezamenlijke gedrag vast; de gekoppelde uitvoerissues leveren de werkende routes.

Onderzoek en huidige situatie

Codeonderzoek op origin/main d96a06bf8f851a362855b3821853ebd9aff17330 (2 november 2026), geen live reproductie en geen codewijzigingen:

  • lib/widgets/app_shell_main_layout.dart:404 opent in de gewone presentatie-editor FindReplaceDialog. Die heeft tellen en alles vervangen, maar geen trefferselectie of sprong.
  • lib/widgets/document_editor_screen.dart:681 schakelt bij zoeken vanuit Pagina’s naar Bron.
  • lib/widgets/editors/find_replace_session.dart en MarkdownFindBar bieden al tellen, vorige/volgende en markering voor broneditors. Hergebruik bruikbare onderdelen.
  • lib/widgets/panels/slide_list_panel.dart:125 filtert dia’s op een concatenatie van velden, notities en paden; het resultaat vertelt niet welk tekstveld de treffer bevat.

Gewenste gebruikersreis en gemeenschappelijk contract

  1. ‘Zoeken’, het menu, commandopalet en Ctrl/Cmd+F openen dezelfde niet-blokkerende zoekbediening binnen het actieve bestand. De huidige weergave blijft staan. Het zoekveld krijgt focus; geselecteerde, zichtbare tekst mag worden vooringevuld.
  2. Standaard letterlijk zoeken in zichtbare inhoud, hoofdletterongevoelig. Geen regex en geen verborgen bestandspaden/technische metadata. Linklabels en zichtbare code zijn inhoud. Een frase over inline opmaak heen blijft vindbaar. Sprekersnotities alleen via de zichtbare optie ‘Ook in sprekersnotities’ (standaard uit).
  3. Tijdens typen verschijnen de teller en een compacte resultatenlijst met gemarkeerde tekstcontext en locatie: ‘Dia 8 · Tabel’ of een hoofdstuktitel, en waar betrouwbaar een paginanummer. Een treffer is een voorkomen, niet alleen een dia met tekst.
  4. Typen behoudt focus en verandert geen inhoud. Eerste Enter opent de eerste voorgestelde treffer; volgende Enter/Shift+Enter gaat naar volgende/vorige. Eén klik op een resultaat springt rechtstreeks naar die treffer. Pijlknoppen hebben dezelfde werking. Na navigatie blijft verder typen in het zoekveld mogelijk.
  5. De exacte tekst komt volledig in beeld, met herkenbare actieve markering die niet uitsluitend op kleur berust. Geen extra knop om een veld eerst open te klappen. Na een sprong kan de gebruiker op de tekst klikken om verder te werken.
  6. Teller bijvoorbeeld ‘Treffer 2 van 7’. Meld rondlopen (‘Verder vanaf het begin’). Bij nul: ‘Geen resultaten. Probeer een kortere zoektekst.’ Een lege zoekvraag heeft geen treffers en veroorzaakt geen sprong.
  7. Escape sluit de zoekbediening en herstelt logische focus; opnieuw openen bewaart de zoekterm zolang dit bestand open is. Zoektermen en resultaten zijn per tab gescheiden en gaan niet naar schijf, logs, netwerk, exports of samenwerking.

Afbakening en veiligheidsgrenzen

Zoeken en vervangen zijn verschillende acties. Vervangen blijft een expliciete bestaande bewerkingsroute; zichtbare linktekst/code vindbaar maken mag de beveiliging van Markdown-syntax bij vervangen niet versoepelen. Geen nieuw bestandsformaat, afhankelijkheid, account, AI, OCR, zoekhistorie, zoekfunctie over alle bestanden of bulkvervanguitbreiding. Niet stil alle bestaande diafilters omdefiniëren; maak de verhouding met ‘Zoeken’ begrijpelijk.

Gezamenlijke acceptatie en toetsing

  • Alle routes met alleen toetsenbord, schermlezer (treffer én locatie), 200% tekst en smal venster bruikbaar; geen verborgen acties of overlopende balk. Nieuwe teksten via bestaande vertaalroute.
  • Zoeken, springen, sluiten en weergavewissels veranderen inhoud, dirty-state en undo/redo niet. Onopgeslagen tekst wordt wel meegenomen.
  • Bewerkingen, verwijderde dia’s en tabwissels geven geen verouderde posities of sprong in het verkeerde bestand; behoud de actieve treffer als die nog bestaat.
  • Unit/widgettests bewijzen inhoud, volgorde, bereikmapping en focus. Minstens één echte gebruikersreis per oppervlak moet de tekst buiten de huidige viewport daadwerkelijk tonen, inclusief soft-wrap en zoom. Alleen een teller- of selectietest is onvoldoende.
  • Meet bij 600 dia’s en 300 documentpagina’s met de bestaande schaalfixtures. Leg omgeving en tijden vast; op de referentiemachine uiterlijk binnen 300 ms na de laatste toetsaanslag actuele resultaten en binnen 300 ms na kiezen de treffer zichtbaar. Geen volledige parsing bij iedere render of oude resultaten die een nieuwere zoekvraag overschrijven.
  • Werk USER_GUIDE en relevante bronkaart bij. Gebruik de repository-native validatie bij implementatie; dit planningsissue vraagt geen codewijziging.

Werkvolgorde

Eerst de document- en presentatie-editorroutes volgens dit contract; die mogen onafhankelijk worden uitgewerkt met gedeelde bestaande helpers. Daarna privé zoeken tijdens presenteren. Sluit het overzicht pas nadat alle gekoppelde routes en echte gebruikersreizen zijn aanvaard.

Bestaande meldingen en verschil

De gesloten #1686 leverde de eerste documentzoekfunctie; #1760 en #1771 gingen over focus/vervangen; #2137 beschermde onzichtbare Markdown tegen tellen en herschrijven. Dit vervolg vraagt zichtbaar navigeren in de huidige weergave en volledige zichtbare inhoud. Het draait die beschermingen niet terug. Code die als code wordt getoond telt als inhoud; Mermaid/chart-specificaties, linkdoelen, comments en metadata tellen niet als zichtbare code. De eerdere oplossingen zijn geen bewijs dat deze zoek-en-springroute al volledig werkt.

Gekoppelde uitvoerissues

  • #2706 — Documenten: zoek en spring naar exacte tekst in Visueel, Bron en Pagina’s
  • #2707 — Presentatie-editor: van tekst zoeken naar de juiste dia én het juiste tekstveld springen
  • #2708 — Tijdens presenteren: privé een passage vinden en bewust naar de gevonden dia springen
## Doel en prioriteit Als gebruiker wil ik een tekst kunnen vinden, begrijpen waar die staat en er direct naartoe springen, zonder van weergave te hoeven wisselen of zelf verder te zoeken. Maximale gebruikersvriendelijkheid is het leidende criterium. Dit overzicht legt het gezamenlijke gedrag vast; de gekoppelde uitvoerissues leveren de werkende routes. ## Onderzoek en huidige situatie Codeonderzoek op origin/main `d96a06bf8f851a362855b3821853ebd9aff17330` (2 november 2026), geen live reproductie en geen codewijzigingen: - `lib/widgets/app_shell_main_layout.dart:404` opent in de gewone presentatie-editor FindReplaceDialog. Die heeft tellen en alles vervangen, maar geen trefferselectie of sprong. - `lib/widgets/document_editor_screen.dart:681` schakelt bij zoeken vanuit Pagina’s naar Bron. - `lib/widgets/editors/find_replace_session.dart` en MarkdownFindBar bieden al tellen, vorige/volgende en markering voor broneditors. Hergebruik bruikbare onderdelen. - `lib/widgets/panels/slide_list_panel.dart:125` filtert dia’s op een concatenatie van velden, notities en paden; het resultaat vertelt niet welk tekstveld de treffer bevat. ## Gewenste gebruikersreis en gemeenschappelijk contract 1. ‘Zoeken’, het menu, commandopalet en Ctrl/Cmd+F openen dezelfde niet-blokkerende zoekbediening binnen het actieve bestand. De huidige weergave blijft staan. Het zoekveld krijgt focus; geselecteerde, zichtbare tekst mag worden vooringevuld. 2. Standaard letterlijk zoeken in zichtbare inhoud, hoofdletterongevoelig. Geen regex en geen verborgen bestandspaden/technische metadata. Linklabels en zichtbare code zijn inhoud. Een frase over inline opmaak heen blijft vindbaar. Sprekersnotities alleen via de zichtbare optie ‘Ook in sprekersnotities’ (standaard uit). 3. Tijdens typen verschijnen de teller en een compacte resultatenlijst met gemarkeerde tekstcontext en locatie: ‘Dia 8 · Tabel’ of een hoofdstuktitel, en waar betrouwbaar een paginanummer. Een treffer is een voorkomen, niet alleen een dia met tekst. 4. Typen behoudt focus en verandert geen inhoud. Eerste Enter opent de eerste voorgestelde treffer; volgende Enter/Shift+Enter gaat naar volgende/vorige. Eén klik op een resultaat springt rechtstreeks naar die treffer. Pijlknoppen hebben dezelfde werking. Na navigatie blijft verder typen in het zoekveld mogelijk. 5. De exacte tekst komt volledig in beeld, met herkenbare actieve markering die niet uitsluitend op kleur berust. Geen extra knop om een veld eerst open te klappen. Na een sprong kan de gebruiker op de tekst klikken om verder te werken. 6. Teller bijvoorbeeld ‘Treffer 2 van 7’. Meld rondlopen (‘Verder vanaf het begin’). Bij nul: ‘Geen resultaten. Probeer een kortere zoektekst.’ Een lege zoekvraag heeft geen treffers en veroorzaakt geen sprong. 7. Escape sluit de zoekbediening en herstelt logische focus; opnieuw openen bewaart de zoekterm zolang dit bestand open is. Zoektermen en resultaten zijn per tab gescheiden en gaan niet naar schijf, logs, netwerk, exports of samenwerking. ## Afbakening en veiligheidsgrenzen Zoeken en vervangen zijn verschillende acties. Vervangen blijft een expliciete bestaande bewerkingsroute; zichtbare linktekst/code vindbaar maken mag de beveiliging van Markdown-syntax bij vervangen niet versoepelen. Geen nieuw bestandsformaat, afhankelijkheid, account, AI, OCR, zoekhistorie, zoekfunctie over alle bestanden of bulkvervanguitbreiding. Niet stil alle bestaande diafilters omdefiniëren; maak de verhouding met ‘Zoeken’ begrijpelijk. ## Gezamenlijke acceptatie en toetsing - Alle routes met alleen toetsenbord, schermlezer (treffer én locatie), 200% tekst en smal venster bruikbaar; geen verborgen acties of overlopende balk. Nieuwe teksten via bestaande vertaalroute. - Zoeken, springen, sluiten en weergavewissels veranderen inhoud, dirty-state en undo/redo niet. Onopgeslagen tekst wordt wel meegenomen. - Bewerkingen, verwijderde dia’s en tabwissels geven geen verouderde posities of sprong in het verkeerde bestand; behoud de actieve treffer als die nog bestaat. - Unit/widgettests bewijzen inhoud, volgorde, bereikmapping en focus. Minstens één echte gebruikersreis per oppervlak moet de tekst buiten de huidige viewport daadwerkelijk tonen, inclusief soft-wrap en zoom. Alleen een teller- of selectietest is onvoldoende. - Meet bij 600 dia’s en 300 documentpagina’s met de bestaande schaalfixtures. Leg omgeving en tijden vast; op de referentiemachine uiterlijk binnen 300 ms na de laatste toetsaanslag actuele resultaten en binnen 300 ms na kiezen de treffer zichtbaar. Geen volledige parsing bij iedere render of oude resultaten die een nieuwere zoekvraag overschrijven. - Werk USER_GUIDE en relevante bronkaart bij. Gebruik de repository-native validatie bij implementatie; dit planningsissue vraagt geen codewijziging. ## Werkvolgorde Eerst de document- en presentatie-editorroutes volgens dit contract; die mogen onafhankelijk worden uitgewerkt met gedeelde bestaande helpers. Daarna privé zoeken tijdens presenteren. Sluit het overzicht pas nadat alle gekoppelde routes en echte gebruikersreizen zijn aanvaard. ## Bestaande meldingen en verschil De gesloten #1686 leverde de eerste documentzoekfunctie; #1760 en #1771 gingen over focus/vervangen; #2137 beschermde onzichtbare Markdown tegen tellen en herschrijven. Dit vervolg vraagt zichtbaar navigeren in de huidige weergave en volledige zichtbare inhoud. Het draait die beschermingen niet terug. Code die als code wordt getoond telt als inhoud; Mermaid/chart-specificaties, linkdoelen, comments en metadata tellen niet als zichtbare code. De eerdere oplossingen zijn geen bewijs dat deze zoek-en-springroute al volledig werkt. ## Gekoppelde uitvoerissues - [ ] #2706 — Documenten: zoek en spring naar exacte tekst in Visueel, Bron en Pagina’s - [ ] #2707 — Presentatie-editor: van tekst zoeken naar de juiste dia én het juiste tekstveld springen - [ ] #2708 — Tijdens presenteren: privé een passage vinden en bewust naar de gevonden dia springen
Author
Owner

Opgepakt op tak codex/zoeken-en-springen in een geïsoleerde worktree. Reikwijdte: gedeelde zoeklogica/balk, documenteditor en paginaweergave, presentatie-editor en privé presentatorzoeken, regressies, vertalingen en gebruikersdocumentatie. Bestaande Markdown-vervangbescherming en projectiegrens blijven leidend.

Opgepakt op tak `codex/zoeken-en-springen` in een geïsoleerde worktree. Reikwijdte: gedeelde zoeklogica/balk, documenteditor en paginaweergave, presentatie-editor en privé presentatorzoeken, regressies, vertalingen en gebruikersdocumentatie. Bestaande Markdown-vervangbescherming en projectiegrens blijven leidend.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2705
No description provided.