Files
LazyBot/app/public/guild/navigation.js
T
Arthur Puechberty 95cd796839 refonte css of site
2026-01-17 20:59:52 +01:00

101 lines
2.8 KiB
JavaScript

// Navigation sidebar avec hash routing
document.addEventListener('DOMContentLoaded', () => {
const navItems = document.querySelectorAll('.nav-item[data-section]');
const sections = document.querySelectorAll('.config-section');
const sidebar = document.getElementById('sidebar');
const mobileToggle = document.getElementById('mobile-toggle');
// Fonction pour changer de section
function showSection(sectionId) {
// Masquer toutes les sections
sections.forEach(section => {
section.classList.remove('active');
});
// Retirer la classe active de tous les nav items
navItems.forEach(item => {
item.classList.remove('active');
});
// Afficher la section cible
const targetSection = document.getElementById(`section-${sectionId}`);
if (targetSection) {
targetSection.classList.add('active');
}
// Activer le nav item correspondant
const targetNav = document.querySelector(`.nav-item[data-section="${sectionId}"]`);
if (targetNav) {
targetNav.classList.add('active');
}
// Fermer la sidebar sur mobile
if (window.innerWidth <= 900) {
sidebar.classList.remove('open');
}
// Mettre à jour l'URL
window.location.hash = sectionId;
}
// Ajouter les listeners sur les nav items
navItems.forEach(item => {
item.addEventListener('click', (e) => {
e.preventDefault();
const sectionId = item.dataset.section;
showSection(sectionId);
});
});
// Gérer le hash au chargement de la page
function handleHash() {
const hash = window.location.hash.slice(1); // Enlever le #
if (hash && document.getElementById(`section-${hash}`)) {
showSection(hash);
} else {
// Par défaut, afficher la première section
const firstNavItem = navItems[0];
if (firstNavItem) {
showSection(firstNavItem.dataset.section);
}
}
}
// Écouter les changements de hash
window.addEventListener('hashchange', handleHash);
// Charger la section initiale
handleHash();
// Toggle sidebar sur mobile
if (mobileToggle) {
mobileToggle.addEventListener('click', () => {
sidebar.classList.toggle('open');
});
}
// Fermer la sidebar en cliquant à l'extérieur sur mobile
document.addEventListener('click', (e) => {
if (window.innerWidth <= 900) {
if (!sidebar.contains(e.target) && !mobileToggle.contains(e.target)) {
sidebar.classList.remove('open');
}
}
});
});
// Helper function pour afficher les messages de statut
window.showStatus = function(elementId, message, type = 'success') {
const element = document.getElementById(elementId);
if (element) {
element.textContent = message;
element.className = `status-message show ${type}`;
// Masquer après 5 secondes
setTimeout(() => {
element.classList.remove('show');
}, 5000);
}
};