Opsommingseditor knipt het derde niveau van een lijst met 4 spaties inspringing af #1558
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#1558
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
De parser rekent 2 spaties per niveau
(
lib/services/markdown_parse/markdown_service_parse_body.dart:195-206), maarMarkdown schrijf en plak je doorgaans met 4 spaties. Een lijst van drie
zichtbare niveaus landt daardoor intern op niveau 0, 2 en 4 — en vier niveaus op
0, 2, 4 en 6.
De visuele opsommingseditor kent een plafond van 4:
lib/widgets/editors/bullets_editor.dart:65—static const _maxLevel = 4;:150—_levelOfstopt met tellen bij_maxLevel:192—_emitschrijft het geklemde niveau terugGevolg: open zo'n dia in de visuele editor en raak er iets aan, dan zakt het
vierde zichtbare niveau naar het derde. Dat is niet terug te draaien met
ongedaan maken in het bronvenster, want de dia is dan al herschreven.
Wat wél goed gaat
De rondrit door de bron zelf is tekenstabiel — gemeten:
parseren geeft niveaus
[0, 2, 4, 6]en serialiseren zet er weer 0/4/8/12spaties neer. Het verlies zit uitsluitend in de visuele editor.
Wat het zou moeten doen
Twee dingen om te wegen, niet allebei tegelijk:
_maxLevelmeebeweegt met de 2-spaties-conventie. Dan haalt een lijst vanvier zichtbare niveaus het wél.
dieper genest niveau opent, hoort dat te zien — en het niveau hoort te
blijven staan zolang hij er niet aan komt.
Voorkeur gaat uit naar 2 met behoud:
_emitmag geen niveau terugschrijven datde gebruiker niet zelf heeft gezet.
Waar het vandaan komt
Gevonden bij het toetsen van #1556. Van alles wat ik daar tegenkwam lijkt dit
het meest op "de inspringing is verdwenen", al is het niet het geplakte pad dat
de indiener beschrijft.
Bestandsformaat
Raakt het formaat niet — tabs blijven de opslagvorm voor niveaus. Wel raakt het
de inhoud van een bestaand deck, want het schrijft dia's stil om.
Regressietest
Een dia met vier zichtbare niveaus door de opsommingseditor halen, één los veld
bewerken, en bewijzen dat de niveaus van de andere regels onveranderd zijn.
Opgelost op main in
ff60cd3b(PR #1563), route A: het klemmen zit alleen nog op de knop._levelOfis uit beide opsommingseditors verdwenen; ze lezen nu met dezelfdebulletLevelals de rest van de codebase, ongeklemd. Wat je niet zelf hebt gewijzigd, wordt niet meer teruggeschreven.kMaxIndentButtonLevelnaastbulletLevel, met de aantekening dat het formaat, de parser, de dia-render en de HTML-export zélf geen maximum kennen._indentklemde metclamp(0, _maxLevel), waardoor uitspringen vanaf niveau 6 met één klik naar 4 sprong in plaats van naar 5.Twee regressietests, elk gevallen tegen de onherstelde code.
Wat hier bewust níet in zit: de dubbeltelling zelf. De parser rekent twee spaties per niveau terwijl markdown doorgaans met vier wordt geschreven; dat is de reden dat niveau 6 überhaupt ontstaat. Dat omzetten zou elk bestaand deck met twee-spaties-inspringing zijn niveaus kosten — een formaatwijziging vermomd als een constante. Hoort bij een versieveld en een migratiepad, niet hierbij. Vastgelegd in het commentaar bij de constante.
Ook open gebleven: hoe diep de knop mag komen. Vier zichtbare niveaus zou acht tabs vragen; dat is een aparte afweging die los te maken is nu het stille afknippen weg is.