| Current Path : /home/quelfutuu/www/tmp/couteau-suisse/ |
| Current File : /home/quelfutuu/www/tmp/couteau-suisse/header_prive.js |
var cs_prive=window.location.pathname.match(/\/ecrire\/$/)!=null;
jQuery.fn.cs_todo=function(){return this.not('.cs_done').addClass('cs_done');};
var sommaire_sel = 'div.cs_sommaire_titre_avec_fond, div.cs_sommaire_titre_sans_fond';
// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions
// et tagger avec cs_done pour eviter de binder plrs fois le meme bloc
function cs_sommaire_init() {
jQuery(sommaire_sel, this)
.cs_todo()
.click( function(){
jQuery(this).toggleClass('cs_sommaire_replie')
.next().toggleClass('cs_sommaire_invisible')
// annulation du clic
return false;
});
}
// Sauve l'etat du 1er sommaire de la page dans un cookie si on quitte la page, et le remet quand on revient
// pour SPIP < 2.0, il faut le plugin jquery.cookie.js
function cs_sommaire_cookie() {
if(typeof jQuery.cookie!='function') return;
var replie = jQuery.cookie('cs_sommaire');
jQuery.cookie('cs_sommaire', null);
if (Number(replie))
jQuery(sommaire_sel).eq(0).addClass('cs_sommaire_replie')
.next().toggleClass('cs_sommaire_invisible');
jQuery(window).bind('unload', function() {
jQuery.cookie('cs_sommaire',
Number(jQuery(sommaire_sel).eq(0).is('.cs_sommaire_replie'))
);
});
}
var gloss_el = null;
var gloss_dt = null;
var gloss_dd = null;
var gloss_dl = null;
// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions
// et tagger avec cs_done pour eviter de binder plrs fois le meme bloc
function glossaire_init() {
if(jQuery('span.gl_js', this).length) {
if(!jQuery('#glossOverDiv').length) {
jQuery('body').append('<div id="glossOverDiv" style="position:absolute; display:none; visibility: hidden;"><span class="gl_dl"><span class="gl_dt">TITRE</span><span class="gl_dd">Definition</span></span></div>');
gloss_el = document.getElementById('glossOverDiv');
gloss_dl = gloss_el.firstChild;
gloss_dt = gloss_dl.firstChild;
gloss_dd = gloss_dl.lastChild;
}
jQuery('span.gl_mot', this).cs_todo().hover(
function(e) {
$this = jQuery(this);
// cas du surligneur (SPIP 2)
if(this.firstChild.className=="spip_surligne") {
this.className = "gl_mot spip_surligne";
this.innerHTML = this.firstChild.innerHTML;
}
gloss_dt.innerHTML = $this.parent().children('.gl_js')[0].title; // titre
gloss_dd.innerHTML = $this.parent().children('.gl_jst')[0].title; // definition
reg = $this.css('font-size').match(/^\d\d?(?:\.\d+)?px/);
if(reg) gloss_el.style.fontSize = reg[0];
jQuery(gloss_el)
.css('top', e.pageY.toString()+"px")
.css('left', e.pageX.toString()+"px")
.css('font-family', jQuery(this).css('font-family'));
gloss_el.style.display = 'block';
gloss_el.style.visibility = 'visible';
if(typeof jQuery.fn.offset=="function") { // plugin jquery.dimensions disponible a partir de SPIP 2
if(1) {///////////////////////// optimisation du placement, encore en test...
var $glossOverDiv = jQuery('#glossOverDiv');
var $gloss_dl = jQuery(gloss_dl);
positionBy = 'auto'; // Type de positionnement : 'dessus', 'dessous', 'auto', 'mouse' (a tester...)
ombre = 0; // Taille d'une ombre, en pixels (non implemente)
decalX = 2; // decalage entre le glossaire et le lien appelant
width = 180; // largeur totale de #glossOverDiv : definie dans glossaire.css
height = 'auto'; // hauteur totale de #glossOverDiv : 'auto' ou nombre de pixels
// initiation verticale
var glossHeight, wHeight;
var linkHeight = this.offsetHeight;
var defHeight = isNaN(parseInt(height, 10)) ? 'auto' : (/\D/g).test(height) ? height : height + 'px';
var sTop, linkTop, posY, mouseY, baseLine;
sTop = jQuery(document).scrollTop();
// initiation horizontale
var glossWidth = width + ombre;
var linkWidth = this.offsetWidth;
var linkLeft, posX, mouseX, winWidth;
winWidth = jQuery(window).width();
// c'est parti !
linkTop = posY = $this.offset().top;
linkLeft = $this.offset().left;
mouseX = e.pageX;
mouseY = e.pageY;
// securite pour l'instant
$glossOverDiv.css({margin:'0px'}); $gloss_dl.css({margin:'0px'});
// calcul de la position horizontale : glossaire au centre du lien
posX = Math.max(linkLeft - (glossWidth-linkWidth)/2,0);
if (positionBy == 'dessous' || positionBy == 'dessus') { // glossaire fixe
$glossOverDiv.css({left: posX + 'px'});
} else {
// au cas ou, glossaire a droite ou a gauche du lien ?
posX2 = (linkWidth > linkLeft && linkLeft > glossWidth) || (linkLeft + linkWidth + glossWidth + decalX > winWidth)
? linkLeft - glossWidth - decalX
: linkWidth + linkLeft + decalX;
// suivre la souris ?
if (positionBy == 'mouse' || linkWidth + glossWidth > winWidth) {
posX = Math.max(mouseX - (glossWidth-linkWidth)/2,0); // glossaire au centre de la souris
/*if (mouseX + 20 + glossWidth > winWidth)
posX = (mouseX - glossWidth) >= 0 ? mouseX - glossWidth : mouseX - (glossWidth/2);
else posX = mouseX;*/
}
var pY = e.pageY;
$glossOverDiv.css({left: (posX > 0 && positionBy != 'dessus') ? posX : (mouseX + (glossWidth/2) > winWidth) ? winWidth/2 - glossWidth/2 : Math.max(mouseX - (glossWidth/2),0)});
}
// calcul de la position verticale
wHeight = jQuery(window).height();
$glossOverDiv.css({overflow: defHeight == 'auto' ? 'visible' : 'auto', height: defHeight});
glossHeight = defHeight == 'auto' ? Math.max($gloss_dl.outerHeight(),$gloss_dl.height()) : parseInt(defHeight,10);
glossHeight += ombre;
tipY = posY;
baseLine = sTop + wHeight;
if (positionBy == 'dessous') tipY = posY + linkHeight + 2; // glossaire fixe sous le lien
else if (positionBy == 'dessus') tipY = posY - glossHeight - 2; // glossaire fixe au-dessus du lien
else if ( posX < mouseX && Math.max(posX, 0) + glossWidth > mouseX ) { // glossaire cache le lien
if (posY + glossHeight > baseLine && mouseY - sTop > glossHeight) {
tipY = posY - glossHeight - 2;
} else {
tipY = posY + linkHeight + 2;
}
} else if ( posY + glossHeight > baseLine ) {
tipY = (glossHeight >= wHeight) ? sTop : baseLine - glossHeight;
} else if ($this.css('display') == 'block' || positionBy == 'mouse') {
tipY = pY;
} else {
tipY = posY /*- ombre*/;
}
$glossOverDiv.css({top: tipY + 'px'});
}////////////////////////////////////////
} // typeof jQuery.fn.offset=="function"
gloss_el.style.visibility = 'visible';
},
function(e) {
gloss_el.style.display = 'none';
gloss_el.style.visibility = 'hidden';
}
);
// accessibilite au clavier
if(typeof jQuery.fn.offset=="function") { // plugin jquery.dimensions disponible a partir de SPIP 2
jQuery('a.cs_glossaire').focus(
function() {
legl_mot = this.firstChild;
gloss_dt.innerHTML = jQuery(this).children('.gl_js')[0].title; // titre
gloss_dd.innerHTML = jQuery(this).children('.gl_jst')[0].title; // definition
reg = jQuery(this.firstChild).css('font-size').match(/^\d\d?(?:\.\d+)?px/);
if(reg) gloss_el.style.fontSize = reg[0];
var result = jQuery(this).offset({ scroll: false });
jQuery(gloss_el)
.css('top',result.top+"px")
.css('left', result.left+"px")
.css('font-family', jQuery(this.firstChild).css('font-family'));
gloss_el.style.display = 'block';
gloss_el.style.visibility = 'visible';
}
);
jQuery('a.cs_glossaire').blur(
function() {
gloss_el.style.display = 'none';
gloss_el.style.visibility = 'hidden';
}
);
} // typeof jQuery.fn.offset=="function"
}
}
// variables modifiables afin d'initialiser l'ouverture d'un bloc (simple ou numerote)
if(typeof(bloc_actif) == 'undefined')
var bloc_actif = '';
if(typeof(bloc_actif_num) == 'undefined')
var bloc_actif_num = '';
// fonction surchargeable : gestion du slide jQuery
jQuery.fn.blocs_toggle_slide_dist = function( selector ) {
this.toggleClass('blocs_slide');
if(typeof jQuery.fn.blocs_toggle_slide=='function')
return this.blocs_toggle_slide();
return this.is(".blocs_slide") ? this.slideUp(blocs_slide) : this.slideDown(blocs_slide);
};
jQuery.fn.blocs_set_title = function( selector ) {
var title = this.parent().find('.blocs_title:last').text();
if(!title) title = blocs_title_def;
title = title.split(blocs_title_sep);
this.children('a').attr('title', title[jQuery(this).is('.blocs_replie')?0:1]);
return this;
};
// fonction de de/re-pliement
jQuery.fn.blocs_toggle = function() {
if(!this.length) return this;
if(this.length > 1) {
this.each(function() { $(this).eq(0).blocs_toggle(); });
return this;
}
// applique-t-on la fonction sur cs_blocs ou sur blocs_titre ?
var cible = this.is('.cs_blocs') ? this.children('.blocs_titre').eq(0) : this;
// on replie/deplie la cible...
cible.toggleClass('blocs_replie').blocs_set_title();
var dest = this[0].id.match('^cs_bloc_id_') ? jQuery('div.'+this[0].id) : cible.next();
if(blocs_slide === 'aucun') {
dest.toggleClass('blocs_invisible');
// est-on sur un resume ?
if (dest.is('div.blocs_resume')) dest.next().toggleClass('blocs_invisible');
} else {
dest.blocs_toggle_slide_dist();
// est-on sur un resume ?
if (dest.is('div.blocs_resume')) dest.next().blocs_toggle_slide_dist();
}
// est-on sur un bloc ajax ?
var lien = cible.children();
var url = lien.attr("href");
if(url != 'javascript:;' && !url.endsWith('#_foo')) {
// une fois le bloc ajax en place, plus besoin de le recharger ensuite
lien.attr("href", '#_foo');// 'javascript:;');
// ici, on charge !
cible.parent().children(".blocs_destination")
//.animeajax()
.load(url);
}
return this;
};
// replie tout sauf le bloc appelant et sa lignee parentale
jQuery.fn.blocs_replie_tout = function() {
if(blocs_replier_tout) {
// applique-t-on la fonction sur cs_blocs ou sur blocs_titre ?
var cible = this.is('.cs_blocs')? this : this.parents('div.cs_blocs');
// lignee du bloc
var lignee = cible.children('.blocs_titre');
jQuery('.blocs_titre').not('.blocs_replie').not(lignee).blocs_toggle();
}
return this;
}
// une variable globale stockant le(s) bloc(s) a deplier si un clic ajax a eu lieu
var blocs_clic_ajax = null;
// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions
// et tagger avec cs_done pour eviter de binder plrs fois le meme bloc
function blocs_init() {
// clic sur un titre de bloc
jQuery('.blocs_titre', this).cs_todo()
.click( function(){
jQuery(this).blocs_replie_tout().blocs_toggle();
// annulation du clic
return false;
})
.each( function(){
jQuery(this).blocs_set_title();
});
// pour un lien 'replier_bloc' present dans le bloc
jQuery('.blocs_destination a.replier_bloc', this).cs_todo()
.click( function(){
var s = jQuery(this).parents('.cs_blocs:first');
// scroll vers le debut du bloc, si le plugin 'SrollTo' est present
if(typeof jQuery.fn.scrollTo == "function")
jQuery('body').scrollTo(s, 500,
{ margin:true, /*axis:'y',*/ onAfter:function(){ s.blocs_replie_tout().blocs_toggle(); }});
else
s.blocs_replie_tout().blocs_toggle();
// annulation du clic
return false;
});
// activation de blocs numerotes grace a l'url
var blocs = blocs_get_blocs(window.location, true);
if(blocs && (this == document))
blocs_clic_blocs(blocs, true);
// activation de blocs simples (numerotes sur la base zero) grace a l'url
blocs = blocs_get_blocs(window.location);
if(blocs && (this == document))
blocs_clic_blocs(blocs);
// clic vers une note dans un bloc
jQuery('.spip_note['+cs_sel_jQuery+'name^=nb], .spip_note['+cs_sel_jQuery+'id^=nb]').each(function(i) {
jQuery(this).click(function(e){
var href = this.href.substring(this.href.lastIndexOf("#"));
href = jQuery(href).parents('.cs_blocs').eq(0).children('.blocs_titre').eq(0);
// on neutralise une eventuelle animation
old_blocs_slide = blocs_slide;
if(blocs_slide != 'aucun')
blocs_slide = -1;
if(href.is('.blocs_replie'))
href.click();
blocs_slide = old_blocs_slide;
return true;
});
});
/*
// LA SUITE DE CE CODE NE FONCTIONNE POUR L'INSTANT QUE SUR LE PREMIER CLIC, JE NE SAIS PAS ENCORE PKOI...
// stockage du bloc (numerote !) a reouvrir dans le cas d'un clic ajax sur une
// pagination SPIP contenue a l'interieur
jQuery(".ajaxbloc .pagination a.noajax", this).cs_todo()
.click( function(){
var parent = jQuery(this).parents('.cs_blocs');
if(!parent.length) return true;
var numero = /cs_bloc\d+/.exec(parent[0].className);
if(numero!==null) blocs_clic_ajax = numero[0];
return true;
});
// rouvre le nouveau bloc ajax si un clic a eu lieu a l'interieur de l'ancien
if(blocs_clic_ajax!==null) {
jQuery('.'+blocs_clic_ajax, this).blocs_toggle();
blocs_clic_ajax = null
}
*/
}
// un JS actif replie les blocs invisibles
var valStyle = document.createElement('style');
var valHead = document.head || document.getElementsByTagName('head')[0];
valHead.appendChild(valStyle);
valStyle.type = 'text/css';
valStyle.appendChild(document.createTextNode('div.blocs_invisible { display:none; }'));
// Sauve l'etat des blocs numerotes ET deplies dans un cookie si on quitte la page
function cs_blocs_cookie() {
if(typeof jQuery.cookie!='function') return;
var blocs_cookie_name = 'blocs' + window.location.pathname + window.location.search
blocs_cookie_name = blocs_cookie_name.replace(/[ ;,=]/,'_');
var deplies = jQuery.cookie(blocs_cookie_name);
//var pourInfo = blocs_deplies();
if(deplies) {
// on replie tous les blocs numerotes et on deplie les blocs du cookie
jQuery(".cs_blocs[id^='deplier_num'] .blocs_titre").not('.blocs_replie').blocs_toggle();
jQuery(deplies).blocs_toggle();
}
jQuery(window).bind('unload', function() {
jQuery.cookie(blocs_cookie_name, blocs_deplies());
});
}
// renvoie la liste des selecteurs de blocs ouverts
function blocs_deplies() {
var deplies = '';
jQuery('.cs_blocs').each(function() {
var numero = /cs_bloc\d+/.exec(this.className);
if(numero == null) return;
replie = jQuery(this).children('.blocs_titre').eq(0).is('.blocs_replie');
if(!replie) deplies += (deplies.length?', ':'') + 'div.' + numero[0];
});
return deplies.length?deplies:null;
}
// clic sur les blocs (Niemes blocs en base zero pour les blocs simples)
function blocs_clic_blocs(liste, numerote) {
var blocs = liste.split(',');
for (var i=0; i<blocs.length; i++)
(numerote)
? jQuery('div.cs_bloc' + blocs[i] + ' .blocs_titre').eq(0).click()
: jQuery('div.cs_blocs .blocs_titre').eq(blocs[i]).click();
}
// examen des parametes url (blocs simples ou numerotes)
function blocs_get_blocs(url, numerote) {
tab = numerote
? url.search.match(/[?&]deplier_num=([0-9,]*)/) || url.hash.match(/#deplier_num([0-9,]*)/)
: url.search.match(/[?&]deplier=([0-9,]*)/) || url.hash.match(/#deplier([0-9,]*)/);
return tab == null ? (numerote ? bloc_actif_num : bloc_actif) : tab[1];
}
// une fonction et une variable pour reperer une pagination
function blocs_get_pagination(url) {
tab = url.match(/#pagination([0-9]+)/);
return tab == null ? bloc_actif : tab[1];
}
// Si une ancre est contenue dans un bloc, alors on le déplie !
// Cette fonction est automatiquement appelée si l'outil est configuré pour surveiller l'ancre de l'URL.
function blocs_deplier_pour_ancre() {
var ancre = window.location.hash;
if(ancre) {
ancre = jQuery(ancre);
var bloc = ancre.parents('.cs_blocs').find('.blocs_titre.blocs_replie');
if(bloc.length && (ancre.length == 1)) {
bloc.blocs_toggle();
jQuery('html,body').animate({scrollTop: ancre.offset().top}, 'slow');
}
}
};
var blocs_pagination = blocs_get_pagination(window.location.hash);
/*
// Ouvrir un bloc qui contiendrait un formulaire renvoyant une erreur
jQuery(document).ready(function() {
jQuery('.cs_blocs').has('.erreur_message').find('.blocs_titre.blocs_replie').blocs_toggle();
});
*/
/*
// Si un bloc contient une pagination inseree dans un bloc,
// code JS a inserer dans le header de votre squelette APRES les appels du Couteau Suisse :
jQuery(document).ready(function() {
if(blocs_pagination!==false) {
jQuery('div.cs_bloc' + blocs_pagination + ' .blocs_titre').eq(0).click();
window.location.hash = '#pagination' + blocs_pagination;
}
});
*/
/*
// Pour un bloc depliable du genre :
// <BOUCLE_art(ARTICLES)>
// #BLOC_TITRE
// #TITRE
// #BLOC_RESUME
// #INTRODUCTION
// #BLOC_DEBUT
// #TEXTE
// #BLOC_FIN
// </BOUCLE_art>
// le clic sur un point de suite cliquable de la balise #INTRODUCTION produit l'ouverture du bloc.
// code JS a inserer dans le header de votre squelette APRES les appels du Couteau Suisse :
jQuery(document).ready(function(){
jQuery('.blocs_resume>a.pts_suite')
.click( function(){
jQuery(this).parents('.cs_blocs:first').children('.blocs_titre')
.blocs_replie_tout().blocs_toggle();
// annulation du clic
return false;
});
});
*/
/* Par defaut : blocs_slide = 'aucun' */
var blocs_replier_tout = 0;
var blocs_millisec = 100;
var blocs_slide = 'aucun';
var blocs_title_sep = /\|\|/g;
var blocs_title_def = 'Déplier||Replier';
var cs_init = function() {
cs_sommaire_init.apply(this);
glossaire_init.apply(this);
blocs_init.apply(this);
}
if(typeof onAjaxLoad=='function') onAjaxLoad(cs_init);
if(window.jQuery) {
var cs_sel_jQuery='';
var cs_CookiePlugin="../prive/javascript/js.cookie.js";
jQuery(document).ready(function(){
if(jQuery("div.cs_sommaire").length) {
// s'il y a un sommaire, on cache la navigation haute sur les pages
jQuery("div.decoupe_haut").css("display", "none");
// utilisation des cookies pour conserver l'etat du sommaire si on quitte la page
if(cs_CookiePlugin) jQuery.getScript(cs_CookiePlugin, cs_sommaire_cookie);
}
/* optimisation : 'IF(0) \{if(jQuery("div.cs_blocs").length)
jQuery.getScript(cs_CookiePlugin, cs_blocs_cookie); \}' */
/* optimisation : 'IF(0) \{blocs_deplier_pour_ancre(); \}' */
cs_init.apply(document);
});
}