User:Hilst/Scripts/scriptManager.js

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.
/** 
 * scriptManager, based on [[:en:User:MusikAnimal/scriptManager.js]] by [[User:MusikAnimal]]
 */

$( document ).ready( function () { 
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () {
	"use strict";
	
	if (mw.config.get('skin') === 'timeless') {
		var portlet = mw.util.addPortlet("p-enable-scripts", "Enable scripts");
		$(portlet).insertAfter('#p-tb');
	} else {
		if ($('#p-coll-print_export').length > 0) {
			mw.util.addPortlet("p-enable-scripts", "Enable scripts", "#p-coll-print_export");
		} else {
			mw.util.addPortlet("p-enable-scripts", "Enable scripts", "#p-lang");
		}
	}

	var loadScript = function(e) {
		mw.loader.load(e.data.src); // Load the script
		                            // TODO: implement error handling
		mw.notify(`${e.data.script} has been enabled.`, {title: "scriptManager", type: "success"});
		if (mw.config.get('skin') == 'vector') {
			$(e.target).parent().parent().remove(); // Vector 2010 is stupid
		} else {
			$(e.target).parent().remove(); // Remove script from list, already enabled
		}
	};
 
 	if (window.scriptsToManage) {
		$.each(scriptsToManage, function(script, src) {
			var scriptName = script.replace(/ /g,"_"); 

			mw.util.addPortletLink("p-enable-scripts", "javascript:", script, `t-enablescript-${scriptName}`, `Enable ${script} for this page`);

			// If a script has been clicked, pipe it to loadScript
			$("#t-enablescript-"+scriptName).click({
				script: script,
				src: src
			}, loadScript);
		});
 	} else {
		mw.util.addPortletLink("p-enable-scripts", "en.wikipedia.org/wiki/User:MaterialWorks/Scripts/scriptManager", "No scripts registered!");
 	}
});
}());