مدیاویکی:Gadget-twinkleimage.js: تفاوت میان نسخه‌ها

از ایران پدیا
پرش به ناوبری پرش به جستجو
جز (۱ نسخه واردشده)
جز (۱ نسخه واردشده)
 
(یک نسخهٔ میانیِ ایجادشده توسط همین کاربر نشان داده نشد)
خط ۲۷: خط ۲۷:
Window.setTitle( "پرونده برای حذف سریع تاریخ‌دار" );
Window.setTitle( "پرونده برای حذف سریع تاریخ‌دار" );
Window.setScriptName( "توینکل" );
Window.setScriptName( "توینکل" );
Window.addFooterLink( "سیاست حذف سریع", "وپ:محس" );
Window.addFooterLink( "سیاست حذف سریع", "اپ:محس" );
Window.addFooterLink( "راهنمای توینکل", "WP:TW/DOC#image" );
Window.addFooterLink( "راهنمای توینکل", "ip:TW/DOC#image" );


var form = new Morebits.quickForm( Twinkle.image.callback.evaluate );
var form = new Morebits.quickForm( Twinkle.image.callback.evaluate );
خط ۷۲: خط ۷۲:
label: 'استفادهٔ منصفانه یتیم (محس پ۵)',
label: 'استفادهٔ منصفانه یتیم (محس پ۵)',
value: 'استفاده منصفانه یتیم',
value: 'استفاده منصفانه یتیم',
tooltip: 'تصویر یا رسانه برای استفاده در ویکی‌پدیا بدون مجوز است و فقط تحت استفادهٔ منصفانه طبق ویکی‌پدیا:محتوای غیر آزاد مجاز است، ولی در هیچ نوشتاری استفاده نشده‌است'
tooltip: 'تصویر یا رسانه برای استفاده در ایران‌پدیا بدون مجوز است و فقط تحت استفادهٔ منصفانه طبق ایران‌پدیا:محتوای غیر آزاد مجاز است، ولی در هیچ نوشتاری استفاده نشده‌است'
},
},
{
{
label: 'دارای حق‌تکثیر و یتیم (محس پ۶)',
label: 'دارای حق‌تکثیر و یتیم (محس پ۶)',
value: 'بدون استفاده منطقی منصفانه',
value: 'بدون استفاده منطقی منصفانه',
tooltip: 'تصویر یا رسانه ادعا می‌شود تحت سیاست استفادهٔ منصفانه ویکی‌پدیا مورد استفاده قرار گیرد ولی هیچ توضیحی دربارهٔ اینکه چرا تحت آن سیاست مجاز است داده نشده‌است'
tooltip: 'تصویر یا رسانه ادعا می‌شود تحت سیاست استفادهٔ منصفانه ایران‌پدیا مورد استفاده قرار گیرد ولی هیچ توضیحی دربارهٔ اینکه چرا تحت آن سیاست مجاز است داده نشده‌است'
},
},
{
{
خط ۸۷: خط ۸۷:
label: 'استفادهٔ منصفانه‌ای که امکان جایگزین آزاد وجود دارد (محس پ۷)',
label: 'استفادهٔ منصفانه‌ای که امکان جایگزین آزاد وجود دارد (محس پ۷)',
value: 'استفاده منصفانه قابل جایگزین',
value: 'استفاده منصفانه قابل جایگزین',
tooltip: 'تصویر یا رسانه ممکن است نخستین معیار محتوای غیر آزاد ویکی‌پدیا ([[وپ:غیر آزاد#۱]]) را نداشته باشد؛ آن معیار شرح می‌دهد برای موضوعی ممکن است یک تصویر آزاد به طور منطقی یافت یا ایجاد شود که به اندازهٔ کافی همان اطلاعات را ارائه می‌کند'
tooltip: 'تصویر یا رسانه ممکن است نخستین معیار محتوای غیر آزاد ایران‌پدیا ([[اپ:غیر آزاد#۱]]) را نداشته باشد؛ آن معیار شرح می‌دهد برای موضوعی ممکن است یک تصویر آزاد به طور منطقی یافت یا ایجاد شود که به اندازهٔ کافی همان اطلاعات را ارائه می‌کند'
},
},
{
{
خط ۲۴۵: خط ۲۴۵:


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


// Notifying uploader
// Notifying uploader
if( notify ) {
if( notify ) {
wikipedia_page.lookupCreator(Twinkle.image.callbacks.userNotification);
iranpedia_page.lookupCreator(Twinkle.image.callbacks.userNotification);
} else {
} else {
// add to CSD log if desired
// add to CSD log if desired
خط ۲۹۷: خط ۲۹۷:


pageobj.setPageText(tag + text);
pageobj.setPageText(tag + text);
pageobj.setEditSummary("این پرونده بر پایهٔ [[وپ:محس#" + params.normalized + "|محس " + params.normalized + "]] (" + params.type + ") نامزد حذف سریع است." + Twinkle.getPref('summaryAd'));
pageobj.setEditSummary("این پرونده بر پایهٔ [[اپ:محس#" + params.normalized + "|محس " + params.normalized + "]] (" + params.type + ") نامزد حذف سریع است." + Twinkle.getPref('summaryAd'));
switch (Twinkle.getPref('deliWatchPage')) {
switch (Twinkle.getPref('deliWatchPage')) {
case 'yes':
case 'yes':

نسخهٔ کنونی تا ‏۲ دسامبر ۲۰۱۷، ساعت ۲۰:۴۵

//<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>