Jump to content

User:SunAfterRain/common.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/** Rewrite mw.loader.load & importScript to use userscript.SunAfterRain.load */
(() => {
	const location = new URL(window.location);
	let queue = [];
	let isGlobalReset = false;
	function loadInit(Loader) {
		Loader.globalInstance.push(queue);
		queue = {
			push(...items) {
				return Loader.globalInstance.push(items);
			}
		};
	}
	window.importScript = (title) => {
		queue.push([title, `//${location.host}`]);
	};
	const importScriptURIWrap = (cb) => (uri) => {
		const url = new URL(uri, location.origin);
		if (
			url.origin === location.origin
			&& url.pathname === mw.util.wikiScript()
			&& url.searchParams.get('title')
		) {
			queue.push([url.searchParams.get('title'), `//${location.host}`]);
		} else if (
			url.pathname == '/w/index.php'
			&& url.searchParams.get('title')
		) {
			queue.push([url.searchParams.get('title'), `//${url.host}`]);
		} else {
			return cb(uri);
		}
	};
	const origImportScriptURI = window.importScriptURI;
	window.importScriptURI = importScriptURIWrap(origImportScriptURI);
	const origMwLoaderLoad = mw.loader.load;
	mw.loader.load = (modules) => {
		if (!Array.isArray(modules)) {
			try {
				return importScriptURIWrap(origMwLoaderLoad)(modules);
			} catch (e) {
				
			}
		}
		return origMwLoaderLoad(modules);
	};
	setTimeout(() => {
		isGlobalReset = true;
		mw.loader.load = origMwLoaderLoad;
	}, 0);
	mw.hook('userscript.SunAfterRain.load').add((Loader) => {
		if (isGlobalReset) {
			loadInit(Loader);
		} else {
			setTimeout(loadInit, 1, Loader);
		}
	});
})();
importScript('User:RedWarn/.js'); // Backlink: [[User:RedWarn/.js]]
//importScript('User:Chlod/Scripts/Deputy.js'); // Backlink: [[User:Chlod/Scripts/Deputy.js]]