# Écho du Huit Extension Firefox qui aide les bénévoles de **L'Atelier du Huit** (café associatif, Cugnaux) à publier une **sélection** de leurs événements sur l'agenda de la mairie. Source des événements : le calendrier Nextcloud du café. Cible : le formulaire « Proposer un événement » du site de la mairie. ## Le besoin Tous les événements du café ne vont pas sur le site de la mairie — seulement certains. L'extension sert de **TODO list** : pour chaque événement à venir, on voit s'il est *à faire*, *soumis*, *publié* (avec le lien direct) ou *ignoré*, et on peut le pousser vers le formulaire mairie en un clic (pré-rempli, à relire et envoyer soi-même). ## Comment ça marche 1. L'extension lit le calendrier Nextcloud via la **session du navigateur** (aucun mot de passe stocké). 2. Sa page affiche les événements à venir et leur statut. 3. Bouton **Créer** → ouvre le formulaire mairie pré-rempli ; tu relis, complètes (image à glisser à la main), puis envoies. 4. Bouton **Ignorer** → marque l'événement (tag partagé, visible dans Nextcloud). 5. Le statut **publié** est vérifié sur l'agenda public de la mairie. ## Installation (dev) Extension non signée, chargée comme **module temporaire** (pas de build, pas de runtime à installer) : 1. Ouvrir `about:debugging` → *Ce Firefox*. 2. *Charger un module complémentaire temporaire…* 3. Sélectionner `extension/manifest.json`. 4. Cliquer l'icône de la barre d'outils → la page de la liste s'ouvre dans un onglet. > ⚠️ Un module temporaire **disparaît au redémarrage de Firefox** : il faut le > recharger via `about:debugging` à chaque session (comportement de dev attendu). > 🔴 **Après toute modification de `manifest.json` (permission ajoutée…) : > *Décharger* puis *Charger* le module. « Recharger » et F5 ne suffisent pas.** > Firefox relit les **scripts** de la page à chaque ouverture, mais le > **manifest** seulement **à l'installation** : on se retrouve sinon avec le code > le plus récent et les **permissions figées de l'ancien**. > Symptôme : `browser. is undefined` alors que le manifest déclare bien la > permission. Piège de **dev uniquement** (en module signé, les permissions > déclarées sont accordées d'office) — mais il a déjà coûté deux passes de test. > > Pense aussi à **fermer les anciens onglets de la liste** avant de recharger : > une page orpheline rend les clics inertes. ### Configuration (optionnelle) Le formulaire de la mairie demande un **organisateur** et un **email** : ils sont personnels, donc absents du dépôt. Pour qu'ils soient pré-remplis : ```sh cp extension/config.local.json.example extension/config.local.json ``` puis édite le fichier (il est gitignoré, il ne partira jamais sur le dépôt) : ```json { "organisateur": "L'Atelier du Huit", "email": "contact@atelier-huit.fr" } ``` Ce fichier est **facultatif**. Sans lui, tout le reste est pré-rempli (titre, dates, heures, lieu, thème, tarifs) : seuls l'organisateur et l'email restent vides, et le bandeau du formulaire te le dit. > ⚠️ Ce fichier ne surcharge que `organisateur` et `email`. Les autres valeurs > par défaut (thème « Culture », tarifs « Gratuit », adresse **et coordonnées** > du café) vont ensemble et vivent dans `extension/config.js` : c'est là qu'on > les change. Y mettre un `cafe` partiel produirait des coordonnées invalides. > **Après avoir créé ou modifié `config.local.json`** : recharge le module dans > `about:debugging`. L'extension lit le fichier au réveil de son arrière-plan, > pas à chaque ouverture du formulaire. ### Vérifier l'extension ```sh bunx web-ext lint --source-dir=extension ``` ## Documentation - [`docs/RECHERCHE.md`](docs/RECHERCHE.md) — faits techniques vérifiés (CalDAV, champs du formulaire, valeurs du dropdown thème, structure de l'agenda, cas limites de l'ICS). - [`docs/DECISIONS.md`](docs/DECISIONS.md) — choix d'architecture et leur pourquoi. - [`CLAUDE.md`](CLAUDE.md) — guide pour les agents qui implémentent. ## Suivi Backlog géré dans Piaire : http://localhost:3117/perso/project/echo-du-huit