// page init jQuery(function(){ initTabs(); }); // content tabs init function initTabs() { jQuery('ul.tabset').contentTabs({ tabLinks: 'a', autoRotate: false, effect: 'fade', // "fade", "slide" }); } /* * jQuery Tabs plugin */ ;(function($){ $.fn.contentTabs = function(o){ // default options var options = $.extend({ activeClass:'active', addToParent:false, autoHeight:false, autoRotate:false, checkHash:false, animSpeed:400, switchTime:10000, effect: 'none', // "fade", "slide" tabLinks:'a', attrib:'href', event:'click' },o); return this.each(function(){ var tabset = $(this), tabs = $(); var tabLinks = tabset.find(options.tabLinks); var tabLinksParents = tabLinks.parent(); var prevActiveLink = tabLinks.eq(0), currentTab, animating; var tabHolder; // handle location hash if(options.checkHash && tabLinks.filter('[' + options.attrib + '="' + location.hash + '"]').length) { (options.addToParent ? tabLinksParents : tabLinks).removeClass(options.activeClass); setTimeout(function() { window.scrollTo(0,0); },1); } // init tabLinks tabLinks.each(function(){ var link = $(this); var href = link.attr(options.attrib); var parent = link.parent(); href = href.substr(href.lastIndexOf('#')); // get elements var tab = $(href); tabs = tabs.add(tab); link.data('cparent', parent); link.data('ctab', tab); // find tab holder if(!tabHolder && tab.length) { tabHolder = tab.parent(); } // show only active tab var classOwner = options.addToParent ? parent : link; if(classOwner.hasClass(options.activeClass) || (options.checkHash && location.hash === href)) { classOwner.addClass(options.activeClass); prevActiveLink = link; currentTab = tab; tab.removeClass(tabHiddenClass).width(''); contentTabsEffect[options.effect].show({tab:tab, fast:true}); } else { var tabWidth = tab.width(); if(tabWidth) { tab.width(tabWidth); } tab.addClass(tabHiddenClass); } // event handler link.bind(options.event, function(e){ if(link != prevActiveLink && !animating) { switchTab(prevActiveLink, link); prevActiveLink = link; } }); if(options.attrib === 'href') { link.bind('click', function(e){ e.preventDefault(); }); } }); // tab switch function function switchTab(oldLink, newLink) { animating = true; var oldTab = oldLink.data('ctab'); var newTab = newLink.data('ctab'); prevActiveLink = newLink; currentTab = newTab; // refresh pagination links (options.addToParent ? tabLinksParents : tabLinks).removeClass(options.activeClass); (options.addToParent ? newLink.data('cparent') : newLink).addClass(options.activeClass); // hide old tab resizeHolder(oldTab, true); contentTabsEffect[options.effect].hide({ speed: options.animSpeed, tab:oldTab, complete: function() { // show current tab resizeHolder(newTab.removeClass(tabHiddenClass).width('')); contentTabsEffect[options.effect].show({ speed: options.animSpeed, tab:newTab, complete: function() { if(!oldTab.is(newTab)) { oldTab.width(oldTab.width()).addClass(tabHiddenClass); } animating = false; resizeHolder(newTab, false); autoRotate(); } }); } }); } // holder auto height function resizeHolder(block, state) { var curBlock = block && block.length ? block : currentTab; if(options.autoHeight && curBlock) { tabHolder.stop(); if(state === false) { tabHolder.css({height:''}); } else { var origStyles = curBlock.attr('style'); curBlock.show().css({width:curBlock.width()}); var tabHeight = curBlock.outerHeight(true); if(!origStyles) curBlock.removeAttr('style'); else curBlock.attr('style', origStyles); if(state === true) { tabHolder.css({height: tabHeight}); } else { tabHolder.animate({height: tabHeight}, {duration: options.animSpeed}); } } } } if(options.autoHeight) { $(window).bind('resize orientationchange', function(){ tabs.not(currentTab).removeClass(tabHiddenClass).show().each(function(){ var tab = jQuery(this), tabWidth = tab.css({width:''}).width(); if(tabWidth) { tab.width(tabWidth); } }).hide().addClass(tabHiddenClass); resizeHolder(currentTab, false); }); } // autorotation handling var rotationTimer; function nextTab() { var activeItem = (options.addToParent ? tabLinksParents : tabLinks).filter('.' + options.activeClass); var activeIndex = (options.addToParent ? tabLinksParents : tabLinks).index(activeItem); var newLink = tabLinks.eq(activeIndex < tabLinks.length - 1 ? activeIndex + 1 : 0); prevActiveLink = tabLinks.eq(activeIndex); switchTab(prevActiveLink, newLink); } function autoRotate() { if(options.autoRotate && tabLinks.length > 1) { clearTimeout(rotationTimer); rotationTimer = setTimeout(function() { if(!animating) { nextTab(); } else { autoRotate(); } }, options.switchTime); } } autoRotate(); }); }; // add stylesheet for tabs on DOMReady var tabHiddenClass = 'js-tab-hidden'; $(function() { var tabStyleSheet = $('