# Composant TOC et identifiants d'en-tête

**URL:** <https://meta.discourse.org/t/toc-component-and-header-ids/156601>\
**Category:** Support\
**Created:** [Juillet 2, 2020, 2:00 UTC](https://meta.discourse.org/t/toc-component-and-header-ids/156601 "2020-07-02T14:00:34Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![guildai](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/guildai/32/248544_2.png) [@guildai](https://meta.discourse.org/u/guildai)\
**Post date:** [Juillet 2, 2020, 2:00 UTC](https://meta.discourse.org/t/toc-component-and-header-ids/156601/1 "2020-07-02T14:00:34Z")

</div>

Le composant TOC génère les attributs `id` des éléments d’en-tête en fonction du texte de l’en-tête.

Voici un exemple d’en-tête.

#### main outlet

L’espacement provient des styles appliqués à `#main-outlet`, un élément de l’application Discourse qui n’a rien à voir avec ce message.

Ce n’est pas la fin du monde si je pouvais spécifier un `id` alternatif pour l’en-tête. Le composant TOC le prend en charge :

[https://github.com/discourse/DiscoTOC/blob/master/common/header.html#L293](https://github.com/discourse/DiscoTOC/blob/master/common/header.html#L293)

Malheureusement, Discourse supprime les attributs `id` des éléments de message avant que le code ci-dessus ne soit exécuté, ce qui bloque la logique.

Voici un en-tête qui utilise `<h4 id="alt-main-outlet">main outlet</h4>` :

#### main outlet

Notez qu’il utilise toujours `main-outlet` plutôt que `alt-main-outlet`.

Je suppose que Discourse fait cela en prévision du fait que quelqu’un pourrait modifier un élément de page. Mais avec le composant TOC, il est assez facile de contourner cela.

S’il existe une solution à ce problème ou s’il s’agit d’un problème bien connu que j’aurais manqué, je m’excuse pour les opinions non sollicitées qui suivent 🙂

* * *

P.S.

Personnellement, je pense que Discourse ne devrait PAS supprimer les attributs `id` des éléments. C’est une construction fondamentale des pages web et elle est utilisée pour la navigation sur la page via les fragments d’URL. Si quelqu’un souhaite créer un lien vers un élément dans un message, je pense que c’est son droit en tant qu’auteur.

Le fait que le TOC ouvre la porte au piratage d’IDs suggère que cette mesure de suppression des IDs pourrait potentiellement être abandonnée dès le départ.

Si l’équipe Discourse est si préoccupée par le détournement d’IDs, tous les IDs de Discourse devraient être préfixés, par exemple `discourse-main-outlet`, et la suppression des IDs ne devrait s’appliquer qu’à ces IDs préfixés.

Je comprends l’impossibilité de cela étant donné le code existant !

On peut imaginer un ensemble d’IDs exclus (par exemple main-outlet, etc.) qui sont supprimés. Cela laisse toujours le problème du TOC utilisé pour contourner cette mesure de sécurité, mais cela permettrait au moins aux auteurs de créer des ancres utiles.

* * *

P.P.S.

Directement lié à cela est le problème des en-têtes ayant le même contenu textuel.

#### Sujet Un

##### Exemples

#### Sujet Deux

##### Exemples

Avec le TOC, les deux en-têtes **Exemples** reçoivent le même ID, ce qui est évidemment très problématique. Le TOC pourrait ajouter des index incrémentaux (par exemple `examples`, `examples-2`, etc.) — et il devrait probablement le faire par défaut — mais une meilleure solution serait de résoudre le problème discuté ci-dessus, ce qui permettrait aux auteurs de décider comment décrire leur contenu. Par exemple `<h5 id="topic-one-examples">Exemples</h5>`, etc.

---

_[View the full topic](https://meta.discourse.org/t/toc-component-and-header-ids/156601)._
