source: spip-zone/_plugins_/bootstrap/trunk/bootstrap4_fonctions.php @ 115121

Last change on this file since 115121 was 115121, checked in by cedric@…, 2 years ago

Un auto-prefixer PHP pour Bootstrap : traite tout ce dont on a effectivement besoin de prefixer dans BS4 a l'exception de

  • selecteur (concerne ::placeholder qui est prefixe en -ms -moz et -webkit dans BS4 dist css)
  • @keyframe (prefixe en -webkit dans BS4 dist css)

cela fait donc suffisament bien le job pour s'en contenter (si on aime la perfection on utilisera prefixfree.js)

NDLR : Je n'ai pas fait un plugin independant car cela ne pretend pas etre exhaustif ni complet, juste suffisant pour traiter BS4

File size: 5.5 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5if (!defined('_MENUS_EXTRA_CLASS')) define('_MENUS_EXTRA_CLASS','nav');
6
7/**
8 * |prefixer_css a utiliser dans le squelette head pour prefixer BS4 et etendre sa compatibilite
9 * @param string $css
10 * @return string
11 */
12function filtre_prefixer_css_dist($css) {
13        include_spip('bootstrap2spip/prefixer_css');
14        return prefixer_css($css);
15}
16
17/**
18 * Ajouter le markup html pour une navbar responsive
19 * [<div class="navbar navbar-inverse navbar-responsive" id="nav">
20 * (#INCLURE{fond=inclure/nav,env}|navbar_responsive)
21 * </div>]
22 *
23 * @param string $nav
24 * @param string $class_collapse nom de la class à plier/déplier
25 * @return string
26 */
27function navbar_responsive($nav, $class_collapse = 'nav-collapse-main'){
28        static $navbarcount = 1;
29        if (strpos($nav,'navbar-collapse')!==false) return $nav;
30
31        $respnav = '';
32
33        $uls = extraire_balises($nav,"ul");
34        $n = 1;
35        while ($ul = array_shift($uls)
36                AND strpos($navclass = extraire_attribut($ul,"class"),"nav")===false){
37                $n++;
38        }
39        if ($ul){
40                $id = "navbar-".substr(md5($navbarcount . ':' . time() .':' . $nav),0,4);
41                $respnav = $nav;
42                $p = strpos($respnav,$ul);
43                $respnav = substr_replace($respnav,
44                        '<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#' . $id . '" aria-controls="'. $id . '" aria-expanded="false" aria-label="Toggle navigation">'
45                        . '<span class="navbar-toggler-icon"></span>'
46                        . '</button>'
47                        . "\n" . '<div class="collapse navbar-collapse ' . $class_collapse . '" id="'.$id.'">',$p,0);
48
49                $l=strlen($respnav);$p=$l-1;
50                while ($n--){
51                        $p = strrpos($respnav,"</ul>",$p-$l);
52                }
53                if ($p)
54                        $respnav = substr_replace($respnav,'</div>',$p+5,0);
55                else
56                        $respnav = $nav;
57        }
58        return $respnav;
59}
60
61function filtre_lien_ou_expose_dist($url,$libelle=NULL,$on=false,$class="",$title="",$rel="", $evt=''){
62        if ($on) {
63                $bal = 'strong';
64                $class = "";
65                $att = "";
66                // si $on passe la balise et optionnelement une ou ++classe
67                // a.active span.selected.active etc....
68                if (is_string($on) AND (strncmp($on,'a',1)==0 OR strncmp($on,'span',4)==0 OR strncmp($on,'strong',6)==0)){
69                        $on = explode(".",$on);
70                        // on verifie que c'est exactement une des 3 balises a, span ou strong
71                        if (in_array(reset($on),array('a','span','strong'))){
72                                $bal = array_shift($on);
73                                $class = implode(" ",$on);
74                                if ($bal=="a")
75                                        $att = 'href="#" ';
76                        }
77                }
78                $att .= 'class="'.($class?attribut_html($class).' ':'').'on active"';
79        } else {
80                $bal = 'a';
81                $att = "href='$url'"
82                        .($title?" title='".attribut_html($title)."'":'')
83                        .($class?" class='".attribut_html($class)."'":'')
84                        .($rel?" rel='".attribut_html($rel)."'":'')
85                        .$evt;
86        }
87        if ($libelle === NULL)
88                $libelle = $url;
89        return "<$bal $att>$libelle</$bal>";
90}
91
92function bootstrap4_affichage_final($flux){
93        if (
94                $GLOBALS['html']
95                AND isset($GLOBALS['visiteur_session']['statut'])
96                AND $GLOBALS['visiteur_session']['statut']=='0minirezo'
97                AND $GLOBALS['visiteur_session']['webmestre']=='oui'
98                AND strpos($flux,"<!-- insert_head -->")!==false
99                AND $p=stripos($flux,"</body>")
100                AND $f = find_in_path("js/hashgrid.js")
101        ){
102                $flux = substr_replace($flux,'<script type="text/javascript" src="'.$f.'"></script>',$p,0);
103        }
104        return $flux;
105}
106
107
108/**
109 * Generer un bouton_action
110 * utilise par #BOUTON_ACTION
111 *
112 * @param string $libelle
113 * @param string $url
114 * @param string $class
115 * @param string $confirm
116 *   message de confirmation oui/non avant l'action
117 * @param string $title
118 * @param string $callback
119 *   callback js a appeler lors de l'evenement action (apres confirmation eventuelle si $confirm est non vide)
120 *   et avant execution de l'action. Si la callback renvoie false, elle annule le declenchement de l'action
121 * @return string
122 */
123function filtre_bouton_action_dist($libelle, $url, $class="", $confirm="", $title="", $callback=""){
124        if ($confirm) {
125                $confirm = "confirm(\"" . attribut_html($confirm) . "\")";
126                if ($callback)
127                        $callback = "$confirm?($callback):false";
128                else
129                        $callback = $confirm;
130        }
131        $ajax = explode(" ",$class);
132        if (in_array("ajax",$ajax))
133                $ajax = " ajax";
134        else
135                $ajax = "";
136        $onclick = $callback?" onclick='return ".addcslashes($callback,"'")."'":"";
137        $title = $title ? " title='$title'" : "";
138        return "<form class='bouton_action_post$ajax' method='post' action='$url'><div>".form_hidden($url)
139                ."<button type='submit' class='submit btn $class'$title$onclick>$libelle</button></div></form>";
140}
141
142
143
144if (!test_espace_prive()){
145
146/**
147 * Ouvrir une boite
148 * peut etre surcharge par filtre_boite_ouvrir_dist, filtre_boite_ouvrir
149 *
150 * @param string $titre
151 * @param string $class
152 * @return <type>
153 */
154function filtre_boite_ouvrir_dist($titre, $class='', $head_class='', $id=""){
155        $class = "card card-box $class";
156        $head_class = "card-header $head_class";
157        // dans l'espace prive, titrer en h3 si pas de balise <hn>
158        if (test_espace_prive() AND strlen($titre) AND strpos($titre,'<h')===false)
159                $titre = "<h3>$titre</h3>";
160        return '<div class="'.$class.($id?"\" id=\"$id":"").'">'
161        .($titre?'<div class="'.$head_class.'">'.$titre.'</div>':'')
162        .'<div class="card-body">';
163}
164
165/**
166 * Passer au pied d'une boite
167 * peut etre surcharge par filtre_boite_pied_dist, filtre_boite_pied
168 *
169 * @param <type> $class
170 * @return <type>
171 */
172function filtre_boite_pied_dist($class='act'){
173        $class = "card-footer $class";
174        return  '</div>'
175        .'<div class="'.$class.'">';
176}
177
178/**
179 * Fermer une boite
180 * peut etre surcharge par filtre_boite_fermer_dist, filtre_boite_fermer
181 *
182 * @return <type>
183 */
184function filtre_boite_fermer_dist(){
185        return '</div>'
186        .'</div>';
187}
188
189}
Note: See TracBrowser for help on using the repository browser.