Tags op documenten, doorzoekbaar op projectcode en soort #2395

Closed
opened 2026-10-12 11:52:56 +00:00 by brenno · 2 comments
Owner

Wat je wilt

Tags op een document, zodat je in het openscherm kunt zoeken op projectcode, soort document en andere kenmerken die niet in de lopende tekst hoeven te staan. Nu kun je die kenmerken niet als tag zetten, en zoeken is alleen vrije tekst over het hele bestand.

Wat de code nu doet

Een presentatie heeft al keywords: in de front matter, als kommagescheiden tekst, bewerkbaar onder Presentatie-info (lib/models/deck.dart, lib/widgets/dialogs/presentation_info_dialog.dart, kOwnedFrontMatterKeys in lib/services/front_matter_merge.dart). Het openscherm zoekt in bestandsnaam, titel en de ruwe bron, dus een trefwoord dat toevallig in die tekst staat komt mee — maar er is geen tagfilter (lib/widgets/dialogs/open_presentation_dialog.dart, _matching).

Een document heeft vrije éénregelige velden (title, subtitle, author, plus zelfgekozen sleutels) in lib/widgets/parts/document_fields_dialog.dart. keywords is een geldige veldsleutel (isValidDocumentFieldKey) en geen gereserveerde documentsleutel (kDocumentOwnedKeys in lib/utils/document_front_matter.dart). Je kunt hem dus met de hand als vrij veld typen. Het eigenschappenvenster biedt hem niet aan, en het openscherm behandelt hem niet als tag.

FILE_FORMAT §14.12 staat alleen een scalair op één regel toe. Een YAML-lijst (tags:) is vreemde front matter: die blijft byte-voor-byte staan en is geen documentveld. Een eigen ocideck_tags-sleutel zou een privédialect zijn, en dat formaat kennen we niet.

Oplossingsrichting

Gebruik het woord dat presentaties en Pandoc al kennen: keywords:, één kommagescheiden regel. Geen nieuwe sleutel, geen reeks.

  • In de documenteigenschappen een tagveld (chips in de dialoog, één regel op schijf). Leeg betekent: de sleutel weg, net als bij de andere eigen sleutels.
  • In Presentatie-info het bestaande trefwoordveld dezelfde chips geven, zodat document en presentatie hetzelfde begrip zijn.
  • In het openscherm een tagfilter naast de vrije tekst: een bestand past als elke gekozen tag in zijn keywords staat. Projectcode en soort document zijn tags die de gebruiker zelf kiest; bouw er geen taxonomie voor.
  • Vrije tekst blijft de bron doorzoeken. Het tagfilter kijkt alleen naar keywords, anders is een toevallig woord in een alinea een tagtreffer.

Schrijven blijft byte-chirurgisch op die ene regel (withDocumentFrontMatterKey / withDocumentFields), de rest van het bestand onaangeroerd.

Bestandsformaat

Geen nieuw dialect. keywords: staat al in FILE_FORMAT voor presentaties. Voor documenten wordt het een veld dat het documentpad zelf mag schrijven, naast de bestaande eigen sleutels, met dezelfde uitgang: leeg halen verwijdert de regel. Dat hoort in §14.12 en in kDocumentOwnedKeys, anders blijft een lege tagregel voor altijd in het bestand staan.

Niet doen: een YAML-sequentie, een ocideck_-sleutel, of tags alleen in een sidecar. Wie het bestand in een andere editor opent, moet de regel als gewone trefwoorden kunnen lezen.

Test

  • Tags zetten en weer wissen op een document zonder andere front matter: na wissen is het bestand weer byte-identiek aan de platte bron.
  • Een document met keywords: IR-2026, rapport verschijnt bij het tagfilter op IR-2026 en niet bij een filter op een woord dat alleen in de body staat.
  • Dezelfde filter vindt een presentatie op haar bestaande keywords:.
  • Een handgeschreven dubbele keywords:-regel blijft onder de bestaande duplicaatregel van documentvelden vallen.

Kosten

Nieuwe interfaceteksten (31 talen). FILE_FORMAT §14.12, USER_GUIDE en SOURCE_MAP bijwerken. Geen afhankelijkheid, geen nieuw slidetype.

## Wat je wilt Tags op een document, zodat je in het openscherm kunt zoeken op projectcode, soort document en andere kenmerken die niet in de lopende tekst hoeven te staan. Nu kun je die kenmerken niet als tag zetten, en zoeken is alleen vrije tekst over het hele bestand. ## Wat de code nu doet Een presentatie heeft al `keywords:` in de front matter, als kommagescheiden tekst, bewerkbaar onder Presentatie-info (`lib/models/deck.dart`, `lib/widgets/dialogs/presentation_info_dialog.dart`, `kOwnedFrontMatterKeys` in `lib/services/front_matter_merge.dart`). Het openscherm zoekt in bestandsnaam, titel en de ruwe bron, dus een trefwoord dat toevallig in die tekst staat komt mee — maar er is geen tagfilter (`lib/widgets/dialogs/open_presentation_dialog.dart`, `_matching`). Een document heeft vrije éénregelige velden (`title`, `subtitle`, `author`, plus zelfgekozen sleutels) in `lib/widgets/parts/document_fields_dialog.dart`. `keywords` is een geldige veldsleutel (`isValidDocumentFieldKey`) en geen gereserveerde documentsleutel (`kDocumentOwnedKeys` in `lib/utils/document_front_matter.dart`). Je kunt hem dus met de hand als vrij veld typen. Het eigenschappenvenster biedt hem niet aan, en het openscherm behandelt hem niet als tag. FILE_FORMAT §14.12 staat alleen een scalair op één regel toe. Een YAML-lijst (`tags:`) is vreemde front matter: die blijft byte-voor-byte staan en is geen documentveld. Een eigen `ocideck_tags`-sleutel zou een privédialect zijn, en dat formaat kennen we niet. ## Oplossingsrichting Gebruik het woord dat presentaties en Pandoc al kennen: `keywords:`, één kommagescheiden regel. Geen nieuwe sleutel, geen reeks. - In de documenteigenschappen een tagveld (chips in de dialoog, één regel op schijf). Leeg betekent: de sleutel weg, net als bij de andere eigen sleutels. - In Presentatie-info het bestaande trefwoordveld dezelfde chips geven, zodat document en presentatie hetzelfde begrip zijn. - In het openscherm een tagfilter naast de vrije tekst: een bestand past als elke gekozen tag in zijn `keywords` staat. Projectcode en soort document zijn tags die de gebruiker zelf kiest; bouw er geen taxonomie voor. - Vrije tekst blijft de bron doorzoeken. Het tagfilter kijkt alleen naar `keywords`, anders is een toevallig woord in een alinea een tagtreffer. Schrijven blijft byte-chirurgisch op die ene regel (`withDocumentFrontMatterKey` / `withDocumentFields`), de rest van het bestand onaangeroerd. ## Bestandsformaat Geen nieuw dialect. `keywords:` staat al in FILE_FORMAT voor presentaties. Voor documenten wordt het een veld dat het documentpad zelf mag schrijven, naast de bestaande eigen sleutels, met dezelfde uitgang: leeg halen verwijdert de regel. Dat hoort in §14.12 en in `kDocumentOwnedKeys`, anders blijft een lege tagregel voor altijd in het bestand staan. Niet doen: een YAML-sequentie, een `ocideck_`-sleutel, of tags alleen in een sidecar. Wie het bestand in een andere editor opent, moet de regel als gewone trefwoorden kunnen lezen. ## Test - Tags zetten en weer wissen op een document zonder andere front matter: na wissen is het bestand weer byte-identiek aan de platte bron. - Een document met `keywords: IR-2026, rapport` verschijnt bij het tagfilter op `IR-2026` en niet bij een filter op een woord dat alleen in de body staat. - Dezelfde filter vindt een presentatie op haar bestaande `keywords:`. - Een handgeschreven dubbele `keywords:`-regel blijft onder de bestaande duplicaatregel van documentvelden vallen. ## Kosten Nieuwe interfaceteksten (31 talen). FILE_FORMAT §14.12, USER_GUIDE en SOURCE_MAP bijwerken. Geen afhankelijkheid, geen nieuw slidetype.
Author
Owner

Opgepakt. Tak: fix/document-werkvloer. Verwachte reikwijdte: lib/utils/document_front_matter.dart, lib/widgets/parts/document_fields_dialog.dart, lib/widgets/dialogs/presentation_info_dialog.dart, lib/widgets/dialogs/open_presentation_dialog.dart, docs/FILE_FORMAT.md.

Opgepakt. Tak: fix/document-werkvloer. Verwachte reikwijdte: lib/utils/document_front_matter.dart, lib/widgets/parts/document_fields_dialog.dart, lib/widgets/dialogs/presentation_info_dialog.dart, lib/widgets/dialogs/open_presentation_dialog.dart, docs/FILE_FORMAT.md.
Author
Owner

Geland op main in 597353b59, via PR #2401.

ZAP/DAST is niet gedraaid: ZAP is niet geïnstalleerd. Geheimen-scan en SAST zijn lokaal wel gedraaid, vóór de merge.

Geland op main in 597353b59, via PR #2401. ZAP/DAST is niet gedraaid: ZAP is niet geïnstalleerd. Geheimen-scan en SAST zijn lokaal wel gedraaid, vóór de merge.
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#2395
No description provided.