mediawiki-extensions-Tabber.../modules/ext.tabberNeue.codex/ext.tabberNeue.codex.js

60 lines
1.1 KiB
JavaScript
Raw Normal View History

2023-07-05 21:43:41 +00:00
const
Vue = require( 'vue' ),
App = require( './App.vue' );
/**
* @param {Element} tabber
* @return {void}
*/
function initApp( tabber ) {
const tabs = tabber.querySelectorAll( ':scope > .tabber__section > .tabber__panel' );
const tabberData = {
tabsData: [],
currentTab: ''
};
tabs.forEach( ( tab ) => {
const label = tab.getAttribute( 'data-mw-tabber-title' );
2023-07-05 21:43:41 +00:00
tabberData.tabsData.push( {
name: mw.util.escapeIdForAttribute( label ),
label: label,
content: tab.innerHTML
} );
} );
tabberData.currentTab = tabberData.tabsData[ 0 ].name;
// @ts-ignore MediaWiki-specific function
2023-07-05 21:43:41 +00:00
Vue.createMwApp(
App, Object.assign( {
tabberData: tabberData
} )
)
.mount( tabber );
}
/**
* @return {void}
*/
function main() {
2023-07-05 21:43:41 +00:00
const tabbers = document.querySelectorAll( '.tabber:not( .tabber--live )' );
tabbers.forEach( initApp );
2023-07-05 21:43:41 +00:00
}
mw.hook( 'wikipage.content' ).add( function () {
main();
} );
/*
* Add hooks for Tabber when Visual Editor is used.
*/
mw.loader.using( 'ext.visualEditor.desktopArticleTarget.init', function () {
// After saving edits
mw.hook( 'postEdit.afterRemoval' ).add( () => {
main();
} );
} );