fix: escape JavaScript strings in observation form template translations

This commit is contained in:
kdeterme 2026-08-07 09:38:49 +02:00
parent 57367d825b
commit 70c3ff3dea

View file

@ -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);
}