Benutzer:Schnark/js/jsmodules.js

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 24. September 2010 um 10:44 Uhr durch Schnark (Diskussion | Beiträge) (typo). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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>