fix(import): toon & in chart-labels en timeline-events (#1299 follow-up) #1302

Merged
brenno merged 1 commit from fix/amp-chart-timeline-followup into main 2026-08-06 10:52:56 +00:00
Owner

Summary

  • Follow-up op #1299 (PR #1301): de titel-fix dekte alle velden die via parseInlineRuns gerenderd worden. Maar chart-labels (x-as, series-namen, pie-legend) en timeline-events (marker, title, description) gaan door platte Text-widgets die & letterlijk toonden — dezelfde bug op een andere plek.
  • Maak _decodeNamedHtmlEntities publiek als decodeNamedHtmlEntities en pas het toe op de zes platte-Text-plekken in chart_preview.dart en timeline_preview.dart, plus de semantics-label van charts (anders leest een screen-reader "amp" voor).
  • Numerieke entities blijven staan (#876-evasie-bewaking ongewijzigd). Het .md-formaat en de opslag veranderen niet; puur een weergavefix.

Wat al gedekt was door #1301

  • slide.title / slide.subtitle (alle slidetypes) — via _mdparseInlineRuns
  • slide.bullets / slide.bullets2 — via _md
  • slide.quote / slide.quoteAuthor — via _md
  • slide.tableRows (celtekst) — via _md
  • slide.customMarkdown body (freeMarkdown) — via _md
  • slide.notes — via Quill; de markdown-package decodeert && tijdens het parsen
  • chart-titel — via _md

Wat nu gefixt is

  • Chart x-as labels (spec.x[i]) — chart_preview.dart:705
  • Chart series-namen (spec.series[i].name) — chart_preview.dart:408
  • Chart pie-legend labels (spec.x[i]) — chart_preview.dart:490
  • Chart semantics-label (series.name, spec.x) — chart_preview.dart:232
  • Timeline event marker — timeline_preview.dart:761
  • Timeline event title — timeline_preview.dart:775
  • Timeline event description — timeline_preview.dart:736

Bekend, apart punt (niet in deze PR)

De editor-velden (TextField) tonen het model rauw — voor geïmporteerde tekst toont de editor dus &, terwijl de preview & toont. Een fix vereist een decode/escape-rondgang die het edit-gedrag verandert (bron-weergave vs. gedecodeerd). Dat is een ontwerpkeuze die apart gemaakt moet worden, niet een weergavefix.

Bewaker

Deze wijziging raakt niets uit het bewaker-rijtje (bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer, publieke belofte) — puur de Flutter-weergave. Het #876-beveiligingsmodel blijft intact. Bewaker-stap daarom expliciet overgeslagen.

Test plan

  • test/inline_markdown_test.dartdecodeNamedHtmlEntities: vier named entities, numeriek blijft staan, no-op short-circuit
  • make check groen (8735 tests, 87,2% coverage, per-file floor OK)
  • make check-secrets — gitleaks + trufflehog schoon
  • make sast — semgrep 0 findings

Ref #1299

Generated with Devin

## Summary - Follow-up op #1299 (PR #1301): de titel-fix dekte alle velden die via `parseInlineRuns` gerenderd worden. Maar **chart-labels** (x-as, series-namen, pie-legend) en **timeline-events** (marker, title, description) gaan door platte `Text`-widgets die `&` letterlijk toonden — dezelfde bug op een andere plek. - Maak `_decodeNamedHtmlEntities` publiek als `decodeNamedHtmlEntities` en pas het toe op de zes platte-`Text`-plekken in `chart_preview.dart` en `timeline_preview.dart`, plus de semantics-label van charts (anders leest een screen-reader "amp" voor). - Numerieke entities blijven staan (#876-evasie-bewaking ongewijzigd). Het `.md`-formaat en de opslag veranderen niet; puur een weergavefix. ## Wat al gedekt was door #1301 - `slide.title` / `slide.subtitle` (alle slidetypes) — via `_md` → `parseInlineRuns` - `slide.bullets` / `slide.bullets2` — via `_md` - `slide.quote` / `slide.quoteAuthor` — via `_md` - `slide.tableRows` (celtekst) — via `_md` - `slide.customMarkdown` body (freeMarkdown) — via `_md` - `slide.notes` — via Quill; de `markdown`-package decodeert `&`→`&` tijdens het parsen - chart-titel — via `_md` ## Wat nu gefixt is - Chart x-as labels (`spec.x[i]`) — `chart_preview.dart:705` - Chart series-namen (`spec.series[i].name`) — `chart_preview.dart:408` - Chart pie-legend labels (`spec.x[i]`) — `chart_preview.dart:490` - Chart semantics-label (series.name, spec.x) — `chart_preview.dart:232` - Timeline event marker — `timeline_preview.dart:761` - Timeline event title — `timeline_preview.dart:775` - Timeline event description — `timeline_preview.dart:736` ## Bekend, apart punt (niet in deze PR) De editor-velden (`TextField`) tonen het model rauw — voor geïmporteerde tekst toont de editor dus `&`, terwijl de preview `&` toont. Een fix vereist een decode/escape-rondgang die het edit-gedrag verandert (bron-weergave vs. gedecodeerd). Dat is een ontwerpkeuze die apart gemaakt moet worden, niet een weergavefix. ## Bewaker Deze wijziging raakt niets uit het bewaker-rijtje (bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer, publieke belofte) — puur de Flutter-weergave. Het #876-beveiligingsmodel blijft intact. Bewaker-stap daarom expliciet overgeslagen. ## Test plan - [x] `test/inline_markdown_test.dart` — `decodeNamedHtmlEntities`: vier named entities, numeriek blijft staan, no-op short-circuit - [x] `make check` groen (8735 tests, 87,2% coverage, per-file floor OK) - [x] `make check-secrets` — gitleaks + trufflehog schoon - [x] `make sast` — semgrep 0 findings Ref #1299 Generated with [Devin](https://devin.ai)
fix(import): toon & in chart-labels en timeline-events, niet &
All checks were successful
scans / scans (pull_request) Successful in 2m22s
static-gate / static-gate (pull_request) Successful in 5m37s
c31c4b4222
Follow-up op #1299: de titel-fix dekte alle velden die via `parseInlineRuns`
gerenderd worden (titel, subtitle, bullets, quote, tabelcellen, notities,
chart-titel). Maar chart-labels (x-as, series-namen, pie-legend) en
timeline-events (marker, title, description) gaan door platte `Text`-widgets
die `&` letterlijk toonden — dezelfde bug als #1299, op een andere plek.

Maak `_decodeNamedHtmlEntities` publiek als `decodeNamedHtmlEntities` en pas
het toe op de zes platte-`Text`-plekken in chart_preview en timeline_preview,
plus de semantics-label van charts (anders leest een screen-reader "amp"
voor). Numerieke entities blijven staan (#876-evasie-bewaking ongewijzigd).

De editor-velden (TextField) tonen nog steeds het model rauw — dat is een
apart ontwerpvraagstuk (bron-weergave vs. gedecodeerd) en valt buiten deze
weergavefix.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit 3f30c0009c into main 2026-08-06 10:52:56 +00:00
Sign in to join this conversation.
No description provided.