PageSourceSearch

https://lcrnyc.org/assets/js/contact-form.js

js lcrnyc.org collected 2026-09-25 09:17:20 UTC 2,157 bytes, 65 lines download raw bytes

1async function submitContactForm(form) {
2    const url = `${window.NUCLEUS_API}/websites/${window.SITE_ID}/forms/contact`;
3
4    const email = form.querySelector('input[name="email"]');
5    const phone = form.querySelector('input[name="phone"]');
6    const firstName = form.querySelector('input[name="first_name"]');
7    const lastName = form.querySelector('input[name="last_name"]');
8    const tag = form.querySelector('input[name="tag"]');
9    const message = form.querySelector('textarea[name="message"]');
10
11    const payload = {
12        email: email.value,
13        phone: phone.value,
14        first_name: firstName.value,
15        last_name: lastName.value,
16        tag: tag?.value ?? null,
17        message: message.value,
18    };
19
20    const successEl = form.querySelector('[data-submit-message]');
21    
22    if (successEl) {
23        successEl.style.display = 'none';
24    }
25
26    const properties = ['email', 'phone', 'first_name', 'last_name', 'message', 'tag'];
27    for (const property of properties) {
28        const errorEl = form.querySelector(`[data-error-${property}]`);
29
30        if (errorEl) {
31            errorEl.style.display = 'none';
32            errorEl.innerHTML = '';
33        }
34    }
35
36    try {
37        await window.axios.post(url, payload);
38        form.reset();
39        successEl.style.display = 'inline';
40    } catch (error) {
41        const errors = error.response.data.errors ?? null;
42
43        if (errors) {
44            for (const error of Object.entries(errors)) {
45                const property = error[0];
46                const message = error[1][0];
47                const errorEl = form.querySelector(`[data-error-${property}]`);
48                if (errorEl) {
49                    errorEl.style.display = 'inline';
50                    errorEl.innerHTML = message;
51                }
52            }
53        }
54    }
55}
56
57document.addEventListener('DOMContentLoaded', function () {
58    const forms = document.querySelectorAll('form[data-contact-form]');
59    forms.forEach(function (form) {
60        form.addEventListener('submit', async function (e) {
61            e.preventDefault();
62            submitContactForm(form);
63        });
64    });
65});

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.