mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue
synced 2024-12-05 02:59:00 +00:00
331df226f5
In I02f8645aac1d7b081eaba8f2ac92a2ef51f78182, Page.js was made into a
model and its html parsing responsibilities were moved to
PageHTMLParser. Additionally, a singleton for the current page
(currentPage.js) and a singleton for the curent page html parser
(currentPageHTMLParser.js) were introduced to replace the usage of
M.getCurrentPage().
This commit refactors Minerva to make use of these changes.
Notable changes:
* 🐛 The event bus singleton was added to references.js since it
previously relied on an instance of Skin to listen for the
`references-loaded` event. However, this event is emitted on the event
bus singleton.
* Additionally, I didn't see a reason why the `references-loaded` event
needed to also pass the current page instance when the only file
listening to it is references.js (which already has the current page
instance) so I removed that and the convoluted passing of page.js within
the file. I assumed this logic was unecessary.
* The call to drawer.showReferences in references.js now was made to
pass the currentPage instance as well as the currentPageHTMLParser. This
is to prepare for I6e858bbe73f83166476b5b2c0fdac1cca7404246 where the
getReferences() interface for ReferencesMobileViewGateway.js and
ReferencesHtmlScraperGateway.js is refactored to accept both of these
instances. Additionally, references.js was refactored to support event
delegation which gets rid of some parsing/setup logic.
Bug: T193077
Depends-On: I02f8645aac1d7b081eaba8f2ac92a2ef51f78182
Change-Id: I2f32dbcc4ebaa4bebb297cda1ecce3457922b343
48 lines
1.3 KiB
JavaScript
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 ) );
|