1function removeElsWithClass(className) 2{ 3 const els = document.querySelectorAll('.' + className); 4 for (let el of els) { 5 el.parentNode.removeChild(el); 6 } 7} 8 9function submitRecrasForm(formID, instance, basePath, redirect) 10{ 11 removeElsWithClass('recras-error'); 12 13 const formEl = document.getElementById('recras-form' + formID); 14 const formElements = formEl.querySelectorAll('input, textarea, select'); 15 let elements = {}; 16 17 for (let el of formElements) { 18 if (el.type === 'submit') { 19 continue; 20 } 21 if (el.value === '' && el.required === false) { 22 el.value = null; 23 } 24 if (el.type === 'radio') { 25 const selected = document.querySelector('input[name="' + el.name + '"]:checked'); 26 elements[el.name] = selected.value; 27 } else if (el.type === 'checkbox') { 28 elements[el.name] = []; 29 const checked = document.querySelectorAll('input[name="' + el.name + '"]:checked'); 30 if (checked.length === 0) { 31 const isRequired = document.querySelector('input[name="' + el.name + '"][data-required="1"]'); 32 if (isRequired) { 33 formEl 34 .querySelector('[name="' + el.name + '"]') 35 .parentNode 36 .insertAdjacentHTML('beforeend', '<span class="recras-error">' + recras_l10n.checkboxRequired + '</span>'); 37 return false; 38 } 39 } 40 for (let c of checked) { 41 elements[el.name].push(c.value); 42 } 43 } else { 44 elements[el.name] = el.value; 45 } 46 } 47 if (elements['boeking.arrangement'] === '0') { 48 delete elements['boeking.arrangement']; 49 } 50 51 let submitEl = formEl.querySelector('[type="submit"]'); 52 submitEl.parentNode.insertAdjacentHTML('beforeend', '<img src="' + basePath + 'editor/loading.gif" alt="' + recras_l10n.loading + '" class="recras-loading">'); 53 submitEl.disabled = true; 54 55 const xhr = new XMLHttpRequest(); 56 xhr.open('POST', 'https://' + instance + '/api2/contactformulieren/' + formEl.dataset.formid + '/opslaan'); 57 xhr.send(JSON.stringify(elements)); 58 xhr.onreadystatechange = function () { 59 if (xhr.readyState === 4) { 60 removeElsWithClass('recras-loading'); 61 submitEl.disabled = false; 62 const response = JSON.parse(xhr.response); 63 if (response.success) { 64 if (redirect) { 65 window.location = redirect; 66 } else { 67 formEl.reset(); 68 formEl.querySelector('[type="submit"]').parentNode.insertAdjacentHTML('beforeend', '<p class="recras-success">' + recras_l10n.sent_success + '</p>'); 69 } 70 } else if (response.error) { 71 const errors = response.error.messages; 72 for (let key in errors) { 73 if (errors.hasOwnProperty(key)) { 74 formEl.querySelector('[name="' + key + '"]').parentNode.insertAdjacentHTML('beforeend', '<span class="recras-error">' + errors[key] + '</span>'); 75 } 76 } 77 formEl.querySelector('[type="submit"]').parentNode.insertAdjacentHTML('beforeend', '<p class="recras-error">' + recras_l10n.sent_error + '</p>'); 78 } else { 79 console.log('Unknown response: ', response); 80 } 81 } 82 }; 83 return false; 84} 85 86const dateToString = function(date) { 87 const x = new Date(date.getTime() - (date.getTimezoneOffset() * 60 * 1000)); // Fix off-by-1 errors 88 return x.toISOString().substring(0, 10); // Format as 2018-03-13 89}; 90 91const initPikaday = function(dateInput) { 92 dateInput.setAttribute('type', 'text'); 93 94 let pikadayOptions = { 95 firstDay: 1, // Monday 96 numberOfMonths: 2, 97 reposition: false, 98 toString: function(date) { 99 return dateToString(date); 100 }, 101 field: dateInput, 102 i18n: recras_l10n.pikaday, 103 }; 104 if (dateInput.dataset.mindate) { 105 pikadayOptions.minDate = new Date(dateInput.dataset.mindate); 106 } 107 108 new Pikaday(pikadayOptions); 109}; 110 111document.addEventListener('DOMContentLoaded', function(){ 112 if (typeof Pikaday === 'function') { 113 const dateEls = document.querySelectorAll('.recras-input-date'); 114 for (let el of dateEls) { 115 initPikaday(el); 116 } 117 } 118});
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.