judu/re-group-firefox-addonpublic Fork
⑂ main
Commits
⬇ Clone ▾
git clone https://git.rickub.com/judu/re-group-firefox-addon.git
git clone ssh://git@rickub.com/judu/re-group-firefox-addon.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP
Improve ci and readme 8b27c3cUnverified · on main · Julien Durillon · Jun 4, 2026
README.md · 69 lines · 2.5 KBmarkdown
Blame HistoryOpen raw

re:group

Extension Firefox (cible 151+) qui range automatiquement les onglets dans des
groupes prédéfinis selon des expressions régulières sur les URLs.

La spécification complète du comportement est dans SPEC.md.

Fonctionnement

  • Tu définis des groupes (nom + couleur + liste de regexp) dans la page de
    configuration.
  • Quand un onglet (http/https, non épinglé) charge une URL qui matche les regexp
    d'un groupe, il est placé dans ce groupe.
  • En cas de match multiple, gagne la regexp dont la sous-chaîne matchée est la
    plus longue
    .
  • Si tu déplaces un onglet à la main, l'extension respecte ton choix jusqu'à ce que
    l'URL change vers un autre groupe.
    • Le bouton "réorganiser" ne respecte pas ton choix manuel, par contre. Ça remettra ton
      onglet dans son groupe.
  • Les onglets qui ne matchent rien ne sont jamais retirés d'un groupe.
  • Les groupes sont par fenêtre ; les groupes vides sont supprimés par Firefox.

Structure

manifest.json        Manifest V3, perms : tabs / tabGroups / storage
background.js         Point d'entrée (event page) → branche les listeners
src/matcher.js        Logique pure URL → groupe (testable hors navigateur)
src/config.js         Modèle + persistance (storage.local), validation
src/state.js          État runtime (storage.session) : instances, override
src/grouper.js        Moteur : placement, déplacement, ré-organisation
src/i18n.js           Helper i18n + applicateur DOM (data-i18n)
options/              Page de configuration (HTML/CSS/JS vanilla)
_locales/             Traductions (fr par défaut, en)
test/                 Tests unitaires du matcher (node --test)

Langues

L'interface est traduite via l'API i18n des WebExtensions (_locales/fr et
_locales/en). Firefox choisit la langue selon la langue de son interface, avec
fr comme langue par défaut (default_locale). Pour ajouter une langue, créer
_locales/<code>/messages.json en copiant les clés d'un fichier existant.

Développement

Lancer Firefox avec l'extension chargée (rechargement à chaud) :

npx web-ext run

Ou charger manuellement : about:debugging → Ce Firefox → Charger un module
complémentaire temporaire
→ choisir manifest.json.

Vérifier

node --test test/matcher.test.mjs   # tests de la logique de matching
npx web-ext lint --self-hosted      # validation du manifest / des APIs

Distribution

Signature privée (« unlisted ») via AMO :

npx web-ext sign --channel=unlisted --api-key=… --api-secret=…
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# re:group

Extension Firefox (cible **151+**) qui range automatiquement les onglets dans des
groupes prédéfinis selon des expressions régulières sur les URLs.

La spécification complète du comportement est dans [`SPEC.md`](./SPEC.md).

## Fonctionnement

- Tu définis des **groupes** (nom + couleur + liste de regexp) dans la page de
  configuration.
- Quand un onglet (http/https, non épinglé) charge une URL qui matche les regexp
  d'un groupe, il est placé dans ce groupe.
- En cas de match multiple, gagne la regexp dont la **sous-chaîne matchée est la
  plus longue**.
- Si tu déplaces un onglet à la main, l'extension respecte ton choix jusqu'à ce que
  l'URL change vers un **autre** groupe.
  - Le bouton "réorganiser" ne respecte pas ton choix manuel, par contre. Ça remettra ton
    onglet dans son groupe.
- Les onglets qui ne matchent rien ne sont jamais retirés d'un groupe.
- Les groupes sont **par fenêtre** ; les groupes vides sont supprimés par Firefox.

## Structure

```
manifest.json        Manifest V3, perms : tabs / tabGroups / storage
background.js         Point d'entrée (event page) → branche les listeners
src/matcher.js        Logique pure URL → groupe (testable hors navigateur)
src/config.js         Modèle + persistance (storage.local), validation
src/state.js          État runtime (storage.session) : instances, override
src/grouper.js        Moteur : placement, déplacement, ré-organisation
src/i18n.js           Helper i18n + applicateur DOM (data-i18n)
options/              Page de configuration (HTML/CSS/JS vanilla)
_locales/             Traductions (fr par défaut, en)
test/                 Tests unitaires du matcher (node --test)
```

## Langues

L'interface est traduite via l'API i18n des WebExtensions (`_locales/fr` et
`_locales/en`). Firefox choisit la langue selon la langue de son interface, avec
**fr** comme langue par défaut (`default_locale`). Pour ajouter une langue, créer
`_locales/<code>/messages.json` en copiant les clés d'un fichier existant.

## Développement

Lancer Firefox avec l'extension chargée (rechargement à chaud) :

```bash
npx web-ext run
```

Ou charger manuellement : `about:debugging` → **Ce Firefox** → *Charger un module
complémentaire temporaire* → choisir `manifest.json`.

### Vérifier

```bash
node --test test/matcher.test.mjs   # tests de la logique de matching
npx web-ext lint --self-hosted      # validation du manifest / des APIs
```

## Distribution

Signature privée (« unlisted ») via AMO :

```bash
npx web-ext sign --channel=unlisted --api-key=… --api-secret=…
```