Valider 8dc9ad73 rédigé par cedric@yterium.com's avatar cedric@yterium.com
Parcourir les fichiers

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
parent 3673e6a3
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+31 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -246,4 +246,35 @@ function oembed_detecter_lien($url) {
		return false;
}


/**
 * Embarquer un lien oembed si possible
 * @param string $lien
 * @return string
 */
function oembed_embarquer_lien($lien){
	static $base = null;

	$url = extraire_attribut($lien, 'href');
	$texte = null;
	if ($url
	  AND (
			oembed_verifier_provider($url)
		  OR (lire_config('oembed/detecter_lien','non')=='oui'))
	  ){
		if (is_null($base))
		    $base = url_de_base();
		// on embarque jamais un lien de soi meme car c'est une mise en abime qui donne le tourni
		// (et peut provoquer une boucle infinie de requetes http)
		if (strncmp($url,$base,strlen($base))!=0){
			$fond = recuperer_fond('modeles/oembed',array('url'=>$url,'lien'=>$lien));
			if ($fond = trim($fond)){
				$texte = $fond;
			}
		}
	}

	return $texte;
}

?>
 No newline at end of file
+3 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
#CACHE{7*24*3600}
[(#SET{data,#ENV**{url}|oembed_recuperer_data{#ENV{maxwidth,0},#ENV{maxheight,0}}})
][(#GET{data}|oui)
	[<span class="oembed-source">(#ENV*{lien}|echappe_retour)</span>]
<div class='spip_documents spip_documents_center ressource oembed[ oembed_(#GET{data}|table_valeur{type})]'>
	[(#INCLURE{fond=modeles/oembed_[(#GET{data}|table_valeur{type})],data=#GET{data},url,align})]
	[<div class="spip_doc_titre oembed-source">(#ENV*{lien}|echappe_retour)</div>]
</div>
]
 No newline at end of file
+21 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -71,4 +71,25 @@ function oembed($url, $maxwidth=0, $maxheight=0){
	return $url;
}


function inc_ressource_dist($rac) {

	include_spip('inc/lien');
	$url = explode(' ', trim($rac, '<>'));
	$url = $url[0];

	$texte = null;
	# <http://url/absolue>
	if (preg_match(',^https?://,i', $url)){
		include_spip('inc/oembed');
		$lien = PtoBR(propre("[->".$url."]"));
		// null si pas embedable
		$texte = oembed_embarquer_lien($lien);
		if ($texte){
			$texte = "<html>$texte</html>";
		}
	}

	return $texte;
}
?>
 No newline at end of file
+19 −15
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -180,23 +180,28 @@ function oembed_post_edition($flux) {
 * @return mixed
 */
function oembed_pre_propre($texte) {
	static $base = null;
	include_spip('inc/config');
	if (lire_config('oembed/embed_auto','oui')!='non') {

	// si oembed/embed_auto==oui on oembed les liens qui sont tous seuls sur une ligne
	// (mais jamais les liens inline dans le texte car ca casse trop l'ancien contenu)
	if (stripos($texte,"<a")!==false
		AND lire_config('oembed/embed_auto','oui')!='non') {
		preg_match_all(",(\r?\n\r?\n)(<a\b[^>]*>.*</a>)(\r?\n\r?\n),Uims",$texte,$matches,PREG_SET_ORDER);
		if (count($matches)){

			$replace = array();

			include_spip('inc/oembed');
		foreach (extraire_balises($texte, 'a') as $lien) {
			if ($url = extraire_attribut($lien, 'href')
			# seuls les autoliens beneficient de la detection oembed
			AND preg_match(',\bauto\b,', extraire_attribut($lien, 'class'))
			AND (oembed_verifier_provider($url) OR (lire_config('oembed/detecter_lien','non')=='oui'))) {
				if (is_null($base))
				    $base = url_de_base();
				if (strncmp($url,$base,strlen($base))!=0){
					$fond = recuperer_fond('modeles/oembed',array('url'=>$url,'lien'=>$lien));
					if ($fond = trim($fond))
						$texte = str_replace($lien, echappe_html("<html>$fond</html>"), $texte);
			foreach ($matches as $match) {
				if (!isset($replace[$match[0]])
				  AND preg_match(',\bauto\b,', extraire_attribut($match[2], 'class'))
				  AND !is_null($emb = oembed_embarquer_lien($match[2]))) {
					$replace[$match[0]] = $match[1] . echappe_html("<html>$emb</html>") . $match[3];
				}
			}

			if (count($replace))
				$texte = str_replace(array_keys($replace), array_values($replace), $texte);
		}
	}
	return $texte;
@@ -205,4 +210,3 @@ function oembed_pre_propre($texte) {
include_spip('inc/config');
if (!function_exists('lire_config')) { function lire_config($a=null,$b=null) { return $b; } }
?>
+2 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<paquet
	prefix="oembed"
	categorie="multimedia"
	version="0.9.14"
	version="1.0.0"
	etat="test"
	compatibilite="[2.1.0;3.0.*]"
	logo="prive/themes/spip/images/oembed-32.png"
@@ -28,4 +28,5 @@

	<menu nom="configurer_oembed" titre="oembed:titre_oembed" parent="bando_configuration" icone="images/oembed-16.png" />
	<necessite nom="medias" compatibilite="[2.7.1;]" />
	<necessite nom="tw" compatibilite="[0.8.19;]" />
</paquet>
 No newline at end of file
Chargement en cours