Benutzer:PerfektesChaos/js/idResolver
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:
- 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:
- Alle Artikel.
- Alle eigenen Benutzer-Unterseiten.
- Wikipedia:Spielwiese.
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 Resolverdoai.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
|
[./=]
| ||
msexcel
|
XLS | \.
| |
msword
|
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)start
– RegExp-string, der demext
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 angefordertfalse – 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 Aufgabe2 – das gleiche Window für jede Domain3 – 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.
- einer Komponente
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
oderfr
oderde
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.