Benutzer Diskussion:Se4598/js/AFT FeedbackToTalk.js

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

Hier kannst du Kommentare zu Benutzer:Se4598/js/AFT FeedbackToTalk.js abgeben und Fragen stellen.

Test von TMg

[Quelltext bearbeiten]

Ich habs mal kurz angetestet und das Skript macht einen sehr guten Eindruck. Mit Opera funktioniert es anstandslos. Anmerkungen:

  • Nur mit replace zu arbeiten, ist nicht so gut. Nutze lieber var title = mw.util.wikiUrlencode(feedback.article);.
  • Da der Link kein href hat, erscheint in Opera auch nicht der erwartete Mauscursor. Hier mein Vorschlag: var $a = $('<a href="' + mw.util.wikiGetlink('Talk:' + fb.article) + '">').append('Auf die Diskussionsseite kopieren');.
  • In die click-Funktion sollte als letztes ein return false;.
  • Im erzeugten Diskussionsbeitrag ist gleich als erstes ein Leerzeichen im Link.
  • Die Formatierung des Beitrags ist sicher Geschmackssache. Ich finde aber die Einrückung etwas irritierend, weil wir das meist zum Antworten verwenden und nicht für den initialen Beitrag. Mein Vorschlag wäre, das kopierte Feedback komplett kursiv zu machen und nicht einzurücken, sondern einfach hinter den Doppelpunkt zu setzen.

--TMg 22:03, 2. Jan. 2013 (CET)Beantworten

Vielen Dank für dein Review. Ich bin nicht wirklich vertraut mit jQuery, mw.* und Javascript allgemein, das ganze habe ich mir in den letzten paar Tagen stückchenweise zusammengesucht ;-). Die Punkte habe ich soweit umgesetzt. Zum letzten Punkt: durch die jetzige Änderung wird ein Zeilenumbruch im Feedback nicht mehr sichtbar dargestellt, wurde es aber auch nicht auf der Rückmeldungsseite selber. Außerdem habe ich jetzt wegen der fehlenden Einrückung manuelle Zeilenumbrüche (<br />) eingefügt, da ich einerseits die Zeilenumbrüche für optisch sinnvoll halte und ein Absatz 1. zuviele Zeilen im Wikitext und 2. einen unnötigen Zeilenabstand erzeugt.
Was sagst du eigentlich zu den bei mir leeren POST-Pflichparametern wpStarttime und wpEdittime: sollte es da Probleme geben? Meiner Meinung eigentlich nicht, da ein neuer Abschnitt ja kein Editkonflikt erzeugen kann(?) und die Diskussionsseite wohl auch nicht zwischendurch gelöscht wird--se4598 / ? 23:56, 2. Jan. 2013 (CET)Beantworten
Das erklärt, warum mir da ein Löschhinweis angezeigt wurde. ;-) Ist aber nur ein Schönheitsfehler, bei new spielt das keine Rolle. Die <br /> finde ich ehrlich gesagt schlimm, dann bleibe lieber bei der Einrückung. Mein Vorschlag wäre wie unten zu sehen (ohne den Kasten), die beiden Informationszeilen zu einer zusammen zu fassen und einen einfachen Absatz dazwischen zu setzen. Keine Angst vor Abständen. Außerdem gibt es eine nette Permalink-Syntax, die du nutzen kannst. --TMg 00:14, 3. Jan. 2013 (CET)Beantworten

Geht das nicht kompakter? Den ganzen Artikel zu lesen ist ein richtiges Projekt... Um sich mal eben einen Überblick zum Thema zu verschaffen, taugt er dagegen kaum...

Rückmeldung 407 von 87.148.223.71, verfasst 18:46, 14. Dez. 2012 (CET) (übertragen von TMg 00:14, 3. Jan. 2013 (CET))Beantworten

auch ein schöner Vorschlag. Bei dem Permalink-Syntax müsstest du mir mal am besten helfen. Ich beziehe ja den direkt aus der vorhanden Verlinkung. Es kommt mir recht umständlich vor, das ganze erst nach & aufzuteilen(split) und die dann wiederum durch = den richtigen Teil zu finden. Zudem müsste ich den Zeittext selber ändern, den übernehme ich ja auch 1:1 ;-), da weiß ich auch nicht wie ich da schön rangehen sollte: Split von dem mit Leerzeichen und dann zwischen dem 2.-3. und dann am Ende die Verlinkung einfügen, zudem 1.Teil lowercase()? Bis jetzt sollte das nämlich noch in jeder Sprachversion passen. Das wird ja was…--se4598 / ? 00:35, 3. Jan. 2013 (CET)Beantworten
Das mit dem Datum war nur eine fixe Idee, es umzuformatieren, ergibt natürlich keinen Sinn. Für die ID: fb.old_article_version = meta_container.children[2].children[0].href.replace(/^.*\boldid=(\d+).*$/, '$1');. --TMg 00:53, 3. Jan. 2013 (CET)Beantworten
Also ich hab jetzt mal eine Benutzer:Se4598/js/AFT_FeedbackToTalk.js/Doku-Seite erstellt, so könnte jeder das eigentlich für sich selber festlegen. Standard ist jetzt wieder die erste Version mit der Einrückung. Das die benutzerdefinierte Lösung dann im Endeffekt eventuell kein einheitliches Bild ergibt ist mir bewusst.--se4598 / ? 19:38, 3. Jan. 2013 (CET)Beantworten

Durchsicht PerfektesChaos

[Quelltext bearbeiten]

Fein, und ich erkenne einiges wieder. Du bist im allgemeinen Herangehen auf dem Stand der Technik und damit schon weiter als viele herumgeisternde Benutzerskripte früherer Jahre.

Ich würde die Angelegenheit ab etwa //###END 1, genauer: mw.libs.aft_ftt.started=true; bis zum momentanen Schluss ebenfalls in eine Funktion nehmen.

  • Diese Funktion müsste doppelt geschachtelt werden in:
    mw.loader.using( [ "user",
                       "mediawiki.api",
                       "mediawiki.user",
                       "mediawiki.util" ],
                       erste_Stufe_oder_anonym );
und erste_Stufe_oder_anonym wäre eine benannte oder anonyme Funktion, die sicherstellen muss
   jQuery(document).ready(richtige_Startfunktion)
siehe: WP:JS#document.ready.
  • Gründe:
    • Du verwendest bereits mw.util.wikiUrlencode und mw.util.wikiGetlink; die könnten bei schnellen Browsern theoretisch noch nicht vorhanden sein. Deshalb: "mediawiki.util" mit .loader.using()
    • Wenn du es eines Tages zum Gadget schaffst, würde es bereits ausgeführt werden, bevor die Benutzeroptionen wirksam wurden. Deshalb: "user".
    • "mediawiki.api", "mediawiki.user" bräuchtest du, wenn du meinem nächsten Tipp folgst.
    • Schnelle Browser laden asynchron und führen beim Benutzer das Skript schon aus, bevor das Dokument bereit ist und die ganzen Abschnitte aufgebaut hat.
    • Erst richtige_Startfunktion kann sich darauf verlassen, dass alle Module geladen sind und das document bereit ist.
    • Ganz zum Schluss im Quellcode kommt dann die Frage nach wgCanonicalSpecialPageName und danach, wenn ==='ArticleFeedbackv5' käme typeof mw.libs.aft_ftt und dann die Frage nach .starting bzw. .run (den Unterschied verstehe ich nicht so ganz). Wenn die sagen, dass noch jungfräulich, dann erst das oen genannte mw.loader.using() ausführen.
    • Es wird immer das gesamte Skript kompiliert. Du sparst null und nichts, wenn du schon in den ersten Zeilen return ansagst. Wenn diese "autorun-Funktion" aber ganz am Ende steht und die erste ausführbare Anweisung bildet, dann sind alle vorangehenden Deklarationen schon bekannt und lassen sich verwenden.
    • Am Ende von mw:User:PerfektesChaos/js/paneMarker/d.js (welches du so freundlich gelobt hast) findest du die analoge Konstruktion; allerdings wird der document.body nicht angefasst und deshalb braucht es kein jQuery(document).ready().


Schreibe das ganze doch per API statt mit Textbox und wpStarttime und sonem Krampf.

  • Ist nicht so schwer, und den Code dafür kann ich dir per C&P auch zuliefern. Die drei Edits auf meiner BD über deinem heute nacht sind auf exakt diese Weise entstanden; so kaputt und einsam, dass ich mir jetzt schon selbst Nachrichten auf die Disku schreibe, bin ich nun grad nicht.
  • Das würde heißen:
    • Statt der createLinkPTT-Links baust du bei .length>1 jeweils
      '<input id="aft_check_' + i + '" type="checkbox" />' und eine kleine Beschriftung, möglichst farbig.
    • Irgendwo ganz oben hin kommt ein bunter
      '<button type="button" onclick="mw.libs.aft_ftt.copy()">Kopieren</button>'
    • Wirkung: Wenn angeklickt, wird .copy() ausgeführt.
      • Der schaut sich erstmal bei .length>1 von i=0 bis <.length alle #aft_check_i.prop('checked') an und schreibt sich das Ergebnis auf. Am besten mit zwei Schaltern: HakenGefunden und LeerGefunden. Aufhören kannst du sogar schon, wenn beide true sind.
      • Ist .length===1, dann ist automatisch jedesFeedback=true.
      • Sonst: Wenn keiner angeklickt war, heißt das „alle kopieren“. Das wäre: !HakenGefundenjedesFeedback=true. Wenn alle einzeln angeklickt sind, wäre !LeerGefundenjedesFeedback=true. Sind manche angeklickt, manche nicht, dann muss jedesFeedback auf false bleiben. Nun nochmal von 0 bis .length durchlaufen und selektiv die gesamte Geschichte zusammentragen. Wenn jedesFeedback=true, dann die Zeichenkette formatiert hinten dran an den Sammelbehälter pappen. Wenn nicht jedesFeedback, dann gucken, ob #aft_check_i.prop('checked') und wenn das, dann ebenfalls hinten dranklatschen.
      • Ein Trapper-Trick wäre es, die $(checkbox) gleich in einem new Array(.length) abzuspeichern, dann musst du sie nicht immer mit .find() suchen und kannst dir deshalb die id="aft_check_' + i + '" sparen.


Den Namen des Anwendungsobjekts würde ich nicht abkürzen. Es ist dann innerhalb von mw.libs für alle anderen Programmierer sofort verständlich als mw.libs.feedbackToTalk oder so. Weil das aber lästig lang ist, ganz oben eine var FTT; deklarieren, ganz unten nach typeof mw.libs.feedbackToTalk und ggf. mw.libs.feedbackToTalk={}; kannst du dann abkürzen FTT=mw.libs.feedbackToTalk; und das FTT ist überall bekannt und nur dieses wird praktisch benutzt. Siehe wieder mw:User:PerfektesChaos/js/resultListSort/d.js – dort RLS.


Kleinigkeit zum Schluss:

  • Ich sehe mehrere Aufrufe der Form:
 temp_c = $container.find('[class=articleFeedbackv5-comment-long]');
Das soll vermutlich heißen (so allgemein üblich):
 temp_c = $container.find('.articleFeedbackv5-comment-long');

Rückfrage zum Grundprinzip: Woran merke ich, dass nicht schon jemand vor mir da war und diesen Abschnitt bereits auf die Disku übertragen hatte?

Viel Spaß --PerfektesChaos 22:26, 4. Jan. 2013 (CET)Beantworten

uh, soviel Text, dass werde ich mir mal in Ruhe durchlesen und mich dransetzen. Vielen Dank für diese hilfreiche Analyse.
Vorweg: Kann denn die API ein Editfenster öffnen und offen lassen, sodass man direkt (wie zurzeit) darunter die Antwort schreiben kann? (den darauf folgenden Abschnitt habe jetzt noch nicht verstanden)
zum Grundprinzip: Garnicht. Ich setzte mal voraus, dass die betreffenden Benutzer den Artikel und die Diskussion(sseite) kennen. Oben rechts sind ja Direktlinks zum Artikel und der Diskussionseite vorhanden. Einen (vernünftigen) Weg, um eine Markierung auf einer Rückmeldung zu hinterlassen, wüsste ich nicht (außer die Rückmeldung ist noch nicht hervorgehoben, dann per Hervorhebungskommentar).--se4598 / ? 22:58, 4. Jan. 2013 (CET)Beantworten
Die API selbst kopiert eine Zeichenkette auf die Diskussionsseite, während du ja im Moment noch auf der Spezialseite bist; vielleicht über viele verschiedene Artikel zusammengestellt? Wo die Zeichenkette herkommt, ist ja wieder eine andere Frage. Es kann ein on-the-fly generiertes TEXTAREA sein, das aber kein WP-Klimbim mit starttime wpEdittime und BK usw. anstellen muss. Ich verstehe das so, dass diese kommentierende Zusatz-Nachricht mit Antwort nur optional ist und eine wesentliche Funktion das Kopieren des externen Feedbacks und seiner Daten ist? Großes Wiki-Markup ist in einem TEXTAREA natürlich nicht möglich. Umgekehrt gibt es ja möglicherweise mehrere Feedbacks zum selben Artikel,
Eine API-Funktion kann feststellen, ob eine Rückmeldung bereits auf der Disku steht, und sie dann kein zweites Mal draufschreiben. Schwierig wird es nur, wenn da bereits unterschiedlich ausführliche Versionen stehen. An einem einheitlichen Bezeichner-Format für AFT-Abschnitte (Kennummer) ist das aber erkennbar, und dann sollte das ursprüngliche Feedback nicht nochmal kopiert werden.
Soweit dazu --PerfektesChaos 23:20, 4. Jan. 2013 (CET)Beantworten