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