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