MediaWiki:RessourceLoader.js
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";
/**
* Der Kamelopedia ihr eigener RessourceLoader!
* Doku: http://kamelopedia.net/wiki/MediaWiki_Diskussion:RessourceLoader.js
*/
(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 loadedWikipages = {};
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 (loadedWikipages[wikipage] !== null) {
// Ignorieren, da bereits geladen
} else if (wikipage.endsWith(".js")) {
// Wikiseiten-Javascript-Modul implementieren und hinzufügen
var sc = $.getScript(kp.util.mkUrl({title:wikipage, action:"raw", ctype:"text/javascript", smaxage:21600, maxage:86400}));
events.push(sc);
loadedWikipages[wikipage] = 1;
} else if (wikipage.endsWith(".css")) {
// Wikiseiten-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');
loadedWikipages[wikipage] = 1;
}
} 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){
if (modules)
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);
}
});
};
})();