[M3] RichMessageParser : détecter et extraire les blocs data-fx-* du HTML #29

Closed
opened 2026-04-06 01:35:24 +00:00 by charles · 0 comments
Owner

Contexte

Cœur de la crate fractal-rich : parser le HTML Matrix pour extraire les blocs enrichis data-fx-* et produire une liste de MessageFragment (HTML standard ou RichBlock).

Critères d'acceptation

  • RichMessageParser::parse(html) -> Vec<MessageFragment> utilisant html5ever
  • Enum MessageFragment : Html(String) | Rich(RichBlock)
  • Enum RichBlock avec tous les types : Chart, Quiz, PollRich, CodeRun, Card, Carousel, Timeline, TableSort, Accordion, Progress, Math, Mermaid, Canvas
  • Extraction du data-fx-config JSON et désérialisation vers le type Rust correspondant
  • Fallback : si le JSON est invalide ou le type inconnu → MessageFragment::Html(fallback_content)
  • Validation JSON Schema pour chaque type de bloc (rejet si schéma invalide)
  • Le HTML résiduel (hors blocs fx-*) est passé tel quel au renderer HTML natif de Fractal
  • Tests unitaires : HTML avec blocs valides, invalides, mixtes

Notes techniques

  • Dépend de : #2 (fractal-ext), #1 (workspace)
  • Format : <div data-fx-type="chart" data-fx-config='{"type":"bar",...}'>fallback</div>
  • html5ever pour le parsing (déjà utilisé dans l'écosystème GNOME Rust)
  • La whitelist des types fx-* empêche l'injection via des types inconnus
## Contexte Cœur de la crate `fractal-rich` : parser le HTML Matrix pour extraire les blocs enrichis `data-fx-*` et produire une liste de `MessageFragment` (HTML standard ou `RichBlock`). ## Critères d'acceptation - [ ] `RichMessageParser::parse(html) -> Vec<MessageFragment>` utilisant `html5ever` - [ ] Enum `MessageFragment` : `Html(String)` | `Rich(RichBlock)` - [ ] Enum `RichBlock` avec tous les types : Chart, Quiz, PollRich, CodeRun, Card, Carousel, Timeline, TableSort, Accordion, Progress, Math, Mermaid, Canvas - [ ] Extraction du `data-fx-config` JSON et désérialisation vers le type Rust correspondant - [ ] Fallback : si le JSON est invalide ou le type inconnu → `MessageFragment::Html(fallback_content)` - [ ] Validation JSON Schema pour chaque type de bloc (rejet si schéma invalide) - [ ] Le HTML résiduel (hors blocs fx-*) est passé tel quel au renderer HTML natif de Fractal - [ ] Tests unitaires : HTML avec blocs valides, invalides, mixtes ## Notes techniques - Dépend de : #2 (fractal-ext), #1 (workspace) - Format : `<div data-fx-type="chart" data-fx-config='{"type":"bar",...}'>fallback</div>` - `html5ever` pour le parsing (déjà utilisé dans l'écosystème GNOME Rust) - La whitelist des types `fx-*` empêche l'injection via des types inconnus
Sign in to join this conversation.
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
charles/my-fractal#29
No description provided.