Files
oav/dotclear._no/admin/js/jquery/jquery.pageTabs.js
2023-03-20 12:18:38 +01:00

6 lines
3.4 KiB
JavaScript

'use strict';(function($){$.pageTabs=function(start_tab,opts){const defaults={containerClass:'part-tabs',partPrefix:'part-',contentClass:'multi-part',activeClass:'part-tabs-active',idTabPrefix:'part-tabs-'};$.pageTabs.options=$.extend({},defaults,opts);let active_tab=start_tab||'';const hash=$.pageTabs.getLocationHash();const subhash=$.pageTabs.getLocationSubhash();if(hash!==undefined&&hash){window.scrollTo(0,0);active_tab=hash;}else if(active_tab==''){active_tab=$('.'+$.pageTabs.options.contentClass+':eq(0)').attr('id');}
createTabs();$('ul li','.'+$.pageTabs.options.containerClass).on('click',function(){if($(this).hasClass($.pageTabs.options.activeClass)){return;}
$(this).parent().find('li.'+$.pageTabs.options.activeClass).removeClass($.pageTabs.options.activeClass);$(this).addClass($.pageTabs.options.activeClass);$('.'+$.pageTabs.options.contentClass+'.active').removeClass('active').hide();const part_to_activate=$('#'+$.pageTabs.options.partPrefix+getHash($(this).find('a').attr('href')));part_to_activate.addClass('active').show();if(!part_to_activate.hasClass('loaded')){part_to_activate.onetabload();part_to_activate.addClass('loaded');}
part_to_activate.tabload();});$(window).on('hashchange onhashchange',function(){$.pageTabs.clickTab($.pageTabs.getLocationHash());});$.pageTabs.clickTab(active_tab);if(subhash!==undefined){const elt=document.getElementById(subhash);elt.scrollIntoView();$('#'+subhash).addClass('focus').on('focusout',function(){$(this).removeClass('focus');});elt.focus();}
return this;};const createTabs=function createTabs(){let lis=[];$('.'+$.pageTabs.options.contentClass).each(function(){$(this).hide();lis.push('<li id="'+$.pageTabs.options.idTabPrefix+$(this).attr('id')+'">'+'<a href="#'+$(this).attr('id')+'">'+$(this).attr('title')+'</a></li>');$(this).attr('id',$.pageTabs.options.partPrefix+$(this).attr('id')).prop('title','');});$('<div class="'+$.pageTabs.options.containerClass+'"><ul>'+lis.join('')+'</ul></div>').insertBefore($('.'+$.pageTabs.options.contentClass).get(0));};const getHash=function getHash(href){href=href||'';return href.replace(/.*#/,'');};$.pageTabs.clickTab=function(tab){if(tab==''){tab=getHash($('ul li a','.'+$.pageTabs.options.containerClass+':eq(0)').attr('href'));}else if($('#'+$.pageTabs.options.idTabPrefix+tab,'.'+$.pageTabs.options.containerClass).length==0){if($('#'+tab).length==1){const div_content=$('#'+tab).parents('.'+$.pageTabs.options.contentClass);if(div_content.length==1){tab=div_content.attr('id').replace($.pageTabs.options.partPrefix,'');}else{tab=getHash($('ul li a','.'+$.pageTabs.options.containerClass+':eq(0)').attr('href'));}}else{tab=getHash($('ul li a','.'+$.pageTabs.options.containerClass+':eq(0)').attr('href'));}}
$('ul li a','.'+$.pageTabs.options.containerClass).filter(function(){return getHash($(this).attr('href'))==tab;}).parent().trigger('click');};$.pageTabs.getLocationHash=function(){const h=getHash(document.location.hash).split('.');return h[0];};$.pageTabs.getLocationSubhash=function(){const sh=getHash(document.location.hash).split('.');return sh[1];};})(jQuery);jQuery.fn.tabload=function(f){this.each(function(){if(f){chainHandler(this,'tabload',f);}else{const h=this.tabload;if(h){h.apply(this);}}});return this;};jQuery.fn.onetabload=function(f){this.each(function(){if(f){chainHandler(this,'onetabload',f);}else{const h=this.onetabload;if(h!=null){h.apply(this);this.onetabload=null;}}});return this;};