Dotclear

Changeset 2113:a134102bfd9a for admin


Ignore:
Timestamp:
09/27/13 16:18:17 (12 years ago)
Author:
Nicolas <nikrou77@…>
Branch:
default
Children:
2114:7f63aa8eeebf, 2134:b3b9847a5d45
Message:

Refactoring for jQuery pageTabs plugin
Navigation in history comes back (onhashchange)
Fix ie7-hashchange to not use $.browser
Fix use of trigger for onetabload and tabload events

Add tests for onhashchange
Add tests for onetabload and tabload event
(Tested on chrome, IE8 and firefox 24)

Location:
admin/js
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • admin/js/jquery/jquery.pageTabs.js

    r2088 r2113  
    1111          }; 
    1212           
    13           var options = $.extend({}, defaults, opts); 
     13          $.pageTabs.options = $.extend({}, defaults, opts); 
    1414          var active_tab = start_tab || ''; 
    15           var hash = $.pageTabsGetHash(); 
     15          var hash = $.pageTabs.getLocationHash(); 
    1616 
    1717          if (hash !== undefined && hash) { 
     
    1919               active_tab = hash; 
    2020          } else if (active_tab == '') { // open first part 
    21                active_tab = $('.'+options.contentClass+':eq(0)').attr('id'); 
     21               active_tab = $('.'+$.pageTabs.options.contentClass+':eq(0)').attr('id'); 
    2222          } 
     23 
     24          createTabs(); 
    2325           
    24           createTabs(active_tab, options); 
    25            
    26           $('ul li', '.'+options.containerClass).click(function(e) { 
    27                $(this).parent().find('li.'+options.activeClass).removeClass(options.activeClass); 
    28                $(this).addClass(options.activeClass); 
    29                $('.'+options.contentClass+'.active').removeClass('active').hide(); 
    30                $('#'+options.partPrefix+getId($(this).find('a').attr('href'))).addClass('active') 
    31                     .show() 
    32                     .onetabload() 
    33                     .tabload(); 
     26          $('ul li', '.'+$.pageTabs.options.containerClass).click(function(e) { 
     27               if ($(this).hasClass($.pageTabs.options.activeClass)) { 
     28                    return; 
     29               } 
     30 
     31               $(this).parent().find('li.'+$.pageTabs.options.activeClass).removeClass($.pageTabs.options.activeClass); 
     32               $(this).addClass($.pageTabs.options.activeClass); 
     33               $('.'+$.pageTabs.options.contentClass+'.active').removeClass('active').hide(); 
     34 
     35               var part_to_activate = $('#'+$.pageTabs.options.partPrefix+getHash($(this).find('a').attr('href'))); 
     36 
     37               part_to_activate.addClass('active').show(); 
     38               if (!part_to_activate.hasClass('loaded')) { 
     39                    part_to_activate.onetabload(); 
     40                    part_to_activate.addClass('loaded'); 
     41               } 
     42                
     43               part_to_activate.tabload(); 
    3444          }); 
     45 
     46          $(window).bind('hashchange onhashchange', function(e) { 
     47               $.pageTabs.clickTab($.pageTabs.getLocationHash()); 
     48          }); 
     49 
     50          $.pageTabs.clickTab(active_tab); 
    3551           
    3652          return this; 
    3753     }; 
    3854      
    39      var createTabs = function createTabs(start_tab, options) { 
    40           var lis = [], li_class = '', to_trigger = null; 
     55     var createTabs = function createTabs() { 
     56          var lis = [], li_class = ''; 
    4157           
    42           $('.'+options.contentClass).each(function() { 
    43                if (start_tab != $(this).attr('id')) { 
    44                     $(this).hide(); 
    45                     li_class = ''; 
    46                } else { 
    47                     $(this).addClass('active'); 
    48                     to_trigger = $(this); 
    49                     li_class = ' class="'+options.activeClass+'"'; 
    50                } 
    51                lis.push('<li id="'+options.idTabPrefix+$(this).attr('id')+'"'+li_class 
    52                      +'><a href="#'+$(this).attr('id')+'">'+$(this).attr('title')+'</a></li>'); 
    53                $(this).attr('id', options.partPrefix + $(this).attr('id')).prop('title',''); 
     58          $('.'+$.pageTabs.options.contentClass).each(function() { 
     59               $(this).hide(); 
     60               lis.push('<li id="'+$.pageTabs.options.idTabPrefix+$(this).attr('id')+'">' 
     61                     +'<a href="#'+$(this).attr('id')+'">'+$(this).attr('title')+'</a></li>'); 
     62               $(this).attr('id', $.pageTabs.options.partPrefix + $(this).attr('id')).prop('title',''); 
    5463          }); 
    5564           
    56           $('<div class="'+options.containerClass+'"><ul>'+lis.join('')+'</ul></div>') 
    57                .insertBefore($('.'+options.contentClass).get(0));      
    58  
    59           if (to_trigger != null) { 
    60                $(to_trigger).onetabload(); 
    61                $(to_trigger).tabload();  
    62           } 
    63  
     65          $('<div class="'+$.pageTabs.options.containerClass+'"><ul>'+lis.join('')+'</ul></div>') 
     66               .insertBefore($('.'+$.pageTabs.options.contentClass).get(0)); 
    6467     }; 
    6568      
    66      var getId = function getId(href) { 
    67           return href.split('#').join(''); 
     69     var getHash = function getHash(href) { 
     70          return href.replace(/.*#/, ''); 
     71     }; 
     72      
     73     $.pageTabs.clickTab = function(tab) { 
     74          $('ul li a', '.'+$.pageTabs.options.containerClass).filter(function() { 
     75               return getHash($(this).attr('href'))==tab; 
     76          }).parent().click(); 
    6877     }; 
    6978 
    70      $.pageTabsGetHash = function() { 
    71           return document.location.hash.split('#').join(''); 
     79     $.pageTabs.getLocationHash = function() { 
     80          return getHash(document.location.hash); 
    7281     }; 
    7382})(jQuery); 
Note: See TracChangeset for help on using the changeset viewer.

Sites map