60 lines
1.8 KiB
JavaScript
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);
|
|
}
|
|
});
|