Uporabnik:TadejM/AFC-add-project-tags.js
Opomba: Da bodo spremembe prišle do veljave, po objavi izpraznite predpomnilnik svojega brskalnika.
- Firefox/Safari: Držite Shift in kliknite Znova naloži (Reload) ali pritisnite Ctrl + Shift + R ali Ctrl + R (⌘ + R v sistemu Mac)
- Internet Explorer/Edge: Držite Ctrl + F5 in kliknite Osveži (Refresh) ali pritisnite Ctrl + F5
- Google Chrome: Pritisnite Ctrl + Shift + R (⌘ + Shift + R v sistemu Mac)
- Opera: Pritisnite Ctrl + F5.
/**
* MediaWiki:AFC-add-project-tags.js
*
* Add WikiProject tags to draft talk page. Script for
* [[Wikipedia:WikiProject Articles for creation/Add WikiProject tags]],
* loaded via [[mw:Snippets/Load JS and CSS by URL]].
*
* Author: [[User:SD0001]]
* Licence: MIT
*
*/
// <nowiki>
var api;
$.when(
$.ready,
mw.loader.using(['mediawiki.util', 'mediawiki.api', 'mediawiki.widgets'])
).then(function () {
if (mw.config.get('wgPageName').indexOf('Wikipedija:Članki_za_ustvaritev/Dodaj_oznako_wikiprojekta') !== 0) {
return;
}
api = new mw.Api();
var titleInput = new mw.widgets.TitleInputWidget({
// get prefill value from the URL query string
value: (mw.util.getParamValue('title') || '')
// decode XML entities in it if any
.replace(/&#(\d+);/g, function (_, numStr) {
return String.fromCharCode(parseInt(numStr, 10));
})
// replace underscores with spaces (just for tidiness)
.replace(/_/g, ' ')
});
var tagInput = new OO.ui.MenuTagMultiselectWidget({
placeholder: 'Začnite vnašati za iskanje oznak ...',
tagLimit: 10,
autocomplete: false,
$overlay: $('<div>').addClass('projectTagOverlay').css({
'position': 'absolute',
'z-index': '110'
}).appendTo('body')
});
$('.mw-parser-output .mw-ui-progressive').parent().replaceWith(
$('<label>')
.text('Vnesite naslov strani osnutka: '),
titleInput.$element
.css('margin-bottom', '8px'),
$('<label>')
.attr('for', 'draft-select')
.text('Izberite WikiProjekte za oznako'),
$('<div>')
.append(tagInput.$element),
$('<button>')
.attr('id', 'draft-submit')
.addClass('mw-ui-button mw-ui-progressive')
.text('Dodaj oznake izbranih WikiProjektov')
.css('margin-top', '10px')
.on('click', evaluate),
$('<div>')
.attr('id', 'draft-status')
);
$.getJSON('https://sl.wikipedia.org/w/index.php?title=' +
encodeURIComponent("Wikipedija:Članki_za_ustvaritev/WikiProject_templates.json") +
'&action=raw&ctype=text/json'
).then(function (data) {
tagInput.addOptions(Object.keys(data).map(function (k) {
return {
data: data[k],
label: k
};
}));
});
function evaluate() {
$('#draft-status').text('Odpiranje pogovorne strani osnutka ...').css('color', 'blue');
var draftTitle = titleInput.getValue();
var draft = mw.Title.newFromText(draftTitle);
if (!draft) {
$('#draft-status').text('Prosimo, preverite naslov strani osnutka.').css('color', 'red');
return;
}
if (draft.namespace !== 118 && draft.namespace !== 2) {
$('#draft-status').text('Prosimo, preverite naslov strani osnutka. Ni videti, da bi bila v imenskem prostoru osnutkov').css('color', 'red');
return;
}
api.get({
"action": "query",
"prop": "revisions",
"titles": [draft.toString(), draft.getTalkPage().toString()],
"formatversion": "2",
"rvprop": "content",
"rvslots": "main",
"rvsection": "0"
}).then(function(data) {
// verify that the draft exists
var subjectpage = data.query.pages.filter(function(pg) {
return pg.ns === 118
})[0];
if (!subjectpage || subjectpage.missing) {
$('#draft-status').text('Prosimo, preverite naslov strani osnutka. Taka stran ne obstaja.')
.css('color', 'red');
return;
}
// get list of tags already present on talk page
var existingTags = [];
var talkpage = data.query.pages.filter(function(pg) {
return pg.ns === 119;
})[0];
if (talkpage && !talkpage.missing) {
var talktext = talkpage.revisions[0].slots.main.content;
// this is best-effort, no guaranteed accuracy
var rgx = /\{\{(WikiProjekt [^|}]*)/g;
var match;
while (match = rgx.exec(talktext)) {
existingTags.push(match[1]);
}
}
var newTags = tagInput.getValue().filter(function(tag) {
return existingTags.indexOf(tag) === -1;
}).map(function (tag) {
return '{{' + tag + '}}'
}).join('\n');
// api.edit() doens't work if page doesn't exist originally
api.postWithEditToken({
"action": "edit",
"title": draft.getTalkPage().toString(),
"prependtext": newTags + '\n',
"formatversion": "2",
"summary": 'Dodajanje oznak WikiProjektov ([[MediaWiki:AFC-add-project-tags.js|podprto]])'
}).then(function (data) {
if (data.edit && data.edit.result === 'Uspešno') {
$('#draft-status').text('Oznake WikiProjektov so dodane. Preusmerjanje na pogovorno stran osnutka ...').css('color', 'green');
setTimeout(function () {
location.href = mw.util.getUrl(draft.getTalkPage().toString());
}, 1000);
} else {
return $.Deferred().reject('unexpected-result');
}
}).catch(function (err) {
$('#draft-status').text('Prišlo je do napake (' + err + ') Prosimo, poskusite znova.').css('color', 'red');
});
}).catch(function(err) {
$('#draft-status').text('Prišlo je do napake (' + err + ') Prosimo, poskusite znova.').css('color', 'red');
});
}
}).catch(console.log);
// </nowiki>