کاربر:Ahmad252/scripts/easy-merge.js
ظاهر
< کاربر:Ahmad252 | scripts
کدهایی که در این صفحه قرار میدهید، ممکن است حاوی محتوای مخربی باشند که حساب کاربری شما را به خطر میاندازند. اگر با استفاده از دستور «importScript» یا الگوی «نصب اسکریپت کاربری» اسکریپتی را از صفحهای دیگر درونریزی میکنید، دقت داشتهباشید که این کار باعث میشود تا بهطور سیال اسکریپتی را بارگیری کنید که امکان تغییر آن توسط دیگران وجود دارد. اگر از امنیت کدهایی که به این صفحه میافزایید مطمئن نیستید، در قهوهخانهٔ فنی درخواست کمک کنید. هرگاه پیشنمایش تغییراتی که در این صفحه اعمال کردهاید را مشاهده کنید، کد اجرا خواهد شد. |
![]() | مستندات این اسکریپت کاربری را میتوان در کاربر:Ahmad252/scripts/easy-merge قرار داد. |
/* Created by [[:w:en:User:SD0001]], copied from [[:w:en:Special:PermaLink/953244610]]. Localization done by [[User:Ahmad252]]. */
/* jshint maxerr: 999 */
/* <nowiki> */
$.when(
mw.loader.using(['mediawiki.Title', 'ext.gadget.morebits']),
$.ready
).then(function() {
// hide on special pages and talk pages
if (mw.config.get('wgNamespaceNumber') < 0 || mw.config.get('wgNamespaceNumber') % 2 === 1 || !mw.config.get('wgRevisionId')) {
return;
}
var advert = ' ([[کاربر:Ahmad252/ادغام ساده|ادغام ساده]])';
var menu = mw.util.addPortletLink('p-cactions', '#', 'ادغام ساده', 'p-easy-merge', 'تغییرمسیر به مقالهای دیگر و افزودن الگوهای ادغام به صفحههای بحث');
menu.addEventListener('click', callback);
function callback(e) {
if (e) e.preventDefault();
var Window = new Morebits.simpleWindow(600, 500);
Window.setScriptName('ادغام ساده');
Window.setTitle("تبدیل به تغییرمسیر و افزودن الگوهای ادغام به صفحههای بحث");
Window.addFooterLink('ادغام مقالهها', 'ویکیپدیا:ادغام صفحهها');
var form = new Morebits.quickForm(evaluate);
form.append({
type: 'input',
label: 'صفحهٔ هدف: ',
name: 'target',
value: (mw.config.get('wgIsRedirect') && $('div.redirectMsg a').length) ? $('div.redirectMsg a').text() : ''
});
form.append({
type: 'input', // changed to 'date' after render
name: 'date',
label: 'تاریخ ادغام: ',
value: new Date().toLocaleDateString('fa-IR').slice(0, 10),
tooltip: 'این تاریخ در الگوهای {{ادغام شد از}} و {{ادغام شد در}} استفاده میشود'
});
form.append({
type: 'checkbox',
name: 'actions',
list: [
{
label: 'تغییرمسیر این صفحه به صفحهٔ هدف',
name: 'redirect',
checked: !mw.config.get('wgIsRedirect'),
tooltip: 'جایگزین کردن محتویات با تغییرمسیری به صفحهٔ هدف. {{تغییرمسیر حاصل از ادغام}} به تغییرمسیر اضافه خواهد شد. ' +
'{{تغییرمسیر به بخش}} هم در صورت نیاز اضافه خواهد شد',
subgroup: {
type: 'input',
label: 'خلاصه ویرایش: ',
value: 'محتویات در [[###]] ادغام شد، تبدیل به تغییرمسیر',
name: 'summary',
tooltip: '### بهطور خودکار با نام صفحهٔ هدف جایگزین خواهد شد',
size: '60px'
}
},
{
label: 'حذف برچسب ادغام از صفحه هدف (در صورت وجود)',
name: 'removemerge',
checked: true
},
{
label: 'افزودن {{ادغام شد از}} به صفحهٔ بحث صفحهٔ هدف',
name: 'addmergedfrom',
checked: true
},
{
label: 'افزودن {{ادغام شد در}} به صفحهٔ بحث این صفحه',
name: 'addmergedto',
checked: true
},
{
label: 'تنظیم بنرها و الگوهای ویکیپروژهای',
tooltip: 'برای بنرهای ویکیپروژهای، تغییرمسیر به عنوان class قرار میگیرد و importance حذف میشود. تمام الگوهای نشاندهنده نیاز به رسانه هم حذف میشوند',
name: 'adjusttalktemplates',
checked: true
},
{
label: 'حفظ ردهها در تغییرمسیر',
tooltip: 'در هنگام تبدیل به تغییرمسیر، ردهها را حذف نکن',
name: 'retaincats',
checked: false
}
]
});
form.append({ type: 'submit', label: 'ثبت' });
var result = form.render();
result.date.type = 'date';
result.date.required = true;
Window.setContent(result);
Window.display();
}
function evaluate(e) {
var form = e.target;
var params = {};
params.target = form.target.value;
if (!params.target.trim()) {
alert('لطفاً نام صفحهٔ هدف ادغام را وارد کنید');
return;
}
params.current = Morebits.pageNameNorm;
params.redirect = form.redirect.checked;
params.summary = form['redirect.summary'] && form['redirect.summary'].value.replace('###', params.target);
params.removemerge = form.removemerge.checked;
params.addmergedfrom = form.addmergedfrom.checked;
params.addmergedto = form.addmergedto.checked;
params.adjusttalktemplates = form.adjusttalktemplates.checked;
params.retaincats = form.retaincats.checked;
var dateobj = new Morebits.date(form.date.value);
if (isNaN(dateobj.getTime())) {
alert('تاریخ نامعتبر. لطفاً با فرمت YYYY-MM-DD وارد کنید'); // should arise only for browsers w/o datepicker
return;
}
params.date = dateobj.getUTCDate() + ' ' + dateobj.getUTCMonthName() + ' ' + dateobj.getUTCFullYear();
Morebits.simpleWindow.setButtonsEnabled(false);
Morebits.status.init(form);
Morebits.wiki.api.setApiUserAgent('[[w:User:Ahmad252/scripts/easy-merge.js]]');
if (params.redirect) {
var page = new Morebits.wiki.page(params.current, 'تبدیل به تغییرمسیر');
page.load(function(page) {
var pageText = '#تغییرمسیر [[' + params.target + ']]\n\n{{تغییرمسیر حاصل از ادغام}}';
if (params.target.indexOf('#') !== -1) {
pageText += '\n{{تغییرمسیر به بخش}}';
}
if (params.retaincats) {
var cats = page.getPageText().match(/\[\[([Cc]ategory|رده):.*?\]\]/g);
if (cats) {
pageText += '\n\n' + cats.join('\n');
}
}
page.setPageText(pageText);
page.setEditSummary(params.summary + advert);
page.setCreateOption('nocreate');
page.save();
});
}
if (params.removemerge) {
var targetpage = new Morebits.wiki.page(params.target, 'Removing {{merge from}} from target page');
targetpage.load(function(e) {
var text = e.getPageText();
var rgx1 = new RegExp('\\{\\{([mM]erge[- ]?[fF]rom|ادغام شد از|ااز)\\s*\\|' + Morebits.pageNameRegex(params.current) + '[^}]*\\}\\}\\n?');
var rgx2 = new RegExp('\\{\\{[bB]eing merged\\s*\\|' + Morebits.pageNameRegex(params.current) + '[^}]*\\}\\}\\n?');
var newtext = text.replace(rgx1, '').replace(rgx2, '');
if (text !== newtext) {
targetpage.setPageText(newtext);
targetpage.setEditSummary('حذف الگوهای ادغام پس از ادغام' + advert);
targetpage.setCreateOption('nocreate');
targetpage.save();
} else {
targetpage.getStatusElement().info('پیدا نشد');
}
});
}
if (params.addmergedfrom) {
var targettalkpage = new mw.Title(params.target).getTalkPage().toText();
var targettalk = new Morebits.wiki.page(targettalkpage, 'افزودن {{ادغام شد از}} به صفحهٔ بحث هدف');
targettalk.setPrependText('{{ادغام شد از|' + params.current + '|' + params.date + '}}\n');
targettalk.setEditSummary('افزودن {{ادغام شد از|' + params.current + '}}' + advert);
targettalk.prepend();
}
if (params.addmergedto || params.adjusttalktemplates) {
var curentalkpage = new mw.Title(params.current).getTalkPage().toText();
var sttext;
if (params.addmergedto) {
sttext = 'افزودن {{ادغام شد در}} به صفحهٔ بحث';
} else {
sttext = 'تنظیم بنرهای ویکیپروژهای';
}
var curentalk = new Morebits.wiki.page(curentalkpage, sttext);
curentalk.setPageSection(0);
curentalk.load(function(e) {
var text = e.getPageText();
if (params.addmergedto) {
var mergedto = '{{ادغام شد در|' + params.target + '|' + params.date + '}}\n';
text = mergedto + text;
}
if (params.adjusttalktemplates) {
text = text
.replace(/\|\s*class\s*=[^}|]*/g, '|class=redirect') // set class to redirect
.replace(/\|[^|}]*?importance\s*=[^}|]*/g, '') // remove importance param
.replace(/\|(?:[^|}]*-(needed|نیاز)|needs-[^|}]*)\s*=[^|}]*/g, '') // remove any media-needed or needs-media params
.replace(/\{\{[^|}]* (?:requested|needed|\-نیاز)[^}]*\}\}\n?/g, ''); // remove any {{media requested}} templates
}
if (text === '' && e.getPageText() === '') {
return; // otherwise in this case, page is created as empty. Morebits bug.
}
curentalk.setPageText(text);
var summary;
if (params.addmergedto && params.adjusttalktemplates) {
summary = 'افزودن {{ادغام شد در|' + params.target + '}} و تنظیم بنرهای ویکیپروژهای';
} else if (params.addmergedto) {
summary = 'افزودن {{ادغام شد در|' + params.target + '}}';
} else if (params.adjusttalktemplates) {
summary = 'تنظیم بنرهای ویکیپروژهای';
}
curentalk.setEditSummary(summary + advert);
curentalk.save();
});
}
}
});
/* </nowiki> */