63 lines
1.7 KiB
JavaScript
63 lines
1.7 KiB
JavaScript
|
|
/**
|
||
|
|
* Logique JavaScript côté client
|
||
|
|
*/
|
||
|
|
|
||
|
|
document.addEventListener('DOMContentLoaded', () => {
|
||
|
|
// 1. Filtrage instantané de la liste des véhicules
|
||
|
|
initLiveSearch();
|
||
|
|
|
||
|
|
// 2. Auto-disparition des alertes flash après 5 secondes
|
||
|
|
initFlashAutoDismiss();
|
||
|
|
});
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Filtre en direct les cartes de voitures selon la saisie
|
||
|
|
*/
|
||
|
|
function initLiveSearch() {
|
||
|
|
const searchInput = document.getElementById('searchInput');
|
||
|
|
const carCounter = document.getElementById('carCounter');
|
||
|
|
const cards = document.querySelectorAll('.car-card');
|
||
|
|
|
||
|
|
if (!searchInput || cards.length === 0) return;
|
||
|
|
|
||
|
|
searchInput.addEventListener('input', (e) => {
|
||
|
|
const query = e.target.value.toLowerCase().trim();
|
||
|
|
let visibleCount = 0;
|
||
|
|
|
||
|
|
cards.forEach((card) => {
|
||
|
|
const content = card.getAttribute('data-search') || '';
|
||
|
|
if (content.includes(query)) {
|
||
|
|
card.style.display = 'flex';
|
||
|
|
visibleCount++;
|
||
|
|
} else {
|
||
|
|
card.style.display = 'none';
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
if (carCounter) {
|
||
|
|
carCounter.textContent = visibleCount;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fait disparaître les messages flash automatiquement
|
||
|
|
*/
|
||
|
|
function initFlashAutoDismiss() {
|
||
|
|
const alert = document.getElementById('flash-alert');
|
||
|
|
if (!alert) return;
|
||
|
|
|
||
|
|
setTimeout(() => {
|
||
|
|
alert.style.transition = 'opacity 0.5s ease';
|
||
|
|
alert.style.opacity = '0';
|
||
|
|
setTimeout(() => alert.remove(), 500);
|
||
|
|
}, 5000);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Confirmation générique pour les actions destructives
|
||
|
|
*/
|
||
|
|
function confirmAction(message) {
|
||
|
|
return window.confirm(message || 'Voulez-vous vraiment effectuer cette action ?');
|
||
|
|
}
|