Benutzer:PerfektesChaos/js/listPageOptions

JavaScript-Benutzerskript, um bei Beobachtungslisten und der Seite Letzte Änderungen der Benutzeroberfläche besondere Möglichkeiten hinzuzufügen.

Zurzeit werden acht Funktionalitäten unterstützt:

  1. Spontanes Umschalten der „Mehrfachen Einträge“ auf der Beobachtungsliste.
  2. Spontanes Umschalten der „Seitenbezogenen Gruppierung“ auf der Beobachtungsliste und den „Letzten Änderungen“.
  3. Mehrere Optionen gleichzeitig umschalten, um von einem Szenario in ein anderes zu wechseln.
  4. Bestimmte Arten von Einträgen ausfiltern.
  5. Seiten auf der Beobachtungsliste mit einem Klick nicht mehr beobachten.
  6. Einzelne Seiten auf der Beobachtungsliste mit einem Klick als besucht markieren.
  7. Optionsblock komprimiert darstellen, um auf kleinen Bildschirmen Platz zu sparen.
  8. Optionsblock ein- und ausblenden.

Es wird nur die optische Darstellung der Seite und der Abruf weiterer Seiten beeinflusst, jedoch keine Analyse der Datenbank-Einträge vorgenommen.

Einbindung

  • Wenn das Projekt dieses Gadget bereits registriert haben sollte, genügt ein Häkchen auf der Seite Einstellungen („Helferlein“).
  • Sonst wären die folgenden Zeilen in die persönlichen JS-Einstellungen einzufügen:
mw.loader.load( "https://en.wikipedia.org/w/index.php?title=User:PerfektesChaos/js/listPageOptions/r.js&action=raw&bcache=1&maxage=604800&ctype=text/javascript",
                "text/javascript" );
  • Wer fliegelflagel@Schnark benutzt, kann das Skript mit einem einfachen Häkchen aktivieren und deaktivieren.
  • Auch nicht angemeldete Benutzer können es benutzen; zumindest für die „Letzten Änderungen“. Siehe Greasemonkey und vergleichbare Techniken.

Wirkung

„Mehrfache Einträge“ auf der Beobachtungsliste umschalten

Eigentlich muss man sich in den persönlichen Einstellungen für das weitere Arbeiten entscheiden, ob für jede Seite genau eine Änderung oder aber mehrere Aktivitäten angezeigt werden sollen („erweitert“), wenn es im Zeitraum mehrere Vorgänge gab.

Im Block der „Anzeigeoptionen“ auf der Beobachtungsliste wird eine Checkbox hinzugefügt, die über den zuletzt gewählten Wunsch voreingestellt wird. Wird hier ein Häkchen gemacht oder entfernt und anschließend Anwenden gedrückt oder eines der Links zu den anderen Optionen angeklickt, wird die neu aufgebaute Seite entsprechend dargestellt. War die seitenbezogene Gruppierung aktiv, wird sie automatisch abgeschaltet.

Beeinflusste Seiten:

  • Jede Beobachtungsliste („Änderungen“).

Seitenbezogene Gruppierung umschalten

Für die genannten Spezialseiten wird eine allgemeine Einstellung angeboten, die bei allen diesen Listen gleiche Seiten zunächst in Gruppen zusammenfasst, die später aufgeklappt werden können.

Zurzeit gilt das immer für alle Seiten einheitlich, was gelegentlich nicht angemessen ist. Dieses Gadget bereitet einen Weg, diese Eigenschaft vorübergehend individuell ein- und auszuschalten, wenn es erforderlich oder gerade unerwünscht ist.

Im Block der „Anzeigeoptionen“ auf den Spezialseiten wird eine Checkbox hinzugefügt, die über den zuletzt gewählten Wunsch voreingestellt wird. Wird hier ein Häkchen gemacht oder entfernt und anschließend Anwenden gedrückt oder eines der Links zu den anderen Optionen angeklickt, wird die neu aufgebaute Seite entsprechend dargestellt. Sind zurzeit die „Mehrfachen Einträge“ nicht aktiv, werden sie automatisch zugeschaltet.

Beeinflusste Seiten:

  • Erweiterte Beobachtungsliste – Wenn das nicht in den persönlichen Einstellungen aktiviert wurde, würde ohnehin immer nur die letzte Aktivität gezeigt, und diese kann nicht sinnvoll als Block gruppiert werden. Alternativ wird bei Bedarf spontan in diesen Modus geschaltet.
  • Letzte Änderungen.

Mehrfache Optionen gleichzeitig umschalten

Will man von einem Szenario in ein anderes wechseln, also beispielsweise von „alle Namensräume der letzten Stunde“ zu „nur Artikel der letzten 30 Tage“, dann ist normalerweise der Aufbau einer Zwischenseite erforderlich.

Dieses Werkzeug aktualisiert standardmäßig alle Direktverlinkungen sofort, wenn eine Option des Formulars verändert wird, also ein Häkchen in einer Checkbox gemacht wird oder ein Namensraum ausgewählt wird. Anschließend kann dann Anwenden oder ein Zeitraum angeklickt werden, um den Neuaufbau auszulösen.

Mit der Option learn lassen sich den Links für das Ein- und Ausblenden weitere Checkboxen hinzufügen, sodass auch diese in eine gesammelte Konfiguration einbezogen werden können.

Beeinflusste Seiten:

  • Jede Beobachtungsliste („Änderungen“).
  • Letzte Änderungen.

Nicht beobachten

Ein Link (wie + [Nicht-beobachten]) wird der Werkzeugbox des Portals (üblicherweise in der Spalte auf der linken Seite) hinzugefügt. Wird er angeklickt, so wird jedem Seiteneintrag ein Button (wie [—]) hinzugefügt. Wird dieser angeklickt, dann wird per API diese Seite aus der Beobachtung entfernt. Sollte das irrtümlich geschehen sein, nimmt ein erneuter Klick auf die gleiche Stelle die Seite wieder in die Beobachtungsliste auf.

Beeinflusste Seiten:

  • Jede Beobachtungsliste („Änderungen“).

Seit Sommer 2017 kann als Einstellung „Direkte Markierungen zum Nichtbeobachten/Beobachten (×/+) zu beobachteten Seiten mit Änderungen hinzufügen (erfordert JavaScript)“ bewirkt werden, dass immer jeder Seiteneintrag mit einer analogen Schaltfläche ausgestattet wird.

Seiten als besucht markieren

Seiten können als „bereit besucht“ einzeln markiert werden, sofern dies angefordert wird. Sie ändern daraufhin das Erscheinungsbild und lassen sich auch vorübergehend ausblenden.

  • Es kann der Werkzeugbox des Portals (üblicherweise in der Spalte auf der linken Seite) ein Link (wie + [Gesehen]) hinzugefügt werden. Wird er angeklickt, so wird jedem Seiteneintrag ein Button (wie +) hinzugefügt. Wird dieser angeklickt, dann wird per API ein Besuch dieser Seite simuliert.
    • Waren bereits alle Seiten der Liste besucht gewesen, erscheint auch kein Link.
  • Alternativ können bereits beim Seitenaufbau alle noch unbesuchten Einträge mit einem Button versehen werden.

Beeinflusste Seiten:

  • Jede Beobachtungsliste („Änderungen“).

Benutzerkonfiguration

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

Interaktive Schnellkonfiguration

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

Das gilt jedoch nicht für die komplexeren Filterregeln über Array.

Auch nicht angemeldete Benutzer können davon Gebrauch machen; die „Letzten Änderungen“ stehen auch ihnen zur Verfügung, obwohl sie keine Beobachtungsliste nutzen können.

Konfiguration über JavaScript

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

if ( typeof mw.libs.listPageOptions !== "object" ) {
   mw.libs.listPageOptions  =  { };
}
mw.libs.listPageOptions.key1 = value1;
Key Value Bedeutung
lean true Komprimierter Optionsblock.
Default: false – ungeändertes Layout.
learnt false Möglichkeit zum Verbergen besuchter Änderungen auf der Beo.
Default: null – keine Möglichkeit.
false – Zusatz-Link; Vorgabe: alle anzeigen.
true – Zusatz-Link; Vorgabe: besuchte ausblenden.
leyo false Möglichkeit zum Verbergen eigener letzter Beiträge auf der Beo.
Default: false – Anzeigen.
true – Verbergen bei seitenbezogener Gruppierung, wenn jüngster Beitrag selbst geschrieben.
looked false Einzelseiten als besucht markieren können.
Default: null – keine zusätzlichen Knöpfe.
false – Link zum Einblenden.
true – von Anfang an Einblenden.
lower true Zusätzliche Knöpfe zum Ein- und Ausblenden des Optionsblocks.
Default: null – keine zusätzlichen Knöpfe.
false – Knopf zum Ausblenden.
true – Ausblenden; Knopf zum Einblenden.
luxury true Zusätzliche Checkboxen zum Ein- und Ausblenden.
Default: false – keine zusätzlichen Checkboxen.
hide Array Einträge verstecken.
Default: nichts verstecken.

Beispiel:

if ( typeof mw.libs.listPageOptions !== "object" ) {
   mw.libs.listPageOptions  =  { };
}
mw.libs.listPageOptions.learnt = true;
mw.libs.listPageOptions.hide   = [ [ true,  "Logbuch/articlefeedback", 2 ],
                                   [ false, "Benutzer(in)?:", 2 ],
                                   [ false, "([A-Z][a-z]+_)?Diskussion:", 2 ],
                                   [ false, "Wikipedia:(Import|L%C3%B6schk|Spielwiese)", 2 ],
                                   [ false, false, 2, "PerfektesChaos$" ],
                                   [ false, false, 0, "(Archivbot|DrTrigonBot)$" ]
                                 ];


Einzelne Optionen

Bestimmte Einträge verstecken

Die Option .hide ist ein Array, das Arrays mit Regeln enthält.

Jedes Regel-Element ist ein Array mit zwei bis fünf Elementen.

Array mit einzelner Regel
[0] Markierung für Spezialseiten.
true = Spezialseite und false = reguläre Seite.
[1] Muster für Seitenname.
Stil eines Regulären Ausdrucks als Zeichenkette.
Wenn false, dann alle Seiten; aber Einschränkung über den Benutzernamen (oder anderes?) erforderlich.
[2] (optional) Regel auf bestimmte Auflistungen beschränken.
  • 0 oder keine Angabe: Jede Seitenliste.
  • 1: Nur Beobachtungsliste.
  • 2: Nur Letzte Änderungen.
[3] (optional) Muster für Namen des ausführenden Benutzers.
Stil eines Regulären Ausdrucks als Zeichenkette.
Bei „seitenbezogener Gruppierung“ nur bedingt einsetzbar.
[4] (optional) Regel nur auf kleine Änderungen anwenden.
  • Als Spezialseiten können eigentlich nur Logbücher auftreten.
    • Sollen nur bestimmte Logbücher ausgeblendet werden, kann die Auswahl in Klammern eingeschlossen werden: "Logbuch/(articlefeedback|block|upload)"
    • Um alle Logbücher auszuschließen, würde "" jeden Bezug zu einer Spezialseite unterdrücken. Das ist mit der standardmäßig angebotenen Namensraum-Auswahl nicht möglich.
  • Betreffend normaler Seiten müsste der Namensraum spezifiziert werden. Wenn nur einige Seiten ausgeschlossen werden sollen, müsste der charakteristische Beginn des Seitentitels folgen.
  • Für anonyme Benutzer wäre das Muster zu bilden nach dem Beispiel: Beiträge/127.0.0.1

Regulärer Ausdruck:

  • Angegeben wird immer der Beginn des Seitennamens (mit Namensraum; bei Markierung für Spezialseite ohne) oder Benutzernamens.
  • Soll der Ausdruck exakt bis zum Ende reichen, ist zum Schluss ein $ (Dollarzeichen) anzugeben.
    • regel[3] = "Foo$"; blendet nur Benutzer:Foo aus, nicht aber Benutzer:FooBar.
  • Mehrere Optionen können in runde Klammern gesetzt werden und durch Pipe getrennt werden.
    • regel[1] = "Wikipedia:(Administratoren|Auskunft|Fragen zur |Import|Löschk|Spielwiese)";
  • Es kann der formatierte Name (also mit Umlauten usw., auch mit Leerzeichen) benutzt werden, sofern kein Prozentzeichen vorkommt. Wenn ein Prozentzeichen vorkommen soll, muss exaktes URL-Encoding benutzt werden, so wie es in der URL steht.
    • Die Zeichen ^ . * + ? ( ) \ $ können in Wiki-Namen vorkommen, aber haben eine Sonderbedeutung in Regulären Ausdrücken. Sie könnten durch vorangesetzte \\ maskiert werden, oder es wird das Prozentzeichen-Format benutzt.
  • Wenn möglichst alle Artikel gemeint sind, können alle Seitennamen ausgeschlossen werden, in denen kein Doppelpunkt vorkommt. CSI: Miami schlüpft dann noch durch, aber der Großteil der Artikel wird ausgefiltert; dies wäre mit vertrauenswürdigen Benutzernamen zu verbinden.
    • [false, "[^:]+$", 0, "X1x$", true]
      • (Ausblendung fast aller von Benutzer:X1x an Artikeln vorgenommenen kleinen Änderungen auf Beo und RC).

Beeinflusste Seiten:

  • Jede Beobachtungsliste („Änderungen“).
  • Letzte Änderungen.

Besuchte Seiten

Mit der Option .learnt wird ein zusätzliches Link angeboten, das die bereits besuchten Seiten aus der Liste ausblendet. Die Ein- und Ausblendung kann beliebig oft umgeschaltet werden, ohne die Seite neu abzurufen (dies im Unterschied zu einer im September 2013 eingeführten neuen Option).

  • Sind alle gezeigten Seiten gleichermaßen besucht oder noch nicht gesehen, wird das Element ausgegraut.
  • Die Information über den Seitenbesuch stammt vom Server. Zur Aktualisierung ist ein Neuaufbau der Seite erforderlich.

Der zuletzt aktivierte Zustand wird in einem Super Cookie während der Browser-Sitzung gespeichert, so dass er beim erneuten Abruf der Seite erhalten bleibt. Der Wert der Option .learnt ist der Startwert beim Sitzungsbeginn.

Beeinflusste Seiten:

  • Jede Beobachtungsliste („Änderungen“).

Verbergen eigener letzter Beiträge

Bei „seitenbezogener Gruppierung“ kann ein Block ausgeblendet werden, wenn die jüngste Bearbeitung selbst verfasst wurde (letzte Antwort in der Diskussion; soeben revertiert). Das ist mit der Option .leyo (last edit your own) möglich, wenn true gesetzt wird. Dazu muss aber hideOwn=0 stehen (eigene Beiträge dürfen nicht versteckt werden), weil sonst in der HTML-Seite die eigene Bearbeitung nicht bekannt wäre.

Beeinflusste Seiten:

  • Beobachtungsliste („Änderungen“) mit seitenbezogener Gruppierung und Anzeige eigener Beiträge.

Optionenbereich komprimieren

Die Optionen sind (mit oder ohne Gadget) zeilenweise gegliedert und gruppiert. Mit der Option .lean lassen sie sich platzsparend anordnen – sind dadurch naturgemäß nicht mehr übersichtlich.

Beeinflusste Seiten:

  • Jede Beobachtungsliste („Änderungen“).
  • Letzte Änderungen.

Dazu passt die CSS-Anweisung für die common.css

FORM#mw-watchlist-resetbutton ul li {
   display: none;
}

Einzelne Seiten als besucht markieren

Wenn die Option .looked vom Typ boolean ist, werden für alle noch nicht besuchten Seiten Buttons angeboten, die einen Besuch simulieren.

  • false – Link zum Einblenden der Buttons in der Werkzeugbox des Portals.
  • true – Bereits beim Seitenaufbau alle Buttons einblenden.

Beeinflusste Seiten:

  • Jede Beobachtungsliste („Änderungen“).

Optionenbereich einklappbar

Mit der Option .lower werden zusätzliche Schaltelemente angeboten, mit denen sich der Block für Anzeigeoptionen (teils auch Benachrichtigungen und weiteren Informationen) ein- und ausblenden lässt. Damit kann bei begrenztem Bildschirmplatz und unveränderten Optionen für die Liste mehr Nutzfläche geschaffen werden. Zum Ausblenden wird rechts oben im Optionsblock ein X angeboten.

Der zuletzt aktivierte Zustand wird in einem Super Cookie während der Browser-Sitzung gespeichert, so dass er beim erneuten Abruf der Seite erhalten bleibt. Der Wert der Option .lower ist der Startwert beim Sitzungsbeginn.

Beeinflusste Seiten:

  • Jede Beobachtungsliste („Änderungen“).
  • Letzte Änderungen.

Anmerkung

Eigentlich ist es nicht erforderlich, dass diese Funktionalität von einem externen Gadget erbracht wird. Vielleicht wird das eines Tages von einer Lösung auf dem Mediawiki-Server geleistet, zumindest das vorübergehende Umschalten in die seitenbezogene Gruppierung.

Codes und Stammseite

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

Quellcode
ResourceLoader
  • ext.gadget.listPageOptions für mw:Extension:Gadgets
  • Dependencies: user, user.options, mediawiki.api, mediawiki.api.watch, mediawiki.user, mediawiki.util
Namensräume -1
(Watchlist, Recentchanges, Blankpage)
Cookies
  • listPageOptions (sessionStorage)
  • preferencesGadgetOptions (localStorage) – nicht angemeldete Benutzer
mw.libs listPageOptions