MediaWiki:RessourceLoader.js
Version vom 22. Juli 2015, 22:00 Uhr von J* (Diskussion | Beiträge)
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.util.mkUrl = function (args) {
// benutze kein wgXxx oder mw.config.get(...) das müsste ggf. erst nachgeladen werden
return location.origin+"/index.php?"+$.param(args);
}
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 implementieren und hinzufügen (Achtung: wird von implement direkt ausgeführt)
var moduleName = "kp.wikipage."+escape(wikipage);
mw.loader.implement(moduleName, [kp.util.mkUrl({title:wikipage, action:"raw", ctype:"text/javascript", smaxage:21600, maxage:86400})], {}, {});
modules.push(moduleName);
} else if (wikipage.endsWith(".css")) {
// CSS-Modul: Wird nie vom Script benötigt, d.h. immer .load() statt .using()!
mw.loader.load(kp.util.mkUrl({title: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);
}
});
};
})();