40119-vm/assets/js/main.js
Flatlogic Bot ffe2db4413 1
2026-05-27 22:29:09 +00:00

57 lines
1.9 KiB
JavaScript

document.addEventListener('DOMContentLoaded', () => {
const quoteForm = document.getElementById('quoteForm');
const toastEl = document.getElementById('quoteToast');
const nav = document.getElementById('mainNav');
const navToggle = document.querySelector('[data-bs-target="#mainNav"]');
const hasBootstrap = Boolean(window.bootstrap);
if (nav && navToggle && !hasBootstrap) {
navToggle.addEventListener('click', () => {
const isOpen = nav.classList.toggle('show');
navToggle.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
});
}
if (toastEl && hasBootstrap) {
window.bootstrap.Toast.getOrCreateInstance(toastEl, { delay: 5200 }).show();
}
document.querySelectorAll('a[href^="#"]').forEach((link) => {
link.addEventListener('click', () => {
if (nav && nav.classList.contains('show')) {
if (hasBootstrap) {
window.bootstrap.Collapse.getOrCreateInstance(nav).hide();
} else {
nav.classList.remove('show');
navToggle?.setAttribute('aria-expanded', 'false');
}
}
});
});
if (!quoteForm) return;
quoteForm.addEventListener('submit', (event) => {
const brief = quoteForm.querySelector('#message');
const submitButton = quoteForm.querySelector('button[type="submit"]');
if (brief && brief.value.trim().length < 20) {
brief.setCustomValidity('Share at least 20 characters about the project.');
} else if (brief) {
brief.setCustomValidity('');
}
if (!quoteForm.checkValidity()) {
event.preventDefault();
event.stopPropagation();
const firstInvalid = quoteForm.querySelector(':invalid');
if (firstInvalid) firstInvalid.focus({ preventScroll: false });
} else if (submitButton) {
submitButton.disabled = true;
submitButton.textContent = 'Sending…';
}
quoteForm.classList.add('was-validated');
});
});