feat(v5.5.0): Embeds & Media riche - universal embeds, bookmark cards, lightbox, inline previews, cover & icon
FlowDeck CI / lint (push) Successful in 44s
FlowDeck CI / test (push) Successful in 4m10s
FlowDeck CI / docker (push) Successful in 37s

- 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:
2026-09-12 09:40:50 -04:00
parent c435e277f2
commit bdc15c7328
13 changed files with 961 additions and 167 deletions
+31
View File
@@ -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