MediaWiki:RessourceLoader.js
aus Kamelopedia, der wüsten Enzyklopädie
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: Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen
"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] !== undefined) { // 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); } }); }; })();