Changeset 84596 in spip-zone


Ignore:
Timestamp:
Sep 14, 2014, 9:40:51 AM (5 years ago)
Author:
cedric@…
Message:

Paragraphage des liens : en HTML5 un lien peut encapsuler des balises blocks. Il faut en tenir compte et ouvrir/fermet les <p> autour des <a> dans ce cas
Et aussi :

  • nettoyer aussi les cas <p><xxx ....></p> en plus des <p></x></p> mais par contre ne pas toucher aux <p><img... /></p>
  • unifier les 2 regles de noettoyage final
Location:
_core_/plugins/textwheel
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/textwheel/paquet.xml

    r84595 r84596  
    22        prefix="tw"
    33        categorie="edition"
    4         version="0.9.18"
     4        version="0.9.19"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
  • _core_/plugins/textwheel/tests/data/modeles_block/inline_link.html

    r84268 r84596  
    1 <a href="http://example.com" class='spip_out' rel='external'>link
     1<a href="http://example.com" class='spip_out' rel='external'><p>link</p>
     2<div>Block test model #1</div></a>
     3<p>and</p>
     4<a href="/tests/"><p>another link</p>
     5<div>Block test model #1</div></a>
     6<p><a href="http://example.com" class='spip_out' rel='external'><code class='spip_code' dir='ltr'>link &lt;textwheel1|block&gt;</code></a></p>
     7<a href='http://example.com' class='spip_out'><div>Block test model #1-spip_lien_ok http://example.com</div></a><a href="http://example.com" class='spip_out' rel='external'><div>Block test model #1</div>
     8<p>and text</p>
     9</a><a href="http://example.com" class='spip_out' rel='external'>
     10<p>text and</p>
    211<div>Block test model #1</div>
    3 </a>
    4 <p> and</p>
    5 <a href="/tests/">another link
    6 <div>Block test model #1</div>
    7 </a>
    8 <p><a href="http://example.com" class='spip_out' rel='external'><code class='spip_code' dir='ltr'>link &lt;textwheel1|block&gt;</code></a></p>
    9 <a href='http://example.com' class='spip_out'><div>Block test model #1-spip_lien_ok http://example.com</div></a>
    10 <a href="http://example.com" class='spip_out' rel='external'>
    11 <div>Block test model #1</div>
    12 <p> and text</a></p><a href="http://example.com" class='spip_out' rel='external'><p>text and</p>
    13 <div>Block test model #1</div>
    14 <p> and text</p></a><a href="http://example.com" class='spip_out' rel='external'>
    15 <div>Block test model #1</div>
    16 <p> and text</p>
    17 <div>Block test model #1</div>
    18 </a>
     12<p>and text</p></a><a href="http://example.com" class='spip_out' rel='external'><div>Block test model #1</div>
     13<p>and text</p>
     14<div>Block test model #1</div></a>
  • _core_/plugins/textwheel/tests/data/modeles_block/span-level_html.html

    r84595 r84596  
    11<p>an <b>important</p>
    2 <div>Block test model #1</div>
    3 <p></b> <a href=''>link</p>
     2<div>Block test model #1</div></b>
     3<a href=''>
     4<p>link</p>
    45<div>Block test model #1</div></a>
    56<p>broken</p>
  • _core_/plugins/textwheel/wheels/spip/spip-paragrapher.php

    r84593 r84596  
    88
    99if (!defined('_ECRIRE_INC_VERSION')) return;
     10
     11if (!defined('_BALISES_BLOCS')) define('_BALISES_BLOCS',
     12        'address|applet|article|aside|blockquote|button|center|d[ltd]|div|fieldset|fig(ure|caption)|footer|form|h[1-6r]|hgroup|head|header|iframe|li|map|marquee|nav|noscript|object|ol|pre|section|t(able|[rdh]|body|foot|extarea)|ul|script|style'
     13);
     14
     15/**
     16 * Callback de detection des liens qui contiennent des blocks :
     17 * dans ce cas il faut traiter le <a> comme un quasi block et fermer/ouvrir les <p> autour du <a>
     18 *
     19 * @param string $t
     20 * @return string
     21 */
     22function detecter_liens_blocs(&$t){
     23
     24        // si une balise bloc est dans le liens, on y a aussi ajoute un <p>, il suffit donc de detecter ce dernier
     25        if (strpos($t[2],"<p>")!==false){
     26                return "<STOP P>".$t[1]."<p>".$t[2]."</p>".$t[3]."\n<p>";
     27        }
     28        return $t[0];
     29}
    1030
    1131/**
     
    2949                                        $pi = strtolower($p);
    3050                                        if (preg_match(
    31                                                 ",</?(?:stop p|address|applet|article|aside|blockquote|button|center|d[ltd]|div|fieldset|fig(ure|caption)|footer|form|h[1-6r]|hgroup|head|header|iframe|li|map|marquee|nav|noscript|object|ol|pre|section|t(able|[rdh]|body|foot|extarea)|ul|script|style)\b,S",
     51                                                ",</?(?:stop p|"._BALISES_BLOCS.")\b,S",
    3252                                        $pi, $r)) {
    3353                                                $pos = strpos($pi, $r[0]);
  • _core_/plugins/textwheel/wheels/spip/spip-paragrapher.yaml

    r84595 r84596  
    1919    match: ",</(?:address|applet|article|aside|blockquote|button|center|d[ltd]|div|fieldset|fig(ure|caption)|footer|form|h[1-6r]|hgroup|head|header|iframe|li|map|marquee|nav|noscript|object|ol|pre|section|t(able|[rdh]|body|foot|extarea)|ul|script|style)[^>]*>\s*?,UimsS"
    2020    replace: "$0<p>"
     21
     22liens-block:
     23    # en HTML5, les <a> peuvent contenir une balise block
     24    if_str: "</a>"
     25    type: preg
     26    match: ",(<a\s[^>]*>)(.*)(</a>),Uims"
     27    is_callback: Y
     28    replace: detecter_liens_blocs
    2129
    2230li-ouvrir:
     
    7482
    7583suppr-para-presque-vides:
    76     # Supprimer les <p xx></xx></p> (ne contiennent qu'une balise fermante)
    77     match: ",<p [^>]*>(</\w+>)</p>,S"
     84    # Supprimer les <p xx></xx></p> (ne contiennent qu'une balise ouvrante/fermante)
     85    match: ",<p [^>]*>(<(?:/\w+|\w+[^>]*[^/])>)</p>,S"
    7886    replace: "$1"
    7987
     
    92100renommer-para-normaux:
    93101    # Renommer les paragraphes normaux
    94     match: "\n<p >"
    95     replace: "\n<p>"
     102    match: ["\n<p >", "<p >"]
     103    replace: ["\n<p>", "\n<p>"]
    96104    type: str
    97 
    98 renommer-para-normaux-nl:
    99     # Renommer les paragraphes normaux
    100     match: "<p >"
    101     replace: "\n<p>"
    102     type: str
Note: See TracChangeset for help on using the changeset viewer.