1// jQuery(document).ready(function () { 2// $('a[href^="#"]').on("click", function (e) { 3// var target = this.hash, 4// $target = $(target); 5 6// $("html, body") 7// .stop() 8// .animate( 9// { 10// scrollTop: $target.offset().top - 110, 11// }, 12// 900, 13// "swing", 14// function () { 15// window.location.hash = target; 16// } 17// ); 18// }); 19// }); 20 21(function () { 22 var newsletterForm = document.querySelector('.footer-newsletter[data-gravity-form-id="1"]'); 23 24 if (!newsletterForm) { 25 return; 26 } 27 28 var emailInput = newsletterForm.querySelector('input[type="email"]'); 29 var submitButton = newsletterForm.querySelector('button[type="submit"]'); 30 var errorMessage = newsletterForm.querySelector('.footer-newsletter__error'); 31 var statusMessage = newsletterForm.querySelector('.footer-newsletter__status'); 32 33 function setError(message) { 34 errorMessage.textContent = message || ''; 35 emailInput.setAttribute('aria-invalid', message ? 'true' : 'false'); 36 } 37 38 newsletterForm.addEventListener('submit', function (event) { 39 event.preventDefault(); 40 41 setError(''); 42 statusMessage.textContent = ''; 43 44 if (!emailInput.value.trim() || !emailInput.validity.valid) { 45 setError('Vul een geldig e-mailadres in.'); 46 emailInput.focus(); 47 return; 48 } 49 50 submitButton.disabled = true; 51 52 // Token van Guifi Forms Shield: laat zien dat een echt mens het formulier 53 // heeft geopend en hoe lang erover is gedaan. Lukt ophalen niet, dan gaat 54 // de aanmelding door; de module beoordeelt hem dan strenger. 55 function haalToken() { 56 return fetch('/newsletter-submit.php?token=1', { headers: { Accept: 'application/json' } }) 57 .then(function (response) { return response.ok ? response.json() : {}; }) 58 .catch(function () { return {}; }); 59 } 60 61 haalToken() 62 .then(function (tokenData) { 63 return fetch('/newsletter-submit.php', { 64 method: 'POST', 65 headers: { 66 'Content-Type': 'application/json', 67 'Accept': 'application/json' 68 }, 69 body: JSON.stringify({ 70 email: emailInput.value.trim(), 71 guifi_fs_token: (tokenData && tokenData.token) || '' 72 }) 73 }); 74 }) 75 .then(function (response) { 76 return response.json().catch(function () { 77 return { 78 is_valid: false, 79 message: 'Aanmelden is niet gelukt. Probeer het opnieuw.' 80 }; 81 }); 82 }) 83 .then(function (result) { 84 if (!result.is_valid) { 85 setError(result.message || 'Aanmelden is niet gelukt. Probeer het opnieuw.'); 86 emailInput.focus(); 87 return; 88 } 89 90 statusMessage.textContent = 'Bedankt voor je aanmelding.'; 91 emailInput.select(); 92 }) 93 .catch(function () { 94 setError('Aanmelden is niet gelukt. Probeer het opnieuw.'); 95 }) 96 .then(function () { 97 submitButton.disabled = false; 98 }); 99 }); 100 101 emailInput.addEventListener('input', function () { 102 if (errorMessage.textContent) { 103 setError(''); 104 } 105 }); 106}());
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.