Remplace le bloc RGPD permanent par une modale de bienvenue au 1er passage

Demande Kévin : mot de bienvenue personnalisé (nom de l'événement) +
mention légale RGPD, affiché une fois par événement (localStorage) au
lieu d'un bloc toujours visible dans le formulaire. Texte légal conservé
à l'identique (docs/rgpd.md), seule la présentation change. Reste
consultable à tout moment via un lien "Infos sur tes données" sous le
formulaire, qui rouvre la même modale.
This commit is contained in:
2026-09-16 15:57:09 +02:00
parent 3afd475a55
commit 45e0bd7bcc
3 changed files with 196 additions and 11 deletions
+55
View File
@@ -48,6 +48,10 @@ const messageInput = document.getElementById("message-input");
const progressText = document.getElementById("progress-text");
const submitBtn = document.getElementById("submit-btn");
const submitBtnLabel = document.getElementById("submit-btn-label");
const welcomeModal = document.getElementById("welcome-modal");
const welcomeModalTitle = document.getElementById("welcome-modal-title");
const welcomeModalDismiss = document.getElementById("welcome-modal-dismiss");
const legalLink = document.getElementById("legal-link");
// ---------------------------------------------------------------------------
// État
@@ -201,6 +205,52 @@ function incrementLocalGuestPhotoCount(slug) {
}
}
// ---------------------------------------------------------------------------
// Mot de bienvenue + RGPD — affiché une fois par événement (localStorage),
// plutôt qu'en bloc permanent dans le formulaire (décision Kévin 2026-09-16).
// Reste ré-ouvrable à tout moment via le lien "Infos sur tes données".
// ---------------------------------------------------------------------------
function welcomeSeenStorageKey(slug) {
return `photobooth_welcome_seen_${slug}`;
}
function hasSeenWelcome(slug) {
try {
return window.localStorage.getItem(welcomeSeenStorageKey(slug)) === "1";
} catch {
return false;
}
}
function markWelcomeSeen(slug) {
try {
window.localStorage.setItem(welcomeSeenStorageKey(slug), "1");
} catch {
// Pas grave : la modale se réaffichera simplement à la prochaine visite,
// ce n'est pas un risque de conformité (juste redondant pour l'invité).
}
}
function openWelcomeModal(eventName) {
welcomeModalTitle.textContent = eventName ? `Bienvenue à ${eventName} !` : "Bienvenue !";
welcomeModal.hidden = false;
}
function closeWelcomeModal() {
welcomeModal.hidden = true;
}
welcomeModalDismiss.addEventListener("click", () => {
const slug = getSlugFromPath();
if (slug) markWelcomeSeen(slug);
closeWelcomeModal();
});
legalLink.addEventListener("click", () => {
openWelcomeModal(state.event ? state.event.nom : null);
});
function isHeicFile(file) {
const type = (file.type || "").toLowerCase();
if (type === "image/heic" || type === "image/heif") return true;
@@ -232,6 +282,11 @@ function showForm(event) {
errorBlock.hidden = true;
successBlock.hidden = true;
form.hidden = false;
const slug = getSlugFromPath();
if (slug && !hasSeenWelcome(slug)) {
openWelcomeModal(event.nom);
}
}
function showError(rawErr, retryAction) {