Valider 4614eb13 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Refonte de la generation des icones dans l'espace prive.

Les icones ont une structure html unifiee invariante :
<span><a><img /><b>texte</b></a></span>
generee par la fonction unique icone_base() dans inc/filtres, utilisee par toutes les fonctions ci-dessous

Dans les squelettes :
|icone_verticale 
[(#URL|icone_verticale{texte,icone,action,class})]

texte : texte du lien (+title sur le lien et alt de l'icone)
icone : nom du fichier (article-24.png). Peut etre simplement l'objet (article) auquel cas la dimension -24 et l'extension .png seront prises par defaut
action : new, del ou edit. Correspondent aux variantes d'icone (les anciens supprimer.gif, creer.gif et edit.gif fonctionnent encore)
class : porte a la fois l'alignement (left, center, right), l'ajax des squelettes (ajax) et toute autre classe necessaire, qui sera appliquee sur le conteneur span

|icone_horizontale
[(#URL|icone_horizontale{texte,icone,action,class})]
meme syntaxe que |icone_verticale

Dans les scripts php :
les fonctions icone_inline et icone_horizontale sont maintenues inchangees dans leur utilisation, mais provoquent simplement un appel a icone_base avec re-ecriture de l'ajax de l'espace prive et bidouille sur les action auteur inchangee

Les vieilles fonctions icone() et icone_horizontale_display sont evacuees en inc/vieilles_def

Dans les css :
les vieilles classes icone36 et cellule-h sont evacuees en vieille_def, commentee
Un stylage unique des .icone est realise, avec les declinaisons sans texte/sans img selon les preferences de l'utilisateur. Le html est donc unique, seul le mode d'affichage differe.
parent f127a0a9
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+59 −65
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -2398,85 +2398,79 @@ function singulier_ou_pluriel($nb,$chaine_un,$chaine_plusieurs,$var='nb'){


/**
 * un filtre icone mappe sur icone_inline, qui cree une icone a gauche par defaut
 * le code de icone_inline est grandement reproduit ici car les liens ajax portent simplement une class ajax
 * lorsque les interfaces sont en squelette, alors que l'implementation d'ajax de des scripts php
 * est plus complexe
 * Fonction de base pour une icone dans un squelette
 * structure html : <span><a><img><b>texte</b></span>
 *
 * @param string $lien
 * @param string $texte
 * @param string $fond
 * @param string $align
 * @param <type> $lien
 *  url
 * @param <type> $texte
 *  texte du lien / alt de l'image
 * @param <type> $fond
 *  objet avec ou sans son extension et sa taille (article, article-24, article-24.png)
 * @param string $fonction
 *  new/del/edit
 * @param <type> $class
 *  classe supplementaire (horizontale, verticale, ajax ...)
 * @param <type> $javascript
 *  "onclick='...'" par exemple
 * @return string 
 */
function filtre_icone_dist($lien, $texte, $fond, $align="", $fonction="", $class="",$javascript=""){
function icone_base($lien, $texte, $fond, $fonction="", $class="",$javascript=""){
	if (in_array($fonction,array("del","supprimer.gif")))
		$class .= ' danger';
	elseif ($fonction == "rien.gif")
		$fonction = "";

	// remappage des icone : article-24.png+new => article-new-24.png
	if ($icone_renommer = charger_fonction('icone_renommer','inc',true))
		list($fond,$fonction) = $icone_renommer($fond,$fonction);

	$align = $align?$align:$GLOBALS['spip_lang_left'];
	global $spip_display;
	// ajouter le type d'objet dans la class de l'icone
	$class .= " " . substr(basename($fond),0,-4);

	if ($fonction == "del") {
		$style = 'icone36 danger';
	} else {
		$style = 'icone36';
		if (strlen($fonction) < 3) $fonction = "rien.gif";
	}
	$style .= " " . substr(basename($fond),0,-4);
	$alt = attribut_html($texte);
	$title = " title=\"$alt\""; // est-ce pertinent de doubler le alt par un title ?

	if ($spip_display == 1){
		$hauteur = 20;
		$largeur = 100;
		$title = $alt = "";
	}
	else if ($spip_display == 3){
		$hauteur = 30;
		$largeur = 30;
		$title = "\ntitle=\"$texte\"";
		$alt = $texte;
	}
	else {
		$hauteur = 70;
		$largeur = 100;
		$title = '';
		$alt = $texte;
	}
	$ajax = "";
	if (strpos($class,"ajax")!==false)
		$ajax=" class='ajax'";

	$size = 24;
	if (preg_match("/-([0-9]{1,3})[.](gif|png)$/i",$fond,$match))
		$size = $match[1];
	if ($spip_display != 1 AND $spip_display != 4){
		if ($fonction != "rien.gif"){
		  $icone = http_img_pack($fonction, $alt, "$title width='$size' height='$size'\n" .

	if ($fonction){
		// 2 images pour composer l'icone : le fond (article) en background,
		// la fonction (new) en image
		$icone = http_img_pack($fonction, $alt, "width='$size' height='$size'\n" .
					http_style_background($fond, "no-repeat center center"));
	}
	else {
			$icone = http_img_pack($fond, $alt, "$title width='$size' height='$size'");
		$icone = http_img_pack($fond, $alt, "width='$size' height='$size'");
	}
	} else $icone = '';

	// cas d'ajax_action_auteur: faut defaire le boulot
	// (il faudrait fusionner avec le cas $javascript)
	if (preg_match(",^<a\shref='([^']*)'([^>]*)>(.*)</a>$,i",$lien,$r))
		list($x,$lien,$atts,$texte)= $r;
	else $atts = '';
	$icone = "<span class='icone s$size $class'>"
	. "<a href='$lien'$title$ajax$javascript>"
	. $icone
	. "<b>$texte</b>"
	. "</a></span>\n";

	if ($align && $align!='center') $align = "float: $align; ";
	return $icone;
}

	$icone = "<a style='$align' class='$style $class'"
	. $atts
	. $javascript
	. "\nhref='"
	. $lien
	. "'>"
	. $icone
	. (($spip_display == 3)	? '' : "<span>$texte</span>")
	  . "</a>\n";
function filtre_icone_verticale_dist($lien, $texte, $fond, $fonction="", $class="",$javascript=""){
	return icone_base($lien,$texte,$fond,$fonction,"verticale $class",$javascript);
}
function filtre_icone_horizontale_dist($lien, $texte, $fond, $fonction="", $class="",$javascript=""){
	return icone_base($lien,$texte,$fond,$fonction,"horizontale $class",$javascript);
}

	if ($align <> 'center') return $icone;
	$style = " style='text-align:center;'";
	return "<div$style>$icone</div>";
/**
 * Filtre icone pour compatibilite
 * mappe sur icone_base
 */
function filtre_icone_dist($lien, $texte, $fond, $align="", $fonction="", $class="",$javascript=""){
	return icone_base($lien,$texte,$fond,$fonction,"verticale $align $class",$javascript);
}


+14 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -16,14 +16,23 @@ include_spip('inc/boutons');

function inc_icone_renommer_dist($fond,$fonction){
	$size = 24;
	if (preg_match("/-([0-9]{1,3})[.](gif|png)$/i",$fond,$match))
	if (preg_match("/(?:-([0-9]{1,3}))?([.](gif|png))?$/i",$fond,$match)
		AND ($match[0] OR $match[1])) {
		if ($match[1])
			$size = $match[1];
	$type = preg_replace("/(-[0-9]{1,3})?[.](gif|png)$/i","",$fond);
		$type = substr($fond,0,-strlen($match[0]));
		if (!$match[2])
			$fond .= ".png";
	}
	else {
		$type = $fond;
		$fond .= ".png";
	}

	$rtl = false;
	if (preg_match(',[-_]rtl$,i',$type)){
	if (preg_match(',[-_]rtl$,i',$type,$match)){
		$rtl = true;
		$type = preg_replace(',[-_]rtl$,i','',$type);
		$type = substr($type,0,-strlen($match[0]));
	}

	$remplacement = array(
+12 −102
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -412,125 +412,35 @@ function onglet($texte, $lien, $onglet_ref, $onglet, $icone=""){

// http://doc.spip.org/@icone_inline
function icone_inline($texte, $lien, $fond, $fonction="", $align="", $ajax=false, $javascript=''){
	global $spip_display;
	if ($icone_renommer = charger_fonction('icone_renommer','inc',true))
		list($fond,$fonction) = $icone_renommer($fond,$fonction);

	if ($fonction == "del") {
		$style = 'icone36 danger';
	} else {
		$style = 'icone36';
		if (strlen($fonction) < 3) $fonction = "rien.gif";
	}
	$style .= " " . substr(basename($fond),0,-4);

	if ($spip_display == 1){
		$hauteur = 20;
		$largeur = 100;
		$title = $alt = "";
	}
	else if ($spip_display == 3){
		$hauteur = 30;
		$largeur = 30;
		$title = "\ntitle=\"$texte\"";
		$alt = $texte;
	}
	else {
		$hauteur = 70;
		$largeur = 100;
		$title = '';
		$alt = $texte;
	}

	$size = 24;
	if (preg_match("/-([0-9]{1,3})[.](gif|png)$/i",$fond,$match))
		$size = $match[1];
	if ($spip_display != 1 AND $spip_display != 4){
		if ($fonction != "rien.gif"){
		  $icone = http_img_pack($fonction, $alt, "$title width='$size' height='$size'\n" .
					  http_style_background($fond, "no-repeat center center"));
		}
		else {
			$icone = http_img_pack($fond, $alt, "$title width='$size' height='$size'");
		}
	} else $icone = '';

	// cas d'ajax_action_auteur: faut defaire le boulot
	// (il faudrait fusionner avec le cas $javascript)
	if (preg_match(",^<a\shref='([^']*)'([^>]*)>(.*)</a>$,i",$lien,$r))
	if (preg_match(",^<a\shref='([^']*)'([^>]*)>(.*)</a>$,i",$lien,$r)) {
		list($x,$lien,$atts,$texte)= $r;
	else $atts = '';

	if ($align && $align!='center') $align = "float: $align; ";
		$javascript .= $atts;
	}

	$icone = "<a style='$align' class='$style'"
	. $atts
	. (!$ajax ? '' : (' onclick=' . ajax_action_declencheur($lien,$ajax)))
	. $javascript
	. "\nhref='"
	. $lien
	. "'>"
	. $icone
	. (($spip_display == 3)	? '' : "<span>$texte</span>")
	  . "</a>\n";
	// l'ajax de l'espace prive made in php
	if ($ajax)
		$javascript .= ' onclick=' . ajax_action_declencheur($lien,$ajax);

	if ($align <> 'center') return $icone;
	$style = " style='text-align:center;'";
	return "<div$style>$icone</div>";
	return icone_base($lien, $texte, $fond, $fonction,"verticale $align",$javascript);
}

// http://doc.spip.org/@icone_horizontale
function icone_horizontale($texte, $lien, $fond = "", $fonction = "", $af = true, $javascript='') {
	global $spip_display;
	if ($icone_renommer = charger_fonction('icone_renommer','inc',true))
		list($fond,$fonction) = $icone_renommer($fond,$fonction);

	$retour = '';
	// cas d'ajax_action_auteur: faut defaire le boulot
	// (il faudrait fusionner avec le cas $javascript)
	if (preg_match(",^<a href='([^']*)'([^>]*)>(.*)</a>$,i",$lien,$r))
	if (preg_match(",^<a\shref='([^']*)'([^>]*)>(.*)</a>$,i",$lien,$r)) {
		list($x,$lien,$atts,$texte)= $r;
	else $atts = '';
	$lien = "\nhref='$lien'$atts";

	if ($spip_display != 4) {

		if ($spip_display != 1) {
			$retour .= "\n<table class='cellule-h-table' style='vertical-align: middle'>"
			. "\n<tr><td><a $javascript$lien class='cellule-h'>"
			. "<span class='cell-i'>" ;
			if ($fonction){
				$retour .= http_img_pack($fonction, $texte, http_style_background($fond, "center center no-repeat"));
			}
			else {
				$retour .= http_img_pack($fond, $texte, "");
			}
			$retour .= "</span></a></td>"
			. "\n<td class='cellule-h-lien'><a $javascript$lien class='cellule-h'>"
			. $texte
			. "</a></td></tr></table>\n";
		}
		else {
			$retour .= "\n<div><a class='cellule-h-texte' $javascript$lien>$texte</a></div>\n";
		}
		if ($fonction == "del")
			$retour = "\n<div class='danger'>$retour</div>";
	} else {
		$retour = "\n<li><a$lien>$texte</a></li>";
		$javascript .= $atts;
	}
	$lien = "\nhref='$lien'$atts";

	$retour = icone_base($lien, $texte, $fond, $fonction,"horizontale",$javascript);
	if ($af) echo_log('icone_horizontale',$retour); else return $retour;
}

// http://doc.spip.org/@icone_horizontale_display
function icone_horizontale_display($texte, $lien, $fond = "", $fonction = "", $af = true, $js='') {
	global $spip_display, $spip_lang_left;
	$img = icone_horizontale($texte, $lien, $fond, $fonction, $af, $js);
	if ($spip_display != 4)
		return "<div style='float: $spip_lang_left; width:140px;'>$img</div>\n";
	else return "<ul>$img</ul>";
}


// http://doc.spip.org/@gros_titre
function gros_titre($titre, $ze_logo='', $aff=true){
+3 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -923,6 +923,9 @@ ondblclick=\'storeCaret(this);\'>$texte</textarea>";
	$retour = "<div style=\'padding-top: 20px;width:100px\' class=\'icone36\'>" . icone_inline($texte, $lien, $fond, $fonction, $align) . "</div>";
	if ($echo) echo_log(\'icone\',$retour); else return $retour;}',

	'icone_horizontale_display'=> '($texte, $lien, $fond = "", $fonction = "", $af = true, $js=\'\') {
	return icone_horizontale($texte, $lien, $fond, $fonction, $af, $js);}',

	 	
) as $f => $def) {
	if (!function_exists($f)) {
+25 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -5,6 +5,31 @@
  Distribue sous licence GPL

]
<h1>Icones</h1>

[(#SELF|icone_verticale{<:icone_modifier_article:>,article,new})]
<hr style="clear:both;" />
[(#SELF|icone_verticale{<:icone_modifier_article:>,article,new,left})]
<hr style="clear:both;" />
[(#SELF|icone_verticale{<:icone_modifier_article:>,article,new,right})]
<hr style="clear:both;" />
[(#SELF|icone_verticale{<:icone_modifier_article:>,article,new,center})]
<hr style="clear:both;" />
[(#SELF|icone_verticale{<:icone_modifier_article:>,article,del,right})]
<hr style="clear:both;" />

#BOITE_OUVRIR{'<h3>Icones horizontales</h3>','info'}
	<table><tr>
		<td>[(#SELF|icone_horizontale{<:icone_modifier_article:>,article,new})]</td>
		<td>[(#SELF|icone_horizontale{texte super long pour voir si l'icone se centre bien verticalement,rubrique,edit})]</td>
		<td>[(#SELF|icone_horizontale{<:icone_modifier_article:>,site,del})]</td>
		<td>[(#SELF|icone_horizontale{<:icone_modifier_article:>,mot})]</td>
	</tr></table>
#BOITE_FERMER


<br class="nettoyeur" />

#MODELE{typo}

<h1>Boites</h1>
@@ -13,7 +38,6 @@
		Tous les autres conteneurs sont herites de celui la.</p>
	#BOITE_FERMER

<div class="line">
	<h2>Habillage des boites</h2>
	<h3>Contour</h3>
	#BOITE_OUVRIR{'<h3>simple</h3>','simple'}
@@ -68,9 +92,6 @@
		<p>Contenu</p>
	#BOITE_FERMER

</div>

<div class="line">
	<h2>Header de boite</h2>
	#BOITE_OUVRIR{#CHEMIN_IMAGE{article-24.png}|balise_img{'',cadre-icone}|concat{simple/titrem},'simple','titrem'}
		<p>Body</p>
@@ -99,4 +120,3 @@
		#BOUTON_ACTION{demo,#SELF}
	#BOITE_FERMER
</div>
Chargement en cours