Presentatie-editor: van tekst zoeken naar de juiste dia én het juiste tekstveld springen #2707

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

Onderdeel van #2705.

Probleem

In de gewone dia-editor geeft Ctrl/Cmd+F een aantal treffers maar geen manier om naar een treffer te gaan. Een gebruiker moet alsnog dia’s en velden aflopen. Het bestaande diafilter toont miniaturen zonder de gevonden passage.

Codebewijs en route

Statisch onderzocht op main d96a06bf8f851a362855b3821853ebd9aff17330 (geen live reproductie):

  • lib/widgets/app_shell_main_layout.dart:404-417 opent FindReplaceDialog. lib/widgets/dialogs/find_replace_dialog.dart ontvangt alleen een teller en alles-vervangen-callback; het kent geen resultaten, vorige/volgende of reveal.
  • lib/state/deck_provider.dart:547-620 kent telbare velden, waaronder tabellen en kolomtitels. De vaste veldlijst is geen dekkingsbewijs voor alle zichtbare tekst van elk slidetype.
  • lib/widgets/panels/slide_list_panel.dart:125-154,478-535 filtert losse woorden (AND) door o.a. notities en bestandspaden, zonder treffercontext. Tabelcellen/kolomtitels ontbreken in deze filterlijst.
  • De Markdown-deckeditor heeft al FindReplaceSession. Zijn _jumpToRange (lib/widgets/editors/markdown_deck_editor.dart:346) schat scrollpositie als regelnummer × regelhoogte; verifieer soft-wrap in plaats van alleen de selectie.

Gewenste route

Volg het gemeenschappelijke contract: Ctrl/Cmd+F opent ‘Zoeken’ met resultaten binnen de huidige presentatie. Een resultaat toont bijvoorbeeld ‘Dia 8 · Tabel · rij 3, kolom 2’ plus de gemarkeerde context. Eén klik opent dia 8, maakt het juiste veld zichtbaar en markeert de tekst. Geen verplichte Markdown-stand en geen vervangveld bij alleen zoeken. In Markdown werkt dezelfde verwachting en komt de exacte bronpassage werkelijk in beeld.

Standaard zichtbare dia-inhoud, notities alleen via ‘Ook in sprekersnotities’. Een notitietreffer vermeldt dat en opent het eigen notitieveld. Inventariseer de zichtbare tekst van alle bestaande slidetype-editors; voorkom een tweede onvolledige veldlijst. Hergebruik bestaande tekstextractie waar correct en het gedeelde sessie-/balkpatroon waar bruikbaar.

Acceptatiecriteria

  • Zoeken heeft resultaten per voorkomen, duidelijke dia-/veldlocatie, teller en rechtstreekse navigatie; twee dezelfde woorden op één dia blijven apart bereikbaar.
  • Titels, kolomtitels, bullets, citaten, onderschriften, tabelcellen en zichtbare Markdown/link-/code-inhoud zijn afgedekt. Leg voor overige typen expliciet vast welke zichtbare tekst wordt gevonden; geen stil ondoorzoekbare tekst.
  • Eén klik of Enter selecteert de juiste dia en toont het exacte veld en tekstbereik, ook buiten de viewport of in een aanvankelijk ingeklapt paneel.
  • Eerste Enter na typen opent treffer 1; volgende/vorige volgt diavolgorde en leesvolgorde binnen de dia. Zoeken naar een frase heeft dezelfde betekenis als bij documenten.
  • Typen houdt zoekveldfocus; navigeren wijzigt de presentatie niet. Geen ongevraagd overschakelen naar Bron of starten van presentatie.
  • Notities standaard uit, expliciet herkenbaar aan te zetten. Paden en technische metadata leveren geen verwarrende standaardtreffers.
  • In Markdown springt de treffer bij lange gewrapte regels, zoom en gemengde inhoud echt in beeld.
  • Dia’s verplaatsen/verwijderen, tekst wijzigen en tabs wisselen veroorzaken geen sprong naar een verkeerde dia/oud bereik. Identiteit volgt de dia, niet uitsluitend de oude index.
  • Bestaand diafilter blijft begrijpelijk; nieuwe globale zoekactie introduceert geen tweede onduidelijk identieke zoekknop.
  • Alle toegankelijkheids-, prestatie-, vertaal- en niet-mutatie-eisen uit het overzicht gelden.

Verificatie en grens

Gerichte unit/widget-regressies voor de bestaande alleen-teller-route, velddekking, eerste Enter, exacte selectie en focus. Breid test/find_replace_dialog_test.dart, test/find_replace_session_test.dart, test/text_search_test.dart en de relevante editor-tests uit. Gebruik een deck met herhaalde tekst, tabel, notities, linklabel en lange Markdown-regel. Toets de hele reis draaiend en visueel, op de onderste dia van een groot deck, en via de echte webroute naast desktop waar ondersteund. Zoekresultaten gaan niet het bestand of export in. Geen bibliotheekzoeker of bulkvervanguitbreiding.

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.

Onderdeel van #2705. ## Probleem In de gewone dia-editor geeft Ctrl/Cmd+F een aantal treffers maar geen manier om naar een treffer te gaan. Een gebruiker moet alsnog dia’s en velden aflopen. Het bestaande diafilter toont miniaturen zonder de gevonden passage. ## Codebewijs en route Statisch onderzocht op main `d96a06bf8f851a362855b3821853ebd9aff17330` (geen live reproductie): - `lib/widgets/app_shell_main_layout.dart:404-417` opent FindReplaceDialog. `lib/widgets/dialogs/find_replace_dialog.dart` ontvangt alleen een teller en alles-vervangen-callback; het kent geen resultaten, vorige/volgende of reveal. - `lib/state/deck_provider.dart:547-620` kent telbare velden, waaronder tabellen en kolomtitels. De vaste veldlijst is geen dekkingsbewijs voor alle zichtbare tekst van elk slidetype. - `lib/widgets/panels/slide_list_panel.dart:125-154,478-535` filtert losse woorden (AND) door o.a. notities en bestandspaden, zonder treffercontext. Tabelcellen/kolomtitels ontbreken in deze filterlijst. - De Markdown-deckeditor heeft al FindReplaceSession. Zijn `_jumpToRange` (`lib/widgets/editors/markdown_deck_editor.dart:346`) schat scrollpositie als regelnummer × regelhoogte; verifieer soft-wrap in plaats van alleen de selectie. ## Gewenste route Volg het gemeenschappelijke contract: Ctrl/Cmd+F opent ‘Zoeken’ met resultaten binnen de huidige presentatie. Een resultaat toont bijvoorbeeld ‘Dia 8 · Tabel · rij 3, kolom 2’ plus de gemarkeerde context. Eén klik opent dia 8, maakt het juiste veld zichtbaar en markeert de tekst. Geen verplichte Markdown-stand en geen vervangveld bij alleen zoeken. In Markdown werkt dezelfde verwachting en komt de exacte bronpassage werkelijk in beeld. Standaard zichtbare dia-inhoud, notities alleen via ‘Ook in sprekersnotities’. Een notitietreffer vermeldt dat en opent het eigen notitieveld. Inventariseer de zichtbare tekst van alle bestaande slidetype-editors; voorkom een tweede onvolledige veldlijst. Hergebruik bestaande tekstextractie waar correct en het gedeelde sessie-/balkpatroon waar bruikbaar. ## Acceptatiecriteria - [ ] Zoeken heeft resultaten per voorkomen, duidelijke dia-/veldlocatie, teller en rechtstreekse navigatie; twee dezelfde woorden op één dia blijven apart bereikbaar. - [ ] Titels, kolomtitels, bullets, citaten, onderschriften, tabelcellen en zichtbare Markdown/link-/code-inhoud zijn afgedekt. Leg voor overige typen expliciet vast welke zichtbare tekst wordt gevonden; geen stil ondoorzoekbare tekst. - [ ] Eén klik of Enter selecteert de juiste dia en toont het exacte veld en tekstbereik, ook buiten de viewport of in een aanvankelijk ingeklapt paneel. - [ ] Eerste Enter na typen opent treffer 1; volgende/vorige volgt diavolgorde en leesvolgorde binnen de dia. Zoeken naar een frase heeft dezelfde betekenis als bij documenten. - [ ] Typen houdt zoekveldfocus; navigeren wijzigt de presentatie niet. Geen ongevraagd overschakelen naar Bron of starten van presentatie. - [ ] Notities standaard uit, expliciet herkenbaar aan te zetten. Paden en technische metadata leveren geen verwarrende standaardtreffers. - [ ] In Markdown springt de treffer bij lange gewrapte regels, zoom en gemengde inhoud echt in beeld. - [ ] Dia’s verplaatsen/verwijderen, tekst wijzigen en tabs wisselen veroorzaken geen sprong naar een verkeerde dia/oud bereik. Identiteit volgt de dia, niet uitsluitend de oude index. - [ ] Bestaand diafilter blijft begrijpelijk; nieuwe globale zoekactie introduceert geen tweede onduidelijk identieke zoekknop. - [ ] Alle toegankelijkheids-, prestatie-, vertaal- en niet-mutatie-eisen uit het overzicht gelden. ## Verificatie en grens Gerichte unit/widget-regressies voor de bestaande alleen-teller-route, velddekking, eerste Enter, exacte selectie en focus. Breid `test/find_replace_dialog_test.dart`, `test/find_replace_session_test.dart`, `test/text_search_test.dart` en de relevante editor-tests uit. Gebruik een deck met herhaalde tekst, tabel, notities, linklabel en lange Markdown-regel. Toets de hele reis draaiend en visueel, op de onderste dia van een groot deck, en via de echte webroute naast desktop waar ondersteund. Zoekresultaten gaan niet het bestand of export in. Geen bibliotheekzoeker of bulkvervanguitbreiding. ## 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.
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#2707
No description provided.