From 2899370671da003fc04a811f5985b53e364920a1 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Tue, 13 May 2008 11:14:23 +0000 Subject: [PATCH] script de depliage plus subtil --- dist/javascript/layer.js | 81 +++++++++++++++++++++++++++------------- ecrire/inc/layer.php | 2 +- 2 files changed, 56 insertions(+), 27 deletions(-) diff --git a/dist/javascript/layer.js b/dist/javascript/layer.js index 4800ab979c..39ab0b4591 100644 --- a/dist/javascript/layer.js +++ b/dist/javascript/layer.js @@ -46,19 +46,37 @@ function hide_obj(obj) { // deplier un ou plusieurs blocs jQuery.fn.showother = function(cible) { - if (this.is('.replie')) { - this.addClass('deplie').removeClass('replie'); - jQuery(cible)/*.show()*/.slideDown('fast').addClass('blocdeplie').removeClass('blocreplie'); + 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'); + } + ); } return this; } // replier un ou plusieurs blocs jQuery.fn.hideother = function(cible) { - if (!this.is('.replie')){ - this.addClass('replie').removeClass('deplie'); - jQuery(cible)/*.hide()*/.slideUp('fast').removeClass('blocdeplie').addClass('blocreplie'); - } + 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'); + } + ); +} return this; } @@ -71,9 +89,9 @@ jQuery.fn.toggleother = function(cible) { } // deplier/replier en hover -// on le fait subtilement : on attend 350ms avant de deplier, periode +// on le fait subtilement : on attend 400ms avant de deplier, periode // durant laquelle, si la souris sort du controle, on annule le depliement -// idem au repliement, mais avec une periode plus longue (1000s) +// idem au repliement, mais avec une periode plus longue (700ms) // 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 @@ -89,11 +107,10 @@ jQuery.fn.depliant = function(cible) { // effectuer le premier hover .addClass('hover') - .addClass('hoverwait'); + .addClass('togglewait'); var t = setTimeout(function(){ - me - .toggleother(cible) - .removeClass('hoverwait'); + me.toggleother(cible); + t = null; }, me.is('.deplie') ? timer : timed ); @@ -101,22 +118,34 @@ jQuery.fn.depliant = function(cible) { me // programmer les futurs hover .hover(function(e){ - me.addClass('hover') - .addClass('hoverwait'); - if (t) { clearTimeout(t); t = null; } - t = setTimeout(function(){ - me.toggleother(cible) - .removeClass('hoverwait'); - }, - me.is('.deplie') ? timer : timed - ); + me + .addClass('hover'); + if (!me.is('.deplie')) { + me.addClass('togglewait'); + if (t) { clearTimeout(t); t = null; } + t = setTimeout(function(){ + me.toggleother(cible); + t = null; + }, + me.is('.deplie') ? timer : timed + ); + } } , function(e){ if (t) { clearTimeout(t); t = null; } - jQuery(this) - .removeClass('hover') - .removeClass('hoverwait'); - }); + me + .removeClass('hover'); + }) + + // gerer le triangle clicable + .find("a.titremancre") + .click(function(){ + if (me.is('.togglewait') || t) return false; + me + .toggleother(cible); + }) + .end(); + } return this; } diff --git a/ecrire/inc/layer.php b/ecrire/inc/layer.php index 3ce6ca8003..99920e7e3b 100644 --- a/ecrire/inc/layer.php +++ b/ecrire/inc/layer.php @@ -86,7 +86,7 @@ function bouton_block_depliable($texte,$deplie,$ids=""){ .">" // une ancre pour rendre accessible au clavier le depliage du sous bloc // on ne la mets pas en interface "accessible", dans laquelle il n'y pas de sous bloc ... un comble ! - . ($GLOBALS['spip_display']==4?"":"<a href=\"#\" onclick=\"jQuery(this).parent().toggleother('$cible');return false;\" class='titremancre'></a>") + . ($GLOBALS['spip_display']==4?"":"<a class='titremancre'></a>") . "$texte</div>" . http_script( ($deplie==='incertain') ? "jQuery(document).ready(function(){if (jQuery('$cible').is(':visible')) $('#$bouton_id').addClass('deplie').removeClass('replie');});" -- GitLab