[SPIP] +spip v3.0.17
[lhc/web/clavette_www.git] / www / prive / javascript / presentation.js
diff --git a/www/prive/javascript/presentation.js b/www/prive/javascript/presentation.js
new file mode 100644 (file)
index 0000000..1015f3a
--- /dev/null
@@ -0,0 +1,195 @@
+
+// Un petit plugin jQuery pour ajouter une classe au survol d'un element
+$.fn.hoverClass = function(c) {
+       return this.each(function(){
+               $(this).hover(
+                       function() { $(this).addClass(c); },
+                       function() { $(this).removeClass(c); }
+               );
+       });
+};
+
+
+var accepter_change_statut = false;
+/**
+ * Utilisee dans inc/puce_statut pour les puces au survol
+ * @param int id
+ * @param strong type
+ * @param int decal
+ * @param string puce
+ * @param string script
+ */
+function selec_statut(id, type, decal, puce, script) {
+
+       node = $('.imgstatut'+type+id);
+
+       if (!accepter_change_statut)
+               accepter_change_statut = confirm(confirm_changer_statut);
+
+       if (!accepter_change_statut || !node.length) return;
+
+       $('.statutdecal'+type+id)
+       .css('margin-left', decal+'px')
+       .removeClass('on');
+
+       $.get(script, function(c) {
+               if (!c)
+                       node.attr('src',puce);
+               else {
+                       r = window.open();
+                       r.document.write(c);
+                       r.document.close();
+               }
+       });
+}
+
+/**
+ * Utilisee dans inc/puce_statut pour les puces au survol
+ * @param objet node
+ * @param string nom
+ * @param string type
+ * @param int id
+ * @param string action
+ */
+function prepare_selec_statut(node, nom, type, id, action)
+{
+       $(node)
+       .hoverClass('on')
+       .addClass('on')
+       .load(action + '&type='+type+'&id='+id);
+}
+
+
+// deplier un ou plusieurs blocs
+jQuery.fn.showother = function(cible) {
+       var me = this;
+       if (me.is('.replie')) {
+               me.addClass('deplie').removeClass('replie');
+               jQuery(cible)
+               .slideDown('fast',
+                       function(){
+                               jQuery(me)
+                               .addClass('blocdeplie')
+                               .removeClass('blocreplie')
+                               .removeClass('togglewait');
+                       }
+               ).trigger('deplie');
+       }
+       return this;
+}
+
+// replier un ou plusieurs blocs
+jQuery.fn.hideother = function(cible) {
+       var me = this;
+       if (!me.is('.replie')){
+               me.addClass('replie').removeClass('deplie');
+               jQuery(cible)
+               .slideUp('fast',
+                       function(){
+                               jQuery(me)
+                               .addClass('blocreplie')
+                               .removeClass('blocdeplie')
+                               .removeClass('togglewait');
+                       }
+               ).trigger('replie');
+}
+       return this;
+}
+
+// pour le bouton qui deplie/replie un ou plusieurs blocs
+jQuery.fn.toggleother = function(cible) {
+       if (this.is('.deplie'))
+               return this.hideother(cible);
+       else
+               return this.showother(cible);
+}
+
+// deplier/replier en hover
+// on le fait subtilement : on attend 400ms avant de deplier, periode
+// durant laquelle, si la souris  sort du controle, on annule le depliement
+// le repliement ne fonctionne qu'au clic
+// Cette fonction est appelee a chaque hover d'un bloc depliable
+// la premiere fois, elle initialise le fonctionnement du bloc ; ensuite
+// elle ne fait plus rien
+jQuery.fn.depliant = function(cible) {
+       // premier passage
+       if (!this.is('.depliant')) {
+               var time = 400;
+
+               var me = this;
+               this
+               .addClass('depliant');
+
+               // effectuer le premier hover
+               if (!me.is('.deplie')) {
+                       me.addClass('hover')
+                       .addClass('togglewait');
+                       var t = setTimeout(function(){
+                               me.toggleother(cible);
+                               t = null;
+                       }, time);
+               }
+
+               me
+               // programmer les futurs hover
+               .hover(function(e){
+                       me
+                       .addClass('hover');
+                       if (!me.is('.deplie')) {
+                               me.addClass('togglewait');
+                               if (t) { clearTimeout(t); t = null; }
+                               t = setTimeout(function(){
+                                       me.toggleother(cible);
+                                       t = null;
+                                       }, time);
+                       }
+               }
+               , function(e){
+                       if (t) { clearTimeout(t); t = null; }
+                       me
+                       .removeClass('hover');
+               })
+
+               // gerer le triangle clicable
+               /*.find("a.titremancre")
+                       .click(function(){
+                               if (me.is('.togglewait') || t) return false;
+                               me
+                               .toggleother(cible);
+                               return false;
+                       })*/
+               .end();
+
+       }
+       return this;
+}
+jQuery.fn.depliant_clicancre = function(cible) {
+               var me = this.parent();
+               // gerer le triangle clicable
+               if (me.is('.togglewait')) return false;
+               me.toggleother(cible);
+               return false;
+}
+
+/**
+ * Recharger les blocs d'une page exec
+ * et changer la class du body si necessaire
+ * Par defaut les blocs recharges sont #navigation,#extra
+ * mais il suffit de passer des valeurs differentes en second argument
+ * 
+ * @param exec
+ * @param blocs
+ */
+function reloadExecPage(exec, blocs){
+       if (window.jQuery) {
+               jQuery(function(){
+                       if (!blocs)
+                               blocs="#navigation,#extra";
+                       jQuery(blocs).find('>div').ajaxReload({args:{exec:exec}});
+                       if (exec.match(/_edit$/))
+                               jQuery('body').addClass('edition');
+                       else
+                               jQuery('body').removeClass('edition');
+               })
+       }
+}
\ No newline at end of file