User:Tokenzero/infoboxJournal.js

/** * infoboxJournal.js * One-click adds or normalizes existing infobox-journal templates. */ // (async function($) {   'use strict';    // Only enable in Main and Draft namespaces, and on User:*sandbox* pages.    if (!['', 'Draft', 'User'].includes(mw.config.get('wgCanonicalNamespace')))        return;    if (mw.config.get('wgCanonicalNamespace') === 'User' && !mw.config.get('wgTitle').includes('andbox'))       return;

/**    * Get full URL to script/stylesheet/etc. (to raw file). *    * @param {string} pageName * @param {object} [params] * @returns {string} */   function getRawUrl(pageName, params) { params = params || {}; params.action = 'raw'; params.ctype = params.ctype || pageName.includes('.css') ? 'text/css' : 'text/javascript'; return mw.util.getUrl(pageName, params); }

/**    * Asynchronously load a javascript ES6 module from pageName. * The script is loaded as a new element, * so there's no way to access its scope. * This returns a Promise resolved after the script is loaded and executed. * In contrast, mw.loader.load and $.getScript do not support ES6 modules. *    * @param {string} pageName * @returns {Promise} */   async function loadModule(pageName) { return new Promise(function(resolve, reject) {           const script = document.createElement('script');            script.type = 'module';            script.onload = function { resolve(script); };            script.onerror = function { reject(script); };            // src must be set _after_ everything else.            script.src = pageName;            document.head.appendChild(script);        }); }

// Load ResourceLoader modules. await mw.loader.using(['mediawiki.util', 'mediawiki.api',       'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']);

if (!window.extraJs) await mw.loader.getScript(getRawUrl('User:Evad37/extra.js'));

mw.loader.load(getRawUrl('User:Tokenzero/tinfobox.css'), 'text/css');

loadModule(getRawUrl('User:Tokenzero/tinfoboxJournal.js')); })($); //