2018-01-26 15:50:15 +01:00

83 lines
2.2 KiB
JavaScript

/* globals jQuery, sowb */
var sowb = window.sowb || {};
jQuery( function ( $ ) {
sowb.setupTabs = function() {
$( '.sow-tabs' ).each( function ( index, element ) {
var $this = $( element );
var $widget = $this.closest( '.so-widget-sow-tabs' );
var useAnchorTags = $widget.data( 'useAnchorTags' );
var $tabPanelsContainer = $this.find( '> .sow-tabs-panel-container' );
var $tabs = $this.find( '> .sow-tabs-tab-container > .sow-tabs-tab' );
var $selectedTab = $this.find( '.sow-tabs-tab-selected' );
var selectedIndex = $selectedTab.index();
var $tabPanels = $tabPanelsContainer.find( '> .sow-tabs-panel' );
$tabPanels.not( ':eq(' + selectedIndex + ')' ).hide();
var selectTab = function ( tab, preventHashChange ) {
var $tab = $( tab );
if ( $tab.is( '.sow-tabs-tab-selected' ) ) {
return true;
}
var selectedIndex = $tab.index();
if ( selectedIndex > -1 ) {
var $prevTab = $tabs.filter( '.sow-tabs-tab-selected' );
$prevTab.removeClass( 'sow-tabs-tab-selected' );
var prevTabIndex = $prevTab.index();
$tabPanels.eq( prevTabIndex ).fadeOut( 'fast',
function () {
$( this ).trigger( 'hide' );
$tabPanels.eq( selectedIndex ).fadeIn( 'fast',
function () {
$( this ).trigger( 'show' );
}
);
}
);
$tab.addClass( 'sow-tabs-tab-selected' );
if ( useAnchorTags && !preventHashChange ) {
window.location.hash = $tab.data( 'anchor' );
}
}
};
$tabs.click( function () {
selectTab( this );
} );
if ( useAnchorTags ) {
var updateSelectedTab = function () {
if ( window.location.hash ) {
var anchors = window.location.hash.replace( '#', '' ).split( ',' );
anchors.forEach( function ( anchor ) {
var tab = $tabs.filter( '[data-anchor="' + anchor + '"]' );
if ( tab ) {
selectTab( tab, true );
}
} );
}
};
$( window ).on( 'hashchange', updateSelectedTab );
if ( window.location.hash ) {
updateSelectedTab();
} else {
window.location.hash = $selectedTab.data( 'anchor' );
}
}
} );
};
sowb.setupTabs();
$( sowb ).on( 'setup_widgets', sowb.setupTabs );
} );
window.sowb = sowb;