MinervaNeue/resources/skins.minerva.scripts/toc.js

48 lines
1.3 KiB
JavaScript

( function ( M ) {
var mobile = M.require( 'mobile.startup' ),
currentPage = mobile.currentPage(),
Toggler = mobile.Toggler,
TableOfContents = mobile.toc.TableOfContents,
eventBus = mobile.eventBusSingleton,
// eslint-disable-next-line no-jquery/no-global-selector
$toc = $( '#toc' );
/**
* Create TableOfContents if the given Page has sections and is not the main page
* and wgMFTocEnabled config variable is set to true.
* @method
* @param {Page} page for which a TOC is generated
* @ignore
*/
function init( page ) {
var sections = page.getSections(),
toc = new TableOfContents( {
sections: sections
} );
// eslint-disable-next-line no-new
new Toggler( {
$container: toc.$el,
prefix: 'toc-',
page: page,
isClosed: true,
eventBus: eventBus
} );
// if there is a toc already, replace it
if ( $toc.length > 0 ) {
// don't show toc at end of page, when no sections there
$toc.replaceWith( toc.$el );
} else {
// otherwise append it to the lead section
toc.appendTo( page.getLeadSectionElement() );
}
}
// add a ToC only for "view" action (user is reading a page)
// provided a table of contents placeholder has been rendered
if ( mw.config.get( 'wgAction' ) === 'view' && $toc.length > 0 ) {
init( currentPage );
}
}( mw.mobileFrontend ) );