Benutzer Diskussion:MatthiasDD
alte Diskussionen bis: 2012, 2014, 2018.
Tipp zur JavaScript-Einbindung
[Quelltext bearbeiten]Hi,
ich kam zufällig grad über Benutzer:MatthiasDD/ts diagnosis.js – gefällt mir gut.
Einen Tipp hätte ich aber: Du verwendest ein setTimeout(ts_diagnosis_init,1000)
– das kann beim Anwender gefährliche Nebenwirkungen haben.
Was du eigentlich meinst, ist das hier: WP:Technik/Skin/JS #Module auf dem Server
Konkret sieht das so aus:
mw.loader.using( 'jquery.tablesorter', ts_diagnosis_init );
Liebe Grüße --PerfektesChaos 20:41, 2. Mär. 2013 (CET)
- Damit startet meine Initialisierung wenn der 'jquery.tablesorter' geladen ist, aber mein Script ist zu dem Zeitpunkt noch nicht geladen. Die Zeitverzögerung ist nicht schön, aber ich finde keine andere Lösung. --MatthiasDD 28. Jun 2015
- Ich nochmal.
- Wenn du für dein Skript auf Hilfeseiten Reklame machst, dann musst du auch eine Dokuseite haben; also Benutzer:MatthiasDD/ts diagnosis, wo du die Funktionen genauer umreißt und die Einbindung erläuterst. Beispiele für Dokuseiten findest du, wenn du den Beispielen auf Benutzer:Schnark/js oder auch Benutzer:PerfektesChaos/js folgst.
- Du hast die Kapselung auskommentiert; das ist gar keine gute Idee.
- Damit werden ts und diverse andere zu globalen Namen. Wenn ein Benutzer auch ts verwendet, dann überschreibt er deins; oder du machst ihm seins kaputt.
- Alles muss in die Kapsel eingeschlossen werden.
- Siehe Wikipedia:Technik/Skin/JS/Datenelemente #Kapselung für Wiki-Projekte
- Lösung für dein Synchronisationsproblem:
- Du führst (innerhalb der Kapsel) ein
var launch = true;
ein. - Die Ausführung der eigentlichen Initialisierungsfunktion wird von
launch
abhängig gemacht. launch = false;
ist die erste Anweisung deiner eigentlichen Initialisierungsfunktion.- Die Bereitstellung von tablediagnosis bekommt einen Aufruf deiner äußeren Initialisierungsfunktion.
- Wenn er die nicht kennt, soll er nichts tun.
- Wenn Seite schon bereit und noch
launch
, dann starte jetzt. - Wenn nicht mehr
launch
, dann warst du bereits gestartet, aber jetzt erst ist die Funktion fertig? Hä? race condition. Nicht nochmal starten.
- Wenn Seite bereit und noch
launch
, dann rufst du deine Initialisierungsfunktion auf. Wenn tablediagnosis jetzt bereit, dann setzelaunch
auf false=gestartet, sicherheitshalber.- Wenn Seite bereit und nicht mehr
launch
, dann war der andere schneller. - Wenn tablediagnosis noch nicht bereit, dann mache erstmal nichts und lass den dort auslösen.
- Wenn Seite bereit und nicht mehr
- Der obige Hinweis gilt auch weiterhin; ist eine zusätzliche Bedingung.
- Du führst (innerhalb der Kapsel) ein
- Die Funktion emulateTHeadAndFoot() fehlt.
- LG --PerfektesChaos 22:41, 24. Aug. 2015 (CEST)
- Ich nochmal.
So, nun ist das Script in der Kapsel verpackt. Um ein setTimeout() komme ich aber nicht herum. Die Initialisierung des jquery.tablesorter ist sehr spät am Ende des Ladevorgangs. In mediawiki.page.ready.js
wird das Laden der Seite abgewartet:
mw.hook( 'wikipage.content' ).add( function ( $content ) {
…
// Lazy load jquery.tablesorter
…
mw.loader.using( 'jquery.tablesorter', function () {
$sortableTables.tablesorter();
} );
}
Erst wenn $sortableTables.tablesorter();
durchlaufen ist, darf mein Script starten, denn es liest die Parser $.tablesorter.getParsers()
und die Variable config $.data( table, 'tablesorter').config;
die erst durch diese Funktion angelegt werden.
Bei der Verzögerung hat bei mir auch mit 5 ms im FF 40.0 und IE 8.0 alles funktioniert, aber 500 ms sind mir sicherer. --MatthiasDD (Diskussion) 16:09, 15. Nov. 2015 (CET)
- Ich hatte schon migelesen; deshalb gab es grade BK.
- Kapselung ist fein; braaaav. Doku ist auch da, hübsch.
- Nun zu deinem setTimeout – das machen wir eigentlich nicht und haben es noch nie gebraucht.
- Bei manchen Benutzern könnten 500ms zu wenig sein, und bei denen crasht es. Hat was mit Netzwerkverbindungen, lahmen Browsern, kleinem Cache zu tun; ist nicht vorhersagbar und sollte nie festgelegt werden. Du kannst nicht von deiner Situation auf jemand anders schließen.
- Bei anderen führt eine längere Zeit zum Ruckeln, oder die Funktion ist nicht rechtzeitig da, oder was.
- Möglicherweise könntest du den folgenden Kniff ausnutzen:
$( table ).bind( "sortEnd.tablesorter", DeineFunktion );
- DeineFunktion würde aufgerufen, spätestens wenn zum allerersten Mal jemand eine Tabelle sortiert hatte. Dann ist der ts auch definitiv vorhanden.
- Zur Vermeidung von Mehrfachauslösungen gilt das obige
launch
. - Ist aber eigentlich nicht die Situation, die du haben wiillst, und passt nicht so ganz in den Arbeitsablauf.
- Um hingegen herauszufinden, ob die Seite schon geladen ist, nehmen wir WP:JS #mw.hook. Das wird von dem in deinem Code erwähnten mediawiki.page.ready.js ausgelöst.
- Richtig ist, dass zwischen dem page.ready und der Initialisierung von jquery.tablesorter ein Momentchen nicht vorhersagbarer Länge vergehen kann, weil dasselbe page.ready auch den ts erst nachlädt, wie du eben dargestellt hast.
- Du kannst aber eine grundsätzlich andere Strategie verfolgen; auch von deiner Seite lazy:
- Nach dem page.ready fügst du an jede (each) "table.sortable" deine Kontextmenü-Funktion an; genauer: den Auslösemechanismus mit Mausbutton.
- Für diese braucht du den ts überhaupt noch nicht.
- Mehr machst du zur Initialisierung nicht. Das schont die Rechenzeit der Benutzer beim Seitenaufbau jedes Artikels.
- Erst nachdem ein Benutzer für eine ganz bestimmte Tabelle den Mausbutton gedrückt hat, schaust du dir diese und nur diese Tabelle an:
- Ist der ts bereits initialisiert worden? Wenn tatsächlich mal nicht, vielleicht wirklich 1000ms warten.
- Ist diese Tabelle von dir schon mal verarbeitet worden, kennt sie schon dein privates .data "diagnosis"?
- Falls nicht, führe jetzt erst dein construct() für diese Tabelle aus.
- Dann weiter wie bisher.
- Viel Spaß --PerfektesChaos 16:46, 15. Nov. 2015 (CET)
Hallo Matthias DD, unter "kleinen Änderungen" versteht man laut Hilfe:Kleine Änderungen nur "Überarbeitungen, welche den sachlichen Inhalt eines Artikels nicht verändern". Inhaltliche Änderungen oder Ergänzungen, auch wenn sie vom Umfang her sehr klein ausfallsen, fallen nicht darunter. Bitte kennzeichne darum Ergänzungen wie deine heutigen in den Artikel Hessesche Normalform und Normalenform nicht als "kleine Änderung". Vielen Dank. Gruß, --Digamma (Diskussion) 20:22, 19. Mär. 2017 (CET)
Schon mal vormerken: Vom 24.1. bis zum 6.2. findet die Umfrage Technische Wünsche statt
[Quelltext bearbeiten]Frohes neues Jahr! Es gibt vieles, was man sich für 2022 wünschen kann: viele erfolgreiche Bearbeitungen, interessante Artikel, Gesundheit … und Verbesserungen an der Nutzbarkeit der Wikipedia und ihrer Schwesterprojekte!
In Kürze ist es nämlich wieder so weit: Vom 24. Januar bis zum 6. Februar findet die Umfrage Technische Wünsche statt. Es wird wieder darüber abgestimmt, in welchem Bereich das Team Technische Wünsche (WMDE) zwei Jahre lang, in engem Austausch mit den deutschsprachigen Communitys, für Verbesserungen sorgen wird.
Du bist wieder herzlich eingeladen, mitzumachen! Es stehen 16 Themenschwerpunkte zur Wahl. Neu ist in diesem Jahr, dass du angibst, welche fünf davon dir am wichtigsten sind. Das Konzept ist auf der Umfrageseite genauer beschrieben. Dort finden sich auch Antworten auf häufig gestellte Fragen und einiges mehr. Auf der Diskussionsseite sind außerdem Fragen und Anregungen sehr willkommen.
Wir würden uns freuen, wenn du ab dem 24. Januar wieder dabei bist und auch anderen davon erzählst. Technikkenntnisse oder viele Bearbeitungen sind ausdrücklich nicht nötig, um teilzunehmen. -- Für das Team Technische Wünsche, Johanna Strodt (WMDE) 15:06, 6. Jan. 2022 (CET)
PS: Wenn du zu Beginn der Umfrage nochmal erinnert werden möchtest, kannst du mit dem folgenden Textschnipsel auf diese Nachricht antworten, und bekommst dann am 24. Januar eine Nachricht über das System:
{{ErinnerMich|24.1.2022}} Jetzt abstimmen in der Umfrage Technische Wünsche -- ~~~~