Benutzer Diskussion:✓/monobook/weiterleitungen.js
getElementsByClassName kennt der IE nicht. jQuery verwenden. -- RE rillke fragen? 21:52, 6. Jun. 2011 (CEST)
Neue Programmierung
BearbeitenIch 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)
- 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 :-)
- Die Konfigvariablen wären sicher nicht schlecht, natürlich als
- 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)mw.loader.using( [ 'mediawiki.page.ready', … ], function () { … } )
war ein Versuchmw.loader.using( [ … ], function () { $( function () { … } ); } )
zusammenzufassen. Ich vermute aber, dass das so nicht ganz richtig ist. --Fomafix (Diskussion) 12:11, 1. Jun. 2012 (CEST)- Statt der zwei Konfigurationsparameter wäre ein
object.title = mw.msg( 'redirecttitle', object.title, target);
mitmw.messages.set( 'redirecttitle', '$1 → $2' );
als Standartwert möglich. --Fomafix (Diskussion) 12:16, 1. Jun. 2012 (CEST) - 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)
- 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()
stattforEach()
verwende. Die neue Titel ist übermw.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)
- Ich habe ein paar Überarbeitungen an meinem Skript gemacht. Die Datenstruktur habe ich überarbeitet und verwendet jetzt Objekte statt Arrays. Das Modul