source: spip-zone/_core_/plugins/jquery_ui/jqueryui_pipelines.php @ 85722

Last change on this file since 85722 was 85722, checked in by kent1@…, 7 years ago

Sur les CSS aussi prendre en compte les vieux appels

theme est nécessaire normalement pour que cela fonctionne, pas jquery.ui.theme

File size: 6.9 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) return;
4
5/**
6 * Ajout des scripts de jQuery UI pour les pages publiques et privées
7 *
8 * @param array $plugins
9 * @return array $plugins
10 */
11function jqueryui_jquery_plugins($plugins){
12
13        // Modules demandés par le pipeline jqueryui_plugins
14        is_array($jqueryui_plugins = pipeline('jqueryui_plugins', array())) || $jqueryui_plugins = array();
15
16        // Gestion des renommages de plugins jqueryui
17        foreach ($jqueryui_plugins as $nb => $val) {
18                if (0 === strpos($val,'jquery.effects.')) {
19                        $jqueryui_plugins[$nb] = str_replace('jquery.effects.','jquery.ui.effect-',$val);
20                }
21                if (0 === strpos($val,'jquery.ui.')) {
22                        $jqueryui_plugins[$nb] = str_replace('jquery.ui.','',$val);
23                }
24        }
25        // gestion des dépendances des modules demandés
26        is_array($jqueryui_plugins = jqueryui_dependances($jqueryui_plugins)) || $jqueryui_plugins = array();
27
28        // insérer les scripts nécessaires
29        foreach ($jqueryui_plugins as $val) {
30                $plugins[] = "javascript/ui/".$val.".js";
31        }
32
33        return $plugins;
34}
35
36/**
37 * Ajout des css de jQuery UI pour les pages publiques
38 *
39 * @param: $flux
40 * @return: $flux
41 */
42function jqueryui_insert_head_css($flux) {
43        /**
44         * Doit on ne pas insérer les css (défini depuis un autre plugin) ?
45         */
46        if(defined('_JQUERYUI_CSS_NON'))
47                return $flux;
48       
49
50        // Modules demandés par le pipeline jqueryui_plugins
51        is_array($jqueryui_plugins = pipeline('jqueryui_plugins', array())) || $jqueryui_plugins = array();
52        // gestion des dépendances des modules demandés
53        is_array($jqueryui_plugins = jqueryui_dependances($jqueryui_plugins)) || $jqueryui_plugins = array();
54
55        // ajouter le thème si nécessaire
56        if ($jqueryui_plugins AND !in_array('jquery.ui.theme', $jqueryui_plugins))
57                $jqueryui_plugins[] = 'theme';
58
59        // les css correspondantes aux plugins
60        $styles = array(
61                                                'accordion',
62                                                'autocomplete',
63                                                'button',
64                                                'core',
65                                                'datepicker',
66                                                'dialog',
67                                                'draggable',
68                                                'menus',
69                                                'progressbar',
70                                                'resizable',
71                                                'selectable',
72                                                'selectmenu',
73                                                'slider',
74                                                'sortable',
75                                                'spinner',
76                                                'tabs',
77                                                'tooltip',
78                                                'theme'
79                                                );
80       
81        // insérer les css nécessaires
82        foreach ($jqueryui_plugins as $plugin) {
83                if (0 === strpos($plugin,'jquery.effects.')) {
84                        $plugin = str_replace('jquery.effects.','jquery.ui.effect-',$plugin);
85                }
86                if (0 === strpos($plugin,'jquery.ui.')) {
87                        $plugin = str_replace('jquery.ui.','',$plugin);
88                }
89                if (in_array($plugin, $styles)) {
90                        $flux .= "<link rel='stylesheet' type='text/css' media='all' href='".find_in_path('css/ui/'.$plugin.'.css')."' />\n";
91                }
92        }
93
94        return $flux;
95}
96
97/**
98 * Ajout de la css de jQuery UI pour les pages privées
99 *
100 * @param: $flux
101 * @return: $flux
102 */
103function jqueryui_header_prive_css($flux) {
104       
105        $flux .= "<link rel='stylesheet' type='text/css' media='all' href='".find_in_path('css/ui/jquery-ui.css')."' />\n";
106       
107        return $flux;
108}
109
110/**
111 * Ajout du script effect de jQuery UI pour les pages privées
112 *
113 * @param: $flux
114 * @return: $flux
115 */
116function jqueryui_header_prive($flux) {
117       
118        $flux .="\n".'<script src="'.find_in_path('prive/javascript/ui/effect.js').'" type="text/javascript"></script>';
119       
120        return $flux;
121}
122
123/**
124 * Gérer les dépendances de la lib jQuery UI
125 *
126 * @param array $plugins tableau des plugins demandés
127 * @return array $plugins tableau des plugins nécessaires ou false
128 */
129function jqueryui_dependances($plugins){
130
131        /**
132         * Gestion des dépendances inter plugins
133         */
134        $dependance_core = array(
135                                                        'mouse',
136                                                        'widget',
137                                                        'datepicker',
138                                                        'selectmenu'
139                                                );
140
141        /**
142         * Dépendances à widget
143         * Si un autre plugin est dépendant d'un de ceux là, on ne les ajoute pas
144         */
145        $dependance_widget = array(
146                                                        'accordion',
147                                                        'autocomplete',
148                                                        'button',
149                                                        'dialog',
150                                                        'mouse',
151                                                        'menu',
152                                                        'progressbar',
153                                                        'tabs',
154                                                        'tooltip',
155                                                        'selectmenu'
156                                                );
157
158        $dependance_mouse = array(
159                                                        'draggable',
160                                                        'droppable',
161                                                        'resizable',
162                                                        'selectable',
163                                                        'slider',
164                                                        'sortable'
165                                                );
166
167        $dependance_position = array(
168                                                        'autocomplete',
169                                                        'dialog',
170                                                        'menu',
171                                                        'tooltip',
172                                                        'selectmenu'
173                                                );
174
175        $dependance_button = array(
176                                                        'dialog',
177                                                        'spinner'
178                                                );
179
180        $dependance_menu = array(
181                                                        'autocomplete',
182                                                        'selectmenu'
183                                                );
184
185        $dependance_draggable = array(
186                                                        'droppable'
187                                                );
188       
189        $dependance_resizable = array(
190                                                        'dialog'
191                                                );
192
193        $dependance_effects = array(
194                                                        'effect-blind',
195                                                        'effect-bounce',
196                                                        'effect-clip',
197                                                        'effect-drop',
198                                                        'effect-explode',
199                                                        'effect-fade',
200                                                        'effect-fold',
201                                                        'effect-highlight',
202                                                        'effect-puff',
203                                                        'effect-pulsate',
204                                                        'effect-scale',
205                                                        'effect-shake',
206                                                        'effect-size',
207                                                        'effect-slide',
208                                                        'effect-transfer'
209                                                );
210
211        /**
212         * Vérification des dépendances
213         * Ici on ajoute quand même le plugin en question et on supprime les doublons via array_unique
214         * Pour éviter le cas où un pipeline demanderait un plugin dans le mauvais sens de la dépendance par exemple
215         *
216         * On commence par le bas de l'échelle :
217         * - button
218         * - menu
219         * - draggable
220         * - position
221         * - mouse
222         * - widget
223         * - core
224         * - effects
225         */
226        if(count($intersect = array_intersect($plugins,$dependance_resizable)) > 0){
227                $keys = array_keys($intersect);
228                array_splice($plugins,$keys[0], 0, "resizable");
229        }
230        if(count($intersect = array_intersect($plugins,$dependance_button)) > 0){
231                $keys = array_keys($intersect);
232                array_splice($plugins,$keys[0], 0, "button");
233        }
234        if(count($intersect = array_intersect($plugins,$dependance_menu)) > 0){
235                $keys = array_keys($intersect);
236                array_splice($plugins,$keys[0], 0, "menu");
237        }
238        if(count($intersect = array_intersect($plugins,$dependance_draggable)) > 0){
239                $keys = array_keys($intersect);
240                array_splice($plugins,$keys[0], 0, "draggable");
241        }
242        if(count($intersect = array_intersect($plugins,$dependance_position)) > 0){
243                $keys = array_keys($intersect);
244                array_splice($plugins,$keys[0], 0, "position");
245        }
246        if(count($intersect = array_intersect($plugins,$dependance_mouse)) > 0){
247                $keys = array_keys($intersect);
248                array_splice($plugins,$keys[0], 0, "mouse");
249        }
250        if(count($intersect = array_intersect($plugins,$dependance_widget)) > 0){
251                $keys = array_keys($intersect);
252                array_splice($plugins,$keys[0], 0, "widget");
253        }
254        if(count($intersect = array_intersect($plugins,$dependance_core)) > 0){
255                $keys = array_keys($intersect);
256                array_splice($plugins,$keys[0], 0, "core");
257        }
258        if(count($intersect = array_intersect($plugins,$dependance_effects)) > 0){
259                $keys = array_keys($intersect);
260                array_splice($plugins,$keys[0], 0, "effect");
261        }
262        $plugins = array_unique($plugins);
263
264        return $plugins;
265}
266
267?>
Note: See TracBrowser for help on using the repository browser.