MediaWiki:Gadget-EUSpring.js
Перейти до навігації
Перейти до пошуку
Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.
- Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
- Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
- Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5.
//адаптовано з https://lv.wikipedia.org/wiki/Dalībnieks:Edgars2007/cee.js2
(function($, mw) {
mw.loader.load("jquery.chosen");
mw.loader.load("mediawiki.ui.input", "text/css");
var delsortCategories = {
"temats": ["архітектура", "економіка", "жінки", "історія", "їжа", "культура", "література",
"мистецтво", "музика", "наука та технології", "освіта", "політика",
"природа та географія", "спорт", "суспільство", "транспорт"],
"valsts": ["Австрія", "Азербайджан", "Албанія", "Андорра", "Бельгія",
"Болгарія", "Боснія і Герцеговина", "Велика Британія", "Вірменія", "Греція",
"Грузія", "Данія", "Естонія", "Ірландія", "Ісландія",
"Іспанія", "Італія", "Кіпр", "Латвія", "Литва",
"Ліхтенштейн", "Люксембург", "Мальта", "Молдова", "Монако",
"Нідерланди", "Німеччина", "Норвегія", "Північна Македонія", "Польща",
"Португалія", "Румунія", "Сан-Марино", "Сербія", "Словаччина",
"Словенія", "Туреччина", "Угорщина", "Фінляндія", "Франція",
"Хорватія", "Чехія", "Чорногорія", "Швейцарія", "Швеція"]
};
var ADVERTISEMENT = " (за допомогою [[MediaWiki:Gadget-EUSpring.js|cee.js]])";
var date = new Date();
var current_year = date.getFullYear();
if (mw.config.get('wgNamespaceNumber') == 0) {
var portletLink = mw.util.addPortletLink('p-cactions', '#', 'Європейська весна '+current_year, 'pt-cee', 'Додавання шаблону «Європейська весна '+current_year+'»');
$(portletLink).click(function(e) {
e.preventDefault();
$("#jump-to-nav").after('<div style="border: thin solid rgb(197, 197, 197); box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.25); border-radius: 3px; padding: 5px; position: relative;" id="delsort">' +
'<div id="delsort-title" style="font-size: larger; font-weight: bold; text-align: center;">Додавання шаблону «Європейська весна '+current_year+'»</div>' +
'<table cellspacing="5"><tr><td>Користувач:<td><input type="text" id="select-name" style="width:250px;" autofocus /><br>' +
//'<tr><td>Теми:<td><select multiple="multiple" id="select-temats" data-placeholder="Теми" style="width:250px;"></select><br>' +
//'<tr><td>Країни і спільноти:<td><select multiple="multiple" id="select-valsts" data-placeholder="Країни і спільноти" style="width:250px;"></select></table>' +
'<tr><td>Країни:<td><select multiple="multiple" id="select-valsts" data-placeholder="Країни" style="width:250px;"></select>' +
'<tr><td colspan=2><input type="checkbox" id="edited_existing_article"> Доповнено існуючу статтю</table>' +
'<button style="position: absolute; top: 5px; right: 5px;" id="close-button" class="mw-ui-button mw-ui-destructive mw-ui-quiet">Скасувати</button>' + '</div>');
$("#close-button").click(function(e) {
$("#delsort").remove();
});
get_author();
for (var key in delsortCategories) {
var aaa = [];
for (i = 0; i < delsortCategories[key].length; i++) {
aaa.push('<option value="' + delsortCategories[key][i] + '">' + delsortCategories[key][i] + '</option>');
}
$("#delsort #select-" + key).append(aaa.join(''));
}
// Set up the chosen one (some code stolen from http://stackoverflow.com/a/27445788)
$("#delsort select").chosen();
$("#delsort .chzn-container").css("text-align", "left");
// Add the button that triggers sorting
$("#delsort").append($("<div>").css("text-align", "center").append($("<button> ")
.addClass("mw-ui-button").addClass("mw-ui-progressive").attr("id", "sort-button").text("Зберегти").click(function(e) {
// Make a status list
$("#delsort").append($("<ul> ").attr("id", "status"));
var user_name = $("#delsort #select-name").val();
console.log(user_name);
var edited_existing = $('#edited_existing_article').prop('checked');
console.log(edited_existing);
// Build a list of categories
var temati_res = $("#delsort #select-temats").val() || [];
$("#delsort #select-temats .custom-delsort-field").each(function(index, element) {
temati_res.push($(element).val());
});
temati_res = temati_res.filter(Boolean); // remove empty strings
console.log(temati_res);
// Build a list of categories
var reg_res = $("#delsort #select-valsts").val() || [];
$("#delsort #select-valsts .custom-delsort-field").each(function(index, element) {
reg_res.push($(element).val());
});
reg_res = reg_res.filter(Boolean); // remove empty strings
console.log(reg_res);
categories = {
'user': user_name,
'edited_existing': edited_existing,
'regioni': reg_res,
'temas': temati_res
};
// Actually do the delsort
saveChanges(categories);
})));
});
} // End if ( mw.config.get( "wgPageName" ).indexOf('Wikipedia:Articles_for_deletion/') ... )
//Saves the changes to the current discussion page by adding delsort notices (if applicable) and updating the AFDC cat
function get_author() {
$.ajax({
url: mw.util.wikiScript('api'),
type: 'POST',
dataType: 'json',
data: {
format: 'json',
action: 'query',
prop: 'revisions',
titles: mw.config.get('wgPageName'),
rvprop: 'user',
rvlimit: 1,
rvdir: "newer"
}
}).done(function(data) {
try {
var pageId = Object.keys(data.query.pages)[0];
user = data.query.pages[pageId].revisions[0].user;
$("#select-name").val(user);
} catch (e) {
console.log('did not get user');
}
});
}
function saveChanges(cats) {
// Indicate to the user that we're doing some deletion sorting
$("#delsort-table").remove();
$("#delsort #sort-button").text("Sorting discussion...").prop("disabled", true).fadeOut(400, function() {
$(this).remove();
});
var categoryTitleComponent = (cats.length === 1) ? ("the \"" + cats[0] + "\" category") : (cats.length + " categories");
// Start the animation, using super-advanced techniques
var animationInterval = setInterval(function() {
$("#delsort-dots").text($("#delsort-dots").text() + ".");
if ($("#delsort-dots").text().length > 3) {
$("#delsort-dots").text("");
}
}, 600);
// Place (a) notification(s) on the discussion and update its AFDC cat
postDelsortNoticesAndUpdateAfdc(cats);
}
function format_template(data) {
var tpl = [];
var dalibnieks = data.user;
if (dalibnieks && dalibnieks != '') tpl.push('|користувач=' + dalibnieks);
if(data.edited_existing) tpl.push('|доповнено=так');
var regioni = data.regioni;
for (i = 0; i < regioni.length; i++)
{
//if (i == 0) { tpl.push('|країна=' + regioni[i]); }
//else { tpl.push('|країна' + (i + 1) + '=' + regioni[i]); }
tpl.push('|' + regioni[i]);
}
var temas = data.temas;
for (i = 0; i < temas.length; i++) {
if (i == 0) {
tpl.push('|тема=' + temas[i]);
} else {
tpl.push('|тема' + (i + 1) + '=' + temas[i]);
}
}
return '{'+'{Європейська весна ' + current_year + tpl.join('') + '}}';
}
function save_page(wikitext, cats) {
wikitext = format_template(cats) + wikitext;
$.ajax({
url: mw.util.wikiScript('api'),
type: 'POST',
dataType: 'json',
data: {
format: 'json',
action: 'edit',
title: 'Обговорення:' + mw.config.get('wgPageName'),
summary: "Додано шаблон [[Шаблон:Європейська весна "+current_year+"|{{Європейська весна "+current_year+"}}]]" + ADVERTISEMENT,
token: mw.user.tokens.get('csrfToken'),
watchlist: "nochange",
text: wikitext
}
}).done(function(data) {
if (data && data.edit && data.edit.result && data.edit.result == 'Success') {
console.log('good');
$("#delsort").hide();
} else {
console.log('bad');
}
}).fail(function() {
console.log('bad2');
});
}
//Adds some notices to the discussion page that this discussion was sorted.
function postDelsortNoticesAndUpdateAfdc(cats) {
var wikitext;
$.getJSON(mw.util.wikiScript('api'), {
format: 'json',
action: 'query',
prop: 'revisions',
rvprop: 'content',
rvlimit: 1,
titles: 'Обговорення:' + mw.config.get('wgPageName')
}).done(function(data) {
try {
var pageId = Object.keys(data.query.pages)[0];
wikitext = data.query.pages[pageId].revisions[0]['*'];
console.log('saved as 1');
save_page(wikitext, cats);
} catch (e) {
console.log('saved as 2');
save_page('', cats);
}
});
}
}(jQuery, mediaWiki));