Benutzer:PerfektesChaos/js/loadResourceFile

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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[Bearbeiten | Quelltext bearbeiten]

Es 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[Bearbeiten | Quelltext bearbeiten]

Folgende Zeilen in die persönliche common.js einfügen:

mw.loader.load("//en.wikipedia.org/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[Bearbeiten | Quelltext bearbeiten]

Es 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.
  • 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)
  • 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[Bearbeiten | Quelltext bearbeiten]

Es 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 in UTF-8 zu speichern.
  • Typische Bezeichner sind:
    • (keine Angabe) – UTF-8
    • ISO-8859-1 – westeuropäisch (ANSI), alias latin1
    • UTF-8

Es werden Möglichkeiten angeboten, alle Ressourcen oder alle weiteren für diese Seite oder die aktuelle Datei in abweichenden Kodierungen zu verwenden.

Benutzerkonfiguration[Bearbeiten | Quelltext bearbeiten]

Der Ausgangszustand und das Verhalten kann von jedem Benutzer individuell vorgegeben werden.

Interaktive Schnellkonfiguration[Bearbeiten | Quelltext bearbeiten]

Stammverzeichnis 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[Bearbeiten | Quelltext bearbeiten]

In 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[Bearbeiten | Quelltext bearbeiten]

Vor 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
  • boolean
  • object
  • true – Links in der Werkzeugbox zeigen (Vorgabe)
  • false – Kein Link zeigen
  • Objekt – Link in modifizierter Form zeigen; siehe addPortletLink()
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).
  • access – optionale Zeichenkette, mit Stammverzeichnis
folder(access) Setze zeitweilige Vorgabe für Stammverzeichnis, oder Abfrage.
  • access – optionale Zeichenkette, mit Stammverzeichnis
    • n/a oder false – Abfrage des Momentanwertes
    • "" – leere Zeichenkette: setze auf Standard zurück
    • Pfad – setze zeitweiligen Pfad
loadFiles(apply,access,accept) Lade eine oder mehrere Ressourcen.
  • apply – Zeichenkette mit Dateiname, oder Array mit Dateinamen (jeweils ohne Pfad)
  • access – optionale Zeichenkette, mit Stammverzeichnis
  • accept – optionale Zeichenkette, mit Zeichenkodierung
setCharset(accept) Setze Vorgabe für Zeichenkodierung.
  • accept – Zeichenkette, mit Zeichenkodierung; oder false für Standard-Vorgabe

Beispiel:

if ( typeof mw.libs.loadResourceFile !== "object" ) {
   mw.libs.loadResourceFile  =  { };
}
mw.libs.loadResourceFile.portlet = false;

Ausblick[Bearbeiten | Quelltext bearbeiten]

Die 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[Bearbeiten | Quelltext bearbeiten]

Die Stammseite ist en:User:PerfektesChaos/js/loadResourceFile mit:

Quellcode
ResourceLoader
  • ext.gadget.loadResourceFile für mw:Extension:Gadgets
  • Dependencies: user, user.options, mediawiki.user, mediawiki.util
Namensräume alle
Cookies
  • loadResourceFile.path (localStorage)
mw.libs loadResourceFile

Anmerkungen[Bearbeiten | Quelltext bearbeiten]

  1. oder jedem anderen Speichermedium