Suivi — À ranger quelque part Sommaires et liens dans les titres, balise <a> vide et conflit de balises <a>

#3047 Posté par  . État de l’entrée : ouverte. Licence CC By‑SA.
Étiquettes : aucune
0
27
déc.
2023

Les sommaires générés automatiquement depuis un titre de chapitre étant ou contenant un lien contiennent plusieurs balises <a>, dont une sans contenu, qui entrent en confit.

Confer https://linuxfr.org/news/l-installation-et-la-distribution-de-paquets-python-2-4

Le premier lien de la du sommaire vers la section "Pip", contient les balises suivantes:

<ul class="toc">
 <li>
  <a href="#toc-pip"></a>                   <!--- 1re balise <a>, SANS CONTENU, lien vers l'id "toc-pip"  --->
  <a href="https://pip.pypa.io">Pip</a>     <!--- 2e balise <a>, lien vers "https://pip.pypa.io" --->
  <ul>
 ...
<h2 id="toc-pip">                           <!--- titre --->
 <a href="https://pip.pypa.io">Pip</a>      <!--- lien dans le titre vers "https://pip.pypa.io" --->
</h2>

le code dans l'inspecteur de Firefox

Le premier élément de la liste ne devrait contenir qu'une seule balise <a> pointant vers le titre, comme suit:

<ul class="toc">
 <li>
  <a href="#toc-pip">Pip</a>                <!--- balise <a>, lien vers l'id "toc-pip"  --->
 <ul>
 ...
<h2 id="toc-pip">                           <!--- titre --->
 <a href="https://pip.pypa.io">Pip</a>      <!--- lien dans le titre vers "https://pip.pypa.io" --->
</h2>
  • # Problème similaire avec plusieurs lien dans le titre

    Posté par  . Évalué à 2 (+0/-0). Dernière modification le 29 décembre 2023 à 11:41.

    Même billet, un peu plus bas, titre avec 3 liens, la TOC est générée comme suit, ce qui rend la navigation très compliquée:

    <li>
        <a href="#toc-les-environnements-virtuels-venv-virtualenv-pipx">Les environnements virtuels&nbsp;: </a>
        <a href="https://docs.python.org/3/library/venv.html">venv</a>, 
        <a href="https://virtualenv.pypa.io/">virtualenv</a>, 
        <a href="https://pypa.github.io/pipx">pipx</a>
    </li>

    Cela donne ce qui suit (la colorisation est de mon fait):

    Deviner qu'il y a plusieurs lien est à mon avis difficile dans ce genre de situations. Sur une seule ligne, il y a 4 liens qui se suivent.
    Les deux premiers sont concaténés, les suivants uniquement séparés par une virgule.

    Ici, tout est correct chaque balise <a> a sa destination href et son contenu, mais le rôle du sommaire est de renvoyer aux parties du texte, pas vers un autre site.

    0. Assume good faith 1. Be kind to other people 2. Express yourself 4. Apply rule 0

    • [^] # Re: Problème similaire avec plusieurs lien dans le titre

      Posté par  . Évalué à 5 (+0/-0).

      Le comportement de markdown est probablement correct dans ce cas car la norme HTML n'autorise pas de liens imbriqués, donc il ferme le premier lien (celui de la toc) avant le lien inclus dans le titre.

      Le problème vient du lien dans le titre, qui devrait être supprimé lors de la génération de la table des matières. Ou bien il faudrait tout simplement interdire les liens dans les en-têtes.

      • [^] # Re: Problème similaire avec plusieurs lien dans le titre

        Posté par  . Évalué à 2 (+0/-0).

        Il faudrait, à mon avis, neutraliser les liens lors de la création de la toc si les liens sont autorisés dans les titres.

        Si les liens ne sont pas autorisés dans les titres, il n'y a plus de soucis en effet.

        0. Assume good faith 1. Be kind to other people 2. Express yourself 4. Apply rule 0

        • [^] # Re: Problème similaire avec plusieurs lien dans le titre

          Posté par  (site web personnel, Mastodon) . Évalué à 4 (+0/-0).

          Personnellement, je pense que ça n'a pas de sens d'avoir des liens dans les titres sur ce site en tout cas.

          « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

        • [^] # Re: Problème similaire avec plusieurs lien dans le titre

          Posté par  . Évalué à 3 (+0/-0).

          LinuxFR utilise les gems redcarpet et sanitize via html-pipeline-linuxfr.

          En jetant un œil rapide dans ce projet je constate qu'on a un TableOfContentsFilter qui génère la table des matières, qui fait ceci:

                    toc << "<a href=\"#toc-#{name}#{uniq}\">#{node.inner_html}</a>"

          Je suppose que le patch le plus simple serait de supprimer le lien dans le inner_html à ce moment-là. On pourrait même peut-être utiliser ça, mais alors on supprime aussi les <em> et les <strong>:

                    toc << "<a href=\"#toc-#{name}#{uniq}\">#{node.text_content}</a>"
          

          Si on veut supprimer complètement les liens dans les titres, alors il y a deux possibilités:

          • ajouter un nouveau filtre sanitize appliqué avant le filtre mentionné ci-dessus qui supprimerait silencieusement les liens dans les h* directemement
          • créer un Renderer spécifique qui enlève le support pour les liens dans les titres
  • # exemple de fonctionnalité cassée

    Posté par  (site web personnel) . Évalué à 3 (+0/-0).

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.