Benutzer:Schnark/js/jsmodules
Dieses Skript bietet grundlegende Funktionen zum Einbinden anderer Skripte und erlaubt es, einzelne Skripte per Cookie temporär zu aktivieren oder deaktivieren. Weitere Besonderheiten sind die Tatsache, dass automatisch ein Link für die Funktion „Links auf diese Seite“ gesetzt wird und je nach Konfiguration eine regelmäßige Leerung des Browsercaches, damit man immer die aktuelle Version verwendet. Ferner werden die Skripte erst geladen, wenn mediawiki.util
und weitere grundlegende Module verfügbar sind.
Die Konfiguration durch Cookies kannst du auf Spezial:Leerseite?action=schnark-config oder auch auf Benutzer:Schnark/js/modulverwaltung durchführen, eine weitere Möglichkeit ist unter Konfiguration erklärt.
Umstellung auf Fliegelflagel
[Bearbeiten | Quelltext bearbeiten]Eine Umstellung auf Fliegelflagel ist in den meisten Fällen sehr leicht. Falls du jsmodules
nur für meine Skripte verwendet hast (einschließlich einfacher Konfigurationen) so entfernst du aus deiner common.js (oder vector.js, falls du den Code dort eingefügt hast), den folgenden Code
importScript('Benutzer:Schnark/js/jsmodules.js'); //[[Benutzer:Schnark/js/jsmodules.js]]
$(document).bind('jsmodulesRun', function (e, jsmodules) {
//beliebiger Inhalt
});
Falls du – aus welchem Grund auch immer – einige Skripte von mir über importScript
eingebunden hast, solltest du diese ebenfalls entfernen.
Stattdessen fügst du folgende Zeile ein:
mw.loader.load('//de.wikipedia.org/w/index.php?title=Benutzer:Schnark/js/fliegelflagel.js&action=raw&ctype=text/javascript&maxage=86400&smaxage=86400'); //[[Benutzer:Schnark/js/fliegelflagel.js]]
Anschließend sollte in deinem persönlichen Menü oben rechts ein neuer Punkt „Fliegelflagel“ erscheinen, der dich zur Konfigurationsseite bringt. Dort sind bereits eine Reihe von Skripten automatisch aktiviert, diese kannst du wieder deaktivieren, falls du sie nicht verwenden möchtest. Zu jedem meiner Skripte kannst du auf dieser Seite auswählen, ob du es verwenden willst oder nicht. Ebenfalls möglich sind dort einfache Konfigurationen, etwa, ob die Schaltfläche für Normdaten immer angezeigt werden soll.
Falls du Skripte anderer Benutzer ebenfalls über jsmodules
geladen hast, kann es sein, dass diese auch in Fliegelflagel verfügbar sind. Andernfalls kannst du sie entweder so einbinden, wie auf der Dokumentationsseite jenes Skripts angegeben, oder du liest die Fliegelflagel-Dokumentation für Fortgeschrittene.
Einbinden
[Bearbeiten | Quelltext bearbeiten]importScript('Benutzer:Schnark/js/jsmodules.js'); //[[Benutzer:Schnark/js/jsmodules.js]]
$(document).bind('jsmodulesRun', function (e, jsmodules) {
});
in deine common.js. Die Einbindung anderer Skripte erfolgt dann an der gelb markierten Stelle.
Einschränkungen
[Bearbeiten | Quelltext bearbeiten]Ich habe noch nicht alle Möglichkeiten getestet, die das Skript bieten soll, Fehler bitte auf meiner Diskussionsseite melden.
Verwendung
[Bearbeiten | Quelltext bearbeiten]Grundfunktion
[Bearbeiten | Quelltext bearbeiten]Das Skript stellt eine Funktion jsmodules.load
zur Verfügung, mit der man andere Skripte einbinden kann. Da diese Funktion aber erst verwendet werden kann, nachdem das Skript geladen ist, müssen alle Aufrufe innerhalb der geschweiften Klammern im obigen Code erfolgen.
Der einfachste Aufruf lautet
jsmodules.load('[[Benutzer:Name/skript.js]]');
Dieser Funktionsaufruf bindet das angegebene Skript ein und lässt gleichzeitig dein Skript in „Links auf diese Seite“ für das eingebundene Skript auftauchen.
Auch das Einbinden von Skripten, die auf anderen Webseiten (andere Sprachen, Schwesterprojekte, Toolserver, …) liegen, ist möglich.
jsmodules.load('[http://www.example.org/pfad/zum/skript.js]');
Der Aufruf erfolgt also immer wie du die Seite normal verlinken würdest. Dabei sind auch Interwikilinks möglich, also etwa
jsmodules.load('[[:en:User:Name/script.js]]');
Dies gilt aber nur für Sprachen und Schwesterprojekte, ein tools:
für den Toolserver funktioniert nicht. Außerdem muss der Link dann immer (auch bei Schwesterprojekten) mit einem Doppelpunkt beginnen.
Optionale Parameter
[Bearbeiten | Quelltext bearbeiten]Du kannst als zweiten Parameter verschiedene Optionen in einem Konfigurationsobjekt angeben, beispielsweise
jsmodules.load('[[Benutzer:Name/skript.js]]', {cache: 'none', after: konfigurationsfunktion});
Du beginnst mit einer öffnenden geschweiften Klammer, dann folgen jeweils Eigenschaft und Wert getrennt durch einen Doppelpunkt, mehrere solcher Paare getrennt durch ein Komma. Nach dem letzten Eigenschaft-Wert-Paar kommt kein Komma mehr, sondern nur noch die schließende geschweifte Klammer. Die verschieden Eigenschaften sind:
before
,after
- Anweisungen, die vor bzw. nach dem Laden des Skripts ausgeführt werden sollen. Liegen diese in einer separaten js-Datei vor, so gibts du deren Namen als Wikilink in Anführungszeichen an. Alternativ kannst du auch eine Funktion übergeben. Achtung: Eine Funktion, die nach dem Laden des Skripts ausgeführt werden soll, funktioniert nur bei Skripten, die extra dafür programmiert sind. Bei meinen eigenen ist dies der Fall, bei fremden aber nicht.
Beispiel (bevor dieses Skript geladen wird, wird eine nervige Meldung ausgegeben):
jsmodules.load('[[Benutzer:Name/skript.js]]', {before: function () {alert('Gleich wird das Skript eingebunden!'} });
cache
- Entweder ein einzelner Wert in Anführungszeichen oder eine Array, eine Reihe von Werten, die durch Kommata getrennt zwischen eckigen Klammern stehen. Mögliche Werte:
stable
- Bindet immer die letzte stabile Version ein, sofern eine solche definiert ist.
latest
- Bindet immer die aktuelle Version ein, sofern eine solche definiert ist und ich daran denke, die entsprechende Information auch zu aktualisieren.
time
- Aktualisiert den Cache alle x Tage, wenn eine solche Zahl definiert ist.
standard
- Aktualisiert den Cache dann, wenn dein Browser es für richtig hält (oder du ihn dazu zwingst).
x days
- Aktualisiert den Cache alle x Tage, wobei du für x jede Zahl eintragen kannst.
123456789
- Bindet die angegebene Version ein. Diese erhälst du aus der Versionsgeschichte (in der URL nach
oldid=
). Achtung: Wenn du die Versionsnummer eines anderen Skripts angibst, wird trotz des anderen Namen dieses eingebunden!
Beispiel (dieses Skript wird alle 5 Tage aus dem Browsercache entfernt):
jsmodules.load('[[Benutzer:Name/skript.js]]', {cache: ['time', '5 days'] });
Definition von eigenen Skripten
[Bearbeiten | Quelltext bearbeiten]Die Funktion lautet jsmodules.register(name, desc, needed, cache, dynamical, depends);
Die Parameter sind:
name
- Der Name als Wikilink, so wie er dann in
load
verwendet wird. desc
- Eine Beschreibung.
needed
- Eine Funktion mit zwei Parameter
ns
(Nummer des Namensraums) undaction
(view, edit, etc.), die einen Wahrheitswert zurückgeben soll, ob das Skript gebraucht wird. Wird es immer gebraucht, einfachtrue
angeben. cache
- Ein Objekt mit den folgenden optionalen Werten:
stable
- Versionsnummer der stabilen Version (String)
latest
- etwas, das immer geändert wird, wenn es eine neue Version gibt
days
- Anzahl der Tage, die maximal gecached werden sollte (Zahl)
dynamical
false
, falls das Skript nicht nur durch Setzen eines Cookies geladen werden solldepends
- Array mit Namen (als Wikilinks) von Skripten, die vorher geladen werden müssen
Außerdem gibt es die Funktion jsmodules.addDepend(name, dep);
, mit der eine weitere Abhängigkeit festgelegt werden kann.
Wenn ein Aufruf mit after: function () { ... }
funktionieren soll, muss eine Zeile der Art
$(document).trigger('loadWikiScript', ['Benutzer:Name/skript.js', optionalerParameter]);
an geeigneter Stelle im Skript eingefügt werden. (Hinweis: Dies wird sich voraussichtlich mit MW1.20 ändern.)
Um zusätzliche Überschriften zu definieren, verwendest du die Funktion jsmodules.heading('Name')
.
Konfiguration
[Bearbeiten | Quelltext bearbeiten]Willst du die Konfiguration per Cookie auf einer anderen Seite, etwa deiner Benutzerseite, durchführen, fügst du dort Folgendes ein:
<div id="konfigurationstabelle"></div>
Die dort angezeigten Bilder sind über die Variablen jsmodules.modulverwaltung.img_ja
und jsmodules.modulverwaltung.img_nein
konfigurierbar.
Wenn du nicht möchtest, dass die Seite bei jeder Änderung sofort neu geladen wird, setzt du jsmodules.modulverwaltung.reload
auf false
.
Wenn du „ja“ und „nein“ statt der Bilder sehen willst, schreibst du:
$(document).bind('jsmodulesRun', function (e, jsmodules) {
jsmodules.modulverwaltung.img_ja = 'ja';
jsmodules.modulverwaltung.img_nein = 'nein';
});
Code
[Bearbeiten | Quelltext bearbeiten]Der Javascript-Code befindet sich unter Benutzer:Schnark/js/jsmodules.js, die Definitionen der Module unter Benutzer:Schnark/js/modules.js.