Takenlijst verliest vakjes bij plakken en krijgt extra regels bij opslaan #2398
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2398
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Wat er misgaat
Twee verschijnselen, vermoedelijk één oorzaak.
- [ ]) knippen met Ctrl+X en plakken met Ctrl+V maakt de vakjes weg en trekt alles op één regel.- [ ].Wat de code nu doet
De lezer begrijpt een GFM-takenlijst.
_listIteminlib/widgets/reader/parts/document_markdown_blocks.darthaalt[ ]/[x]van de itemtekst en tekent een vakje. In de bronmodus zetMarkdownEditorActions.insertTaskhet voorvoegsel- [ ].De visuele editor niet.
MarkdownQuillCodec(lib/utils/markdown_quill_codec.dart) heeft embeds voor tabellen, voetnoten, mermaid en lijstblokken, maar geen takenlijst. De Quill-balk zetshowListCheckuit (lib/widgets/markdown_editor/wysiwyg_notes_toolbar.dart). Een vakje is in die laag dus gewone lijsttekst of een bolletje, niet een eigen kenmerk dat de terugweg weer als- [ ]schrijft.Plakken in het document gaat niet door Quill heen.
_smartPaste(lib/widgets/parts/document_editor_layouts.dart) leest platte tekst én HTML en laatresolveClipboardMarkdownkiezen. HTML wint van platte tekst zodra er HTML op het klembord staat (lib/utils/clipboard_markdown.dart).html_to_markdown.dartschrijft een lijstitem als-plus de kinderen (_convertListItem) en kent geen checkbox: een<input>verdwijnt. Staan de items in de HTML niet als aparte<li>’s, dan wordt het één regel. De platte tekst had de vakjes en de regeleinden nog kunnen hebben; die wordt dan niet gebruikt.Opslaan vanuit Visueel overschrijft het bestand niet met de Quill-rondgang.
_patchVisualSave(lib/widgets/shell/document_save_actions.dart, #1613) rekent een baseline (rondgang zónder bewerking) en plakt het verschil op de oorspronkelijke bron (patchVisualEditsinlib/utils/source_patcher.dart), per regel. Wijkt de rondgang van- [ ] puntaf van de regel op schijf — bolletje zonder vakje, of het vakje op een eigen regel — dan is dat verschil een “bewerking”. De patcher voegt hem toe. Dat is precies een extra- [ ]of een verdubbeld punt, terwijl de gebruiker alleen heeft opgeslagen of een ander stuk heeft aangeraakt.Oplossingsrichting
Eén rondgang voor GFM-takenlijsten, en de plak- en opslagpaden die daarop leunen.
- [ ]en- [x]heen en terug halen zonder er een regel bij te maken en zonder het vakje tot losse tekst te maken. Een vinkje in de visuele stand schrijft[x]terug; een leeg vakje schrijft[ ]. Geen nieuw dialect: het blijft gewone GFM.<input type="checkbox">wordt- [ ]of- [x], niet een bolletje en niet niets). Nooit beide achter elkaar invoegen.Bestandsformaat
Geen.
- [ ]/- [x]is bestaande GFM. Opslaan mag daar geen regel aan toevoegen en geen vakje van maken tot een gewoon bolletje.Test
Eerst rood, dan de reparatie.
- [ ] openen- [x] klaar, genest en met een gewone-eronder, komt uitmarkdownFromDocument(documentFromMarkdown(...))met dezelfde vakjes en hetzelfde aantal regels.- [ ]allebei.- [ ], geen tweede bolletje). Dekken metpatchVisualEditsén met het pad van_patchVisualSave.Kosten
Geen nieuwe interfacetekst als de vakjes blijven wat ze zijn. Een zin in de handleiding alleen als het gedrag naar buiten toe anders wordt uitgelegd. Geen afhankelijkheid, geen formaatwijziging.
Opgepakt. Tak: fix/document-werkvloer. Verwachte reikwijdte: lib/utils/markdown_quill_codec.dart, lib/utils/html_to_markdown.dart, lib/utils/clipboard_markdown.dart, lib/utils/source_patcher.dart, lib/widgets/shell/document_save_actions.dart.
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.