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

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

Évitons de charger sinon() qui est dans inc/filtres, mais pas tout le temps chargé. (Oil)

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