source: spip-zone/_plugins_/jquery_ui/jqueryui_pipelines.php @ 48711

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

correction de r47798 pour la branche 2.1 qui avec son pipeline header_prive demandait à spip d'aller chercher les scripts et css un répertoire trop haut

  • Property svn:executable set to *
File size: 5.2 KB
Line 
1<?php
2
3function jqueryui_jquery_plugins($plugins){
4        $config = @unserialize($GLOBALS['meta']['jqueryui']);
5       
6        if (!is_array($config) OR !is_array($config['plugins'])) {
7                $config['plugins'] = array();
8                $ecrire_meta = 'oui';
9        }
10       
11        $config['plugins'] = array_unique(array_merge(sinon(pipeline('jqueryui_forcer'),array()),$config['plugins']));
12       
13        /**
14         * Gestion des dépendances inter plugins
15         */
16        $dependance_core = array(
17                                                        'jquery.ui.mouse',
18                                                        'jquery.ui.widget',
19                                                        'jquery.ui.datepicker'
20        );
21
22        /**
23         * Dépendances à widget
24         * Si un autre plugin est dépendant d'un de ceux là, on ne les ajoute pas
25         */
26        $dependance_widget = array(
27                                                        'jquery.ui.mouse',
28                                                        'jquery.ui.accordion',
29                                                        'jquery.ui.autocomplete',
30                                                        'jquery.ui.button',
31                                                        'jquery.ui.dialog',
32                                                        'jquery.ui.tabs',
33                                                        'jquery.ui.progressbar'                                         
34                                                        );
35       
36        $dependance_mouse = array(
37                                                        'jquery.ui.draggable',
38                                                        'jquery.ui.droppable',
39                                                        'jquery.ui.resizable',
40                                                        'jquery.ui.selectable',
41                                                        'jquery.ui.sortable',
42                                                        'jquery.ui.slider'
43                                                );
44       
45        $dependance_position = array(
46                                                        'jquery.ui.autocomplete',
47                                                        'jquery.ui.dialog',
48                                                        );
49       
50        $dependance_draggable = array(
51                                                        'jquery.ui.droppable'
52                                                        );
53       
54        $dependance_effects = array(
55                                                        'jquery.effects.blind',
56                                                        'jquery.effects.bounce',
57                                                        'jquery.effects.clip',
58                                                        'jquery.effects.drop',
59                                                        'jquery.effects.explode',
60                                                        'jquery.effects.fold',
61                                                        'jquery.effects.highlight',
62                                                        'jquery.effects.pulsate',
63                                                        'jquery.effects.scale',
64                                                        'jquery.effects.shake',
65                                                        'jquery.effects.slide',
66                                                        'jquery.effects.transfer'
67                                                );
68       
69        /**
70         * Vérification des dépendances
71         * Ici on ajoute quand même le plugin en question et on supprime les doublons via array_unique
72         * Pour éviter le cas où un pipeline demanderait un plugin dans le mauvais sens de la dépendance par exemple
73         *
74         * On commence par le bas de l'échelle :
75         * - draggable
76         * - position
77         * - mouse
78         * - widget
79         * - core
80         * - effects
81         */
82        if(count($intersect = array_intersect($config['plugins'],$dependance_draggable)) > 0){
83                $keys = array_keys($intersect);
84                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.draggable");
85        }
86        if(count($intersect = array_intersect($config['plugins'],$dependance_position)) > 0){
87                $keys = array_keys($intersect);
88                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.position");
89        }
90        if(count($intersect = array_intersect($config['plugins'],$dependance_mouse)) > 0){
91                $keys = array_keys($intersect);
92                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.mouse");
93        }
94        if(count($intersect = array_intersect($config['plugins'],$dependance_widget)) > 0){
95                $keys = array_keys($intersect);
96                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.widget");
97        }
98        if(count($intersect = array_intersect($config['plugins'],$dependance_core)) > 0){
99                $keys = array_keys($intersect);
100                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.core");
101        }
102        if(count($intersect = array_intersect($config['plugins'],$dependance_effects)) > 0){
103                $keys = array_keys($intersect);
104                array_splice($config['plugins'],$keys[0], 0, "jquery.effects.core");
105        }
106        if(count($intersect = array_intersect($config['plugins'],$dependance_effects)) > 0){
107                $keys = array_keys($intersect);
108                array_splice($config['plugins'],$keys[0], 0, "jquery.effects.core");
109        }
110        $config['plugins'] = array_unique($config['plugins']);
111        foreach ($config['plugins'] as $val) {
112                $plugins[] = _DIR_JQUERYUI_JS.$val.".js";
113        }
114       
115        // si pas de config en base, on enregistre les scripts issu du pipeline jqueryui_forcer + leurs dépendances
116        if ($ecrire_meta == 'oui') {
117                include_spip('inc/meta');
118                ecrire_meta('jqueryui',serialize($config));
119        }
120
121        return $plugins;
122}
123
124/**
125 * jqueryui_insert_head : ajout des CSS de jQuery-UI pour les pages publiques
126 * avec gestion du theme et des UI utilises
127 *
128 * @param: $flux
129 * @return: $flux
130 */
131function jqueryui_insert_head($flux) {
132        $config = @unserialize($GLOBALS['meta']['jqueryui']);
133
134        // recuperer le repertoire du theme
135        $theme = 'base/';
136        if (isset($config['theme']) AND $config['theme'] != '')
137                $theme = $config['theme'].'/';
138        if ($theme == 'no_css/')
139                return $flux;
140       
141        // recuperer la liste des plugins jquery actives ou issus du pipeline jqueryui_forcer
142        $config['plugins'] = array_unique(array_merge(sinon(pipeline('jqueryui_forcer'),array()),$config['plugins']));
143
144        // ajouter core et theme si necessaire
145        if (!in_array('jquery.ui.core', $config['plugins']))
146                $config['plugins'][] = 'jquery.ui.core';
147        if (!in_array('jquery.ui.theme', $config['plugins']))
148                $config['plugins'][] = 'jquery.ui.theme';
149               
150        // les CSS correspondantes aux plugins
151        $Tjquery_css = array(
152                                                'jquery.ui.accordion',
153                                                'jquery.ui.autocomplete',
154                                                'jquery.ui.button',
155                                                'jquery.ui.core',
156                                                'jquery.ui.datepicker',
157                                                'jquery.ui.dialog',
158                                                'jquery.ui.progressbar',
159                                                'jquery.ui.resizable',
160                                                'jquery.ui.selectable',
161                                                'jquery.ui.slider',
162                                                'jquery.ui.tabs',
163                                                'jquery.ui.theme'
164                                                );
165
166        // appeler les CSS necessaires
167        foreach ($config['plugins'] as $plug) {
168                if (in_array($plug, $Tjquery_css)) {
169                        $flux .= "<link rel='stylesheet' type='text/css' media='all' href='"._DIR_JQUERYUI_CSS.$theme.$plug.".css' />\n";
170                }
171        }
172
173        return $flux;
174}
175
176?>
Note: See TracBrowser for help on using the repository browser.