[SPIP] +spip v3.0.17
[lhc/web/clavette_www.git] / www / prive / javascript / presentation.js
1
2 // Un petit plugin jQuery pour ajouter une classe au survol d'un element
3 $.fn.hoverClass = function(c) {
4 return this.each(function(){
5 $(this).hover(
6 function() { $(this).addClass(c); },
7 function() { $(this).removeClass(c); }
8 );
9 });
10 };
11
12
13 var accepter_change_statut = false;
14 /**
15 * Utilisee dans inc/puce_statut pour les puces au survol
16 * @param int id
17 * @param strong type
18 * @param int decal
19 * @param string puce
20 * @param string script
21 */
22 function selec_statut(id, type, decal, puce, script) {
23
24 node = $('.imgstatut'+type+id);
25
26 if (!accepter_change_statut)
27 accepter_change_statut = confirm(confirm_changer_statut);
28
29 if (!accepter_change_statut || !node.length) return;
30
31 $('.statutdecal'+type+id)
32 .css('margin-left', decal+'px')
33 .removeClass('on');
34
35 $.get(script, function(c) {
36 if (!c)
37 node.attr('src',puce);
38 else {
39 r = window.open();
40 r.document.write(c);
41 r.document.close();
42 }
43 });
44 }
45
46 /**
47 * Utilisee dans inc/puce_statut pour les puces au survol
48 * @param objet node
49 * @param string nom
50 * @param string type
51 * @param int id
52 * @param string action
53 */
54 function prepare_selec_statut(node, nom, type, id, action)
55 {
56 $(node)
57 .hoverClass('on')
58 .addClass('on')
59 .load(action + '&type='+type+'&id='+id);
60 }
61
62
63 // deplier un ou plusieurs blocs
64 jQuery.fn.showother = function(cible) {
65 var me = this;
66 if (me.is('.replie')) {
67 me.addClass('deplie').removeClass('replie');
68 jQuery(cible)
69 .slideDown('fast',
70 function(){
71 jQuery(me)
72 .addClass('blocdeplie')
73 .removeClass('blocreplie')
74 .removeClass('togglewait');
75 }
76 ).trigger('deplie');
77 }
78 return this;
79 }
80
81 // replier un ou plusieurs blocs
82 jQuery.fn.hideother = function(cible) {
83 var me = this;
84 if (!me.is('.replie')){
85 me.addClass('replie').removeClass('deplie');
86 jQuery(cible)
87 .slideUp('fast',
88 function(){
89 jQuery(me)
90 .addClass('blocreplie')
91 .removeClass('blocdeplie')
92 .removeClass('togglewait');
93 }
94 ).trigger('replie');
95 }
96 return this;
97 }
98
99 // pour le bouton qui deplie/replie un ou plusieurs blocs
100 jQuery.fn.toggleother = function(cible) {
101 if (this.is('.deplie'))
102 return this.hideother(cible);
103 else
104 return this.showother(cible);
105 }
106
107 // deplier/replier en hover
108 // on le fait subtilement : on attend 400ms avant de deplier, periode
109 // durant laquelle, si la souris sort du controle, on annule le depliement
110 // le repliement ne fonctionne qu'au clic
111 // Cette fonction est appelee a chaque hover d'un bloc depliable
112 // la premiere fois, elle initialise le fonctionnement du bloc ; ensuite
113 // elle ne fait plus rien
114 jQuery.fn.depliant = function(cible) {
115 // premier passage
116 if (!this.is('.depliant')) {
117 var time = 400;
118
119 var me = this;
120 this
121 .addClass('depliant');
122
123 // effectuer le premier hover
124 if (!me.is('.deplie')) {
125 me.addClass('hover')
126 .addClass('togglewait');
127 var t = setTimeout(function(){
128 me.toggleother(cible);
129 t = null;
130 }, time);
131 }
132
133 me
134 // programmer les futurs hover
135 .hover(function(e){
136 me
137 .addClass('hover');
138 if (!me.is('.deplie')) {
139 me.addClass('togglewait');
140 if (t) { clearTimeout(t); t = null; }
141 t = setTimeout(function(){
142 me.toggleother(cible);
143 t = null;
144 }, time);
145 }
146 }
147 , function(e){
148 if (t) { clearTimeout(t); t = null; }
149 me
150 .removeClass('hover');
151 })
152
153 // gerer le triangle clicable
154 /*.find("a.titremancre")
155 .click(function(){
156 if (me.is('.togglewait') || t) return false;
157 me
158 .toggleother(cible);
159 return false;
160 })*/
161 .end();
162
163 }
164 return this;
165 }
166 jQuery.fn.depliant_clicancre = function(cible) {
167 var me = this.parent();
168 // gerer le triangle clicable
169 if (me.is('.togglewait')) return false;
170 me.toggleother(cible);
171 return false;
172 }
173
174 /**
175 * Recharger les blocs d'une page exec
176 * et changer la class du body si necessaire
177 * Par defaut les blocs recharges sont #navigation,#extra
178 * mais il suffit de passer des valeurs differentes en second argument
179 *
180 * @param exec
181 * @param blocs
182 */
183 function reloadExecPage(exec, blocs){
184 if (window.jQuery) {
185 jQuery(function(){
186 if (!blocs)
187 blocs="#navigation,#extra";
188 jQuery(blocs).find('>div').ajaxReload({args:{exec:exec}});
189 if (exec.match(/_edit$/))
190 jQuery('body').addClass('edition');
191 else
192 jQuery('body').removeClass('edition');
193 })
194 }
195 }