source: spip-zone/_plugins_/jquery_ui/jqueryui_pipelines.php @ 52843

Last change on this file since 52843 was 52843, checked in by kent1@…, 8 years ago

if (!defined("_ECRIRE_INC_VERSION")) return; sur tout fichier PHP pour sécurité future principalement

  • Property svn:executable set to *
File size: 5.5 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5function jqueryui_jquery_plugins($plugins){
6        $config = @unserialize($GLOBALS['meta']['jqueryui']);
7       
8        if (!is_array($config) OR !is_array($config['plugins'])) {
9                $config['plugins'] = array();
10                $ecrire_meta = 'oui';
11        }
12       
13        $config['plugins'] = array_unique(array_merge(sinon(pipeline('jqueryui_forcer'),array()),$config['plugins']));
14       
15        /**
16         * Gestion des dépendances inter plugins
17         */
18        $dependance_core = array(
19                                                        'jquery.ui.mouse',
20                                                        'jquery.ui.widget',
21                                                        'jquery.ui.datepicker'
22        );
23
24        /**
25         * Dépendances à widget
26         * Si un autre plugin est dépendant d'un de ceux là, on ne les ajoute pas
27         */
28        $dependance_widget = array(
29                                                        'jquery.ui.mouse',
30                                                        'jquery.ui.accordion',
31                                                        'jquery.ui.autocomplete',
32                                                        'jquery.ui.button',
33                                                        'jquery.ui.dialog',
34                                                        'jquery.ui.tabs',
35                                                        'jquery.ui.progressbar'                                         
36                                                        );
37       
38        $dependance_mouse = array(
39                                                        'jquery.ui.draggable',
40                                                        'jquery.ui.droppable',
41                                                        'jquery.ui.resizable',
42                                                        'jquery.ui.selectable',
43                                                        'jquery.ui.sortable',
44                                                        'jquery.ui.slider'
45                                                );
46       
47        $dependance_position = array(
48                                                        'jquery.ui.autocomplete',
49                                                        'jquery.ui.dialog',
50                                                        );
51       
52        $dependance_draggable = array(
53                                                        'jquery.ui.droppable'
54                                                        );
55       
56        $dependance_effects = array(
57                                                        'jquery.effects.blind',
58                                                        'jquery.effects.bounce',
59                                                        'jquery.effects.clip',
60                                                        'jquery.effects.drop',
61                                                        'jquery.effects.explode',
62                                                        'jquery.effects.fold',
63                                                        'jquery.effects.highlight',
64                                                        'jquery.effects.pulsate',
65                                                        'jquery.effects.scale',
66                                                        'jquery.effects.shake',
67                                                        'jquery.effects.slide',
68                                                        'jquery.effects.transfer'
69                                                );
70       
71        /**
72         * Vérification des dépendances
73         * Ici on ajoute quand même le plugin en question et on supprime les doublons via array_unique
74         * Pour éviter le cas où un pipeline demanderait un plugin dans le mauvais sens de la dépendance par exemple
75         *
76         * On commence par le bas de l'échelle :
77         * - draggable
78         * - position
79         * - mouse
80         * - widget
81         * - core
82         * - effects
83         */
84        if(count($intersect = array_intersect($config['plugins'],$dependance_draggable)) > 0){
85                $keys = array_keys($intersect);
86                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.draggable");
87        }
88        if(count($intersect = array_intersect($config['plugins'],$dependance_position)) > 0){
89                $keys = array_keys($intersect);
90                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.position");
91        }
92        if(count($intersect = array_intersect($config['plugins'],$dependance_mouse)) > 0){
93                $keys = array_keys($intersect);
94                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.mouse");
95        }
96        if(count($intersect = array_intersect($config['plugins'],$dependance_widget)) > 0){
97                $keys = array_keys($intersect);
98                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.widget");
99        }
100        if(count($intersect = array_intersect($config['plugins'],$dependance_core)) > 0){
101                $keys = array_keys($intersect);
102                array_splice($config['plugins'],$keys[0], 0, "jquery.ui.core");
103        }
104        if(count($intersect = array_intersect($config['plugins'],$dependance_effects)) > 0){
105                $keys = array_keys($intersect);
106                array_splice($config['plugins'],$keys[0], 0, "jquery.effects.core");
107        }
108        $config['plugins'] = array_unique($config['plugins']);
109        foreach ($config['plugins'] as $val) {
110                $plugins[] = _DIR_JQUERYUI_JS.$val.".js";
111        }
112       
113        // si pas de config en base, on enregistre les scripts issu du pipeline jqueryui_forcer + leurs dépendances
114        if ($ecrire_meta == 'oui') {
115                include_spip('inc/meta');
116                ecrire_meta('jqueryui',serialize($config));
117        }
118
119        return $plugins;
120}
121
122/**
123 * jqueryui_insert_head : ajout des CSS de jQuery-UI pour les pages publiques et privées
124 * avec gestion du theme et des UI utilises
125 *
126 * @param: $flux
127 * @return: $flux
128 */
129function jqueryui_insert_head($flux) {
130        $config = @unserialize($GLOBALS['meta']['jqueryui']);
131
132        // recuperer le repertoire du theme
133        $theme = 'base/';
134        if (isset($config['theme']) AND $config['theme'] != '')
135                $theme = $config['theme'].'/';
136        if ($theme == 'no_css/' && !defined('_JQUERYUI_FORCER_CSS'))
137                return $flux;
138
139        // ajouter core tout le temps et en debut de tableau, array_unique supprimera les occurrences suivantes
140        array_unshift($config['plugins'],'jquery.ui.core');
141
142        // recuperer la liste des plugins jquery actives ou issus du pipeline jqueryui_forcer
143        // Attention, l'ordre du merge est important, le css du core doit est charge avant le reste
144        $config['plugins'] = array_unique(array_merge($config['plugins'],sinon(pipeline('jqueryui_forcer'),array())));
145
146        // ajouter theme si necessaire
147        if (!in_array('jquery.ui.theme', $config['plugins']))
148                $config['plugins'][] = 'jquery.ui.theme';
149
150        // les CSS correspondantes aux plugins
151        $Tjquery_css = array(
152                                                'jquery.ui.accordion',
153                                                'jquery.ui.autocomplete',
154                                                'jquery.ui.button',
155                                                'jquery.ui.core',
156                                                'jquery.ui.datepicker',
157                                                'jquery.ui.dialog',
158                                                'jquery.ui.progressbar',
159                                                'jquery.ui.resizable',
160                                                'jquery.ui.selectable',
161                                                'jquery.ui.slider',
162                                                'jquery.ui.tabs',
163                                                'jquery.ui.theme'
164                                                );
165
166        // appeler les CSS necessaires
167        foreach ($config['plugins'] as $plug) {
168                if (in_array($plug, $Tjquery_css)) {
169                        $flux .= "<link rel='stylesheet' type='text/css' media='all' href='".find_in_path(_DIR_JQUERYUI_CSS.$theme.$plug.'.css')."' />\n";
170                }
171        }
172
173        return $flux;
174}
175
176?>
Note: See TracBrowser for help on using the repository browser.