jqueryui_pipelines.php 5.5 KB

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