مدیاویکی:Gadget-twinkleimage-2022.js

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

نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاک‌سازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاک‌سازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکی‌پدیا:میانگیر مرورگرتان را خالی کنید را ببینید.

// <nowiki>


(function($) {


/*
 ****************************************
 *** twinkleimage.js: Image CSD module
 ****************************************
 * Mode of invocation:     Tab ("DI")
 * Active on:              Local nonredirect file pages (not on Commons)
 */

Twinkle.image = function twinkleimage() {
	if (mw.config.get('wgNamespaceNumber') === 6 && mw.config.get('wgArticleId') && !document.getElementById('mw-sharedupload') && !Morebits.isPageRedirect()) {
		Twinkle.addPortletLink(Twinkle.image.callback, 'تصاویر', 'tw-di', 'نامزد کردن تصاویر برای حذف سریع با تأخیر');
	}
};

Twinkle.image.callback = function twinkleimageCallback() {
	var Window = new Morebits.simpleWindow(600, 330);
	Window.setTitle('نامزد کردن برای حذف سریع تاریخ‌دار');
	Window.setScriptName('توینکل');
	Window.addFooterLink('سیاست حذف سریع', 'وپ:محس#پرونده‌ها');
	Window.addFooterLink('ترجیحات تصاویر', 'وپ:توینکل/ترجیحات#image');
	Window.addFooterLink('راهنمای توینکل', 'وپ:توینکل/توضیحات#image');
	Window.addFooterLink('ارائهٔ بازخورد', 'بوپ:توینکل');

	var form = new Morebits.quickForm(Twinkle.image.callback.evaluate);
	form.append({
		type: 'checkbox',
		list: [
			{
				label: 'آگاه‌سازی بارگذار اصلی',
				value: 'notify',
				name: 'notify',
				tooltip: "اگر می‌خواهید چندین تصویری که یک کاربر بارگذاری کرده را نامزد کنید، این گزینه را غیرفعال کنید تا صفحهٔ بحث‌شان بر اثر تعدد پیام‌ها شلوغ نشود.",
				checked: Twinkle.getPref('notifyUserOnDeli')
			}
		]
	}
	);
	var field = form.append({
		type: 'field',
		label: 'نوع کنش مورد نیاز'
	});
	field.append({
		type: 'radio',
		name: 'type',
		event: Twinkle.image.callback.choice,
		list: [
			{
				label: 'بدون منبع (محس پ۴)',
				value: 'بدون منبع',
				checked: true,
				tooltip: 'تصویر یا رسانهٔ فاقد اطلاعات منبع'
			},
			{
				label: 'بدون مجوز (محس پ۴)',
				value: 'بدون پروانه',
				tooltip: 'تصویر یا پرونده فاقد اطلاعات در مورد وضعیت حق تکثیر'
			},
			{
				label: 'بدون منبع و بدون مجوز (محس پ۴)',
				value: 'بدون منبع و بدون پروانه',
				tooltip: 'تصویر یا پرونده‌ای که نه اطلاعاتی راجع به منبع دارد و نه راجع به وضعیت حق تکثیر'
			},
			{
				label: 'استفادهٔ منصفانهٔ یتیم (محس پ۵)',
				value: 'استفاده منصفانه یتیم',
				tooltip: 'تصویر یا رسانه‌ای که فاقد مجوز مورد نیاز برای استفاده در ویکی‌پدیا است و استفاده از آن تنها به‌واسطهٔ ادعای استفادهٔ منصفانه بر پایهٔ ویکی‌پدیا:محتوای غیرآزاد مجاز است، اما در هیچ مقاله‌ای استفاده نشده است'
			},
			{
				label: 'فاقد توضیح در مورد استفادهٔ منصفانه (محس پ۶)',
				value: 'بدون استفاده منطقی منصفانه',
				tooltip: 'تصویر یا پرونده برای استفادهٔ منصفانه در ویکی‌پدیا بارگذاری شده‌است اما توضیحی داده نشده که چرا شرایط استفادهٔ منصفانه را داراست'
			},
			{
				label: 'ادعای نادرست در مورد استفادهٔ منصفانه (محس پ۷)',
				value: 'استفاده منطقی منصفانه مورد اختلاف',
				tooltip: 'تصویر یا پرونده‌ای که استدلال ارائه شده برای استفادهٔ منصفانه از آن به چالش کشیده شده‌است'
			},
			{
				label: 'استفادهٔ منصفانه قابل جایگزینی (محس پ۷)',
				value: 'استفاده منصفانه قابل جایگزین',
				tooltip: 'تصویر یا پرونده‌ای که شرط اول استفادهٔ منصفانه برایش صادق نیست ([[وپ:منصفانه#۱]])  یعنی موضوعی را نمایش می‌دهد که برایش پروندهٔ آزاد قابل تهیه است'
			},
			{
				label: 'بدون مدرک در مورد مجوز (محس پ۱۱)',
				value: 'بدون اجازه‌نامه',
				tooltip: 'تصویر یا پرونده‌ای که مستندات کافی برای آن‌که نشان دهد خالق اثر اجازهٔ استفاده از آن را داده‌است، موجود نیست'
			}
		]
	});
	form.append({
		type: 'div',
		label: 'محدودهٔ کار',
		name: 'work_area'
	});
	form.append({ type: 'submit' });

	var result = form.render();
	Window.setContent(result);
	Window.display();

	// We must init the parameters
	var evt = document.createEvent('Event');
	evt.initEvent('change', true, true);
	result.type[0].dispatchEvent(evt);
};

Twinkle.image.callback.choice = function twinkleimageCallbackChoose(event) {
	var value = event.target.values;
	var root = event.target.form;
	var work_area = new Morebits.quickForm.element({
		type: 'div',
		name: 'work_area'
	});

	switch (value) {
		case 'بدون منبع و بدون پروانه':
		case 'بدون منبع':
			work_area.append({
				type: 'checkbox',
				list: [
					{
						label: 'غیر آزاد',
						name: 'non_free',
						tooltip: 'پرونده با ادعای استفادهٔ منصفانه بارگذاری شده‌است'
					}
				]
			});
		/* falls through */
		case 'بدون پروانه':
			work_area.append({
				type: 'checkbox',
				list: [
					{
						name: 'derivative',
						label: 'تصویر اشتقاقی که منبع اثر اصلی آن ذکر نشده‌است',
						tooltip: 'پرونده از اشتقاق یک یا چند اثر دیگر حاصل شده‌است و منبع آن آثار مشخص نشده‌است'
					}
				]
			});
			break;
		case 'بدون اجازه‌نامه':
			work_area.append({
				type: 'input',
				name: 'source',
				label: 'منبع:'
			});
			break;
		case 'استفاده منطقی منصفانه مورد اختلاف':
			work_area.append({
				type: 'textarea',
				name: 'reason',
				label: 'اشکال:'
			});
			break;
		case 'استفاده منصفانه یتیم':
			work_area.append({
				type: 'input',
				name: 'replacement',
				label: 'جایگزین:',
				tooltip: 'پروندهٔ اختیاری برای جایگزینی با این پرونده. درج پیشوند «پرونده:» اختیاری است.'
			});
			break;
		case 'استفاده منصفانه قابل جایگزین':
			work_area.append({
				type: 'textarea',
				name: 'reason',
				label: 'دلیل:'
			});
			break;
		default:
			break;
	}

	root.replaceChild(work_area.render(), $(root).find('div[name="work_area"]')[0]);
};

Twinkle.image.callback.evaluate = function twinkleimageCallbackEvaluate(event) {

	var input = Morebits.quickForm.getInputData(event.target);
	if (input.replacement) {
		input.replacement = (new RegExp('^' + Morebits.namespaceRegex(6) + ':', 'i').test(input.replacement) ? '' : 'پرونده:') + input.replacement;
	}

	var csdcrit;
	switch (input.type) {
		case 'بدون منبع و بدون پروانه':
		case 'بدون منبع':
		case 'بدون پروانه':
			csdcrit = 'پ۴';
			break;
		case 'استفاده منصفانه یتیم':
			csdcrit = 'پ۵';
			break;
		case 'بدون استفاده منطقی منصفانه':
			csdcrit = 'پ۶';
			break;
		case 'استفاده منطقی منصفانه مورد اختلاف':
		case 'استفاده منصفانه قابل جایگزین':
			csdcrit = 'پ۷';
			break;
		case 'بدون اجازه‌نامه':
			csdcrit = 'پ۱۱';
			break;
		default:
			throw new Error('خطا در تابع Twinkle.image.callback.evaluate: معیار ناشناخته');
	}

	var lognomination = Twinkle.getPref('logSpeedyNominations') && Twinkle.getPref('noLogOnSpeedyNomination').indexOf(csdcrit.toLowerCase()) === -1;
	var templatename = input.derivative ? 'اا ' + input.type : input.type;

	var params = $.extend({
		templatename: templatename,
		normalized: csdcrit,
		lognomination: lognomination
	}, input);

	Morebits.simpleWindow.setButtonsEnabled(false);
	Morebits.status.init(event.target);

	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
	Morebits.wiki.actionCompleted.notice = 'برچسب زدن کامل شد';

	// Tagging image
	var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'در حال افزودن برچسب حذف به پرونده');
	wikipedia_page.setCallbackParameters(params);
	wikipedia_page.load(Twinkle.image.callbacks.taggingImage);

	// Notifying uploader
	if (input.notify) {
		wikipedia_page.lookupCreation(Twinkle.image.callbacks.userNotification);
	} else {
		// add to CSD log if desired
		if (lognomination) {
			Twinkle.image.callbacks.addToLog(params, null);
		}
		// No auto-notification, display what was going to be added.
		var noteData = document.createElement('pre');
		noteData.appendChild(document.createTextNode('{{جا:حپ-' + templatename + '-آگاه‌سازی|1=' + mw.config.get('wgTitle') + '}} ~~~~'));
		Morebits.status.info('آگاه‌سازی', [ 'این اطلاعات یا مشابه آن باید به بارگذار اصلی پرونده فرستاده شود:', document.createElement('br'), noteData ]);
	}
};

Twinkle.image.callbacks = {
	taggingImage: function(pageobj) {
		var text = pageobj.getPageText();
		var params = pageobj.getCallbackParameters();

		// remove "move to Commons" tag - deletion-tagged files cannot be moved to Commons
		text = text.replace(/\{\{(mtc|(انتقال |copy |move )?(to |به )?(commons|انبار|ویکی‌انبار)|move to wikimedia commons|copy to wikimedia commons)[^}]*\}\}/gi, '');

		var tag = '{{حپ-' + params.templatename + '|تاریخ={{جا:#زمان:j F Y}}';
		switch (params.type) {
			case 'بدون منبع و بدون پروانه':
			case 'بدون منبع':
				tag += params.non_free ? '|non-free=yes' : '';
				break;
			case 'بدون اجازه‌نامه':
				tag += params.source ? '|منبع=' + params.source : '';
				break;
			case 'استفاده منطقی منصفانه مورد اختلاف':
				tag += params.reason ? '|اهمیت=' + params.reason : '';
				break;
			case 'استفاده منصفانه یتیم':
				tag += params.replacement ? '|replacement=' + params.replacement : '';
				break;
			case 'استفاده منصفانه قابل جایگزین':
				tag += params.reason ? '|1=' + params.reason : '';
				break;
			default:
				break;  // doesn't matter
		}
		tag += '|help=off}}\n';
		
		/* additions for fawiki */
		var type_summary = {
			'بدون منبع': 'بدون منبع',
			'بدون پروانه': 'بدون پروانه',
			'بدون منبع و بدون پروانه': 'بدون منبع و بدون مجوز',
			'استفاده منصفانه یتیم': 'استفادهٔ منصفانهٔ یتیم',
			'بدون استفاده منطقی منصفانه': 'فاقد توضیح در مورد استفادهٔ منصفانه',
			'استفاده منطقی منصفانه مورد اختلاف': 'ادعای نادرست در مورد استفادهٔ منصفانه',
			'استفاده منصفانه قابل جایگزین': 'استفادهٔ منصفانهٔ قابل جایگزینی',
			'بدون اجازه‌نامه': 'بدون مدرک برای مجوز'
		};
		/* end additions for fawiki */
		
		pageobj.setPageText(tag + text);
		pageobj.setEditSummary('این پرونده طبق [[وپ:محس#' + params.normalized + '|محس ' + params.normalized + ']] نامزد حذف شده‌است (' + type_summary[params.type] + ').');
		pageobj.setChangeTags(Twinkle.changeTags);
		pageobj.setWatchlist(Twinkle.getPref('deliWatchPage'));
		pageobj.setCreateOption('nocreate');
		pageobj.save();
	},
	userNotification: function(pageobj) {
		var params = pageobj.getCallbackParameters();
		var initialContrib = pageobj.getCreator();

		// disallow warning yourself
		if (initialContrib === mw.config.get('wgUserName')) {
			pageobj.getStatusElement().warn('خودتان (' + initialContrib + ') این صفحه را ایجاد کرده‌اید؛ در حال چشم‌پوشی از آگاه‌سازی کاربر');
		} else {
			var usertalkpage = new Morebits.wiki.page('بحث کاربر:' + initialContrib, 'در حال آگاه‌سازی مشارکت‌کنندهٔ اولیه (' + initialContrib + ')');
			var notifytext = '\n{{جا:حپ-' + params.templatename + '-آگاه‌سازی|1=' + mw.config.get('wgTitle');
			if (params.type === 'بدون اجازه‌نامه') {
				notifytext += params.source ? '|منبع=' + params.source : '';
			}
			notifytext += '}} ~~~~';
			usertalkpage.setAppendText(notifytext);
			usertalkpage.setEditSummary('آگاه‌سازی: برچسب زدن برای حذف [[:' + Morebits.pageNameNorm + ']].');
			usertalkpage.setChangeTags(Twinkle.changeTags);
			usertalkpage.setCreateOption('recreate');
			usertalkpage.setWatchlist(Twinkle.getPref('deliWatchUser'));
			usertalkpage.setFollowRedirect(true, false);
			usertalkpage.append();
		}

		// add this nomination to the user's userspace log, if the user has enabled it
		if (params.lognomination) {
			Twinkle.image.callbacks.addToLog(params, initialContrib);
		}
	},
	addToLog: function(params, initialContrib) {
		var usl = new Morebits.userspaceLogger(Twinkle.getPref('speedyLogPageName'));
		var csdparamTrans = {
			'reason': 'دلیل',
			'replacement': 'جایگزین',
			'source': 'منبع'
		};
		usl.initialText =
				"این صفحه شامل سیاهه‌ای از تمام نامزدی‌های [[وپ:محس|حذف سریع]] انجام‌شده توسط این کاربر با استفاده از پودمان حذف سریع [[وپ:توینکل|توینکل]] است.\n\n" +
				'اگر دیگر مایل به نگهداری این سیاهه نیستید، می‌توانید از طریق [[ویکی‌پدیا:توینکل/ترجیحات|پنل ترجیحات]] آن را غیرفعال کنید و ' +
				'این صفحه را تحت معیار [[وپ:محس#ک۱|محس ک۱]] نامزد حذف کنید.' +
				((Morebits.userIsSysop || Morebits.userIsEliminator) ? '\n\nاین سیاهه، حذف‌های سریع کاملی که با توینکل انجام شده‌اند را رهگیری نمی‌کند.' : '');

		var formatParamLog = function(normalize, csdparam, input) {
			if (normalize === 'پ۵' && csdparam === 'replacement') {
				input = '[[:' + input + ']]';
			}
			return ' {' + csdparamTrans[csdparam] + normalize + ': ' + input + '}';
		};

		var extraInfo = '';

		// If a logged file is deleted but exists on commons, the wikilink will be blue, so provide a link to the log
		var fileLogLink = ' ([{{نشانی‌کامل:ویژه:سیاهه‌ها|page=' + mw.util.wikiUrlencode(mw.config.get('wgPageName')) + '}} سیاهه])';

		var appendText = '# [[:' + Morebits.pageNameNorm + ']]' + fileLogLink + ': حذف سریع با [[وپ:محس#' + params.normalized + '|محس ' + params.normalized + ']] ({{الگو|di-' + params.templatename + '}})';

		['reason', 'replacement', 'source'].forEach(function(item) {
			if (params[item]) {
				extraInfo += formatParamLog(params.normalized, item, params[item]);
				return false;
			}
		});

		if (extraInfo) {
			appendText += '؛ اطلاعات اضافی:' + extraInfo;
		}
		if (initialContrib) {
			appendText += '؛ {{userv|1=' + initialContrib + '}} آگاه شد';
		}
		appendText += ' ~~~~~\n';

		var editsummary = 'ثبت سیاههٔ نامزد کردن [[:' + Morebits.pageNameNorm + ']] برای حذف سریع.';

		usl.changeTags = Twinkle.changeTags;
		usl.log(appendText, editsummary);
	}
};

Twinkle.addInitCallback(Twinkle.image, 'image');
})(jQuery);


// </nowiki>