46 lines
1.5 KiB
JavaScript
46 lines
1.5 KiB
JavaScript
/**
|
|
* RYM Horizon - Core Navigation Script
|
|
* @description Gestionnaire d'onglets découplé conforme aux standards W3C
|
|
*/
|
|
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
|
|
// Sélecteurs d'éléments de navigation
|
|
const navLinks = document.querySelectorAll('.sidebar .nav-link');
|
|
const tabContents = document.querySelectorAll('.tab-content');
|
|
|
|
/**
|
|
* Bascule l'affichage vers l'onglet ciblé
|
|
* @param {string} targetTabId - L'identifiant de la section à afficher
|
|
*/
|
|
const switchTab = (targetTabId) => {
|
|
// 1. Masquer tous les contenus actifs
|
|
tabContents.forEach(content => content.classList.remove('active'));
|
|
|
|
// 2. Afficher le contenu demandé
|
|
const activeTarget = document.getElementById(targetTabId);
|
|
if (activeTarget) {
|
|
activeTarget.classList.add('active');
|
|
}
|
|
};
|
|
|
|
// Attribution dynamique des écouteurs d'événements
|
|
navLinks.forEach(link => {
|
|
link.addEventListener('click', (event) => {
|
|
event.preventDefault();
|
|
|
|
// Récupération de l'ID cible via le dataset
|
|
const targetTab = link.getAttribute('data-tab');
|
|
|
|
if (targetTab) {
|
|
// Gestion de l'état graphique de la navigation
|
|
navLinks.forEach(item => item.classList.remove('active'));
|
|
link.classList.add('active');
|
|
|
|
// Exécution de la bascule logique
|
|
switchTab(targetTab);
|
|
}
|
|
});
|
|
});
|
|
});
|