From 70c3ff3dea82fd6104dc0fa8ea73061cbe835a80 Mon Sep 17 00:00:00 2001 From: kdeterme Date: Fri, 7 Aug 2026 09:38:49 +0200 Subject: [PATCH] fix: escape JavaScript strings in observation form template translations --- .../observations/observation_form.html | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/streetup/observations/templates/observations/observation_form.html b/streetup/observations/templates/observations/observation_form.html index 4efa443..9895fb0 100644 --- a/streetup/observations/templates/observations/observation_form.html +++ b/streetup/observations/templates/observations/observation_form.html @@ -2771,7 +2771,7 @@ xhr.addEventListener('error', function() { loadingOverlay.style.display = 'none'; - alert("{% translate 'Une erreur est survenue lors de l\'envoi. Veuillez réessayer.' %}"); + alert("{% filter escapejs %}{% translate "Une erreur est survenue lors de l'envoi. Veuillez réessayer." %}{% endfilter %}"); }); xhr.addEventListener('abort', function() { @@ -3010,25 +3010,25 @@ let msg; if (isDenied && pwa) { msg = [ - '{% translate "La permission caméra a été refusée pour cette application." %}', + "{% filter escapejs %}{% translate "La permission caméra a été refusée pour cette application." %}{% endfilter %}", "", - '{% translate "Pour la réactiver sur Android (Samsung One UI) :" %}', - ' 1. {% translate "Ouvrez les Paramètres Android" %}', - ' 2. {% translate "Applications → Chrome (ou Internet)" %}', - ' 3. {% translate "Autorisations → Appareil photo → Autoriser" %}', - ' 4. {% translate "Revenez dans l\'application et réessayez." %}', + "{% filter escapejs %}{% translate "Pour la réactiver sur Android (Samsung One UI) :" %}{% endfilter %}", + " 1. {% filter escapejs %}{% translate "Ouvrez les Paramètres Android" %}{% endfilter %}", + " 2. {% filter escapejs %}{% translate "Applications → Chrome (ou Internet)" %}{% endfilter %}", + " 3. {% filter escapejs %}{% translate "Autorisations → Appareil photo → Autoriser" %}{% endfilter %}", + " 4. {% filter escapejs %}{% translate "Revenez dans l'application et réessayez." %}{% endfilter %}", ].join('\n'); } else if (isDenied) { - msg = '{% translate "La permission caméra a été refusée. Veuillez l\'autoriser dans les paramètres de votre navigateur, puis rechargez la page." %}'; + msg = "{% filter escapejs %}{% translate "La permission caméra a été refusée. Veuillez l'autoriser dans les paramètres de votre navigateur, puis rechargez la page." %}{% endfilter %}"; } else { - msg = '{% translate "Impossible d\'accéder à la caméra. Veuillez vérifier les autorisations." %}'; + msg = "{% filter escapejs %}{% translate "Impossible d'accéder à la caméra. Veuillez vérifier les autorisations." %}{% endfilter %}"; } alert(msg); } async function startCameraStream() { if (!isCameraSupported) { - alert('{% translate "La caméra avancée n\'est pas supportée sur ce navigateur." %}'); + alert("{% filter escapejs %}{% translate "La caméra avancée n'est pas supportée sur ce navigateur." %}{% endfilter %}"); return false; } @@ -3038,7 +3038,7 @@ const permStatus = await navigator.permissions.query({ name: 'camera' }); if (permStatus.state === 'denied') { showCameraPermissionHelp(true); - updateCameraStatus('{% translate "Permission caméra refusée." %}', 'error'); + updateCameraStatus("{% filter escapejs %}{% translate "Permission caméra refusée." %}{% endfilter %}", 'error'); return false; } // Si 'prompt' : on continue, getUserMedia déclenchera la boîte de dialogue système @@ -3049,7 +3049,7 @@ } try { - updateCameraStatus('{% translate "Initialisation de la caméra…" %}', 'info'); + updateCameraStatus("{% filter escapejs %}{% translate "Initialisation de la caméra…" %}{% endfilter %}", 'info'); cameraStream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment', @@ -3065,14 +3065,14 @@ cameraPreview.src = window.URL.createObjectURL(cameraStream); } cameraPreview.play(); - updateCameraStatus('{% translate "Caméra prête. Appuyez sur Capturer pour prendre une photo." %}', 'info'); + updateCameraStatus("{% filter escapejs %}{% translate "Caméra prête. Appuyez sur Capturer pour prendre une photo." %}{% endfilter %}", 'info'); return true; } catch (err) { console.error('Erreur getUserMedia:', err); // NotAllowedError = refus utilisateur ou permission système bloquée const isDenied = (err.name === 'NotAllowedError' || err.name === 'PermissionDeniedError'); showCameraPermissionHelp(isDenied); - updateCameraStatus('{% translate "Impossible d\'accéder à la caméra." %}', 'error'); + updateCameraStatus("{% filter escapejs %}{% translate "Impossible d'accéder à la caméra." %}{% endfilter %}", 'error'); return false; } } @@ -3094,7 +3094,7 @@ const videoWidth = cameraPreview.videoWidth; const videoHeight = cameraPreview.videoHeight; if (!videoWidth || !videoHeight) { - updateCameraStatus('{% translate "La vidéo n\'est pas encore prête." %}', 'error'); + updateCameraStatus("{% filter escapejs %}{% translate "La vidéo n'est pas encore prête." %}{% endfilter %}", 'error'); return; } @@ -3106,7 +3106,7 @@ cameraCanvas.toBlob(function(blob) { if (!blob) { - updateCameraStatus("{% translate 'Erreur lors de la capture.' %}", 'error'); + updateCameraStatus("{% filter escapejs %}{% translate "Erreur lors de la capture." %}{% endfilter %}", 'error'); return; } @@ -3114,7 +3114,7 @@ const file = new File([blob], filename, { type: 'image/jpeg' }); addFileToPreview(file); - updateCameraStatus('{% translate "Photo capturée avec succès." %}', 'success'); + updateCameraStatus("{% filter escapejs %}{% translate "Photo capturée avec succès." %}{% endfilter %}", 'success'); }, 'image/jpeg', 0.9); }