MediaWiki:RessourceLoader.js
Version vom 8. Juni 2015, 14:33 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.isString = 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]);
}
for (var i=0; i<data.length; i++){
if (!kp.util.isString(data)) {
// Kein String, gehe von einem Deferred aus, direkt an jQuery weitergeben!
events.push(data);
}else if (/^\[\[.*\]\]$/.test(data)) {
// String mit [[...]]
var wikipage = data.substring(2, data.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);
}
}
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.append(mw.loader.using(modules));
return $.when.apply(null, events).then(ready, error);
}
});
};
})();