fix(editor): een dieper inspringniveau wordt niet meer stil afgeknipt #1563
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!1563
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/inspringniveau-niet-stil-afknippen"
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?
Een inspringniveau dat dieper is dan de knop kan maken, werd stil afgeknipt zodra
je de dia in de visuele editor opende en er íets in typte.
Wat er misging, gemeten
Een dia met vier zichtbare niveaus, waarin ik één letter typ in het eerste
item:
Het vierde item zakte een niveau. De gebruiker had die regel niet aangeraakt.
_levelOfklemde het niveau al bij het lezen op_maxLevel, en_emitschreef dat geklemde niveau weer terug — dus de klem sloeg toe op alles wat de
editor in handen kreeg, niet alleen op wat je wijzigde. Terugdraaien met
ongedaan-maken in het bronvenster hielp niet: de dia was dan al herschreven.
Dat dit niveau 6 überhaupt bestaat, komt door een dubbeltelling: de parser
rekent twee spaties per niveau, terwijl markdown doorgaans met vier wordt
geschreven. Een geïmporteerde of geplakte lijst van vier zichtbare niveaus staat
intern dus op 0-2-4-6, en 6 lag boven het plafond van 4.
Waarom het plafond geen formaatgrens is
bulletLevel)level * bulletSize * 1.05)margin-left: level * 1.4em)bullets_editorbullets_image_editortree_editorNergens in de documentatie staat een maximum. Het getal is een grens van de
bediening die in drie editors was overgeschreven, met een derde waarde die
niemand ooit heeft besloten.
Wat er verandert
Lezen gebeurt ongeklemd. De eigen
_levelOfvan beide opsommingseditors konweg; ze gebruiken nu dezelfde
bulletLevelals de rest van de codebase. Eénlezer in plaats van drie.
Alleen de knop begrenst, via één gedeelde
kMaxIndentButtonLevelnaastbulletLevel, met een doc-comment dat vastlegt dát het formaat geen maximumkent — zodat de volgende lezer 4 niet voor een formaatgrens aanziet.
De boomeditor loopt mee op diezelfde constante, en had daar een eigen fout:
_indentklemde metclamp(0, _maxLevel), waardoor uitspringen vanaf niveau 6met één klik naar 4 sprong in plaats van naar 5. Uitspringen gaat nu altijd één
stap; inspringen stopt bij het maximum.
De afweging die hieronder ligt
Drie routes lagen open. De dubbeltelling zélf wegnemen (parser op vier spaties)
ruimt de oorzaak op, maar laat elk bestaand deck met twee-spaties-inspringing —
precies wat OciDeck zelf schrijft en wat Tab in de broneditor produceert — zijn
niveaus verliezen. Dat is een formaatwijziging vermomd als een constante, en die
hoort niet zonder versieveld en migratiepad.
Het knopplafond verruimen naar vier zichtbare niveaus (acht tabs) lost het
gemelde gebrek ook op, maar laat de oorzaak staan en kost breedte in de render,
die zelf geen plafond kent.
Gekozen is de kleinste ingreep die de échte schade wegneemt: niet meer stil
herschrijven wat de gebruiker niet heeft aangeraakt. Hoe diep de knop mag komen
is daarmee een aparte vraag, die later los te beantwoorden is. De dubbeltelling
blijft staan en is vastgelegd in het commentaar bij de constante.
Toetsing
Beide reparaties zijn één keer teruggezet; precies hun eigen test viel, en niets
anders:
een niveau dieper dan de knop kan, blijft staan als je iets anders typt—valt zodra het lezen weer klemt.
TreeEditor een dieper niveau blijft staan en springt met één stap uit—valt zodra
_indentweer metclamp(0, _maxLevel)werkt.Bewaker
Bewust overgeslagen: raakt het bestandsformaat niet (tabs blijven de opslagvorm
en er verandert niets aan wat er weggeschreven wordt), geen opslag, geen
afhankelijkheid, geen uitgaand verkeer, geen publieke belofte. Wel raakte het
gebrek de inhoud van bestaande decks — die schade is nu juist wat verdwijnt.
Poorten
make checkgroen (exit 0, 9801 tests, dekking 87,0%, per-bestandsvloer 0),make check-secretsgroen (geen lekken),make sastgroen (0 bevindingen).DAST niet gedraaid — geen geserveerd oppervlak geraakt.
Closes #1558