Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//Dokumentation unter [[Benutzer:Schnark/js/extratabs]] <nowiki>
/*global mediaWiki*/
(function ($, mw) {
"use strict";
var data = {
//Variablen
action: '', //Aktion
script: '', //URL zum Skript
labs: 'https://tools.wmflabs.org/',
xtools: 'https://xtools.wmflabs.org/',
user: '', //Benutzername
realPage: { //tatsächliche Seite
page: '', //Titel mit Namensraum (Unterstriche)
title: '', //Titel ohne Namensraum (Leerzeichen)
href: '', //URL
ns: 0, //Namensraum (Nummer)
id: '' //ID der Seite / kanonischer Spezialseitenname
},
relevantPage: { //evt. abweichend Seite, auf die sich aktuelle Spezialseite bezieht
page: '',
title: '',
user: '', //Benutzername (falls sich Seite auf einen Benutzer bezieht)
ns: 0,
id: ''
},
project: {
server: '', //Hostname
lang: '', //Sprachecode des Projekts oder commons/meta
project: '', //Typ des Projekts (wikipedia, wikibooks, ..., wikimedia/wikidata/mediawiki)
projectShort: '', //Typ des Projekts (wiki, wikibooks, ...), dbname ist lang + projectShort
dbname: '', //Datenbankname (ohne _p)
special: false //Spezialwiki: Commons, Meta, Wikidata, Mediawiki
},
lang: {
user: '',
userFallback: '',
site: '',
page: '',
model: ''
},
targets: {
primary: '', //ID des primären Ziels
secondary: '', //ID des sekundären Ziels
map: {} //Standard-ID -> abweichende ID für aktuellen Skin
}
},
/*jshint camelcase: false*/
//jscs:disable requireCamelCaseOrUpperCaseIdentifiers
//entfernt, in der Hoffnung, dass es irgendwann Ersatz gibt:
//commonsuploadsum: https://tools.wmflabs.org/commonsuploadsum/uploadsum.php
//familiar: http://toolserver.org/~cyroxx/familiar/familiar.php
//gallery: https://tools.wmflabs.org/wikisense/Gallery.php
//geburtstag: http://toolserver.org/~luxo/Geburtstag.php
//grep: https://tools.wmflabs.org/addshore/grep/
//languagetool: http://community.languagetool.org/wikiCheck/pageCheck/index
//mediaviews: https://tools.wmflabs.org/mediaviews
//orphanimages: https://tools.wmflabs.org/wikisense/OrphanImages.php
//rcbytes: https://tools.wmflabs.org/hoo/rcBytes.php
//reverselanglinks: http://toolserver.org/~merl/reverselanglinks/query.php
//revstat: https://tools.wmflabs.org/revertstat
//smallwikisrc: http://toolserver.org/smallwikisrc/rcs
//stats: http://stats.grok.se
//untaggedimages: https://tools.wmflabs.org/wikisense/UntaggedImages.php
//userpages: http://toolserver.org/~merl/UserPages/Changes/
//userregfinder: http://toolserver.org/userregfinder/finder
//wikiviewstats: https://tools.wmflabs.org/wikiviewstats/index.php
tools = {
accounteligibility: function () {
return {
url: data.labs + 'meta/accounteligibility/',
param: {user: data.relevantPage.user},
example: 'user',
name: {de: 'Stimmberechtigung (global)', en: 'Eligibility (global)'},
tooltip: {de: 'Überprüft die Stimmberechtigung für globale Wahlen',
en: 'Checks account eligibility for global votes'}
};
},
adminstats: function () {
return {
url: data.xtools + 'adminstats/',
param: [data.project.dbname, {uselang: data.lang.user}],
example: 'simple',
name: {de: 'Adminstatistiken', en: 'Admin stats'},
tooltip: {de: 'Statistiken zur Adminaktivität in diesem Projekt',
en: 'Statistics for admin activity in this project'}
};
},
afterUpload: function () {
return {
url: 'http://kijewski.github.io/wp-afterUpload/', //https mit mixed content
param: {lang: chooseUserLang(['en', 'de']), project: data.project.server,
image: data.relevantPage.title.replace(/ /g, '_')},
example: 'image',
name: {en: 'AfterUpload'},
tooltip: {de: 'Versucht herauszufinden, wo das Bild nach dem Hochladen eingebunden wurde',
en: 'Try to find out where the image was used after upload'}
};
},
articleinfo: function () {
return {
url: data.xtools + 'articleinfo/',
param: [data.project.dbname, data.relevantPage.page, {uselang: data.lang.user}],
example: 'article',
name: {de: 'Bearbeitungsstatistik (X!)', en: 'Article info'},
tooltip: {de: 'Statistiken zur Versionsgeschichte', en: 'Statistics about the version history'}
};
},
artniw: function () {
return {
only: !data.project.special,
url: data.labs + 'joanjoc/artniw.php',
param: {l1: data.project.lang, pr: data.project.projectShort, ns: 0,
cat: data.relevantPage.title, dpt: 3, tpl: '', go: 'Proceed'},
example: 'category',
name: {de: 'Keine andere Sprachen', en: 'No other languages'},
tooltip: {de: 'Ermittelt alle Artikel in dieser Kategorie samt Unterkategorien, die keine Sprachlinks haben',
en: 'Show all articles in this category including subcategories which don\'t have any links to other languages'}
};
},
autoedits: function () {
return {
url: data.xtools + 'autoedits/',
param: [data.project.dbname, data.relevantPage.user, {uselang: data.lang.user}],
example: 'user',
name: {de: 'Automatische Bearbeitungen', en: 'Autoedits'},
tooltip: {de: 'Zählt die automatischen Bearbeitungen', en: 'Count the automated edits'}
};
},
blame: function () {
return {
url: data.xtools + 'blame/',
param: [data.project.server, data.relevantPage.page, {q: ''}],
selection: true,
example: 'article',
name: {en: 'Wikiblame (X!)'},
tooltip: {de: 'Ermittelt, wann die markierte Textstelle eingefügt wurde',
en: 'Find out when the selected text was inserted'}
};
},
blankpages: function () {
return {
url: data.labs + 'blankpages/',
param: {p: data.project.server.slice(0, -4)},
example: 'simple',
name: {de: 'Leere Seiten', en: 'Blank pages'},
tooltip: {de: 'Findet leere Seiten in diesem Wiki', en: 'Find blank pages on this wiki'}
};
},
cat: function () {
return {
only: data.project.dbname === 'commonswiki' || data.project.dbname === 'dewiki',
url: data.labs + 'wikihistory/dewiki/newincategory/index.php',
param: {cat: data.relevantPage.title, project: data.project.lang},
example: 'category',
name: {de: 'Neue Einträge', en: 'New entries'},
tooltip: {de: 'Zeigt alle neu in diese Kategorie einsortierten Seiten an',
en: 'Show all entries which were recently added to this category'}
};
},
catanalysis: function () {
return {
url: data.labs + 'meta/catanalysis/',
param: {wiki: data.project.dbname, title: data.relevantPage.title, cat: 1},
example: 'category',
name: {de: 'Beitrags-Analyse', en: 'Contribution analysis'},
tooltip: {de: 'Ermittelt die Bearbeiter der Seiten dieser Kategorie',
en: 'Get the editors of the pages in this category'}
};
},
categoryedits: function () {
return {
url: data.xtools + 'categoryedits/',
param: [data.project.dbname, data.user, data.relevantPage.title, {uselang: data.lang.user}],
example: 'category',
name: {de: 'Eigene Bearbeitungen', en: 'Own edits'},
tooltip: {de: 'Zeigt eigene Bearbeitungen in dieser Kategorie', en: 'Show own edits in this category'}
};
},
catgraph: function () {
return {
url: data.labs + 'vcat/render',
param: {wiki: data.project.dbname, rel: 'category', title: data.relevantPage.page, format: 'svg', links: 'wiki'},
example: 'category',
name: {de: 'Kategorien-Graph', en: 'Category graph'},
tooltip: {de: 'Zeigt die Oberkategorien als Baumstruktur', en: 'Show the supercategories as tree'}
};
},
catnap: function () {
return {
url: data.labs + 'catnap/',
param: {language: data.project.lang, project: data.project.project,
category: data.relevantPage.title, doit: 'Do it'},
example: 'category',
name: {en: 'Catnap'},
tooltip: {de: 'Zeigt Seiten dieser Kategorie, gruppiert nach anderen Kategorien',
en: 'Show pages in this category grouped by other categories'}
};
},
catscan: function () {
return {
disabled: 'defekt',
url: data.labs + 'catscan3/catscan2.php',
param: {language: data.project.lang, project: data.project.project, depth: 12,
interface_language: data.lang.user, categories: data.relevantPage.title},
example: 'category',
name: {en: 'CatScan'},
tooltip: {de: 'CatScan für diese Kategorie', en: 'CatScan for this category'}
};
},
catscan_quick: function () {
return {
disabled: 'defekt',
url: data.labs + 'catscan3/quick_intersection.php',
param: {lang: data.project.lang, project: data.project.project, cats: data.relevantPage.title, ns: 0,
depth: -1, max: 30000, start: 0, format: 'html', norun: ''},
example: 'category',
name: {de: 'CatScan (schnell)', en: 'CatScan (quick)'},
tooltip: {de: 'CatScan für diese Kategorie (schnell)', en: 'CatScan for this category (quick)'}
};
},
checkwiki: function () {
return {
url: data.labs + 'checkwiki/cgi-bin/checkwiki.cgi',
param: {project: data.project.dbname, view: 'detail', title: data.relevantPage.title},
example: 'article',
name: {de: 'Syntaxfehler', en: 'Checkwiki'},
tooltip: {de: 'Überprüft auf Fehler der Wikisyntax', en: 'Check for syntax errors'}
};
},
commonshelper: function () {
return {
only: data.project.dbname !== 'commonswiki',
url: data.labs + 'commonshelper/',
param: {'interface': data.lang.user, language: data.project.lang, image: data.relevantPage.title,
project: data.project.project, commonsense: 1, reallydirectupload: 1},
example: 'image',
name: {en: '→ Commons'},
tooltip: {de: 'Nach Commons verschieben', en: 'Move to Commons'}
};
},
contributions: function () {
return {
url: data.script,
param: {title: 'Special:Contributions/' + data.relevantPage.user},
example: 'user',
name: {de: 'Beiträge', en: 'Contributions'},
tooltip: {de: 'Benutzerbeiträge', en: 'Contributions by this user'}
};
},
contributors: function () {
return {
url: data.labs + 'hgztools/contributors/index.php',
param: {lang: data.project.lang, project: data.project.project, page: data.relevantPage.page, format: 'wiki_int'},
example: 'article',
name: {de: 'Versionsgeschichte', en: 'History'},
tooltip: {de: 'Versionsgeschichte als HTML zum Kopieren', en: 'History as HTML to copy'}
};
},
copyvios: function () {
return {
url: data.labs + 'copyvios',
param: {lang: data.project.lang, project: data.project.project, title: data.relevantPage.page},
example: 'article',
name: {de: 'URV-Test', en: 'Copyvio test'},
tooltip: {de: 'Prüft, ob die Seite eine Urheberrechtsverletzung aus dem Internet sein könnte',
en: 'Test whether this page could be a copyright violation from the internet'}
};
},
created: function () {
return {
url: data.labs + 'sigma/created.py',
param: {name: data.relevantPage.user, server: data.project.dbname, max: 500, ns: 0, redirects: 'coalball'},
example: 'user',
name: {de: 'Artikelanlagen', en: 'New articles'},
tooltip: {de: 'Artikel, die von diesem Benutzer angelegt wurden', en: 'Show all articles created by this user'}
};
},
croptool: function () {
return {
url: data.labs + 'croptool/',
param: {site: data.project.server, title: data.relevantPage.title},
example: 'image',
name: {de: 'Zuschneiden', en: 'Crop image'},
tooltip: {de: 'Dieses Bild beschneiden', en: 'Crop this image'}
};
},
crossactivity: function () {
return {
url: data.labs + 'meta/crossactivity/',
param: [data.relevantPage.user],
example: 'user',
name: {de: 'Letzte Aktion', en: 'Latest action'},
tooltip: {de: 'Letzte Aktion dieses Benutzers in allen Wikis', en: 'Latest action of this user in every wiki'}
};
},
crosswatch: function () {
return {
disabled: 'defekt',
url: data.labs + 'crosswatch/',
example: 'simple',
name: {de: 'Globale Beobachtungsliste', en: 'Global wachtlist'},
tooltip: {de: 'Globale Beobachtungsliste', en: 'Global wachtlist'}
};
},
dab_solver: function () {
return {
only: data.project.project === 'wikipedia',
url: 'http://69.142.160.183/~dispenser/cgi-bin/dab_solver.py',
param: {commonfixes: 'on', page: data.project.lang + ':' + data.relevantPage.page},
example: 'article',
name: {de: 'BKL', en: 'DAB'},
tooltip: {de: 'Links auf Begriffklärungsseiten auflösen', en: 'Solve links to disambiguation pages'}
};
},
deep_ins: function () {
return {
only: data.project.dbname === 'dewiki',
url: data.labs + 'sighting/deep_insight.php',
param: {language: data.project.lang, project: data.project.project,
category: data.relevantPage.title, depth: 0, mode: 'web', doit: 'Do it'},
example: 'category',
name: {de: 'Erstzusichtende', en: 'Insight'},
tooltip: {de: 'Noch nie gesichtete Artikel in dieser Kategorie',
en: 'Pages in this category that were never sighted before'}
};
},
deep_oos: function () {
return {
only: data.project.dbname === 'dewiki',
url: data.labs + 'sighting/deep_out_of_sight.php',
param: {language: data.project.lang, depth: 7, category: data.relevantPage.title, doit: 'Los!'},
example: 'category',
name: {de: 'Nachzusichtende', en: 'Out of sight'},
tooltip: {de: 'Gerade nicht gesichtete Artikel in dieser Kategorie',
en: 'Pages in this category that need to be sighted again'}
};
},
edit0: function () {
return {
url: data.script,
param: {title: data.relevantPage.page, action: 'edit', section: 0},
example: 'article',
name: {de: 'Einleitung bearbeiten', en: 'Edit lead section'},
tooltip: {de: 'Einleitung bearbeiten', en: 'Edit lead section'}
};
},
editcount: function () {
return {
url: data.xtools + 'ec/',
param: [data.project.dbname, data.relevantPage.user, {uselang: data.lang.user}],
example: 'user',
name: {de: 'Bearbeitungszähler', en: 'Edit counter'},
tooltip: {de: 'Einfacher Bearbeitungszähler', en: 'Simple edit counter'}
};
},
editsummary: function () {
return {
url: data.xtools + 'editsummary/',
param: [data.project.dbname, data.relevantPage.user, {uselang: data.lang.user}],
example: 'user',
name: {de: 'Bearbeitungskommentare', en: 'Edit summary'},
tooltip: {de: 'Statistik zur Benutzung der Zusammenfassungszeile',
en: 'Statistics about the usage of edit summaries'}
};
},
fist: function () {
return {
disabled: 'there was an error running the query',
url: data.labs + 'fist/fist.php',
param: {doit: 1, language: data.project.lang, project: data.project.project,
data: data.relevantPage.page, datatype: 'articles',
params: {catdepth: 0, random: 50, ll_max: 5, free_only: 1, commons_max: 5,
commonsense: 'on', flickr_max: 5, flickr_new_name_from_article: 1,
wts_max: 5, gimp_max: 5, esp_max: 5, esp_skip_flickr: 1, forarticles: 'all',
lessthan_images: 3, jpeg: 1, png: 1, gif: 1, svg: 1, min_width: 80, min_height: 80},
sources: {languagelinks: 1, commons: 1, flickr: 1, wst: 1, gimp: 1, everystockphoto: 1}},
example: 'article',
name: {en: 'Fist'},
tooltip: {de: 'Suche nach freien Bildern', en: 'Search for free images'}
};
},
flagged: function () {
return {
//disabled: 'kein CSS',
only: data.project.dbname === 'dewiki',
url: data.labs + 'hroest/flagged.php',
param: {language: data.project.lang, depth: 7, category: data.relevantPage.title, doit: 'Los!'},
example: 'category',
name: {de: 'Nachzusichtende', en: 'Out of sight'},
tooltip: {de: 'Gerade nicht gesichtete Artikel in dieser Kategorie',
en: 'Pages in this category that need to be sighted again'}
};
},
glamtree: function () {
return {
only: data.project.project === 'wikipedia',
url: data.labs + 'glamtools/treeviews/',
param: {q: JSON.stringify({
lang: data.project.lang, rows: [{
title: data.relevantPage.title
}]
})},
example: 'category',
name: {de: 'Seitenaufrufe', en: 'Page views'},
tooltip: {de: 'Zeigt die Anzahl der Seitenaufrufe für Seiten in dieser Kategorie',
en: 'Show the number of page views for pages in this category'}
};
},
globalcontribs: function () {
return {
url: data.xtools + 'globalcontribs/',
param: [data.relevantPage.user, {uselang: data.lang.user}],
example: 'user',
name: {de: 'Bearbeitungszähler (global)', en: 'Edit counter (global)'},
tooltip: {de: 'Bearbeitungszähler für alle Wikimedia-Projekte', en: 'Edit counter for all Wikimedia projects'}
};
},
globalusers: function () {
return {
url: data.script,
param: {title: 'Special:GlobalUsers', limit: 1, username: data.relevantPage.user},
example: 'user',
name: {de: 'Globale Rechte', en: 'Global rights'},
tooltip: {de: 'globale Rechte dieses Benutzers anzeigen', en: 'Show the global rights of this user'}
};
},
globalwpsearch: function () {
return {
only: data.project.project === 'wikipedia',
url: 'http://vs.aka-online.de/globalwpsearch/',
example: 'simple',
name: {de: 'Globale Suche', en: 'Global search'},
tooltip: {de: 'Suche in allen Sprachen', en: 'Search in all languages'}
};
},
google: function () {
return {
only: !data.project.special,
url: 'https://www.google.com/search',
param: {q: 'site:' + data.project.project + '.org "' + data.relevantPage.title.replace(/"/g, '') + '"'},
example: 'article',
name: {en: 'Google'},
tooltip: {de: 'Google-Suche (' + data.project.project + '.org)',
en: 'Google search (' + data.project.project + '.org)'}
};
},
grep: function () {
return {
url: data.labs + 'grep/',
param: {lang: data.project.lang, project: data.project.project, namespace: 0},
example: 'simple',
name: {de: 'Regulärer Ausdruck', en: 'Regular expression'},
tooltip: {de: 'Titelsuche mit regulärem Ausdruck', en: 'Search for titles using a regular expression'}
};
},
guc: function () {
return {
url: data.labs + 'guc/index.php',
param: {blocks: 'true', user: data.relevantPage.user},
example: 'user',
name: {de: 'Bearbeitungszähler (global)', en: 'Edit counter (global)'},
tooltip: {de: 'Bearbeitungszähler für alle Wikimedia-Projekte', en: 'Edit counter for all Wikimedia projects'}
};
},
herding_sheep: function () {
return {
url: data.labs + 'magnustools/herding_sheep.php',
param: {language: data.project.lang, roject: data.project.project, category: data.relevantPage.title, doit: 'Do it'},
example: 'usercat',
name: {de: 'Aktive Benutzer', en: 'Active users'},
tooltip: {de: 'Zeigt aktive Benuter an, die in dieser Kategorie einsortiert sind',
en: 'Shows active users listed in this category'}
};
},
intersectcontribs: function () {
return {
only: data.user !== data.relevantPage.user,
url: data.labs + 'intersect-contribs/',
param: {project: data.project.dbname, users: [data.user, data.relevantPage.user]},
example: 'ip',
name: {de: 'Gemeinsame Bearbeitungen', en: 'Intersect Contributions'},
tooltip: {de: 'Zeigt gemeinsam bearbeitete Seiten an', en: 'Show pages where we both edited'}
};
},
intersectcontribs1: function () {
return {
disabled: 'defekt',
url: data.labs + 'intersect-contribs/',
param: {project: data.project.dbname, users: [data.relevantPage.user, data.relevantPage.user], sort: 1},
example: 'user',
name: {de: 'Bearbeitete Seiten', en: 'Edited pages'},
tooltip: {de: 'Zeigt alle Seiten an, die dieser Benutzer bearbeitet hat', en: 'Show all pages edited by this user'}
};
},
isbncheck: function () {
return {
url: data.labs + 'isbn/IsbnCheckAndFormat',
param: {ISBN: data.relevantPage.id, Test: 'http://swb.bsz-bw.de/DB=2.1/CMD?ACT=SRCHA&IKT=1007&TRM=MAGIC'},
example: 'isbn',
name: {en: 'ISBN-Check'},
tooltip: {de: 'Überprüft und formatiert die ISBN', en: 'Check and format the ISBN'}
};
},
isbn2wiki: function () {
return {
url: data.labs + 'isbn2wiki/',
param: {isbn: data.relevantPage.id},
example: 'isbn',
name: {de: 'Literaturangabe', en: 'Format as reference'},
tooltip: {de: 'Liefert Autor, Titel etc.', en: 'Get author, title, etc.'}
};
},
itemsByCat: function () {
return {
disabled: 'defekt',
url: data.labs + 'bene/itemsbycat/',
param: {wiki: data.project.dbname, category: data.relevantPage.title},
example: 'category',
name: {en: 'Wikidata'},
tooltip: {de: 'Zeigt alle Wikidata-Einträge ohne Bezeichnung', en: 'Show all Wikidata items without label'}
};
},
lagging: function () {
return {
disabled: 'defekt',
only: data.project.dbname === 'dewiki',
url: data.labs + 'hroest/cgi-bin/lagging_users.py',
example: 'simple',
name: {de: 'Nachzusichtende', en: 'Lagging users'},
tooltip: {de: 'Nachzusichtende Änderungen sortiert nach Benutzern',
en: 'Changes that need to be sighted sorted by users'}
};
},
listen: function () {
return {
only: data.project.project === 'wikipedia',
url: 'http://listen.hatnote.com/',
param: ['#' + data.project.lang],
example: 'simple',
name: {en: 'Listen to Wikipedia'},
tooltip: {de: 'Klanguntermalung der letzten Änderungen', en: 'Listen to recent changes'}
};
},
listfiles: function () {
return {
url: data.script,
param: {title: 'Special:Listfiles', user: data.relevantPage.user},
example: 'user',
name: {de: 'Dateien', en: 'Files'},
tooltip: {de: 'Dateien, die dieser Benutzer hochgeladen hat', en: 'Files uploaded by this user'}
};
},
listpages: function () {
return {
url: data.labs + 'listpages/listpages.pl',
param: {pattern: '', database: data.project.dbname},
example: 'simple',
name: {de: 'Wildcard-Suche', en: 'Wildcard search'},
tooltip: {de: 'Suche mit Wildcard', en: 'Search using wildcard'}
};
},
listusers: function () {
return {
url: data.script,
param: {title: 'Special:Listusers', limit: 1, username: data.relevantPage.user},
example: 'user',
name: {de: 'Rechte', en: 'User rights'},
tooltip: {de: 'Rechte dieses Benutzers anzeigen', en: 'Show rights of this user'}
};
},
lkozma: function () {
return {
only: data.project.dbname === 'dewiki',
url: 'http://www.lkozma.net/wpv/index_de.html',
example: 'simple',
name: {en: 'Geo'},
tooltip: {de: 'Zeigt geografische Herkunft der letzten Änderungen an',
en: 'Show geografic origin of recent changes'}
};
},
log: function () {
return {
url: data.script,
param: {title: 'Special:Log', page: data.relevantPage.page},
example: 'article',
name: {de: 'Logbuch', en: 'Log'},
tooltip: {de: 'Logbuch für diese Seite', en: 'Log for this page'}
};
},
log_aktiv: function () {
return {
url: data.script,
param: {title: 'Special:Log', user: data.relevantPage.user},
example: 'user',
name: {de: 'aktives Log', en: 'Active log'},
tooltip: {de: 'Zeigt Logbuch für Aktionen dieses Benutzers',
en: 'Show the log for actions by this user'}
};
},
log_create: function () {
return {
url: data.script,
param: {title: 'Special:Log', type: 'create', user: data.relevantPage.user},
example: 'user',
name: {de: 'Neuanlagen', en: 'New pages'},
tooltip: {de: 'Zeigt Logbuch für Neuanlagen dieses Benutzers',
en: 'Show the log for new pages by this user'}
};
},
mainAuthors: function () {
return {
url: data.labs + 'mstools/index.php',
param: {tool: 'MainAuthors', run: 0, category: data.relevantPage.title,
projectlang: data.project.lang, project: data.project.project},
example: 'category',
name: {de: 'Hauptautoren', en: 'Main authors'},
tooltip: {de: 'Ermittelt die Hauptautoren in dieser Kategorie',
en: 'Determine the main authors in this category'}
};
},
massviews_category: function () {
return {
url: data.labs + 'massviews',
param: {source: 'category', target: 'https://' + data.project.server + '/wiki/' + data.relevantPage.page,
range: 'latest-30', subcategories: 1},
example: 'category',
name: {de: 'Seitenaufrufe', en: 'Page views'},
tooltip: {de: 'Zeigt die Anzahl der Seitenaufrufe für Seiten in dieser Kategorie',
en: 'Show the number of page views for pages in this category'}
};
},
massviews_subpage: function () {
return {
url: data.labs + 'massviews',
param: {source: 'subpages', target: 'https://' + data.project.server + '/wiki/' + data.relevantPage.page,
range: 'latest-30'},
example: 'user',
name: {de: 'Abrufstatistik (Unterseiten)', en: 'Traffic stats (SUB)'},
tooltip: {de: 'Zahl der Seitenabrufe, einschließlich Unterseiten',
en: 'Number of views for this page, including subpages'}
};
},
metronom: function () {
var month, date = new Date();
date.setMonth(date.getMonth() - 1);
month = date.getMonth() + 1;
if (month < 10) {
month = '0' + String(month);
}
month = String(date.getFullYear()) + String(month);
return {
only: data.project.project === 'wikipedia',
url: data.labs + 'magnustools/metronom.php',
param: {language: data.project.lang, month: month, user: data.relevantPage.user, doit: 'Do+it!'},
example: 'user',
name: {de: 'Artikelaufrufe', en: 'Article views'},
tooltip: {de: 'Zeigt an, wie oft Artikel dieses Benutzers aufgerufen wurden (langsam)',
en: 'Show how often articles created by this user have been viewed (slow)'}
};
},
missingtopics: function () {
return {
url: data.labs + 'missingtopics/',
param: {language: data.project.lang, project: data.project.project, category: data.relevantPage.title,
depth: 1, wikimode: 0, nosingles: 1, limitnum: 1, doit: 'Run'},
example: 'category',
name: {de: 'Fehlende Artikel', en: 'Missing articles'},
tooltip: {de: 'Findet noch zu schreibende Artikel zum Thema dieser Kategorie',
en: 'Find articles still to write on the topic of this category'}
};
},
mw2latex: function () {
return {
only: data.lang.model === 'wikitext',
url: 'https://mediawiki2latex.wmflabs.org/fill/',
param: ['https%3A%2F%2F' + data.project.server + '%2Fwiki%2F' +
encodeURIComponent(data.relevantPage.page)],
example: 'article',
name: {en: 'MediaWiki2LaTeX'},
tooltip: {de: 'Aufwändig gerenderte PDF-Datei', en: 'Complexly rendered PDF file'}
};
},
mydiff: function () {
return {
url: 'http://wikipedia.ramselehof.de/diff2me.php',
param: {project: data.project.project, lang: data.project.lang, user: data.user, article: data.relevantPage.page},
example: 'article',
name: {de: 'Diff zu mir', en: 'MyDiff'},
tooltip: {de: 'Zeigt alle Änderungen nach meiner letzten', en: 'Show all changes following my most recent'}
};
},
newpages: function () {
return {
url: data.script,
param: {title: 'Special:NewPages', namespace: 0, username: data.relevantPage.user},
example: 'user',
name: {de: 'Artikelanlagen (letzter Monat)', en: 'New articles (last month)'},
tooltip: {de: 'Artikel, die von diesem Benutzer im letzten Monat angelegt wurden',
en: 'Show all articles created by this user in the last month'}
};
},
onemillion: function () {
return {
only: data.project.dbname === 'dewiki',
url: data.labs + 'steinsplitter/Meilensteine',
example: 'simple',
name: {de: 'Nächster Meilenstein', en: 'Next milestone'},
tooltip: {de: 'Schätzt den Zeitpunkt des nächsten Meilensteins', en: 'Estimates the time of the next milestone'}
};
},
orphantalk: function () {
return {
url: data.labs + 'orphantalk/',
param: {wikidb: data.project.dbname + '_p', hidesubpages: 1},
example: 'simple',
name: {de: 'Verwaiste Diskussionsseiten', en: 'Orphan talk pages'},
tooltip: {de: 'Findet Diskussionsseiten ohne Inhaltsseite', en: 'Find talk pages without content page'}
};
},
pageconjunction: function () {
return {
url: data.labs + 'hgztools/pageconjunction/index.php',
param: {lang: data.project.lang, project: data.project.project, page: data.relevantPage.page},
example: 'article',
name: {de: 'Linkvergleich', en: 'Page conjunction'},
tooltip: {de: 'Vergleicht ein- und ausgehende Links', en: 'Compare links to and from this page'}
};
},
pagehiststat: function () {
return {
only: !data.project.special || data.project.project === 'wikimedia',
url: 'http://vs.aka-online.de/cgi-bin/wppagehiststat.pl',
param: {lang: data.project.lang + '.' + data.project.project, page: data.relevantPage.page},
example: 'article',
name: {de: 'Artikelstatistik', en: 'Article statistics'},
tooltip: {de: 'Artikelstatistik (aka)', en: 'Article statistics (aka)'}
};
},
pages: function () {
return {
url: data.xtools + 'pages/',
param: [data.project.dbname, data.relevantPage.user, {uselang: data.lang.user}],
example: 'user',
name: {de: 'Artikelanlagen', en: 'New articles'},
tooltip: {de: 'Artikel, die von diesem Benutzer angelegt wurden', en: 'Show all articles created by this user'}
};
},
pages_in_cats: function () {
return {
disabled: 'defekt',
url: data.labs + 'catscan3/pages_in_cats.php',
param: {project: data.project.project, language: data.project.lang,
category: data.relevantPage.title, depth: 100, doit: 'Run'},
example: 'category',
name: {de: 'Seitenanzahl', en: 'Category count'},
tooltip: {de: 'Anzahl der Seiten in dieser Kategorie (einschließlich Unterkategorien)',
'de-ch': 'Anzahl der Seiten in dieser Kategorie (einschliesslich Unterkategorien)',
en: 'Number of pages in this category (including subcategories)'}
};
},
pageviews: function () {
return {
url: data.labs + 'pageviews',
param: {project: data.project.server, pages: data.relevantPage.page, range: 'latest-30'},
example: 'article',
name: {de: 'Abrufstatistik', en: 'Traffic stats'},
tooltip: {de: 'Zahl der Seitenabrufe', en: 'Number of views for this page'}
};
},
pdfehler: function () {
return {
only: data.project.dbname === 'dewiki',
url: data.labs + 'checkpersondata/cgi-bin/pd.cgi',
param: {view: 'detail', pageid: data.relevantPage.id},
example: 'article',
name: {de: 'Fehler in Personendaten', en: 'Errors in persondata'},
tooltip: {de: 'Überprüft auf Fehler in Personendaten', en: 'Check for errors in persondata'}
};
},
personensuche: function () {
return {
only: data.project.dbname === 'dewiki',
url: data.labs + 'persondata/',
example: 'simple',
name: {de: 'Personensuche', en: 'Persons'},
tooltip: {de: 'Suche nach Personen', en: 'Search for persons'}
};
},
petscan: function () {
return {
url: 'https://petscan.wmflabs.org/',
param: {language: data.project.lang, project: data.project.project, depth: 12,
interface_language: data.lang.user, categories: data.relevantPage.title, ns: {0: 1}},
example: 'category',
name: {en: 'PetScan'},
tooltip: {de: 'PetScan für diese Kategorie', en: 'PetScan for this category'}
};
},
prefixindex: function () {
return {
url: data.script,
param: {title: 'Special:Prefixindex/User:' + data.relevantPage.user + '/'},
example: 'user',
name: {de: 'Alle Seiten', en: 'All pages'},
tooltip: {de: 'Zeigt alle Seiten des Benutzers an', en: 'Show all pages of this user'}
};
},
purge: function () {
return {
url: data.script,
param: {title: data.relevantPage.page, action: 'purge'},
onclick: function (e) {
e.preventDefault();
$.post(mw.util.wikiScript('api'), {
action: 'purge',
titles: data.relevantPage.page,
format: 'json', formatversion: 2
}).then(function () {
location.reload(false);
});
},
example: 'article',
name: {en: 'Purge'},
tooltip: {de: 'Server-Cache leeren', en: 'Clear server cache'}
};
},
quick_counter: function () {
return {
disabled: 'actor table',
url: data.labs + 'magnustools/quick_counter.php',
param: {user: data.relevantPage.user, project: data.project.server.replace(/\.org$/, '')},
example: 'user',
name: {de: 'Bearbeitungszähler (schnell)', en: 'Edit counter (quick)'},
tooltip: {de: 'Schneller Bearbeitungszähler', en: 'Quick edit counter'}
};
},
randomarticle: function () {
return {
url: data.labs + 'erwin85/randomarticle.php',
param: {lang: data.project.lang, family: data.project.project, namespaces: -1,
categories: data.relevantPage.title, subcats: 10, d: 0, action: 0, submit: 'Submit'},
example: 'category',
name: {de: 'Zufälliger Artikel', en: 'Random article'},
tooltip: {de: 'Zufälliger Artikel aus dieser Kategorie (einschließlich Unterkategorien)',
'de-ch': 'Zufälliger Artikel aus dieser Kategorie (einschliesslich Unterkategorien)',
en: 'Random article from this category (including subcategories)'}
};
},
randomincategory: function () {
return {
url: data.script,
param: {title: 'Special:RandomInCategory/' + data.relevantPage.title},
example: 'category',
name: {de: 'Zufälliger Artikel', en: 'Random article'},
tooltip: {de: 'Zufälliger Artikel aus dieser Kategorie',
en: 'Random article from this category'}
};
},
randomoos: function () {
return {
only: data.project.dbname === 'dewiki',
url: data.labs + 'sighting/random_out_of_sight.php',
param: {limit: 5, out: 20, language: data.project.lang, project: data.project.project},
example: 'simple',
name: {de: 'Zufällige nachzusichtende Artikel', en: 'Random out of sight'},
tooltip: {de: 'Liste mit 20 zufälligen Artikeln, die auf eine Sichtung warten',
en: 'List containing 20 random articles waiting to be sighted'}
};
},
redirectviews: function () {
return {
url: data.labs + 'redirectviews',
param: {project: data.project.server, page: data.relevantPage.page, range: 'latest-30'},
example: 'article',
name: {de: 'Abrufstatistik (WL)', en: 'Traffic stats (RED)'},
tooltip: {de: 'Zahl der Seitenabrufe, einschließlich Weiterleitungen',
en: 'Number of views for this page, including redirects'}
};
},
relatedchanges: function () {
return {
disabled: 'not functional',
url: data.labs + 'erwin85/relatedchanges.php',
param: {lang: data.project.lang, family: data.project.project, category: data.relevantPage.title,
d: 10, submit: 'Submit'},
example: 'category',
name: {de: 'Änderungen', en: 'Related changes'},
tooltip: {de: 'Zeigt Änderungen an Seiten aus dieser Kategorie (einschließlich Unterkategorien)',
'de-ch': 'Zeigt Änderungen an Seiten aus dieser Kategorie (einschliesslich Unterkategorien)',
en: 'Show changes to articles from this category (including subcategories)'}
};
},
reverse_tree: function () {
return {
url: data.labs + 'catscan2/reverse_tree.php',
param: {language: data.project.lang, project: data.project.project, title: data.relevantPage.title,
namespace: data.relevantPage.ns, doit: 1},
example: 'category',
name: {de: 'Kategorien-Baum', en: 'Category tree'},
tooltip: {de: 'Zeigt die Oberkategorien als Liste', en: 'Show the supercategories as list'}
};
},
rfa: function () {
return {
disabled: 'The ini file could not be read',
only: (
data.project.dbname === 'dewiki' && (
data.relevantPage.page.indexOf('Wikipedia:Adminkandidaturen/') === 0 ||
data.relevantPage.page.indexOf('Wikipedia:Bürokratenkandidaturen/') === 0)
) || (
data.project.dbname === 'enwiki' && (
data.relevantPage.page.indexOf('Wikipedia:Request_for_adminship/') === 0 ||
data.relevantPage.page.indexOf('Wikipedia:Request_for_bureaucratship/') === 0)
),
url: data.labs + 'xtools/rfa/',
param: {project: data.project.dbname, p: data.relevantPage.page},
example: 'wp',
name: {de: 'Abstimmung überprüfen', en: 'Check votes'},
tooltip: {de: 'Diese Kandidatur auf Doppelabstimmungen etc. prüfen', en: 'Check this poll for double votes etc.'}
};
},
rfap: function () {
return {
disabled: 'The ini file could not be read',
only: data.project.dbname === 'dewiki' || data.project.dbname === 'enwiki',
url: data.labs + 'xtools/rfap/',
param: {project: data.project.dbname, user: data.relevantPage.user},
example: 'user',
name: {de: 'Abstimmverhalten', en: 'Votes'},
tooltip: {de: 'Stimmen dieses Benutzers in Adminkandidaturen', en: 'Votes by this user in polls for adminship'}
};
},
simplecount: function () {
return {
url: data.xtools + 'sc/',
param: [data.project.dbname, data.relevantPage.user, {uselang: data.lang.user}],
example: 'user',
name: {de: 'Bearbeitungszähler (einfach)', en: 'Edit counter (simple)'},
tooltip: {de: 'Sehr einfacher Bearbeitungszähler', en: 'Very simple edit counter'}
};
},
stimmberechtigung: function () {
return {
only: data.project.dbname === 'dewiki',
url: data.labs + 'stimmberechtigung',
param: {user: data.relevantPage.user},
example: 'user',
name: {de: 'Stimmberechtigung', en: 'Eligibility'},
tooltip: {de: 'Überprüft die Stimmberechtigung', en: 'Check for eligibility'}
};
},
sugart: function () {
return { //mixed content
only: !data.project.special && data.project.lang !== data.lang.userFallback,
url: data.labs + 'joanjoc/sugart.php',
param: {l1: data.project.lang, pr: data.project.projectShort, l2: data.lang.userFallback,
cat: data.relevantPage.title, dpt: 3, tpl: '', go: 'Proceed'},
example: 'en',
name: {de: 'Fehlende Artikel in ' + data.lang.userFallback, en: 'Missing articles in ' + data.lang.userFallback},
tooltip: {
de: 'Ermittelt alle Artikel in dieser Kategorie samt Unterkategorien, die es in ' +
data.lang.userFallback + '.' + data.project.project + ' nicht gibt',
en: 'Show all articles in this category including subcategories which don\'t exist in ' +
data.lang.userFallback + '.' + data.project.project
}
};
},
sulutil: function () {
return {
disabled: 'defekt',
url: data.labs + 'quentinv57-tools/tools/sulinfo.php',
param: {username: data.relevantPage.user},
example: 'user',
name: {de: 'Kontenübersicht', en: 'SUL util'},
tooltip: {de: 'Globales Benutzerkonto', en: 'Global account'}
};
},
summary: function () {
return {
url: data.labs + 'sigma/summary.py',
param: {name: data.relevantPage.user, search: '', max: 100, server: data.project.dbname},
example: 'user',
name: {de: 'Zusammenfassungen durchsuchen', en: 'Search edit comments'},
tooltip: {de: 'Durchsucht alle Bearbeitungskommentare dieses Benutzers',
en: 'Search through all edit comments of this user'}
};
},
supercount: function () {
return {
url: data.labs + 'supercount/index.php',
param: {user: data.relevantPage.user, project: data.project.server},
example: 'user',
name: {de: 'Bearbeitungszähler (ausführlich)', en: 'Edit counter (extended)'},
tooltip: {de: 'Ausführlicher Bearbeitungszähler', en: 'Extended edit counter'}
};
},
svgcheck: function () {
return {
url: data.labs + 'svgcheck/index.php',
example: 'simple',
name: {en: 'SVG-Check'},
tooltip: {de: 'SVG-Datei vor dem Hochladen überprüfen', en: 'Check SVG file before uploading'}
};
},
templatetiger: function () {
return {
disabled: 'keine Daten mehr',
url: data.labs + 'templatetiger/template-parameter.php',
param: {lang: data.project.dbname, template: data.relevantPage.title.replace(/ /g, '_')},
example: 'template',
name: {en: 'Templatetiger'},
tooltip: {de: 'Vorlagenauswertung', en: 'Template evaluation'}
};
},
topedits: function () {
return {
url: data.xtools + 'topedits/',
param: [data.project.dbname, data.user, data.relevantPage.ns, data.relevantPage.title, {uselang: data.lang.user}],
example: 'article',
name: {de: 'Eigene Beiträge', en: 'My contributions'},
tooltip: {de: 'Zeigt die eigenen Bearbeitungen auf dieser Seite', en: 'Show your own contributions to this page'}
};
},
topviews: function () {
return {
url: data.labs + 'topviews',
param: {project: data.project.server},
example: 'simple',
name: {de: 'Abrufstatistik', en: 'Traffic stats'},
tooltip: {de: 'Liste der am häufigsten aufgerufenen Seiten', en: 'List of top viewed pages'}
};
},
translate: function () {
var text = '→ ' + data.lang.userFallback;
if (data.lang.userFallback === 'de') {
text = 'Deutsch';
}
return {
only: data.lang.page !== data.lang.userFallback && data.lang.model === 'wikitext',
url: 'https://translate.google.com/translate',
param: {u: data.realPage.href, sl: data.lang.page,
tl: data.lang.userFallback, hl: data.lang.userFallback, ie: 'UTF-8'},
example: 'commons',
name: {en: text},
tooltip: {de: 'Google-Übersetzung (' + text + ')', en: 'Google translation (' + text + ')'}
};
},
url2commons: function () {
return {
only: data.project.dbname === 'commonswiki',
url: data.labs + 'url2commons/index.html',
example: 'commons',
name: {de: 'von URL hochladen', en: 'Upload via URL'},
tooltip: {de: 'Dateien direkt über eine URL hochladen', en: 'Upload files directly via URL'}
};
},
urlshortener: function () {
return {
url: 'https://meta.wikimedia.org/wiki/Special:UrlShortener',
param: {url: data.realPage.href},
example: 'article',
name: {de: 'Kurz-URL', en: 'Short URL'},
tooltip: {de: 'Kurz-URL erstellen', en: 'Create short URL'}
};
},
userpages: function () {
return {
url: data.labs + 'meta/userpages/',
param: [data.relevantPage.user],
example: 'user',
name: {de: 'Benutzerseiten', en: 'User pages'},
tooltip: {de: 'Benutzerseiten in allen Wikis', en: 'User pages in all wikis'}
};
},
usersearch: function () {
return {
url: data.labs + 'sigma/usersearch.py',
param: {name: data.user, page: data.relevantPage.page, server: data.project.dbname},
example: 'article',
name: {de: 'Eigene Beiträge', en: 'My contributions'},
tooltip: {de: 'Zeigt die eigenen Bearbeitungen auf dieser Seite', en: 'Show your own contributions to this page'}
};
},
userviews: function () {
return {
url: data.labs + 'userviews',
param: {project: data.project.server, user: data.relevantPage.user, range: 'latest-30'},
example: 'user',
name: {de: 'Artikelaufrufe', en: 'Article views'},
tooltip: {de: 'Zeigt an, wie oft Artikel dieses Benutzers aufgerufen wurden',
en: 'Show how often articles created by this user have been viewed'}
};
},
utrace: function () {
return {
//disabled: 'Karte defekt',
url: 'http://www.utrace.de/',
param: {query: data.relevantPage.user},
example: 'ip',
name: {en: 'Geo-IP'},
tooltip: {de: 'Zeigt die geografische Herkunft dieser IP', en: 'Show the geografic location of this IP'}
};
},
videoconvert: function () {
return {
disabled: 'Service Unavailable',
url: data.labs + 'videoconvert/index.php',
example: 'simple',
name: {de: 'Video konvertieren', en: 'Convert video'},
tooltip: {de: 'Video konvertieren und hochladen', en: 'Convert and upload video'}
};
},
visualeditor: function () {
return {
url: data.script,
param: {title: data.relevantPage.page, veaction: 'edit'},
onclick: function (e) {
if (
mw.config.get('wgIsArticle') && mw.util.getParamValue('diff') === null &&
mw.libs.ve && mw.libs.ve.onEditTabClick
) {
mw.libs.ve.onEditTabClick('visual', e);
}
},
example: 'article',
name: {en: 'VisualEditor'},
tooltip: {de: 'Mit dem VisualEditor bearbeiten', en: 'Edit with VisualEditor'}
};
},
webchecklinks: function () {
return {
only: data.project.project === 'wikipedia',
url: 'http://69.142.160.183/~dispenser/cgi-bin/webchecklinks.py',
param: {page: data.project.lang + ':' + data.relevantPage.page},
example: 'article',
name: {de: 'Weblink-Checker', en: 'Webchecklinks'},
tooltip: {de: 'Überprüft Weblinks auf Verfügbarkeit', en: 'Check all weblinks'}
};
},
whatismyipaddress: function () {
return {
url: 'https://whatismyipaddress.com/ip/',
param: [data.relevantPage.user + '#Geolocation-Map'],
example: 'ip',
name: {en: 'Geo-IP'},
tooltip: {de: 'Zeigt die geografische Herkunft dieser IP', en: 'Show the geografic location of this IP'}
};
},
whois: function () {
return {
url: data.labs + 'whois/gateway.py',
param: {lookup: 'true', ip: data.relevantPage.user},
example: 'ip',
name: {en: 'WhoIs'},
tooltip: {de: 'Informationen über diese IP', en: 'Information about this IP'}
};
},
wikiapiary: function () {
var project;
switch (data.project.project) {
case 'wikimedia':
project = data.project.lang === 'commons' ? 'Wikimedia_Commons' : 'Meta-Wiki';
break;
case 'wikidata':
project = 'Wikidata';
break;
case 'mediawiki':
project = 'MediaWiki.org';
break;
default: project = data.project.project + '_(' + data.project.lang + ')';
}
return {
url: 'https://wikiapiary.com/wiki/',
param: [project + '#tab=Usage'],
example: 'simple',
name: {en: 'Wikiapiary'},
tooltip: {de: 'Allgemeine Informationen und Grafiken', en: 'General information and diagramms'}
};
},
wikiblame: function () {
return {
url: 'http://wikipedia.ramselehof.de/wikiblame.php',
param: {user_lang: data.lang.user, lang: data.project.lang, project: data.project.project,
article: data.relevantPage.page, searchmethod: 'int', order: 'desc', needle: ''},
selection: true,
example: 'article',
name: {en: 'Wikiblame (Flo)'},
tooltip: {de: 'Ermittelt, wann die markierte Textstelle eingefügt wurde',
en: 'Find out when the selected text was inserted'}
};
},
wikibu: function () {
return {
only: data.project.dbname === 'dewiki',
url: 'http://wikibu.ch/search.php',
param: {search: data.relevantPage.page},
example: 'article',
name: {en: 'Wikibu.ch'},
tooltip: {de: 'Automatische Bewertung', en: 'Automatic assessment'}
};
},
wikihistory: function () {
return {
only: data.project.dbname === 'dewiki',
url: data.labs + 'wikihistory/wh.php',
param: {page_title: data.relevantPage.page},
example: 'article',
name: {de: 'Bearbeitungsstatistik (WH)', en: 'WikiHistory'},
tooltip: {de: 'Statistiken zur Versionsgeschichte', en: 'Statistics about the version history'}
};
},
wikilint: function () {
return {
disabled: 'Service Unavailable',
only: (data.project.project === 'wikipedia' && (data.project.lang === 'de' || data.project.lang === 'en')),
url: data.labs + 'wikilint/cgi-bin/wikilint',
param: {l: data.project.lang, do_typo_check: 'ON', remove_century: 'ON',
url: 'http://' + data.project.lang + '.wiki.x.io/wiki/' + data.relevantPage.page},
example: 'article',
name: {en: 'WikiLint'},
tooltip: {de: 'Fehlerüberprüfung mit WikiLint', en: 'Check for common errors using WikiLint'}
};
},
wikimediacounter: function () {
return {
url: data.labs + 'wmcounter/index.php',
example: 'simple',
name: {de: 'Gesamtzahl aller Bearbeitungen', en: 'Wikimediacounter'},
tooltip: {de: 'Bearbeitungszähler für alle Wikimedia-Projekte',
en: 'Show the number of edits in all Wikimedia projects'}
};
},
wikishootme: function () {
return {
url: data.labs + 'wikishootme/',
param: {language: data.project.lang},
example: 'simple',
name: {en: 'Wikishootme'},
tooltip: {de: 'Fotowünsche in einer bestimmten Gegend',
en: 'Wanted photos in a specified region'}
};
},
wikitodo: function () {
return {
only: data.project.project === 'wikipedia',
url: data.labs + 'wiki-todo/',
param: {language: data.project.lang},
example: 'simple',
name: {en: 'ToDo'},
tooltip: {de: 'Zufälliger Artikel mit Verbesserungsvorschlägen',
en: 'Random article with suggestions to improve it'}
};
}
},
filters = {
disabled: function () {
return false;
},
action: function (a) {
return data.action === a;
},
action_edit: function () {
return data.action === 'edit' || data.action === 'submit';
},
special: function (s) {
return data.realPage.ns === -1 &&
(s === undefined || data.realPage.id.toString().toLowerCase() === s);
},
special_booksources: function () {
return data.realPage.id.toString().toLowerCase() === 'booksources' && !!data.relevantPage.id;
},
special_contributions: function () {
return data.realPage.id.toString().toLowerCase() === 'contributions' && !!data.relevantPage.user;
},
special_upload: function () {
return data.realPage.id.toString().toLowerCase() === 'upload' ||
data.realPage.id.toString().toLowerCase() === 'uploadwizard';
},
ns: function (ns) {
return String(data.relevantPage.ns) === ns;
},
ns_special: function () {
return data.relevantPage.ns === -1;
},
ns_main: function () {
return data.relevantPage.ns === 0 || data.relevantPage.ns === 1;
},
ns_user: function () {
return data.relevantPage.ns === 2 || data.relevantPage.ns === 3;
},
ns_project: function () {
return data.relevantPage.ns === 4 || data.relevantPage.ns === 5;
},
ns_file: function () {
return data.relevantPage.ns === 6 || data.relevantPage.ns === 7;
},
ns_mediawiki: function () {
return data.relevantPage.ns === 8 || data.relevantPage.ns === 9;
},
ns_template: function () {
return data.relevantPage.ns === 10 || data.relevantPage.ns === 11;
},
ns_help: function () {
return data.relevantPage.ns === 12 || data.relevantPage.ns === 13;
},
ns_category: function () {
return data.relevantPage.ns === 14 || data.relevantPage.ns === 15;
},
ns_portal: function () {
return data.relevantPage.ns === 100 || data.relevantPage.ns === 101;
},
ns_talk: function () {
return data.relevantPage.ns % 2 === 1;
},
is_user: function () {
return !!data.relevantPage.user;
},
is_ip: function () {
return mw.util.isIPAddress(data.relevantPage.user);
}
},
config = [
//[Bedingung, Tool, Ziel]
['', 'translate'],
['disabled', 'urlshortener', 1],
['!special', ['wikiblame', 'blame'], 1],
['!ns_0', 'pageviews', 1],
[['disabled', '!ns_special'], 'edit0'],
[['disabled', 'ns_0'], 'visualeditor'],
[['disabled', 'ns_2'], 'visualeditor'],
[['disabled', '!ns_special'], 'purge'],
['action_history', 'mydiff'],
[['disabled', 'action_history'], 'log'],
['action_history', ['usersearch', 'topedits']],
['action_history', 'contributors'],
['special_watchlist', 'crosswatch'],
['special_booksources', 'isbncheck'],
['special_booksources', 'isbn2wiki'],
['special_statistics', 'wikimediacounter'],
['special_statistics', 'onemillion'],
['special_statistics', 'wikiapiary'],
['special_statistics', 'topviews'],
['special_statistics', 'adminstats'],
['special_search', 'personensuche'],
['special_search', ['grep', 'listpages']],
['special_search', 'globalwpsearch'],
['special_upload', 'svgcheck'],
['special_upload', 'url2commons'],
['special_upload', 'videoconvert'],
['special_recentchanges', 'lkozma'],
['special_recentchanges', 'randomoos'],
['special_recentchanges', 'lagging'],
['special_recentchanges', 'wikitodo'],
[['disabled', 'special_recentchanges'], 'listen'],
[['disabled', 'special_recentchanges'], 'blankpages'],
[['disabled', 'special_recentchanges'], 'orphantalk'],
[['disabled', 'special_recentchanges'], 'wikishootme'],
['special_contributions', 'editsummary'],
['special_contributions', ['pages', 'created', 'log_create', 'newpages']],
['special_contributions', 'intersectcontribs1'],
['special_contributions', 'editcount'],
['special_contributions', 'supercount'],
['special_contributions', 'simplecount'],
['special_contributions', 'quick_counter'],
[['disabled', 'special_contributions'], 'autoedits'],
['special_contributions', ['guc', 'globalcontribs']],
[['special_contributions', '!is_ip'], 'sulutil'],
['special_contributions', 'summary'],
['ns_0', 'google'],
['ns_0', 'wikihistory'],
['ns_0', 'articleinfo'],
['ns_0', 'pagehiststat'],
['ns_0', 'pageviews'],
[['disabled', 'ns_0'], 'redirectviews', 1],
['ns_0', 'wikilint'],
['ns_0', ['catgraph', 'reverse_tree']],
['ns_0', 'webchecklinks'],
['ns_0', 'mw2latex', 'p-coll-print_export'],
['ns_0', 'checkwiki', 1],
['ns_0', 'pdfehler', 1],
['ns_0', 'wikibu', 1],
['ns_0', 'copyvios', 1],
['ns_0', 'pageconjunction', 1],
[['disabled', 'ns_0'], 'dab_solver'],
[['disabled', 'ns_0'], 'fist'],
[['is_user', 'is_ip'], 'whois'],
[['is_user', 'is_ip'], ['whatismyipaddress', 'utrace']],
['ns_user', 'prefixindex'],
[['is_user', '!special_contributions'], 'contributions'],
[['disabled', 'ns_user'], 'listfiles'],
['ns_user', 'intersectcontribs'],
[['is_user', '!is_ip'], 'listusers', 1],
[['is_user', '!is_ip'], 'globalusers', 1],
[['is_user', '!is_ip'], 'stimmberechtigung', 1],
[['is_user', '!is_ip'], 'accounteligibility', 1],
['is_user', ['userviews', 'metronom'], 1],
['is_user', 'userpages', 1],
[['disabled', 'is_user', '!is_ip'], 'rfap', 1],
['is_user', 'crossactivity', 1],
[['disabled', 'ns_user'], 'log_aktiv'],
[['disabled', 'ns_2'], 'massviews_subpage', 1],
['ns_4', 'rfa'],
['ns_6', 'commonshelper'],
['ns_6', 'afterUpload'],
['ns_6', 'croptool'],
['ns_10', 'templatetiger'],
['ns_14', 'catscan_quick'],
['ns_14', ['catscan', 'petscan']],
['ns_14', 'catnap'],
[['disabled', 'ns_14'], 'catanalysis'],
['ns_14', 'cat'],
['ns_14', ['catgraph', 'reverse_tree']],
['ns_14', 'categoryedits'],
['ns_14', 'mainAuthors'],
['ns_14', ['randomarticle', 'randomincategory']],
['ns_14', 'deep_ins'],
['ns_14', ['deep_oos', 'flagged']],
['ns_14', 'missingtopics'],
['ns_14', 'relatedchanges'],
['ns_14', 'pages_in_cats'],
['ns_14', ['massviews_category', 'glamtree'], 1],
['ns_14', 'itemsByCat', 1],
['ns_14', 'sugart', 1],
['ns_14', 'artniw', 1],
['ns_14', 'herding_sheep', 1]
],
examples = {
article: {
lang: {
model: 'wikitext'
},
realPage: {
page: 'Internationale_Mathematik-Olympiade',
title: 'Internationale Mathematik-Olympiade',
href: 'https://de.wiki.x.io/wiki/Internationale_Mathematik-Olympiade',
ns: 0,
id: 225232
},
relevantPage: {
page: 'Internationale_Mathematik-Olympiade',
title: 'Internationale Mathematik-Olympiade',
user: '',
ns: 0,
id: 225232
},
selection: 'Lisa'
},
category: {
realPage: {
page: 'Kategorie:Unicode',
title: 'Unicode',
href: 'https://de.wiki.x.io/wiki/Kategorie:Unicode',
ns: 14,
id: 1360298
},
relevantPage: {
page: 'Kategorie:Unicode',
title: 'Unicode',
user: '',
ns: 14,
id: 1360298
}
},
commons: {
project: {
server: 'commons.wikimedia.org',
lang: 'commons',
project: 'wikimedia',
projectShort: 'wiki',
dbname: 'commonswiki'
},
lang: {
user: 'en',
site: 'en',
page: 'en',
userFallback: 'de',
model: 'wikitext'
},
realPage: {
page: 'User:Schnark',
title: 'Schnark',
href: 'https://commons.wikimedia.org/wiki/User:Schnark',
ns: 2,
id: 4273713
},
relevantPage: {
page: 'User:Schnark',
title: 'Schnark',
user: 'Schnark',
ns: 2,
id: 4273713
}
},
en: {
project: {
server: 'en.wiki.x.io',
lang: 'en',
project: 'wikipedia',
projectShort: 'wiki',
dbname: 'enwiki'
},
lang: {
user: 'en',
site: 'en',
page: 'en',
userFallback: 'de',
model: 'wikitext'
},
realPage: {
page: 'Category:Unicode',
title: 'Unicode',
href: 'https://en.wiki.x.io/wiki/Category:Unicode',
ns: 14,
id: 720904
},
relevantPage: {
page: 'Category:Unicode',
title: 'Unicode',
user: '',
ns: 14,
id: 720904
}
},
image: {
realPage: {
page: 'Datei:Sichten1.png',
title: 'Sichten1.png',
href: 'https://de.wiki.x.io/wiki/Datei:Sichten1.png',
ns: 6,
id: 6472532
},
relevantPage: {
page: 'Datei:Sichten1.png',
title: 'Sichten1.png',
user: '',
ns: 6,
id: 6472532
}
},
ip: {
realPage: {
page: 'Spezial:Beiträge/193.47.104.38',
title: 'Beiträge/193.47.104.38',
href: 'https://de.wiki.x.io/wiki/Spezial:Beiträge/193.47.104.38',
ns: -1,
id: 'Contributions'
},
relevantPage: {
page: 'Benutzer:193.47.104.38', //stimmt zwar nicht, macht aber nichts
title: '193.47.104.38',
user: '193.47.104.38',
ns: 2,
id: 188076
}
},
isbn: {
realPage: {
page: 'Spezial:ISBN-Suche/3895520004',
title: 'ISBN-Suche/3895520004',
href: 'https://de.wiki.x.io/wiki/Spezial:ISBN-Suche/3895520004',
ns: -1,
id: 'Booksources'
},
relevantPage: {
page: 'Spezial:ISBN-Suche/3895520004',
title: 'ISBN-Suche/3895520004',
user: '',
ns: -1,
id: '3895520004'
}
},
simple: {},
template: {
realPage: {
page: 'Vorlage:Personendaten',
title: 'Personendaten',
href: 'https://de.wiki.x.io/wiki/Vorlage:Personendaten',
ns: 10,
id: 393916
},
relevantPage: {
page: 'Vorlage:Personendaten',
title: 'Personendaten',
user: '',
ns: 10,
id: 393916
}
},
user: {
realPage: {
page: 'Spezial:Beiträge/Schnark',
title: 'Beiträge/Schnark',
href: 'https://de.wiki.x.io/wiki/Spezial:Beiträge/Schnark',
ns: -1,
id: 'Contributions'
},
relevantPage: {
page: 'Benutzer:Schnark', //stimmt zwar nicht, macht aber nichts
title: 'Schnark',
user: 'Schnark',
ns: 2,
id: 8464673
}
},
usercat: {
realPage: {
page: 'Kategorie:User_la-4',
title: 'User la-4',
href: 'https://de.wiki.x.io/wiki/Kategorie:User_la-4',
ns: 14,
id: 865318
},
relevantPage: {
page: 'Kategorie:User_la-4',
title: 'User la-4',
user: '',
ns: 14,
id: 865318
}
},
wp: {
realPage: {
page: 'Wikipedia:Adminkandidaturen/Umherirrender_(2012)',
title: 'Adminkandidaturen/Umherirrender (2012)',
href: 'https://de.wiki.x.io/wiki/Wikipedia:Adminkandidaturen/Umherirrender_(2012)',
ns: 4,
id: 6711389
},
relevantPage: {
page: 'Wikipedia:Adminkandidaturen/Umherirrender_(2012)',
title: 'Adminkandidaturen/Umherirrender (2012)',
user: '',
ns: 4,
id: 6711389
}
}
},
hasOwn = Object.prototype.hasOwnProperty;
/*jshint camelcase: true*/
//jscs:enable requireCamelCaseOrUpperCaseIdentifiers
function initvars () {
data.action = mw.config.get('wgAction');
data.script = mw.config.get('wgServer') + mw.config.get('wgScript');
data.user = mw.config.get('wgUserName');
data.realPage = {
page: mw.config.get('wgPageName'),
title: mw.config.get('wgTitle'),
href: location.href,
ns: mw.config.get('wgNamespaceNumber'),
id: mw.config.get('wgCanonicalSpecialPageName') || mw.config.get('wgArticleId')
};
data.relevantPage.page = mw.config.get('wgRelevantPageName');
data.relevantPage.user = mw.config.get('wgRelevantUserName', '');
data.relevantPage.id = mw.config.get('wgRelevantArticleId') || data.realPage.id;
if (data.relevantPage.page.indexOf(':') === -1) {
data.relevantPage.ns = 0;
} else {
data.relevantPage.ns = mw.config.get('wgNamespaceIds')[
data.relevantPage.page.replace(/:.*/, '').toLowerCase()
] || 0;
}
data.relevantPage.title = data.relevantPage.page.replace(/_/g, ' ');
if (data.relevantPage.ns !== 0) {
data.relevantPage.title = data.relevantPage.title.replace(/.*?:/, '');
}
if (data.realPage.id === 'Booksources') {
data.relevantPage.id = (
(data.realPage.title.indexOf('/') > -1 ? data.realPage.title.replace(/.*\//, '') : '') ||
mw.util.getParamValue('isbn') ||
''
).toUpperCase().replace(/[^0-9X]/g, '');
}
data.project.server = location.hostname;
data.project.dbname = mw.config.get('wgDBname');
var match = (/^(.*)(wiki(?:books|news|quote|source|versity|voyage)?|wiktionary)$/).exec(data.project.dbname);
if (match) {
data.project.lang = match[1].replace(/_/g, '-');
data.project.projectShort = match[2];
} else { //sollte nicht passieren
mw.log.warn('Unerkannter Datenbankname: ' + data.project.dbname);
data.project.lang = data.project.dbname.replace(/wik.+$/, '').replace(/_/g, '-');
data.project.projectShort = data.project.dbname.replace(/^.+wik/, 'wik');
}
data.project.project = data.project.projectShort;
if (data.project.project === 'wiki') {
switch (data.project.lang) {
case 'commons':
case 'meta':
data.project.project = 'wikimedia';
data.project.special = true;
break;
case 'mediawiki':
case 'wikidata':
data.project.project = data.project.lang;
data.project.lang = 'en';
data.project.special = true;
break;
default:
data.project.project = 'wikipedia';
}
}
data.lang = {
user: mw.config.get('wgUserLanguage'),
site: mw.config.get('wgContentLanguage'),
page: mw.config.get('wgPageContentLanguage') || mw.config.get('wgContentLanguage'),
model: mw.config.get('wgPageContentModel', 'wikitext'),
userFallback: data.lang.userFallback //kann schon durch Benutzer gesetzt sein
};
if (data.lang.site === 'simple') {
data.lang.site = 'en';
}
if (data.lang.page === 'simple') {
data.lang.page = 'en';
}
if (!data.lang.userFallback) { //kann schon durch Benutzer gesetzt sein
if (data.lang.user.indexOf('de-') === 0) {
data.lang.userFallback = 'de'; //de-AT etc.
} else {
data.lang.userFallback = data.lang.user;
}
}
data.targets.primary = getUsableTarget([
'p-pageactions', //timeless alt
'p-cactions', //fast alle Skins
'p-pagemisc' //timeless fallback
]);
data.targets.secondary = getUsableTarget([
'p-pagemisc',
'p-tb'
]);
return data.realPage.id !== 'ContentTranslation'; //Spezialseite mit eigenem Layout
}
//Hilfsfunktionen
function getUsableTarget (ids) {
var i;
for (i = 0; i < ids.length; i++) {
if ($('#' + ids[i]).length) {
return ids[i];
}
}
mw.log.warn('Keine passende ID gefunden: ' + ids.join(', '));
return ids[0];
}
function getTarget (target) {
if (!target) {
return data.targets.primary;
}
if (target === 1) {
return data.targets.secondary;
}
return data.targets.map[target] || target;
}
function addPortlet (target, data) {
if (data.only === false || data.disabled) {
return false;
}
var url = getUrl(data.url, data.param),
name = getTranslation(data.name),
tooltip = getTranslation(data.tooltip),
portlet = mw.util.addPortletLink(target, url, name, 'ca-' + name.replace(/[^a-zA-Z0-9]/g, '-'), tooltip);
if (data.selection) {
//nur per Maus erreichbar, da sonst Auswahl ohnehin verloren geht
$(portlet).on('mouseenter', updateWithSelection);
}
if (data.onclick) {
$(portlet).on('click', data.onclick);
}
return true;
}
function check (cond) {
var not = false, ret = false, fun, par;
if (cond === '') {
return true;
}
if (cond.charAt(0) === '!') {
not = true;
cond = cond.slice(1);
}
if (filters[cond]) {
ret = filters[cond]();
} else {
fun = cond.replace(/_.*$/, '');
par = cond.replace(/^[^_]*_/, '');
if (filters[fun]) {
ret = filters[fun](par);
}
}
return not ? !ret : ret;
}
function checkAll (cond) {
if (typeof cond === 'string') {
return check(cond);
}
for (var i = 0; i < cond.length; i++) {
if (!check(cond[i])) {
return false;
}
}
return true;
}
function addTool (tool) {
var i, t;
if (checkAll(tool[0])) {
t = Array.isArray(tool[1]) ? tool[1] : [tool[1]];
for (i = 0; i < t.length; i++) {
if (tools[t[i]] && addPortlet(getTarget(tool[2]), tools[t[i]]())) {
return true;
}
}
}
return false;
}
function addTools () {
var i;
for (i = 0; i < config.length; i++) {
addTool(config[i]);
}
$(window).trigger('resize'); //für collapsibleTabs.js im Vector-Skin
fixArtikelStatistik();
}
function fixArtikelStatistik () {
//ich will den zusätzlichen Eintrag aus [[Benutzer:Schnark/js/artikel-statistik.js]] ganz am Ende
var $li = $('#ca-schnark-articleStat');
if ($li.length === 1 && !$li.is(':last-child')) {
$li.parent().append($li);
}
}
//bestimmt die beste Sprache für den Benutzer aus einer Liste
function chooseUserLang (from) {
var all = [
data.lang.user,
data.lang.userFallback
].concat(mw.language.getFallbackLanguageChain()), i;
for (i = 0; i < all.length; i++) {
if (from.indexOf(all[i]) !== -1) {
return all[i];
}
}
return from[0];
}
function getTranslation (l10n) {
var i, chain = mw.language.getFallbackLanguageChain();
for (i = 0; i < chain.length; i++) {
if (hasOwn.call(l10n, chain[i])) {
return l10n[chain[i]];
}
}
return l10n.en || '???';
}
function getUrl (path, query) {
var q;
if (!query) {
return path;
}
if (Array.isArray(query)) {
if ($.isPlainObject(query[query.length - 1])) {
q = query.pop();
}
return getUrl(path + query.join('/'), q);
}
return path + '?' + $.param(query).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29')
.replace(/\*/g, '%2A').replace(/~/g, '%7E').replace(/%3A/g, ':').replace(/%2F/g, '/');
}
function updateWithSelection () {
/*jshint validthis: true*///Event-Handler
var $a = $(this), href;
if (!$a.is('a')) {
$a = $a.find('a').first();
}
href = $a.attr('href') || '';
if (/^(?:https?:)?\/\//.test(href)) {
//\= statt =, um JSHint glücklich zu machen
$a.attr('href', href.replace(/\=[^=]*$/, function () {
return '=' + encodeURIComponent(getSelection()); //Funktion, nötig falls markierter Text $$ enthält
}));
}
return;
}
function getSelection () {
var selectedText = '';
if (window.getSelection) {
selectedText = window.getSelection();
}
if (!selectedText && document.activeElement && document.activeElement.selectionEnd) {
selectedText = document.activeElement.value.slice(document.activeElement.selectionStart,
document.activeElement.selectionEnd);
}
return selectedText;
}
function getExample (tool) {
var name = mw.html.element('code', {}, tool), example, orig, result;
if (!tools[tool]) {
return name + ' nicht vorhanden';
}
example = examples[tools[tool]().example];
if (!example) {
return name + ' ohne Beispiel';
}
orig = $.extend(true, {}, data);
$.extend(true, data, example);
tool = tools[tool]();
if (tool.only === false) {
result = name + ' nicht anwendbar';
} else {
result = getUrl(tool.url, tool.param);
if (tool.selection) {
result += (example.selection || '');
}
result = mw.html.element('a', {href: result}, new mw.html.Raw(name));
if (tool.disabled) {
result += ' deaktiviert: ' + tool.disabled;
}
}
data = orig;
return result;
}
function getExamples () {
var tool, list = [];
for (tool in tools) {
if (hasOwn.call(tools, tool)) {
list.push('<li>' + getExample(tool) + '</li>');
}
}
return '<ul>' + list.join('') + '</ul>';
}
function maintain () {
var allDefinedTools = [], allToolsNeedingMaint = [], allUsedTools = [],
allMissingTools = [], allUnusedTools = [], name, tool, i, msg;
function format (list, text) {
if (list.length === 0) {
return '';
}
return text + ':\n* ' + list.join('\n* ') + '\n';
}
for (name in tools) {
if (hasOwn.call(tools, name)) {
allDefinedTools.push(name);
tool = tools[name]();
if (tool.disabled) {
allToolsNeedingMaint.push(name + ' (' + tool.disabled + ')');
}
}
}
for (i = 0; i < config.length; i++) {
if (Array.isArray(config[i][1])) {
allUsedTools = allUsedTools.concat(config[i][1]);
} else {
allUsedTools.push(config[i][1]);
}
}
for (i = 0; i < allDefinedTools.length; i++) {
if (allUsedTools.indexOf(allDefinedTools[i]) === -1) {
allUnusedTools.push(allDefinedTools[i]);
}
}
for (i = 0; i < allUsedTools.length; i++) {
if (allDefinedTools.indexOf(allUsedTools[i]) === -1) {
allMissingTools.push(allUsedTools[i]);
}
}
msg = [
format(allToolsNeedingMaint, 'Tools, die Wartung benötigen'),
format(allMissingTools, 'Fehlende Tools'),
format(allUnusedTools, 'Unbenutzte Tools')
].join('\n');
window.alert(msg);
return msg;
}
function add (tool, cond, place) {
var entry = [cond || '', tool];
if (place) {
entry.push(place);
}
config.push(entry);
}
function doForTool (tool, func) {
var i, j;
for (i = 0; i < config.length; i++) {
if (Array.isArray(config[i][1])) {
j = config[i][1].indexOf(tool);
if (j > -1) {
func(i, j);
}
} else {
if (config[i][1] === tool) {
func(i);
}
}
}
}
function enable (tool) {
doForTool(tool, function (i) {
if (Array.isArray(config[i][0])) {
if (config[i][0][0] === 'disabled') {
config[i][0].shift();
}
} else {
if (config[i][0] === 'disabled') {
config[i][0] = '';
}
}
});
}
function remove (tool) {
doForTool(tool, function (i, j) {
if (j !== undefined) {
config[i][1][j] = '';
} else {
config[i][1] = '';
}
});
}
function replace (tool1, tool2) {
doForTool(tool1, function (i, j) {
if (j !== undefined) {
config[i][1].unshift(tool2);
} else {
config[i][1] = [tool2, config[i][1]];
}
});
}
function defineTool (name, tool) {
tools[name] = tool;
}
function setLang (lang) {
data.lang.userFallback = lang;
}
mw.hook('userjs.load-script.extratabs').fire({
add: add, enable: enable, remove: remove, replace: replace,
defineTool: defineTool, setLang: setLang,
maintain: maintain, getExamples: getExamples
});
$.when($.ready, mw.loader.using('mediawiki.util')).then(function () {
var enabled = initvars();
if (enabled) {
mw.loader.using('mediawiki.language').then(addTools);
}
});
})(jQuery, mediaWiki);
//</nowiki>