MediaWiki:RessourceLoader.js

aus Kamelopedia, der wüsten Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Gehe zu Menü → Einstellungen (Opera → Einstellungen auf dem Mac) und dann auf Datenschutz & Sicherheit → Browserdaten löschen → Gespeicherte Bilder und Dateien.
"use strict";

/**
 * Hier entsteht der Kamelopedia Ressource Loader!
 * Benutzung wie Wikis ressource-loader:
 * 
 * kp.loader.load("user") // lädt das User-Script
 *
 * Erweiterung für .load() und .using():
 *
 * "[[MediaWiki:Skin/xx.js]]" // lädt eine Wikiseite
 * $.ready                    // warte auf ein Event
 * 
 */
(function() {
	if (!window.kp)
		window.kp = {};

	if (!window.kp.util)
		window.kp.util = {};
	
	kp.util.isString = function (s) {
		return (s instanceof String) || (typeof s === 'string');	
	};
	
	kp.util.isNumber = function (s) {
		return (s instanceof Number) || (typeof s === 'number');	
	};

	kp.loader = {};
	for (var k in mw.loader)
		kp.loader[k] = mw.loader[k];

	var translate = function(data, callback) {
		var modules = [];
		var events = [];
		
		if (!(data instanceof Array)) {
			// Liste von einzeln zu übersetzenden Einträgen
			return translate([data], callback);
		}
		
		for (var i=0; i<data.length; i++){
			if (!kp.util.isString(data[i])) {
				// Kein String, gehe von einem Deferred aus, direkt an jQuery weitergeben!
				events.push(data[i]);
			} else if (/^\[\[.*\]\]$/.test(data[i])) {
				// String mit [[...]]
				var wikipage = data[i].substring(2, data[i].length - 2);
				if (wikipage.endsWith(".js")) {
					// Javascript-Modul hinzufügen
					modules.push(mw.util.getUrl(wikipage, {action:"raw", ctype:"text/javascript", smaxage:21600, maxage:86400}));
				} else if (wikipage.endsWith(".css")) {
					// CSS-Modul: Wird nie vom Script benötigt, d.h. immer .load() statt .using()!
					mw.loader.load(mw.util.getUrl(wikipage, {action:"raw", ctype:"text/css", smaxage:21600, maxage:86400}), 'text/css');
				}
			} else {
				// Nichts umzuwandeln, gehe von einem Modulnamen aus, direkt an den Loader weitergeben
				modules.push(data[i]);
			}
		}
		
		return callback(modules, events);
	};
	
	kp.loader.load = function(data, dtype, async) {
		return translate(data, function(modules, events){
			return mw.loader.load(modules, dtype, async);
		});	
	};

	kp.loader.using = function(data, ready, error) {
		return translate(data, function(modules, events){
			if (events.length == 0) {
				// einfach nur den Loader aufrufen
				return mw.loader.using(modules, ready, error);
			} else {
				// Loader aufrufen und auf Events warten
				events = events.concat(mw.loader.using(modules));
				return $.when.apply(null, events).then(ready, error);
			}
		});	
	};
})();