Dotclear

source: admin/js/jquery/jquery.pageTabs.js @ 2457:dfba0da9e71b

Revision 2457:dfba0da9e71b, 3.1 KB checked in by Nicolas <nikrou77@…>, 12 years ago (diff)

If plugin is call without tab to build it failed. Example antispam page.

Line 
1(function($) {
2     'use strict';
3   
4     $.pageTabs = function(start_tab, opts) {
5          var defaults = {
6               containerClass: 'part-tabs',
7               partPrefix: 'part-',
8               contentClass: 'multi-part',
9               activeClass: 'part-tabs-active',
10               idTabPrefix: 'part-tabs-'
11          };
12         
13          $.pageTabs.options = $.extend({}, defaults, opts);
14          var active_tab = start_tab || '';
15          var hash = $.pageTabs.getLocationHash();
16
17          if (hash !== undefined && hash) {
18               window.scrollTo(0,0);
19               active_tab = hash;
20          } else if (active_tab == '') { // open first part
21               active_tab = $('.'+$.pageTabs.options.contentClass+':eq(0)').attr('id');
22          }
23
24          createTabs();
25         
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();
44          });
45
46          $(window).bind('hashchange onhashchange', function(e) {
47               $.pageTabs.clickTab($.pageTabs.getLocationHash());
48          });
49
50          $.pageTabs.clickTab(active_tab);
51         
52          return this;
53     };
54     
55     var createTabs = function createTabs() {
56          var lis = [], li_class = '';
57         
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','');
63          });
64         
65          $('<div class="'+$.pageTabs.options.containerClass+'"><ul>'+lis.join('')+'</ul></div>')
66               .insertBefore($('.'+$.pageTabs.options.contentClass).get(0));
67     };
68     
69     var getHash = function getHash(href) {
70          var href = href || '';
71
72          return href.replace(/.*#/, '');
73     };
74     
75     $.pageTabs.clickTab = function(tab) {
76          if (tab=='' || $('#'+$.pageTabs.options.idTabPrefix+tab, '.'+$.pageTabs.options.containerClass).length==0) {
77               tab = getHash($('ul li a', '.'+$.pageTabs.options.containerClass+':eq(0)').attr('href'));
78          }
79
80          $('ul li a', '.'+$.pageTabs.options.containerClass).filter(function() {
81               return getHash($(this).attr('href'))==tab;
82          }).parent().click();
83     };
84
85     $.pageTabs.getLocationHash = function() {
86          return getHash(document.location.hash);
87     };
88})(jQuery);
89
90jQuery.fn.tabload = function(f) {
91     this.each(function() {
92          if (f) {
93               chainHandler(this,'tabload',f)
94          } else {
95               var h = this.tabload;
96               if (h) { h.apply(this); }
97          }
98     });
99     return this;
100};
101
102jQuery.fn.onetabload = function(f) {
103     this.each(function() {
104          if (f) {
105               chainHandler(this,'onetabload',f);
106          } else {
107               var h = this.onetabload;
108               if (h != null) {
109                    h.apply(this);
110                    this.onetabload = null;
111               }
112          }
113     });
114     return this;
115};
Note: See TracBrowser for help on using the repository browser.

Sites map