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

از ایران پدیا
پرش به ناوبری پرش به جستجو

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
//<nowiki>


(function($){


/*
 ****************************************
 *** twinkleimage.js: Image CSD module
 ****************************************
 * Mode of invocation:     Tab ("DI")
 * Active on:              File pages with a corresponding file which is local (not on Commons)
 * Config directives in:   TwinkleConfig
 */

Twinkle.image = function twinkleimage() {
	if (mw.config.get('wgNamespaceNumber') === 6 &&
			!document.getElementById("mw-sharedupload") &&
			document.getElementById("mw-imagepage-section-filehistory")) {

		Twinkle.addPortletLink(Twinkle.image.callback, "DI", "tw-di", "نامزدکردن پرونده برای حذف سریع به تأخیرافتاده");
	}
};

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

	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',
					name: 'non_free',
					list: [
						{
							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: 'جایگزین: '
				} );
			break;
		case 'استفاده منصفانه قابل جایگزین':
			work_area.append( {
					type: 'checkbox',
					name: 'old_image',
					list: [
						{
							label: 'تصویر قدیمی',
							tooltip: 'تصویر پیش از ۱۳ ژوئیه ۲۰۰۶ بارگذاری شده‌است'
						}
					]
				} );
			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, old_image;

	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 ) {
		replacement = event.target.replacement.value;
	}
	if( event.target.old_image ) {
		old_image = event.target.old_image.checked;
	}

	var csdcrit;
	switch( 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: unknown criterion" );
	}

	var lognomination = Twinkle.getPref('logSpeedyNominations') && Twinkle.getPref('noLogOnSpeedyNomination').indexOf(csdcrit.toLowerCase()) === -1;

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

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

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

	// Notifying uploader
	if( notify ) {
		iranpedia_page.lookupCreator(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:حپ-" + type + "-notice|1=" + mw.config.get('wgTitle') + "}} ~~~~" ) );
		Morebits.status.info( 'Notification', [ 'داده‌های روبرو/مشابه باید در بارگذارندهٔ اصلی ارسال شود:', 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.type == 'بدون منبع'? "جا:":"") + "حپ-" + params.type + "|date={{subst:#time: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 ? "|جایگزین=" + params.replacement : "";
				break;
			case 'استفاده منصفانه قابل جایگزین':
				tag += params.old_image ? "|نگاره قدیمی=yes" : "";
				break;
			default:
				break;  // doesn't matter
		}
		tag += "}}\n";

		pageobj.setPageText(tag + text);
		pageobj.setEditSummary("این پرونده بر پایهٔ [[اپ:محس#" + params.normalized + "|محس " + params.normalized + "]] (" + params.type + ") نامزد حذف سریع است." + Twinkle.getPref('summaryAd'));
		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 + ") این صفحه را ایجاد کردید؛ در حال لغوکردن اطلاع‌رسانی به کاربر");
		} else {
			var usertalkpage = new Morebits.wiki.page('بحث کاربر:' + initialContrib, "آگاهی‌دادن به نخستین مشارکت‌کننده (" + initialContrib + ")");
			var notifytext = "\n{{subst:حپ-" + params.type + "-notice|1=" + mw.config.get('wgTitle');
			if (params.type === 'بدون اجازه‌نامه') {
				notifytext += params.source ? "|منبع=" + params.source : "";
			}
			notifytext += "}} ~~~~";
			usertalkpage.setAppendText(notifytext);
			usertalkpage.setEditSummary("اطلاع‌رسانی: برچسب‌زدن برای حذف [[" + Morebits.pageNameNorm + "]]." + Twinkle.getPref('summaryAd'));
			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>