# CHANGELOG — Module Sommaire

## [2.4.0] — 2026-04-16

### Modifié
- **Source de vérité unique pour l'exclusion** : le tableau admin Toolkit lit/écrit désormais directement le champ ACF `sommaire_masquer` de chaque page. Cocher/décocher dans le tableau ou dans l'éditeur de la page a le même effet — plus de désynchronisation.
- L'option globale `nxt_sommaire_exclusions` n'est plus utilisée par `auto_inject()`.

### Ajouté
- Migration one-shot `migrate_exclusions_to_acf()` (hook `admin_init`) : au premier chargement admin, si l'ancienne option `nxt_sommaire_exclusions` existe, ses IDs sont migrés vers le champ ACF `sommaire_masquer` des pages concernées, puis l'option est supprimée.

### Corrigé
- **Bug de désynchronisation** : cocher « Masquer le sommaire » dans l'éditeur d'une page ne se reflétait pas dans le tableau admin Toolkit (et inversement). Résolu en faisant du champ ACF la seule source de vérité.

---

## [2.3.0] — 2026-04-16

### Modifié
- **Suppression du toggle permanent gauche** (`#nxt-toc-fixed` + `#nxt-toc-toggle`) : le sommaire n'a plus qu'un seul point d'entrée, le bouton "Sommaire" de la Floating Toolbar à droite.
- Le JS embarqué dans `build()` ne crée plus que `#nxt-toc-panel` — le panel reste caché tant que la Floating Toolbar ne l'ouvre pas (via `is-open`).
- Gestion de la fermeture : clic sur `.nxt-toc-close`, clic sur un lien du panel, ou clic en dehors du panel (en excluant le bouton toolbar pour ne pas fermer-rouvrir instantanément).

### Supprimé
- Règles CSS mortes `#nxt-toc-fixed` et `#nxt-toc-toggle` dans `assets/css/sommaire.css` et dans `get_fallback_css()`.

### Corrigé
- **Doublon visuel de point d'entrée sommaire** : l'utilisateur voyait simultanément le toggle gauche permanent et le bouton "Sommaire" de la toolbar droite. Désormais le toggle gauche n'existe plus — accès unique via la toolbar.

### Dépendance
- Ce module requiert désormais la **Floating Toolbar** activée pour l'accès desktop au sommaire. Sans elle, seul le sommaire inline mobile reste accessible.

---

## [2.2.0] — 2026-04-16

### Ajouté
- **Neutralisation active du code legacy** : le module désenregistre automatiquement les callbacks du `functions.php` des thèmes enfants existants pour que le Toolkit prédomine sans retravail manuel.
  - `remove_filter('the_content', 'ajouter_ids_aux_titres_enfold', 12)`
  - `remove_shortcode('sommaire_final')` + re-enregistrement avec handler Toolkit (no-op)
  - `remove_shortcode('nexxis_sommaire_h2')` si présent
- Nouvelle méthode `neutralize_legacy_sommaire()` hookée sur `init` priorité 20 (après chargement du thème enfant).

### Modifié
- La constante `EXISTING_MARKERS` est réduite au seul marqueur ALB manuel `nexxis-sommaire-h2-placeholder`. Les shortcodes legacy et les anciens noms de classes ne sont plus listés car ils sont désormais neutralisés en amont.
- Méthode `has_existing_sommaire()` simplifiée : ne vérifie plus le raw `post_content` pour les shortcodes legacy (inutile puisqu'ils sont redirigés).
- Description du mode **Hybride** dans l'interface admin mise à jour pour refléter le nouveau comportement de neutralisation active.
- L'enregistrement du shortcode `[sommaire_final]` est déplacé de `init()` vers `neutralize_legacy_sommaire()`.

### Corrigé
- **Double sommaire** sur les sites legacy : sur une page qui n'utilisait pas le shortcode `[sommaire_final]` mais où l'ancien code `functions.php` restait chargé, le Toolkit injectait son panel gauche sans détecter le legacy. Résolu : le legacy est désactivé globalement au boot plutôt que détecté page par page.

### Compatibilité
- Aucun changement de base de données requis
- Aucune modification nécessaire sur les thèmes enfants existants
- Les options `nxt_sommaire_*` existantes restent valides

---

## [2.1.0] — 2026-04-14

### Ajouté
- Trois modes d'injection configurables : `auto`, `hybride`, `shortcode`
- Interface admin dédiée dans **Apparence > Nexxis Toolkit > Sommaire Automatique**
- Détection passive du legacy : vérification des marqueurs `sommaire-auto`, `[sommaire_final]`, `[nexxis_sommaire_h2`, `nexxis-sommaire-h2-placeholder` dans le contenu rendu et brut
- Cache transient `nxt_sommaire_{post_id}_{post_modified}_{mode}` avec invalidation au `save_post`
- Champ ACF `sommaire_masquer` par page
- Tableau d'exclusions globales par IDs de pages
- Options configurables : nombre minimum de H2, titre personnalisé

### Modifié
- Préfixe CSS `nxt-toc-*` pour éviter les conflits avec l'ancien code legacy (`sommaire-auto`, `sf-*` réservés au legacy)
- Chargement CSS inline via `file_get_contents` + `wp_add_inline_style` (contourne les problèmes de Mixed Content sur hébergements cPanel)
- Panel latéral gauche en desktop, sommaire inline en mobile (responsive natif)

### Corrigé
- Protection contre la récursion infinie via flag `static $running`
- Gestion propre des H2 avec IDs déjà définis (conservés tels quels)
- Déduplication des slugs en cas de H2 identiques
