mirror of
https://github.com/arthur-pbty/LazyBot.git
synced 2026-06-03 23:36:37 +02:00
101 lines
2.8 KiB
JavaScript
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);
|
|
}
|
|
};
|