PageSourceSearch

https://maallust.nl/wp-content/plugins/recras/js/recras.js?ver=6.5.0

js maallust.nl collected 2026-09-26 11:36:08 UTC 4,502 bytes, 118 lines download raw bytes

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.