$.when(
mw.loader.using(['mediawiki.Title', 'ext.gadget.morebits-2022']),
$.ready
).then(function(){
if (mw.config.get('wgUserGroups').indexOf('bot') === -1 && mw.config.get('wgNamespaceNumber') !== 14) {
return;
}
var ad = ' ([[کاربر:Jeeputer/moveCategory|اسکریپت انتقال رده]])';
var link = mw.util.addPortletLink( 'p-cactions', '#', 'انتقال رده', 'ca-move-cat', 'انتقال صفحهٔ رده و تمام صفحههای موجود در آن' );
link.addEventListener('click', callback);
var api = new mw.Api();
function callback(e) {
if (e) e.preventDefault();
var Window = new Morebits.simpleWindow(400, 200);
Window.setScriptName('انتقال رده');
Window.setTitle("انتقال رده و صفحههای موجود در آن");
var form = new Morebits.quickForm(evaluate);
form.append({
type: 'input',
label: 'عنوان جدید',
name: 'destination',
tooltip: 'بهمنظور تسهیل اصلاح غلطهای املایی، عنوان کنونی صفحه از پیش در این جعبه وارد شده است. ' +
'در صورتی که میخواهید عنوان را بهطور کلی تغییر دهید، متن موجود را حذف کنید و عنوان جدید را وارد کنید.',
value: mw.config.get('wgTitle').replace(/\_/g, ' ')
});
form.append({
type: 'input',
label: 'دلیل انتقال',
name: 'reason',
tooltip: 'وارد کردن دلیل بهمنظور ثبت در سیاهه الزامی است',
required: true
});
form.append({
type: 'checkbox',
name: 'options',
list: [{
label: 'انتقال صفحهٔ بحث',
name: 'movetalk',
checked: true,
}, {
label: 'برجای گذاشتن تغییرمسیر',
name: 'redirect',
checked: false,
tooltip: 'برجای گذاشتن صفحهای حاوی الگوی «رده بهتر» در عنوان کنونی؛ این گزینه زمانی ' +
'کاربرد دارد که عنوان کنونی حاوی غلط املایی نباشد و مفهوم و گسترهٔ تحت پوشش رده را به خوبی منتقل کند.'
}],
});
form.append({
type: 'submit',
label: 'تأیید'
});
var result = form.render();
Window.setContent(result);
Window.display();
}
function evaluate(e) {
var form = e.target;
var params = {
destination: '',
reason: '',
movetalk: true,
redirect: false
};
params.destination = form.destination.value;
if (params.destionation === '') {
alert('لطفاً عنوان صفحهٔ مقصد را وارد کنید!');
return;
} else if (params.destination === mw.config.get('wgTitle')) {
alert('عنوان وارد شده برای صفحهٔ هدف با عنوان کنونی صفحه یکسان است. انتقال امکانپذیر نیست.');
return;
} else if ((params.destination).substr(0, 4) === 'رده:') {
params.destination = (params.destination).substr(4, params.destination.length);
}
params.reason = form.reason.value;
if (!form.movetalk.checked) params.movetalk = false;
if (form.redirect.checked) params.redirect = true;
var currPage = new Morebits.wiki.page(mw.config.get('wgPageName'), 'در حال انتقال رده به عنوان تازه');
Morebits.simpleWindow.setButtonsEnabled(false);
Morebits.status.init(form);
Morebits.wiki.api.setApiUserAgent('[[w:User:Jeeputer/Easy-Merge.js]]');
Morebits.wiki.actionCompleted.notice = 'صفحهٔ رده منتقل شد';
currPage.setMoveDestination('رده:' + params.destination);
currPage.setMoveTalkPage(params.movetalk);
currPage.setMoveSuppressRedirect(!params.redirect);
currPage.setEditSummary(params.reason + ad);
currPage.setBotEdit(true);
currPage.move(moveMembers);
}
function moveMembers(e) {
var oldTitle = e.query.from.replace(/\_/g, ' '),
newTitle = e.query.to;
api.get({
action: 'query',
list: 'categorymembers',
cmtitle: oldTitle,
cmprop: 'title',
cmnamespace: '*',
cmlimit: 'max'
}).done(function(data) {
data.query.categorymembers.forEach(function(item) {
var page = new Morebits.wiki.page(item.title, 'در حال ویرایش صفحهٔ ' + item.title);
page.load(function(page) {
var newText = page.getPageText().replace(oldTitle, newTitle);
page.setBotEdit(true);
page.setPageText(newText);
page.setEditSummary('انتقال از [[' + oldTitle + ']] به [[' + newTitle + ']]' + ad);
page.setCreateOption('nocreate');
page.save();
});
});
});
}
});