MediaWiki Diskussion:Gadget-markAdmins.js

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 12 Jahren von TMg in Abschnitt Optimierter Quelltext
Zur Navigation springen Zur Suche springen

Optimierter Quelltext[Quelltext bearbeiten]

Der Quelltext hier ist aus mehreren Gründen nicht sehr elegant. Ich schlage deshalb folgenden neuen Quelltext vor:

var UrlParameters = (function(s)
{
  var parameters = {};                      //Assoziative Arrays gibt es nicht, muss ein Objekt sein
  s = s.slice(1).split('&');                //Fragezeichen abschneiden und in Parameter zerlegen
  for (var i = 0, l = s.length; i < l; i++)
  {
    var p = s[i].split('=');                //Parameter in Name und Wert zerlegen
    if (p[0]) parameters[decodeURIComponent(p[0])] = p[1] ? decodeURIComponent(p[1]) : true;
  }
  return parameters;                        //Fertiges Pareameterobjekt zurückgeben
})(location.search);                        //Aufruf der Funktion und Übergabe des Suchstrings

importScript('Benutzer:PDD/markAdmins.js'); //[[Benutzer:PDD/markAdmins.js]]

Im Kern habe ich zwei große Dinge geändert:

  1. Ich habe alle Variablendefinitionen entfernt. Einige waren veraltet und wurden von Benutzer:PDD/markAdmins.js sowieso nicht mehr ausgewertet. Alle anderen entsprachen sowieso den Vorgaben von Benutzer:PDD/markAdmins.js. Der wichtigste Grund für die Entfernung ist aber, dass es durch die hier stehenden starren Zeilen unmöglich war, das Gadget mit Hilfe eben dieser Variablen individuell zu konfigurieren, so wie es eigentlich vorgesehen ist.
  2. Den verbleibenden Quelltext habe ich weitestgehend neu geschrieben und dabei auf die Ausführungsgeschwindigkeit geachtet, vor allem aber auch darauf, dass möglichst nichts in den globalen Variablenraum von JavaScript abstrahlt und somit möglichst wenig Seiteneffekte entstehen.

--TMg 15:10, 29. Dez. 2011 (CET)Beantworten

Dass das unmöglich sein soll, das Gadget zu konfigurieren, halte ich für einen Irrtum. In meiner vector.js jedefalls sind Anpassungen, die vom Gadget gelesen / verstanden werden..... :D Ansonsten sieht das gut aus - nachher mal testen. --Guandalug 15:15, 29. Dez. 2011 (CET)Beantworten
In deiner vector.js hast du nur Variablen definiert, die das Gadget nicht überschreibt. Alle, die hier aufgeführt sind, lassen sich nicht konfigurieren. --TMg 15:30, 29. Dez. 2011 (CET)Beantworten
Interessant, ich hatte gedacht, die Commons-Admins..... aber okay, hast recht. --Guandalug 15:33, 29. Dez. 2011 (CET)Beantworten
Und warum funktioniert dann das hier? marksubpages wird vom umseitigen Script definitiv auf 'false' gesetzt.... ich sehe damit jetzt aber Unterseiten markiert. --Guandalug 15:35, 29. Dez. 2011 (CET)Beantworten
Das ist eigentlich nicht wichtig, weil die Variablendefinitionen hier so oder so unnötig sind. Wenn es bei dir funktioniert, dann bedeutet das, dass
  1. der erste Teil des Gadgets geladen wird und alle Variablen deklariert und vorbelegt werden,
  2. die Zeilen aus deinem Benutzerskript ausgeführt werden, was die Vorbelegung ändert und
  3. erst danach das eigentliche Skript ausgeführt wird.
Das Problem dabei ist, dass man sich auf diese Ausführungsreihenfolge nicht verlassen kann. Sie ist nirgends explizit zu erkennen, wir können uns das nur durch Ausprobieren zusammenreimen. Gadgets dürfen meiner Ansicht nach aber nur aus durchschaubarem Quelltext bestehen. --TMg 15:44, 29. Dez. 2011 (CET)Beantworten
Die Reihenfolge hatte ich auch mal so ausgeknobelt, weshalb ich dein "geht nicht" in Frage gestellt habe. Dass deine Lösung die sinnvollere ist, ist dabei unbestritten - wird auch nachher ausgetestet und dann umgesetzt. Bevorzugt irgendwann "Nachts" wo weniger mitbekommen, wenn ich was verbocke ;) --Guandalug 15:46, 29. Dez. 2011 (CET)Beantworten
Mein „geht nicht“ lag an der Art, wie ich getestet habe. Ich ändere zum Testen nicht ständig meine common.js sondern habe außerhalb der beschriebenen Reihenfolge einen der Konfigurationsschalter gesetzt. Das ging nicht. Es gibt aber gar keinen Grund, warum das nicht gehen sollte. --TMg 15:53, 29. Dez. 2011 (CET)Beantworten

Auf UrlParameters verzichten[Quelltext bearbeiten]

In Benutzer:PDD/markAdmins.js sollte statt

UrlParameters["diff"]

einfach einfach

mw.util.getParamValue('diff') !== null

(Siehe: mw:ResourceLoader/Default modules#getParamValue) verwendet werden, dann kann die Funktion und das Array hier entfallen. --Fomafix 20:13, 29. Dez. 2011 (CET)Beantworten

Das ist ja mal eine geniale Lösung. Hier also NUR das 'include', ja? --Guandalug 20:15, 29. Dez. 2011 (CET)Beantworten
Eingedampft, gewaltig.
Wenn du das eigentliche .js auch noch beschleunigen kannst / willst? Ich denke, PDD hat da nix gegen - ich durfte auch immer :D --Guandalug 21:39, 29. Dez. 2011 (CET)Beantworten
@Fomafix: Genial, so weit hatte ich nicht recherchiert. Benutzer:PDD/markAdmins.js selbst ist schon ziemlich clever geschrieben (fixes indexOf statt verschachtelter Loops), da lohnen sich weitere Optimierungen kaum. --TMg 18:25, 30. Dez. 2011 (CET)Beantworten