[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / inc / layer.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) {
14 return;
15 }
16
17 /**
18 * Affiche un cadre complet muni d’un bouton pour le déplier.
19 *
20 * @param string $icone Chemin vers l’icone que prendra le cadre
21 * @param string $titre Titre du cadre
22 * @param bool $deplie true ou false, défini si le cadre est déplié au chargement de la page (true) ou pas (false)
23 * @param string $contenu Contenu du cadre
24 * @param string $ids id que prendra la partie pliée ou dépliée
25 * @param string $style_cadre classe CSS que prendra le cadre
26 * @return string Code HTML du cadre dépliable
27 **/
28 function cadre_depliable($icone, $titre, $deplie, $contenu, $ids = '', $style_cadre = 'r') {
29 $bouton = bouton_block_depliable($titre, $deplie, $ids);
30
31 return
32 debut_cadre($style_cadre, $icone, '', $bouton, '', '', false)
33 . debut_block_depliable($deplie, $ids)
34 . "<div class='cadre_padding'>\n"
35 . $contenu
36 . "</div>\n"
37 . fin_block()
38 . fin_cadre();
39 }
40
41 // http://code.spip.net/@block_parfois_visible
42 function block_parfois_visible($nom, $invite, $masque, $style = '', $visible = false) {
43 return "\n"
44 . bouton_block_depliable($invite, $visible, $nom)
45 . debut_block_depliable($visible, $nom)
46 . $masque
47 . fin_block();
48 }
49
50 // http://code.spip.net/@debut_block_depliable
51 function debut_block_depliable($deplie, $id = "") {
52 $class = ' blocdeplie';
53 // si on n'accepte pas js, ne pas fermer
54 if (!$deplie) {
55 $class = " blocreplie";
56 }
57
58 return "<div " . ($id ? "id='$id' " : "") . "class='bloc_depliable$class'>";
59 }
60
61 // http://code.spip.net/@fin_block
62 function fin_block() {
63 return "<div class='nettoyeur'></div>\n</div>";
64 }
65
66 // $texte : texte du bouton
67 // $deplie : true (deplie) ou false (plie) ou -1 (inactif) ou 'incertain' pour que le bouton s'auto init au chargement de la page
68 // $ids : id des div lies au bouton (facultatif, par defaut c'est le div.bloc_depliable qui suit)
69 // http://code.spip.net/@bouton_block_depliable
70 function bouton_block_depliable($texte, $deplie, $ids = "") {
71 $bouton_id = 'b' . substr(md5($texte . microtime()), 0, 8);
72
73 $class = ($deplie === true) ? " deplie" : (($deplie == -1) ? " impliable" : " replie");
74 if (strlen($ids)) {
75 $cible = explode(',', $ids);
76 $cible = '#' . implode(",#", $cible);
77 } else {
78 $cible = "#$bouton_id + div.bloc_depliable";
79 }
80
81 $b = (strpos($texte, "<h") === false ? 'h3' : 'div');
82
83 return "<$b "
84 . ($bouton_id ? "id='$bouton_id' " : "")
85 . "class='titrem$class'"
86 . (($deplie === -1)
87 ? ""
88 : " onmouseover=\"jQuery(this).depliant('$cible');\""
89 )
90 . ">"
91 // une ancre pour rendre accessible au clavier le depliage du sous bloc
92 . "<a href='#' onclick=\"return jQuery(this).depliant_clicancre('$cible');\" class='titremancre'></a>"
93 . "$texte</$b>"
94 . http_script(($deplie === 'incertain')
95 ? "jQuery(function($){if ($('$cible').is(':visible')) { $('#$bouton_id').addClass('deplie').removeClass('replie'); }});"
96 : '');
97 }
98
99 //
100 // Tests sur le nom du butineur
101 //
102 // http://code.spip.net/@verif_butineur
103 function verif_butineur() {
104
105 preg_match(",^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$,", $_SERVER['HTTP_USER_AGENT'], $match);
106 $GLOBALS['browser_name'] = $match[1];
107 $GLOBALS['browser_version'] = $match[2];
108 $GLOBALS['browser_description'] = $match[3];
109 $GLOBALS['browser_layer'] = ' '; // compat avec vieux scripts qui testent la valeur
110 $GLOBALS['browser_barre'] = '';
111
112 if (!preg_match(",opera,i", $GLOBALS['browser_description']) && preg_match(",opera,i", $GLOBALS['browser_name'])) {
113 $GLOBALS['browser_name'] = "Opera";
114 $GLOBALS['browser_version'] = $match[2];
115 $GLOBALS['browser_barre'] = ($GLOBALS['browser_version'] >= 8.5);
116 } else {
117 if (preg_match(",opera,i", $GLOBALS['browser_description'])) {
118 preg_match(",Opera ([^\ ]*),i", $GLOBALS['browser_description'], $match);
119 $GLOBALS['browser_name'] = "Opera";
120 $GLOBALS['browser_version'] = $match[1];
121 $GLOBALS['browser_barre'] = ($GLOBALS['browser_version'] >= 8.5);
122 } else {
123 if (preg_match(",msie,i", $GLOBALS['browser_description'])) {
124 preg_match(",MSIE ([^;]*),i", $GLOBALS['browser_description'], $match);
125 $GLOBALS['browser_name'] = "MSIE";
126 $GLOBALS['browser_version'] = $match[1];
127 $GLOBALS['browser_barre'] = ($GLOBALS['browser_version'] >= 5.5);
128 } else {
129 if (preg_match(",KHTML,i", $GLOBALS['browser_description']) &&
130 preg_match(",Safari/([^;]*),", $GLOBALS['browser_description'], $match)
131 ) {
132 $GLOBALS['browser_name'] = "Safari";
133 $GLOBALS['browser_version'] = $match[1];
134 $GLOBALS['browser_barre'] = ($GLOBALS['browser_version'] >= 5.0);
135 } else {
136 if (preg_match(",mozilla,i", $GLOBALS['browser_name']) and $GLOBALS['browser_version'] >= 5) {
137 // Numero de version pour Mozilla "authentique"
138 if (preg_match(",rv:([0-9]+\.[0-9]+),", $GLOBALS['browser_description'], $match)) {
139 $GLOBALS['browser_rev'] = doubleval($match[1]);
140 } // Autres Gecko => equivalents 1.4 par defaut (Galeon, etc.)
141 else {
142 if (strpos($GLOBALS['browser_description'], "Gecko") and !strpos($GLOBALS['browser_description'],
143 "KHTML")
144 ) {
145 $GLOBALS['browser_rev'] = 1.4;
146 } // Machins quelconques => equivalents 1.0 par defaut (Konqueror, etc.)
147 else {
148 $GLOBALS['browser_rev'] = 1.0;
149 }
150 }
151 $GLOBALS['browser_barre'] = $GLOBALS['browser_rev'] >= 1.3;
152 }
153 }
154 }
155 }
156 }
157
158 if (!$GLOBALS['browser_name']) {
159 $GLOBALS['browser_name'] = "Mozilla";
160 }
161 }
162
163 verif_butineur();