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/stub]] <nowiki>
/*global mediaWiki*/
(function ($, mw) {
"use strict";
var l10n = {
//jscs:disable maximumLineLength
en: {
'schnark-stub-monthNamesShort': [ "", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
'schnark-stub-creator': 'Create stub',
'schnark-stub-creator-tooltip': 'Create a stub from available data to be expanded manually',
'schnark-stub-creator-step1': 'This function will create a stub from available data.\nPlease make sure that there already is a Wikidata-item for the article you wish to create\n(if label and description are missing you should add them first,\nand also add missing properties)\nand enter its ID (Q1234):',
'schnark-stub-creator-step2': 'Please enter which template should be used to create the article.\nIn most cases you can just accept the template that was determined automatically.\nThe template must be a subpage of $1.',
'schnark-stub-creator-step3': 'The stub for the new article was created. Now it\'s your turn.\nPlease expand the stub with more information and do *not* save the stub in its present state!\nPerhaps some wrong or superfluous things were added from other languages,\nplease review the content carefully before saving.\n$1',
'schnark-stub-creator-warnings': 'Please pay special attention to the following issues:\n$1',
'schnark-stub-creator-warning-item': '* $1\n',
'schnark-stub-creator-missing-function': 'The used function "$1" is not defined!',
'schnark-stub-creator-missing-config': 'No configuration was found on this wiki!'
},
de: {
'schnark-stub-monthNamesShort': [ "", "Jan.", "Feb.", "Mär.", "Apr.", "Mai", "Jun.", "Jul.", "Aug.", "Sep.", "Okt.", "Nov.", "Dez." ],
'schnark-stub-creator': 'Stub erstellen',
'schnark-stub-creator-tooltip': 'Erzeugt ein Grundgerüst aus vorhandenen Daten zum weiteren Ausbau',
'schnark-stub-creator-step1': 'Diese Funktion erzeugt ein Grundgerüst für einen neuen Artikel aus vorhandenen Daten.\nStelle bitte zunächst sicher, dass ein Wikidata-Item zu dem gewünschten Artikel bereits vorliegt\n(falls Titel und Beschreibung fehlen, solltest du diese zunächst ergänzen,\nebenso noch fehlende Eigenschaften)\nund gib dessen ID (Q1234) an:',
'schnark-stub-creator-step2': 'Gib bitte an, welches Gerüst zum Erstellen des Artikels verwendet werden soll.\nIn den meisten Fällen kannst du einfach das automatisch ermittelte Gerüst akzeptieren.\nDas Gerüst muss eine Unterseite von $1 sein.',
'schnark-stub-creator-step3': 'Das Grundgerüst des neuen Artikels wurde erstellt. Nun bist du an der Reihe.\nBitte ergänze das Gerüst mit weiteren Informationen und speichere den Stub *nicht* in diesem Zustand ab!\nMöglicherweise wurden auch falsche oder unnötige Dinge aus anderen Sprachen übernommen,\nbitte prüfe den Inhalt vor dem Abspeichern genau.\n$1',
'schnark-stub-creator-warnings': 'Beachte bitte vor allem folgende Punkte:\n$1',
'schnark-stub-creator-missing-function': 'Die verwendete Funktion "$1" ist nicht defniert!',
'schnark-stub-creator-missing-config': 'Es wurde keine Konfiguration auf diesem Wiki gefunden!'
},
'de-formal': {
'schnark-stub-creator-step1': 'Diese Funktion erzeugt ein Grundgerüst für einen neuen Artikel aus vorhandenen Daten.\nStellen Sie bitte zunächst sicher, dass ein Wikidata-Item zu dem gewünschten Artikel bereits vorliegt\n(falls Titel und Beschreibung fehlen, sollten Sie diese zunächst ergänzen,\nebenso noch fehlende Eigenschaften)\nund geben Sie dessen ID (Q1234) an:',
'schnark-stub-creator-step2': 'Geben Sie bitte an, welches Gerüst zum Erstellen des Artikels verwendet werden soll.\nIn den meisten Fällen können Sie einfach das automatisch ermittelte Gerüst akzeptieren.\nDas Gerüst muss eine Unterseite von $1 sein.',
'schnark-stub-creator-step3': 'Das Grundgerüst des neuen Artikels wurde erstellt. Nun sind Sie an der Reihe.\nBitte ergänzen Sie das Gerüst mit weiteren Informationen und speichern Sie den Stub *nicht* in diesem Zustand ab!\nMöglicherweise wurden auch falsche oder unnötige Dinge aus anderen Sprachen übernommen,\nbitte prüfen Sie den Inhalt vor dem Abspeichern genau.\n$1',
'schnark-stub-creator-warnings': 'Beachten Sie bitte vor allem folgende Punkte:\n$1'
}
//jscs:enable maximumLineLength
};
function initL10N (l10n) {
var i, chain = mw.language.getFallbackLanguageChain();
for (i = chain.length - 1; i >= 0; i--) {
if (chain[i] in l10n) {
mw.messages.set(l10n[chain[i]]);
}
}
}
function getContents (title, base) {
var d = $.Deferred();
if (base) {
base += '?callback=?';
} else {
base = mw.util.wikiScript('api');
}
$.getJSON(base, {
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'content',
format: 'json',
formatversion: 2
}).done(function (json) {
if (
!json || !json.query || !json.query.pages || !json.query.pages[0] ||
!json.query.pages[0].revisions || !json.query.pages[0].revisions[0]
) {
d.reject();
return;
}
d.resolve(json.query.pages[0].revisions[0].content || '');
}).fail(function () {
d.reject();
});
return d.promise();
}
function Wikidata (q) {
q = String(q);
q = q.toUpperCase();
if (q.charAt(0) !== 'Q') {
q = 'Q' + q;
}
this.q = q;
this.cache = {};
this.lang = mw.config.get('wgContentLanguage');
}
Wikidata.prototype = {
getJSON: function () {
var self = this;
if (!('wikidatawiki' in this.cache)) {
this.cache.wikidatawiki = $.Deferred();
$.getJSON('https://www.wikidata.org/w/api.php?callback=?', {
action: 'wbgetentities',
ids: self.q,
props: 'info|sitelinks|sitelinks/urls|aliases|labels|descriptions|claims|datatype',
languages: self.lang,
languagefallback: true,
format: 'json',
formatversion: 2
}).always(function (data) {
if (data && data.entities && data.entities[self.q]) {
self.cache.wikidatawiki.resolve(data.entities[self.q]);
} else {
self.cache.wikidatawiki.resolve({});
}
});
}
return this.cache.wikidatawiki.promise();
},
getSource: function (wiki) {
var self = this;
if (!(wiki in this.cache)) {
this.cache[wiki] = $.Deferred();
this.getJSON().done(function (data) {
if (data.sitelinks && data.sitelinks[wiki]) {
getContents(
data.sitelinks[wiki].title,
data.sitelinks[wiki].url.replace(/\/wiki\/.*/, '/w/api.php')
).done(self.cache[wiki].resolve).fail(self.cache[wiki].reject);
} else {
self.cache[wiki].reject();
}
});
}
return this.cache[wiki].promise();
},
getLabel: function () {
var d = $.Deferred(), self = this;
this.getJSON().done(function (data) {
if (data.labels && data.labels[self.lang]) {
d.resolve(data.labels[self.lang].value);
} else {
d.reject();
}
});
return d.promise();
},
getAliases: function () {
var d = $.Deferred(), self = this;
this.getJSON().done(function (data) {
if (data.aliases && data.aliases[self.lang]) {
d.resolve($.map(data.aliases[self.lang], function (item) {
return item.value;
}));
} else {
d.reject();
}
});
return d.promise();
},
getDescription: function () {
var d = $.Deferred(), self = this;
this.getJSON().done(function (data) {
if (data.descriptions && data.descriptions[self.lang]) {
d.resolve(data.descriptions[self.lang].value);
} else {
d.reject();
}
});
return d.promise();
},
getArticle: function () {
var d = $.Deferred(), self = this;
this.getJSON().done(function (data) {
if (data.sitelinks && data.sitelinks[self.lang + 'wiki']) {
d.resolve(data.sitelinks[self.lang + 'wiki'].title);
} else {
d.reject();
}
});
return d.promise();
},
getProperty: function (prop, options) {
var d = $.Deferred(), self = this;
this.getJSON().done(function (data) {
if (data.claims && data.claims[prop]) {
d.resolve(self.parseProperty(data.claims[prop], options || {}));
} else {
d.reject();
}
});
return d.promise();
},
parseProperty: function (prop, options) {
var i, best = 0;
function formatOne (p) {
var type = p.mainsnak.datavalue.type, value = p.mainsnak.datavalue.value, res;
switch (type) {
case 'wikibase-entityid':
return new Wikidata(value['numeric-id']);
case 'time':
res = /([+\-])0*(\d+)-0*(\d+)-0*(\d+)T(.*)Z/.exec(value.time);
return [res[4], res[3], res[2] * (res[1] === '-' ? -1 : 1), res[5], value.calendermodel, value.precision];
case 'globecoordinate':
return [value.latitude, value.longitude];
default:
return value;
}
}
if ((options.which || 'best') === 'best') {
for (i = 1; i < prop.length; i++) {
if (prop[i].rank > prop[best].rank) { //'deprecated' < 'normal' < 'preferred'
best = i;
}
}
return formatOne(prop[best]);
} else {
if (options.which !== 'all') {
prop = $.grep(prop, function (item) {
return options.which === item.rank;
});
}
return $.map(prop, formatOne);
}
}
};
function FakeWikidata () {
this.source = {
enwiki: '\'\'\'FakeObject\'\'\' is something.\n\n== External links ==\n* [http://example.org Example link]'
};
this.properties = {
};
}
FakeWikidata.prototype = {
getSource: function (wiki) {
if (wiki in this.source) {
return $.Deferred().resolve(this.source[wiki]).promise();
}
return $.Deferred().reject().promise();
},
getLabel: function () {
return $.Deferred().resolve('Fake-Objekt').promise();
},
getAliases: function () {
return $.Deferred().reject().promise();
},
getDescription: function () {
return $.Deferred().resolve('Test-Objekt für stub.js-Skript').promise();
},
getArticle: function () {
return $.Deferred().reject().promise();
},
getProperty: function (prop/*, options*/) {
//FIXME
if (prop in this.properties) {
return $.Deferred().resolve(this.properties[prop]).promise();
}
return $.Deferred().reject().promise();
}
};
function Variables (wikidata, functions) {
this.wikidata = wikidata;
this.functions = functions;
this.values = {};
this.warnings = [];
}
Variables.prototype = {
get: function (name) {
return this.values[name];
},
getBool: function (name) {
var val = this.get(name);
if ($.isArray(val) && val.length === 0) {
return false;
}
return !!val;
},
getString: function (name) {
if (!this.getBool(name)) {
return '';
}
return String(this.get(name));
},
getWarnings: function () {
return this.warnings;
},
exec: function (f, params) {
if (!(f in this.functions)) {
return $.Deferred().reject(mw.msg('schnark-stub-creator-missing-function', f)).promise();
}
var ret = this.functions[f].apply(this, params);
if (ret && $.isFunction(ret.done)) {
return ret;
}
return $.Deferred().resolve(ret).promise();
},
evalJSON: function (data, empty) {
var i = 0, d = $.Deferred(), self = this;
function next () {
if (i === data.length) {
d.resolve();
return;
}
var name = data[i][0], f = data[i][1], params = data[i].slice(2);
i++;
if (self.getBool(name)) {
next();
return;
}
self.exec(f, params).done(function (val) {
if (name === '') {
if (empty && val) {
d.resolve(val);
i = data.length;
}
} else {
self.values[name] = val;
}
}).fail(function (warning) {
if (warning) {
self.warnings.push(warning);
}
}).always(next);
}
next();
return d.promise();
}
};
function Template (fake) {
fake = fake || 0;
this.fakeWD = fake === 1 || fake === 3;
this.fakeTemplate = fake === 2 || fake === 3;
this.prefix = mw.config.get('wgFormattedNamespaces')[2] + ':Schnark/js/stub.js/';
this.functions = {};
}
Template.prototype = {
addFunction: function (name, f) {
this.functions[name] = f;
},
getPage: function (name, type) {
return this.fakeTemplate ? this.getPageFake(name, type) : this.getPageReal(name, type);
},
getPageFake: function (name, type) {
/*jshint quotmark: double*/
//jscs:disable validateQuoteMarks, maximumLineLength
var data = {
mainjson: [ //gehört als optional in <syntaxhighlight> gepacktes JSON nach [[Benutzer:Schnark/js/stub.js/main/json]]
["weblinksList", "re", "enwiki", "\\*\\s*\\[?((?:https?:)?//\\S*)", "g"],
["weblinks", "format-array", "weblinksList", "* $0", "\n"],
["title", "wikidata-label"],
["description", "wikidata-description"],
["is-a", "wikidata", "P31"],
["is-a-label", "wikidata-label", "is-a"],
["", "map", "is-a-label", {"Mensch": "person"}, "default"]
],
personjson: [
["geschlecht-wd", "wikidata", "P21"],
["geschlecht", "wikidata-label", "geschlecht-wd"],
["eineine", "map", "geschlecht", {"weiblich": "eine"}, "ein"],
["geschlechtKat", "map", "geschlecht", {"weiblich": "Frau", "männlich": "Mann"}, "Geschlecht unbekannt"],
["ansetzung", "input", "Bitte gib den Namen in der Form „Nachname, Vorname“ an:"],
["gnd", "wikidata", "P227"],
["lccn", "wikidata", "P244"],
["lccn-warnung", "map", "lccn", {"": ""}, "Bitte prüfe das Format der LCCN und füge gegebenenfalls Schrägstriche ein!"],
["", "warn", "lccn-warnung"],
["viaf", "wikidata", "P214"],
["geburtsort-wd", "wikidata", "P19"],
["geburtsort-label", "wikidata-label", "geburtsort-wd"],
["geburtsort-link", "wikidata-article", "geburtsort-wd"],
["geburtsort-link", "format-string", "$0", "geburtsort-label"],
["geburtsort", "format-link", "geburtsort-link", "geburtsort-label"],
["sterbeort-wd", "wikidata", "P20"],
["sterbeort-label", "wikidata-label", "sterbeort-wd"],
["sterbeort-link", "wikidata-article", "sterbeort-wd"],
["sterbeort-link", "format-string", "$0", "sterbeort-label"],
["sterbeort", "format-link", "sterbeort-link", "sterbeort-label"],
["geb", "wikidata", "P569"],
["gest", "wikidata", "P570"],
["geburtskat", "format-date", "geb", "[[Kategorie:Geboren %Y]]\n"],
["sterbekat", "format-date", "gest", "[[Kategorie:Gestorben %Y]]\n"],
["istwar", "map", "sterbekat", {"": "ist"}, "war"],
["geburtsdatum", "format-date", "geb"],
["sterbedatum", "format-date", "gest"],
["geburtsdatum-link", "format-date", "geb", "link"],
["sterbedatum-link", "format-date", "gest", "link"],
["geborenText", "format-string", "* $0 in $1", "geburtsdatum-link", "geburtsort"],
["geborenText", "format-string", "* in $0", "geburtsort"],
["geborenText", "format-string", "* $0", "geburtsdatum-link"],
["gestorbenText", "format-string", "† $0 in $1", "sterbedatum-link", "sterbeort"],
["gestorbenText", "format-string", "† in $0", "sterbeort"],
["gestorbenText", "format-string", "† $0", "sterbedatum-link"],
["bioklammmer", "format-string", "($0; $1) ", "geborenText", "gestorbenText"],
["bioklammmer", "format-string", "($0) ", "geborenText"],
["bioklammmer", "format-string", "($0) ", "gestorbenText"]
],
person: "'''$title''' $bioklammmer$istwar $eineine $description.\n\n== Weblinks ==\n$weblinks\n\n{{Normdaten|TYP=p|GND=$gnd|LCCN=$lccn|VIAF=$viaf}}\n\n{{SORTIERUNG:$ansetzung}}\n$geburtskat$sterbekat[[$:Kategorie:$geschlechtKat]]\n\n{{Personendaten\n|NAME=$ansetzung\n|ALTERNATIVNAME=\n|KURZBESCHREIBUNG=$description\n|GEBURTSDATUM=$geburtsdatum\n|GEBURTSORT=$geburtsort\n|STERBEDATUM=$sterbedatum\n|STERBEORT=$sterbeort\n}}",
defaultjson: [],
"default": "'''$title''' ist $description.\n\n== Weblinks ==\n$weblinks" //gehört als Wikitext nach [[Benutzer:Schnark/js/stub.js/default]]
};
/*jshint quotmark: single*/
//jscs:enable validateQuoteMarks, maximumLineLength
return $.Deferred().resolve(data[name + (type || '')]).promise();
},
getPageReal: function (name, type) {
var d = $.Deferred();
getContents(this.prefix + name + (type === 'json' ? '/json' : '')).done(function (content) {
if (type === 'json') {
try {
d.resolve(JSON.parse(content
.replace(/^[\s\S]*<(?:syntaxhighlight|source)[^<>]*>/, '')
.replace(/<\/(?:syntaxhighlight|source)>[\s\S]*$/, '')
));
} catch (e) {
d.resolve([]);
}
} else {
d.resolve(content);
}
}).fail(function () {
if (type === 'json') {
d.resolve([]);
} else {
d.resolve('');
}
});
return d.promise();
},
replace: function (template) {
var self = this;
return template.replace(/\$(\w+|\$|:)/g, function (all, name) {
if (name === '$') {
return '$';
}
if (name === ':') {
return '';
}
return self.variables.getString(name);
});
},
getTemplateName: function (q) {
var d = $.Deferred(), self = this;
this.variables = new Variables(this.fakeWD ? new FakeWikidata() : new Wikidata(q), this.functions);
this.getPage('main', 'json').done(function (json) {
if (json.length === 0) {
d.reject();
} else {
self.variables.evalJSON(json, true).done(d.resolve);
}
});
return d.promise();
},
fillTemplate: function (name) {
var d = $.Deferred(), self = this;
this.getPage(name, 'json').done(function (json) {
self.variables.evalJSON(json).done(function () {
self.getPage(name).done(function (page) {
d.resolve(self.replace(page));
});
});
});
return d.promise();
},
getWarnings: function () {
return this.variables.getWarnings();
}
};
function addFunctions (t) {
t.addFunction('input', function (label) {
return window.prompt(label);
});
t.addFunction('re', function (wiki, re, flags) {
var d = $.Deferred();
flags = flags || '';
this.wikidata.getSource(wiki).done(function (source) {
try {
re = new RegExp(re, flags);
} catch (e) {
d.reject(e);
return;
}
function normaliseResult (result) {
var arr = [], i;
for (i = 1; i < result.length; i++) {
arr.push(result[i]);
}
return arr.length === 1 ? arr[0] : arr;
}
if (flags.indexOf('g') > -1) {
var array = [], result;
/*jshint boss: true*/
while (result = re.exec(source)) {
array.push(normaliseResult(result));
}
/*jshint boss: false*/
d.resolve(array);
} else {
d.resolve(normaliseResult(re.exec(source)));
}
}).fail(d.reject);
return d.promise();
});
t.addFunction('translate', function (lang, title) {
var d = $.Deferred();
title = this.getString(title);
if (!title) {
return;
}
$.getJSON('https://' + lang + '.wikipedia.org/w/api.php?callback=?', {
action: 'query',
prop: 'langlinks',
titles: title,
lllimit: 1,
lllang: mw.config.get('wgContentLanguage'),
format: 'json',
formatversion: 2
}).always(function (data) {
try {
d.resolve(data.query.pages[0].langlinks[0].title);
} catch (e) {
d.resolve(title);
}
});
return d.promise();
});
t.addFunction('format-link', function (page, label) {
page = this.getString(page);
if (!page) {
return;
}
if (label === '') {
label = page.replace(/ \(.*\)$/, '');
} else {
label = this.getString(label || '') || page;
}
if (page === label) {
return '[[' + page + ']]';
}
if (label.indexOf(page) === 0) {
return '[[' + page + ']]' + label.slice(page.length);
}
return '[[' + page + '|' + label + ']]';
});
t.addFunction('format-array', function (array, format, join) {
array = this.get(array);
if (!$.isArray(array) || array.length === 0) {
return;
}
return $.map(array, function (item) {
return format.replace(/\$(\d+)/g, function (all, n) {
return $.isArray(item) ? item[n] : item;
});
}).join(join);
});
t.addFunction('format-date', function (date, format) {
date = this.get(date);
if (!$.isArray(date)) {
return;
}
if (format === 'link') {
format = '[[%j. %F]] [[%Y]]';
} else if (!format) {
format = '%j. %F %Y';
}
var invalid = false, result = format.replace(/%(.)/g, function (all, c) {
switch (c) {
case '%': return '%';
case 'Y':
if (
date[5] < 9 ||
(date[2] <= 0 && mw.config.get('wgContentLanguage') !== 'de') //FIXME lokalisieren
) {
invalid = true;
break;
}
return date[2] <= 0 ? (1 - date[2]) + ' v. Chr.' : date[2];
case 'M':
if (date[5] < 10) {
invalid = true;
break;
}
return mw.messages.get('schnark-stub-monthNamesShort')[date[1]];
case 'F':
if (date[5] < 10) {
invalid = true;
break;
}
return mw.config.get('wgMonthNames')[date[1]];
case 'm':
if (date[5] < 10) {
invalid = true;
break;
}
return date[1] < 10 ? '0' + String(date[1]) : date[1];
case 'n':
if (date[5] < 10) {
invalid = true;
break;
}
return date[1];
case 'j':
if (date[5] < 11) {
invalid = true;
break;
}
return date[0];
case 'd':
if (date[5] < 11) {
invalid = true;
break;
}
return date[0] < 10 ? '0' + String(date[0]) : date[0];
default:
invalid = true;
}
});
if (!invalid) {
return result;
}
});
t.addFunction('format-coord', function (coord, nswo) {
coord = this.get(coord);
if (!$.isArray(coord)) {
return;
}
coord = coord[nswo ? 0 : 1];
var ret = [];
nswo = coord > 0 ? (nswo ? 'N' : mw.config.get('wgContentLanguage') === 'de' ? 'O' : 'E') : (nswo ? 'S' : 'W');
coord = Math.abs(coord);
ret.push(Math.floor(coord));
coord -= ret[0];
coord *= 60;
ret.push(Math.floor(coord));
coord -= ret[1];
coord *= 60;
ret.push(Math.round(coord));
if (ret[2] === 60) {
ret[2] = 0;
ret[1]++;
}
if (ret[1] === 60) {
ret[1] = 0;
ret[0]++;
}
ret.push(nswo);
return ret.join('/');
});
t.addFunction('format-string', function (format, a /*, b, ...*/) {
if (!a) {
return format;
}
var array = this.get(a), self = this, invalid = false;
if (!$.isArray(array)) {
array = $.map(arguments, function (x, i) {
if (i > 0) {
invalid = invalid || !self.getBool(x);
return self.getString(x);
}
});
if (invalid) {
return;
}
}
return format.replace(/\$(\d+)/g, function (all, n) {
return array[n];
});
});
t.addFunction('map', function (a, map, fallback) {
a = this.getString(a);
return (a in map) ? map[a] : fallback;
});
/*
t.addFunction('and', function (a, b) {
return this.getBool(a) && this.getBool(b);
});
t.addFunction('or', function (a, b) {
return this.getBool(a) || this.getBool(b);
});
t.addFunction('not', function (a) {
return !this.getBool(a);
});
t.addFunction('if', function (a, b, c) {
return this.getBool(a) ? this.get(b) : this.get(c);
});
*/
t.addFunction('wikidata', function (p, options) {
return this.wikidata.getProperty(p, options);
});
t.addFunction('wikidata-label', function (wd) {
wd = wd ? this.get(wd) : this.wikidata;
if (!wd) {
return;
}
return wd.getLabel();
});
t.addFunction('wikidata-description', function (wd) {
wd = wd ? this.get(wd) : this.wikidata;
if (!wd) {
return;
}
return wd.getDescription();
});
t.addFunction('wikidata-aliases', function (wd) {
wd = wd ? this.get(wd) : this.wikidata;
if (!wd) {
return;
}
return wd.getAliases();
});
t.addFunction('wikidata-article', function (wd) {
wd = wd ? this.get(wd) : this.wikidata;
if (!wd) {
return;
}
return wd.getArticle();
});
t.addFunction('warn', function (w) {
return $.Deferred().reject(this.getString(w)).promise();
});
}
function main ($edit) {
var template = new Template(), q = window.prompt(mw.msg('schnark-stub-creator-step1'));
addFunctions(template);
template.getTemplateName(q).done(function (name) {
name = window.prompt(mw.msg('schnark-stub-creator-step2', template.prefix), name);
template.fillTemplate(name).done(function (result) {
var warnings = template.getWarnings();
if (warnings.length) {
warnings = mw.msg('schnark-stub-creator-warnings', $.map(warnings, function (item) {
return mw.msg('schnark-stub-creator-warning-item', item);
}).join(''));
} else {
warnings = '';
}
$edit.textSelection('setContents', result);
window.alert(mw.msg('schnark-stub-creator-step3', warnings));
});
}).fail(function () {
window.alert(mw.msg('schnark-stub-creator-missing-config'));
});
}
function init () {
$(mw.util.addPortletLink('p-tb', '#',
mw.msg('schnark-stub-creator'), 'p-stub',
mw.msg('schnark-stub-creator-tooltip'))
).click(function (e) {
e.preventDefault();
main($('#wpTextbox1'));
});
}
function isCompatible () {
return !!(window.JSON && JSON.parse);
}
if (isCompatible() && mw.config.get('wgAction') === 'edit') {
mw.loader.using(['mediawiki.util', 'mediawiki.language', 'jquery.textSelection'], function () {
initL10N(l10n);
$(init);
});
}
})(jQuery, mediaWiki);
//</nowiki>