X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fblocs.js;fp=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fblocs.js;h=36e52376c74ed680cd75f812be94cd061ee192c5;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hp=0000000000000000000000000000000000000000;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c;p=velocampus%2Fweb%2Fwww.git
diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/outils/blocs.js b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/blocs.js
new file mode 100644
index 0000000..36e5237
--- /dev/null
+++ b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/blocs.js
@@ -0,0 +1,192 @@
+// 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;
+ // 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:;') {
+ // une fois le bloc ajax en place, plus besoin de le recharger ensuite
+ lien.attr("href", '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(){
+ 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;
+ });
+ // 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
+document.write('');
+
+// Sauve l'etat des blocs numerotes 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);
+ jQuery.cookie(blocs_cookie_name, null);
+ if(deplies)
+ jQuery(deplies).blocs_replie_tout().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;
+}
+
+// une fonction et une variable pour reperer une pagination
+function blocs_get_pagination(url) {
+ tab=url.match(/#pagination([0-9]+)/);
+ if (tab==null) return false;
+ return tab[1];
+}
+
+var blocs_pagination = blocs_get_pagination(window.location.hash);
+
+/*
+// 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 dépliable du genre :
+//
+// #BLOC_TITRE
+// #TITRE
+// #BLOC_RESUME
+// #INTRODUCTION
+// #BLOC_DEBUT
+// #TEXTE
+// #BLOC_FIN
+//
+// 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;
+ });
+});
+*/
\ No newline at end of file