Користувач:Bunyk/filmstar.js
Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.
- Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
- Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
- Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
- Opera: натисніть Ctrl-F5
// Додає до редактора кнопку швидкого створення заготовки статті про кінозірку
//
jQuery(function ($) {
if(mw.config.get('wgAction') != 'edit') return;
var start = function() {
insert_button();
};
var sparql = function(query, cb) {
$.get(
'https://query.wikidata.org/bigdata/namespace/wdq/sparql',
{
query: query,
format: 'json'
},
function(res) {
cb(res.results.bindings);
}
);
};
var wd = document.getElementById('t-wikibase').getElementsByTagName('a')[0].href.split('/')[5];
var filmographyQuery = `
SELECT ?typeLabel (YEAR(MIN(?dates)) AS ?date) ?ukLabel ?enLabel ?ukArticle ?enArticle ?role
WHERE
{
?item wdt:P161 wd:${wd}.
?item wdt:P577 ?dates .
?item wdt:P31 ?type.
OPTIONAL {
?item rdfs:label ?ukLabel filter(lang(?ukLabel) = "uk")
}
?enArticle schema:about ?item.
?enArticle schema:inLanguage "en" .
?enArticle schema:isPartOf <https://en.wikipedia.org/>.
OPTIONAL {
?ukArticle schema:about ?item.
?ukArticle schema:inLanguage "uk" .
?ukArticle schema:isPartOf <https://uk.wikipedia.org/>.
}
?item rdfs:label ?enLabel filter(lang(?enLabel) = "en")
SERVICE wikibase:label { bd:serviceParam wikibase:language "uk,en" }
} GROUP BY ?ukLabel ?enLabel ?typeLabel ?item ?ukArticle ?enArticle ?role ORDER BY ?date
`;
console.log(filmographyQuery);
var insert_snippet = function() {
sparql(filmographyQuery, function onLoad(res) {
console.log('Sparql response:', res);
var article = formatFilmography(res);
// залишити старий вміст
article = document.editform.wpTextbox1.value + '\n' + article;
// і додати все разом в редактор
document.editform.wpTextbox1.value = article;
});
};
var insert_button = function () {
$('#wpTextbox1').wikiEditor('addToToolbar', {
section: 'main',
group: 'insert',
tools: {
"moviestar": {
label: 'Заготовка статті про кінозірку',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/3/31/Walk_of_Fame_Category_Motion_Pictures.jpg/22px-Walk_of_Fame_Category_Motion_Pictures.jpg',
action: {
type: 'callback',
execute: insert_snippet,
}
}
}
});
};
var import_script = function(name, callback) {
$.getScript(
'https://uk.wikipedia.org/w/index.php?title=%D0%9A%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D1%87:Bunyk/'
+ name + '&action=raw&ctype=text/javascript',
callback
);
};
import_script('utils.js', start());
var type2template = {
'кінофільм': 'УФільмі',
'міні-серіал': 'УСеріалі',
'телесеріал': 'УСеріалі',
'Телефільм': 'УтФільмі',
'Короткометражне кіно': 'УкФільмі',
'короткометражне німе кіно': 'УкФільмі',
'німе кіно': 'УФільмі',
'мультфільм': 'УмФільмі',
'повнометражний фільм': 'УФільмі'
};
function articleName(url) {
return decodeURI(url.split('/wiki/')[1]).replace(/_/g, ' ');
}
function ukLinkOrNP(item) {
var ukArticle, enArticle, ukLabel, enLabel;
if(item.enArticle) {
enArticle = articleName(item.enArticle.value);
}
if(item.ukArticle) {
ukArticle = articleName(item.ukArticle.value);
}
if(item.enLabel) {
enLabel = item.enLabel.value;
}
if(item.ukLabel) {
ukLabel = item.ukLabel.value;
}
console.log(item);
if(ukArticle) {
if(ukLabel) {
return '[[' + ukArticle + '|' + ukLabel + ']]';
} else {
return '[[' + ukArticle + ']]';
}
} else {
if(enArticle) {
return '{{нп|' + (enLabel || enArticle) + '||en|' + enArticle + '}}';
}
}
}
function formatFilmography(filmography) {
var text = '== Фільмографія ==\n';
text += '{{УФільміВерх}}\n';
for(var i=0; i<filmography.length; i++) {
var item = filmography[i];
console.log(item);
var template = type2template[item.typeLabel.value] || 'УФільмі';
text += ('{{'
+ template + '|' + (template == 'УСеріалі' ? '|':'')
+ item.date.value + '|'
+ ukLinkOrNP(item) + '|'
+ item.enLabel.value + '|'
+ '}}\n'
);
}
text += '{{УФільміНиз}}';
return text;
}
});