Site personnel courcellematthi.eu
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
/**
|
||||
* main.js — Point d'entrée de l'application
|
||||
* =============================================================================
|
||||
* Orchestre l'initialisation des modules. Chaque module est indépendant :
|
||||
* si l'un échoue, les autres continuent de fonctionner.
|
||||
*
|
||||
* PRINCIPE DIRECTEUR — amélioration progressive
|
||||
* ---------------------------------------------
|
||||
* Le site est intégralement lisible, navigable et imprimable sans
|
||||
* JavaScript. Tout ce que ce fichier ajoute relève du confort :
|
||||
*
|
||||
* - navigation.js : replie le menu sur petit écran
|
||||
* - scroll-spy.js : surligne la section en cours de lecture
|
||||
* - back-to-top.js : raccourci de remontée
|
||||
* - copy-email.js : copie de l'adresse en un clic
|
||||
*
|
||||
* Aucun contenu n'est injecté par script : le HTML servi est complet.
|
||||
* C'est ce qui garantit l'indexation par les moteurs de recherche et la
|
||||
* lecture par les agents conversationnels, dont beaucoup n'exécutent pas
|
||||
* JavaScript.
|
||||
*
|
||||
* CHARGEMENT
|
||||
* ----------
|
||||
* Ce fichier est appelé avec type="module", donc :
|
||||
* - différé par défaut (équivalent à defer), il ne bloque pas le rendu
|
||||
* - exécuté en mode strict
|
||||
* - portée isolée, aucune variable globale
|
||||
*/
|
||||
|
||||
import { initNavigation } from "./modules/navigation.js";
|
||||
import { initScrollSpy } from "./modules/scroll-spy.js";
|
||||
import { initBackToTop } from "./modules/back-to-top.js";
|
||||
import { initCopyEmail } from "./modules/copy-email.js";
|
||||
|
||||
/**
|
||||
* Démarre les modules de la page.
|
||||
* @returns {void}
|
||||
*/
|
||||
function init() {
|
||||
/* --- Signale que JS est actif : permet au CSS de n'appliquer certains
|
||||
comportements (menu replié) que lorsqu'ils sont pilotables ------- */
|
||||
document.documentElement.dataset.js = "true";
|
||||
|
||||
initNavigation({
|
||||
toggle: document.querySelector("[data-nav-toggle]"),
|
||||
nav: document.querySelector("[data-nav]"),
|
||||
});
|
||||
|
||||
initScrollSpy({
|
||||
sections: document.querySelectorAll("[data-section]"),
|
||||
links: document.querySelectorAll("[data-nav-link]"),
|
||||
});
|
||||
|
||||
initBackToTop({
|
||||
button: document.querySelector("[data-to-top]"),
|
||||
sentinel: document.querySelector("[data-scroll-sentinel]"),
|
||||
});
|
||||
|
||||
initCopyEmail({
|
||||
button: document.querySelector("[data-copy]"),
|
||||
status: document.querySelector("[data-status]"),
|
||||
});
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------
|
||||
Les modules sont différés, le DOM est donc normalement prêt. On teste
|
||||
malgré tout readyState : cela rend le script robuste s'il est un jour
|
||||
réutilisé dans un contexte de chargement différent.
|
||||
----------------------------------------------------------------------- */
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", init, { once: true });
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
Reference in New Issue
Block a user