پرش به محتوا

کاربر:Ahmad252/scripts/easy-merge.js

از ویکی‌پدیا، دانشنامهٔ آزاد

نسخه‌ای که می‌بینید نسخه‌ای قدیمی از صفحه است که توسط Ahmad252 (بحث | مشارکت‌ها) در تاریخ ‏۲ ژانویهٔ ۲۰۲۱، ساعت ۱۸:۵۰ ویرایش شده است. این نسخه ممکن است تفاوت‌های عمده‌ای با نسخهٔ فعلی داشته باشد.

نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاک‌سازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید ⇧ Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاک‌سازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکی‌پدیا:میانگیر مرورگرتان را خالی کنید را ببینید.
/* 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> */