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

Last change on this file since 90600 was 90600, checked in by brunobergot@…, 6 years ago

Fix #3489 : compatibilité ascendante pour le pipeline jqueryui_plugins *et* la fonction jqueryui_dependances

Déplacer la gestion des renommage des différents version de jQuery UI dans jqueryui_dependances()

(à tester)

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