JavaScript Gadget – um interaktiv beliebige CSS- oder JavaScript-Ressourcen von der Festplatte[1] in die Wiki-Seite zu laden.
Damit kann man vermeiden, übermäßig viele Skripte immer in jede Wiki-Seite zu laden; aber bei Bedarf lassen sich auf bestimmte Seiten gelegentlich Werkzeuge anwenden.
Lokale Ressourcen-Dateien haben einige weitere Vorteile gegenüber Benutzerseiten:
- Sie lassen sich spontan verändern, ohne erst neue Versionen als Benutzerseite hochladen zu müssen.
- Das belastet besonders bei der Neuentwicklung die Versionsgeschichten nicht.
- Kleine Anpassungen an die momentane Situation sind möglich, auch zum Debuggen.
- Sie können Informationen enthalten, die nicht wie eine Benutzerseite weltweit sichtbar sein sollen.
Firefox verweigert aus Sicherheitsgründen seit Version 28 generell den Zugriff auf lokale Dateien aus einer Internetseite heraus.
Funktion
BearbeitenEs wird ein Link für die Werkzeugleiste in der Wiki-Portalseite angeboten. Darüberhinaus gibt es verschiedene Möglichkeiten, die Basisfunktionen zu nutzen (API).
Das Werkzeug-Link ermöglicht die interaktive Auswahl einer oder mehrerer Dateien in einem vorgegebenen Stammverzeichnis, die daraufhin in der aktuellen Wiki-Seite wirksam werden.
Es sind die Datei-Endungen .css
(CSS) oder .js
(JavaScript) möglich (auch in Großbuchstaben).
Es muss zugelassen werden, lokale Dateien in das Internet-Dokument aufzunehmen.
- Browser könnten dies zunächst aus Sicherheitsgründen blockieren.
- NoScript hat eine entsprechende Einstellung.
- Erlauben: [Optionen] → [Erweitert] → [Links auf lokale Dateien erlauben].
Es ist zwingend erforderlich, das Verzeichnis gesondert zu deklarieren.
- Die Struktur des Verzeichnisnamens erlaubt Rückschlüsse, die privater Natur sind; auf den Benutzernamen im lokalen Betriebssystem, auf das Betriebssystem des Rechners, das lokale Netzwerk, die Organisation der Daten.
- Ein HTML-Dokument soll deshalb gemäß Sicherheitskonzept grundsätzlich nie den vollständigen Pfad kennen.
- Der Pfad muss für jedes einzelne Wiki-Projekt definiert werden. Es können unterschiedliche Pfade, oder auch immer das gleiche Verzeichnis benutzt werden.
Einbindung
BearbeitenFolgende Zeilen in die persönliche common.js einfügen:
mw.loader.load("//en.wiki.x.io/w/index.php?title=User:PerfektesChaos/js/loadResourceFile/r.js&action=raw&bcache=1&maxage=604800&ctype=text/javascript",
"text/javascript");
Damit werden alle Funktionen bereitgestellt, einschließlich eines Links in der Werkzeugbox.
Stammverzeichnis
BearbeitenEs wird davon ausgegangen, dass sämtliche für die Wiki-Projekte vorgesehenen Skripte und CSS-Stile in einem einzigen Verzeichnis stehen.
Die Dateien müssen in dem deklarierten Verzeichnis vorhanden sein.
- Auf UX-Systemen wären Datei-Weiterleitungen (symlink) vermutlich wirksam; das erlaubt damit die Nutzung von Dateien in anderen Verzeichnissen.
- Unter Windows ist eine Verknüpfungsdatei
.lnk
unwirksam.
Der momentane Pfad kann auf folgende Weise vereinbart werden:
- Spezial:Helferlein; mit Abspeicherung auf dem Wiki-Server als persönliche Benutzereinstellung.
- Dies bewirkt die gleiche Zuweisung als
localStorage
wie nachstehend. - Die Skript-Bibliothek muss dazu geladen worden sein, wie unter Einbindung beschrieben.
- Dies bewirkt die gleiche Zuweisung als
- Mittels Ausführen von JavaScript-Code (ggf. nur wirksam bis zum Neuladen einer Seite, falls zusätzlich abweichend vereinbart)
- in einem dem Projekt zugeordneten Kontext
- über die zu einer Projektseite gehörende Browser-Konsole
- durch die Vorschau der eigenen common.js, ohne zu speichern
- über Bookmarklet
- von alternativ einer der beiden Anweisungen
mw.libs.loadResourceFile.setFolder(
Pfad)
- (nur wenn die Bibliothek vorher geladen wurde)
-
localStorage.setItem( "loadResourceFile.path",
Pfad);
- (kann auch unabhängig erfolgen; jedoch im Kontext einer Seite des gewünschten Wiki-Projekts)
- in einem dem Projekt zugeordneten Kontext
- Mittels Anwendungsobjekt; ggf. in Greasemonkey usw., so dass es für andere Benutzer und das Internet nicht sichtbar wird.
Der aktuelle Pfad ist anschließend im Tooltip über dem Werkzeug-Link sichtbar.
Ein Schrägstrich zum Ende des Basis-Verzeichnisses ist möglich, aber nicht zwingend. Die Art von Schrägstrichen (\) ist ohne Belang.
Auf das Verhalten (Startpunkt) des Datei-Auswahlmenüs kann kein Einfluss genommen werden.
Zeichenkodierung
BearbeitenEs ist dringend zu empfehlen, alle Ressourcen-Dateien als UTF-8 abzuspeichern.
- Viele Ressourcen-Dateien werden nur ASCII-Zeichen enthalten; hier stellt sich das Problem nicht.
- Unter Windows bietet etwa der Notepad-Editor die Möglichkeit, statt standardmäßig als
ANSI
inUTF-8
zu speichern. - Typische Bezeichner sind:
- (keine Angabe) –
UTF-8
ISO-8859-1
– westeuropäisch (ANSI), aliaslatin1
UTF-8
- (keine Angabe) –
Es werden Möglichkeiten angeboten, alle Ressourcen oder alle weiteren für diese Seite oder die aktuelle Datei in abweichenden Kodierungen zu verwenden.
Benutzerkonfiguration
BearbeitenDer Ausgangszustand und das Verhalten kann von jedem Benutzer individuell vorgegeben werden.
Interaktive Schnellkonfiguration
BearbeitenStammverzeichnis und Zeichenkodierung können nach Installation des Skriptes auf der Seite Spezial:Helferlein interaktiv konfiguriert werden.
Für das Portlet-Link kann nur die Anzeige aktiviert oder deaktiviert werden.
Beim Neuladen einer Wiki-Seite werden die hier deklarierten Einstellungen wirksam. Diese dynamische Zuweisung überschreibt die statischen Vorgaben im Anwendungsobjekt.
Diese Benutzereinstellungen sind für andere Benutzer nicht sichtbar.
Konfiguration über JavaScript
BearbeitenIn die common.js etc. die folgenden Zeilen einfügen (möglichst vor mw.loader.load):
if ( typeof mw.libs.loadResourceFile !== "object" ) {
mw.libs.loadResourceFile = { };
}
mw.libs.loadResourceFile.key1 = value1;
Näheres siehe API.
Anwendungsobjekt und API
BearbeitenVor der Einbindung kann ein Anwendungsobjekt wie folgt deklariert werden, auch in der Seite persönliche common.js:
if ( ! mw.libs.loadResourceFile ) {
mw.libs.loadResourceFile = { };
}
Anschließend können gemäß der nachstehenden Tabelle Zuweisungen vorgenommen werden. Die statischen Zuweisungen von Werten wirken auf die Grundkonfiguration vor dem Laden der Bibliothek; anschließend müssen die Funktionen benutzt werden, um die momentane Zusammenstellung zu verändern.
Unabhängig davon können nach dem Laden immer die API-Funktionen aufgerufen werden.
Vorgaben | Bedeutung | |
Key | Value | |
---|---|---|
portlet
|
|
|
portlet.scope
|
"p-tb "
|
ID des Containers |
portlet.show
|
"Lade CSS/JS-Datei "
|
Linktitel |
portlet.shortcut
|
Tastaturcode | |
portlet.stick
|
null | ID des Container-Elements, vor dem einsortiert werden soll. |
set
|
"UTF-8 "
|
Abweichende Vorgabe für Zeichenkodierung |
store
|
Vorgabe für Stammverzeichnis | |
API | Die Funktionen haben keinen Rückgabewert. | |
find(access)
|
Starte eine interaktive Dateiauswahl einschließlich Ladens der Ressource (in aktueller Zeichenkodierung).
| |
folder(access)
|
Setze zeitweilige Vorgabe für Stammverzeichnis, oder Abfrage.
| |
loadFiles(apply,access,accept)
|
Lade eine oder mehrere Ressourcen.
| |
setCharset(accept)
|
Setze Vorgabe für Zeichenkodierung.
|
Beispiel:
if ( typeof mw.libs.loadResourceFile !== "object" ) {
mw.libs.loadResourceFile = { };
}
mw.libs.loadResourceFile.portlet = false;
Ausblick
BearbeitenDie momentane Implementierung ist mit jedem Browser der letzten 15 Jahre nutzbar (sofern der lokale Zugriff nicht blockiert wurde).
Moderne Browser würden auch einen „Blob“-Zugriff erlauben. Dabei werden die Dateinamen nicht bekannt, sondern nur die Inhalte der Dateien; und deshalb wäre eine Navigation in beliebigen Verzeichnissen möglich.
Es wird jedoch davon ausgegangen, dass in einem aufgeräumten Haushalt alle Ressourcen für die Wiki-Arbeit in einem Verzeichnis gesammelt sind. Damit ergibt sich bis auf Weiteres keine Notwendigkeit zur aktiven Ausführung der Inhalte.
Codes und Stammseite
BearbeitenDie Stammseite ist en:User:PerfektesChaos/js/loadResourceFile mit:
Quellcode |
|
ResourceLoader |
|
Namensräume | alle |
Cookies |
|
mw.libs
|
loadResourceFile
|
Anmerkungen
Bearbeiten- ↑ oder jedem anderen Speichermedium