mediawiki-skins-MinervaNeue/resources/skins.minerva.scripts/references.js

66 lines
1.7 KiB
JavaScript
Raw Normal View History

const drawers = require( './drawers.js' );
module.exports = function () {
const mobile = require( 'mobile.startup' );
const references = mobile.references;
const currentPage = mobile.currentPage();
const currentPageHTMLParser = mobile.currentPageHTMLParser();
const ReferencesHtmlScraperGateway = mobile.references.ReferencesHtmlScraperGateway;
const gateway = new ReferencesHtmlScraperGateway( new mw.Api() );
/**
* Event handler to show reference when a reference link is clicked
*
* @ignore
* @param {jQuery.Event} ev Click event of the reference element
*/
function showReference( ev ) {
const $dest = $( ev.currentTarget );
let href = $dest.attr( 'href' );
ev.preventDefault();
// If necessary strip the URL portion of the href so we are left with the
// fragment
const i = href.indexOf( '#' );
if ( i > 0 ) {
href = href.slice( i );
}
references.showReference( href, currentPage, $dest.text(),
currentPageHTMLParser, gateway, {
onShow: function () {
drawers.lockScroll();
},
onShowNestedReference: true,
onBeforeHide: drawers.discardDrawer
},
( oldDrawer, newDrawer ) => {
oldDrawer.hide();
drawers.displayDrawer( newDrawer, {} );
}
).then( ( drawer ) => {
drawers.displayDrawer( drawer, {} );
} );
}
/**
* Event handler to show reference when a reference link is clicked.
* Delegates to `showReference` once the references drawer is ready.
*
* @ignore
* @param {jQuery.Event} ev Click event of the reference element
*/
function onClickReference( ev ) {
showReference( ev );
}
Make Minerva use new PageHTMLParser.js and refactored Page.js 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
2019-07-11 00:56:04 +00:00
function init() {
// Make references clickable and show a drawer when clicked on.
$( document ).on( 'click', 'sup.reference a', onClickReference );
}
Make Minerva use new PageHTMLParser.js and refactored Page.js 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
2019-07-11 00:56:04 +00:00
init();
};