MediaWiki:Gadget-QuickRename.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 RLuts
* @ver 0.2
* Quick Rename
* for ukwiki only
*/
//<nowiki>
$(document).ready(function () {
if((mw.config.get( 'wgNamespaceNumber' ) === 0 | mw.config.get('debug')) && mw.config.get('wgArticleId') > 0) {
mw.util.addPortletLink('p-cactions', 'javascript:quickRename.isMove();', 'Запит на перейменування');
}
});
if (window.quickRename === undefined) {
window.quickRename = {
install: function() {
this.page = 'Вікіпедія:Перейменування статей';
this.tpl = 'Move';
this.incTpl = 'Rename';
this.onIncTpl = 'Rename2';
this.section = 1;
if(mw.config.get('debug')) {
this.page = 'User:RLuts/scripttest/QR';
}
},
showDialog: function() {
var qr = this;
if($('#qr-rename-dialog').length === 0) {
$( "#mw-content-text" ).append("<div id=\"qr-rename-dialog\" style=\"display:none;\" title=\"Заявка на перейменування статті\"><p style=\"font-size:80%\">Цей інструмент дозволяє спростити процес створення нових заявок на сторінці <a href=\"//uk.wikipedia.org/wiki/Вікіпедія:Перейменування_статей\">Вікіпедія:Перейменування статей</a>. Перед тим як зробити заявку, впевніться, що нова назва більше відповідає нормам української мови та/або <a href=\"//uk.wikipedia.org/wiki/ВП:ІС\">правилам найменування статей у Вікіпедії</a>.</p><p>Введіть нову назву:</p><input id=\"qr-new-name\">\n<p>Причина (вікірозміткою, підпис згенерується автоматично):</p><textarea rows=\"4\" cols=\"50\" id=\"qr-reason\"></textarea>\n</div>");
}
mw.loader.using( 'jquery.ui', function () {
$( "#qr-rename-dialog" ).dialog({
buttons: {
"Додати новий запит": function() {
qr.isExists();
}
}
});
});
},
isExists: function() {
var qr = this;
this.oldname = mw.config.get( 'wgPageName' ).replace(/_/g,' ');
this.newname = $('#qr-new-name').val();
var title = this.page + '/' + this.oldname + ' → ' + this.newname;
var param = {
action: 'query',
list: 'allpages',
format: 'json',
titles: title,
aplimit: '1'
};
$.get(mw.util.wikiScript('api'), param).done(function(data) {
if(data.query.pages.hasOwnProperty(-1)) {
qr.newReq();
} else {
$("#qr-rename-dialog").html("Таке перейменування уже обговорювалось<br/><br/><a href=\"" + mw.config.get( 'wgServer' ) + mw.config.get( 'wgArticlePath' ).replace('$1',title) + "\">Перейти до обговорення</a>");
$("#qr-rename-dialog").dialog({
buttons: {
"ОК": function() {
$( this ).dialog( "close" );
}
}
});
}
});
},
newReq: function() {
var qr = this;
var reason = $('#qr-reason').val();
if( !this.isEmpty( this.newname ) && !this.isEmpty( this.reason )) {
var title = this.page + '/' + this.oldname + ' → ' + this.newname;
var content = '=== {{' + this.onIncTpl + '|' + this.oldname + '|' + this.newname + "}} ===\n" + reason + "--~~~~";
var summary = 'Автоматичне створення нового обговорення ([[Довідка:Додатки/QuickRename|QuickRename.js]])';
$("#qr-rename-dialog").dialog({
closeOnEscape: false,
buttons: false
});
$( "#qr-rename-dialog" ).html('Створення обговорення');
qr.preferences(function (watchlist) {
watchlist == undefined ? watchlist_aux = undefined: watchlist_aux = watchlist.watchlist_discussionpage;
qr.writeInPage(title, content, summary, false, false, watchlist_aux, function() {
qr.addMove(watchlist);
});
});
} else {
$( "#qr-rename-dialog" ).append("<br/><span style=\"color: red; font-size: 80%;\">Усі поля повинні бути заповнені</span>");
}
},
addMove: function(watchlist) {
var qr = this;
$( "#qr-rename-dialog" ).html('Вставка шаблону Move');
watchlist == undefined ? watchlist_aux = undefined: watchlist_aux = watchlist.watchlist_renamepage;
qr.writeInPage(qr.oldname, "{{"+ qr.tpl + "|" + qr.newname + "}}\n","шаблон перейменування статті ([[ВП:Додатки/QuickRename|QuickRename.js]])","prependtext",false, watchlist_aux, function () {
qr.getMovePage(watchlist);
});
},
getMovePage: function(watchlist) {
var qr = this;
$( "#qr-rename-dialog" ).html('Вставка обговорення на сторінку Вікіпедія:Перейменування статей<br/><br/><span style="color: red;">Будь ласка, не закривайте це вікно. Редагування цієї сторінки може тривати досить довго через велику кількість шаблонів.</span>');
var param = {
action: 'query',
prop: 'revisions',
format: 'json',
rvprop: 'content',
titles: qr.page,
rvsection: qr.section,
rvlimit: '1',
indexpageids: ''
};
$.get(mw.util.wikiScript('api'), param).done(function(data) {
if(data.query.pages.hasOwnProperty(-1)) {
alert('Невдалося завантажити текст сторінки ' + qr.page);
location.reload();
}
var id = data.query.pageids[0];
var content = data.query.pages[id].revisions[0]['*'];
content = content.replace(/(--\>\n)/,"$1{{" + qr.incTpl + "|" + qr.oldname + "|" + qr.newname + "}}\n");
watchlist == undefined ? watchlist_aux = undefined: watchlist_aux = watchlist.watchlist_nominatedpage;
qr.writeInPage(qr.page, content, 'Автоматичне створення нового обговорення ([[Довідка:Додатки/QuickRename|QuickRename.js]])', false, qr.section, watchlist_aux, function () {
qr.success();
});
});
},
success: function() {
$( "#qr-rename-dialog" ).dialog("close");
$( "#qr-rename-dialog" ).remove();
mw.notify($("<span>Ваше обговорення успішно додано на сторінку Вікіпедія:Перейменування статей.<br/>Обговорення та стаття також додані у Ваш список спостереження</span>"));
},
writeInPage: function(title, content, summary, option, section, watchlist, success) {
var qr = this;
if (watchlist == undefined)
watchlist = 'watch';
var param = {
action: 'edit',
title: title,
summary: summary,
watchlist: watchlist,
format: 'json'
};
param[option || 'text'] = content;
if(section) {
param.section = section;
}
api = new mw.Api();
api.postWithToken( 'csrf', param ).done( function ( data ) {
success();
}).fail(function (code) {
qr.editErrors(code, title);
});
},
isEmpty: function(str) {
return (!/\S/.test(str));
},
isMove: function() {
var qr = this;
this.install();
var id = mw.config.get( 'wgArticleId' );
var param = {
action: 'query',
list: 'embeddedin',
format: 'json',
eititle: 'Template:Move',
eicontinue: '10|Move|' + id,
eilimit: '1'
};
$.get(mw.util.wikiScript('api'), param).done(function(data) {
if(data['query-continue'] && data.query.embeddedin[0].pageid == id) {
qr.moveExists();
} else {
qr.showDialog();
}
});
},
moveExists: function() {
if($( "#qr-move" ).length === 0) {
$( "#mw-content-text" ).append("<div id=\"qr-move\" style=\"display:none;\" title=\"Помилка\"><p>На сторінці знайдено включення шаблону перейменування статей. Можливо перейменування цієї статті уже обговорюється?</p></div>");
}
$( "#qr-move" ).dialog({
buttons: {
"ОК": function() {
$( this ).dialog( "close" );
}
}
});
},
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.QuickRename);
});
}
else
next();
});
},
editErrors: function(code, title) {
var qr = 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;
}
qr.success();
}
};
}
//</nowiki>