fix(editor): placeholder des blocs disparait des la frappe (input bascule .empty)
FlowDeck CI / test (push) Failing after 15s
FlowDeck CI / docker (push) Skipped

La classe .empty (qui pilote les placeholders "Press 'space' for AI or '/' for
commands", "Heading 1", "List", etc.) n'etait basculee qu'au render(). Pendant
la frappe, l'evenement input mettait a jour dirty/autoSave mais jamais .empty :
le texte d'aide restait visible sur un bloc plein.

Le listener input des blocs bascule desormais .empty en direct : texte saisi ->
placeholder disparait; bloc vide -> placeholder reapparait.

v5.1.5
This commit is contained in:
2026-09-07 12:06:18 -04:00
parent 63a41ade48
commit d96fb4171e
4 changed files with 20 additions and 4 deletions
+17 -1
View File
@@ -1,6 +1,22 @@
# Changelog — FlowDeck
## v5.1.4 (2026-09-07) — Corrections : placeholder invisible, flèches `/`, item vocabulaire, largeur AI
## v5.1.5 (2026-09-07) — Placeholder des blocs : disparaît dès la frappe
> Les textes d'aide « Press 'space' for AI or '/' for commands », « Heading 1 »,
> « List », etc. restaient affichés pendant l'édition.
### Cause
- La classe `.empty` (qui pilote les placeholders) n'était basculée qu'au
`render()`. Pendant la frappe, l'événement `input` mettait à jour `dirty` et
`autoSave` mais **jamais** `.empty` : le texte d'aide persistait sur un bloc qui
avait pourtant du contenu.
### Correctif
- Le listener `input` des blocs (rendu `render()`) bascule désormais `.empty` en
direct selon le contenu : dès qu'un caractère est saisi, `.empty` est retiré et
le placeholder disparaît ; quand le bloc est vidé, `.empty` revient et le
placeholder réapparaît (mécanisme identique pour les titres « Heading 1… »,
listes, callout, etc.).
> Résout les derniers retours UI de l'éditeur v5.1.2/5.1.3.
+1 -1
View File
@@ -1 +1 @@
5.1.4
5.1.5
+1 -1
View File
@@ -60,7 +60,7 @@ async def lifespan(_app: FastAPI):
app = FastAPI(
title="FlowDeck",
version="5.1.4",
version="5.1.5",
docs_url="/docs" if settings.log_level == "DEBUG" else None,
redoc_url=None,
lifespan=lifespan,
+1 -1
View File
@@ -751,7 +751,7 @@
setTimeout(()=>{ct.querySelectorAll('.block-embed-collection').forEach(el=>{const cid=parseInt(el.id.replace('inline-db-',''));if(cid&&window.FlowDeckDB)window.FlowDeckDB.renderInto(el,cid,null);});},50);
// Initialize AI Meeting Note widgets (block type 'meeting')
setTimeout(()=>{ct.querySelectorAll('[data-meeting-bid]').forEach(function(el){if(window.FDMeeting)window.FDMeeting.mount(el.getAttribute('data-meeting-bid'),el);});},50);
ct.querySelectorAll('[data-bid]').forEach(el=>{el.addEventListener('input',()=>{self.dirty=true;self.autoSave();})});
ct.querySelectorAll('[data-bid]').forEach(el=>{el.addEventListener('input',()=>{self.dirty=true;self.autoSave();if(el.hasAttribute&&el.hasAttribute('data-placeholder'))el.classList.toggle('empty',!(el.textContent||'').trim());})});
ct.querySelectorAll('[data-placeholder]').forEach(el=>{el.innerHTML=el.innerHTML.replace(/<br[^>]*>/gi,'').trim()!==''?el.innerHTML:'';el.classList.toggle('empty',!el.textContent.trim());});
},
_renderKatex(el,tex){