Benutzer Diskussion:✓/monobook/weiterleitungen.js

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 11 Jahren von Fomafix in Abschnitt Neue Programmierung
Zur Navigation springen Zur Suche springen

getElementsByClassName kennt der IE nicht. jQuery verwenden. -- RE rillke fragen? 21:52, 6. Jun. 2011 (CEST)Beantworten

Neue Programmierung[Quelltext bearbeiten]

Ich habe das Skript unter Benutzer:Fomafix/Gadget-redirecttitle.js neu programmiert. Veraltete Funktionen habe ich durch jQuery und mw.Api ersetzt.

Die beiden Konfigurationsparameter habe ich weggelassen. Ich halte sie für nicht notwendig. Bei Deiner Version funktioniert sie nicht, denn es gibt in JavaScript keine bedingte Definition lokaler Variablen.

Zum Erfassen der Weiterleitungen verwende ich nur die Klasse mw-redirect. Die weiteren Klassen sind nicht notwendig, weil auch in Spezial:Alle Seiten und Kategorien auch die Klasse mw-redirect verwenden.

Zum Auslesen der Linkziele verwendet ich einfacher das title-Attribut, statt aus dem href-Attribut die entsprechende Stelle herauszuschneiden. Ich denke das müsste überall auch so funktionieren. Außerdem sind die Titel dann auch gleich für die API richtig encodiert. Bei Deiner Version meldet die API Normalisierungen.

Ich spreche die API per POST statt per GET an, weil ich bei GET Probleme mit manchen Unicode-Zeichen festgestellt habe.

Die Antwort lasse ich mir mit JSON statt als XML geben, weil das mit JavaScript einfacher zu verarbeiten ist.

Wenn mehrere Anfragen notwendig sind, starte ich die Anfragen parallel statt sequentiell. Die Antworten sind damit schneller da.

Fällt Dir noch etwas ein? --Fomafix (Diskussion) 23:06, 22. Mai 2012 (CEST)Beantworten

Ach ja, eines meiner Frühwerke… Das lässt sich heutzutage bestimmt in einem Dreizeiler erledigen :-) Soll ich mich versuchen?
  • Die Konfigvariablen wären sicher nicht schlecht, natürlich als user.options
  • Als ich das Skript geschrieben hatte, hatten Kats und Spezialseiten eben noch eine Spezialbehandlung nötig. Das <li><span class="redirect-in-category"><a class="mw-redirect" … hat sich gar bis heute gehalten.
  • Das Auslesen der Links aus dem Titel ist gefährlich. Das Skript selbst beweist, wie einfach und zu welch vielfältigen Zwecken er geändert werden kann.
  • Die Probleme mit Unicode-Zeichen würden mich jetzt aber genauer interessieren. Wurde da irgendwo die Angabe eines character-encodings vergessen?
  • Von JSON hatte ich anfang '10 noch nichtmal gehört :-) Wie du vllt. an den ersten Versionen erkennen kannst, habe ich den XHR direkt aus (dem damaligen) HotCat kopiert.
  • hohe Parallelisierung bedeutet aber auch hohe Bandbreite. Nicht dass das hier ein Problem wäre, aber lange warten musste ich auch bei sequenzieller Ausführung nicht. Meine derzeitige mw.Api-Implemenation parallelisiert (nativ) so stark, dass man sie schon fast bremsen muss :-)
Noch eine Frage zu deinem Skript: Wie funktioniert das mit dem using("mediawiki.page.ready")? Für mich sieht das nicht so aus als ob das Modul einen onDOMready-handler mitbringt.
meint -- Bergi 11:41, 1. Jun. 2012 (CEST)Beantworten
mw.loader.using( [ 'mediawiki.page.ready', … ], function () { … } ) war ein Versuch mw.loader.using( [ … ], function () { $( function () { … } ); } ) zusammenzufassen. Ich vermute aber, dass das so nicht ganz richtig ist. --Fomafix (Diskussion) 12:11, 1. Jun. 2012 (CEST)Beantworten
Statt der zwei Konfigurationsparameter wäre ein object.title = mw.msg( 'redirecttitle', object.title, target); mit mw.messages.set( 'redirecttitle', '$1 → $2' ); als Standartwert möglich. --Fomafix (Diskussion) 12:16, 1. Jun. 2012 (CEST)Beantworten
Das Problem bei GET kann ich nicht mehr nachvollziehen. Vermutlich ist der Fehler in der API bereits korrigiert worden. --Fomafix (Diskussion) 12:59, 1. Jun. 2012 (CEST)Beantworten
Ich habe ein paar Überarbeitungen an meinem Skript gemacht. Die Datenstruktur habe ich überarbeitet und verwendet jetzt Objekte statt Arrays. Das Modul mediawiki.page.ready verwende ich nicht mehr. Das Skript funktioniert jetzt auch bei einem Internet Explorer vor der Version 9 indem ich $.each() statt forEach() verwende. Die neue Titel ist über mw.messages.set( 'redirect-title', '$1 → $2' ) beeinflussbar. Den ursprünglichen Titel sichere ich mit .data(), bevor ich ihn überschreibe. --Fomafix (Diskussion) 15:43, 25. Jun. 2012 (CEST)Beantworten