From bf329a4ba085cf607b6d15d392abb1f732786192 Mon Sep 17 00:00:00 2001 From: bruno Date: Tue, 21 Jul 2026 13:41:34 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20PDF=20viewer=20=E2=80=94=20URL=20encode?= =?UTF-8?q?=20filename=20+=20error=20fallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dashboard.py: quote(filename) dans file_url (espaces/caractères spéciaux) - page_editor.html: iframe PDF → onerror fallback avec lien Open in new tab - 143 tests passent --- app/routers/dashboard.py | 4 +++- app/templates/page_editor.html | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/routers/dashboard.py b/app/routers/dashboard.py index d76c884..c231c5e 100644 --- a/app/routers/dashboard.py +++ b/app/routers/dashboard.py @@ -325,7 +325,9 @@ async def view_page_root(request: Request, page_id: int): ws_id = p.replace("workspace_", "") break filename = fp_parts[-1] if fp_parts else page.get("title", "File") - file_url = f"/api/files/{ws_id}/{filename}" if ws_id else "" + from urllib.parse import quote + safe_name = quote(filename, safe='') + file_url = f"/api/files/{ws_id}/{safe_name}" if ws_id else "" page_data["file_url"] = file_url page_data["file_mime"] = mime_type page_data["file_size"] = file_size diff --git a/app/templates/page_editor.html b/app/templates/page_editor.html index 50582b8..025e65d 100644 --- a/app/templates/page_editor.html +++ b/app/templates/page_editor.html @@ -575,7 +575,7 @@ page_title %}{{ page.title }}{% endblock %} {% block topbar %} if(b.type==='divider')return `

`; if(b.type==='image')return `
${esc(b.alt||'')}
`; if(b.type==='embed'){ - if(b.embed_type==='pdf')return `
`; + if(b.embed_type==='pdf')return `

Failed to load PDF

Open in new tab →
`; if(b.embed_type==='download'){ var sz=b.file_size||0;var szStr=sz<1024?sz+' B':sz<1048576?(sz/1024).toFixed(1)+' KB':(sz/1048576).toFixed(1)+' MB'; return `
{{ fd_icon("paperclip",14) }}
${esc(b.file_name||'File')}
${szStr} · ${esc(b.file_mime||'')}
⬇ Download
`;