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
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.