MediaWiki:Gadget-wdRedLinks.js (MediaWiki&Gadget-wdRedLinksQjs)
Перейти к навигации
Перейти к поиску
JS-код ниже относится к гаджету «Показать интервики и заготовку текста при переходе на несуществующую статью из шаблонов {{не переведено}}» (править описание). Его использует около 300 учётных записей.
После сохранения или недавних изменений очистите кэш браузера.
(function(mw, $) {
function WDQS (localStorage, fetch) {
this.items = {};
var stored = JSON.parse(localStorage.getItem('rl-dictionary'));
if (stored && stored.timestamp && stored.version == 0) {
this.items = stored;
if ((new Date() - new Date(stored.timestamp)) < 1000*60*60*24*3) return;
}
var query = '\
SELECT ?topic ?topicLabel ?template WITH {\
SELECT DISTINCT * {\
VALUES (?template ?rank) {("Шаблон:Карточка оружия"@ru 0) ("Шаблон:Ракетное оружие"@ru 1)\
("Шаблон:Этническая общность"@ru 0)}\
?template ^schema:name/schema:about/^wdt:P1424/^wdt:P279* ?topic\
FILTER EXISTS { [] wdt:P31 ?topic }\
}\
} AS %B WITH {\
SELECT DISTINCT * {\
VALUES ?template { "Шаблон:Вооружённые силы"@ru "Шаблон:Галактика"@ru\
"Шаблон:Горнолыжный курорт"@ru "Шаблон:Звезда"@ru\
"Шаблон:Звёздное скопление"@ru "Шаблон:Музыкальный альбом"@ru\
"Шаблон:Народная песня"@ru "Шаблон:Сезон НБА"@ru\
"Шаблон:Спортивный сезон"@ru "Шаблон:Туманность"@ru "Шаблон:Финал НБА"@ru\
"Шаблон:Инстаблогер"@ru "Шаблон:Модельер"@ru "Шаблон:Самурай"@ru\
"Шаблон:Сумоист"@ru "Шаблон:Учёный"@ru "Шаблон:Фотомодель"@ru }\
?template ^schema:name/schema:about/^wdt:P1424/^wdt:P279* ?topic\
}\
} AS %G {\
{ INCLUDE %B } UNION { INCLUDE %G } UNION { VALUES (?template ?topic) { ("" wd:Q13406463) } }\
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }\
} ORDER BY ?topic ?rank';
fetch('https://query.wikidata.org/sparql?query=' + query.replace(/\s\s+/g, ' ')
.replaceAll('%', '%25'), { headers: { 'Accept': 'application/json' }})
.then(function(response) { return response.json(); } ).then(function(response) {
this.items = {};
for (var i = 0; i < (response.results.bindings||[]).length; i++) {
var qid = response.results.bindings[i].topic.value.
replace('http://www.wikidata.org/entity/','');
this.items[qid] = [
response.results.bindings[i].template.value.replace('Шаблон:', ''),
response.results.bindings[i].topicLabel.value
];
}
this.items.timestamp = new Date().toISOString();
this.items.version = 0;
localStorage.setItem('rl-dictionary', JSON.stringify(this.items));
}.bind(this));
}
function WdItem (element) {
this.element = element;
}
WdItem.prepareTitle = function (url, isPerson) {
var title = decodeURI(url)
.match(/title=([^&]+)(?=&|$)/)[1]
.replaceAll('_', ' ').split('(')[0].trim();
if (isPerson && title.indexOf(',') > 0) {
return title.split(',')[1].trim() + ' ' + title.split(',')[0];
}
return title;
};
WdItem.forEachNonDeprecated = function (claims, property, callback, defaultValue) {
var value = defaultValue;
for (var i = 0; i < ((claims||[])[property]||[]).length; i++) {
if (claims[property][i].rank !== 'deprecated') {
var result = callback(claims[property][i]);
if (result !== undefined && (defaultValue === undefined || value[0] === defaultValue[0])) {
value = result;
}
}
}
return value;
};
WdItem.matchGender = function (adjective, noun) {
if (noun && noun.endsWith('а')) {
return adjective.replace ( /ый$/, 'ая' );
} else {
return adjective;
}
};
WdItem.prototype.getValueByQualifier = function (property, qualifier, value) {
return WdItem.forEachNonDeprecated(this.element.claims, property, function(statement) {
if (
WdItem.forEachNonDeprecated(statement.qualifiers, qualifier, function(qual) {
if (qual.datavalue.value.id === value) return true;
})
) {
return statement.mainsnak.datavalue.value;
}
});
};
WdItem.prototype.getStarAliases = function (title) {
var aliases = [];
aliases.push(this.getValueByQualifier('P528', 'P972', 'Q105616')); // Bayer
aliases.push(this.getValueByQualifier('P528', 'P972', 'Q111116')); // Flamsteed
aliases.push(this.getValueByQualifier('P528', 'P972', 'Q111130')); // HD
aliases = aliases.filter(function(id) { return id && id !== title; } );
if (aliases.length > 0) {
return ' (\'\'' + aliases.join(', ') + '\'\')';
} else {
return '';
}
};
WdItem.prototype.getStarStub = function (title, type) {
var constellation = {Q10580:['Весы (созвездие)','Весов'], Q10452:['Гончие Псы','Гончих Псов'],
Q8865:['Скорпион (созвездие)','Скорпиона'], Q10586:['Орёл (созвездие)','Орла'],
Q10498:['Сетка (созвездие)','Сетки'], Q9253:['Жертвенник (созвездие)','Жертвенника'],
Q8667:['Волопас','Волопаса'], Q10506:['Райская Птица (созвездие)','Райской Птицы'],
Q8853:['Лев (созвездие)','Льва'], Q10437:['Летучая Рыба (созвездие)','Летучей Рыбы'],
Q8906:['Змееносец','Змееносца'], Q10565:['Треугольник (созвездие)','Треугольника'],
Q9289:['Столовая Гора','Столовой Горы'], Q10538:['Большой Пёс','Большого Пса'],
Q10492:['Микроскоп (созвездие)','Микроскопа'], Q8860:['Орион (созвездие)','Ориона'],
Q10582:['Наугольник','Наугольника'], Q10428:['Единорог (созвездие)','Единорога'],
Q10584:['Овен (созвездие)','Овна'], Q9256:['Андромеда (созвездие)','Андромеды'],
Q10513:['Стрела (созвездие)','Стрелы'], Q8921:['Лебедь (созвездие)','Лебедя'],
Q8844:['Центавр (созвездие)','Центавра'], Q10484:['Лира (созвездие)','Лиры'],
Q10464:['Кассиопея (созвездие)','Кассиопеи'], Q9305:['Малый Пёс','Малого Пса'],
Q10433:['Эридан (созвездие)','Эридана'], Q10574:['Часы (созвездие)','Часов'],
Q8837:['Золотая Рыба','Золотой Рыбы'], Q9285:['Волосы Вероники','Волос Вероники'],
Q8866:['Стрелец (созвездие)','Стрельца'], Q10576:['Водолей (созвездие)','Водолея'],
Q8679:['Рыбы (созвездие)','Рыб'], Q10563:['Журавль (созвездие)','Журавля'],
Q10570:['Телец (созвездие)','Тельца'], Q10468:['Цефей (созвездие)','Цефея'],
Q10413:['Южная Корона','Южной Короны'], Q10511:['Персей (созвездие)','Персея'],
Q8842:['Дева (созвездие)','Девы'], Q10457:['Хамелеон (созвездие)','Хамелеона'],
Q10529:['Щит (созвездие)','Щита'], Q10525:['Секстант (созвездие)','Секстанта'],
Q10488:['Резец (созвездие)','Резца'], Q10406:['Северная Корона','Северной Короны'],
Q10450:['Индеец (созвездие)','Индейца'], Q10448:['Геркулес (созвездие)','Геркулеса'],
Q10578:['Гидра (созвездие)','Гидры'], Q9302:['Дельфин (созвездие)','Дельфина'],
Q8913:['Печь (созвездие)','Печи'], Q10508:['Циркуль (созвездие)','Циркуля'],
Q10416:['Южная Гидра','Южной Гидры'], Q10438:['Малый Конь','Малого Коня'],
Q8923:['Близнецы (созвездие)','Близнецов'], Q9282:['Чаша (созвездие)','Чаши'],
Q10441:['Феникс (созвездие)','Феникса'], Q10542:['Южный Крест','Южного Креста'],
Q10517:['Ворон (созвездие)','Ворона'], Q10425:['Голубь (созвездие)','Голубя'],
Q8910:['Змея (созвездие)','Змеи'], Q8832:['Жираф (созвездие)','Жирафа'],
Q8864:['Пегас (созвездие)','Пегаса'], Q10546:['Телескоп (созвездие)','Телескопа'],
Q10446:['Заяц (созвездие)','Зайца'], Q10519:['Лисичка (созвездие)','Лисички'],
Q10478:['Малая Медведица','Малой Медведицы'], Q10571:['Волк (созвездие)','Волка'],
Q10403:['Малый Лев','Малого Льва'], Q10515:['Павлин (созвездие)','Павлина'],
Q10521:['Паруса (созвездие)','Парусов'], Q10567:['Тукан (созвездие)','Тукана'],
Q10409:['Южная Рыба','Южной Рыбы'], Q10481:['Насос (созвездие)','Насоса'],
Q9251:['Корма (созвездие)','Кормы'], Q10503:['Октант (созвездие)','Октанта'],
Q10430:['Ящерица (созвездие)','Ящерицы'], Q10476:['Возничий','Возничего'],
Q10435:['Муха (созвездие)','Мухи'], Q10535:['Козерог (созвездие)','Козерога'],
Q10473:['Компас (созвездие)','Компаса'], Q10443:['Рысь (созвездие)','Рыси'],
Q10486:['Живописец (созвездие)','Живописца'], Q10470:['Киль (созвездие)','Киля'],
Q8675:['Дракон (созвездие)','Дракона'], Q9286:['Скульптор (созвездие)','Скульптора'],
Q8849:['Рак (созвездие)','Рака'], Q10422:['Южный Треугольник','Южного Треугольника'], Q8839:['Кит (созвездие)','Кита'], Q8918:['Большая Медведица','Большой Медведицы']}
[WdItem.forEachNonDeprecated(this.element.claims, 'P59', function(statement) {
return statement.mainsnak.datavalue.value.id;
})];
var article = '{{' + 'Звезда|from=' + this.element.id + '}}\n\'\'\'' + title + '\'\'\'';
if (type.length<2 || type[1].startsWith('Q')) {
type[1] = 'звезда';
}
article += this.getStarAliases(title) + ' — ' + type[1];
if (constellation) {
article += ' в созвездии [[' +
constellation[0] + '|' + constellation[1] + ']]';
}
WdItem.forEachNonDeprecated(this.element.claims, 'P2583', function(distance) {
var amount = parseInt(distance.mainsnak.datavalue.value.amount)*3.26156;
var upper = parseInt(distance.mainsnak.datavalue.value.upperBound)*3.26156;
var error = upper>amount ? Math.pow(10, Math.round(Math.log(upper-amount)/Math.log(10))) : 1;
article += ', ' + WdItem.matchGender('удалённый', type[1]) + ' от Солнца на расстояние около '+
Math.round(amount/error)*error + ' световых лет';
});
article += '\n\n== Примечания ==\n{{примечания}}';
article += '\n{{star-stub}}';
if (constellation) {
article += '\n{{Звёзды созвездия ' + constellation[1] + '}}';
}
return article;
};
WdItem.prototype.getBoilerplate = function (url, dictionary) {
var article = '';
var isPerson = false;
var item = this.element;
var occupation = [];
var type = WdItem.forEachNonDeprecated(this.element.claims, 'P31', function(statement) {
if (statement.mainsnak.datavalue.value.id === 'Q5') {
isPerson = true;
return WdItem.forEachNonDeprecated(item.claims, 'P106', function(statement) {
var value = dictionary[statement.mainsnak.datavalue.value.id];
if (value) occupation.push(value[1]);
return value;
}, ['Персона']);
}
return dictionary[statement.mainsnak.datavalue.value.id];
}, ['Универсальная карточка']);
if (type) {
if (type[0] === 'Звезда') return this.getStarStub(WdItem.prepareTitle(url), type);
article += '{{' + type[0] + '|from=' + this.element.id + '}}\n';
}
article += '\'\'\'' + WdItem.prepareTitle(url, isPerson) + '\'\'\'';
if (isPerson) {
WdItem.forEachNonDeprecated(this.element.claims, 'P1559', function(statement) {
article += ' ({{lang-' + statement.mainsnak.datavalue.value.language + '|' +
statement.mainsnak.datavalue.value.text + '}})';
});
}
article += ' — ';
if ((this.element.descriptions||{}).ru)
article += this.element.descriptions.ru.value;
else
article += occupation.join(', ');
var externalLinks = '';
['P1343', 'P214', 'P244', 'P227', 'P7859', 'P1417'].forEach(function(p) {
if (p in (this.element.claims||[]))
externalLinks = '\n{{ВС|from=' + this.element.id + '}}';
}.bind(this));
article += '\n\n== Примечания ==\n{{примечания}}' + externalLinks;
return article;
};
WdItem.prototype.addInterwiki = function (mw) {
var projects = {aawiki: ['Qafár af', 'афарский'], abwiki: ['Аҧсшәа', 'абхазский'],
acewiki: ['Acèh', 'ачехский'], adywiki: ['Адыгабзэ', 'адыгейский'],
afwiki: ['Afrikaans', 'африкаанс'], akwiki: ['Akan', 'акан'],
alswiki: ['Alemannisch', 'Alemannisch'], altwiki: ['Алтай тил', 'южноалтайский'],
amwiki: ['አማርኛ', 'амхарский'], angwiki: ['Ænglisc', 'староанглийский'],
anwiki: ['aragonés', 'арагонский'], arcwiki: ['ܐܪܡܝܐ', 'арамейский'],
arwiki: ['العربية', 'арабский'], arywiki: ['الدارجة', 'Moroccan Arabic'],
arzwiki: ['مصرى', 'Egyptian Arabic'], astwiki: ['asturianu', 'астурийский'],
aswiki: ['অসমীয়া', 'ассамский'], atjwiki: ['Atikamekw', 'Atikamekw'],
avkwiki: ['Kotava', 'Kotava'], avwiki: ['авар', 'аварский'], awawiki: ['अवधी', 'авадхи'],
aywiki: ['Aymar aru', 'аймара'], azbwiki: ['تۆرکجه', 'South Azerbaijani'],
azwiki: ['azərbaycanca', 'азербайджанский'], banwiki: ['Basa Bali', 'балийский'],
barwiki: ['Boarisch', 'Bavarian'], 'bat-smgwiki': ['žemaitėška', 'Samogitian'],
bawiki: ['башҡортса', 'башкирский'], bclwiki: ['Bikol Central', 'Central Bikol'],
'be-x-oldwiki': ['беларуская (тарашкевіца)', 'Belarusian (Taraškievica orthography)'],
bewiki: ['беларуская', 'белорусский'], bgwiki: ['български', 'болгарский'],
bhwiki: ['भोजपुरी', 'Bhojpuri'], biwiki: ['Bislama', 'бислама'],
bjnwiki: ['Banjar', 'Banjar'], bmwiki: ['bamanankan', 'бамбара'],
bnwiki: ['বাংলা', 'бенгальский'], bowiki: ['བོད་ཡིག', 'тибетский'],
bpywiki: ['বিষ্ণুপ্রিয়া মণিপুরী', 'Bishnupriya'], brwiki: ['brezhoneg', 'бретонский'],
bswiki: ['bosanski', 'боснийский'], bugwiki: ['ᨅᨔ ᨕᨘᨁᨗ', 'бугийский'],
bxrwiki: ['буряад', 'Russia Buriat'], cawiki: ['català', 'каталанский'],
'cbk-zamwiki': ['Chavacano de Zamboanga', 'Chavacano'],
cdowiki: ['Mìng-dĕ̤ng-ngṳ̄', 'Min Dong Chinese'], cebwiki: ['Cebuano', 'себуано'],
cewiki: ['нохчийн', 'чеченский'], chowiki: ['Choctaw', 'чоктавский'],
chrwiki: ['ᏣᎳᎩ', 'чероки'], chwiki: ['Chamoru', 'чаморро'],
chywiki: ['Tsetsêhestâhese', 'шайенский'], ckbwiki: ['کوردی', 'сорани'],
cowiki: ['corsu', 'корсиканский'], crhwiki: ['qırımtatarca', 'крымско-татарский'],
crwiki: ['Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ', 'кри'], csbwiki: ['kaszëbsczi', 'кашубский'],
cswiki: ['čeština', 'чешский'], cuwiki: ['словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ', 'церковнославянский'],
cvwiki: ['Чӑвашла', 'чувашский'], cywiki: ['Cymraeg', 'валлийский'],
dawiki: ['Dansk', 'датский'], dewiki: ['Deutsch', 'немецкий'],
dinwiki: ['Thuɔŋjäŋ', 'динка'], diqwiki: ['Zazaki', 'Zazaki'],
dsbwiki: ['dolnoserbski', 'нижнелужицкий'], dtywiki: ['डोटेली', 'Doteli'],
dvwiki: ['ދިވެހިބަސް', 'мальдивский'], dzwiki: ['ཇོང་ཁ', 'дзонг-кэ'],
eewiki: ['eʋegbe', 'эве'], elwiki: ['Ελληνικά', 'греческий'],
emlwiki: ['emiliàn e rumagnòl', 'Emiliano-Romagnolo'], enwiki: ['English', 'английский'],
eowiki: ['Esperanto', 'эсперанто'], eswiki: ['español', 'испанский'],
etwiki: ['Eesti', 'эстонский'], euwiki: ['euskara', 'баскский'],
extwiki: ['Estremeñu', 'Extremaduran'], fawiki: ['فارسی', 'персидский'],
ffwiki: ['Fulfulde', 'фулах'], 'fiu-vrowiki': ['võro', 'võro'],
fiwiki: ['Suomi', 'финский'], fjwiki: ['Na Vosa Vakaviti', 'фиджи'],
fowiki: ['føroyskt', 'фарерский'], frpwiki: ['arpetan', 'Arpitan'],
frrwiki: ['Nordfriisk', 'северный фризский'], frwiki: ['français', 'французский'],
furwiki: ['furlan', 'фриульский'], fywiki: ['Frysk', 'западнофризский'],
gagwiki: ['Gagauz', 'гагаузский'], ganwiki: ['贛語', 'гань'],
gawiki: ['Gaeilge', 'ирландский'], gcrwiki: ['kriyòl gwiyannen', 'Guianan Creole'],
gdwiki: ['Gàidhlig', 'гэльский'], glkwiki: ['گیلکی', 'Gilaki'],
glwiki: ['galego', 'галисийский'], gnwiki: ["Avañe'ẽ", 'гуарани'],
gomwiki: ['गोंयची कोंकणी / Gõychi Konknni', 'Goan Konkani'], gorwiki: ['Bahasa Hulontalo', 'горонтало'],
gotwiki: ['𐌲𐌿𐍄𐌹𐍃𐌺', 'готский'], guwiki: ['ગુજરાતી', 'гуджарати'],
gvwiki: ['Gaelg', 'мэнский'], hakwiki: ['客家語/Hak-kâ-ngî', 'хакка'],
hawiki: ['Hausa', 'хауса'], hawwiki: ['Hawaiʻi', 'гавайский'],
hewiki: ['עברית', 'иврит'], hifwiki: ['Fiji Hindi', 'Fiji Hindi'],
hiwiki: ['हिन्दी', 'хинди'], howiki: ['Hiri Motu', 'хиримоту'],
hrwiki: ['hrvatski', 'хорватский'], hsbwiki: ['hornjoserbsce', 'верхнелужицкий'],
htwiki: ['Kreyòl ayisyen', 'гаитянский'], huwiki: ['magyar', 'венгерский'],
hywiki: ['հայերեն', 'армянский'], hywwiki: ['Արեւմտահայերէն', 'Western Armenian'],
hzwiki: ['Otsiherero', 'гереро'], iawiki: ['interlingua', 'интерлингва'],
idwiki: ['Bahasa Indonesia', 'индонезийский'], iewiki: ['Interlingue', 'интерлингве'],
igwiki: ['Igbo', 'игбо'], ikwiki: ['Iñupiak', 'инупиак'],
ilowiki: ['Ilokano', 'илоко'], inhwiki: ['ГӀалгӀай', 'ингушский'],
iowiki: ['Ido', 'идо'], iswiki: ['íslenska', 'исландский'],
itwiki: ['Italiano', 'итальянский'], iuwiki: ['ᐃᓄᒃᑎᑐᑦ/inuktitut', 'инуктитут'],
jamwiki: ['Patois', 'Jamaican Creole English'], jawiki: ['日本語', 'японский'],
jbowiki: ['la .lojban.', 'ложбан'], jvwiki: ['Jawa', 'яванский'],
kaawiki: ['Qaraqalpaqsha', 'каракалпакский'], kabwiki: ['Taqbaylit', 'кабильский'],
kawiki: ['ქართული', 'грузинский'], kbdwiki: ['Адыгэбзэ', 'кабардинский'],
kbpwiki: ['Kabɩyɛ', 'Kabiye'], kgwiki: ['Kongo', 'конго'],
kiwiki: ['Gĩkũyũ', 'кикуйю'], kjwiki: ['Kwanyama', 'кунама'],
kkwiki: ['қазақша', 'казахский'], klwiki: ['kalaallisut', 'гренландский'],
kmwiki: ['ភាសាខ្មែរ', 'кхмерский'], knwiki: ['ಕನ್ನಡ', 'каннада'],
koiwiki: ['перем коми', 'коми-пермяцкий'], kowiki: ['한국어', 'корейский'],
krcwiki: ['къарачай-малкъар', 'карачаево-балкарский'], krwiki: ['Kanuri', 'канури'],
kshwiki: ['Ripoarisch', 'кёльнский'], kswiki: ['कॉशुर / کٲشُر', 'кашмири'],
kuwiki: ['kurdî', 'курдский'], kvwiki: ['коми', 'коми'],
kwwiki: ['kernowek', 'корнский'], kywiki: ['Кыргызча', 'киргизский'],
ladwiki: ['Ladino', 'ладино'], lawiki: ['Latina', 'латинский'],
lbewiki: ['лакку', 'Lak'], lbwiki: ['Lëtzebuergesch', 'люксембургский'],
lezwiki: ['лезги', 'лезгинский'], lfnwiki: ['Lingua Franca Nova', 'Lingua Franca Nova'],
lgwiki: ['Luganda', 'ганда'], lijwiki: ['Ligure', 'Ligurian'],
liwiki: ['Limburgs', 'лимбургский'], lldwiki: ['Ladin', 'Ladin'],
lmowiki: ['lumbaart', 'Lombard'], lnwiki: ['lingála', 'лингала'],
lowiki: ['ລາວ', 'лаосский'], lrcwiki: ['لۊری شومالی', 'севернолурский'],
ltgwiki: ['latgaļu', 'Latgalian'], ltwiki: ['lietuvių', 'литовский'],
lvwiki: ['latviešu', 'латышский'], madwiki: ['Madhurâ', 'мадурский'],
maiwiki: ['मैथिली', 'майтхили'], 'map-bmswiki': ['Basa Banyumasan', 'Basa Banyumasan'],
mdfwiki: ['мокшень', 'мокшанский'], mgwiki: ['Malagasy', 'малагасийский'],
mhrwiki: ['олык марий', 'Eastern Mari'], minwiki: ['Minangkabau', 'минангкабау'],
miwiki: ['Māori', 'маори'], mkwiki: ['македонски', 'македонский'],
mlwiki: ['മലയാളം', 'малаялам'], mniwiki: ['ꯃꯤꯇꯩ ꯂꯣꯟ', 'манипурский'],
mnwiki: ['монгол', 'монгольский'], mnwwiki: ['ဘာသာ မန်', 'Mon'],
mrjwiki: ['кырык мары', 'Western Mari'], mrwiki: ['मराठी', 'маратхи'],
mswiki: ['Bahasa Melayu', 'малайский'], mtwiki: ['Malti', 'мальтийский'],
muswiki: ['Mvskoke', 'крик'], mwlwiki: ['Mirandés', 'мирандский'],
myvwiki: ['эрзянь', 'эрзянский'], mywiki: ['မြန်မာဘာသာ', 'бирманский'],
mznwiki: ['مازِرونی', 'мазандеранский'], nahwiki: ['Nāhuatl', 'Nāhuatl'],
napwiki: ['Napulitano', 'неаполитанский'], nawiki: ['Dorerin Naoero', 'науру'],
'nds-nlwiki': ['Nedersaksies', 'нижнесаксонский'], ndswiki: ['Plattdüütsch', 'нижненемецкий'],
newiki: ['नेपाली', 'непальский'], newwiki: ['नेपाल भाषा', 'неварский'],
ngwiki: ['Oshiwambo', 'ндонга'], niawiki: ['Li Niha', 'ниас'],
nlwiki: ['Nederlands', 'нидерландский'], nnwiki: ['norsk nynorsk', 'нюнорск'],
novwiki: ['Novial', 'Novial'], nowiki: ['norsk', 'норвежский'],
nqowiki: ['ߒߞߏ', 'нко'], nrmwiki: ['Nouormand', 'Norman'],
nsowiki: ['Sesotho sa Leboa', 'северный сото'], nvwiki: ['Diné bizaad', 'навахо'],
nywiki: ['Chi-Chewa', 'ньянджа'], ocwiki: ['occitan', 'окситанский'],
olowiki: ['livvinkarjala', 'Livvi-Karelian'], omwiki: ['Oromoo', 'оромо'],
orwiki: ['ଓଡ଼ିଆ', 'ория'], oswiki: ['Ирон', 'осетинский'],
pagwiki: ['Pangasinan', 'пангасинан'], pamwiki: ['Kapampangan', 'пампанга'],
papwiki: ['Papiamentu', 'папьяменто'], pawiki: ['ਪੰਜਾਬੀ', 'панджаби'],
pcdwiki: ['Picard', 'Picard'], pdcwiki: ['Deitsch', 'Pennsylvania German'],
pflwiki: ['Pälzisch', 'Palatine German'], pihwiki: ['Norfuk / Pitkern', 'Norfuk / Pitkern'],
piwiki: ['पालि', 'пали'], plwiki: ['polski', 'польский'],
pmswiki: ['Piemontèis', 'Piedmontese'], pnbwiki: ['پنجابی', 'Western Punjabi'],
pntwiki: ['Ποντιακά', 'Pontic'], pswiki: ['پښتو', 'пушту'],
ptwiki: ['português', 'португальский'], quwiki: ['Runa Simi', 'кечуа'],
rmwiki: ['rumantsch', 'романшский'], rmywiki: ['romani čhib', 'Vlax Romani'],
rnwiki: ['Kirundi', 'рунди'], 'roa-rupwiki': ['armãneashti', 'Aromanian'],
'roa-tarawiki': ['tarandíne', 'Tarantino'], rowiki: ['română', 'румынский'],
ruewiki: ['русиньскый', 'Rusyn'], rwwiki: ['Kinyarwanda', 'киньяруанда'],
sahwiki: ['саха тыла', 'саха'], satwiki: ['ᱥᱟᱱᱛᱟᱲᱤ', 'сантали'],
sawiki: ['संस्कृतम्', 'санскрит'], scnwiki: ['sicilianu', 'сицилийский'],
scowiki: ['Scots', 'шотландский'], scwiki: ['sardu', 'сардинский'],
sdwiki: ['سنڌي', 'синдхи'], sewiki: ['davvisámegiella', 'северносаамский'],
sgwiki: ['Sängö', 'санго'], shnwiki: ['ၽႃႇသႃႇတႆး', 'шанский'],
shwiki: ['srpskohrvatski / српскохрватски', 'сербскохорватский'],
simplewiki: ['Simple English', 'Simple English'], siwiki: ['සිංහල', 'сингальский'],
skrwiki: ['سرائیکی', 'Saraiki'], skwiki: ['slovenčina', 'словацкий'],
slwiki: ['slovenščina', 'словенский'], smnwiki: ['anarâškielâ', 'инари-саамский'],
smwiki: ['Gagana Samoa', 'самоанский'], snwiki: ['chiShona', 'шона'],
sowiki: ['Soomaaliga', 'сомали'], sqwiki: ['shqip', 'албанский'],
srnwiki: ['Sranantongo', 'сранан-тонго'], srwiki: ['српски / srpski', 'сербский'],
sswiki: ['SiSwati', 'свази'], stqwiki: ['Seeltersk', 'Saterland Frisian'],
stwiki: ['Sesotho', 'южный сото'], suwiki: ['Sunda', 'сунданский'],
svwiki: ['svenska', 'шведский'], swwiki: ['Kiswahili', 'суахили'],
szlwiki: ['ślůnski', 'Silesian'], szywiki: ['Sakizaya', 'Sakizaya'],
tawiki: ['தமிழ்', 'тамильский'], taywiki: ['Tayal', 'Tayal'],
tcywiki: ['ತುಳು', 'Tulu'], tetwiki: ['tetun', 'тетум'],
tewiki: ['తెలుగు', 'телугу'], tgwiki: ['тоҷикӣ', 'таджикский'],
thwiki: ['ไทย', 'тайский'], tiwiki: ['ትግርኛ', 'тигринья'],
tkwiki: ['Türkmençe', 'туркменский'], tlwiki: ['Tagalog', 'тагалог'],
tnwiki: ['Setswana', 'тсвана'], towiki: ['lea faka-Tonga', 'тонганский'],
tpiwiki: ['Tok Pisin', 'ток-писин'], trvwiki: ['Seediq', 'седекский'],
trwiki: ['Türkçe', 'турецкий'], tswiki: ['Xitsonga', 'тсонга'],
ttwiki: ['татарча/tatarça', 'татарский'], tumwiki: ['chiTumbuka', 'тумбука'],
twwiki: ['Twi', 'тви'], tyvwiki: ['тыва дыл', 'тувинский'],
tywiki: ['reo tahiti', 'таитянский'], udmwiki: ['удмурт', 'удмуртский'],
ugwiki: ['ئۇيغۇرچە / Uyghurche', 'уйгурский'], ukwiki: ['українська', 'украинский'],
urwiki: ['اردو', 'урду'], uzwiki: ['oʻzbekcha/ўзбекча', 'узбекский'],
vecwiki: ['vèneto', 'Venetian'], vepwiki: ['vepsän kel’', 'Veps'],
vewiki: ['Tshivenda', 'венда'], viwiki: ['Tiếng Việt', 'вьетнамский'],
vlswiki: ['West-Vlams', 'West Flemish'], vowiki: ['Volapük', 'волапюк'],
warwiki: ['Winaray', 'варай'], wawiki: ['walon', 'валлонский'],
wowiki: ['Wolof', 'волоф'], wuuwiki: ['吴语', 'ву'],
xalwiki: ['хальмг', 'калмыцкий'], xhwiki: ['isiXhosa', 'коса'],
xmfwiki: ['მარგალური', 'Mingrelian'], yiwiki: ['ייִדיש', 'идиш'],
yowiki: ['Yorùbá', 'йоруба'], zawiki: ['Vahcuengh', 'чжуань'],
zeawiki: ['Zeêuws', 'Zeelandic'], 'zh-classicalwiki': ['文言', 'Classical Chinese'],
'zh-min-nanwiki': ['Bân-lâm-gú', 'Chinese (Min Nan)'],
'zh-yuewiki': ['粵語', 'Cantonese'], zhwiki: ['中文', 'китайский'], zuwiki: ['isiZulu', 'зулу']
};
for (var id in this.element.sitelinks) {
if (projects[id])
mw.util.addPortletLink('p-lang', this.element.sitelinks[id].url,
projects[id][0], null, this.element.sitelinks[id].title + ' — ' + projects[id][1]);
}
};
function RedLinks (mediaWiki, links) {
this.links = links||{};
this.mw = mediaWiki;
}
RedLinks.prototype.parseRedLinks = function(doc) {
this.links = {};
var redLinks = doc.querySelectorAll('span[data-interwiki-lang]');
for (var i = 0; i < redLinks.length; ++i) {
if (redLinks[i].childElementCount != 1) continue;
var host = redLinks[i].getAttribute('data-interwiki-lang');
if (host === 'd') {
host = ''; // wikidata
} else {
host += '.wikipedia.org';
}
var title = redLinks[i].getAttribute('data-interwiki-article');
if ( redLinks[i].children[0].className !== 'new' ) {
continue;
}
if (!this.links[host]) this.links[host] = {};
if (!this.links[host][title]) this.links[host][title] = [];
this.links[host][title].push(redLinks[i].children[0]);
}
};
RedLinks.upgradeLinks = function(links, qid) {
for (var i = 0; i < (links||[]).length; i++) {
var urlEnding = 'editintro=T:Нет_статьи/editintro&veswitched=0&from='+qid;
links[i].href += ( links[i].href.includes( '?' ) ? '&' : '?' ) + urlEnding;
}
};
RedLinks.apiGet = function(api, params, sleep, callback) {
setTimeout(function() {
api.get(params).done(function(response) { callback(response);});
}, sleep);
};
RedLinks.prototype.callApiMethod = function(signature, callback) {
if (!signature || !Object.keys(signature)[0]) return;
var dataKey = Object.keys(signature)[0];
for (var host in this.links) {
if (!host || !this.links[host]) continue;
var api = new this.mw.ForeignApi('//' + host + '/w/api.php', { anonymous: true});
for (var start = 0; start < Object.keys(this.links[host]).length; start += 50) {
var params = {};
Object.assign(params, signature);
params[dataKey] = Object.keys(this.links[host]).slice(start, start+50).join('|');
RedLinks.apiGet(api, params, start, callback);
}
}
};
RedLinks.prototype.processQueryResponse = function(response) {
if (!response || !response.query || !response.query.general) return;
var langLinks = this.links[response.query.general.servername];
if (!langLinks) return;
var backlinks = {};
for (var i = 0; i < (response.query.redirects||[]).length; i++) {
backlinks[response.query.redirects[i].to] = response.query.redirects[i].from;
}
for (var id in response.query.pages) {
if (!('pageprops' in response.query.pages[id])) continue;
var title = backlinks[response.query.pages[id].title] ?
backlinks[response.query.pages[id].title] : response.query.pages[id].title;
RedLinks.upgradeLinks(langLinks[title], response.query.pages[id].pageprops.wikibase_item);
}
};
RedLinks.prototype.newArticle = function(url, callback) {
var qid = url.match(/from=(Q\d+)/);
var util = this.mw.util;
if (qid && qid[1]) {
util.addPortletLink(
'p-tb', 'https://www.wikidata.org/wiki/' + qid[1],
'Элемент Викиданных', 't-wikibase',
'Ссылка на связанный элемент репозитория данных [g]', 'g'
);
this.links = { 'www.wikidata.org': {}};
this.links['www.wikidata.org'][qid[1]] = '';
this.callApiMethod({
ids: 0,
action: 'wbgetentities',
languages: 'ru',
props: 'claims|descriptions|sitelinks/urls'
}, function(response) {
callback(response.entities[qid[1]]);
});
}
};
RedLinks.prototype.processSourcePage = function(doc) {
this.parseRedLinks(doc);
for (var qid in this.links['']) {
if (this.links[''].hasOwnProperty(qid)) {
RedLinks.upgradeLinks(this.links[''][qid], qid);
}
}
this.callApiMethod({ titles: 0, action: 'query', prop: 'pageprops', ppprop: 'wikibase_item',
redirects: 1, meta: 'siteinfo'}, this.processQueryResponse.bind(this));
};
var wdqs = new WDQS(localStorage, fetch),
$textbox,
item;
mw.loader.using(['mediawiki.util', 'mediawiki.ForeignApi']).done(function() {
mw.hook('wikipage.content').add(function(content) {
if (mw.config.get('wgAction') === 'view') {
new RedLinks(mw).processSourcePage(content[0]);
} else if (mw.config.get('wgEditMessage') == 'creating') {
if (!item) {
new RedLinks(mw).newArticle(window.location.href, function(element) {
item = new WdItem(element);
$textbox = content.find('#wpTextbox1');
$textbox.val(item.getBoilerplate(window.location.href, wdqs.items));
item.addInterwiki(mw);
});
} else {
item.addInterwiki(mw);
}
}
});
});
}(mediaWiki, jQuery));