MediaWiki:Gadget-MenuToTabs.js: Difference between revisions

From Zelda Dungeon Wiki
Jump to navigation Jump to search
Want an adless experience? Log in or Create an account.
(Created page.)
(No difference)

Revision as of 01:53, October 24, 2011

$( document ).ready( function() {
	var portlet = [];
	var portletId = [];
	var portletToggle = [];
	var toggleDiv = '<div class="vectorToggle" id="$1"><span><a href="#"></a></span></div>';
 
	/* Portlets to exclude */
	var excludePortlets = [ 'p-namespaces', 'p-twinkle' ];
 
	/* MenuToTabs */
	function MenuToTabs( portlet, id ) {
		portlet.removeClass( 'vectorMenu' ).addClass( 'vectorTabs' ).css( 'margin-left', '-1px' )
			.find( 'div.menu > ul' ).unwrap()
			.find( 'li > a' ).wrap( '<span></span>' );
		portlet.find( 'li.icon-collapsed' ).removeClass( 'icon-collapsed' ).addClass( 'icon' );
		$.cookie( 'vector-tabs-' + id, 'tabs', { expires: 30, path: '/' } );
	}
 
	/* TabsToMenu */
	function TabsToMenu( portlet, id ) {
		portlet.removeClass( 'vectorTabs' ).addClass( 'vectorMenu' ).css( 'margin-left', '' )
			.find( 'ul' ).wrap( '<div class="menu"></div>' )
			.find( 'span > a' ).unwrap();
		portlet.find( 'li.icon' ).removeClass( 'icon' ).addClass( 'icon-collapsed' );
		$.cookie( 'vector-tabs-' + id, 'menu', { expires: 30, path: '/' } );
	}
 
	/* Initialize */
	if ( !mw.config.get( 'skin' ) == 'vector' ) {
		return;
	}
 
	// Enumerate all instances of vectorMenu
	$( '.vectorMenu, .vectorTabs' ).each( function(i) {
		portlet[i] = $( this );
		portletId[i] = portlet[i].attr( 'id' );
 
		// Skip p-namespaces and other excluded portlets
		if ( $.inArray( portletId[i], excludePortlets ) == -1 ) {
 
			// Disable collapsible tabs
			portlet[i].find( 'li.collapsible' )
				.removeClass( 'collapsible' );
 
			// Left or right?
			if ( portlet[i].parent().attr( 'id' ) == 'left-navigation' ) {
				portletToggle[i] = $( toggleDiv
					.replace( '$1', portletId[i] + '-toggle' ) )
					.addClass( 'toggle-left' )
					.insertBefore( portlet[i].find( 'ul' ) );
			} else {
				portletToggle[i] = $( toggleDiv
					.replace( '$1', portletId[i] + '-toggle' ) )
					.addClass( 'toggle-right' )
					.insertAfter( portlet[i].find( 'ul' ) );
			}
 
			// Menu or Tabs?
			if ( portlet[i].hasClass( 'vectorMenu' ) ) {
				if ( $.cookie( 'vector-tabs-' + portletId[i] ) == 'tabs' ) {
					MenuToTabs( portlet[i], portletId[i] );
				}
			}
			else if ( portlet[i].hasClass( 'vectorTabs' ) ) {
				portlet[i].find( 'h5' )
					.wrapInner( '<span></span>' )
					.append( '<a href="#"></a>' );
				if ( $.cookie( 'vector-tabs-' + portletId[i] ) == 'menu' ) {
					TabsToMenu( portlet[i], portletId[i] );
				}
			}
 
			// Assign click events
			portlet[i].find( 'h5 > a' ).click( function(e) {
				e.preventDefault();
				var ul = portlet[i].find( 'ul' );
				ul.animate( { height: 'hide' }, 125, function() {
					MenuToTabs( portlet[i], portletId[i] );
					ul.animate( { width: 'show' }, 125 );
				});
			});
			portletToggle[i].find( 'a' ).click( function(e) {
				e.preventDefault();
				var ul = portlet[i].find( 'ul' );
				ul.animate( { width: 'hide' }, 125, function() {
					TabsToMenu( portlet[i], portletId[i] );
					ul.animate( { height: 'show' }, 125 );
				});
			});
		}
	});
});