Fonction d'envoi de demande GDPR et indicateur de chargement, rotation infinie de 1500 ms à 360 degrés
```html
#form-gdpr-edit-account-request,
#form-gdpr-requests-request,
#form-gdpr-personal-information-request,
#form-gdpr-orders-request,
#form-gdpr-personal-data-report-request,
#form-gdpr-delete-account-request {
display: none;
}
#gdpr_page button {
background-color: transparent;
border: 0;
border-bottom: 1px solid black;
padding: 0px;
}
/* Fond du modal */
#data-verification-background {
display: none;
position: fixed;
indice-z : 1 ;
padding-top: calc(50vh - 83px);
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.4);
opacity: unset;
z-index: 9999;
}
/* Contenu du modal */
#data-verification-modal {
background-color: #fefefe;
marge : auto ;
padding: 16px;
border: 1px solid #888;
width: 38%;
opacité : 1;
}
/* Bouton de fermeture du modal */
.data-verification-close {
color: #aaaaaa;
float: right;
font-size: 28px;
font-weight: bold;
line-height: 17px;
background-color: transparent;
bordure: 0px;
padding: 0px;
}
.data-verification-close:hover {
couleur: #000;
text-decoration: none;
curseur : pointer;
}
/* Texte de la case à cocher */
#data-verification-container p {
affichage: inline-block;
padding: 0;
marge: 0;
hauteur-de-ligne: 24px;
padding-gauche: 10px;
alignement-vertical: haut;
largeur: calc(100% - 45px);
}
#data-verification-container a, #data-verification-container a:hover{
text-decoration: underline!important;
couleur: #4285f4;
}
#data-verification-container input {
opacité : 0 ;
largeur: 0;
hauteur: 0;
marge: 0;
padding: 0;
}
/* Icône de case à cocher */
#data-verification-icon {
curseur : pointer;
position : relative ;
marge : auto ;
largeur : 18px ;
hauteur : 18px ;
-webkit-tap-highlight-color : transparent ;
transform : translate3d(0, 0, 0);
marge-haut : 2px ;
}
#data-verification-icon:before {
contenu : "" ;
position : absolue ;
haut : -7px ;
gauche : -7px ;
largeur : 32px ;
hauteur : 32px ;
bordure-radius : 50% ;
arrière-plan : rgba(34,50,84,0.03) ;
opacité : 0 ;
transition : opacité 0.2s ease ;
}
#data-verification-icon svg {
position : relative ;
indice-z : 1 ;
remplissage : aucun ;
stroke-linecap : arrondi;
stroke-linejoin : arrondi;
stroke : #c8ccd4;
stroke-width : 1.5;
transform : translate3d(0, 0, 0);
transition : tout 0.2s facilité;
}
#data-verification-icon svg path {
stroke-dasharray : 60;
stroke-dashoffset : 0;
}
#data-verification-icon svg polyline {
stroke-dasharray : 22;
stroke-dashoffset : 66;
}
#data-verification-icon:hover:before {
opacité : 1;
}
#data-verification-container:hover #data-verification-icon svg {
stroke : #4285f4;
}
#data-verification-icon.clicked svg {
stroke : #4285f4;
}
#data-verification-icon.clicked svg path {
stroke-dashoffset : 60;
transition : tout 0.3s linéaire;
}
#data-verification-icon.clicked svg polyline {
stroke-dashoffset: 42;
transition: all 0.2s linear;
transition-delay: 0.15s;
}
/* Conception pour l'accessibilité */
#data-verification-icon:focus, .data-verification-close:focus, #data-verification-container input:focus ~ #data-verification-icon svg, #data-verification-container a:focus {
box-shadow: 0 0 0 3px rgba(21, 156, 228, 0.4);
transition: all 0.3s ease;
outline: none;
transform: scale(1.06);
}
/* Élément de chargement */
.loading {
display: none;
top:50vh;
left:50vw;
position:fixed;
}
.loading:not(:required):after {
content: '';
display: block;
font-size: 10px;
width: 1em;
hauteur : 1em;
marge-haut : -0.5em;
-webkit-animation : spinner 1500ms infinite linear;
-moz-animation : spinner 1500ms infinite linear;
-ms-animation : spinner 1500ms infinite linear;
-o-animation : spinner 1500ms infinite linear;
animation : spinner 1500ms infinite linear;
border-radius : 0.5em;
-webkit-box-shadow : rgba(255,255,255, 1) 1.5em 0 0 0, rgba(255,255,255, 1) 1.1em 1.1em 0 0, rgba(255,255,255, 1) 0 1.5em 0 0, rgba(255,255,255, 1) -1.1em 1.1em 0 0, rgba(255,255,255, 1) -1.5em 0 0 0, rgba(255,255,255, 1) -1.1em -1.1em 0 0, rgba(255,255,255, 1) 0 -1.5em 0 0, rgba(255,255,255, 1) 1.1em -1.1em 0 0;
box-shadow : rgba(255,255,255, 1) 1.5em 0 0 0, rgba(255,255,255, 1) 1.1em 1.1em 0 0, rgba(255,255,255, 1) 0 1.5em 0 0, rgba(255,255,255, 1) -1.1em 1.1em 0 0, rgba(255,255,255, 1) -1.5em 0 0 0, rgba(255,255,255, 1) -1.1em -1.1em 0 0, rgba(255,255,255, 1) 0 -1.5em 0 0, rgba(255,255,255, 1) 1.1em -1.1em 0 0;
}
#gdpr_page .list-unstyled li button {
curseur : pointer;
}
.show-isense {
transition : opacité 400ms !important;
}
.hide-isense {
opacité : 0 !important;
transition : 0.4s ease-out;
}
/* Modifications de la fenêtre modale en résolution mobile */
@media uniquement écran et (largeur maximale : 600px) {
#data-verification-modal {
largeur : 90%;
}
}
/* Animation */
@-webkit-keyframes spinner {
0% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-moz-keyframes spinner {
0% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-o-keyframes spinner {
0% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes spinner {
0% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
Lorsque vous soumettez une Demande d'Accès aux Données Personnelles (DSAR) via notre page Conformité, notre prestataire de conformité, Consentmo, traite votre adresse IP et votre e-mail uniquement pour satisfaire votre demande. Cela garantit une gestion sécurisée et vérifiée de vos informations personnelles. Pour plus de détails sur la gestion de vos données, vous pouvez consulter la Politique de Traitement des Données de Consentmo en cliquant sur ce lien : Politique de Traitement des Données de Consentmo.
Rectification des données
Si les données de votre compte sont inexactes ou nécessitent des mises à jour, vous pouvez les rectifier efficacement en utilisant le lien fourni ci-dessous. Cette fonctionnalité garantit que vos informations personnelles, essentielles pour une expérience fluide avec notre gamme de produits comme les sacs et portefeuilles pour femmes, restent à jour et précises.
Portabilité des données
Nous vous permettons de télécharger toutes les données que nous stockons, utilisées pour améliorer votre expérience d'achat, notamment lors de la navigation dans notre collection exquise de sacs et portefeuilles pour femmes. Cela vous assure un contrôle total et un accès complet à vos données personnelles.
Accès aux données personnelles
Vous pouvez demander un rapport complet détaillant toutes les informations personnelles que nous conservons à votre sujet. Nous nous engageons à répondre à votre demande dans un délai de 30 jours, vous offrant transparence et accès à vos données. Ce processus est facilité via la fonction gdprsendrequest resp, garantissant une livraison sécurisée de vos informations.
Droit à l'oubli
Cette option vous permet de supprimer définitivement vos données personnelles et autres données associées de notre boutique. Veuillez noter que l'initiation de ce processus entraînera la suppression de votre compte, le rendant inaccessible pour une utilisation future. L'animation de chargement, ressemblant à un spinner 1500ms infini, tournant à 360deg, indiquera le traitement de votre demande.
Droit de restreindre le traitement
Dans certaines circonstances, vous avez le droit de demander que nous limitions ou suspendions temporairement le traitement de vos données personnelles. Pour obtenir de l'aide dans l'exercice de ce droit, veuillez nous contacter directement à stiledonnabags@gmail.com.
Droit d'opposition
Vous avez le droit de vous opposer à certains types de traitements de données, y compris le marketing direct et le traitement fondé sur des intérêts légitimes. Pour soumettre votre objection et garantir le respect de vos préférences, veuillez nous contacter à stiledonnabags@gmail.com.
Informations de contact
Pour toute question concernant vos données personnelles ou vos droits à la vie privée, veuillez contacter notre Délégué à la Protection des Données (DPO) aux coordonnées suivantes :
Email : stiledonnabags@gmail.com
Adresse : Via Testulla 149, 95122 Catania Catania, Italie
Droit de déposer une plainte
Si vous estimez que vos préoccupations n'ont pas été traitées de manière adéquate, vous conservez le droit de déposer une plainte auprès de votre autorité nationale de protection des données.
/* REMONTER */
let slideUp = (target, duration=500) => {
target.style.transitionProperty = 'height, margin, padding';
target.style.transitionDuration = duration + 'ms';
target.style.boxSizing = 'border-box';
target.style.height = target.offsetHeight + 'px';
target.offsetHeight;
target.style.overflow = 'hidden';
target.style.height = 0;
target.style.paddingTop = 0;
target.style.paddingBottom = 0;
target.style.marginTop = 0;
target.style.marginBottom = 0;
window.setTimeout( () => {
target.style.display = 'none';
target.style.removeProperty('height');
target.style.removeProperty('padding-top');
target.style.removeProperty('padding-bottom');
target.style.removeProperty('margin-top');
target.style.removeProperty('margin-bottom');
target.style.removeProperty('overflow');
target.style.removeProperty('transition-duration');
target.style.removeProperty('transition-property');
}, duration);
}
/* DÉROULER VERS LE BAS */
let slideDown = (target, duration=500) => {
setTimeout(function(){
target.style.removeProperty('display');
let display = window.getComputedStyle(target).display;
if (display === 'none') display = 'block';
target.style.display = display;
let height = target.offsetHeight;
target.style.overflow = 'hidden';
target.style.height = 0;
target.style.paddingTop = 0;
target.style.paddingBottom = 0;
target.style.marginTop = 0;
target.style.marginBottom = 0;
target.offsetHeight;
target.style.boxSizing = 'border-box';
target.style.transitionProperty = "height, margin, padding";
target.style.transitionDuration = duration + 'ms';
target.style.height = height + 'px';
target.style.removeProperty('padding-top');
target.style.removeProperty('padding-bottom');
target.style.removeProperty('margin-top');
target.style.removeProperty('margin-bottom');
window.setTimeout( () => {
target.style.removeProperty('height');
target.style.removeProperty('overflow');
target.style.removeProperty('transition-duration');
target.style.removeProperty('transition-property');
}, duration);
}, 100)
}
/* TOOGLE */
var slideToggle = (target, duration = 500) => {
if (window.getComputedStyle(target).display === 'none') {
return slideDown(target, duration);
} else {
return slideUp(target, duration);
}
}
/* FADE */
var toggleFadeiSense = (elem, show) => {
if (show) {
elem.style.display = "block";
setTimeout(function(){
elem.classList.add('show-isense');
elem.classList.remove('hide-isense');
},20)
} else {
elem.classList.remove('show-isense');
elem.classList.add('hide-isense');
setTimeout(() => {
elem.style.display = 'none';
}, 400)
}
}
var gdprSlideUpAll = function() {
slideUp(document.querySelector('#form-gdpr-edit-account-request'), 100);
document.querySelector('#btn-gdpr-edit-account-request').setAttribute("aria-expanded", "false");
slideUp(document.querySelector('#form-gdpr-requests-request'), 100);
document.querySelector('#btn-gdpr-requests-request').setAttribute("aria-expanded", "false");
slideUp(document.querySelector('#form-gdpr-personal-information-request'), 100);
document.querySelector('#btn-gdpr-personal-information-request').setAttribute("aria-expanded", "false");
slideUp(document.querySelector('#form-gdpr-orders-request'), 100);
document.querySelector('#btn-gdpr-orders-request').setAttribute("aria-expanded", "false");
slideUp(document.querySelector('#form-gdpr-personal-data-report-request'), 100);
document.querySelector('#btn-gdpr-personal-data-report-request').setAttribute("aria-expanded", "false");
slideUp(document.querySelector('#form-gdpr-delete-account-request'), 100);
document.querySelector('#btn-gdpr-delete-account-request').setAttribute("aria-expanded", "false");
document.querySelector('#gdpr_page button').setAttribute("aria-expanded", "false");
};
var email, type, consentGiven = false;
var verificationModalContent = '
Je donne mon consentement pour la collecte de mon email et de mon adresse IP dans le but de traiter cette demande. Pour plus d'informations, consultez la Politique de confidentialité & Conditions d'utilisation.
var isEmailValid = function(email) {
let regex = /^(([^()\[\]\\.,;:\s@"]+(\.[^()\[\]\\.,;:\s@"]+)*)|('.+'))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (email == '' || email == undefined) {
return false;
} else {
return regex.test(email);
}
}
var gdprSendRequest = function(callback) {
fetch('https://www.cloudflare.com/cdn-cgi/trace', {
méthode : 'GET' ,
en-têtes : {
'Content-Type': 'text/plain',
},
})
.then(resp => resp.text())
.then(resp => {
if (!resp.error) {
let ipInfo = resp;
let formData = new FormData();
formData.append("shop", Shopify.shop);
formData.append("email", email);
formData.append("type", type);
formData.append("sourceOfRequest", 1);
formData.append("ipAddress", ipInfo);
formData.append("consentGiven", consentGiven);
formData.append("page", "gdpr");
formData.append("lang", Shopify.locale ? Shopify.locale : "");
formData.append("gtranslateLang", isenseGDPR.Cookies.get("googtrans") ? isenseGDPR.Cookies.get("googtrans") : "");
fetch("https://gdpr.apps.isenselabs.com/gdprRequests/submitRequest", {
method: "POST",
body: formData
})
.then(resp => resp.json())
.then(resp => {
if (!resp.error) {
gdprSlideUpAll();
if (resp.message.length) {
alert(resp.message);
} else {
alert("Votre demande a été soumise avec succès. Veuillez vérifier votre e-mail pour plus d'informations.");
}
} else {
alert(resp.message);
}
if (typeof callback == 'function') {
callback(resp);
}
})
.catch(error => {
alert(error.message);
})
}
else {
alert(resp.message);
}
})
}
// Ajouter la modale au body, sinon elle ne restera pas centrée (même si la position est fixe)
document.querySelector("body").insertAdjacentHTML( 'beforeend', verificationModalContent);
document.addEventListener("DOMContentLoaded", function() {
// Lorsque l'utilisateur clique sur (x), fermer la fenêtre modale
document.querySelector('.data-verification-close').addEventListener('click', function(e) {
e.preventDefault();
closeVerificationModal();
});
document.querySelector('#data-verification-icon, #data-verification-container p').addEventListener('click', function(e) {
e.preventDefault();
// Détecter un clic sur un href, car il est écrasé.
if(e.target.tagName === "A") {
window.open(e.target.href, '_blank');
return;
}
document.querySelector('#data-verification-icon').classList.add("clicked");
setTimeout(()=>{
toggleFadeiSense(document.querySelector("#data-verification-modal"), false);
document.querySelector('#data-verification-background .loading').style.display = 'inline-block';
consentGiven = true;
gdprSendRequest(function(resp) {
consentGiven = false;
closeVerificationModal();
});
}, 400);
});
});
function openVerificationModal(){
if(!isEmailValid(email)) {
alert('Email invalide');
return;
}
toggleFadeiSense(document.querySelector("#data-verification-modal"), true);
toggleFadeiSense(document.querySelector('#data-verification-background'), true);
document.querySelector('#data-verification-container input').focus();
}
function closeVerificationModal(){
toggleFadeiSense(document.querySelector("#data-verification-background"), false);
document.querySelector('#data-verification-icon').classList.remove("clicked");
document.querySelector('#data-verification-background .loading').style.display = 'none';
// Mettre le focus sur le bouton du type de demande sélectionné
let gdprForms = document.querySelectorAll('.form-gdpr-request');
gdprForms.forEach(function(gdprForm) {
if (gdprForm.style.display !== "none") {
let gdprFormLinks = gdprForm.previousElementSibling.querySelectorAll('li');
if (gdprFormLinks.length === 1) {
gdprFormLinks[0].querySelector('button').focus();
} else {
// Logique de mise au point pour les demandes de portabilité des données
gdprFormLinks = gdprForm.parentElement;
if (gdprFormLinks.nodeName === 'LI') {
gdprFormLinks.querySelector('button').focus();
}
}
}
});
}
document.querySelector('#btn-gdpr-edit-account-request').addEventListener('click', function(e) {
e.preventDefault();
let isExpanded = this.getAttribute('aria-expanded') === 'true' ? true : false;
gdprSlideUpAll();
if(!isExpanded) {
slideDown(document.querySelector('#form-gdpr-edit-account-request'), 200);
this.setAttribute("aria-expanded", "true");
} else {
slideUp(document.querySelector('#form-gdpr-edit-account-request'), 200);
this.setAttribute("aria-expanded", "false");
}
});
document.querySelector('#form-gdpr-edit-account-request-submit').addEventListener('click', function(e) {
e.preventDefault();
email = document.querySelector('#form-gdpr-edit-account-request-email').value;
type = 'customer/edit';
gdprSendRequest(function(resp) {
consentGiven = true;
});
});
document.querySelector('#btn-gdpr-requests-request').addEventListener('click', function(e) {
e.preventDefault();
let isExpanded = this.getAttribute('aria-expanded') === 'true' ? true : false;
gdprSlideUpAll();
if(!isExpanded) {
slideDown(document.querySelector('#form-gdpr-requests-request'), 200);
this.setAttribute("aria-expanded", "true");
} else {
slideUp(document.querySelector('#form-gdpr-requests-request'), 200);
this.setAttribute("aria-expanded", "false");
}
});
document.querySelector('#form-gdpr-requests-request-submit').addEventListener('click', function(e) {
e.preventDefault();
email = document.querySelector('#form-gdpr-requests-request-email').value;
type = 'customer/requests';
gdprSendRequest(function(resp) {
consentGiven = true;
});
});
document.querySelector('#btn-gdpr-personal-information-request').addEventListener('click', function(e) {
e.preventDefault();
let isExpanded = this.getAttribute('aria-expanded') === 'true' ? true : false;
gdprSlideUpAll();
if(!isExpanded) {
slideDown(document.querySelector('#form-gdpr-personal-information-request'), 200);
this.setAttribute("aria-expanded", "true");
} else {
slideUp(document.querySelector('#form-gdpr-personal-information-request'), 200);
this.setAttribute("aria-expanded", "false");
}
});
document.querySelector('#form-gdpr-personal-information-request-submit').addEventListener('click', function(e) {
e.preventDefault();
email = document.querySelector('#form-gdpr-personal-information-request-email').value;
type = 'customer/personal_info';
gdprSendRequest(function(resp) {
consentGiven = true;
});
});
document.querySelector('#btn-gdpr-orders-request').addEventListener('click', function(e) {
e.preventDefault();
let isExpanded = this.getAttribute('aria-expanded') === 'true' ? true : false;
gdprSlideUpAll();
if(!isExpanded) {
slideDown(document.querySelector('#form-gdpr-orders-request'), 200);
this.setAttribute("aria-expanded", "true");
} else {
slideUp(document.querySelector('#form-gdpr-orders-request'), 200);
this.setAttribute("aria-expanded", "false");
}
});
document.querySelector('#form-gdpr-orders-request-submit').addEventListener('click', function(e) {
e.preventDefault();
email = document.querySelector('#form-gdpr-orders-request-email').value;
type = 'customer/orders';
gdprSendRequest(function(resp) {
consentGiven = true;
});
});
document.querySelector('#btn-gdpr-personal-data-report-request').addEventListener('click', function(e) {
e.preventDefault();
let isExpanded = this.getAttribute('aria-expanded') === 'true' ? true : false;
gdprSlideUpAll();
if(!isExpanded) {
slideDown(document.querySelector('#form-gdpr-personal-data-report-request'), 200);
this.setAttribute("aria-expanded", "true");
} else {
slideUp(document.querySelector('#form-gdpr-personal-data-report-request'), 200);
this.setAttribute("aria-expanded", "false");
}
});
document.querySelector('#form-gdpr-personal-data-report-request-submit').addEventListener('click', function(e) {
e.preventDefault();
email = document.querySelector('#form-gdpr-personal-data-report-request-email').value;
type = 'customer/report';
gdprSendRequest(function(resp) {
consentGiven = true;
});
});
document.querySelector('#btn-gdpr-delete-account-request').addEventListener('click', function(e) {
e.preventDefault();
let isExpanded = this.getAttribute('aria-expanded') === 'true' ? true : false;
gdprSlideUpAll();
if(!isExpanded) {
slideDown(document.querySelector('#form-gdpr-delete-account-request'), 200);
this.setAttribute("aria-expanded", "true");
} else {
slideUp(document.querySelector('#form-gdpr-delete-account-request'), 200);
this.setAttribute("aria-expanded", "false");
}
});
document.querySelector('#form-gdpr-delete-account-request-submit').addEventListener('click', function(e) {
e.preventDefault();
email = document.querySelector('#form-gdpr-delete-account-request-email').value;
type = 'customer/delete';
gdprSendRequest(function(resp) {
consentGiven = true;
});
});
// Navigation au clavier dans la fenêtre modale de vérification des données pour l'accessibilité
document.querySelector('#data-verification-modal').addEventListener('keydown', function(e) {
let isTabPressed = e.keyCode === 9 || e.key === "Tab" || e.code === "Tab";
let isEscapePressed = e.keyCode === 27 || e.key === "Échap" || e.code === "Échap";
let isSpacePressed = event.keyCode === 32 || e.key === " " || event.code === "Espace";
let isEnterPressed = event.keyCode === 13 || e.key === "Entrée" || event.code === "Enter";
let dataVerificationCloseButton = document.querySelector('.data-verification-close');
let dataVerificationCheckbox = document.querySelector('#data-verification-container input');
let dataVerificationLink = document.querySelector('#data-verification-container a');
// Cette fonction nous évite d'appeler e.preventDefault() après chaque mise au point
let executeFocus = (focusElement) => {focusElement.focus();e.preventDefault();}
if (isEscapePressed) {
if (dataVerificationCloseButton) {
dataVerificationCloseButton.click();
}
}
if (isSpacePressed || isEnterPressed) {
if (document.activeElement === dataVerificationCheckbox) {
document.querySelector('#data-verification-container #data-verification-icon').click();
}
}
if (isTabPressed) {
if (e.shiftKey) {
if (dataVerificationCloseButton && document.activeElement === dataVerificationCloseButton) {
executeFocus(dataVerificationLink);
}
} else {
if (dataVerificationLink && document.activeElement === dataVerificationLink) {
executeFocus(dataVerificationCloseButton);
}
}
}
});
```

