[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / outils / blocs.js
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 (file)
index 0000000..36e5237
--- /dev/null
@@ -0,0 +1,192 @@
+// fonction surchargeable : gestion du slide jQuery\r
+jQuery.fn.blocs_toggle_slide_dist = function( selector ) {\r
+       this.toggleClass('blocs_slide');\r
+       if(typeof jQuery.fn.blocs_toggle_slide=='function')\r
+               return this.blocs_toggle_slide();\r
+       return this.is(".blocs_slide")?this.slideUp(blocs_slide):this.slideDown(blocs_slide);\r
+};\r
+\r
+jQuery.fn.blocs_set_title = function( selector ) {\r
+       var title = this.parent().find('.blocs_title:last').text();\r
+       if(!title) title = blocs_title_def;\r
+       title = title.split(blocs_title_sep);\r
+       this.children('a').attr('title', title[jQuery(this).is('.blocs_replie')?0:1]);\r
+       return this;\r
+};\r
+\r
+// fonction de de/re-pliement\r
+jQuery.fn.blocs_toggle = function() {\r
+       if (!this.length) return this;\r
+       // applique-t-on la fonction sur cs_blocs ou sur blocs_titre ?\r
+       var cible = this.is('.cs_blocs')? this.children('.blocs_titre').eq(0) : this;\r
+       // on replie/deplie la cible...\r
+       cible.toggleClass('blocs_replie').blocs_set_title();\r
+       var dest = this[0].id.match('^cs_bloc_id_')?jQuery('div.'+this[0].id):cible.next();\r
+       if(blocs_slide==='aucun') {\r
+               dest.toggleClass('blocs_invisible');\r
+               // est-on sur un resume ?\r
+               if (dest.is('div.blocs_resume')) dest.next().toggleClass('blocs_invisible');\r
+       } else {\r
+               dest.blocs_toggle_slide_dist();\r
+               // est-on sur un resume ?\r
+               if (dest.is('div.blocs_resume')) dest.next().blocs_toggle_slide_dist();\r
+       }\r
+       // est-on sur un bloc ajax ?\r
+       var lien = cible.children();\r
+       var url = lien.attr("href");\r
+       if(url != 'javascript:;') {\r
+               // une fois le bloc ajax en place, plus besoin de le recharger ensuite\r
+               lien.attr("href", 'javascript:;');\r
+               // ici, on charge !\r
+               cible.parent().children(".blocs_destination")\r
+               //.animeajax()\r
+               .load(url);\r
+       }\r
+       return this;\r
+};\r
+\r
+// replie tout sauf le bloc appelant et sa lignee parentale\r
+jQuery.fn.blocs_replie_tout = function() {\r
+       if(blocs_replier_tout) {\r
+               // applique-t-on la fonction sur cs_blocs ou sur blocs_titre ?\r
+               var cible = this.is('.cs_blocs')? this : this.parents('div.cs_blocs');\r
+               // lignee du bloc\r
+               var lignee = cible.children('.blocs_titre');\r
+               jQuery('.blocs_titre').not('.blocs_replie').not(lignee).blocs_toggle();\r
+       }\r
+       return this;\r
+}\r
+\r
+// une variable globale stockant le(s) bloc(s) a deplier si un clic ajax a eu lieu\r
+var blocs_clic_ajax = null;\r
+\r
+// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions \r
+// et tagger avec cs_done pour eviter de binder plrs fois le meme bloc\r
+function blocs_init() {\r
+       // clic sur un titre de bloc\r
+       jQuery('.blocs_titre', this).cs_todo()\r
+         .click( function(){\r
+               jQuery(this).blocs_replie_tout().blocs_toggle();\r
+               // annulation du clic\r
+               return false;\r
+          })\r
+         .each( function(){\r
+               jQuery(this).blocs_set_title();\r
+         });\r
+       // pour un lien 'replier_bloc' present dans le bloc\r
+       jQuery('.blocs_destination a.replier_bloc', this).cs_todo()\r
+        .click( function(){\r
+               s = jQuery(this).parents('.cs_blocs:first');\r
+               // scroll vers le debut du bloc, si le plugin 'SrollTo' est present\r
+               if(typeof jQuery.fn.scrollTo=="function") jQuery('body').scrollTo(s, 500, \r
+                       {margin:true, /*axis:'y',*/ onAfter:function(){s.blocs_replie_tout().blocs_toggle();}});\r
+               else s.blocs_replie_tout().blocs_toggle();\r
+               // annulation du clic\r
+               return false;\r
+          });\r
+       // clic vers une note dans un bloc\r
+       jQuery('.spip_note['+cs_sel_jQuery+'name^=nb], .spip_note['+cs_sel_jQuery+'id^=nb]').each(function(i) {\r
+               jQuery(this).click(function(e){\r
+                       var href = this.href.substring(this.href.lastIndexOf("#"));\r
+                       href = jQuery(href).parents('.cs_blocs').eq(0).children('.blocs_titre').eq(0);\r
+                       // on neutralise une eventuelle animation\r
+                       old_blocs_slide = blocs_slide;\r
+                       if(blocs_slide!='aucun') blocs_slide = -1;\r
+                       if(href.is('.blocs_replie')) href.click();\r
+                       blocs_slide = old_blocs_slide;\r
+                       return true;\r
+               });\r
+       });\r
+\r
+/*\r
+// LA SUITE DE CE CODE NE FONCTIONNE POUR L'INSTANT QUE SUR LE PREMIER CLIC, JE NE SAIS PAS ENCORE PKOI...\r
+       // stockage du bloc (numerote !) a reouvrir dans le cas d'un clic ajax sur une \r
+       // pagination SPIP contenue a l'interieur\r
+       jQuery(".ajaxbloc .pagination a.noajax", this).cs_todo()\r
+         .click( function(){\r
+               var parent = jQuery(this).parents('.cs_blocs');\r
+               if(!parent.length) return true;\r
+               var numero = /cs_bloc\d+/.exec(parent[0].className);\r
+               if(numero!==null) blocs_clic_ajax = numero[0];\r
+               return true;\r
+          });\r
+       // rouvre le nouveau bloc ajax si un clic a eu lieu a l'interieur de l'ancien\r
+       if(blocs_clic_ajax!==null) {\r
+               jQuery('.'+blocs_clic_ajax, this).blocs_toggle();\r
+               blocs_clic_ajax = null\r
+       }\r
+*/\r
+}\r
+\r
+// un JS actif replie les blocs invisibles\r
+document.write('<style type="text/css">div.blocs_invisible{display:none;}</style>');\r
+\r
+// Sauve l'etat des blocs numerotes dans un cookie si on quitte la page\r
+function cs_blocs_cookie() {\r
+       if(typeof jQuery.cookie!='function') return;\r
+       var blocs_cookie_name = 'blocs' + window.location.pathname + window.location.search\r
+       blocs_cookie_name = blocs_cookie_name.replace(/[ ;,=]/,'_');\r
+       var deplies = jQuery.cookie(blocs_cookie_name);\r
+       jQuery.cookie(blocs_cookie_name, null);\r
+       if(deplies)\r
+               jQuery(deplies).blocs_replie_tout().blocs_toggle();\r
+       jQuery(window).bind('unload', function() {\r
+               jQuery.cookie(blocs_cookie_name, blocs_deplies());\r
+       });\r
+}\r
+\r
+// renvoie la liste des selecteurs de blocs ouverts\r
+function blocs_deplies() {\r
+       var deplies = '';\r
+       jQuery('.cs_blocs').each(function() {\r
+               var numero = /cs_bloc\d+/.exec(this.className);\r
+               if(numero==null) return;\r
+               replie = jQuery(this).children('.blocs_titre').eq(0).is('.blocs_replie');\r
+               if(!replie) deplies += (deplies.length?', ':'') + 'div.' + numero[0];\r
+       });\r
+       return deplies.length?deplies:null;\r
+}\r
+\r
+// une fonction et une variable pour reperer une pagination\r
+function blocs_get_pagination(url) {\r
+       tab=url.match(/#pagination([0-9]+)/);\r
+       if (tab==null) return false;\r
+       return tab[1];\r
+}\r
+\r
+var blocs_pagination = blocs_get_pagination(window.location.hash);\r
+\r
+/*\r
+// Si un bloc contient une pagination inseree dans un bloc,\r
+// code JS a inserer dans le header de votre squelette APRES les appels du Couteau Suisse :\r
+jQuery(document).ready(function() {\r
+       if(blocs_pagination!==false) {\r
+               jQuery('div.cs_bloc' + blocs_pagination + ' .blocs_titre').eq(0).click();\r
+               window.location.hash = '#pagination' + blocs_pagination;\r
+       }\r
+});\r
+*/\r
+\r
+/*\r
+//     Pour un bloc dĂ©pliable du genre :\r
+//     <BOUCLE_art(ARTICLES)>\r
+//             #BLOC_TITRE\r
+//             #TITRE\r
+//             #BLOC_RESUME\r
+//             #INTRODUCTION\r
+//             #BLOC_DEBUT\r
+//             #TEXTE\r
+//             #BLOC_FIN\r
+//     </BOUCLE_art>\r
+//     le clic sur un point de suite cliquable de la balise #INTRODUCTION produit l'ouverture du bloc.\r
+//     code JS a inserer dans le header de votre squelette APRES les appels du Couteau Suisse :\r
+jQuery(document).ready(function(){\r
+       jQuery('.blocs_resume>a.pts_suite')\r
+         .click( function(){\r
+               jQuery(this).parents('.cs_blocs:first').children('.blocs_titre')\r
+                       .blocs_replie_tout().blocs_toggle();\r
+               // annulation du clic\r
+               return false;\r
+               });\r
+});\r
+*/
\ No newline at end of file