Paginaweergave telt eindnoten niet mee in de gemeten documenthoogte #1653

Closed
opened 2026-08-21 12:00:26 +00:00 by brenno · 1 comment
Owner

Probleem

Bij footnotePlacement=document voegt DocumentMarkdownView de eindnotenlijst buiten de blockWrapper toe. PagedDocumentView meet alleen blockTexts en krijgt daardoor geen hoogte voor de eindnoten. Lange eindnoten kunnen voorbij de laatste berekende pagina vallen en worden afgeknipt of onbereikbaar.

Reproductie

  1. Kies voetnoten achterin het document.
  2. Voeg genoeg/lange voetnoten toe om een extra pagina te vullen.
  3. Open de paginaweergave.

Verwacht

De eindnoten tellen als gewone documentblokken mee en veroorzaken zo nodig extra pagina's.

Technische aanwijzing

lib/widgets/reader/paged_document_view.dart:_measure gebruikt blockCount = _blockTexts.length en footnotesAtEnd=true, maar alleen widgets via blockWrapper leveren gemeten hoogtes.

Gevonden bij audit van commit d439638c6b.

## Probleem Bij footnotePlacement=document voegt DocumentMarkdownView de eindnotenlijst buiten de blockWrapper toe. PagedDocumentView meet alleen blockTexts en krijgt daardoor geen hoogte voor de eindnoten. Lange eindnoten kunnen voorbij de laatste berekende pagina vallen en worden afgeknipt of onbereikbaar. ## Reproductie 1. Kies voetnoten achterin het document. 2. Voeg genoeg/lange voetnoten toe om een extra pagina te vullen. 3. Open de paginaweergave. ## Verwacht De eindnoten tellen als gewone documentblokken mee en veroorzaken zo nodig extra pagina's. ## Technische aanwijzing lib/widgets/reader/paged_document_view.dart:_measure gebruikt blockCount = _blockTexts.length en footnotesAtEnd=true, maar alleen widgets via blockWrapper leveren gemeten hoogtes. Gevonden bij audit van commit d439638c6bd1b519d68d87680cb022b7d5eddc85.
Author
Owner

Triage: accepted

Bevestigd tegen main (e93ef205c). lib/widgets/reader/document_markdown_view.dart hangt _footnoteList(...) buiten _wrapped(...) in de kolom. blockWrapper ziet die lijst dus nooit, en PagedDocumentView._measure telt alleen _blockTexts.length plus (bij noten-op-de-pagina) de losse noten. Bij footnotePlacement=document is _notesOnPage onwaar, gaat footnotesAtEnd: true mee, en heeft de eindnotenlijst geen enkele gemeten hoogte. De paginaverdeling weet niet dat die tekst er is.

Oplossingsrichting

De eindnotenlijst een eigen blokindex geven en door blockWrapper sturen: _wrapped(blocks.length, _footnoteList(...)). Dan meet de paginaweergave hem als elk ander blok en volgt de paginering vanzelf. blockCount in _measure/_onMeasured wordt blocks.length + 1 wanneer footnotesAtEnd én er noten zijn.

Alternatief — de lijst apart meten in de paginaweergave — is slechter: dan staat dezelfde opmaak op twee plekken en lopen scherm en druk opnieuw uit elkaar.

Nuance die in het werk hoort: één blok voor álle eindnoten betekent dat de lijst alleen op blokniveau over vellen breekt. documentPageOffsets verdeelt een te hoog blok al over meerdere vensters (lib/services/document_pagination.dart, de tak height + reservedFor(index) > pageHeight), dus de noten blijven leesbaar. Per noot een blok is netter en is een grotere ingreep; niet nu.

Regressietest (verplicht)

test/paged_document_view_test.dart: footnotePlacement=document met genoeg noten voor een extra vel → het aantal vellen groeit mee en de laatste noot valt binnen het laatste vel.

Kosten

Twee bestanden (document_markdown_view.dart, paged_document_view.dart), plus test. Controleer of DocumentMarkdownView.blockTexts mee moet groeien — de zoek-/ankerindexen hangen aan dezelfde nummering.

Prioriteit

Middelhoog: inhoud verdwijnt zonder melding uit beeld.

## Triage: accepted **Bevestigd tegen `main` (e93ef205c).** `lib/widgets/reader/document_markdown_view.dart` hangt `_footnoteList(...)` buiten `_wrapped(...)` in de kolom. `blockWrapper` ziet die lijst dus nooit, en `PagedDocumentView._measure` telt alleen `_blockTexts.length` plus (bij noten-op-de-pagina) de losse noten. Bij `footnotePlacement=document` is `_notesOnPage` onwaar, gaat `footnotesAtEnd: true` mee, en heeft de eindnotenlijst geen enkele gemeten hoogte. De paginaverdeling weet niet dat die tekst er is. ## Oplossingsrichting De eindnotenlijst een eigen blokindex geven en door `blockWrapper` sturen: `_wrapped(blocks.length, _footnoteList(...))`. Dan meet de paginaweergave hem als elk ander blok en volgt de paginering vanzelf. `blockCount` in `_measure`/`_onMeasured` wordt `blocks.length + 1` wanneer `footnotesAtEnd` én er noten zijn. Alternatief — de lijst apart meten in de paginaweergave — is slechter: dan staat dezelfde opmaak op twee plekken en lopen scherm en druk opnieuw uit elkaar. Nuance die in het werk hoort: één blok voor álle eindnoten betekent dat de lijst alleen op blokniveau over vellen breekt. `documentPageOffsets` verdeelt een te hoog blok al over meerdere vensters (`lib/services/document_pagination.dart`, de tak `height + reservedFor(index) > pageHeight`), dus de noten blijven leesbaar. Per noot een blok is netter en is een grotere ingreep; niet nu. ## Regressietest (verplicht) `test/paged_document_view_test.dart`: `footnotePlacement=document` met genoeg noten voor een extra vel → het aantal vellen groeit mee en de laatste noot valt binnen het laatste vel. ## Kosten Twee bestanden (`document_markdown_view.dart`, `paged_document_view.dart`), plus test. Controleer of `DocumentMarkdownView.blockTexts` mee moet groeien — de zoek-/ankerindexen hangen aan dezelfde nummering. ## Prioriteit Middelhoog: inhoud verdwijnt zonder melding uit beeld.
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#1653
No description provided.