Gadget kitchen/de

Willkommen in der „Gadget Küche“. Irgendwann sollen hier Entwickler ihre Arbeit an Benutzerskripten und Gadgets koordinieren können, um damit die MediaWiki-Community zu unterstützen. Im Moment ist es noch ein einfaches Tutorial, um schnell loslegen zu können.

Was sind Benutzerskripte und Gadgets?
Eine der schönsten Eigenschaften von MediaWiki ist, dass im Prinzip jede und jeder sofort Software-Erweiterungen schreiben und mit anderen Usern teilen kann.


 * Benutzerskripte sind für alle zugänglich und in JavaScript geschrieben.
 * Gadgets sind ebenfalls Benutzerskripte. Sie werden von einem Wiki-Admin zu MediaWiki:Gadgets-definition hinzugefügt. Dadurch stehen sie im Tab Gadgets allen eingeloggten Usern zur Verfügung.

Wenn bei dir eine eigene Version von MediaWiki läuft, muss aktiviert sein, damit Benutzerskripte funktionieren. Die Extension für Gadgets muss installiert sein, damit Skripte in den Rang von Gadgets befördert werden können. Beides ist bei fast allen Seiten der Wikimedia Foundation (z.B. Wikipedia), der Fall.

Um angenehmer arbeiten zu können, solltest du die CodeEditor extension in deinem Wiki installiert haben.

Gleich ausprobieren!

 * 1) Stell sicher, dass du eingeloggt bist und gehe dann auf Special:MyPage/common.js. Diese Datei enthält personalisiertes JavaScript, das bei jeder Seitenansicht geladen wird.
 * 2) Erstelle eine Seite mit diesem Text: mw.loader.load('//www.mediawiki.org/w/index.php?title=MediaWiki:Tutorial-QuickRC.js&action=raw&ctype=text/javascript');
 * 3) Sichern. Du solltest jetzt den Link „Quick changelog“ in deiner Toolbox haben. Der Link öffnet Letzte Änderungen in einem Pop-up.

Mehr damit machen
Kopiere die Inhalte von MediaWiki:Tutorial-QuickRC.js in Deine Special:MyPage/common.js.

Das Ergebnis ist das gleiche wie vorhin. Aber jetzt kannst du das Skript verändern und ausprobieren, was passiert, wenn du andere Inhalte hineinschreibst.

Wenn du im Editor auf „Vorschau“ klickst (oder z.B. den Shortcut  verwendest), wird die aktuelle Version des Skripts ausgeführt. So brauchst du nicht jedesmal die Seite zu sichern. Allerdings darfst Du nicht vergessen, am Ende die Seite zu sichern.

Gibt es noch mehr Tutorials?

 * MediaWiki:Tutorial-QuickRC.js - mw.loader, mw.util, mw.html, API usage, jQuery UI dialog, mw.user, jQuery AJAX, jQuery event binding
 * VisualEditor/Gadgets - Tutorial für VisualEditor-Gadgets
 * OOUI - Eine JavaScript-Library um Pop-ups für MediaWiki-Seiten zu bauen. Sie lässt sich in den meisten Wikis, die von WMF gehostet werden, einsetzen. Die Library kann für Gadgets verwendet werden.

Was hat es mit dem ResourceLoader auf sich?
Der ResourceLoader ist eine Kernfunktion des MediaWiki. Er spielt auf intelligente Art und Weise JavaScript- und CSS-Anwendungen aus. Da Gadgets immer in JavaScript geschrieben sind, musst du, wenn du Gadgets schreibst, immer mit dem ResourceLoader arbeiten. Die Verwendung des ResourceLoader ist seit MediaWiki 1.26 unumgänglich.

Dein Gadget sollte sinnvolle ResourceLoader-Module laden, statt sozusagen jedesmal das Rad neu zu erfinden.


 * Modules — Eine Reihe von im ResourceLoader schon vorhandenen JavaScript-Libraries, jQuery-Plugins and MediaWiki-Utilities. Bedien dich einfach!
 * Developing with ResourceLoader — Eine Reihe von nützlichen Tipps, z.B. wie man den Debug-Modus aktiviert und Hilfe beim Debuggen selber.

Durch den verbesserten ResourceLoader ("Gadgets 2.0") wird das Verwalten von Gadgets noch einfacher werden.

Woran kann ich arbeiten?

 * Wenn du Lust hast, Skripte zu schreiben, die den an der Wikipedia Beteiligten helfen, schaust du am besten auf Seiten, auf denen Anfragen koordiniert werden. Du findest so eine Seite z.B. unter w:Wikipedia:User scripts/Requests.
 * Außerdem sammeln wir Anfragen hier: Gadget Kitchen/Requests

Wie verwende ich mein Skript in anderen Wikis?
Wenn du dein Skript statt auf MediaWiki.org in der englischsprachigen Wikipedia laufen lassen willst, kannst du das  hier nicht verwenden. Aber du kannst deinen Code über den ResourceLoader laden. Geh einfach auf common.js in der englischsprachigen Wikipedia und füge hinzu:

Natürlich kannst du auch das Benutzerskript laden, dass du gerade geschrieben hast, indem du MediaWiki:Tutorial-QuickRC.js in der URI oben in  änderst. Ta-daa! So einfach ist es, sich eine maßgeschneiderte Wikipedia zu basteln!

Wenn dein Gadget die MediaWiki API nutzt: füge den " "-Parameter zur API-URL hinzu, sobald du eine API-Anfrage durchführst, die die Same-Origin-Policy verletzen würde (z.B. eine Anfrage an die Commons-API von Wikipedia aus). Das löst JSONP aus und setzt bestimmte Beschränkungen durch.

Tipps zum Thema JS?

 * Ein Gadget schreiben:
 * Halte dich an die JavaScript-Coding-Konventionen. So schreibst du JavaScript, das zu MediaWiki passt.
 * Schau dir die ResourceLoader good practices an.
 * Learning JavaScript gibt hilfreiche Hinweise, um schneller guten Code zu schreiben.
 * Compatibility - ein Kompatibilitäts-Check


 * Debugging:
 * Read the Google Chrome developer tools documentation or Firebug documentation to get the most out of the powerful debugging tools built into your browser.
 * If you experience issues with cached versions of scripts, it can be helpful to disable all caching. Click the settings (gears) icon in the Chrome developer console and select "Disable cache", or click "Disable Browser Cache" in the Net panel's dropdown menu in Firebug.
 * The ExternalArticles extension can be used to work on gadget code in an external IDE (it will update the corresponding wiki pages every time a file is saved).


 * Review: Gadgets are developed by community and as of today there is no formal code review required for them (see discussion T71445). However, it is strongly recommended to follow best practices!


 * audit-resources: You should not load external resources that may harm users privacy. For example in WMF wikis, the following domains are considered safe:
 * .wiktionary.org
 * .wikimedia.org,
 * *.wikibooks.org
 * *.wikisource.org
 * *.wikisource.org
 * *.wikiversity.org
 * *.wikinews.org
 * *.wikiquote.org
 * *.wikidata.org
 * *.wikivoyage.org
 * www.mediawiki.org

There is a Jenkins job (where??) for automatic check of this principle

Where can I find more docs?
These are key resources:
 * Wikipedia:User scripts on the English Wikipedia and its alternatives in other languages are the primary hubs for user script and gadget development in Wikipedia. The guide has tons of useful information to get you started.
 * the jQuery docs are essential for every JavaScript developer
 * the MediaWiki web service API documentation will also be very useful
 * List of gadgets by popularity in Wikimedia projects
 * Wikipedia:Gadget page on English Wikipedia
 * A written resource as backup for in-person training sessions