fix(editor): retours a la ligne conserves quand on change de bloc (Entree)
FlowDeck CI / test (push) Failing after 14s
FlowDeck CI / docker (push) Skipped

Shift+Entree insere des <br>; sync() lit textContent (des \n). mdEsc() (render
des blocs) n'encaissait pas les \n et le HTML les repliait en espace -> les
lignes disparaissaient au re-rendu apres la scission Entree.

mdEsc() convertit desormais les \n restants en <br> (apres les remplacements
markdown inline): ligne conservee pour tous les types de bloc.

v5.1.7
This commit is contained in:
2026-09-07 12:39:50 -04:00
parent 3956f1ffa5
commit 6356cd5703
4 changed files with 19 additions and 4 deletions
+15 -1
View File
@@ -1,6 +1,20 @@
# Changelog — FlowDeck
## v5.1.6 (2026-09-07) — Placeholder titre "New Page" + placeholder blocs au focus seul
## v5.1.7 (2026-09-07) — Retours à la ligne conservés quand on change de bloc (Entrée)
> Un bloc multi-lignes (Shift+Entrée) perdait ses retours à la ligne dès qu'on
> appuyait sur Entrée pour créer un nouveau bloc.
### Cause
- Shift+Entrée insère des `<br>` ; `sync()` lit `el.textContent`, qui contient
alors des `\n`. `mdEsc()` (render des blocs) échappait le texte mais ne
convertissait pas les `\n`, et le HTML les replie en espace → les lignes
disparaissaient au re-rendu après la scission Entrée.
### Correctif
- `mdEsc()` convertit désormais les `\n` restants en `<br>` (après les
remplacements markdown inline) : les retours à la ligne sont conservés dans
tous les types de bloc (paragraphe, listes, to-do, toggle, callout, code…).
> Conforme au comportement Notion : le titre affiche « New Page » quand il est
> vide ; les aides de blocs (« Press 'space' for AI… », « Heading 1 »…) ne
+1 -1
View File
@@ -1 +1 @@
5.1.6
5.1.7
+1 -1
View File
@@ -60,7 +60,7 @@ async def lifespan(_app: FastAPI):
app = FastAPI(
title="FlowDeck",
version="5.1.6",
version="5.1.7",
docs_url="/docs" if settings.log_level == "DEBUG" else None,
redoc_url=None,
lifespan=lifespan,
+2 -1
View File
@@ -27,7 +27,8 @@
.replace(/\*\*([^*]+)\*\*/g,'<strong>$1</strong>')
.replace(/\*([^*]+)\*/g,'<em>$1</em>')
.replace(/~~([^~]+)~~/g,'<s>$1</s>')
.replace(/\[([^\]]+)\]\((https?:[^)\s]+)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>');
.replace(/\[([^\]]+)\]\((https?:[^)\s]+)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>')
.replace(/\n/g,'<br>');
}
const CALLOUT_ICONS=['💡','💡','📌','⚠️','ℹ️','✅','❌','🚀','🔔','📣','⭐','❤️','🔥','💬','👀','🧠','🎯','🔑','📅','💰','💡','📚','🧪','🌍'];