[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / jquery_ui / jqueryui_pipelines.php
diff --git a/www/plugins/auto/jquery_ui/jqueryui_pipelines.php b/www/plugins/auto/jquery_ui/jqueryui_pipelines.php
new file mode 100644 (file)
index 0000000..ac9c231
--- /dev/null
@@ -0,0 +1,176 @@
+<?php\r
+\r
+if (!defined("_ECRIRE_INC_VERSION")) return;\r
+\r
+function jqueryui_jquery_plugins($plugins){\r
+       $config = @unserialize($GLOBALS['meta']['jqueryui']);\r
+       \r
+       if (!is_array($config) OR !is_array($config['plugins'])) {\r
+               $config['plugins'] = array();\r
+               $ecrire_meta = 'oui';\r
+       }\r
+       \r
+       $config['plugins'] = array_unique(array_merge(sinon(pipeline('jqueryui_forcer'),array()),$config['plugins']));\r
+       \r
+       /**\r
+        * Gestion des dépendances inter plugins\r
+        */\r
+       $dependance_core = array(\r
+                                                       'jquery.ui.mouse',\r
+                                                       'jquery.ui.widget',\r
+                                                       'jquery.ui.datepicker'\r
+       );\r
+\r
+       /**\r
+        * Dépendances à widget\r
+        * Si un autre plugin est dépendant d'un de ceux là, on ne les ajoute pas\r
+        */\r
+       $dependance_widget = array(\r
+                                                       'jquery.ui.mouse',\r
+                                                       'jquery.ui.accordion',\r
+                                                       'jquery.ui.autocomplete',\r
+                                                       'jquery.ui.button',\r
+                                                       'jquery.ui.dialog',\r
+                                                       'jquery.ui.tabs',\r
+                                                       'jquery.ui.progressbar'                                         \r
+                                                       );\r
+       \r
+       $dependance_mouse = array(\r
+                                                       'jquery.ui.draggable',\r
+                                                       'jquery.ui.droppable',\r
+                                                       'jquery.ui.resizable',\r
+                                                       'jquery.ui.selectable',\r
+                                                       'jquery.ui.sortable',\r
+                                                       'jquery.ui.slider'\r
+                                               );\r
+       \r
+       $dependance_position = array(\r
+                                                       'jquery.ui.autocomplete',\r
+                                                       'jquery.ui.dialog',\r
+                                                       );\r
+       \r
+       $dependance_draggable = array(\r
+                                                       'jquery.ui.droppable'\r
+                                                       );\r
+       \r
+       $dependance_effects = array(\r
+                                                       'jquery.effects.blind',\r
+                                                       'jquery.effects.bounce',\r
+                                                       'jquery.effects.clip',\r
+                                                       'jquery.effects.drop',\r
+                                                       'jquery.effects.explode',\r
+                                                       'jquery.effects.fold',\r
+                                                       'jquery.effects.highlight',\r
+                                                       'jquery.effects.pulsate',\r
+                                                       'jquery.effects.scale',\r
+                                                       'jquery.effects.shake',\r
+                                                       'jquery.effects.slide',\r
+                                                       'jquery.effects.transfer'\r
+                                               );\r
+       \r
+       /**\r
+        * Vérification des dépendances\r
+        * Ici on ajoute quand même le plugin en question et on supprime les doublons via array_unique\r
+        * Pour éviter le cas où un pipeline demanderait un plugin dans le mauvais sens de la dépendance par exemple\r
+        * \r
+        * On commence par le bas de l'échelle :\r
+        * - draggable\r
+        * - position\r
+        * - mouse\r
+        * - widget\r
+        * - core\r
+        * - effects\r
+        */\r
+       if(count($intersect = array_intersect($config['plugins'],$dependance_draggable)) > 0){\r
+               $keys = array_keys($intersect);\r
+               array_splice($config['plugins'],$keys[0], 0, "jquery.ui.draggable");\r
+       }\r
+       if(count($intersect = array_intersect($config['plugins'],$dependance_position)) > 0){\r
+               $keys = array_keys($intersect);\r
+               array_splice($config['plugins'],$keys[0], 0, "jquery.ui.position");\r
+       }\r
+       if(count($intersect = array_intersect($config['plugins'],$dependance_mouse)) > 0){\r
+               $keys = array_keys($intersect);\r
+               array_splice($config['plugins'],$keys[0], 0, "jquery.ui.mouse");\r
+       }\r
+       if(count($intersect = array_intersect($config['plugins'],$dependance_widget)) > 0){\r
+               $keys = array_keys($intersect);\r
+               array_splice($config['plugins'],$keys[0], 0, "jquery.ui.widget");\r
+       }\r
+       if(count($intersect = array_intersect($config['plugins'],$dependance_core)) > 0){\r
+               $keys = array_keys($intersect);\r
+               array_splice($config['plugins'],$keys[0], 0, "jquery.ui.core");\r
+       }\r
+       if(count($intersect = array_intersect($config['plugins'],$dependance_effects)) > 0){\r
+               $keys = array_keys($intersect);\r
+               array_splice($config['plugins'],$keys[0], 0, "jquery.effects.core");\r
+       }\r
+       $config['plugins'] = array_unique($config['plugins']);\r
+       foreach ($config['plugins'] as $val) {\r
+               $plugins[] = _DIR_JQUERYUI_JS.$val.".js";\r
+       }\r
+       \r
+       // si pas de config en base, on enregistre les scripts issu du pipeline jqueryui_forcer + leurs dépendances\r
+       if ($ecrire_meta == 'oui') {\r
+               include_spip('inc/meta');\r
+               ecrire_meta('jqueryui',serialize($config));\r
+       }\r
+\r
+       return $plugins;\r
+}\r
+\r
+/**\r
+ * jqueryui_insert_head : ajout des CSS de jQuery-UI pour les pages publiques et privées\r
+ * avec gestion du theme et des UI utilises\r
+ * \r
+ * @param: $flux \r
+ * @return: $flux\r
+ */\r
+function jqueryui_insert_head($flux) {\r
+       $config = @unserialize($GLOBALS['meta']['jqueryui']);\r
+\r
+       // recuperer le repertoire du theme\r
+       $theme = 'base/';\r
+       if (isset($config['theme']) AND $config['theme'] != '')\r
+               $theme = $config['theme'].'/';\r
+       if ($theme == 'no_css/' && !defined('_JQUERYUI_FORCER_CSS'))\r
+               return $flux;\r
+\r
+       // ajouter core tout le temps et en debut de tableau, array_unique supprimera les occurrences suivantes\r
+       array_unshift($config['plugins'],'jquery.ui.core');\r
+\r
+       // recuperer la liste des plugins jquery actives ou issus du pipeline jqueryui_forcer\r
+       // Attention, l'ordre du merge est important, le css du core doit est charge avant le reste\r
+       $config['plugins'] = array_unique(array_merge($config['plugins'],sinon(pipeline('jqueryui_forcer'),array())));\r
+\r
+       // ajouter theme si necessaire\r
+       if (!in_array('jquery.ui.theme', $config['plugins']))\r
+               $config['plugins'][] = 'jquery.ui.theme';\r
+\r
+       // les CSS correspondantes aux plugins\r
+       $Tjquery_css = array(\r
+                                               'jquery.ui.accordion',\r
+                                               'jquery.ui.autocomplete',\r
+                                               'jquery.ui.button',\r
+                                               'jquery.ui.core',\r
+                                               'jquery.ui.datepicker',\r
+                                               'jquery.ui.dialog',\r
+                                               'jquery.ui.progressbar',\r
+                                               'jquery.ui.resizable',\r
+                                               'jquery.ui.selectable',\r
+                                               'jquery.ui.slider',\r
+                                               'jquery.ui.tabs',\r
+                                               'jquery.ui.theme'\r
+                                               );\r
+\r
+       // appeler les CSS necessaires\r
+       foreach ($config['plugins'] as $plug) {\r
+               if (in_array($plug, $Tjquery_css)) {\r
+                       $flux .= "<link rel='stylesheet' type='text/css' media='all' href='".find_in_path(_DIR_JQUERYUI_CSS.$theme.$plug.'.css')."' />\n";\r
+               }\r
+       }\r
+\r
+       return $flux;\r
+}\r
+\r
+?>\r