1window.gtag = function () { 2 dataLayer.push(arguments); 3} 4const freePhoneNumEl = document.getElementById('num-vert'); 5freePhoneNumEl.addEventListener('click', () => { 6 window.gtag( 7 'event', 8 'clic_numero_vert', 9 { 10 'event_category': 'telephone', 11 'event_label': 'numero_vert', 12 'value': 1 13 } 14 ); 15}); 16const submitBtn = document.getElementById('submitButton'); 17const messagesArea = document.querySelector('[data-interact="funnel-messages"]'); 18 19const titleField = document.getElementById('title'); 20const firstnameField = document.getElementById('firstName'); 21const lastnameField = document.getElementById('lastName'); 22const postalCodeField = document.getElementById('cp'); 23const addressField = document.getElementById('address'); 24const cityField = document.getElementById('ville'); 25const phoneField = document.getElementById('phone'); 26const prefixPhoneField = document.getElementById('country-prefix-phone'); 27const emailField = document.getElementById("mail"); 28const emailMsgArea = document.getElementById('email-msg-area'); 29const phoneMsgArea = document.getElementById('phone-msg-area'); 30const postalCodeMsgArea = document.getElementById('zipCode-msg-area'); 31 32const formEl = document.getElementById('documentation'); 33// Validation front : tous les champs required doivent être renseigné 34submitBtn.addEventListener('click', (e) => { 35 e.preventDefault(); 36 if(!formIsValid()) { 37 return; 38 } 39 grecaptcha.execute().then((token) => { 40 document.getElementById('g-recaptcha-response').value = token; 41 const url= window.url_site.value + "api/documentation.php"; 42 let formData = new FormData(formEl); 43 fetch(url, { 44 method: 'POST', 45 body: formData 46 }) 47 .then((response) => response.json()) 48 .then(async (data) => { 49 if(data.status !== 200) { 50 messagesArea.innerHTML = layout_message(data.message, 'error'); 51 return; 52 } 53 const hashedEmail = await window.sha256(formData.get('email')); 54 const hashedPhoneNumber = await window.sha256(formData.get('email')); 55 56 window.gtag( 57 'event', 58 'formulaire_documentation', 59 { 60 'user_email': hashedEmail, 61 'user_phone': hashedPhoneNumber, 62 'event_category': 'formulaire', 63 'event_label': 'documentation', 64 'value': 1 65 } 66 ); 67 formEl.submit() 68 }) 69 .catch((err) => { 70 console.error(err); 71 }) 72 }); 73}) 74 75const formIsValid = function() { 76 phoneMsgArea.innerHTML = ""; 77 emailMsgArea.innerHTML = ""; 78 messagesArea.innerHTML = ""; 79 postalCodeMsgArea.innerHTML = ""; 80 81 let isValid = true; 82 83 const areInputFilled= titleField.value !== "" && firstnameField.value !== "" && lastnameField.value !== "" && 84 postalCodeField.value !== "" && cityField.value !== "" && 85 phoneField.value !== "" && emailField.value !== "" && addressField.value !== "" 86 ; 87 88 // On vérifie que le champs téléphone a le bon nombre de chiffres : 10 pour les numéros français et 9 pour les numéros belges 89 const phoneRegex = prefixPhoneField.value === 'be' ? /^\d{9}$/ : /^\d{10}$/; 90 91 const isPhoneValid = phoneRegex.test(phoneField.value.replace(/\s+/g, '')); // On enlève les espaces avant de tester 92 93 // On vérifie que le champs code postal contient au minimum 4 chiffres 94 const postalCodeRegex = /^\d{4,}$/; 95 const isPostalCodeValid = postalCodeRegex.test(postalCodeField.value); 96 97 // On vérifie également le format de l'email 98 const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; 99 const isEmailValid = emailRegex.test(emailField.value); 100 101 if(!isPostalCodeValid) { 102 postalCodeMsgArea.innerHTML = layout_message("Le code postal doit contenir 5 chiffres (France métropolitaine) ou 4 chiffres (DOM, Belgique).", 'error'); 103 isValid = false;
104 } 105 106 if (!isPhoneValid) { 107 phoneMsgArea.innerHTML = layout_message("Le numéro de téléphone renseigné n'est pas valide.", 'error'); 108 isValid = false; 109 } 110 111 if (!isEmailValid) { 112 emailMsgArea.innerHTML = layout_message("L'adresse email renseignée n'est pas valide.", 'error'); 113 isValid = false; 114 } 115 116 if(!areInputFilled) { 117 messagesArea.innerHTML = layout_message("Merci de renseigner tous les champs marqué d'une étoile pour passer à l'étape suivante", 'error'); 118 isValid = false; 119 } 120 121 return isValid; 122}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.