MediaWiki:Gadget-CollapsibleNav.js

/**

* Collapsible navigation for Vector

* @maintainer Nardog

*/

// CC0

'use strict';

function onToggle( e ) {

var collapsedIds = mw.storage.getObject( 'vector-nav-collapsed' ) || [],

index = collapsedIds.indexOf( this.id );

if ( e.type === 'afterExpand' ) {

// Remove ID from array

if ( index !== -1 ) {

collapsedIds.splice( index, 1 );

}

if ( collapsedIds.length ) {

mw.storage.setObject( 'vector-nav-collapsed', collapsedIds );

} else {

// Remove the data altogether if empty

mw.storage.remove( 'vector-nav-collapsed' );

}

} else {

if ( index === -1 ) {

collapsedIds.push( this.id );

mw.storage.setObject( 'vector-nav-collapsed', collapsedIds );

}

}

}

$( function () {

var collapsedIds = mw.storage.getObject( 'vector-nav-collapsed' ) || [];

$( '#mw-panel .vector-menu' )

.addClass( 'collapsible-nav mw-collapsible' )

.addClass( function () {

if ( collapsedIds.indexOf( this.id ) !== -1 ) {

return 'mw-collapsed';

}

} )

.children( '.vector-menu-heading' )

.addClass( 'mw-collapsible-toggle' )

.end()

.children( '.vector-menu-content' )

.addClass( 'mw-collapsible-content' )

.end()

.makeCollapsible()

.on( 'afterCollapse.mw-collapsible afterExpand.mw-collapsible', onToggle );

} );