39519-vm/assets/js/main.js
Flatlogic Bot edfa4d1aab first
2026-04-08 10:44:00 +00:00

60 lines
1.8 KiB
JavaScript

document.addEventListener('DOMContentLoaded', () => {
const nav = document.querySelector('.navbar');
const onScroll = () => {
if (!nav) return;
nav.classList.toggle('scrolled', window.scrollY > 12);
};
onScroll();
window.addEventListener('scroll', onScroll, { passive: true });
const toastEl = document.querySelector('.toast[data-autoshow="true"]');
if (toastEl && window.bootstrap?.Toast) {
const toast = new window.bootstrap.Toast(toastEl, { delay: 5000 });
toast.show();
}
const modal = document.getElementById('projectModal');
if (modal) {
modal.addEventListener('show.bs.modal', (event) => {
const trigger = event.relatedTarget;
if (!trigger) return;
const mapping = {
projectModalLabel: 'title',
projectModalKicker: 'kicker',
projectModalDescription: 'description',
projectModalImpact: 'impact',
projectModalDeliverables: 'deliverables',
projectModalStack: 'stack',
};
Object.entries(mapping).forEach(([elementId, dataKey]) => {
const element = document.getElementById(elementId);
if (!element) return;
element.textContent = trigger.getAttribute(`data-${dataKey}`) || '';
});
});
}
const form = document.querySelector('.needs-validation');
if (form) {
form.addEventListener('submit', (event) => {
if (!form.checkValidity()) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
});
}
const messageField = document.getElementById('message');
const counter = document.getElementById('messageCount');
if (messageField && counter) {
const syncCount = () => {
counter.textContent = `${messageField.value.length} / 2500`;
};
syncCount();
messageField.addEventListener('input', syncCount);
}
});