feat: niet-lineaire navigatie — de sprong-uit (fase 1+2 van #1162) #1189
No reviewers
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!1189
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/1162-nietlineaire-navigatie"
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?
Fase 1+2 van #1162 (niet-lineaire navigatie): de sprong-uit, op een herbruikbaar navigatiefundament. Het keuze-menu-diatype (feature 1) volgt als aparte PR hierop.
Wat dit doet
Een dia kan aangeven "hierna → dia X" in plaats van de eerstvolgende in bronvolgorde. Zo laat je een zijpad aan het eind terugkeren naar waar het aftakte.
Slide-velden die verliesvrij round-trippen als HTML-comments:anchor(<!-- ocideck_slide_anchor: … -->, stabiel doel-anker) ennextAnchor(<!-- ocideck_next: … -->, de sprong-uit). Beide leeg = een gewone dia, geen extra regel in het bestand._nexthonoreert de sprong (ook voorbij de laatste dia); "terug" volgt de werkelijk gelopen route via een navigatiestack (jouw keuze), niet de vorige brondia. Auto-play volgt dezelfde sprong maar vult de stack bewust niet (kiosk-lus zou hem laten groeien). Onvindbaar anker → fail-safe lineair, geen crash.Ontwerpkeuze (vastgelegd)
Stabiel mens-leesbaar anker i.p.v. index of uuid. Een index schuift bij invoegen/verwijderen; een kale uuid is onleesbaar in de ruwe
.md. Het anker wordt geseed uit de kop-slug en daarna bevroren opgeslagen — hernoemen breekt een link niet. Het volledige formaatontwerp staat in issue #1162.Bewaker-blik (formaat + publieke belofte geraakt)
<!-- ocideck_* -->-comments; elke Marp-lezer toont het deck lineair. Geen base64, mens-leesbaar anker..mden presenteert lineair in elk gereedschap — de uitgang is zo makkelijk als de ingang.Kwaliteit
make checkvolledig groen (analyze, format, conventies, methodelengte, dode code, hardcoded-tekst, l10n 23/23, volledige testsuite, dekkingsvloeren incl. per-file).make check-secrets(gitleaks + trufflehog) enmake sast(semgrep) schoon: 0 findings.setSlideJump.slide_anchors.dart, top-level_indexOfAnchor/_firstDirective).Nog niet in deze PR
Maakt de sprong-uit bruikbaar zonder Markdown te typen. In de slide-instellingen ("Tijdens presenteren") staat nu "Hierna": een keuzelijst die de dia's op kop toont. Kies je een doeldia, dan krijgt die zo nodig een uniek, bevroren anker en wijst deze dia daarheen — de gebruiker kiest een dia, nooit een anker. - `slide_anchors.dart`: pure helpers `slugifyAnchor` (ASCII-veilige slug uit de kop, terugval `dia`), `uniqueAnchor` (botsing → `-2`, `-3`, …) en `slidesWithJump` (de lijstberekening achter de deck-operatie, los testbaar). - `DeckNotifier.setSlideJump`: dunne delegator die beide dia's in één stap muteert; `null`-doel wist de sprong, sprong-naar-zichzelf wordt genegeerd. - Editor: de "Hierna"-rij + een "Sprong"-badge in de ingeklapte kop (zichtbare staat), en een waarschuwing als de doeldia verwijderd is (verweesde verwijzing, geen crash). - l10n: vijf nieuwe strings in alle 31 talen + Engelse fallback. - Tests voor de helpers en de deck-operatie (anker toekennen, bevriezen, wissen, self-sprong negeren). Baselines (class/method) opgerekt met de exacte, gemotiveerde delta; de pure berekening is bewust uit de klasse en de parse-methode getild. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>