-
fix: sélection multi-blocs fonctionnelle (Ctrl+C/X, drag souris, clic droit) + identité visuelle (v7.69.0)
released this
2026-10-08 17:27:14 -04:00 | 31 commits to main since this releaseTrois bugs d'éditeur, chacun avec sa cause racine prouvée par trace
d'événements — le mécanisme Clipboard livré en v7.68 était inutilisable.-
Ctrl+C / Ctrl+X multi-blocs ne faisaient RIEN.
Cause : le navigateur ne sait pas sérialiser une sélection qui traverse
deuxcontenteditable(chaque bloc en a un).getSelection().toString()
renvoie""et Chromium n'émet AUCUN événementcopy— les handlers
ct.addEventListener('copy')n'étaient donc jamais atteints.
→ le raccourci est intercepté au keydown (capture sur document, garde
closest('#_blocksCt')pour ne pas voler Ctrl+C ailleurs) et le markdown
est écrit dans le presse-papier par nos soins. Sélection mono-bloc =
comportement natif inchangé. -
Glisser la souris d'un bloc à l'autre ne sélectionnait qu'un bloc.
Cause :mouseup(on reconstruit la plage) →click→focusin→ le
navigateur efface la sélection. La plage était reconstruite puis détruite
dans la foulée.
→ la plage reconstruite est mise en attente (_mdSelRange) et restaurée
au tour de boucle suivant si le focus l'a effectivement effacée. Chaque
nouveau geste (mousedown) remet l'attente à zéro, donc un clic pour
placer le curseur reste normal. -
Le clic droit effaçait le surlignage.
Cause :.bm-searchprenait le focus 10 ms après l'ouverture du menu.
→ le menu ne vole plus le focus quand un texte est sélectionné. Les
actions Clipboard utilisaient déjà la sélection figée à l'ouverture
(d._clipSt) ; lepreventDefaultdu clic droit est remonté sur
mousedown(surcontextmenuil arrive trop tard).
Identité visuelle (bannière + logo du projet ajoutés à la racine) :
- assets optimisés servis :
static/img/banner.webp22,5 Ko (l'original
fait 1,6 Mo) + JPEG de secours,logo.webp5,3 Ko +logo-512.jpg;
originaux conservés dansassets/pour régénération. - icônes PWA régénérées à partir du vrai logo (72 → 512 px, marge
maskable sur 192/512) + apple-touch-icon. - landing : logo dans la barre de navigation, bannière en
(WebP + JPEG) avec dimensions déclarées (pas de décalage de mise en page). og:image,twitter:cardetmeta descriptionajoutés sur la landing
ET dans base.html — la landing a son propre <head>.
Tests :
tests/test_v769_selection_persistence.py(19 statiques) +
e2e/v769_selection_persistence.spec.js(5, vrais gestes : drag souris,
Ctrl+C/Ctrl+X au clavier, clic droit).e2e/v768_columns_clipboard.spec.js
corrigé : les gestes simulés (execCommand, plage fabriquée en evaluate)
sont remplacés par de vrais gestes, et le token statique obsolète
si>=ei)return null;aligné sur la gardeisCollapsedréelle.pytest 1413 passed / 0 failed · ruff OK · OpenAPI 526 chemins / 7.69.0
Downloads
-