spip_nursit/prive/javascript/presentation.js

195 lines
4.2 KiB
JavaScript
Raw Normal View History

2023-06-01 15:30:12 +00:00
// 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');
})
}
}