JavaScript Benutzerskript, das vorhandene Anker im HTML-Dokument anzeigt und darauf aufmerksam macht, falls solche mehrfach vergeben wurden oder sonstwie inkonsistent sind:

  • Zeige ein Anker-Symbol bei allen Positionen, wo ein sichtbares Element angesprungen werden kann.
    • Der Name des Bezeichners wird vorübergehend als Tooltip unterhalb des Anker-Symbols angezeigt, wenn der Mauszeiger darüber schwebt.
    • Der Bezeichner wird dekodiert und in menschenlesbares Format („Name“) überführt.
    • Das Anker-Symbol kann angeklickt werden und zeigt dauerhaft unterhalb des Symbols die Wikisyntax für einen internen Link zu dieser Stelle. Dies kann mit Copy&Paste übernommen werden. Ein zweiter Klick schaltet diese Anzeige wieder ab.
  • Um die Seiten schneller aufbauen zu können, läuft die Ausstattung nicht automatisch.
    • In der Werkzeugbox (gewöhnlich in der linken Spalte des Portals) wird zunächst nur ein Link angeboten, mit dem gleichen Anker-Symbol.
  • Nach dem Anklicken wird die Seite wie gewünscht dekoriert, und der Werkzeug-Link wird entfernt.
  • Wenn eine id im HTML-Dokument wiederholt wird, kann nur das erste Vorkommen angesprungen werden und alle weiteren sind unerreichbar.
    • Jede mehrfache id wird durch rotes Anker-Symbol auf gelbem Grund markiert; zeigt aber ansonsten das gleiche Verhalten.
    • Leere Bezeichner sind ebenfalls ungültig und werden genauso gekennzeichnet; sie sind eine Dopplung zum Dokument als Ganzes.
  • Wenn eine Verlinkung innerhalb der Seite keine Zielmarke hat, wird davor # eingefügt.
    • Das ist jedoch nur in der Gesamt-Seitenansicht möglich; nicht bei der Vorschau von vielleicht lediglich abschnittsweiser Bearbeitung.
    • Wenn eine innere Verlinkung mehrfach definierte Sprungmarken zum Ziel hat (bereits mit rotes Anker-Symbol auf gelbem Grund markiert), so ist ungewiss, welche davon ursprünglich gemeint war. Deshalb werden die Verlinkungen darauf ebenfalls als ungültig markiert.
  • Falls ein Strukturfehler erkannt wird, wird im Kopfbereich der Seite ein Warnhinweis eingefügt.
    • Mehrfach definierte Sprungmarken werden aufgezählt, wobei die Gesamthäufigkeit vorangestellt wird.
    • Fehlende Sprungadressen werden aufgezählt, wobei die Zahl der Verlinkungen mit Minuszeichen vorangestellt wird.
  • Einige Bezeichner funktionieren zwar, haben jedoch ein unerwünschtes Format; enthalten reservierte Zeichen usw.
    • Hier wird das Anker-Symbol in roter Farbe rotes Anker-Symbol dargestellt bei ansonsten unverändertem Verhalten.
  • Standardmäßig wird nur der Inhaltsbereich dekoriert, während im konstanten Portal-Rahmen gültige Anker nicht markiert werden.
    • Es kann konfiguriert werden, dass das gesamte HTML-Dokument dekoriert wird.
  • Installation

    Bearbeiten

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

    mw.loader.load( "https://en.wiki.x.io/w/index.php?title=User:PerfektesChaos/js/fragmentAnchors/r.js&action=raw&bcache=1&maxage=604800&ctype=text/javascript" );
    

    Nicht angemeldete Benutzer können das Skript mittels Greasemonkey einbinden.

    Benutzerkonfiguration

    Bearbeiten

    Persönliche Anpassungen sind möglich.

    Das optische Erscheinungsbild kann durch CSS geändert werden.

    Die folgenden Selektoren werden bereitgestellt:

    • .fragmentAnchors-mark – alle eingefügten Elemente
    • .error-repeated-id – Symbole bei mehrfachen id
    • .fragmentAnchors-inner – alle seiteninternen Verlinkungen
    • .fragmentAnchors-broken – alle seiteninternen Verlinkungen ohne Ziel
    • #fragmentAnchors-errors – Zusammenfassung bei Strukturfehlern
    • .error – Zusammenfassung bei Strukturfehlern

    Konfiguration über JavaScript

    Bearbeiten

    In die common.js, global.js etc. die folgenden Zeilen einfügen (möglichst vor mw.loader.load, so vorhanden):

    if ( typeof mw.libs.fragmentAnchors !== "object" ) {
       mw.libs.fragmentAnchors = { };
    }
    

    Danach sind zurzeit drei Optionen konfigurierbar:

    mw.libs.fragmentAnchors.large = true;
    

    Daraufhin wird die gesamte HTML-Seite dekoriert und nicht nur der Inhaltsbereich.

    mw.libs.fragmentAnchors.launch = true;
    

    Das löst nach dem Laden die sofortige Dekoration der Seite aus, ohne einen Link in der Werkzeugbox zu generieren. Es wird unterstellt, dass das Laden des Skriptes durch geeignete Bedingungen eingeschränkt wird.

    mw.libs.fragmentAnchors.lock = true;
    

    Dies verhindert die Generierung eines Links in der Werkzeugbox und gibt Gelegenheit, die Merhoden .fetch() und .fire() aufzurufen.

    Nach Auslösen des mw.hook fragmentAnchors.ready kann eine Funktion aufgerufen werden. Dabei ist der von mw.hook übergebene Parameter das Anwendungsobjekt und müsste mit mw.libs.fragmentAnchors identisch sein.

    Funktionen sind Komponenten des Anwendungsobjekts.

    .fetch()

    Bearbeiten

    Ermittle alle Fragmente im HTML-Dokument (jeweils beginnend mit # und nicht dekodiert).

    Aufruf .fetch()
    Rückgabewert
    • Array – drei Elemente
      • [0] Array aus string – alle gültigen Fragmente im Fokus
      • [1] Object – alle ungültigen Fragmente, sonst false
        • Jede Komponente ist ein Fragment.
        • Diesem ist die Häufigkeit des Vorkommens zugewiesen.
      • [2] Object – alle fehlenden inneren Sprungziele, sonst false
        • Jede Komponente ist ein Fragment.
        • Diesem ist die Häufigkeit des Vorkommens zugewiesen.
    • false – noch nicht bereit

    Das Dokument wird nicht dekoriert, ausgenommen an Stellen aufgefundener Fehler.

    Dekoration der Seite durch externen Befehl auslösen.

    Aufruf .fire()
    Rückgabewert
    • true – erfolgreich
    • false – noch nicht bereit, oder bereits ausgeführt

    Sollte zuvor .lock = true; deklarieren, falls der Link in der Werkzeugbox unerwünscht ist.

    Quellcode Siehe Dokumentation in der englischsprachigen Wikipedia.
    ResourceLoader
    • ext.gadget.fragmentAnchors für mw:Extension:Gadgets
    • Dependencies:
      • Keine (beim Laden; selbst-anfordernd)
      • Später (1./2. zum Start, 3. wenn aktiviert)
        1. user
        2. mediawiki.util
        3. jquery.tipsy
    Namensräume Alle.
    mw.libs fragmentAnchors
    mw.hook fragmentAnchors.ready

    Wenn die Seite miit dem Werkzeuglink ausgestattet wurde, oder sonst bereit zur Dekoration ist.

    Testprozedur zur Prüfung auf Erfüllung der Grundfunktionalität (englisch).