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 ); } function init() { // Make references clickable and show a drawer when clicked on. $( document ).on( 'click', 'sup.reference a', onClickReference ); } init(); };