70 lines
1.9 KiB
JavaScript
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);
|