Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 38 additions & 57 deletions javascript/Main.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,49 +3,6 @@
The equivalent to this file on production is Special:RLA, and should be kept in sync with it.
*/

// List of JavaScript modules to include
const jsModules = [
'Analytics',
'BattleRoyale',
'Bracket',
'Carousel',
'Collapse',
'Commons_mainpage',
'Commons_tools',
'CopyToClipboard',
'Countdown',
'Crosstable',
'Dialog',
'Dropdown',
'ExportImage',
'FilterButtons',
'Liquipedia_links',
'Mainpage',
'Miscellaneous',
'PanelBoxCollapsible',
'Prizepooltable',
'RankingTable',
'Selectall',
'Slider',
'SwitchButtons',
'Tabs'
];

// Dynamically load JavaScript modules
jsModules.forEach( ( module ) => {
const script = document.createElement( 'script' );
script.src = `../../javascript/commons/${ module }.js`;
script.async = false; // Ensure scripts load in order
document.head.appendChild( script );
} );

// Initialize liquipedia global object
window.liquipedia = window.liquipedia || {
core: {
modules: []
}
};

// Mock MediaWiki APIs for testing
window.mw = window.mw || {
config: {
Expand Down Expand Up @@ -83,17 +40,41 @@ window.mw = window.mw || {
}
};

// Auto-initialize all loaded modules
onload = () => {
liquipedia.core.modules.forEach( ( module ) => {
if ( !liquipedia[ module ] || typeof liquipedia[ module ].init !== 'function' ) {
return;
}
try {
liquipedia[ module ].init();
} catch ( e ) {
// eslint-disable-next-line no-console
console.error( `Failed to initialize module: ${ module }. Error: ${ e }` );
}
} );
};
// List of JavaScript modules to include
const jsModules = [
'UseStrict',
'Core',
'Analytics',
'BattleRoyale',
'Bracket',
'Carousel',
'Collapse',
'Commons_mainpage',
'Commons_tools',
'CopyToClipboard',
'Countdown',
'Crosstable',
'Dialog',
'Dropdown',
'ExportImage',
'FilterButtons',
'Liquipedia_links',
'Mainpage',
'Miscellaneous',
'PanelBoxCollapsible',
'Prizepooltable',
'RankingTable',
'Selectall',
'Slider',
'SwitchButtons',
'Tabs',
'CoreEnd'
];

// Dynamically load JavaScript modules
jsModules.forEach( ( module ) => {
const script = document.createElement( 'script' );
script.src = `../../javascript/commons/${ module }.js`;
script.async = false; // Ensure scripts load in order
document.head.appendChild( script );
} );
23 changes: 23 additions & 0 deletions javascript/commons/Core.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*******************************************************************************
* Template(s): JavaScript Core
* Author(s): FO-nTTaX
* Information: All modules need to have a parameterless init function. The script
* calls this init function in an asynchronous way so a failing module can not
* stop the execution of the rest of the scripts. A slow script will also not
* block execution of other modules. The script does not check for dependencies
* (impossible to do since modules are in different files), so these need to be
* resolved manually. Modules need to register themselves into the core part of
* the liquipedia.core.modules array, so the script can find them.
******************************************************************************/
const liquipedia = { };
liquipedia.core = {
modules: [ ],
init: function() {
liquipedia.core.modules.forEach( ( module ) => {
// Usage of setTimeout to make scripts asynchronous
window.setTimeout( () => {
window.liquipedia[ module ].init();
}, 0 );
} );
}
};
5 changes: 5 additions & 0 deletions javascript/commons/CoreEnd.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/*******************************************************************************
* Template(s): JavaScript Core
* Author(s): FO-nTTaX
******************************************************************************/
liquipedia.core.init();
5 changes: 5 additions & 0 deletions javascript/commons/UseStrict.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/*******************************************************************************
* Template(s): JavaScript Strict Mode
* Author(s): FO-nTTaX
******************************************************************************/
'use strict';
Loading