--- /dev/null
+<?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