Firefox re-reads page scripts on every open but the manifest only at install time. A "Reload" leaves the newest code running with the old permission set, surfacing as `browser.<api> is undefined` despite a correct manifest. This trap cost two test passes on T1; T2 adds a CalDAV permission and would hit it next. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
70 lines
2.9 KiB
Markdown
70 lines
2.9 KiB
Markdown
# É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.<api> 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.
|
|
|
|
### 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
|