Changeset 79140 in spip-zone


Ignore:
Timestamp:
Dec 4, 2013, 3:53:48 PM (5 years ago)
Author:
cedric@…
Message:

Mise au carré du traitement des liens oembed :

  • tous les liens écrits sous forme de ressource <http://example.org> sont oembed (si le site cible fournit le service)
  • par défaut les autoliens sont oembed lorsqu'ils forment un paragraphe à eux seuls (ie précédés/suivis de 2 retour ligne), ce qui permet d'oembed simplement une URL.

Ce comportement est désactivable par la configuration "Transformer automatiquement les URLs insérées dans le texte : non"

On homogénéise ainsi avec ce que fait WordPress?.
On passe le plugin en v1.0.0 pour l'occasion

Ces modifications nécessitent la version 0.8.19 de textwheel pour le commit r79139

Location:
_plugins_/oembed
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/oembed/inc/oembed.php

    r74305 r79140  
    247247}
    248248
     249
     250/**
     251 * Embarquer un lien oembed si possible
     252 * @param string $lien
     253 * @return string
     254 */
     255function oembed_embarquer_lien($lien){
     256        static $base = null;
     257
     258        $url = extraire_attribut($lien, 'href');
     259        $texte = null;
     260        if ($url
     261          AND (
     262                        oembed_verifier_provider($url)
     263                  OR (lire_config('oembed/detecter_lien','non')=='oui'))
     264          ){
     265                if (is_null($base))
     266                    $base = url_de_base();
     267                // on embarque jamais un lien de soi meme car c'est une mise en abime qui donne le tourni
     268                // (et peut provoquer une boucle infinie de requetes http)
     269                if (strncmp($url,$base,strlen($base))!=0){
     270                        $fond = recuperer_fond('modeles/oembed',array('url'=>$url,'lien'=>$lien));
     271                        if ($fond = trim($fond)){
     272                                $texte = $fond;
     273                        }
     274                }
     275        }
     276
     277        return $texte;
     278}
     279
    249280?>
  • _plugins_/oembed/modeles/oembed.html

    r59636 r79140  
    22[(#SET{data,#ENV**{url}|oembed_recuperer_data{#ENV{maxwidth,0},#ENV{maxheight,0}}})
    33][(#GET{data}|oui)
    4         [<span class="oembed-source">(#ENV*{lien}|echappe_retour)</span>]
     4<div class='spip_documents spip_documents_center ressource oembed[ oembed_(#GET{data}|table_valeur{type})]'>
    55        [(#INCLURE{fond=modeles/oembed_[(#GET{data}|table_valeur{type})],data=#GET{data},url,align})]
     6        [<div class="spip_doc_titre oembed-source">(#ENV*{lien}|echappe_retour)</div>]
     7</div>
    68]
  • _plugins_/oembed/oembed_fonctions.php

    r65550 r79140  
    7272}
    7373
     74
     75function inc_ressource_dist($rac) {
     76
     77        include_spip('inc/lien');
     78        $url = explode(' ', trim($rac, '<>'));
     79        $url = $url[0];
     80
     81        $texte = null;
     82        # <http://url/absolue>
     83        if (preg_match(',^https?://,i', $url)){
     84                include_spip('inc/oembed');
     85                $lien = PtoBR(propre("[->".$url."]"));
     86                // null si pas embedable
     87                $texte = oembed_embarquer_lien($lien);
     88                if ($texte){
     89                        $texte = "<html>$texte</html>";
     90                }
     91        }
     92
     93        return $texte;
     94}
    7495?>
  • _plugins_/oembed/oembed_pipelines.php

    r79134 r79140  
    181181 */
    182182function oembed_pre_propre($texte) {
    183         static $base = null;
    184183        include_spip('inc/config');
    185         if (lire_config('oembed/embed_auto','oui')!='non') {
    186                 include_spip('inc/oembed');
    187                 foreach (extraire_balises($texte, 'a') as $lien) {
    188                         if ($url = extraire_attribut($lien, 'href')
    189                         # seuls les autoliens beneficient de la detection oembed
    190                         AND preg_match(',\bauto\b,', extraire_attribut($lien, 'class'))
    191                         AND (oembed_verifier_provider($url) OR (lire_config('oembed/detecter_lien','non')=='oui'))) {
    192                                 if (is_null($base))
    193                                     $base = url_de_base();
    194                                 if (strncmp($url,$base,strlen($base))!=0){
    195                                         $fond = recuperer_fond('modeles/oembed',array('url'=>$url,'lien'=>$lien));
    196                                         if ($fond = trim($fond))
    197                                                 $texte = str_replace($lien, echappe_html("<html>$fond</html>"), $texte);
     184
     185        // si oembed/embed_auto==oui on oembed les liens qui sont tous seuls sur une ligne
     186        // (mais jamais les liens inline dans le texte car ca casse trop l'ancien contenu)
     187        if (stripos($texte,"<a")!==false
     188                AND lire_config('oembed/embed_auto','oui')!='non') {
     189                preg_match_all(",(\r?\n\r?\n)(<a\b[^>]*>.*</a>)(\r?\n\r?\n),Uims",$texte,$matches,PREG_SET_ORDER);
     190                if (count($matches)){
     191
     192                        $replace = array();
     193
     194                        include_spip('inc/oembed');
     195                        foreach ($matches as $match) {
     196                                if (!isset($replace[$match[0]])
     197                                  AND preg_match(',\bauto\b,', extraire_attribut($match[2], 'class'))
     198                                  AND !is_null($emb = oembed_embarquer_lien($match[2]))) {
     199                                        $replace[$match[0]] = $match[1] . echappe_html("<html>$emb</html>") . $match[3];
    198200                                }
    199201                        }
     202
     203                        if (count($replace))
     204                                $texte = str_replace(array_keys($replace), array_values($replace), $texte);
    200205                }
    201206        }
     
    206211if (!function_exists('lire_config')) { function lire_config($a=null,$b=null) { return $b; } }
    207212
    208 ?>
  • _plugins_/oembed/paquet.xml

    r79134 r79140  
    22        prefix="oembed"
    33        categorie="multimedia"
    4         version="0.9.14"
     4        version="1.0.0"
    55        etat="test"
    66        compatibilite="[2.1.0;3.0.*]"
     
    2929        <menu nom="configurer_oembed" titre="oembed:titre_oembed" parent="bando_configuration" icone="images/oembed-16.png" />
    3030        <necessite nom="medias" compatibilite="[2.7.1;]" />
     31        <necessite nom="tw" compatibilite="[0.8.19;]" />
    3132</paquet>
  • _plugins_/oembed/plugin.xml

    r79134 r79140  
    88        </auteur>
    99        <version>
    10         0.9.14
     10        1.0.0
    1111        </version>
    1212        <etat>
     
    6363-->
    6464<!-- manque aussi le menu -->
    65         <necessite id='tw' version='[0.8.0;]' />
     65        <necessite id='tw' version='[0.8.19;]' />
    6666        <necessite id="SPIP" version="[2.1.0;3.0.99]" />
    6767        <categorie>multimedia</categorie>
Note: See TracChangeset for help on using the changeset viewer.