wip: new site files
This commit is contained in:
commit
e6206a94cf
11 changed files with 2820 additions and 0 deletions
73
js/main.js
Normal file
73
js/main.js
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
/* ── NAV TOGGLE ─────────────────────────────────────── */
|
||||
(function () {
|
||||
const nav = document.querySelector('.nav');
|
||||
const toggle = document.querySelector('.nav-toggle');
|
||||
if (!toggle) return;
|
||||
toggle.addEventListener('click', () => {
|
||||
const open = nav.classList.toggle('menu-open');
|
||||
toggle.setAttribute('aria-expanded', open);
|
||||
});
|
||||
document.addEventListener('click', (e) => {
|
||||
if (!nav.contains(e.target)) {
|
||||
nav.classList.remove('menu-open');
|
||||
toggle.setAttribute('aria-expanded', 'false');
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
/* ── EVENT CARDS ─────────────────────────────────────── */
|
||||
(function () {
|
||||
document.querySelectorAll('.event-summary').forEach((summary) => {
|
||||
summary.addEventListener('click', () => {
|
||||
const card = summary.closest('.event-card');
|
||||
const isOpen = card.classList.contains('open');
|
||||
// close all
|
||||
document.querySelectorAll('.event-card.open').forEach(c => c.classList.remove('open'));
|
||||
if (!isOpen) card.classList.add('open');
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
||||
/* ── BOOKING FORMS ───────────────────────────────────── */
|
||||
(function () {
|
||||
document.querySelectorAll('.booking-form').forEach((form) => {
|
||||
form.addEventListener('submit', (e) => {
|
||||
e.preventDefault();
|
||||
const card = form.closest('.form-card');
|
||||
const success = card.querySelector('.form-success');
|
||||
if (!success) return;
|
||||
form.style.display = 'none';
|
||||
success.style.display = 'block';
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
||||
/* ── DATE → TIME DEPENDENCY ──────────────────────────── */
|
||||
(function () {
|
||||
document.querySelectorAll('input[type="date"]').forEach((dateInput) => {
|
||||
const form = dateInput.closest('form');
|
||||
if (!form) return;
|
||||
const timeSelect = form.querySelector('select[name="time"]');
|
||||
if (!timeSelect) return;
|
||||
dateInput.addEventListener('change', () => {
|
||||
timeSelect.disabled = !dateInput.value;
|
||||
if (!dateInput.value) {
|
||||
timeSelect.value = '';
|
||||
timeSelect.querySelector('option[value=""]').textContent = 'Pick a date first';
|
||||
} else {
|
||||
timeSelect.querySelector('option[value=""]').textContent = 'Select a time';
|
||||
}
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
||||
/* ── MARK CURRENT NAV LINK ───────────────────────────── */
|
||||
(function () {
|
||||
const path = window.location.pathname.replace(/\/$/, '') || '/';
|
||||
document.querySelectorAll('.nav-links a').forEach((a) => {
|
||||
const href = a.getAttribute('href').replace(/\/$/, '') || '/';
|
||||
if (path === href || (href !== '/' && path.startsWith(href))) {
|
||||
a.setAttribute('aria-current', 'page');
|
||||
}
|
||||
});
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue