MediaWiki:Gadget-CleanupMessages.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.
/*
* @author Andriy.v
* for ukwiki only
*/
if ( typeof(CleanupMessages) === 'undefined' ) {
window.CleanupMessages = {
install: function () {
var cm = this;
var link = mw.util.addPortletLink('p-tb', '#', 'Додати шаблони впорядкування');
$( link ).click( function ( e ) {
e.preventDefault();
cm.mainDialog();
});
},
mainDialog: function () {
var cm = this;
$.getJSON(mw.config.get('wgScriptPath')+'/index.php?action=raw&ctype=application/json&title=MediaWiki:Gadget-CleanupMessages.json', function(data){
var insertOptions = data.templates;
var needTalk = ['Переписати','Брак інформації','Упорядкувати','Достовірність',
'Поза темою','Стиль','Незрозуміло','Плутано','Переписати вступ','Неологізми',
'Нейтральність','Суперечить','Протиріччя','Сумнівні твердження','Неакадемічно',
'Узагальнити','Глобалізувати','Зваженість','КОІ','Автобіографія','Платне редагування без розкриття',
'Недостатньо джерел','Недостатньо виносок','Актуальність','Оновити','Недавнізм','Фахівець'];
$( '<div id="cm-dialog">' ).html( $('<div>').attr('id', 'CleanupMessagesDialog') )
.dialog( {
width: 900,
modal: true,
title: "Виберіть потрібні шаблони впорядкування",
dialogClass: 'wikiEditor-toolbar-dialog',
close: function () {
$( this ).dialog( 'destroy' );
$( this ).remove();
},
buttons: {
'Скасувати': function() {
$( this ).dialog( 'close' );
},
'Зберегти' : function() {
if (selections.length == 0)
alert('Будь ласка виберіть шаблон');
else {
var needTalk_selected = [];
for (var k in selections) {
if (needTalk.includes(selections[k]))
needTalk_selected.push(selections[k]);
}
if (needTalk_selected.length > 0)
cm.talkPageDialog(selections, insertOptions);
else
cm.addTemplate(selections, insertOptions);
}
}
}
} );
$('#CleanupMessagesDialog').append('<table style="width:850px" id="cm-dialog-table"><tr id="cm-header-row"></tr></table>');
for (var i in insertOptions) {
if (insertOptions[i].title == "З\'вязність") {
$('#cm-group0').append('<th class="cm-header">' + insertOptions[i].title + '</th>');
$('#cm-group0').append('<tr><td id="cm-group' + i +'"></td></tr>');
}
else if (insertOptions[i].title == "Опрацювання") {
$('#cm-group6').append('<th class="cm-header">' + insertOptions[i].title + '</th>');
$('#cm-group6').append('<tr><td id="cm-group' + i +'"></td></tr>');
}
else {
$('#cm-dialog-table').append('<td id="cm-group' + i +'"></td>');
$('#cm-header-row').append('<th class="cm-header">' + insertOptions[i].title + '</th>');
}
for (var t in insertOptions[i].parameters)
$('#cm-group' + i).append('<tr><td><span class="cm-template" style="cursor:pointer; color:#777" title="' +
insertOptions[i].parameters[t].message +'">' + insertOptions[i].parameters[t].name + '</span></td></tr>');
}
var selections = [];
var remove_index = 0;
$('span.cm-template').click(function(){
if($(this).css("background-color") == 'rgba(0, 0, 0, 0)') {
$(this).css("background-color", "lightgreen");
$(this).css("color", "black");
selections.push($(this).text());
}
else {
$(this).css("background-color", "rgba(0, 0, 0, 0)");
$(this).css("color", "#777");
remove_index = selections.indexOf($(this).text());
selections.splice(remove_index);
}
});
});
},
talkPageDialog: function (selections, templates) {
var cm = this;
$( '<div>' ).html( $('<div>').attr('id', 'CleanupTalkPageDialog') )
.dialog( {
width: 700,
modal: true,
title: "Введіть обґрунтування щодо вставки шаблонів",
dialogClass: 'wikiEditor-toolbar-dialog',
close: function () {
$( this ).dialog( 'destroy' );
$( this ).remove();
},
buttons: {
'Скасувати': function() {
$( this ).dialog( 'close' );
},
'Зберегти' : function() {
var topic_name = $('#cm-topic-name').val();
var topic_content = $('#cm-topic-content').val();
if (topic_name == '' || topic_content == '')
alert('Будь ласка заповніть усі поля');
else {
$( this ).dialog("close");
cm.addTalkTopic(topic_name, topic_content, selections, templates);
}
}
}
} );
$('#CleanupTalkPageDialog').append('<p style="font-text:110%">Назва теми:</p><input id="cm-topic-name" style="width:200px"></input><p>Текст:<textarea id="cm-topic-content" style="height:210px"></textarea></p>');
},
addTemplate: function (selections, templates) {
var cm = this;
var text = '';
var page = mw.config.get('wgPageName');
var except = ['Брак інформації','Актуальність','Майбутня подія','Запланована подія','Поточна подія','Редагую','Перекладаю'];
var except_selected = [];
var cleaned_selections = selections;
this.wait('Вставляються шаблони впорядкування на сторінці');
for (var i in selections) {
if (except.includes(selections[i])) {
except_selected.push(selections[i]);
cleaned_selections.splice(i);
i--;
}
}
if (cleaned_selections.length == 1)
text = '{\{' + cleaned_selections[0] + '|дата={\{subst:CURRENTMONTHNAME}} {\{subst:CURRENTYEAR}}}}\n';
else if (cleaned_selections.length > 1) {
for (var n in cleaned_selections)
text += '\n|' + cleaned_selections[n].toLowerCase() + '={\{subst:CURRENTMONTHNAME}} {\{subst:CURRENTYEAR}}';
text = '{\{Проблеми' + text + '\n}}\n';
}
if (except_selected.length >= 1) {
for (var k in except_selected)
text += '{\{' + except_selected[k] + '}}\n';
}
new mw.Api().edit(page, function(revision) {
return {
text: text + revision.content,
summary: '[[Mediawiki:Gadget-CleanupMessages.js|Script]]: додавання шаблонів впорядкування',
assert: 'user'
};
}).done( function () {
cm.checkCategory(selections, templates);
}).fail( function (error) {
cm.editErrors(error, page);
}) ;
},
addTalkTopic: function (name, text, selections, templates) {
var cm = this;
var talk_page = 'Обговорення:' + mw.config.get('wgPageName');
this.wait('Додається обґрунтування на сторінці обговорення');
var topic_text = '\n\n== ' + name + ' ==\n'+ text + '--~~' + '~~';
new mw.Api().edit(talk_page, function(revision) {
return {
text: revision.content + topic_text,
summary: '[[Mediawiki:Gadget-CleanupMessages.js|Script]]: обґрунтування вставки шаблонів упорядкування',
assert: 'user'
};
}).done( function () {
cm.addTemplate(selections, templates);
}).fail( function (err) {
if (err == 'nocreate-missing') {
new mw.Api().create(talk_page, {
summary: '[[Mediawiki:Gadget-CleanupMessages.js|Script]]: обґрунтування вставки шаблонів упорядкування'
}, topic_text.replace('/^\n\n/g',''))
.done(function() {
cm.addTemplate(selections, templates);
})
.fail(function(error) {
cm.editErrors(error, talk_page);
});
}
else
cm.editErrors(err, talk_page);
}) ;
},
wait: function (mes) {
$('#cm-dialog').dialog("close");
$('<div id="cm-dialog">').html('<p style="font-size: 120%; font-weight:bold;">' + mes + '</p>')
.dialog({
title: 'Зачекайте, будь ласка...',
modal: true,
buttons: false
});
},
checkCategory: function(selections, templates) {
var cm = this;
var date = new Date();
var month = date.getMonth();
var year = date.getFullYear();
var uk_month = "";
switch (month) {
case 0:
uk_month = "із січня";
break;
case 1:
uk_month = "з лютого";
break;
case 2:
uk_month = "з березня";
break;
case 3:
uk_month = "з квітня";
break;
case 4:
uk_month = "з травня";
break;
case 5:
uk_month = "з червня";
break;
case 6:
uk_month = "з липня";
break;
case 7:
uk_month = "із серпня";
break;
case 8:
uk_month = "з вересня";
break;
case 9:
uk_month = "з жовтня";
break;
case 10:
uk_month = "з листопада";
break;
case 11:
uk_month = "з грудня";
break;
}
var category_names = [];
for (var i in templates) {
for (var j in templates[i].parameters) {
if (selections.includes(templates[i].parameters[j].name)) {
if (templates[i].parameters[j].category != "") {
category_names.push("Категорія:" + templates[i].parameters[j].category + " " + uk_month + " " + year);
}
}
}
}
cm.existCategory(category_names);
},
existCategory: function (categories) {
var cm = this;
if (categories.length != 0) {
var category = categories.pop();
var params = {
action: 'query',
titles: category,
prop: 'pageprops',
format: 'json'
};
var api = new mw.Api();
api.get( params ).then( function ( data ) {
if (data.query.pages[-1] != undefined)
cm.createCategory(category, categories);
else
cm.existCategory(categories);
});
}
else
cm.success();
},
createCategory: function (page, categories) {
var cm = this;
cm.wait('Створюються категорії');
var content = "{\{Щомісячна категорія впорядкування}}";
new mw.Api().create(page, {
summary: '[[Mediawiki:Gadget-CleanupMessages.js|Script]]: створення категорії впорядкування'
}, content)
.done(function() {
cm.existCategory(categories);
})
.fail(function(error) {
cm.editErrors(error, page);
});
},
success: function () {
this.wait('Перезавантаження сторінки');
setTimeout(function(){
$( '#cm-dialog' ).dialog('close');
location.reload(); },1000
);
},
editErrors: function(code, title) {
switch(code) {
case 'editconflict':
alert('Конфлікт редагувань на сторінці ' + title + '. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте ще раз');
break;
case 'protectedtitle':
alert('Сторінка ' + title + ' захищена. Зв\'яжіться з адміністраторами на сторінці ВП:Запити до адміністраторів');
break;
case 'spamdetected':
alert('При редагуванні сторінки ' + title + ' автоматичний фільтр визначив ваш текст, як спам');
break;
case 'blocked':
alert('Ви заблоковані у цій вікі. Спробуйте, будь ласка, пізніше');
break;
case 'filtered':
case 'abusefilter-disallowed':
alert('Автоматичний фільтр заборонив редагування сторінки ' + title);
break;
case 'notoken':
alert('Неможливо отримати токен. Зверніться, будь ласка, у «Кнайпу (адміністрування)»');
break;
default:
alert('Невідома помилка при редагуванні сторінки ' + title + '. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте пізніше');
break;
}
}
};
}
$(document).ready(function () {
mw.loader.using( 'oojs', function() {
if (mw.config.get('wgNamespaceNumber') == 0)
CleanupMessages.install();
});
});