Benutzer:Schnark/js/jsmodules.js
Erscheinungsbild
< Benutzer:Schnark | js
Hinweis: Leere nach dem Veröffentlichen 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
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//<nowiki>
var jsmodules = {
/* Registrierte Module, Aufbau:
'[[Benutzer:Schnark/js/modul.js]]' : {
desc: 'Beschreibung', //Beschreibung
needed: function (ns, action) { return true; }, //Funktion, die abh. von Namensraum und Aktion angibt, ob das Modul gebraucht wird
cache: {
stable: '123456789', //letzte stabile Version
latest: '987654321', //letzte Version (muss nur inkrementiert werden)
days: 2 }, //Anzahl der Tage, die gecachet werden soll
dynamical: false, //dynamisches Laden möglich?
depends: ['[[...]]', '[[...]]'], //Module, die vorher geladen werden müssen
after: function () {}, //Funktion, die nach dem Laden ausgeführt werden soll
loaded: false, loadeddyn: false } //bereits geladen? dynamisch?
*/
modules: {},
//Hilfsvariablen
ns: 0, action: '',
init: function() {
this.ns = wgNamespaceNumber; //!RL!
this.action = wgAction; }, //!RL!
//Funktionen für Anwender
//registriert ein Modul
register: function(name, desc, needed, cache, dynamical, depends) {
if (typeof this.modules[name] != 'undefined') return;
if (typeof desc != 'string') desc = '(keine Beschreibung verfügbar)';
if (typeof needed != 'function') needed = function (ns, action) {return true;};
if (typeof cache != 'object') cache = {};
if (typeof dynamical != 'boolean') dynamical = false;
if (typeof depends != 'object') depends = [];
this.modules[name] = {desc: desc, needed: needed, cache: cache, dynamical: dynamical, depends: depends,
loaded: false, loadeddyn: false}; },
//fügt eine Abhängigkeit hinzu
addDepend: function(name, dep) {
this.register(name);
this.modules[name].depends.push(dep); },
//lädt ein Modul
/* options = {
before: '[[...]]' oder function () {...},
after: '[[...]]' oder function () {...},
cache: [...]
}
Werte für cache:
'123456789': diese Version
'stable': stabile Version
'latest': letzte Version
'none': kein Cache
'time': nach Zeitablauf
'x days': nach x Tagen
'standard': Standard Cache-Verhalten
*/
load: function(name, options) {
if (typeof options != 'object') options = {};
this.register(name, '(vom Benutzer geladen)');
if (this.modules[name].loaded) return;
this.modules[name].loaded = true;
if (!this.modules[name].needed(this.ns, this.action)) return;
if (this.disabled(name)) return;
if (typeof options.before == 'function') options.before();
if (typeof options.before == 'string') this.load(options.before);
for (var i = 0; i < this.modules[name].depends.length; i++) {
this.load(this.modules[name].depends[i]);
}
this.fetch(name, options.cache, this.modules[name].cache);
if (typeof options.after == 'function') this.modules[name].after = options.after;
if (typeof options.after == 'string') this.load(options.after); },
//interne Funktionen
//prüft, ob ein Modul per Cookie deaktiviert ist
disabled: function(name) {
var c = $j.cookie('jsmodules') || ''; //!RL!
return (c.indexOf(name + '0') != -1); },
//importiert ein Skript
fetch: function(name, ucache, mcache) {
if (typeof ucache == 'string') ucache = [ucache];
if (typeof ucache != 'object') ucache = [];
var now = new Date(); var time = now.getTime();
var cache = '';
if (typeof mcache.days == 'number') cache = String(Math.floor(time/(1000*60*60*24*mcache.days)));
for (var i = 0; i < ucache.length; i++) {
var c = ucache[i];
if (c == 'stable' && typeof mcache.stable == 'string') {cache = 'oldid=' + mcache.stable; break;}
if (c == 'latest' && typeof mcache.latest == 'string') {cache = mcache.latest; break;}
if (c == 'none') {cache = String(time); break;}
if (c == 'standard') {cache = ''; break;}
if (c == 'time' && typeof mcache.days == 'number') break;
if (c.indexOf('days') > 0) {cache = String(Math.floor(time/(1000*60*60*24*parseInt(c, 10)))); break;}
if (c.match(/^\d+$/)) {cache = 'oldid=' + c; break;}
}
var url = '';
if (name.indexOf('[[') == 0) url = wgServer + wgScript + '?action=raw&ctype=text/javascript&title='; //!RL!
url += name.replace(/[\[\]]/g, '');
if (cache != '') url += (url.indexOf('?') > -1) ? '&' : '?';
url += cache;
importScriptURI(url); }, //!RL!
//lädt automatisch
auto: function() {
var c = $j.cookie('jsmodules') || ''; //!RL!
$j.cookie('jsmodules', c, { expires: 30, path: '/' }); //!RL!
for (var name in jsmodules.modules) {
if (jsmodules.modules[name].dynamical && c.indexOf(name + '1') > -1) {
jsmodules.load(name); jsmodules.modules[name].loadeddyn = true;
}
}},
//lädt die Definitionen
importdef: function() {
var now = new Date(); var time = now.getTime();
var url = 'http://de.wikipedia.org/w/index.php?title=Benutzer:Schnark/js/modules.js&action=raw&ctype=text/javascript&' +
String(Math.floor(time/(1000*60*60*24)));
importScriptURI(url);}, //!RL!
//führt eine Funktion nach dem Laden des Skripts aus
after: function(name) {
if (typeof this.modules[name].after == 'function') this.modules[name].after(); }
};
jsmodules.init();
jsmodules.importdef(); //!RL!: mediaWiki.loader.using('jquery.cookie', jsmodules.importdef);
//</nowiki>