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

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

adapter le chemin des scripts appelés par le pipeline jquerui_plugins suite à r60859

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