feat(v5.5.0): Embeds & Media riche - universal embeds, bookmark cards, lightbox, inline previews, cover & icon
- embeds.py: provider detection/rewrite (YouTube, Vimeo, Figma, Maps, Docs, Loom, CodePen, Miro, Spotify, SoundCloud, Twitch, X/Twitter, Pinterest, Office) + resolve_embed/inline_kind/provider; POST /board/api/embed/resolve - editor resolves pasted URLs and caches embed_src (persisted); renderer, public pages and MD/HTML/PDF exports prefer embed_src - og_fetcher.py: robust meta parsing (any attribute order), favicon, injectable transport, network-safe fallback - image lightbox with keyboard nav (arrows/Esc) in editor and public pages - inline PDF/video/audio previews - cover (URL or upload) & page icon endpoints - fix broken editor API paths (/api/pages -> /board/api/pages) for cover, icon, versions, backlinks, import, move and OG metadata - 47 tests in tests/test_v55.py; full suite 444 green; ruff clean - version 5.11.2
This commit is contained in:
@@ -1,5 +1,36 @@
|
||||
# Changelog - FlowDeck
|
||||
|
||||
## v5.11.2 (2026-09-12) — v5.5.0 Embeds & Média riche (complétion)
|
||||
|
||||
> Valide et complète le chantier v5.5.0 (parité embeds Notion). Une grande
|
||||
> partie était ébauchée ; ce patch répare les chemins d'API cassés côté éditeur,
|
||||
> finalise la résolution d'embed, le parsing OG, la lightbox publique et couvre
|
||||
> le tout de 47 tests dédiés.
|
||||
|
||||
- **Embed universel** — `app/services/embeds.py` réécrit : détection
|
||||
sous-domaine correcte, YouTube (watch/shorts/youtu.be), Vimeo, Figma,
|
||||
Google Maps, Google Docs/Sheets/Slides, Loom, CodePen, Miro, Spotify,
|
||||
SoundCloud, Twitch (parent réel), X/Twitter, Pinterest, Microsoft Office ;
|
||||
helpers `resolve_embed()`, `inline_kind()`, `provider()`. Nouvel endpoint
|
||||
`POST /board/api/embed/resolve`.
|
||||
- **Résolution d'embed dans l'éditeur** — la saisie d'une URL appelle le
|
||||
résolveur et met en cache `embed_src`/`embed_provider` (l'URL d'origine est
|
||||
conservée) ; le rendu (éditeur, pages publiques, exports MD/HTML/PDF) préfère
|
||||
`embed_src`. Le champ est persisté via la sérialisation des blocs.
|
||||
- **Bookmark cards** — `app/services/og_fetcher.py` : parseur `<meta>` robuste
|
||||
(ordre d'attributs libre), titre de repli, favicon, transport injectable pour
|
||||
les tests ; `fetch_og_metadata` ne lève jamais sur erreur réseau.
|
||||
- **Image lightbox** — navigation clavier ←/→ et Escape, multi-images, dans
|
||||
l'éditeur **et** les pages publiques `/p/<slug>` (CSS `.fd-lightbox`).
|
||||
- **Fix chemins API (bug v5.4.0/v5.5.0)** — l'éditeur appelait
|
||||
`/api/pages/...` alors que les routes sont `/board/api/pages/...` : cover,
|
||||
icon, versions, backlinks, import, move et OG metadata étaient donc en 404.
|
||||
Tous corrigés, avec un test de régression statique.
|
||||
- **Tests** — `tests/test_v55.py` : 47 tests (embeds par provider, resolve API,
|
||||
parse OG + MockTransport, lightbox, préviews, cover upload/URL/suppression,
|
||||
icône, page publique). Suite complète **444 verte**, `ruff check` OK.
|
||||
- **Version** — 5.11.2.
|
||||
|
||||
## v5.11.1 (2026-09-11) — v5.2.0 Infrastructure & Polish (complétion)
|
||||
|
||||
> Finalise le chantier v5.2.0 : la plupart des briques étaient déjà livrées
|
||||
|
||||
Reference in New Issue
Block a user