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
Release 0.0.1 f8a4d25Unverified · on main · Julien Durillon · Jun 3, 2026
SPEC.md · 84 lines · 3.6 KBmarkdown
Blame HistoryOpen raw

Spec — Extension Firefox « auto-group »

Objectif

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

Permissions

  • tabs
  • tabGroups
  • storage

Pas davantage.

Modèle de configuration (page d'options)

  • Liste de groupes pré-définis. Chaque groupe a :
    • un nom ;
    • une couleur (palette Firefox) ;
    • une liste de regexp sur les URLs.
  • Validation live des regexp : l'enregistrement est bloqué tant qu'une
    regexp est invalide (message d'erreur clair à la saisie).
  • Les regexp sont insensibles à la casse par défaut (flag i), testées en
    match partiel (regex.test(url)) sur l'URL complète.
  • Export / import JSON de la configuration (backup, partage entre machines).
  • Stockage de la config dans storage.local.
  • Bouton « Ré-organiser maintenant » qui traite les onglets déjà ouverts à
    la demande. Il vit dans la page de config (pas de popup toolbar).

Comportement de regroupement

  • Déclenché sur toute navigation, y compris SPA (history.pushState, hash).
  • Onglets épinglés ignorés. Si un onglet géré devient épinglé → il est
    retiré du groupe et n'est plus géré.
  • Seulement les URLs http/https. Toute autre URL (about:, file:,
    moz-extension:, view-source:…) est ignorée — jamais groupée.
  • Conflit multi-match : si l'URL matche les regexp de plusieurs groupes,
    gagne la regexp dont la sous-chaîne effectivement matchée est la plus
    longue
    .
  • Onglet qui ne matche aucun groupe → ignoré, et jamais retiré d'un
    groupe où il se trouverait déjà.
  • Onglet déjà dans un groupe dont l'URL change :
    • si la nouvelle URL matche un autre groupe → déplacé vers ce groupe ;
    • si la nouvelle URL ne matche aucun groupe → reste dans le groupe
      actuel.

Multi-fenêtres

  • Les groupes Firefox sont par fenêtre.
  • Stratégie : un groupe par fenêtre, créé à la demande — le groupe d'une
    config est instancié dans une fenêtre la première fois qu'un onglet de cette
    fenêtre y matche.
  • Les onglets ne traversent pas les fenêtres ; chaque onglet rejoint
    l'instance du groupe dans sa propre fenêtre.
  • Quand le dernier onglet quitte un groupe géré (fermé ou déplacé), le
    groupe vide est supprimé. Il sera recréé à la demande au prochain match.

Override manuel

  • Si l'utilisateur déplace un onglet manuellement (hors du groupe, ou vers un
    autre groupe), l'extension respecte ce choix et ne re-déplace plus
    l'onglet.
  • Cet override est levé lorsque l'URL de l'onglet change vers un nouveau
    match
    (vers un groupe différent du groupe courant).
  • L'état d'override est stocké en storage.session : il survit à la mise en
    veille de l'event page (MV3), mais pas au redémarrage de Firefox. Pas de
    re-tri automatique au démarrage.

Choix techniques

  • Manifest V3, background non-persistant (event page).
  • Vanilla JS / HTML / CSS, sans étape de build.
  • État volatile (override manuel) en storage.session.
  • Distribution : signée via AMO en "unlisted" (installation privée durable,
    sans publication publique).

Point à confirmer

  • Condition exacte de reset de l'override : interprétée comme « l'override
    saute dès que l'URL change et matche un groupe différent du groupe
    courant » (un re-match vers le même groupe ne fait rien). À valider à
    l'implémentation.
 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# Spec — Extension Firefox « auto-group »

## Objectif

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

## Permissions

- `tabs`
- `tabGroups`
- `storage`

Pas davantage.

## Modèle de configuration (page d'options)

- Liste de **groupes pré-définis**. Chaque groupe a :
  - un **nom** ;
  - une **couleur** (palette Firefox) ;
  - une **liste de regexp** sur les URLs.
- **Validation live** des regexp : l'enregistrement est **bloqué** tant qu'une
  regexp est invalide (message d'erreur clair à la saisie).
- Les regexp sont **insensibles à la casse** par défaut (flag `i`), testées en
  **match partiel** (`regex.test(url)`) sur l'**URL complète**.
- **Export / import JSON** de la configuration (backup, partage entre machines).
- Stockage de la config dans `storage.local`.
- Bouton **« Ré-organiser maintenant »** qui traite les onglets déjà ouverts à
  la demande. Il vit **dans la page de config** (pas de popup toolbar).

## Comportement de regroupement

- Déclenché sur **toute navigation, y compris SPA** (history.pushState, hash).
- **Onglets épinglés ignorés.** Si un onglet géré devient épinglé → il est
  **retiré du groupe** et n'est plus géré.
- **Seulement les URLs http/https.** Toute autre URL (`about:`, `file:`,
  `moz-extension:`, `view-source:`…) est ignorée — jamais groupée.
- **Conflit multi-match** : si l'URL matche les regexp de plusieurs groupes,
  gagne la regexp dont la **sous-chaîne effectivement matchée est la plus
  longue**.
- Onglet qui **ne matche aucun groupe** → **ignoré**, et **jamais retiré** d'un
  groupe où il se trouverait déjà.
- Onglet déjà dans un groupe dont l'URL change :
  - si la nouvelle URL matche un **autre** groupe → **déplacé** vers ce groupe ;
  - si la nouvelle URL **ne matche aucun** groupe → **reste** dans le groupe
    actuel.

## Multi-fenêtres

- Les groupes Firefox sont **par fenêtre**.
- Stratégie : **un groupe par fenêtre, créé à la demande** — le groupe d'une
  config est instancié dans une fenêtre la première fois qu'un onglet de cette
  fenêtre y matche.
- Les onglets **ne traversent pas** les fenêtres ; chaque onglet rejoint
  l'instance du groupe dans **sa propre** fenêtre.
- Quand le **dernier onglet** quitte un groupe géré (fermé ou déplacé), le
  **groupe vide est supprimé**. Il sera recréé à la demande au prochain match.

## Override manuel

- Si l'utilisateur déplace un onglet manuellement (hors du groupe, ou vers un
  autre groupe), l'extension **respecte ce choix** et ne re-déplace plus
  l'onglet.
- Cet override est levé **lorsque l'URL de l'onglet change vers un nouveau
  match** (vers un groupe différent du groupe courant).
- L'état d'override est stocké en **`storage.session`** : il survit à la mise en
  veille de l'event page (MV3), mais **pas** au redémarrage de Firefox. Pas de
  re-tri automatique au démarrage.

## Choix techniques

- **Manifest V3**, background **non-persistant** (event page).
- **Vanilla JS / HTML / CSS**, **sans étape de build**.
- État volatile (override manuel) en **`storage.session`**.
- Distribution : **signée via AMO en "unlisted"** (installation privée durable,
  sans publication publique).

## Point à confirmer

- Condition exacte de **reset de l'override** : interprétée comme « l'override
  saute dès que l'URL change et matche un groupe **différent** du groupe
  courant » (un re-match vers le *même* groupe ne fait rien). À valider à
  l'implémentation.