# MediaWiki:Gadget-twinkleimage-2020.js

From faraghaib
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.

    // <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.wiki.isPageRedirect()) {
    		Twinkle.addPortletLink(Twinkle.image.callback, 'تصاویر', 'tw-di', 'نامزد کردن تصاویر برای حذف سریع با تأخیر'); // localized
    	}
    };

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

    	var form = new Morebits.quickForm(Twinkle.image.callback.evaluate);
    	form.append({
    		type: 'checkbox',
    		list: [
    			{
    				label: 'آگاه‌سازی بارگذار اصلی',
    				value: 'notify',
    				name: 'notify',
    				tooltip: "اگر می‌خواهید چندین تصویری که یک کاربر بارگذاری کرده را نامزد کنید، این گزینه را غیرفعال کنید تا صفحهٔ بحث‌شان بر اثر تعدد پیام‌ها شلوغ نشود.", // localized
    				checked: Twinkle.getPref('notifyUserOnDeli')
    			}
    		]
    	}
    	);
    	var field = form.append({
    		type: 'field',
    		label: 'نوع کنش مورد نیاز' // localized
    	});
    	field.append({
    		type: 'radio',
    		name: 'type',
    		event: Twinkle.image.callback.choice,
    		list: [
    			{
    				label: 'بدون منبع (محس پ۴)', // localized
    				value: 'no source',
    				checked: true,
    				tooltip: 'تصویر یا پروندهٔ بدون منبع' // localized
    			},
    			{
    				label: 'بدون مجوز (محس پ۴)', // localized
    				value: 'no license',
    				tooltip: 'تصویر یا پرونده فاقد اطلاعات در مورد وضعیت حق تکثیر' // localized
    			},
    			{
    				label: 'بدون منبع و بدون مجوز (محس پ۴)', // localized
    				value: 'no source no license',
    				tooltip: 'تصویر یا پرونده‌ای که نه اطلاعاتی راجع به منبع دارد و نه راجع به وضعیت حق تکثیر' // localized
    			},
    			{
    				label: 'استفادهٔ منصفانهٔ یتیم (محس پ۵)', // localized
    				value: 'orphaned fair use',
    				tooltip: 'تصویر یا پرونده‌ای که برای استفادهٔ منصفانه در ویکی‌پدیا بارگذاری شده‌است اما در هیچ مقاله‌ای استفاده نمی‌شود' // localized
    			},
    			{
    				label: 'فاقد توضیح در مورد استفادهٔ منصفانه (محس پ۶)', // localized
    				value: 'no fair use rationale',
    				tooltip: 'تصویر یا پرونده برای استفادهٔ منصفانه در ویکی‌پدیا بارگذاری شده‌است اما توضیحی داده نشده که چرا شرایط استفادهٔ منصفانه را داراست' // localized
    			},
    			{
    				label: 'ادعای نادرست در مورد استفادهٔ منصفانه (محس پ۷)', // localized
    				value: 'disputed fair use rationale',
    				tooltip: 'تصویر یا پرونده‌ای که استدلال ارائه شده برای استفادهٔ منصفانه از آن به چالش کشیده شده‌است' // localized
    			},
    			{
    				label: 'استفادهٔ منصفانه قابل جایگزینی (محس پ۷)', // localized
    				value: 'replaceable fair use',
    				tooltip: 'تصویر یا پرونده‌ای که شرط اول استفادهٔ منصفانه برایش صادق نیست، یعنی موضوعی را نمایش می‌دهد که برایش پروندهٔ آزاد قابل تهیه است' // localized
    			},
    			{
    				label: 'بدون مدرک در مورد مجوز (محس پ۱۱)', // localized
    				value: 'no permission',
    				tooltip: 'تصویر یا پرونده‌ای که مستندات کافی برای آن‌که نشان دهد خالق اثر اجازهٔ استفاده از آن را داده‌است، موجود نیست' // localized
    			}
    		]
    	});
    	form.append({
    		type: 'div',
    		label: 'Work area',
    		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 'no source no license':
    		case 'no source':
    			work_area.append({
    				type: 'checkbox',
    				name: 'non_free',
    				list: [
    					{
    						label: 'غیر آزاد', // localized
    						tooltip: 'پرونده با ادعای استفادهٔ منصفانه بارگذاری شده‌است' // localized
    					}
    				]
    			});
    		/* falls through */
    		case 'no license':
    			work_area.append({
    				type: 'checkbox',
    				name: 'derivative',
    				list: [
    					{
    						label: 'تصویر اشتقاقی که منبع اثر اصلی برای ذکر نشده‌است', // localized
    						tooltip: 'پرونده از اشتقاق یک یا چند اثر دیگر حاصل شده‌است و منبع آن آثار مشخص نشده‌است' // localized
    					}
    				]
    			});
    			break;
    		case 'no permission':
    			work_area.append({
    				type: 'input',
    				name: 'source',
    				label: 'منبع: ' // localized
    			});
    			break;
    		case 'disputed fair use rationale':
    			work_area.append({
    				type: 'textarea',
    				name: 'reason',
    				label: 'اشکال: ' // localized
    			});
    			break;
    		case 'orphaned fair use':
    			work_area.append({
    				type: 'input',
    				name: 'replacement',
    				label: 'جایگزین: ', // localized
    				tooltip: 'Optional file that replaces this one.  The "File:" prefix is optional.'
    			});
    			break;
    		case 'replaceable fair use':
    			work_area.append({
    				type: 'textarea',
    				name: 'reason',
    				label: 'دلیل: ' // localized
    			});
    			break;
    		default:
    			break;
    	}

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

    Twinkle.image.callback.evaluate = function twinkleimageCallbackEvaluate(event) {
    	var type, non_free, source, reason, replacement, derivative;

    	var notify = event.target.notify.checked;
    	var types = event.target.type;
    	for (var i = 0; i < types.length; ++i) {
    		if (types[i].checked) {
    			type = types[i].values;
    			break;
    		}
    	}
    	if (event.target.non_free) {
    		non_free = event.target.non_free.checked;
    	}
    	if (event.target.source) {
    		source = event.target.source.value;
    	}
    	if (event.target.reason) {
    		reason = event.target.reason.value;
    	}
    	if (event.target.replacement && event.target.replacement.value.trim()) {
    		replacement = event.target.replacement.value;
    		replacement = /^\s*(Image|File):/i.test(replacement) ? replacement : 'File:' + replacement;
    	}
    	if (event.target.derivative) {
    		derivative = event.target.derivative.checked;
    	}

    	var csdcrit;
    	switch (type) {
    		case 'no source no license':
    		case 'no source':
    		case 'no license':
    			csdcrit = 'پ۴'; // localized
    			break;
    		case 'orphaned fair use':
    			csdcrit = 'پ۵'; // localized
    			break;
    		case 'no fair use rationale':
    			csdcrit = 'پ۶'; // localized
    			break;
    		case 'disputed fair use rationale':
    		case 'replaceable fair use':
    			csdcrit = 'پ۷'; // localized
    			break;
    		case 'no permission':
    			csdcrit = 'پ۱۱'; // localized
    			break;
    		default:
    			throw new Error('Twinkle.image.callback.evaluate: unknown criterion');
    	}

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

    	var params = {
    		'type': type,
    		'templatename': templatename,
    		'normalized': csdcrit,
    		'non_free': non_free,
    		'source': source,
    		'reason': reason,
    		'replacement': replacement,
    		'lognomination': lognomination
    	};
    	Morebits.simpleWindow.setButtonsEnabled(false);
    	Morebits.status.init(event.target);

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

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

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

    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 = '{{di-' + params.templatename + '|date={{subst:#time:j F Y||en}}';
    		switch (params.type) {
    			case 'no source no license':
    			case 'no source':
    				tag += params.non_free ? '|non-free=yes' : '';
    				break;
    			case 'no permission':
    				tag += params.source ? '|source=' + params.source : '';
    				break;
    			case 'disputed fair use rationale':
    				tag += params.reason ? '|concern=' + params.reason : '';
    				break;
    			case 'orphaned fair use':
    				tag += params.replacement ? '|replacement=' + params.replacement : '';
    				break;
    			case 'replaceable fair use':
    				tag += params.reason ? '|1=' + params.reason : '';
    				break;
    			default:
    				break;  // doesn't matter
    		}
    		tag += '|help=off}}\n';

    		/* additions for fawiki */
    		var type_summary = {
    			'no source': 'بدون منبع',
    			'no license': 'بدون مجوز',
    			'no source no license': 'بدون منبع و بدون مجوز',
    			'orphaned fair use': 'استفادهٔ منصفانهٔ یتیم',
    			'no fair use rationale': 'فاقد توضیح در مورد استفادهٔ منصفانه',
    			'disputed fair use rationale': 'ادعای نادرست در مورد استفادهٔ منصفانه',
    			'replaceable fair use': 'استفادهٔ منصفانهٔ قابل جایگزینی',
    			'no permission': 'بدون مدرک برای مجوز'
    		}
    		/* end additions for fawiki */

    		pageobj.setPageText(tag + text);
    		pageobj.setEditSummary('این پرونده طبق [[وپ:محس#' + params.normalized + '|محس ' + params.normalized + ']] نامزد حذف شده‌است (' + type_summary[params.type] + ').' + Twinkle.getPref('summaryAd')); // localized
    		switch (Twinkle.getPref('deliWatchPage')) {
    			case 'yes':
    				pageobj.setWatchlist(true);
    				break;
    			case 'no':
    				pageobj.setWatchlistFromPreferences(false);
    				break;
    			default:
    				pageobj.setWatchlistFromPreferences(true);
    				break;
    		}
    		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 + ') ایجاد کرده‌اید؛ از آگاه‌سازی صرف نظر شد'); // localized
    		} else {
    			var usertalkpage = new Morebits.wiki.page('بحث کاربر:' + initialContrib, 'آگاه‌سازی بارگذار اصلی (' + initialContrib + ')'); // localized
    			var notifytext = '\n{{subst:di-' + params.templatename + '-notice|1=' + mw.config.get('wgTitle');
    			if (params.type === 'no permission') {
    				notifytext += params.source ? '|source=' + params.source : '';
    			}
    			notifytext += '}} ~~~~';
    			usertalkpage.setAppendText(notifytext);
    			usertalkpage.setEditSummary('آگاه‌سازی: برچسب زدن برای حذف [[:' + Morebits.pageNameNorm + ']].' + Twinkle.getPref('summaryAd')); // localized
    			usertalkpage.setCreateOption('recreate');
    			switch (Twinkle.getPref('deliWatchUser')) {
    				case 'yes':
    					usertalkpage.setWatchlist(true);
    					break;
    				case 'no':
    					usertalkpage.setWatchlistFromPreferences(false);
    					break;
    				default:
    					usertalkpage.setWatchlistFromPreferences(true);
    					break;
    			}
    			usertalkpage.setFollowRedirect(true);
    			usertalkpage.append();
    		}

    		// add this nomination to the user's userspace log, if the user has enabled it
    		if (params.lognomination) {
    			params.fromDI = true;
    			Twinkle.speedy.callbacks.user.addToLog(params, initialContrib);
    		}
    	}
    };
    })(jQuery);

    // </nowiki>

Retrieved from "https://en.faraghaib.ir/w/index.php?title=MediaWiki:Gadget-twinkleimage-2020.js&oldid=460"