wiki_thsf_2015/public/js/jquery.minitabs.js

70 lines
1.9 KiB
JavaScript

/*
* jQuery minitabs plugin
* Version 1.0
*
* Licenced under dual MIT/GPL license.
* GPL: http://www.opensource.org/licenses/gpl-2.0.php
* MIT: http://www.opensource.org/licenses/mit-license.php
*
*/
(function($){
var _defaultConfig = {
open: 'tab-open',
closed: 'tab-closed',
current: 'current',
active: 'tabs-active',
panel: 'tab-panel'
};
function getRef ( a ) {
return $.attr( a, 'href' ).replace( /^[^#]+/, '' );
}
function switchTabs ( link, c ) {
var nav = $( link ).closest( '.' + c.active ),
id = getRef( link );
if ( id && id !== c.current_id ) {
nav.trigger( 'tabswitch', [ link, id ] );
// find currenly active and close it
if ( c.current_id ) {
var cid = c.current_id;
$( cid ).trigger( 'tabclose' ).removeClass( c.open ).addClass( c.closed );
nav.find( 'li:has(a[href$=' + cid + '])' ).removeClass( c.current );
}
// find the desired panel and open it
$( id ).removeClass( c.closed ).addClass( c.open ).trigger( 'tabopen' );
$( link ).closest('li').addClass( c.current );
c.current_id = id;
}
}
$.fn.minitabs = function ( cfg ) {
var conf = $.extend( {}, _defaultConfig, cfg );
return this.each(function () {
var current = null;
var links = $( 'a', this ).each(function ( i ) {
$( getRef( this ) ).addClass( conf.panel + ' ' + conf.closed );
if ( $( this ).closest( 'li' ).is( '.' + conf.current ) ) { current = this; }
});
var tab = $( this )
.addClass( conf.active )
.data( 'tab.config', conf )
.undelegate( 'a', 'click.minitabs' )
.delegate( 'a', 'click.minitabs', function (e) {
switchTabs( this, $.data( e.delegateTarget, 'tab.config' ) );
e.preventDefault();
})
;
switchTabs( current || links[0], conf );
});
};
})(jQuery);