Documenteditor: geplakte opsommingen en nummering verliezen opmaak in grafische modus #2439

Closed
opened 2026-10-15 11:07:45 +00:00 by brenno · 3 comments
Owner

Melding

Bij kopiëren en plakken van een lijst in een document in de grafische/visuele modus verdwijnen bullets of nummering. De tekst komt wel mee, maar de lijststructuur niet.

Verwacht gedrag

Een opsomming blijft een opsomming en een genummerde lijst blijft genummerd na plakken en na opslaan/opnieuw openen. Behoud waar mogelijk ook inspringing, geneste niveaus en het begin-/vervolgnummer. Plakken op de visuele cursor mag bestaande tekst of lijststructuur eromheen niet beschadigen.

Onderzoek

  • Leg bronapp, besturingssysteem en klembordvarianten (HTML en platte tekst) vast bij reproductie. De exacte bron van de melding is nog onbekend.
  • Volg het pad van klembordlezer → HTML/tekst naar Markdown → Quill-invoeging → terugschrijven naar Markdown. Bepaal waar markers of lijst-attributen verdwijnen; neem geen oorzaak aan op basis van de melding alleen.
  • Vergelijk met eerdere reparaties #1595 (HTML-structuur), #1667/#2138 (visuele cursor) en #2398 (takenlijsten), zodat de oplossing geen bestaand gedrag terugdraait.

Acceptatie

  • Regressietest die vóór de reparatie faalt met een representatief klembordfragment van de getroffen bron en die na plakken én roundtrip door de grafische editor bullets, nummering en inspringing bewijst.
  • Toets daarnaast een gewone alinea, een geneste lijst en een takenlijst als naburige gevallen.
  • Documenteer de eventueel onvermijdelijke beperking wanneer de bron alleen platte tekst zonder lijstmarkeringen aanbiedt.
## Melding Bij kopiëren en plakken van een lijst in een document in de grafische/visuele modus verdwijnen bullets of nummering. De tekst komt wel mee, maar de lijststructuur niet. ## Verwacht gedrag Een opsomming blijft een opsomming en een genummerde lijst blijft genummerd na plakken en na opslaan/opnieuw openen. Behoud waar mogelijk ook inspringing, geneste niveaus en het begin-/vervolgnummer. Plakken op de visuele cursor mag bestaande tekst of lijststructuur eromheen niet beschadigen. ## Onderzoek - Leg bronapp, besturingssysteem en klembordvarianten (HTML en platte tekst) vast bij reproductie. De exacte bron van de melding is nog onbekend. - Volg het pad van klembordlezer → HTML/tekst naar Markdown → Quill-invoeging → terugschrijven naar Markdown. Bepaal waar markers of lijst-attributen verdwijnen; neem geen oorzaak aan op basis van de melding alleen. - Vergelijk met eerdere reparaties #1595 (HTML-structuur), #1667/#2138 (visuele cursor) en #2398 (takenlijsten), zodat de oplossing geen bestaand gedrag terugdraait. ## Acceptatie - Regressietest die vóór de reparatie faalt met een representatief klembordfragment van de getroffen bron en die na plakken én roundtrip door de grafische editor bullets, nummering en inspringing bewijst. - Toets daarnaast een gewone alinea, een geneste lijst en een takenlijst als naburige gevallen. - Documenteer de eventueel onvermijdelijke beperking wanneer de bron alleen platte tekst zonder lijstmarkeringen aanbiedt.
Author
Owner

Achterhaald voor deze melding: de bron is een ander OciDeck-document. Zie de bevestigde interne oorzaak in de volgende reactie.

Onderzoek (2026-10-15): de verliesplek zit voor ten minste één reproduceerbaar klembordformaat vóór de Quill-invoeging. resolveClipboardMarkdown kiest klembord-HTML, maar htmlClipboardToMarkdown herkent lijsten via semantische <ul>/<ol>/<li>-tags. Een proef met <ul><li>een</li><li>twee</li></ul> leverde `- een

  • tweeop. Dezelfde tekst als twee

    -alinea's leverde een

tweeop; die CSS-lijstaanwijzing wordt door de converter genegeerd. Als de platte-tekstvariant ook alleeneen
tweebevat, kan de fallback de verdwenen bullets of nummering niet herstellen. Een afzonderlijke proef metoperationsForVisualPaste+ QuillreplaceText` bevestigde dat aanwezige Markdown-bullets en nummering wel als lijst-attributen in het document belanden en de Markdown-roundtrip overleven. Reparatierichting: ondersteun aantoonbaar voorkomende niet-semantische HTML-lijsten van bronapps veilig in de klembordconversie, met een test op het daadwerkelijke bronfragment en een visuele roundtrip-test. Het exacte formaat van de melding is nog niet bevestigd: bronapp, OS en liefst een klein voorbeeld ontbreken. Een lijst die door de bron uitsluitend als ongemarkeerde platte tekst wordt aangeboden, is zonder extra aanwijzing niet betrouwbaar van gewone alinea's te onderscheiden.

**Achterhaald voor deze melding:** de bron is een ander OciDeck-document. Zie de bevestigde interne oorzaak in de volgende reactie. Onderzoek (2026-10-15): de verliesplek zit voor ten minste één reproduceerbaar klembordformaat vóór de Quill-invoeging. `resolveClipboardMarkdown` kiest klembord-HTML, maar `htmlClipboardToMarkdown` herkent lijsten via semantische `<ul>/<ol>/<li>`-tags. Een proef met `<ul><li>een</li><li>twee</li></ul>` leverde `- een - twee` op. Dezelfde tekst als twee `<p style="mso-list:…">`-alinea's leverde `een twee` op; die CSS-lijstaanwijzing wordt door de converter genegeerd. Als de platte-tekstvariant ook alleen `een twee` bevat, kan de fallback de verdwenen bullets of nummering niet herstellen. Een afzonderlijke proef met `operationsForVisualPaste` + Quill `replaceText` bevestigde dat aanwezige Markdown-bullets en nummering wel als lijst-attributen in het document belanden en de Markdown-roundtrip overleven. Reparatierichting: ondersteun aantoonbaar voorkomende niet-semantische HTML-lijsten van bronapps veilig in de klembordconversie, met een test op het daadwerkelijke bronfragment en een visuele roundtrip-test. Het exacte formaat van de melding is nog niet bevestigd: bronapp, OS en liefst een klein voorbeeld ontbreken. Een lijst die door de bron uitsluitend als ongemarkeerde platte tekst wordt aangeboden, is zonder extra aanwijzing niet betrouwbaar van gewone alinea's te onderscheiden.
Author
Owner

Correctie op mijn eerdere commentaar: de melding gaat over kopiëren binnen OciDeck. De HTML/CSS-hypothese voor externe bronapps verklaart deze melding niet.

Bevestigde oorzaak in de interne route: WysiwygNotesField._copySelection roept visualClipboardPayload aan. In lib/utils/visual_selection_markdown.dart kiest die functie alleen _markdownOfRange (met lijst-attributen) als de selectie exact op het begin van een Quill-regel start. Begint de selectie één teken verder, dan kiest zij document.getPlainText(...) voor de hele selectie. Daardoor verliezen ook volledig geselecteerde volgende lijstitems hun bullet of nummering. Bij het plakken ziet resolveClipboardMarkdown alleen die platte tekst; operationsForVisualPaste maakt er één alinea van.

Gerichte proef in een document met twee bullets: selectie vanaf de eerste regelstart gaf - eerste\n- tweede en twee Quill-bulletattributen. Dezelfde selectie vanaf één teken later gaf erste\ntweede en één gewone tekstbewerking zonder lijst-attributen. De tijdelijke proef is verwijderd; er zijn geen productbestanden aangepast.

Reparatie: verwerk een gedeeltelijke eerste regel als tekstfragment, maar serialiseer de daaropvolgende volledig geselecteerde regels met hun eigen blokopmaak. Behoud ook een gedeeltelijke laatste regel zonder ongewenste extra lijstregel. Voeg regressietests toe voor bullets én nummering, gedeeltelijke selecties, nestniveaus, takenlijsten, en plakken plus opslaan/opnieuw openen. Controleer daarnaast of kopiëren via het contextmenu dezelfde route gebruikt als Cmd/Ctrl+C.

Correctie op mijn eerdere commentaar: de melding gaat over kopiëren **binnen OciDeck**. De HTML/CSS-hypothese voor externe bronapps verklaart deze melding niet. Bevestigde oorzaak in de interne route: `WysiwygNotesField._copySelection` roept `visualClipboardPayload` aan. In `lib/utils/visual_selection_markdown.dart` kiest die functie alleen `_markdownOfRange` (met lijst-attributen) als de selectie exact op het begin van een Quill-regel start. Begint de selectie één teken verder, dan kiest zij `document.getPlainText(...)` voor de *hele* selectie. Daardoor verliezen ook volledig geselecteerde volgende lijstitems hun bullet of nummering. Bij het plakken ziet `resolveClipboardMarkdown` alleen die platte tekst; `operationsForVisualPaste` maakt er één alinea van. Gerichte proef in een document met twee bullets: selectie vanaf de eerste regelstart gaf `- eerste\n- tweede` en twee Quill-bulletattributen. Dezelfde selectie vanaf één teken later gaf `erste\ntweede` en één gewone tekstbewerking zonder lijst-attributen. De tijdelijke proef is verwijderd; er zijn geen productbestanden aangepast. Reparatie: verwerk een gedeeltelijke eerste regel als tekstfragment, maar serialiseer de daaropvolgende volledig geselecteerde regels met hun eigen blokopmaak. Behoud ook een gedeeltelijke laatste regel zonder ongewenste extra lijstregel. Voeg regressietests toe voor bullets én nummering, gedeeltelijke selecties, nestniveaus, takenlijsten, en plakken plus opslaan/opnieuw openen. Controleer daarnaast of kopiëren via het contextmenu dezelfde route gebruikt als Cmd/Ctrl+C.
Author
Owner

Gemerged in #2446 (merge-commit 5fa2584504). Gecontroleerd met make check, make check-secrets en make sast; documentatie bijgewerkt (FILE_FORMAT, USER_GUIDE, PRIVACY, CHANGELOG).

Gemerged in https://pawprint.vigilis.online/LibreKAT/Ocideck/pulls/2446 (merge-commit 5fa2584504). Gecontroleerd met make check, make check-secrets en make sast; documentatie bijgewerkt (FILE_FORMAT, USER_GUIDE, PRIVACY, CHANGELOG).
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#2439
No description provided.