[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / outils / blocs_fonctions.php
diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/outils/blocs_fonctions.php b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/blocs_fonctions.php
new file mode 100644 (file)
index 0000000..a4d4494
--- /dev/null
@@ -0,0 +1,190 @@
+<?php\r
+       \r
+/* Trois ou quatre balises pour creer des blocs depliables : \r
+\r
+#BLOC_TITRE                    / {une_URL} si ajax, {un_numero} si bloc numerote, {visible} si bloc deplie /\r
+Mon titre\r
+#BLOC_RESUME                   / facultatif /\r
+Mon resume qui disparait si on clique\r
+#BLOC_DEBUT\r
+Mon bloc depliable             / qui est aussi l'emplacement pour l'Ajax si le fragment est donne /\r
+#BLOC_FIN\r
+\r
+*/\r
+\r
+@define('_BLOC_TITRE_H', 'h4');\r
+\r
+// Pour la balise suivante, l'ordre des arguments importe peu\r
+// Un bloc replie, titre simple : #BLOC_TITRE\r
+// Un bloc replie AJAX : #BLOC_TITRE{fragment} (fragment est une URLs)\r
+// Un bloc replie numerote : #BLOC_TITRE{numero} (numero est un nombre entier)\r
+// Un bloc deplie ou replie : ajouter l'argument 'visible' ou 'invisible' : #BLOC_TITRE{visible}\r
+// Par defaut : les blocs sont replies\r
+function balise_BLOC_TITRE($p) {\r
+       // Les arguments : 'visible' ou 'invisible', un numero, une URL\r
+       $p->code = "blocs_balises('titre', array(".blocs_arguments($p).'))';\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+\r
+function blocs_arguments(&$p) {\r
+       $i = 0; $args = array();\r
+       while(($a = interprete_argument_balise(++$i,$p)) != NULL) $args[] = $a;\r
+       return join(",", $args);\r
+}\r
+\r
+// 3 balises obsoletes\r
+function balise_BLOC_TITRE_NUM(&$p) {return balise_BLOC_TITRE($p);}\r
+function balise_BLOC_VISIBLE_TITRE_NUM(&$p) {return balise_BLOC_VISIBLE_TITRE($p);}\r
+function balise_BLOC_VISIBLE_TITRE(&$p) {\r
+       // Produire le premier argument {visible}\r
+       $texte = new Texte; $texte->type='texte'; $texte->texte='visible';\r
+       array_unshift($p->param, array(0=>NULL, 1=>array(0=>$texte)));\r
+       return balise_BLOC_TITRE($p);\r
+}\r
+\r
+function balise_BLOC_RESUME($p) {\r
+       $p->code = "blocs_balises('resume')";\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+\r
+function balise_BLOC_DEBUT($p) {\r
+       $p->code = "blocs_balises('debut', array(".blocs_arguments($p).'))';\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+\r
+function balise_BLOC_FIN($p) {\r
+       $p->code = "blocs_balises('fin')";\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+\r
+function balise_BLOC_TITRE_DEBUT($p) {\r
+       $p->code = "blocs_balises('titre_debut', array(".blocs_arguments($p).'))';\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+\r
+function balise_BLOC_TITRE_FIN($p) {\r
+       $p->code = "blocs_balises('titre_fin')";\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+\r
+// Renvoie un code JQuery pour deplier un bloc au chargement de la page.\r
+// Exemple pour deplier le 5eme bloc : #BLOC_DEPLIER{4} (l'index commence a zero)\r
+function balise_BLOC_DEPLIER($p) {\r
+       $eq = interprete_argument_balise(1, $p);\r
+       $p->code = "bloc_deplier_script(intval($eq))";\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+// Renvoie un code JQuery pour deplier un bloc numerote au chargement de la page.\r
+// Exemple pour deplier le bloc .cs_bloc4 : #BLOC_DEPLIER_NUM{4}\r
+function balise_BLOC_DEPLIER_NUM($p) {\r
+       $eq = interprete_argument_balise(1, $p);\r
+       $p->code = "bloc_num_deplier_script(intval($eq))";\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+\r
+// Renvoie un code JQuery pour courcuiter la variable configurant les blocs uniques\r
+// Argument : oui/non ou 0/1\r
+function balise_BLOC_UNIQUE($p) {\r
+       $arg = interprete_argument_balise(1, $p);\r
+       $p->code = "bloc_unique_script($arg)";\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+\r
+// fonction (SPIP>=2.0) pour le calcul de la balise #BLOC_DEPLIER\r
+function bloc_deplier_script($num=0) {\r
+       return $num<0?'':http_script("jQuery(document).ready(function() { jQuery('"._BLOC_TITRE_H.".blocs_titre').eq($num).click(); });");\r
+}\r
+// fonction (SPIP>=2.0) pour le calcul de la balise #BLOC_DEPLIER_NUM\r
+function bloc_num_deplier_script($num=-1) {\r
+       return $num<0?'':http_script("jQuery(document).ready(function() { jQuery('div.cs_bloc$num').children('.blocs_titre').eq(0).click(); });");\r
+}\r
+// fonction (SPIP>=2.0) pour le calcul de la balise #BLOC_UNIQUE\r
+function bloc_unique_script($num=1) {\r
+       $num = ($num==='oui' || intval($num)>0)?1:0;\r
+       return http_script("var blocs_replier_tout = $num;");\r
+}\r
+\r
+// fonction pour le calcul des balises de type #BLOC_XXX\r
+// $args ne sert que pour #BLOC_TITRE et contient les arguments de la balise sous forme de tableau\r
+function blocs_balises($type, $args=array()) {\r
+       // statut binaire : bit1=ajax bit2=titre bit3=resume bit4=debut\r
+       // 2 = ajax (20 si distant) ; 1 = titre pas d'ajax (10 si distant); idem negatif = bloc visible\r
+       static $bloc_stade;\r
+       $k=isset($bloc_stade)?count($bloc_stade):0;\r
+       $stade=$k?abs($bloc_stade[--$k]):0;\r
+       $distant = $replie = 1; $id = $numero = '';\r
+       switch($type) {\r
+       case 'titre_debut':\r
+               // id pour le bloc distant\r
+               $id = ' id="cs_bloc_id_' . array_shift($args) . '"';\r
+               $distant = 10;\r
+       case 'titre':\r
+               foreach($args as $a) {  \r
+                       if(is_numeric($a=trim($a))) $numero = ' cs_bloc'.$a;    \r
+                       elseif($a=='visible') $replie = -1;\r
+                       elseif($a=='invisible') $replie = 1;\r
+                       elseif(strlen($a)) $fragment = $a;\r
+               }\r
+               if (isset($fragment)){\r
+                       $ajax=' blocs_ajax ';\r
+                       $bloc_stade[]=2*$distant*$replie;\r
+               } else {\r
+                       $fragment="javascript:;";\r
+                       $ajax='';\r
+                       $bloc_stade[]=1*$distant*$replie;\r
+               }\r
+               $replie = $replie>0?' blocs_replie':'';\r
+               return "<div class=\"cs_blocs$numero\"><"._BLOC_TITRE_H." class=\"blocs_titre$replie$ajax\"$id><a href=\"$fragment\">";\r
+       case 'resume':\r
+               $class=$bloc_stade[$k]>0?'':' blocs_invisible blocs_slide';\r
+               if($stade<1 || $stade>2) // on DOIT arriver de titre\r
+                       die("Erreur : #BLOC_RESUME sans #BLOC_TITRE ($stade)");\r
+               $bloc_stade[$k]=$bloc_stade[$k]>0?3:-3; // 3 = resume\r
+               return "</a></"._BLOC_TITRE_H."><div class=\"blocs_resume$class\">";\r
+       case 'debut':\r
+               if(count($args)) {\r
+                       // debut d'un bloc depliable a distance\r
+                       foreach($args as $a) {  \r
+                               if($a=='visible') $replie = -1;\r
+                               elseif($a=='invisible') $replie = 1;\r
+                               elseif(strlen($a)) $id = " cs_bloc_id_$a";\r
+                       }\r
+                       $bloc_stade[]=11;\r
+                       $class = $replie>0?' blocs_invisible blocs_slide':'';\r
+                       return "<div class=\"blocs_destination$class$id\">";\r
+               }\r
+               $class=$bloc_stade[$k]<0?'':' blocs_invisible blocs_slide';\r
+               $bloc_stade[$k]=$bloc_stade[$k]>0?4:-4; // 4=debut\r
+               if($stade == 3) // on arrive du resume, fermer la div resume seulement\r
+                       return "</div><div class=\"blocs_destination$class\">";\r
+               else {\r
+                       if($stade<1 || $stade>2) // on DOIT arriver de titre\r
+                               die("Erreur : #BLOC_DEBUT sans #BLOC_TITRE ($stade)");\r
+                       return '</a></'._BLOC_TITRE_H."><div class=\"blocs_destination$class\">";\r
+               }\r
+       case 'titre_fin':\r
+               $k=isset($bloc_stade)?abs(array_pop($bloc_stade)):0;\r
+               if($k==10 || $k==20) // on DOIT arriver de #BLOC_TITRE_DEBUT\r
+                       return '</a></'._BLOC_TITRE_H.'></div>';\r
+               die("Erreur : #BLOC_TITRE_FIN sans #BLOC_TITRE_DEBUT ($k)");\r
+       case 'fin':\r
+               $k=isset($bloc_stade)?abs(array_pop($bloc_stade)):0;\r
+               switch($k) {\r
+                       case 4:return "</div></div>";\r
+                       case 11:return "</div>";\r
+                       default:die("Erreur : #BLOC_FIN sans #BLOC_DEBUT ($k)");\r
+               }\r
+\r
+       }\r
+}\r
+\r
+?>
\ No newline at end of file