Benutzer Diskussion:MatthiasDD

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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)Beantworten

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.
  • Lösung für dein Synchronisationsproblem:
    1. Du führst (innerhalb der Kapsel) ein var launch = true; ein.
    2. Die Ausführung der eigentlichen Initialisierungsfunktion wird von launch abhängig gemacht.
    3. launch = false; ist die erste Anweisung deiner eigentlichen Initialisierungsfunktion.
    4. 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.
    5. Wenn Seite bereit und noch launch, dann rufst du deine Initialisierungsfunktion auf. Wenn tablediagnosis jetzt bereit, dann setze launch 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.
    6. Der obige Hinweis gilt auch weiterhin; ist eine zusätzliche Bedingung.
  • Die Funktion emulateTHeadAndFoot() fehlt.
LG --PerfektesChaos 22:41, 24. Aug. 2015 (CEST)Beantworten

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)Beantworten

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)Beantworten

"Kleine Änderungen"

[Quelltext bearbeiten]

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)Beantworten

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!

Zu sehen ist ein Buchstabengitter, in dem die 16 verschiedenen Themenschwerpunkte der Umfrage Technische Wünsche 2022 versteckt sind. Darüber steht: „Der erste Begriff, den du siehst, bringt dir Glück im Jahr 2022“ und ein Zwinkersmiley. Darunter steht: „… und vielleicht in der Umfrage Technische Wünsche?“)

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)Beantworten

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 -- ~~~~