/*
* @author Andriy.v
* for ukwiki only
*/
//<nowiki>
if (window.renameClosure === undefined) {
window.renameClosure = {
conclusions: [ { id: 'renamed', conclusion: 'Перейменовано на запропоновану назву'},
{ id: 'not-renamed', conclusion: 'Не перейменовано'},
{ id: 'alt-renamed', conclusion: 'Перейменовано на альтернативну назву'}
],
install: function() {
var rc = this;
var link = mw.util.addPortletLink('p-tb', '#', 'Підбити підсумок');
$( link ).click( function ( e ) {
e.preventDefault();
rc.showDialog();
});
},
showDialog: function () {
var rc = this;
if( $( '#rc-dialog' ).length === 0 ) {
$( "#mw-content-text" ).append('<div id="rc-dialog" style="display:none;" title=\"Підбиття підсумку заявки на перейменування\"><p style=\"font-size:80%\">Цей інструмент дозволяє спростити процес підбиття підсумків заявок на сторінці <a href=\"//uk.wikipedia.org/wiki/Вікіпедія:Перейменування_статей\">Вікіпедія:Перейменування статей</a>.</p>Текст підсумку:<textarea id="rc-conclusion" rows="8" cols="100"></textarea><div id="rc-preview"></div><p style= "font-weight: bold; font-family: Georgia;">Вкажіть чи сторінку було перейменовано на запропоновану назву чи ні, або вкажіть у полі нижче нову назву, якщо вона не співпадає із запропонованою.</p><form id="rc-radiobox"></form></div>');
$.each(this.conclusions, function() {
if (this.id == 'alt-renamed') {
$('#rc-radiobox').append('<input type="radio" name="rc-radio" id="rc-alt-renamed">' + this.conclusion + '<br/>');
$('#rc-radiobox').append('<input id="RC-altrenamed" style="display:none; width:100%"><br/>');
} else {
$('#rc-radiobox').append('<input type="radio" name="rc-radio" id="' + this.id + '">' + this.conclusion + '<br/>');
}
});
$('#rc-dialog input:radio').change(function(){
if($(this).attr('id') == 'rc-alt-renamed'){
$('#RC-altrenamed').show(500);
} else {
$('#RC-altrenamed').hide(500);
}
});
}
mw.loader.using( 'jquery.ui', function() {
$( '#rc-dialog' ).dialog({
width: 700,
buttons: {
'Зберегти' : function() {
rc.check();
},
'Попередній перегляд': function() {
rc.preview();
}
}
});
});
$('#rc-conclusion').focus();
},
nominatedPage: function() {
var nominatedPage = mw.config.get( 'wgPageName' );
nominatedPage = nominatedPage.replace(/_/g,' ');
nominatedPage = nominatedPage.replace(/Вікіпедія:Перейменування статей\//,'');
nominatedPage = nominatedPage.replace(/ → .+/,'');
return nominatedPage;
},
newPage: function() {
var newPage = mw.config.get( 'wgPageName' );
newPage = newPage.replace(/_/g,' ');
newPage = newPage.replace(/Вікіпедія:Перейменування статей\/.+ → /,'');
return newPage;
},
preview: function () {
var reason = $( '#rc-conclusion' ).val();
var param = {
action: 'parse',
format: 'json',
prop: 'text',
text: reason
};
$.get(mw.util.wikiScript('api'), param).done(function(data) {
$('#rc-preview').html(data.parse.text['*']);
});
},
check: function () {
window.conclusion = $( '#rc-conclusion' ).val();
if( this.isEmpty( conclusion ) ) {
$('#rc-dialog').append( '<p style="font-size:80%; color:red">"Введіть текст підсумку"</p>' );
return 0;
} else if($('#rc-dialog input:checked').attr('id') != 'rc-alt-renamed' && $('#rc-dialog input:checked').attr('id') != 'renamed' && $('#rc-dialog input:checked').attr('id') != 'not-renamed') {
alert('Оберіть результат обговорення!');
return;
} else if($('#rc-dialog input:checked').attr('id') == 'rc-alt-renamed' && this.isEmpty($('#RC-altrenamed').val())) {
alert('Введіть альтернативну назву!');
$('RC-altrenamed').focus();
return;
} else if($('#rc-dialog input:checked').attr('id') == 'renamed') {
window.talk = '{{перейменовано|' + this.nominatedPage() + '}}\n';
window.target = this.newPage();
this.renamePage(this.nominatedPage(),this.newPage());
} else if($('#rc-dialog input:checked').attr('id') == 'not-renamed') {
window.talk = '{{не перейменовано|' + this.newPage() + '}}\n';
window.target = this.nominatedPage();
this.addText();
} else {
window.talk = '{{перейменовано|' + this.nominatedPage() + '|link=' + mw.config.get( 'wgPageName' ).replace(/_/g,' ') +'}}\n';
window.target = $('#RC-altrenamed').val();
this.renamePage(this.nominatedPage(),$('#RC-altrenamed').val());
}
},
addText: function (after_nom){
var rc = this;
var content;
this.wait('Вставляється текст підсумку на підсторінці ВП:ПС');
var page = mw.config.get( 'wgPageName' ).replace(/_/g,' ');
new mw.Api().edit(page, function(revision) {
return {
text: revision.content + '\n\n==== Підсумок ====\n'+ window.conclusion + '--~~~~',
summary: '[[user:Andriy.v/Gadget-RenameClosure.js|Script]]: підсумок',
assert: 'user'
};
}).done( function () {
if (after_nom == 1)
rc.replacetemplate();
else
rc.deletemovetemplate();
}).fail( function (error) {
rc.editErrors(error, page);
}) ;
},
renamePage: function(oldPage, newPage){
var rc = this;
$( "#mw-content-text" ).append('<div id="rc-dialog1" style="display:none;" title=\"Зачекайте, будь ласка...\"><p style="font-size: 120%; font-weight:bold;">Перейменовується номінована сторінка</p></div>');
$('#rc-dialog1').dialog({
modal: true,
buttons: false
});
var params = {
action: 'move',
from: oldPage,
to: newPage,
reason: '[[user:Andriy.v/Gadget-RenameClosure.js|Script]]: відповідно до підсумку обговорення на [[' + mw.config.get( 'wgPageName' ).replace(/_/g,' ') + '|ВП:ПС]]',
movetalk: '1',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'csrf', params ).done( function ( data ) {
$('#rc-dialog1').dialog("close");
rc.addText();
}).fail(function(error) {
switch (error) {
case 'redirectexists':
case 'articleexists':
if ($.inArray('sysop',mw.config.get('wgUserGroups')) > -1)
rc.deletePage(oldPage, newPage);
else
rc.nominateToDelete(oldPage, newPage);
break;
default:
alert('Не вдалось перейменувати сторінку і/або її сторінку обговорення');
$('#rc-dialog1').dialog("close");
break;
}
});
},
deletemovetemplate: function (){
var rc = this;
this.wait('Видалення шаблона Move зі сторінки '+ this.nominatedPage() );
var page = window.target;
new mw.Api().edit(page, function (revision) {
return {
text: revision.content.replace(/\{\{([Mm]ove|[Aa]na)\|[^}]+\}\}\n?/,''),
summary: '[[user:Andriy.v/Gadget-RenameClosure.js|Script]]: видалення шаблона [[template:move|Move]]',
assert: 'user',
};
})
.done(function() {
rc.addTalk();
})
.fail(function(error) {
alert('Не вдалось вилучити шаблон Move з номінованої статті');
rc.editErrors(error, page);
rc.addTalk();
});
},
addTalk: function() {
var rc = this;
this.wait('Вставляється шаблон на сторінку обговорення');
var page = 'Обговорення:' + window.target;
new mw.Api().edit(page, function(revision) {
var text = revision.content;
text = window.talk + text;
return {
text: text,
summary: '[[user:Andriy.v/Gadget-RenameClosure.js|Script]]: вставка шаблона на сторінку обговорення',
assert: 'user',
};
})
.done(function() {
rc.replacetemplate();
})
.fail(function() {
new mw.Api().create(page, {
summary: '[[user:Andriy.v/Gadget-RenameClosure.js|Script]]: вставка шаблона на сторінку обговорення',
watchlist: 'nochange'
}, window.talk)
.done(function() {
rc.replacetemplate();
})
.fail(function(error) {
alert('Не вдалось додати шаблон до сторінки обговорення номінованої статті');
rc.editErrors(error, page);
rc.replacetemplate();
});
});
},
replacetemplate: function () {
var rc = this;
var nominatedPage = this.nominatedPage();
var newPage = this.newPage();
this.wait('Редагується шаблон обговорення на ВП:ПС');
new mw.Api().edit('Вікіпедія:Перейменування статей', function(revision) {
var text = revision.content.replace('\n{{Rename|' + nominatedPage + '|' + newPage + '}}','');
return {
text: text.replace('{{КК|/Архів|Архів}}<br/>','{{КК|/Архів|Архів}}<br/>\n{{Rename3|' + nominatedPage + '|' + newPage + '}}'),
summary: '[[user:Andriy.v/Gadget-RenameClosure.js|Script]]: перенесення обговорення до завершених',
assert: 'user',
};
})
.done(function() {
rc.success();
})
.fail(function(error) {
alert('Не вдалось замінити шаблон обговорення на ВП:ПС');
rc.editErrors(error, 'Вікіпедія:Перейменування статей');
rc.success();
});
},
deletePage: function(oldPage, newPage) {
var rc = this;
$( "#mw-content-text" ).append('<div id="rc-dialog-delete" style="display:none;" title=\"Увага! Перейменування потребує адміндії\"><p style= "font-weight: bold; font-family: Georgia;">Сторінка <a href=\"//uk.wikipedia.org/wiki/' + newPage.replace(' ','_') + '\">' + newPage + '</a>, на яку Ви перейменовуєте, вже існує і не є перенаправленням, або її історія редагувань має більш ніж один запис. Чи бажаєте її видалити та продовжити перейменування?</p><form id="rc-radiobox-delete"></form></div>');
$('#rc-radiobox-delete').append('<input type="radio" name="rc-radio" id="rc-delete" checked="checked">Так, видалити і продовжити дію гаджета<br/>');
$('#rc-radiobox-delete').append('<input type="radio" name="rc-radio" id="rc-stop">Ні, залишити і призупинити дію гаджета<br/>');
$( '#rc-dialog-delete' ).dialog({
width: 700,
buttons: {
'Підтвердити' : function() {
if ($('#rc-dialog-delete input:checked').attr('id') == 'rc-delete') {
var params = {
action: 'delete',
title: newPage,
reason: '[[user:Andriy.v/Gadget-RenameClosure.js|Script]]: для звільнення шляху перейменування сторінки',
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'csrf', params ).done( function ( data ) {
$('#rc-dialog-delete').dialog("close");
$('#rc-dialog1').dialog("close");
rc.renamePage(oldPage, newPage);
} );
}
else {
$('#rc-dialog-delete').dialog("close");
$('#rc-dialog1').dialog("close");
}
}
}
});
},
nominateToDelete: function(nominatedPage, newPage) {
var rc = this;
rc.wait("Сторінку " + newPage + " номіновується на вилучення");
$( "#mw-content-text" ).append('<div id="rc-dialog-nomdelete" style="display:none;" title=\"Увага! Перейменування потребує адміндії\"><p style= "font-weight: bold; font-family: Georgia;">Сторінка <a href=\"//uk.wikipedia.org/wiki/' + this.newPage().replace(' ','_') + '\">' + this.newPage() + '</a>, на яку Ви перейменовуєте, вже існує і не є перенаправленням, або її історія редагувань має більш ніж один запис. Чи бажаєте її видалити та продовжити перейменування?</p><form id="rc-radiobox-nomdelete"></form></div>');
$('#rc-radiobox-nomdelete').append('<input type="radio" name="rc-radio" id="rc-delete" checked="checked">Так, поставити на видалення<br/>');
$('#rc-radiobox-nomdelete').append('<input type="radio" name="rc-radio" id="rc-stop">Ні, залишити<br/>');
$( '#rc-dialog-nomdelete' ).dialog({
width: 700,
buttons: {
'Підтвердити' : function() {
if ($('#rc-dialog-nomdelete input:checked').attr('id') == 'rc-delete') {
new mw.Api().edit(newPage, function(revision) {
var text = "<noinclude>{{db-move|" + nominatedPage + "}}</noinclude>\n" + revision.content;
return {
text: text,
summary: '[[user:Andriy.v/Gadget-RenameClosure.js|Script]]: номінація сторінки на вилучення',
assert: 'user'
};
}).done(function () {
rc.addText(1);
});
}
else {
$('#rc-dialog-nomdelete').dialog("close");
$('#rc-dialog1').dialog("close");
}
}
}
});
},
success: function() {
this.wait('Перезавантаження сторінки');
setTimeout(function(){
$( '#rc-dialog' ).dialog('close');
location.reload(); },1000
);
},
wait: function(mes) {
$('#rc-dialog').dialog("close");
$('#rc-dialog').prop('title', 'Зачекайте, будь ласка...');
$('#rc-dialog').html('<p style="font-size: 120%; font-weight:bold;">' + mes + '</p>');
$('#rc-dialog').dialog({
modal: true,
buttons: false
});
},
isEmpty: function( str ) {
return (!/\S/.test(str));
},
editErrors: function(code, title) {
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;
}
}
};
}
//</nowiki>
var PageName = mw.config.get( 'wgPageName' );
var closedTalk = $('#Підсумок');
$(document).ready(function () {
if(PageName.indexOf("Вікіпедія:Перейменування_статей/") != -1 && !Boolean(closedTalk[0]) && ($.inArray('sysop',mw.config.get('wgUserGroups')) > -1 || $.inArray('editor',mw.config.get('wgUserGroups')) > -1 || $.inArray('autoreview',mw.config.get('wgUserGroups')) > -1)) {
renameClosure.install();
}
});