[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / jquery_ui / jqueryui_pipelines.php
old mode 100755 (executable)
new mode 100644 (file)
index 5e2d218..800a60d
-<?php\r
-\r
-if (!defined('_ECRIRE_INC_VERSION')) return;\r
-\r
-/**\r
- * Ajout des scripts de jQuery UI pour les pages publiques et privées\r
- * \r
- * @param: $plugins \r
- * @return: $plugins\r
- */\r
-function jqueryui_jquery_plugins($plugins){\r
-\r
-       // Modules demandés par le pipeline jqueryui_plugins\r
-       is_array($jqueryui_plugins = pipeline('jqueryui_plugins', array())) || $jqueryui_plugins = array();\r
-       // gestion des dépendances des modules demandés\r
-       is_array($jqueryui_plugins = jqueryui_dependances($jqueryui_plugins)) || $jqueryui_plugins = array();\r
-\r
-       // insérer les scripts nécessaires\r
-       foreach ($jqueryui_plugins as $val) {\r
-               $plugins[] = "javascript/ui/".$val.".js";\r
-       }\r
-\r
-       return $plugins;\r
-}\r
-\r
-/**\r
- * Ajout des css de jQuery UI pour les pages publiques\r
- * \r
- * @param: $flux \r
- * @return: $flux\r
- */\r
-function jqueryui_insert_head_css($flux) {\r
-\r
-       // Modules demandés par le pipeline jqueryui_plugins\r
-       is_array($jqueryui_plugins = pipeline('jqueryui_plugins', array())) || $jqueryui_plugins = array();\r
-       // gestion des dépendances des modules demandés\r
-       is_array($jqueryui_plugins = jqueryui_dependances($jqueryui_plugins)) || $jqueryui_plugins = array();\r
-\r
-       // ajouter le thème si nécessaire\r
-       if ($jqueryui_plugins AND !in_array('jquery.ui.theme', $jqueryui_plugins))\r
-               $jqueryui_plugins[] = 'jquery.ui.theme';\r
-\r
-       // les css correspondantes aux plugins\r
-       $styles = 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
-       // insérer les css nécessaires\r
-       foreach ($jqueryui_plugins as $plugin) {\r
-               if (in_array($plugin, $styles)) {\r
-                       $flux .= "<link rel='stylesheet' type='text/css' media='all' href='".find_in_path('css/'.$plugin.'.css')."' />\n";\r
-               }\r
-       }\r
-\r
-       return $flux;\r
-}\r
-\r
-/**\r
- * Ajout de la css de jQuery UI pour les pages privées\r
- * \r
- * @param: $flux \r
- * @return: $flux\r
- */\r
-function jqueryui_header_prive_css($flux) {\r
-       \r
-       $flux .= "<link rel='stylesheet' type='text/css' media='all' href='".find_in_path('css/jquery-ui.css')."' />\n";\r
-       \r
-       return $flux;\r
-}\r
-\r
-/**\r
- * Gérer les dépendances de la lib jQuery UI\r
- *\r
- * @param array $plugins tableau des plugins demandés\r
- * @return array $plugins tableau des plugins nécessaires ou false\r
- */\r
-function jqueryui_dependances($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($plugins,$dependance_draggable)) > 0){\r
-               $keys = array_keys($intersect);\r
-               array_splice($plugins,$keys[0], 0, "jquery.ui.draggable");\r
-       }\r
-       if(count($intersect = array_intersect($plugins,$dependance_position)) > 0){\r
-               $keys = array_keys($intersect);\r
-               array_splice($plugins,$keys[0], 0, "jquery.ui.position");\r
-       }\r
-       if(count($intersect = array_intersect($plugins,$dependance_mouse)) > 0){\r
-               $keys = array_keys($intersect);\r
-               array_splice($plugins,$keys[0], 0, "jquery.ui.mouse");\r
-       }\r
-       if(count($intersect = array_intersect($plugins,$dependance_widget)) > 0){\r
-               $keys = array_keys($intersect);\r
-               array_splice($plugins,$keys[0], 0, "jquery.ui.widget");\r
-       }\r
-       if(count($intersect = array_intersect($plugins,$dependance_core)) > 0){\r
-               $keys = array_keys($intersect);\r
-               array_splice($plugins,$keys[0], 0, "jquery.ui.core");\r
-       }\r
-       if(count($intersect = array_intersect($plugins,$dependance_effects)) > 0){\r
-               $keys = array_keys($intersect);\r
-               array_splice($plugins,$keys[0], 0, "jquery.effects.core");\r
-       }\r
-       $plugins = array_unique($plugins);\r
-\r
-       return $plugins;\r
-}\r
-\r
-?>\r
+<?php
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
+
+/**
+ * Ajout des scripts de jQuery UI pour les pages publiques et privées
+ *
+ * @param array $plugins
+ * @return array $plugins
+ */
+function jqueryui_jquery_plugins($plugins) {
+
+       // Modules demandés par le pipeline jqueryui_plugins
+       $jqueryui_plugins = pipeline('jqueryui_plugins', array());
+
+       // si un module est demandé, on charge tout le JS.
+       if (is_array($jqueryui_plugins) and count($jqueryui_plugins)) {
+               $plugins[] = 'javascript/ui/jquery-ui.js';
+       }
+
+       return $plugins;
+}
+
+/**
+ * Ajout des css de jQuery UI pour les pages publiques
+ *
+ * @param: $flux
+ * @return: $flux
+ */
+function jqueryui_insert_head_css($flux) {
+       /**
+        * Doit on ne pas insérer les css (défini depuis un autre plugin) ?
+        */
+       if (defined('_JQUERYUI_CSS_NON')) {
+               return $flux;
+       }
+
+       // Modules demandés par le pipeline jqueryui_plugins
+       $jqueryui_plugins = pipeline('jqueryui_plugins', array());
+
+       // si un module est demandé, on charge tout le CSS.
+       if (is_array($jqueryui_plugins) and count($jqueryui_plugins)) {
+               $flux .= "<link rel='stylesheet' type='text/css' media='all' href='" . find_in_path('css/ui/jquery-ui.css') . "' />\n";
+       }
+
+       return $flux;
+}
+
+/**
+ * Ajout de la css de jQuery UI pour les pages privées
+ *
+ * @param: $flux
+ * @return: $flux
+ */
+function jqueryui_header_prive_css($flux) {
+
+       $flux .= "<link rel='stylesheet' type='text/css' media='all' href='" . find_in_path('css/ui/jquery-ui.css') . "' />\n";
+
+       return $flux;
+}
+
+/**
+ * Ajout du script effect de jQuery UI pour les pages privées
+ *
+ * @param: $flux
+ * @return: $flux
+ */
+function jqueryui_header_prive($flux) {
+
+       $flux .= "\n" . '<script src="' . find_in_path('prive/javascript/ui/jquery-ui.js') . '" type="text/javascript"></script>';
+
+       return $flux;
+}
+
+/**
+ * Gérer les dépendances de la lib jQuery UI
+ *
+ * @param array $plugins tableau des plugins demandés
+ * @return array $plugins tableau des plugins nécessaires ou false
+ */
+function jqueryui_dependances($plugins) {
+
+       // Gestion des renommages de plugins jqueryui
+       foreach ($plugins as $nb => $val) {
+               if (0 === strpos($val, 'jquery.effects.')) {
+                       $plugins[$nb] = str_replace('jquery.effects.', 'effect-', $val);
+               }
+               if (0 === strpos($val, 'jquery.ui.')) {
+                       $plugins[$nb] = str_replace('jquery.ui.', '', $val);
+               }
+       }
+
+       /**
+        * Gestion des dépendances inter plugins
+        */
+       $dependance_core = array(
+               'mouse',
+               'widget',
+               'datepicker',
+               'selectmenu'
+       );
+
+       /**
+        * Dépendances à widget
+        * Si un autre plugin est dépendant d'un de ceux là, on ne les ajoute pas
+        */
+       $dependance_widget = array(
+               'accordion',
+               'autocomplete',
+               'button',
+               'dialog',
+               'mouse',
+               'menu',
+               'progressbar',
+               'tabs',
+               'tooltip',
+               'selectmenu'
+       );
+
+       $dependance_mouse = array(
+               'draggable',
+               'droppable',
+               'resizable',
+               'selectable',
+               'slider',
+               'sortable'
+       );
+
+       $dependance_position = array(
+               'autocomplete',
+               'dialog',
+               'menu',
+               'tooltip',
+               'selectmenu'
+       );
+
+       $dependance_button = array(
+               'dialog',
+               'spinner'
+       );
+
+       $dependance_menu = array(
+               'autocomplete',
+               'selectmenu'
+       );
+
+       $dependance_draggable = array(
+               'droppable'
+       );
+
+       $dependance_resizable = array(
+               'dialog'
+       );
+
+       $dependance_effects = array(
+               'effect-blind',
+               'effect-bounce',
+               'effect-clip',
+               'effect-drop',
+               'effect-explode',
+               'effect-fade',
+               'effect-fold',
+               'effect-highlight',
+               'effect-puff',
+               'effect-pulsate',
+               'effect-scale',
+               'effect-shake',
+               'effect-size',
+               'effect-slide',
+               'effect-transfer'
+       );
+
+       /**
+        * Vérification des dépendances
+        * Ici on ajoute quand même le plugin en question et on supprime les doublons via array_unique
+        * Pour éviter le cas où un pipeline demanderait un plugin dans le mauvais sens de la dépendance par exemple
+        *
+        * On commence par le bas de l'échelle :
+        * - button
+        * - menu
+        * - draggable
+        * - position
+        * - mouse
+        * - widget
+        * - core
+        * - effects
+        */
+       if (count($intersect = array_intersect($plugins, $dependance_resizable)) > 0) {
+               $keys = array_keys($intersect);
+               array_splice($plugins, $keys[0], 0, 'resizable');
+       }
+       if (count($intersect = array_intersect($plugins, $dependance_button)) > 0) {
+               $keys = array_keys($intersect);
+               array_splice($plugins, $keys[0], 0, 'button');
+       }
+       if (count($intersect = array_intersect($plugins, $dependance_menu)) > 0) {
+               $keys = array_keys($intersect);
+               array_splice($plugins, $keys[0], 0, 'menu');
+       }
+       if (count($intersect = array_intersect($plugins, $dependance_draggable)) > 0) {
+               $keys = array_keys($intersect);
+               array_splice($plugins, $keys[0], 0, 'draggable');
+       }
+       if (count($intersect = array_intersect($plugins, $dependance_position)) > 0) {
+               $keys = array_keys($intersect);
+               array_splice($plugins, $keys[0], 0, 'position');
+       }
+       if (count($intersect = array_intersect($plugins, $dependance_mouse)) > 0) {
+               $keys = array_keys($intersect);
+               array_splice($plugins, $keys[0], 0, 'mouse');
+       }
+       if (count($intersect = array_intersect($plugins, $dependance_widget)) > 0) {
+               $keys = array_keys($intersect);
+               array_splice($plugins, $keys[0], 0, 'widget');
+       }
+       if (count($intersect = array_intersect($plugins, $dependance_core)) > 0) {
+               $keys = array_keys($intersect);
+               array_splice($plugins, $keys[0], 0, 'core');
+       }
+       if (count($intersect = array_intersect($plugins, $dependance_effects)) > 0) {
+               $keys = array_keys($intersect);
+               array_splice($plugins, $keys[0], 0, 'effect');
+       }
+       $plugins = array_unique($plugins);
+
+       return $plugins;
+}