Changeset 73533 in spip-zone


Ignore:
Timestamp:
Jun 12, 2013, 9:59:45 AM (7 years ago)
Author:
kent1@…
Message:

Un log en moins et micro refactoring du fichier de fonctions

On revoit le js de la table des matières flottante qui devrait mieux fonctionner avec ancres douces et être plus stable (à tester)

Version 2.2.1

Location:
_plugins_/table_matieres/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/table_matieres/trunk/javascript/table_matieres.js

    r72826 r73533  
    1 jQuery.fn.repairLink2Anchor = function() {
     1(function($){
     2       
     3$.fn.repairLink2Anchor = function() {
    24        if ($("base").length) {// Le tag <base..> existe
    3                 var href = '',
    4                         anchor = '',
     5                var href = anchor = '',
    56                        re1 = /#([\w-]+)/, // anchor parts
    67                        re2 = /^#([\w-]+)/, // only anchor
     
    2021}
    2122
    22 jQuery.fn.hasAttr = function(name) { 
     23$.fn.hasAttr = function(name) { 
    2324        return this.attr(name) !== undefined;
    2425};
     
    3536var tdm_init = function(){
    3637        if($("div.encart").size() >= 1 && $("div.encart").hasAttr('rel')){
    37                 $("div.encart").html($("div.encart").attr("rel")).attr("rel","").repairLink2Anchor();
     38                $("div.encart").html($("div.encart").attr("rel")).repairLink2Anchor();
    3839                $("h3 a").each(function(){
    3940                        if($(this).hasAttr('name') && $(this).parents('h3').find('a.tdm').size()==0)
     
    4546var tdm_flottante_init = function(){
    4647        if(typeof(tdm_flottante) != 'undefined' && tdm_flottante && $("#tdm").size() == 1){
    47                 var titres_offset = [],
    48                         tdm = $("#tdm");
     48                var titres_offset = limite_bas = limite_tdm = false, tdm = $("#tdm");
    4949               
    50                 tdm.parents("div:not(.encart)").eq(0).find('h3').each(function(i, titre) {
    51                         titres_offset.push($(titre).offset().top.toFixed()-100);
    52                 });
    53                 jQuery(window).bind('scroll',function() {
    54                         var offset = tdm.parents("div:not(.encart)").eq(0).offset();
     50                var tdm_scroll = function(){
     51                        var offset = tdm.parents("div:not(.encart)").eq(0).offset(), tdm_size = tdm.height();
    5552                        if(offset){
    56                                 var limite_tdm = offset.top-20,
    57                                         limite_bas = limite_tdm+tdm.parents("div:not(.encart)").eq(0).height(),
     53                                var limite_tdm = offset.top,
     54                                        limite_bas = limite_tdm+tdm.parents("div:not(.encart)").eq(0).height()+100,
    5855                                        pos_bas = tdm.offset().top+tdm.height(),
    5956                                        top = $(window).scrollTop();
    6057                                if((top >= limite_tdm) && (pos_bas <= limite_bas) && (top < limite_bas)){
     58                                        if(tdm.is(':hidden')) tdm.show();
    6159                                        /**
    6260                                         * Initialisation si première fois
     
    6765                                                var tdm_width = tdm.width();
    6866                                                tdm.css({"position": "fixed", "top": 0, "width": tdm_width+"px","z-index":"999"});
    69                                                 tdm.find('h2').addClass('active');
    70                                                 tdm.find('.active,h2').css({'cursor':'pointer'}).unbind('click').click(function(){
    71                                                         tdm.find('li:not(.active)').toggle();
     67                                                $('h2',tdm).addClass('active');
     68                                                $('li a',tdm).css({'display':'block'});
     69                                                $('.active,h2',tdm).css({'cursor':'pointer'}).unbind('click').click(function(){
     70                                                        $('li:not(.active)',tdm).toggle();
    7271                                                        return false;
    7372                                                });
    7473                                        }
    75                                         var highlighted =false;
     74                                        if(!titres_offset){
     75                                                titres_offset = [],
     76                                                tdm.parents("div:not(.encart)").eq(0).find('h3').each(function(i, titre) {
     77                                                        titres_offset.push($(titre).offset().top.toFixed());
     78                                                });
     79                                        }
     80                                       
     81                                        var highlighted = false;
    7682                                        for (var i = 0, c = titres_offset.length; i < c; i++) {
    7783                                                $('li,h2', tdm).removeClass('active');
    78                                                 if (titres_offset[i] >= top) {
    79                                                         if((i-1) == -1)
    80                                                                 highlighted = $('h2', tdm).addClass('active');
    81                                                         else
    82                                                                 highlighted = $('li:eq('+(i-1)+')', tdm).addClass('active');
     84                                                if (titres_offset[i]-tdm.height() >= top) {
     85                                                        if((i-1) == -1) highlighted = $('h2', tdm).addClass('active');
     86                                                        else highlighted = $('li:eq('+(i-1)+')', tdm).addClass('active');
    8387                                                        break;
    8488                                                }
     
    8690                                        if(!highlighted)
    8791                                                highlighted = $('li:eq('+(titres_offset.length-1)+')', tdm).addClass('active');
    88                                         tdm.find('li:not(.active),h2:not(.active)').hide();
    89                                         tdm.find('.active').show();
    90                                                 jQuery('#tdm .active a').unbind('click').click(function(e){
    91                                                         if(jQuery('#tdm li:not(:visible)').size() > 0){
    92                                                                 e.preventDefault();
    93                                                                 jQuery('#tdm *:not(:visible)').show();
    94                                                                 return false
    95                                                         }
    96                                                 });
     92                                        $('li:not(.active),h2:not(.active)',tdm).hide();
     93                                        $('.active',tdm).show();
     94                                        var tdm_active_click = function(e){
     95                                                if($('li:not(:visible)',tdm).size() > 0){
     96                                                        e.preventDefault();
     97                                                        e.stopPropagation();
     98                                                        $('*:not(:visible)',tdm).show();
     99                                                        return false;
     100                                                }
    97101                                        }
    98                                 if(($(window).scrollTop() < limite_tdm)||(pos_bas > limite_bas) ){
    99                                         $('h3 a.tdm').show();
    100                                         tdm.find('*:hidden').show();
    101                                         tdm.find('.active,h2').css({'cursor':'inherit'}).unbind('click');
    102                                         tdm.removeClass("tdm_flottant").css({"position": "static", "width": "auto"});
     102                                        $('.active a',tdm).unbind('click').click(tdm_active_click);
    103103                                }
     104                                if(($(window).scrollTop() < limite_tdm) && tdm.hasClass("tdm_flottant")){
     105                                        $('*:hidden',tdm).add('h3 a.tdm').show();
     106                                        $('.active,h2',tdm).css({'cursor':''}).removeClass('active').unbind('click');
     107                                        $('li a',tdm).css({'display':''});
     108                                        tdm.removeClass("tdm_flottant").css({'position': '', 'width':'','z-index':'','top':''});
     109                                        if(typeof(ancre_douce_init) == 'function')
     110                                                ancre_douce_init();
     111                                }else if((pos_bas > limite_bas) && tdm.is(':visible'))
     112                                        tdm.hide();
    104113                        }
    105                 });
     114                }
     115                $(window).unbind('scroll',tdm_scroll).bind('scroll',tdm_scroll);
     116                if($(window).scrollTop() > 0)
     117                        tdm_scroll();
    106118        };
    107119}
    108 jQuery(document).ready(function(){
     120$(function(){
    109121        tdm_init();
    110122        tdm_flottante_init();
     
    112124        onAjaxLoad(tdm_flottante_init);
    113125});
     126})(jQuery);
  • _plugins_/table_matieres/trunk/paquet.xml

    r72623 r73533  
    22        prefix="tablematieres"
    33        categorie="edition"
    4         version="2.2.0"
     4        version="2.2.1"
    55        etat="stable"
    66        compatibilite="[2.0.0;3.0.99]"
     
    1616
    1717        <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
    18 
     18        <utilise nom="ancresdouces" />
    1919        <pipeline nom="declarer_tables_interfaces" inclure="tdm_pipelines.php" />
    2020        <pipeline nom="jquery_plugins" inclure="tdm_pipelines.php" />
  • _plugins_/table_matieres/trunk/plugin.xml

    r72623 r73533  
    1212                </multi>
    1313        </slogan>
    14         <version>2.2.0</version>
     14        <version>2.2.1</version>
    1515        <prefix>tablematieres</prefix>
    1616        <fonctions>tablematieres_fonctions.php</fonctions>
  • _plugins_/table_matieres/trunk/tablematieres_fonctions.php

    r72623 r73533  
    3737                return $texte;
    3838        }
    39         if (!$table_matieres) {
     39        if (!$table_matieres)
    4040                $table_matieres = charger_fonction('table_matieres', 'inc');
    41         }
     41       
    4242        return $table_matieres($texte, $retourner);
    4343}
     
    244244                _RETOUR_TDM);
    245245
    246         if (TDM_JAVASCRIPT AND !test_espace_prive() AND !_AJAX # crayons
    247         ) {
     246        if (!test_espace_prive() AND TDM_JAVASCRIPT AND !_AJAX)# crayons
    248247                $_RETOUR_TDM = '';
    249         }
     248
    250249        return str_replace('@@RETOUR_TDM@@', $_RETOUR_TDM, $texte);
    251250}
     
    262261        $code = "";
    263262        foreach ($intertitres as $url=>$titre) {
    264                 spip_log(self(),'test.'._LOG_ERREUR);
    265263                $code .= "<li><a href='#$url'>$titre</a></li>\n";
    266264        }
     
    272270        ));
    273271
    274         if (TDM_JAVASCRIPT AND $_table AND !test_espace_prive()
    275         AND !_AJAX # crayons
    276         ) {
     272        if (!test_espace_prive() AND TDM_JAVASCRIPT AND $_table
     273                AND !_AJAX){ # crayons
    277274                $_table = inserer_attribut('<div class="encart"></div>',
    278275                        'rel', $_table);
    279276        }
    280 
    281277        return $_table;
    282278}
Note: See TracChangeset for help on using the changeset viewer.