Ce document décrit la structure du projet, le chargement de l’extension, les modules fonctionnels, le stockage des paramètres et le workflow de développement.
CustomDirecte est une extension Chrome Manifest V3 injectée sur EcoleDirecte. Elle est organisée autour de quatre responsabilités :
- un modèle de paramètres indépendant de l’interface ;
- des modules injectés qui appliquent les fonctionnalités au site ;
- une interface de réglages avec plusieurs adaptateurs visuels ;
- un calculateur du bac chargé dans le side panel.
src/
├── manifest.json Manifeste Chrome MV3 et ordre de chargement
├── core/
│ └── settings/ Modèle, migration et définition des paramètres
├── modules/ Fonctionnalités exécutées sur EcoleDirecte
│ ├── customizationModule.js Personnalisation, thème et favicon
│ ├── sidebarModule.js Barre latérale et interactions du menu
│ ├── noteTableModule.js Notes, moyennes, notes custom et BAC
│ ├── popupManager.js Campagnes de popup et suivi d’affichage
│ ├── popupConsoleBridge.js Commandes de test depuis la console du site
│ └── popups/campaigns.js Contenus éditoriaux des campagnes
├── pages/
│ ├── popup/ Interface de réglages
│ │ ├── interface.html Point d’entrée du popup
│ │ ├── interface.js Initialisation et sélection d’adaptateur
│ │ └── interfaces/ Adaptateurs classic et legacy
│ └── bac/ Application React du calculateur du bac
├── styles/ CSS injectés dans EcoleDirecte
├── utils/ Fonctions mathématiques et stockage des notes
├── scripts/ Bootstrap, logs, background et bibliothèques
└── videos/ Démonstrations utilisées par les popups
dev/
├── build-popup.js Génération des ressources popup
├── preview-popup.js Prévisualisation des interfaces
└── validate-popup-architecture.js Vérifications structurelles
Le fichier src/manifest.json charge les scripts sur les pages EcoleDirecte dans cet ordre :
scripts/browser.jsexpose l’API navigateur utilisée par le projet ;scripts/log.jsinitialise le système de logs ;core/settings/settings.jsinitialise le modèle et la migration du stockage ;core/settings/parameters.jsdéclare les groupes et les paramètres ;utils/charge les fonctions partagées ;scripts/main.jsdémarre le gestionnaire de modules ;- les modules de
src/modules/s’enregistrent et appliquent leurs fonctionnalités ; popups/campaigns.jspuispopupManager.jsgèrent les messages contextuels.
Le script popupConsoleBridge.js est injecté dans le monde principal afin d’exposer les commandes de test à la console du site. Le service worker scripts/background.js gère le contexte d’arrière-plan de l’extension.
Les groupes sont déclarés dans src/core/settings/parameters.js. Le modèle est indépendant du DOM : les interfaces affichent les définitions existantes et les changements sont sauvegardés via browser.storage.sync.
Les types de paramètres disponibles sont : Switch, Button, RowSelector, CustomSelector, MultiRowSelector et ColorSelector.
Le stockage synchronisé contient principalement :
settings: groupes, activation et valeurs des paramètres ;version: version du format de stockage, indépendante de la version de l’application ;- les données nécessaires aux migrations depuis l’ancien format V0.
La migration doit toujours transformer l’ancien format vers le nouveau avant de supprimer ou remplacer l’ancien contenu, afin de limiter la durée pendant laquelle deux formats sont présents. Toute nouvelle clé ou tout nouvel identifiant de paramètre doit rester stable.
customizationModule.js applique la couleur, la police, les bordures, le mode sombre, les styles personnalisés et le favicon. Les règles sont encapsulées dans styles/customizations.css.
sidebarModule.js construit la barre latérale, applique son thème, gère son verrouillage et ouvre le panneau de personnalisation. Les options de présentation sont pilotées par le groupe sidebar.
noteTableModule.js ajoute ou adapte les éléments du tableau des notes :
- affichage et recalcul des moyennes ;
- gestion globale des notes custom ;
- ajout, modification et suppression des éléments custom ;
- glisser-déposer d’une moyenne vers les champs compatibles du BAC ;
- affichage du bouton d’ouverture du calculateur du bac.
Lorsque les notes custom sont désactivées, le module doit retirer leur logique et leurs résultats dérivés, pas seulement masquer les boutons.
Le point d’entrée est src/pages/popup/interface.html. interface.js transmet les groupes et versionInfo au registre des interfaces.
Le registre sélectionne l’adaptateur selon interfaceStyle :
interfaces/classic/adapter.jsutilise les templates modernes générés depuis Tailwind ;interfaces/legacy/adapter.jsconserve l’apparence historique tout en utilisant le modèle et le fonctionnement actuels.
Les templates et sources Tailwind se trouvent dans popup-tooling/. src/pages/popup/interface.css est généré : il ne faut pas le modifier directement comme source principale.
Le gestionnaire est dans src/modules/popupManager.js et les textes dans src/modules/popups/campaigns.js.
Les campagnes disponibles sont :
welcome: première installation ;update: arrivée d’une nouvelle version pour une installation existante ;reminder: message après un nombre d’ouvertures et un délai minimum.
Le suivi compact est stocké dans le localStorage de la page EcoleDirecte : compteur d’ouvertures, date d’installation V3, dernière popup affichée, dernière action et compteurs par campagne. « Plus tard » conserve l’absence de validation et permet une nouvelle apparition selon les règles de la campagne.
Commandes disponibles depuis la console du site :
CustomDirectePopups.show("welcome")
CustomDirectePopups.show("update")
CustomDirectePopups.show("reminder")
CustomDirectePopups.state()
CustomDirectePopups.reset()Les sources du calculateur sont dans src/pages/bac/source/ :
App.jsxcontient l’application et le calcul des résultats ;main.jsxmonte l’application React ;app.csscontient ses styles ;sidebar.htmletassets/sont les fichiers produits par le build.
Le calculateur est chargé dans le side panel déclaré par le manifeste. Les moyennes envoyées depuis le tableau utilisent les événements de glisser-déposer et le format application/x-customdirecte-average.
Prérequis : Node.js et npm.
npm install
npm run popup:build
npm run bac:build
npm run popup:validatePrévisualisation des interfaces :
npm run popup:preview:classic
npm run popup:preview:legacyPour tester l’extension, charger le dossier src/ dans Chrome via chrome://extensions, en activant le mode développeur.
- conserver le modèle de paramètres sans accès au DOM ;
- placer le comportement EcoleDirecte dans un module dédié ;
- préfixer les classes injectées avec
cd-; - modifier les sources de
popup-tooling/, jamais uniquement les fichiers générés ; - conserver la compatibilité avec les identifiants de stockage existants ;
- vérifier le mode classique et le mode legacy après toute modification d’interface ;
- lancer la validation, la vérification syntaxique et
git diff --checkavant une publication.
Avant publication :
- vérifier la version dans
src/manifest.json; - reconstruire le popup et le calculateur BAC ;
- lancer
npm run popup:validate; - vérifier l’installation depuis
src/; - tester les paramètres, les notes custom, le side panel BAC et les popups ;
- vérifier que le stockage existant est migré sans conserver inutilement deux formats ;
- examiner les fichiers modifiés avant le commit et le push.