From 73143f0ec2a91ee0348c684fd0bff204158e2d42 Mon Sep 17 00:00:00 2001 From: Kevin Lecou Date: Wed, 16 Sep 2026 15:18:30 +0200 Subject: [PATCH] =?UTF-8?q?Corrige=20un=20deuxi=C3=A8me=20bug=20bloquant?= =?UTF-8?q?=20:=20chemins=20relatifs=20cass=C3=A9s=20sur=20/e/=20et?= =?UTF-8?q?=20/admin/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nginx réécrit /admin/ et /e/ vers le vrai index.html (try_files), mais l'URL affichée au navigateur reste /admin/ — les chemins relatifs (style.css, config.js, gallery.js/upload.js) se résolvaient donc contre cette URL "virtuelle" au lieu du vrai dossier, tombaient sur le fallback nginx et recevaient du HTML au lieu du CSS/JS attendu. La galerie admin restait bloquée sur "Chargement..." avec un style complètement cassé. Passage en chemins absolus (/e/..., /admin/gallery/...) partout. Signalé par Kévin après test réel sur /admin/demo-kevin. Au passage : durcit la protection anti-double-soumission du formulaire upload (garde-fou supplémentaire au niveau de l'event listener) et remet à zéro photo/nom/message immédiatement après un envoi réussi. --- src/admin/gallery/index.html | 6 +++--- src/e/index.html | 6 +++--- src/e/upload.js | 25 +++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/admin/gallery/index.html b/src/admin/gallery/index.html index 468e7d6..89f82aa 100644 --- a/src/admin/gallery/index.html +++ b/src/admin/gallery/index.html @@ -13,7 +13,7 @@ fichier front, à mettre en place lors du déploiement. --> - +
@@ -59,7 +59,7 @@ script classique (donc synchrone, avant le module) pour garantir que window.__PHOTOBOOTH_CONFIG__ existe avant l'exécution de gallery.js. --> - - + + diff --git a/src/e/index.html b/src/e/index.html index d5d7529..2f06fb1 100644 --- a/src/e/index.html +++ b/src/e/index.html @@ -12,7 +12,7 @@ lors du déploiement, hors scope de ce fichier front. --> - +
@@ -132,7 +132,7 @@ Chargé en script classique (donc synchrone, avant le module) pour garantir que window.__PHOTOBOOTH_CONFIG__ existe avant l'exécution de upload.js. --> - - + + diff --git a/src/e/upload.js b/src/e/upload.js index c61e7cf..19f7479 100644 --- a/src/e/upload.js +++ b/src/e/upload.js @@ -206,11 +206,30 @@ function showError(rawErr, retryAction) { } } +function resetPhotoFields() { + state.selectedFile = null; + state.compressedBlob = null; + fileChosenLabel.textContent = "Aucun fichier choisi"; + previewImg.hidden = true; + if (previewObjectUrl) { + URL.revokeObjectURL(previewObjectUrl); + previewObjectUrl = null; + } + photoInput.value = ""; + photoInputGallery.value = ""; + nomInput.value = ""; + messageInput.value = ""; +} + function showSuccess() { loadingBlock.hidden = true; errorBlock.hidden = true; form.hidden = true; successBlock.hidden = false; + // Remise à zéro immédiate (pas seulement au clic sur "Ajouter une autre + // photo") : si l'invité revient sur le formulaire par un autre biais, il + // ne doit jamais retrouver la photo/le message déjà envoyés pré-remplis. + resetPhotoFields(); } function setProgress(text) { @@ -495,6 +514,12 @@ async function submitPhoto() { form.addEventListener("submit", (evt) => { evt.preventDefault(); + // Garde-fou en plus de state.isSubmitting (qui protège déjà submitPhoto + // elle-même) : si jamais l'événement "submit" se déclenche plusieurs fois + // très rapidement (double tap mobile), on ignore tout appel supplémentaire + // tant qu'un envoi est en cours, sans dépendre uniquement de l'état du + // bouton désactivé. + if (state.isSubmitting) return; submitPhoto(); });