Перейти до навігації
Перейти до пошуку
Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.
- Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
- Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
- Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5.
/*
* Скрипт для швидкої номінації статтей на швидке вилучення
* Ліцензія: GNU GPL
* Версія: 2.0 06.06.2015
* Автор першої версії: анонімний розробник, зв'язок — xzs.jx@yandex.ru
* Адаптовано з РосВікі у версії 68977088 (v.1.9 02.03.2013)
* Практично повністю переписано 06.06.2015
* Модифіковано користувачем Andriy.v
*/
//<nowiki>
if ( typeof( window.SpeedyDeletion ) == 'undefined' ) {
window.SpeedyDeletion = {
reasons: [
{ tmpl: 'nonsense', reason: 'Незв\'язний вміст' },
{ tmpl: 'misuse', reason: 'Нецільове використання сторінки' },
{ tmpl: 'test', reason: 'Тестова сторінка' },
{ tmpl: 'vand', reason: 'Вандалізм' },
{ tmpl: 'hoax', reason: 'Містифікація' },
{ tmpl: 'spam', reason: 'Явна реклама, піар або спам', notification: '{{subst:Привітання-спам|'+ mw.config.get('wgPageName') +'}}--~~~~' },
{ tmpl: 'evasion', reason: 'Створення всупереч персонального обмеження чи блокування' },
{ tmpl: 'attack', reason: 'Сторінка-напад' },
{ tmpl: 'author', reason: 'За запитом єдиного автора' },
{ tmpl: 'repost', reason: 'Ідентична копія раніше вилученої сторінки' },
{ tmpl: 'residual', reason: 'Сторінка, пов\'язана з вилученою' },
{ tmpl: 'duplicate', reason: 'Дублікат уже наявної сторінки' },
{ tmpl: 'copyvio', reason: 'Порушення авторських прав' },
{ tmpl: 'move', reason: 'Для звільнення шляху перейменування сторінки' },
{ tmpl: 'create', reason: 'Для звільнення шляху створення сторінки' },
],
reasons_article: [
{ tmpl: 'nocontext', reason: 'Дуже коротка беззмістовна та/або неенциклопедична стаття' },
{ tmpl: 'lang', reason: 'Неукраїнськомовна стаття або машинний переклад', notification: '{{subst:Langwarn|'+ mw.config.get('wgTitle') +'}}--~~~~' },
{ tmpl: 'nocontent', reason: 'Стаття без вмісту або з елементами оформлення енциклопедії замість вмісту' },
{ tmpl: 'nn', reason: 'Стаття про безсумнівно незначущі речі', notification: '{{subst:Незначущо|'+ mw.config.get('wgTitle') +'}}--~~~~' },
{ tmpl: 'madeup', reason: 'Явне просування власної вигадки' }
],
reasons_redirect: [
{ tmpl: 'redirnone', reason: 'Перенаправлення на неіснуючу сторінку' },
{ tmpl: 'redirspace', reason: 'Перенаправлення між просторами назв' },
{ tmpl: 'wrr', reason: 'Некоректне перенаправлення' },
{ tmpl: 'redirsense', reason: 'Перенаправлення з грубою семантичною помилкою' },
{ tmpl: 'redirtypo', reason: 'Перенаправлення з малоймовірною опискою' },
{ tmpl: 'redirflect', reason: 'Перенаправлення з відмінкової форми назви' },
{ tmpl: 'redircase', reason: 'Перенаправлення із сумішшю розкладок' },
{ tmpl: 'redirtalk', reason: 'Перенаправлення між сторінками обговорення' },
{ tmpl: 'redirdoc', reason: 'Перенаправлення між підсторінками документації'}
],
reasons_user: [
{ tmpl: 'owner', reason: 'Сторінка користувача або в особистому просторі за запитом її власника' },
{ tmpl: 'iptalk', reason: 'Неактуальне обговорення незареєстрованого користувача' },
{ tmpl: 'nonuser', reason: 'Сторінка неіснуючого користувача' }
],
reasons_category: [
{ tmpl: 'catempty', reason: 'Порожня категорія' },
],
reasons_other: [
{ tmpl: '', reason: 'Інша причина' }
],
install: function () {
var ns = mw.config.get('wgNamespaceNumber');
var reasons = this.reasons;
if (mw.config.get('wgIsRedirect'))
reasons = reasons.concat(this.reasons_redirect);
switch(ns) {
case 0:
reasons = reasons.concat(this.reasons_article);
break;
case 2:
case 3:
reasons = reasons.concat(this.reasons_user);
break;
case 14:
reasons = reasons.concat(this.reasons_category);
break;
}
reasons = reasons.concat(this.reasons_other);
var sd = this;
this.title = "Швидке вилучення";
if( $( '#SD-dialog' ).length === 0 ) {
$( "#mw-content-text" ).append('<div id="SD-dialog" style="display:none;" title="' + this.title + '">Критерії швидкого вилучення<br/><form id="SD-radiobox"></form></div>');
$.each(reasons, function() {
if(this.tmpl === 'duplicate') {
$('#SD-radiobox').append('<input type="radio" name="SD-radio" id="sd-duplicate">' + this.reason + '<br/>');
$('#SD-radiobox').append('<input id="SD-duplicate" style="display:none; width:100%"><br/>');
} else if(this.tmpl === 'move') {
$('#SD-radiobox').append('<input type="radio" name="SD-radio" id="sd-move">' + this.reason + '<br/>');
$('#SD-radiobox').append('<input id="SD-move" style="display:none; width:100%"><br/>');
} else if(this.tmpl === '') {
$('#SD-radiobox').append('<input type="radio" name="SD-radio" id="sd-other">' + this.reason + '<br/>');
$('#SD-radiobox').append('<input id="SD-othreason" style="display:none; width:100%"><br/>');
} else {
$('#SD-radiobox').append('<input type="radio" name="SD-radio" id="' + this.tmpl + '">' + this.reason + '<br/>');
}
});
$('#SD-radiobox').append('<input type="checkbox" id="SpeedyDeletion-forcewrap" checked/>Помістити шаблон швидкого вилучення в тег <noinclude><br/>');
$('#SD-dialog input:radio').change(function(){
if($(this).attr('id') == 'sd-other'){
$('#SD-othreason').show(500);
} else if($(this).attr('id') == 'sd-duplicate'){
$('#SD-duplicate').show(500);
} else if($(this).attr('id') == 'sd-move'){
$('#SD-move').show(500);
} else {
$('#SD-duplicate').hide(500);
$('#SD-othreason').hide(500);
$('#SD-move').hide(500);
}
});
}
mw.loader.using( 'jquery.ui', function() {
$( '#SD-dialog' ).dialog({
width: 400,
buttons: {
'Надіслати' : function() {
sd.check(reasons);
},
}
});
});
},
check: function(reasons) {
if($.inArray('Статті до швидкого вилучення', mw.config.get('wgCategories')) >= 0) {
alert('Сторінка вже номінована на швидке вилучення.');
return;
}
if(!$('#SD-dialog input:checked') || $('#SD-dialog input:checked').attr('id') == 'SpeedyDeletion-forcewrap') {
alert('Оберіть причину!');
return;
} else {
var notification = '';
if($('#SD-dialog input:checked').attr('id') == 'sd-other' && this.isEmpty($('#SD-othreason').val())) {
alert('Введіть причину!');
$('#SD-othreason').focus();
return;
} else if ($('#SD-dialog input:checked').attr('id') == 'sd-duplicate' && this.isEmpty($('#SD-duplicate').val())) {
alert('Введіть назву сторінки!');
$('#SD-duplicate').focus();
return;
} else if($('#SD-dialog input:checked').attr('id') == 'sd-duplicate') {
this.prep = "{{db-duplicate|" + $('#SD-duplicate').val() + "}}";
} else if ($('#SD-dialog input:checked').attr('id') == 'sd-move' && this.isEmpty($('#SD-move').val())) {
alert('Введіть назву сторінки!');
$('#SD-move').focus();
return;
} else if($('#SD-dialog input:checked').attr('id') == 'sd-move') {
this.prep = "{{db-move|" + $('#SD-move').val() + "}}";
} else if($('#SD-dialog input:checked').attr('id') == 'sd-other') {
this.prep = "{{db|" + $('#SD-othreason').val() + "}}";
} else {
this.prep = "{{db-" + $('#SD-dialog input:checked').attr('id') + "}}";
if ($('#SD-dialog input:checked').attr('id') == 'spam' || $('#SD-dialog input:checked').attr('id') == 'lang' || $('#SD-dialog input:checked').attr('id') == 'nn') {
$.each(reasons, function() {
if ($('#SD-dialog input:checked').attr('id') == this.tmpl)
notification = this.notification;
});
}
}
this.execute(notification);
}
},
execute: function(notification) {
var tpl = this.prep, sd = this, par;
if($('#SpeedyDeletion-forcewrap').prop( "checked" )) {
this.prep = '<noinclude>' + this.prep + '</noinclude>';
}
this.wait("Додавання шаблону на сторінку");
par = mw.config.get( 'wgIsRedirect' ) ? 'appendtext' : 'prependtext';
sd.preferences(function (watchlist) {
watchlist == undefined ? watchlist_aux = undefined: watchlist_aux = watchlist.watchlist_nominatedpage;
sd.writeInPage( mw.config.get( 'wgPageName' ), sd.prep + "\n", "Номінація статті на швидке вилучення (" + tpl + ") за допомогою [[MediaWiki:Gadget-SpeedyDeletion.js|гаджету швидкої номінації]]", par, null, watchlist_aux, function () {
if (notification == '') {
sd.success();
}
else
sd.addNotification(notification, watchlist);
});
});
},
wait: function(mes) {
$('#SD-dialog').dialog("close");
$('#SD-dialog').prop('title', 'Зачекайте, будь ласка...');
if($('#SD-dialog').length !== 0) {
$('#SD-dialog').html('<p style="font-size: 120%; font-weight:bold;">' + mes + '</p>');
} else {
$( "#mw-content-text" ).append('<div id="SD-dialog" style="display:none;"><p style="font-size: 120%; font-weight:bold;">' + mes + '</p></div>');
}
$('#SD-dialog').dialog({
modal: true,
buttons: false,
close: function(event, ui)
{
$(this).dialog('destroy').remove();
}
});
},
writeInPage: function ( title, content, summary, option, section, watchlist, success ) {
var sd = this;
if (watchlist == undefined)
watchlist = 'watch';
var param = {
action: 'edit',
title: title,
summary: summary,
watchlist: watchlist,
format: 'json'
};
param[option || 'text'] = content;
if (section || section === 0)
param.section = section;
api = new mw.Api();
api.postWithToken( 'csrf', param ).done( function ( data ) {
success();
}).fail(function (code) {
sd.editErrors(code, title);
});
},
addNotification: function (notification, watchlist){
var sd = this;
var params = {
action: 'query',
prop: 'revisions',
titles: mw.config.get('wgPageName'),
rvprop: 'user',
rvdir: 'newer',
rvlimit: 1,
format: 'json'
},
api = new mw.Api();
api.get( params ).done( function ( data ) {
var user = data.query.pages[Object.keys(data.query.pages)].revisions[0].user;
var params2 = {
action: 'query',
list: 'users',
ususers: user,
usprop: 'registration',
format: 'json'
},
api = new mw.Api();
api.get( params2 ).done( function ( data ) {
if (data.query.users[0].invalid == undefined) {
sd.wait("Додавання сповіщення на сторінку обговорення автора сторінки");
watchlist == undefined ? watchlist_aux = undefined: watchlist_aux = watchlist.watchlist_usertalkpage;
sd.writeInPage ( 'User_talk:' + user, '\n' + notification, 'сповіщення автора сторінки '+ mw.config.get('wgPageName').replace('_',' ') +' про номінацію на [[Вікіпедія:Критерії швидкого вилучення|швидке вилучення]] за допомогою [[MediaWiki:Gadget-SpeedyDeletion.js|гаджету швидкої номінації]]', 'appendtext', null, watchlist_aux, function () {
sd.success();
});
}
else
sd.success();
});
});
},
success: function () {
var sd = this;
sd.wait("Перезавантаження сторінки");
setTimeout(function(){
$( '#SD-dialog' ).dialog('close');
location.reload(); },1000);
},
isEmpty: function( str ) {
return (!/\S/.test(str));
},
preferences: function (next) {
var params = {
action: 'query',
titles: 'User:'+ mw.config.get("wgUserName") +'/gadget-preferences.json',
prop: 'pageprops',
format: 'json'
};
var api = new mw.Api();
api.get( params ).then( function ( data ) {
if (data.query.pages[-1] == undefined) {
$.getJSON(mw.config.get('wgScriptPath')+'/index.php?action=raw&ctype=application/json&title=User:' + mw.config.get("wgUserName") + '/gadget-preferences.json', function(data){
next(data.SpeedyDeletion);
});
}
else
next();
});
},
editErrors: function(code, title) {
var sd = this;
switch(code) {
case 'editconflict':
alert('Конфлікт редагувань на сторінці ' + title + '. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте ще раз');
break;
case 'protectedpage':
alert('Сторінка ' + title + ' захищена. Зв\'яжіться з адміністраторами на сторінці ВП:Запити до адміністраторів');
break;
case 'spamdetected':
alert('При редагуванні сторінки ' + title + ' автоматичний фільтр визначив ваш текст, як спам');
break;
case 'blocked':
alert('Ви заблоковані у цій вікі. Спробуйте, будь ласка, пізніше');
break;
case 'abusefilter-disallowed':
alert('Автоматичний фільтр заборонив редагування сторінки ' + title);
break;
case 'notoken':
alert('Неможливо отримати токен. Зверніться, будь ласка, у «Кнайпу (адміністрування)»');
break;
default:
alert('Невідома помилка при редагуванні сторінки ' + title + '. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте пізніше');
break;
}
sd.success();
}
};
}
// Якщо ми не на службовій сторінці, не на сторінці файлів, а на існуючій сторінці, яку можна редагувати, додає вкладку
$(document).ready(function () {
if( mw.config.get('wgCanonicalNamespace') != 'Special' && mw.config.get('wgCanonicalNamespace') !== 'File' && mw.config.get('wgCanonicalNamespace') !== 'MediaWiki' && $("#ca-viewsource").length === 0 && mw.config.get('wgArticleId') ) {
mw.util.addPortletLink("p-cactions", "javascript:SpeedyDeletion.install()", "На ШВ", "ca-contrib", "Номінувати на швидке вилучення");
}
});
//</nowiki>