Benutzer:PerfektesChaos/js/idResolver

aus Wikipedia, der freien Enzyklopädie

JavaScript Benutzerskript, das zu einer Verlinkung mehrfache Linkziele anbietet.

Zu Verlinkungen, die auf einer typischen ID beruhen, werden zusätzlich alternative Resolver und modifizierte URL angeboten; auf Wunsch auch für alle URL zum Aufsuchen archivierter Versionen.

Funktion

Auf jeder Seite in ausgewählten Namensräumen werden alle Verlinkungen des Inhaltsbereichs untersucht, ob sie bestimmte Bedingungen erfüllen.

  • Linkziele, bei denen das auch durch Benutzerkonfiguration als wünschenswert angesehen wird, zeigen auf Klick nunmehr eine Auswahlbox.
    • Ein Doppelklick bewirkt den ursprünglichen Direktaufruf.
    • Ein zweiter einfacher Klick auf die Verlinkung schließt die Auswahlbox wieder.
  • In einigen Fällen kann ein URL-Muster auf eine andere Seite umgeleitet werden, basierend auf der angegeben ID (shift).
  • Zielseiten werden in einem neuen Browser-Tab oder -Fenster geöffnet, wenn sie auf einer modifizierten Verlinkung beruhen.
  • Falls das Dokumentenformat anhand der URL erraten werden kann, werden einige (etwa PDF) mit einem speziellen Icon markiert.
Interne Links („Wikilinks“)
Der folgende Typ von ID wird erkannt und mit Auswahlbox ausgestattet:
Zukunftsmusik:
  • Benutzerseiten und Benutzerdiskussion (Anzeige des unverschleierten Nick für C&P, einheitliche Liste von Verlinkungen der Benutzer- und Benutzerdiskussionsseiten, Logs, Statistikwerkzeug; Werkzeuge bei IP; Abrufmöglichkeit einiger Schlüsselinformationen [Gruppenzugehörigkeit, Anmeldedatum, Editcount, Datum des letzten Edits, Sperrstatus])
  • Mediendateien (direkte Verlinkung mit Commons, verschiedene Werkzeuge)
  • Vorlagen-Links (verschiedene Werkzeuge)
  • Kategorien (verschiedene Werkzeuge)
  • Weiterleitungen (Abruf des Weiterleitungsziels)
Externe Links („Weblinks“)
Die folgenden Typen von ID werden erkannt und mit Auswahlbox ausgestattet:
  • DOI
  • ISSN
  • Identifizierer von Nationalbibliotheken
    • Deutsche GND wird bereits unterstützt (DNB)
    • LCCN geplant
  • Jede andere externe URL, mit dem Angebot der gezielten Suche in Web-Archiven (www)
Zukunftsmusik:
  • Handle (Oberbegriff zum DOI)
  • Vorgesehen ist auch eine Erweiterung auf Bibelstellen, mit Verlinkung von antiken (arc, hbo, grc, la) und jeweils volkssprachlichen Fassungen.

Installation

Folgende Zeile in die persönliche common.js, global.js etc. einfügen:

mw.loader.load( "https://en.wikipedia.org/w/index.php?title=User:PerfektesChaos/js/idResolver/r.js&action=raw&bcache=1&maxage=604800&ctype=text/javascript" );
  • Wer fliegelflagel@Schnark (Neufassung 2017) benutzt, kann das Skript mit einem einfachen Häkchen aktivieren und deaktivieren.
  • Auch nicht angemeldete Benutzer können es benutzen. Siehe Greasemonkey und vergleichbare Techniken.

Selektive Aktivierung

Namensräume

Auf den nachstehenden Seiten wird in Normalansicht und Seitenvorschau das Skript aktiv:

Weitere Seiten können zusätzlich durch interaktive Schnellkonfiguration oder Option rooms vorgegeben werden.

Derzeit werden keine relevanten Links auf Spezialseiten erwartet, aber das ändert sich, sobald Links in den BNR ins Spiel kommen.

Toolbox

Auf einer geeigneten Seite werden die einschlägigen Verlinkungen umgewandelt. Das kann zurückgestellt werden durch interaktive Schnellkonfiguration oder Option lazy. In der linken Spalte einer Desktop-Seite wird ein Link in der Gruppe Werkzeuge eingefügt.

Individuelle Buttons

Experten können die automatische Modifikation blockieren und eigene Möglichkeiten zur nachträglichen Auslösung der Linkumwandlungen bereitstellen, etwa persönliche Buttons.

var resolverOpts = { };
resolverOpts.lock = true;
mw.hook( "idResolver.before" ).fire( resolverOpts );
mw.loader.load( /* ... */ );

function myResolverButton( action ) {
   // Button erstellen und einfügen ...
   $button.click( action );
}
mw.hook( "idResolver.fire" ).add( myResolverButton );

action ist eine function ohne Parameter, die das umfangreichere Laden des Funktionskerns und die Modifikation der aktuellen Seite auslöst.

Die Option lock blockiert die automatische Modifikation.

Wenn es nichts zu tun gibt, wird myResolverButton nie aufgerufen und somit auch kein funktionsloser Button generiert.

Link-Typen

ISBN

Links, die auf Spezial:ISBN-Suche verweisen (mit aktuellem Wert) bieten mehrere Ziele an:

  • ursprüngliche Spezial:ISBN-Suche-Verlinkung
  • WorldCat-Eintrag
  • Bibliotheken abhängig von der Sprache der ISBN
  • Benutzerdefinierte Zuweisungen von Sprachcodes zu bestimmten Bibliothekskatalogen

Der gesamte Link kann auf einen einzelnen Bibliothekskatalog der Heimat-Uni oder der Staatsbibliothek um die Ecke umgelenkt werden; siehe shift-Konfiguration.

Siehe unten zur persönnlichen Konfiguration der Bibliothekskataloge.

DOI

Jede URL, die mutmaßlich einen Digital Object Identifier (DOI) enthält, bekommt eine Auswahlbox mit:

  • ursprüngliche URL
  • dx.doi.org – der generische Resolver
  • doai.io
  • openaccessbutton.org
  • sci-hub.io
  • scholar.google.de

Der handler code ist: doi – siehe Handler-Konfiguration zur Ausweitung der persönlichen Auswahlliste.

ISSN

Jede URL, die mutmaßlich eine International Standard Serial Number (ISSN) enthält, bekommt eine Auswahlbox mit:

  • ursprüngliche URL
  • WorldCat-Eintrag
  • JSTOR-Verzeichnis
  • Zeitschriftendatenbank (ZDB) der DNB
  • Französische Nationalbibliothek, Katalog der Periodika

Der handler code ist: issn – siehe Handler-Konfiguration zur Ausweitung der persönlichen Auswahlliste.

DNB

Einige URL, von denen bekannt ist, dass sie eine GND-Nummer enthalten, bekommen eine Auswahlbox mit:

  • ursprüngliche URL
  • d-nb.info (wenn nicht identisch)
  • deutsche-digitale-bibliothek.de

Der handler code ist: dnb – siehe Handler-Konfiguration zur Ausweitung der persönlichen Auswahlliste.

www

Alle externen Verlinkungen, auf die keine vorgenannten Regeln angewendet wurden, können in die Anzeige von Auswahlboxen umgewandelt werden, falls explizit mittels Benutzerkonfiguration oder Option linking angefordert. Die folgende Liste wird angeboten:

  • ursprüngliche URL
  • web.archive.org
  • www.webcitation.org
  • archive.is

Der handler code ist: www – siehe Handler-Konfiguration zur Ausweitung der persönlichen Auswahlliste.

Dokumentenformate

Die folgenden Dokumentenformate werden aus dem Pfad der URL geraten:

ID icon ext start
pdf Icons-mini-file acrobat.gif PDF [./=]
msexcel Page white excel.png XLS \.
msword Page white word.png DOC \.

Durch die JavaScript-Option types und ihre object-Komponenten können Typen hinzugefügt oder verändert werden:

  • object-Komponente: ID
  • Der ID zugeordnetes object mit Komponenten:
    • ext – einfacher string mit der „Dateinamenserweiterung“ (wird sowohl in Großbuchstaben als auch in Kleinbuchstaben gesucht)
    • startRegExp-string, der dem ext vorangehen soll; Standardwert ist \.
    • commons – URL-Pfad für Commons upload, Abschnitt wie x/xx/title.ext
  • oder Zuweisung von false – keinen derartigen Icon benutzen.

Benutzerkonfiguration

Persönliche Anpassungen sind möglich.

Interaktive Schnellkonfiguration

Einige der unten beschriebenen Optionen können nach Installation des Skriptes auf einer Spezialseite interaktiv konfiguriert werden.

Diese dynamischen Änderungen überschreiben die statische Konfiguration über JavaScript.

Auch nicht angemeldete Benutzer können davon Gebrauch machen; während die Konfiguration für angemeldete Benutzer beim Benutzerprofil auf dem Wiki-Server gespeichert ist, wird hier das Browserprofil benutzt.

Konfiguration über JavaScript

Zeilen wie die folgenden sind in common.js etc. vor mw.loader.load einzufügen:

var resolverOpts = { };       // beliebigen Namen wählen
resolverOpts.key1 = value1;   // Beispiel
// ... etc.
mw.hook( "idResolver.before" ).fire( resolverOpts );
mw.loader.load( /* ... */ );    // wie oben

Komponenten und einfache Schalter

Komponente Vorgabe Bedeutung
launch false Starte auf allen Seiten in allen Namensräumen.
layer false true – Popup-Blase über dem Text undurchsichtig
lazy false Starte auf ausdrückliche Anforderung.
true – erstelle nur Link in der Gruppe Werkzeuge
light false Unterlasse individuellen Farbwechsel besuchter Links.
true – Die Farbe aller modifizierten Verlinkungen auf der Seite wird sich permanent ändern, nachdem die erste angeklickt wurde
linking false Alle externen Verlinkungen mit Auswahlbox.
true – alle externen Verlinkungen, die nicht bereits modifiziert wurden, bieten möglicherweise archivierte Alternativen an
lock false Modifikation der Seiten blockieren.
true – mache nichts außer ein Link in der Gruppe „Werkzeuge“ zu erstellen, falls dies mit lazy angefordert
false – modifiziere alle geeigneten Seiten, falls nicht ein Link in der Gruppe „Werkzeuge“ angefordert wurde
make 0 Lenke die modifizierten Verlinkungen in anderen Tab/Window.
0 – immer das gleiche (aber nicht momentane) Window.
1 – das gleiche Window für jede Aufgabe
2 – das gleiche Window für jede Domain
3 – immer ganz neues Window
seen 00008B Hexadezmaler Farbcode für den Status “visited” besuchter modifizierter Verlinkungen.
rooms null Array mit Namensraumnummern.
Vorgabe: siehe Namensräume
types null object für „Dateinamenserweiterungen“
Vorgabe: siehe Dokumentenformate
cfg null object für Handler-Konfiguration
debug false Entwicklermodus.
false – minimierten Code verwenden.
true – menschenlesbaren Code verwenden.

Handler-Konfiguration

Die Regeln, wie mit einem Typ von ID umzugehen sei, werden handler genannt.

  • Eine einzelne Regel ist ein URL-Muster, das ein Zeichen # enthält.
  • Die betreffende ID wird das erste # ersetzen, das ja nicht in produktiven URL für den Zugang zur Zielseite vorkommen kann; ohnehin wird nur das erste Vorkommen ersetzt.
  • Beim handler für www ist die ID die gesamte URL, andernfalls eine spezifische Nummer etc.
  • Mehrere Regeln können vorgegeben werden. Es wird erwartet, dass sie eine Liste ergeben, die als Array gespeichert wird.
  • Wenn sich aus irgendeinem Grund eine einzelne Regel in der Zusammenstellung wiederholt, werden solche Dubletten ausgefiltert.

Der gesamte handler für einen bestimmten Typ von ID ist einer der folgenden:

  • Der Wert false – ignoriere diesen Typ von ID vollständig.
  • Ein object mit
    • einer Komponente shift
      • Dies ist ein string mit einem URL-Muster.
      • Alle Anfragen nach einer ID von diesem Typ werden unmittelbar auf die resultierende URL umgelenkt.
      • Alle anderen Komponenten werden ignoriert.
    • einer Komponente resolver
      • Dies ist ein Array; jedes ELement ein string mit einem URL-Muster.
      • Diese werden den eingebauten URL-Mustern für derartige ID hinzugefügt.
      • Für den Typ isbn ist der handler ein object mit Sprachcodes als Komponenten; siehe unten.

Die Komponente cfg des Anwendungsobjekts resolverOpts (oder jeder andere Name) liefert die Information, wie handlers aussehen sollen. Es ist ein object mit der ID als Komponente.

var resolverOpts = { };
resolverOpts.cfg = { };
// Verlinke Tool mit momentaner GND
resolverOpts.cfg.dnb = { resolver: [ "https://tools.wmflabs.org/persondata/p/gnd/#" ] };
// Lenke alle ISBN direkt auf den KVK um
resolverOpts.cfg.isbn = { shift: "http://www.ubka.uni-karlsruhe.de/kvk.html?SB=#" };
// DOI nicht auswerten
resolverOpts.cfg.doi = false;
// ... etc.
ISBN-Handhabung

Der handler code ist: isbn

Abhängig von der menschlichen Sprache, die jede ISBN preisgibt, wird ein bestimmter Satz an Bibliothekskatalogen ausgewählt:

  • qqq – für alle Sprachen.
  • en oder fr oder de etc. – bestimmte Kataloge filtern.

Der handler für ISBN unterscheidet sich leicht von den anderen. Es ist ein object mit den Sprachcodes als Komponenten. Diesen sind Arrays zugeordnet, die URL-Muster wie die anderen handler enthalten. Anders ausgedrückt: Die Sprachcodes treten an die Stelle der einzelnen resolver-Komponente.

resolverOpts.cfg.isbn =
    { qqq: [ "http://catalog.loc.gov/vwebv/search?searchCode=ISBL&searchType=1&searchArg=#" ],
      de:  [ "http://www.ubka.uni-karlsruhe.de/kvk.html?SB=#" ]
    };

Benutze zusätzlich die Library of Congress für alle Bücher, und füge den KVK den deutschsprachigen Bibliothekskatalogen hinzu.

mw.libs

Die Anwendung ist auch auf mw.libs.idResolver hinterlegt. Der nachstehende Code könnte als Projektvorgabe genutzt werden, aber die Vorgaben können durch individuellen hook übersteuert werden:

if ( typeof mw.libs.idResolver !== "object" ) {
   mw.libs.idResolver = { };
}
if ( typeof mw.libs.idResolver.opt !== "object" ) {
   mw.libs.idResolver.opt = { };
}
mw.libs.idResolver.opt.key1 = value1;   // example

Die Komponente opt von mw.libs.idResolver hat ähnlichen Inhalt wie “resolverOpts” in einem hook-Aufruf.

Codes und Softwarefragen

Siehe Dokumentation in der englischsprachigen Wikipedia.