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

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

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

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
//<nowiki>
 
 
(function($){
 
 
/*
 ****************************************
 *** twinklespeedy.js: CSD module
 ****************************************
 * Mode of invocation:     Tab ("محس")
 * Active on:              Non-special, existing pages
 * Config directives in:   TwinkleConfig
 *
 * NOTE FOR DEVELOPERS:
 *   If adding a new criterion, add it to the appropriate places at the top of
 *   twinkleconfig.js.  Also check out the default values of the CSD preferences
 *   in twinkle.js, and add your new criterion to those if you think it would be
 *   good.
 */
 
Twinkle.speedy = function twinklespeedy() {
	// Disable on:
	// * special pages
	// * non-existent pages
	if (mw.config.get('wgNamespaceNumber') < 0 || !mw.config.get('wgArticleId')) {
		return;
	}
 
	Twinkle.addPortletLink( Twinkle.speedy.callback, "محس", "tw-csd", Morebits.userIsInGroup('sysop') ? "حذف صفحه مطابق اپ:محس" : "درخواست حذف مطابق اپ:محس" );
};
 
// This function is run when the CSD tab/header link is clicked
Twinkle.speedy.callback = function twinklespeedyCallback() {
	Twinkle.speedy.initDialog(Morebits.userIsInGroup( 'sysop' ) ? Twinkle.speedy.callback.evaluateSysop : Twinkle.speedy.callback.evaluateUser, true);
};
 
// Used by unlink feature
Twinkle.speedy.dialog = null;
 
// The speedy criteria list can be in one of several modes
Twinkle.speedy.mode = {
	sysopSubmit: 1,  // radio buttons, no subgroups, submit when "ثبت" button is clicked
	sysopRadioClick: 2,  // radio buttons, no subgroups, submit when a radio button is clicked
	userMultipleSubmit: 3,  // check boxes, subgroups, "ثبت" button already pressent
	userMultipleRadioClick: 4,  // check boxes, subgroups, need to add a "ثبت" button
	userSingleSubmit: 5,  // radio buttons, subgroups, submit when "ثبت" button is clicked
	userSingleRadioClick: 6,  // radio buttons, subgroups, submit when a radio button is clicked
 
	// are we in "delete page" mode?
	// (sysops can access both "delete page" [sysop] and "tag page only" [user] modes)
	isSysop: function twinklespeedyModeIsSysop(mode) {
		return mode === Twinkle.speedy.mode.sysopSubmit ||
			mode === Twinkle.speedy.mode.sysopRadioClick;
	},
	// do we have a "ثبت" button once the form is created?
	hasSubmitButton: function twinklespeedyModeHasSubmitButton(mode) {
		return mode === Twinkle.speedy.mode.sysopSubmit ||
			mode === Twinkle.speedy.mode.userMultipleSubmit ||
			mode === Twinkle.speedy.mode.userMultipleRadioClick ||
			mode === Twinkle.speedy.mode.userSingleSubmit;
	},
	// is db-multiple the outcome here?
	isMultiple: function twinklespeedyModeIsMultiple(mode) {
		return mode === Twinkle.speedy.mode.userMultipleSubmit ||
			mode === Twinkle.speedy.mode.userMultipleRadioClick;
	},
	// do we want subgroups? (if not we have to use prompt())
	wantSubgroups: function twinklespeedyModeWantSubgroups(mode) {
		return !Twinkle.speedy.mode.isSysop(mode);
	}
};
 
// Prepares the speedy deletion dialog and displays it
Twinkle.speedy.initDialog = function twinklespeedyInitDialog(callbackfunc) {
	var dialog;
	Twinkle.speedy.dialog = new Morebits.simpleWindow( Twinkle.getPref('speedyWindowWidth'), Twinkle.getPref('speedyWindowHeight') );
	dialog = Twinkle.speedy.dialog;
	dialog.setTitle( "معیار حذف سریع را برگزینید" );
	dialog.setScriptName( "توینکل" );
	dialog.addFooterLink( "سیاست حذف سریع", "اپ:محس" );
	dialog.addFooterLink( "راهنمای توینکل", "اپ:توحس" );
 
	var form = new Morebits.quickForm( callbackfunc, (Twinkle.getPref('speedySelectionStyle') === 'radioClick' ? 'change' : null) );
	if( Morebits.userIsInGroup( 'sysop' ) ) {
		form.append( {
				type: 'checkbox',
				list: [
					{
						label: 'فقط برچسب بزن، حذف نکن',
						value: 'tag_only',
						name: 'tag_only',
						tooltip: 'اگر قصد دارید به جای حذف، صفحه را برچسب حذف بزنید',
						checked : Twinkle.getPref('deleteSysopDefaultToTag'),
						event: function( event ) {
							var cForm = event.target.form;
							var cChecked = event.target.checked;
							// enable/disable talk page checkbox
							if (cForm.talkpage) {
								cForm.talkpage.disabled = cChecked;
								cForm.talkpage.checked = !cChecked && Twinkle.getPref('deleteTalkPageOnDelete');
							}
							// enable/disable redirects checkbox
							cForm.redirects.disabled = cChecked;
							cForm.redirects.checked = !cChecked;
 
							// enable/disable notify checkbox
							cForm.notify.disabled = !cChecked;
							cForm.notify.checked = cChecked;
							// enable/disable multiple
							cForm.multiple.disabled = !cChecked;
							cForm.multiple.checked = false;
 
							Twinkle.speedy.callback.modeChanged(cForm);
 
							event.stopPropagation();
						}
					}
				]
			} );
		form.append( { type: 'header', label: 'بخش مرتبط با حذف' } );
		if (mw.config.get('wgNamespaceNumber') % 2 === 0 && (mw.config.get('wgNamespaceNumber') !== 2 || (/\//).test(mw.config.get('wgTitle')))) {  // hide option for user pages, to avoid accidentally deleting user talk page
			form.append( {
				type: 'checkbox',
				list: [
					{
						label: 'حذف صفحه بحث',
						value: 'talkpage',
						name: 'talkpage',
						tooltip: "این گزینه صفحهٔ بحثِ صفحه را همچنین حذف می‌کند. اگر معیار پ۸ (انتقال‌یافته به انبار) را انتخاب کنید، این گزینه نادیده گرفته می‌شود و صفحهٔ بحث حذف *نمی‌شود*.",
						checked: Twinkle.getPref('deleteTalkPageOnDelete'),
						disabled: Twinkle.getPref('deleteSysopDefaultToTag'),
						event: function( event ) {
							event.stopPropagation();
						}
					}
				]
			} );
		}
		form.append( {
				type: 'checkbox',
				list: [
					{
						label: 'حذف همه تغییرمسیرها',
						value: 'redirects',
						name: 'redirects',
						tooltip: "این گزینه همهٔ تغییرمسیرها را حذف می‌کند. از این گزینه برای حذف‌های رویه‌ای (برای نمونه: انتقال/ادغام) اجتناب کنید.",
						checked: Twinkle.getPref('deleteRedirectsOnDelete'),
						disabled: Twinkle.getPref('deleteSysopDefaultToTag'),
						event: function( event ) {
							event.stopPropagation();
						}
					}
				]
			} );
		form.append( { type: 'header', label: 'گزینه‌های مرتبط با برچسب' } );
	}
 
	form.append( {
			type: 'checkbox',
			list: [
				{
					label: 'در صورت امکان سازندهٔ صفحه مطلع شود',
					value: 'notify',
					name: 'notify',
					tooltip: "اگر آگاه‌سازی را در ترجیحات توینکل خود برای معیاری که انتخاب می‌کنید فعال کرده باشید " +
						"و این گزینه را انتخاب کنید، یک الگوی آگاه‌سازی در صفحهٔ بحث سازنده قرار خواهد گرفت. همچنین به سازنده خوشامدگویی می‌شود.",
					checked: !Morebits.userIsInGroup( 'sysop' ) || Twinkle.getPref('deleteSysopDefaultToTag'),
					disabled: Morebits.userIsInGroup( 'sysop' ) && !Twinkle.getPref('deleteSysopDefaultToTag'),
					event: function( event ) {
						event.stopPropagation();
					}
				}
			]
		} );
	form.append( {
			type: 'checkbox',
			list: [
				{
					label: 'برچسب‌زنی با چند معیار',
					value: 'multiple',
					name: 'multiple',
					tooltip: "زمانی که انتخاب شود، می‌توانید چندین معیار برای اعمال‌کردن روی این صفحه انتخاب کنید. برای نمونه، ع۱۱ و م۷ ترکیب رایج برای نوشتارها است.",
					disabled: Morebits.userIsInGroup( 'sysop' ) && !Twinkle.getPref('deleteSysopDefaultToTag'),
					event: function( event ) {
						Twinkle.speedy.callback.modeChanged( event.target.form );
						event.stopPropagation();
					}
				}
			]
		} );
 
	form.append( {
			type: 'div',
			name: 'work_area',
			label: 'مقداردهی اولیه به پودمان حذف سریع ناموفق بود. لطفاً دوباره تلاش کنید یا به توسعه‌دهندگان توینکل دربارهٔ این مشکل اطلاع دهید.'
		} );
 
	if( Twinkle.getPref( 'speedySelectionStyle' ) !== 'radioClick' ) {
		form.append( { type: 'submit' } );
	}
 
	var result = form.render();
	dialog.setContent( result );
	dialog.display();
 
	Twinkle.speedy.callback.modeChanged( result );
};
 
Twinkle.speedy.callback.modeChanged = function twinklespeedyCallbackModeChanged(form) {
	var namespace = mw.config.get('wgNamespaceNumber');
 
	// first figure out what mode we're in
	var mode = Twinkle.speedy.mode.userSingleSubmit;
	if (form.tag_only && !form.tag_only.checked) {
		mode = Twinkle.speedy.mode.sysopSubmit;
	} else {
		if (form.multiple.checked) {
			mode = Twinkle.speedy.mode.userMultipleSubmit;
		} else {
			mode = Twinkle.speedy.mode.userSingleSubmit;
		}
	}
	if (Twinkle.getPref('speedySelectionStyle') === 'radioClick') {
		mode++;
	}
 
	var work_area = new Morebits.quickForm.element( {
			type: 'div',
			name: 'work_area'
		} );
 
	if (mode === Twinkle.speedy.mode.userMultipleRadioClick) {
		work_area.append( {
				type: 'div',
				label: 'زمانی که انتخاب معیارها پایان یافت، کلیک کنید:'
			} );
		work_area.append( {
				type: 'button',
				name: 'submit-multiple',
				label: 'ثبت درخواست',
				event: function( event ) {
					Twinkle.speedy.callback.evaluateUser( event );
					event.stopPropagation();
				}
			} );
	}
 
	var radioOrCheckbox = (Twinkle.speedy.mode.isMultiple(mode) ? 'checkbox' : 'radio');
 
	if (namespace % 2 === 1 && namespace !== 3) {
		// show db-talk on talk pages, but not user talk pages
		work_area.append( { type: 'header', label: 'صفحه‌های بحث' } );
		work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.talkList, mode) } );
	}
 
	switch (namespace) {
		case 0:  // article
		case 1:  // talk
			work_area.append( { type: 'header', label: 'مقاله‌ها' } );
			work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.articleList, mode) } );
			break;
 
		case 2:  // user
		case 3:  // user talk
			work_area.append( { type: 'header', label: 'صفحه‌های کاربری' } );
			work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.userList, mode) } );
			break;
 
		case 6:  // file
		case 7:  // file talk
			work_area.append( { type: 'header', label: 'پرونده‌ها' } );
			work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.fileList, mode) } );
			if (!Twinkle.speedy.mode.isSysop(mode)) {
				work_area.append( { type: 'div', label: 'برچسب‌زدن محس پ۴ (بدون پروانه)، پ۵ (استفادهٔ منصفانه یتیم)، پ۶ (بدون استفادهٔ منطقی منصفانه) و پ۱۱ (بدون اجازه‌نامه) می‌تواند با استفاده از باریکهٔ «حپ» توینکل انجام شود.' } );
			}
			break;
 
		case 10:  // template
		case 11:  // template talk
			work_area.append( { type: 'header', label: 'الگوها' } );
			work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.templateList, mode) } );
			break;
 
		case 14:  // category
		case 15:  // category talk
			work_area.append( { type: 'header', label: 'رده‌ها' } );
			work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.categoryList, mode) } );
			break;
 
		case 100:  // portal
		case 101:  // portal talk
			work_area.append( { type: 'header', label: 'درگاه‌ها' } );
			work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.portalList, mode) } );
			break;
 
		default:
			break;
	}
 
	work_area.append( { type: 'header', label: 'معیارهای عمومی' } );
	work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.generalList, mode) });
 
	work_area.append( { type: 'header', label: 'تغییرمسیرها' } );
	work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.redirectList, mode) } );
 
	var old_area = Morebits.quickForm.getElements(form, "work_area")[0];
	form.replaceChild(work_area.render(), old_area);
};
 
Twinkle.speedy.generateCsdList = function twinklespeedyGenerateCsdList(list, mode) {
	// mode switches
	var isSysop = Twinkle.speedy.mode.isSysop(mode);
	var multiple = Twinkle.speedy.mode.isMultiple(mode);
	var wantSubgroups = Twinkle.speedy.mode.wantSubgroups(mode);
	var hasSubmitButton = Twinkle.speedy.mode.hasSubmitButton(mode);
 
	var openSubgroupHandler = function(e) { 
		$(e.target.form).find('input').prop('disabled', true);
		$(e.target.form).children().css('color', 'gray');
		$(e.target).parent().css('color', 'black').find('input').prop('disabled', false);
		$(e.target).parent().find('input:text')[0].focus();
		e.stopPropagation();
	};
	var submitSubgroupHandler = function(e) {
		Twinkle.speedy.callback.evaluateUser(e);
		e.stopPropagation();
	};
 
	return $.map(list, function(critElement) {
		var criterion = $.extend({}, critElement);
 
		if (!wantSubgroups) {
			criterion.subgroup = null;
		}
 
		if (multiple) {
			if (criterion.hideWhenMultiple) {
				return null;
			}
			if (criterion.hideSubgroupWhenMultiple) {
				criterion.subgroup = null;
			}
		} else {
			if (criterion.hideWhenSingle) {
				return null;
			}
			if (criterion.hideSubgroupWhenSingle) {
				criterion.subgroup = null;
			}
		}
 
		if (isSysop) {
			if (criterion.hideWhenSysop) {
				return null;
			}
			if (criterion.hideSubgroupWhenSysop) {
				criterion.subgroup = null;
			}
		} else {
			if (criterion.hideWhenUser) {
				return null;
			}
			if (criterion.hideSubgroupWhenUser) {
				criterion.subgroup = null;
			}
		}
 
		if (criterion.subgroup && !hasSubmitButton) {
			if ($.isArray(criterion.subgroup)) {
				criterion.subgroup.push({ 
					type: 'button',
					name: 'submit',
					label: 'ثبت درخواست',
					event: submitSubgroupHandler
				});
			} else {
				criterion.subgroup = [
					criterion.subgroup,
					{
						type: 'button',
						name: 'submit',  // ends up being called "csd.submit" so this is OK
						label: 'ثبت درخواست',
						event: submitSubgroupHandler
					}
				];
			}
			criterion.event = openSubgroupHandler;
		}
 
		return criterion;
	});
};
 
Twinkle.speedy.talkList = [
	{
		label: 'ع۸: بحث یتیم',
		value: 'talk',
		tooltip: 'این گزینه هر صفحه‌ای را که برای پروژه مفید باشد مستثنی می‌کند - به ویژه صفحه‌های بحث کاربری، بایگانی‌های صفحهٔ بحث و صفحه‌های بحثِ پرونده‌هایی که در انبار ویکی‌مدیا وجود دارند.'
	}
];
 
Twinkle.speedy.fileList = [
	{
		label: 'پ۱ : موجود در ویکی‌انبار یا ایران‌پدیا فارسی',
		value: 'redundantimage',
		tooltip: 'هر پرونده‌ای که نسخهٔ زائد در همان قالب و با همان وضوح یا وضوح کمتر از چیز دیگری در ایران‌پدیا باشد. همچنین، دیگر رسانه‌ها که نسخهٔ زائد با همان قالب و با همان کیفیت یا کیفیت کمتر هستند. این کار روی پرونده‌های تکراری انبار ویکی‌مدیا به دلیل مشکلات پروانه‌ای اعمال نمی‌شود؛ این‌ها باید با {{جا:موجود در انبار تاریخ‌دار|Image:newname.ext}} یا {{جا:موجود در انبار تاریخ‌دار}} برچسب بخورند',
		subgroup: {
			name: 'redundantimage_filename',
			type: 'input',
			label: 'پرونده‌ای که این برایش زائد است: ',
			tooltip: 'پیشوند «پرونده:» می‌تواند نوشته نشود.'
		}
	},
	{
		label: 'پ۲: پروندهٔ خالی یا خراب',
		value: 'noimage',
		tooltip: 'پیش از حذف این نوع پرونده، بررسی کنید که موتور مدیاویکی نتواند با پیش‌نمایش یک تصویر بندانگشتی تغییراندازه داده‌شده از آن پرونده آن را بخواند. این همچنین شامل صفحه‌های توضیح پروندهٔ خالی (مانند: بدون محتوا) برای پرونده‌های انبار می‌شود.'
	},
	{
		label: 'پ۲ : توضیحات نامربوط برای تصویری که در ویکی‌انبار بارگذاری شده‌است',
		value: 'fpcfail',
		tooltip: 'یک تصویر میزبانی‌شده در انبار، ولی همراه برچسب‌ها یا اطلاعاتی در صفحهٔ توضیحات ایران‌پدیای فارسی خود که دیگر نیاز نیستند. (برای نمونه: یک تصویر ناموفق در نامزد برجسته‌بودن.)',
		hideWhenMultiple: true
	},
	{
		label: 'پ۳ : مجوز نادرست',
		value: 'noncom',
		tooltip: 'پرونده‌های دارای پروانهٔ «برای استفادهٔ غیرتجاری فقط»، «استفادهٔ غیراشتقاقی» یا «استفاده همراه اجازه‌نامه» که در روز ۱۹ مه ۲۰۰۵ یا پس از آن بارگذاری شده‌اند، به جز جایی که نشان داده‌اند با استانداردهای محدود استفاده از محتوای غیر آزاد پیروی می‌کنند. این شامل پرونده‌های دارای پروانه تحت یک «پروانهٔ غیرتجاری کریتیو کامنز» می‌شود. چنین پرونده‌های بارگذاری‌شده پیش از ۱۹ مه ۲۰۰۵ می‌توانند به سرعت حذف شوند اگر در هیچ نوشتاری استفاده نشده‌اند.'
	},
	{
		label: 'پ۴: کمبود اطلاعات در مورد مجوز',
		value: 'unksource',
		tooltip: 'پرونده‌های در ردهٔ «تصویرهای با منبع نامعلوم»، «تصویرهای با وضعیت حق تکثیر نامشخص» یا «تصویرهای بدون برچسب حق تکثیر» به واسطهٔ الگویی که آنها را در آن رده برای بیش از هفت روز، صرف نظر از زمان بارگذاری قرار می‌دهد برچسب خورده‌اند. توجه کنید: کاربران بعضی وقت‌ها منبع‌شان را در خلاصهٔ بارگذاری مشخص می‌کنند؛ بنابراین، مطمئن شوید که شرایط پرونده را بررسی می‌کنید.',
		hideWhenUser: true
	},
	{
		label: 'پ۵: پروندهٔ دارای حق تکثیر ناآزاد استفاده‌نشده',
		value: 'unfree',
		tooltip: 'Files that are not under a free license or in the public domain that are not used in any article and that have been tagged with a template that places them in a dated subcategory of Category:Orphaned fairuse files for more than seven days. Reasonable exceptions may be made for file uploaded for an upcoming article. Use the "Orphaned fair use" option in Twinkle\'s DI module to tag files for forthcoming deletion.',
		hideWhenUser: true
	},
	{
		label: 'پ۶: فاقد توضیح برای استفادهٔ منصفانه',
		value: 'norat',
		tooltip: 'هر پرونده‌ای بدون استفادهٔ منطقی منصفانه ممکن است هفت روز پس از بارگذاری حذف شود. Boilerplate fair use templates do not constitute a fair use rationale.  Files uploaded before 2006-05-04 should not be deleted immediately; instead, the uploader should be notified that a fair-use rationale is needed.  Files uploaded after 2006-05-04 can be tagged using the "No fair use rationale" option in Twinkle\'s DI module. Such files can be found in the dated subcategories of Category:Files with no fair use rationale.',
		hideWhenUser: true
	},
	{
		label: 'پ۷: برچسب استفادهٔ منصفانهٔ مشخصاً نادرست',
		value: 'badfairuse',  // same as below
		tooltip: 'این تنها برای پرونده‌هایی است که به روشنی همراه برچسب استفادهٔ منصفانه نامعتبر هستند، مانند برچسب {{نگاره نماد}} در تصویری از نماد خوش‌شانسی. برای مواردی که یک مدت انتظار لازم است (تصاویر قابل جایگزین یا دلایل مورد اختلاف)، از باریکهٔ حپ توینکل استفاده کنید.',
		subgroup: {
			name: 'badfairuse_reason',
			type: 'input',
			label: 'توضیح اختیاری: ',
			size: 60
		}
	},
	{
		label: 'پ۷: استفاده از تصویر تجاری با عنوان استفادهٔ منصفانه که موضوع نقد و بررسی قرار نگرفته است',
		value: 'badfairuse',  // same as above
		tooltip: 'تصویرهای غیرآزاد یا رسانه‌هایی از یک منبع تجاری (مانند: آسوشیتد پرس و گتی)، جایی که خود پرونده موضوع شرح منشأ نیست، یک ادعای استفادهٔ منصفانه نامعتبر در نظر گرفته می‌شوند و در شرایط سخت اپ:غیر آزاد ناموفق هستند.',
		subgroup: {
			name: 'badfairuse_reason',
			type: 'input',
			label: 'توضیح اختیاری: ',
			size: 60
		},
		hideWhenMultiple: true
	},
	{
		label: 'پ۸: پرونده‌ای که با کیفیت بهتر یا مساوی در ویکی‌انبار موجود است',
		value: 'nowcommons',
		tooltip: 'Provided the following conditions are met: 1: The file format of both images is the same. 2: The file\'s license and source status is beyond reasonable doubt, and the license is undoubtedly accepted at Commons. 3: All information on the file description page is present on the Commons file description page. That includes the complete upload history with links to the uploader\'s local user pages. 4: The file is not protected, and the file description page does not contain a request not to move it to Commons. 5: If the file is available on Commons under a different name than locally, all local references to the file must be updated to point to the title used at Commons. 6: For {{c-uploaded}} files: They may be speedily deleted as soon as they are off the Main Page',
		subgroup: {
			name: 'nowcommons_filename',
			type: 'input',
			label: 'نام پرونده در انبار: ',
			value: Morebits.pageNameNorm,
			tooltip: 'اگر نام پرونده با آنچه در انبار است، مشابه باشد، این بخش را می‌توانید خالی بگذارید. پیشوند "پرونده:" اختیاری است.'
		},
		hideWhenMultiple: true
	},
	{
		label: 'پ۹: نقض آشکار حق نشر',
		value: 'imgcopyvio',
		tooltip: 'The file was copied from a website or other source that does not have a license compatible with Iranpedia, and the uploader neither claims fair use nor makes a credible assertion of permission of free use. Sources that do not have a license compatible with Iranpedia include stock photo libraries such as Getty Images or Corbis. Non-blatant copyright infringements should be discussed at Iranpedia:Files for deletion',
		subgroup: {
			name: 'imgcopyvio_url',
			type: 'input',
			label: 'نشانی وب منبع حق نشر، به همراه "http://".  اگر نمی‌توانید نشانی وب فراهم آورید لطفاً از معیار پ۹ استفاده نکنید.  (استثنا: برای نقض حق نشر منابع غیر اینترنتی این فیلد را خالی بگذارید.) ',
			size: 60
		}
	},
	{
		label: 'پ۱۰: پروندهٔ غیر رسانه‌ای بی‌کاربرد',
		value: 'badfiletype',
		tooltip: 'پرونده‌های بارگذاری‌شده که تصویر، صدا یا ویدئو نیستند (مانند: پرونده‌های .doc، .pdf یا .xls) و در هیچ نوشتاری استفاده نشده‌اند و هیچ استفادهٔ دانشنامه‌ای قابل پیش‌بینی ندارند.'
	},
	{
		label: 'پ۱۱: هیچ نشانی از مجوز نیست',
		value: 'nopermission',
		tooltip: 'اگر بارگذار پروانه‌ای مشخص کرده‌است و نام شخص ثالثی به عنوان منبع یا دارندهٔ حق تکثیر برده‌است بدون ارائهٔ مدرک که این شخص ثالث در حقیقت موافقت کرده‌است یا خیر، این آیتم می‌تواند در هفت روز پس از اطلاع به بارگذار حذف شود.',
		hideWhenUser: true
	},
	{
		label: 'ع۸: صفحهٔ توصیف پرونده‌ای که پروندهٔ مرتبط با آن موجود نیست',
		value: 'imagepage',
		tooltip: 'این فقط برای استفاده در زمانی است که پرونده اصلاً وجود ندارد. پرونده‌های فاسد و صفحه‌های توضیح محلی پرونده‌ها در انبار، باید از پ۲ استفاده کنند؛ تغییرمسیرهای ناپذیرفتنی  باید از ت۳ استفاده کنند؛ و تغییرمسیرهای خراب انبار باید از ع۶ استفاده کنند.'
	}
];
 
Twinkle.speedy.articleList = [
	{
		label: 'م۱ : فاقد متن یا خالی - مقاله‌هایی که متن کافی برای شناساندن موضوع مقاله ندارند.',
		value: 'nocontext',
		tooltip: 'نمونه: «او مردی بامزه همراه ماشین قرمز است. او مردم را می‌خنداند.» این فقط روی نوشتارهای خیلی کوتاه اعمال می‌شود. زمینه با محتوا تفاوت دارد، در م۳ بحث شده‌است، زیر.'
	},
	{
		label: 'م۲ : مقاله‌های ترجمه نشده',
		value: 'foreign',
		tooltip: 'اگر مقاله در هیچ ویکی دیگری موجود نیست، می‌توانید از برچسب {{ترجمه نشده}} استفاده کنید. مقالات غیر فارسی که این معیار (و هیچ یک از معیارهای دیگ حذف سریع) را نداشته‌باشند، باید در صقحه‌ای با عنوان مقالات ترجمه نشده قرار گیرند.',
		subgroup: {
			name: 'foreign_source',
			type: 'input',
			label: 'پیوند میان‌ویکی به مقالهٔ ویکی زبان دیگر: ',
			tooltip: 'برای نمونه: fr:Bonjour'
		}
	},
	{
		label: 'م۳: تا کنون محتوایی نداشته است',
		value: 'nocontent',
		tooltip: 'مقاله‌ای که تنها شامل پیوند (از جمله پیوند به بیرون، برچسب رده و بخش جستارهای وابسته)، تکرار عنوان مقاله و تماس با نویسنده است. این معیار، صفحه‌های ابهام‌زدایی را شامل نمی‌شود.'
	},
	{
		label: 'م۵: مقاله‌های انتقالی به دیگر ویکی‌ها',
		value: 'transwiki',
		tooltip: 'هر مقاله‌ای که در نظرخواهی برای حذف مورد بررسی قرار گرفته و نتیجه این بوده که به یک ویکی دیگر منتقل شود. پس از انتقال، مقاله حذف می‌شود. هم‌چنین هر مقاله‌ای که تنها شامل تعریف لغتنامه‌ای است، پس از انتقال به ویکی‌واژه و آگاه‌سازی کاربر.'
	},
	{
		label: 'م۷: افراد، گروه‌ها، شرکت‌ها، محتوای وب و تک‌جانوران نامهم',
		value: 'م۷',
		tooltip: 'An article about a real person, group of people, band, club, company, web content, or individual animal that does not assert the importance or significance of its subject. If controversial, or if there has been a previous AfD that resulted in the article being kept, the article should be nominated for AfD instead',
		hideWhenSingle: true
	},
	{
		label: 'م۷: شخص نامهم',
		value: 'person',
		tooltip: 'مقاله‌ای درباره یک شخص حقیقی که سرشناسی یا اهمیت موضوع را نشان نمی‌دهد. اگر بحث برانگیز باشد یا پیشتر برای حذف نامزد شده‌باشد و نتیجه آن ماندن مقاله باشد، باید مقاله به جای حذف سریع، برای حذف نامزد شود.',
		hideWhenMultiple: true
	},
	{
		label: 'م۷: موسیقیدان یا گروه موسیقی نامهم',
		value: 'band',
		tooltip: 'مقاله در مورد یک گروه، خواننده، موسیقی‌دان، یا گروه موسیقی که اهمیت موضوع را نشان نمی‌دهد.',
		hideWhenMultiple: true
	},
	{
		label: 'م۷: باشگاه نامهم',
		value: 'club',
		tooltip: 'مقاله در مورد یک انجمن که اهمیت موضوع را نشان نمی‌دهد.',
		hideWhenMultiple: true
	},
	{
		label: 'م۷: شرکت یا سازمان نامهم',
		value: 'corp',
		tooltip: 'مقاله در مورد یک شرکت یا سازمان که اهمیت موضوع را نشان نمی‌دهد.',
		hideWhenMultiple: true
	},
	{
		label: 'م۷ : وب‌گاه یا محتوای وب ناسرشناس',
		value: 'web',
		tooltip: 'نوشتار دربارهٔ وب‌گاه، وبلاگ، انجمن برخطر، کامیکس برخطر، پادکست یا محتوای وب مشابه که از موضوع مهم یا معنی خودش دفاع نمی‌کند.',
		hideWhenMultiple: true
	},
	{
		label: 'م۷: تک‌جانور نامهم',
		value: 'animal',
		tooltip: 'مقاله در مورد جانور که اهمیت موضوع را نشان نمی‌دهد.',
		hideWhenMultiple: true
	},
	{
		label: 'م۷: رویداد سازمان‌دهی‌شدهٔ نامهم',
		value: 'event',
		tooltip: 'نوشتار دربارهٔ یک رویداد سازمان‌یافته (تور، مأموریت، ملاقات، مهمانی و غیره) که از موضوع مهم یا معنی خودش دفاع نمی‌کند.',
		hideWhenMultiple: true
	},
	{
		label: 'م۹: اثر موسیقی ناسرشناس که هنرمند آن مقاله ندارد',
		value: 'م۹',
		tooltip: 'نوشتاری دربارهٔ یک ضبط موسیقی که نشان نمی‌دهد چرا موضوعش مهم یا قابل توجه است و جایی که نوشتارِ هنرمند هرگز وجود نداشته‌است یا حذف شده‌است.'
	},
	{
		label: 'م۱۰: مقالهٔ تازه‌ساز که تکرار مطالب مقالهٔ دیگری است',
		value: 'م۱۰',
		tooltip: 'A recently created article with no relevant page history that does not aim to expand upon, detail or improve information within any existing article(s) on the subject, and where the title is not a plausible redirect. This does not include content forks, split pages or any article that aims at expanding or detailing an existing one.',
		subgroup: {
			name: 'a10_article',
			type: 'input',
			label: 'مقاله‌ای که تکرار شده است: '
		}
	},
	{
		label: 'م۱۱: مشخصاً ساختهٔ ذهن نویسنده است و هیچ ادعایی در مورد مهم‌بودنش وجود ندارد',
		value: 'madeup',
		tooltip: 'An article which plainly indicates that the subject was invented/coined/discovered by the article\'s creator or someone they know personally, and does not credibly indicate why its subject is important or significant'
	}
];
 
Twinkle.speedy.categoryList = [
	{
		label: 'ر۱: ردهٔ خالی',
		value: 'catempty',
		tooltip: 'رده‌هایی که حداقل برای چهار روز خالی بوده‌اند. این معیار برای رده‌های بحث شده در نظرخواهی حذف، رده‌های ابهام‌زدایی و چند استثنای دیگر اعمال نمی‌شود. اگر رده نسبتاً جدید نیست، ممکن است که پیشتر مقاله‌هایی داشته و به بررسی‌های بیشتر نیاز است.'
	},
	{
		label: 'ع۸: رده‌های پرشده با الگوی حذف‌شده یا تغییرهدف‌یافته',
		value: 'templatecat',
		tooltip: 'This is for situations where a category is effectively empty, because the template(s) that formerly placed pages in that category are now deleted. This excludes categories that are still in use.'
	}
];
 
Twinkle.speedy.userList = [
	{
		label: 'ک۱: درخواست کاربر',
		value: 'userreq',
		tooltip: 'زیرصفحه‌های شخصی، بنا به درخواست کاربر. در برخی موارد نادر ممکن است به لحاظ مدیریتی نیاز به حفظ صفحه باشد. در برخی شرایط ممکن است صفحه اصلی کاربر نیز حذف شود.',
		subgroup: ((mw.config.get('wgNamespaceNumber') === 3 && mw.config.get('wgTitle').indexOf('/') === -1) ? {
			name: 'userreq_rationale',
			type: 'input',
			label: 'لازم است توضیحی فراهم آورید که چرا این صفحه باید حذف شود: ',
			tooltip: 'صفحه‌های بحث کاربری فقط در شرایط بسیار استثنایی حذف می‌شوند. اپ:حذف بحث را ببینید.',
			size: 60
		} : null),
		hideSubgroupWhenMultiple: true
	},
	{
		label: 'ک۲: کاربر ناموجود',
		value: 'nouser',
		tooltip: 'صفحهٔ کاربری کاربرانی که وجود ندارند («ویژه:فهرست کاربران» را بررسی کنید).'
	},
	{
		label: 'ک۳: گالری‌های ناآزاد',
		value: 'gallery',
		tooltip: 'Galleries in the userspace which consist mostly of "fair use" or non-free files. Iranpedia\'s non-free content policy forbids users from displaying non-free files, even ones they have uploaded themselves, in userspace. It is acceptable to have free files, GFDL-files, Creative Commons and similar licenses along with public domain material, but not "fair use" files'
	},
	{
		label: 'ک۵: نقض آشکار اپ:میزبان وب نیست',
		value: 'notwebhost',
		tooltip: 'Pages in userspace consisting of writings, information, discussions, and/or activities not closely related to Iranpedia\'s goals, where the owner has made few or no edits outside of userspace, with the exception of plausible drafts, pages adhering to ip:UPYES, and résumé-style pages.'
	},
	{
		label: 'ع۱۱: صفحهٔ کاربری تبلیغاتی در فضای کاربری با نام تبلیغاتی',
		value: 'spamuser',
		tooltip: 'A promotional user page, with a username that promotes or implies affiliation with the thing being promoted. Note that simply having a page on a company or product in one\'s userspace does not qualify it for deletion. If a user page is spammy but the username is not, then consider tagging with regular ع۱۱ instead.',
		hideWhenMultiple: true
	}
];
 
Twinkle.speedy.templateList = [
	{
		label: 'ا۲: الگوهایی که به صورت آشکار نمایش نادرستی از یک سیاست جاافتاده باشند',
		value: 'policy',
		tooltip: 'این شامل الگوهای «حذف سریع» برای مشکلاتی می‌شود که  معیارهای حذف سریع نیستند و از الگوهای در نظر گرفته‌شده برای استفاده در نوشتارها رفع مسئولیت می‌کنند.'
	},
	{
		label: 'ا۳: الگوهای تکراری یا نمونه‌های سخت‌کدبندی‌شده',
		value: 'duplicatetemplate',
		tooltip: 'Templates that are either substantial duplications of another template or hardcoded instances of another template where the same functionality could be provided by that other template',
		subgroup: {
			name: 'duplicatetemplate_2',
			type: 'input',
			label: 'الگویی که تکراری است از: ',
			tooltip: 'پیشوند «الگو:» لازم نیست.'
		},
		hideWhenMultiple: true
	},
	{
		label: 'ا۳: الگوهایی که هیچ کاربرد مفیدی ندارند',
		value: 'ا۳',
		tooltip: 'این معیار به شما اجازه می‌دهد منطقی ارائه کنید. در بیشتر موارد، معیار دیگری مناسب‌تر خواهد بود، مانند ع۱، ع۲، ع۶ یا ع۸.',
		subgroup: {
			name: 't3_rationale',
			type: 'input',
			label: 'دلیل: ',
			tooltip: 'منطق لازم است.',
			size: 60
		},
		hideWhenMultiple: true
	}
];
 
Twinkle.speedy.portalList = [
	{
		label: 'د۱ : درگاهی که اگر مقاله بود، مشمول حذف سریع می‌شد',
		value: 'د۱',
		tooltip: 'شما باید معیار نوشتار که در این مورد اعمال می‌شود (م۱، م۳، م۷ یا م۱۰) را مشخص کنید.',
		subgroup: {
			name: 'p1_1',
			type: 'select',
			label: 'معیار حذف سریع مناسب برای مقاله: '
		},
		hideWhenMultiple: true
	},
	{
		label: 'د۲ : درگاه خالی',
		value: 'emptyportal',
		tooltip: 'Any Portal based on a topic for which there is not a non-stub header article, and at least three non-stub articles detailing subject matter that would be appropriate to discuss under the title of that Portal'
	}
];
 
Twinkle.speedy.generalList = [
	{
		label: 'دلیل سفارشی' + (Morebits.userIsInGroup('sysop') ? ' (دلیل حذف دلخواه)' : ' با استفاده از الگوی {{حس}}'),
		value: 'reason',
		tooltip: '{{db}} is short for "delete because". At least one of the other deletion criteria must still apply to the page, and you must make mention of this in your rationale. This is not a "catch-all" for when you can\'t find any criteria that fit.',
		subgroup: {
			name: 'reason_1',
			type: 'input',
			label: 'دلیل: ',
			size: 60
		},
		hideWhenMultiple: true,
		hideSubgroupWhenSysop: true
	},
	{
		label: 'ع۱: چرندیات محض. صفحه‌هایی که تنها از مطالب ناهمگرا یا نامفهوم تشکیل شده‌اند و مطلب یا تاریخچهٔ معنی‌داری ندارند.',
		value: 'nonsense',
		tooltip: 'This does not include poor writing, partisan screeds, obscene remarks, vandalism, fictional material, material not in English, poorly translated material, implausible theories, or hoaxes. In short, if you can understand it, ع۱ does not apply.'
	},
	{
		label: 'ع۲: صفحهٔ آزمایشی',
		value: 'test',
		tooltip: 'صفحه‌ای که برای تمرین ویرایش یا سایر عملکردهای ایران‌پدیا ایجاد شده‌است. شامل صفحه‌های فضای نام کاربر و الگوهای بی‌استفاده و تکراری نمی‌شود.'
	},
	{
		label: 'ع۳: خرابکاری محض',
		value: 'vandalism',
		tooltip: 'Plain pure vandalism (including redirects left behind from pagemove vandalism)'
	},
	{
		label: 'ع۳: کلک‌زنی آشکار',
		value: 'hoax',
		tooltip: 'مطلب فریب‌آمیز آشکار در حد خرابکاری',
		hideWhenMultiple: true
	},
	{
		label: 'ع۴: بازسازی مطلبی که در پی نظرخواهی حذف شده است',
		value: 'repost',
		tooltip: 'A copy, by any title, of a page that was deleted via an XfD process or Deletion review, provided that the copy is substantially identical to the deleted version. This clause does not apply to content that has been "userfied", to content undeleted as a result of Deletion review, or if the prior deletions were proposed or speedy deletions, although in this last case, other speedy deletion criteria may still apply',
		subgroup: {
			name: 'repost_1',
			type: 'input',
			label: 'صفحه‌ای که در این باره در آن نظرخواهی شده است: ',
			tooltip: 'باید با «ویکیپدیا:» آغاز شود.',
			size: 60
		}
	},
	{
		label: 'ع۵: کاربر تحریم‌شده یا قطع‌دسترسی‌شده',
		value: 'banned',
		tooltip: 'صفحه‌های ایجاد شده توسط کاربر تحریم شده یا بسته شده در تعارض با تحریم یا بندایش او که در آن ویرایش اساسی توسط کاربر دیگری انجام نشده‌باشد.',
		subgroup: {
			name: 'banned_1',
			type: 'input',
			label: 'نام کاربری کاربر قطع دسترسی شده (در صورت وجود): ',
			tooltip: 'نباید شامل پیشوند "کاربر:" باشد'
		},
		hideSubgroupWhenMultiple: true
	},
	{
		label: 'ع۶: ادغام تاریخچه',
		value: 'histmerge',
		tooltip: 'حذف موقت صفحه برای ادغام تاریخچه‌ها',
		subgroup: {
			name: 'histmerge_1',
			type: 'input',
			label: 'صفحه‌ای که قرار است در اینجا ادغام شود: '
		},
		hideWhenMultiple: true
	},
	{
		label: 'ع۶: انتقال',
		value: 'move',
		tooltip: 'باز کردن راه برای انتقالی که مناقشه‌برانگیز نیست،‌ مانند وارون‌کردن یک تغییرمسیر.',
		subgroup: [
			{
				name: 'move_1',
				type: 'input',
				label: 'صفحه‌ای که می‌خواهد به اینجا منتقل شود: '
			},
			{
				name: 'move_2',
				type: 'input',
				label: 'دلیل: ',
				size: 60
			}
		],
		hideWhenMultiple: true
	},
	{
		label: 'ع۶: نبح',
		value: 'xfd',
		tooltip: 'مدیری یک نظرخواهی برای حذف را با «حذف شود» جمع‌بندی کرده، ولی مقاله را حذف نکرده‌است.',
		subgroup: {
			name: 'xfd_fullvotepage',
			type: 'input',
			label: 'صفحهٔ نظرخواهی برای حذف: ',
			size: 40
		},
		hideWhenMultiple: true
	},
	{
		label: 'ع۶: صفحهٔ ابهام‌زدایی نالازم',
		value: 'disambig',
		tooltip: 'این معیار تنها برای صفحات ابهام‌زدایی یتیم با این شرایط به کار می‌رود: ۱)ابهام‌زدایی با دو صفحه موجود ایران‌پدیا یا کمتر که عنوانش با (ابهام‌زدایی) تمام می‌شود. ۲)ابهام‌زدایی بدون صفحه موجود در ایران‌پدیا بدون توجه به عنوان.',
		hideWhenMultiple: true
	},
	{
		label: 'ع۶: تغییرمسیر به صفحهٔ ابهام‌زدایی در جای نامناسب',
		value: 'movedab',
		tooltip: 'این فقط برای تغییرمسیرهایی به صفحه‌های ابهام‌زدایی اعمال می‌شود که با «(ابهام‌زدایی)» پایان می‌یابند که موضوع اصلی وجود ندارند.',
		hideWhenMultiple: true
	},
	{
		label: 'ع۶: رونوشت‌برداری به جای انتقال',
		value: 'copypaste',
		tooltip: 'این فقط برای انتقال صفحهٔ رونوشت‌برداری و چسباندن از صفحهٔ دیگری اعمال می‌شود که موقتاً باید حذف شود تا فضا برای یک انتقال تمیز صفحه بدست آید.',
		subgroup: {
			name: 'copypaste_1',
			type: 'input',
			label: 'صفحهٔ اصلی‌ای که از آن رونوشت‌برداری شده است: '
		},
		hideWhenMultiple: true
	},
	{
		label: 'ع۶: تمیزکاری',
		value: 'ع۶',
		tooltip: 'سایر تمیزکاری‌های غیر مناقشه برانگیز',
		subgroup: {
			name: 'g6_rationale',
			type: 'input',
			label: 'دلیل: ',
			size: 60
		}
	},
	{
		label: 'ع۷: نویسنده خواستار حذف است یا صفحه را خالی کرده',
		value: 'author',
		tooltip: 'Any page for which deletion is requested by the original author in good faith, provided the page\'s only substantial content was added by its author. If the author blanks the page, this can also be taken as a deletion request.',
		subgroup: {
			name: 'author_rationale',
			type: 'input',
			label: 'توضیح اختیاری: ',
			tooltip: 'Perhaps linking to where the author requested this deletion.',
			size: 60
		}
	},
	{
		label: 'ع۸: صفحه‌های وابسته به یک صفحهٔ حذف‌شده یا ناموجود',
		value: 'ع۸',
		tooltip: 'such as talk pages with no corresponding subject page; subpages with no parent page; file pages without a corresponding file; redirects to invalid targets, such as nonexistent targets, redirect loops, and bad titles; or categories populated by deleted or retargeted templates. This excludes any page that is useful to the project, and in particular: deletion discussions that are not logged elsewhere, user and user talk pages, talk page archives, plausible redirects that can be changed to valid targets, and file pages or talk pages for files that exist on Wikimedia Commons.',
		subgroup: {
			name: 'g8_rationale',
			type: 'input',
			label: 'توضیح اختیاری: ',
			size: 60
		}
	},
	{
		label: 'ع۸: زیرصفحهٔ فاقد صفحهٔ مادر',
		value: 'subpage',
		tooltip: 'This excludes any page that is useful to the project, and in particular: deletion discussions that are not logged elsewhere, user and user talk pages, talk page archives, plausible redirects that can be changed to valid targets, and file pages or talk pages for files that exist on Wikimedia Commons.',
		hideWhenMultiple: true
	},
	{
		label: 'ع۱۰: صفحهٔ حمله',
		value: 'attack',
		tooltip: 'Pages that serve no purpose but to disparage their subject or some other entity (e.g., "John Q. Doe is an imbecile"). This includes a biography of a living person that is negative in tone and unsourced, where there is no NPOV version in the history to revert to. Administrators deleting such pages should not quote the content of the page in the deletion summary!'
	},
	{
		label: 'ع۱۰: زندگی‌نامهٔ زندگان کاملاً منفی و بی‌منبع',
		value: 'negublp',
		tooltip: 'زندگی‌نامه یک فرد زنده که کاملا بدون منبع و با لحن منفی نوشته شده‌است. هیچ نسخه بی‌طرفی در تاریخچه مقاله وجود ندارد تا بدان واگردانده شود. ',
		hideWhenMultiple: true
	},
	{
		label: 'ع۱۱ : تبلیغات',
		value: 'spam',
		tooltip: 'Pages which exclusively promote a company, product, group, service, or person and which would need to be fundamentally rewritten in order to become encyclopedic. Note that an article about a company or a product which describes its subject from a neutral point of view does not qualify for this criterion; an article that is blatant advertising should have inappropriate content as well'
	},
	{
		label: 'ع۱۲ : نقض حق تکثیر',
		value: 'copyvio',
		tooltip: 'Either: (1) Material was copied from another website that does not have a license compatible with Iranpedia, or is photography from a stock photo seller (such as Getty Images or Corbis) or other commercial content provider; (2) There is no non-infringing content in the page history worth saving; or (3) The infringement was introduced at once by a single person rather than created organically on wiki and then copied by another website such as one of the many Iranpedia mirrors',
		subgroup: [
			{
				name: 'copyvio_url',
				type: 'input',
				label: 'نشانی وب (در صورت وجود): ',
				tooltip: 'اگر نوشته از منبع برخطی برداشته شده‌است، نشانی وب آن را از جمله پروتکل «http://» یا «https://» اینجا قرار دهید. اگر نشانی وب در فهرست سیاه جفنگ قرار دارد، می‌توانید پروتکل را ننویسید.',
				size: 60
			},
			{
				name: 'copyvio_url2',
				type: 'input',
				label: 'یک نشانی وب دیگر: ',
				tooltip: 'اختیاری است.',
				size: 60
			},
			{
				name: 'copyvio_url3',
				type: 'input',
				label: 'یک نشانی وب دیگر: ',
				tooltip: 'اختیاری است.',
				size: 60
			}
		]
	},
	{
		label: 'ع۱۳: درخواست‌های قدیمی و ترک‌شدهٔ ایجاد مقاله',
		value: 'afc',
		tooltip: 'هر درخواست نظرخواهی برای انتقال ارائه‌نشده یا ردشده که بیش از ۶ ماه ویرایش نشده‌است.'
	}
];
 
Twinkle.speedy.redirectList = [
	{
		label: 'ت۲ : تغییرمسیر از فضای‌نام اصلی به هر فضای‌نام دیگری بجز فضاهای نام رده:، الگو:، ایران‌پدیا:، راهنما: و درگاه:',
		value: 'rediruser',
		tooltip: '(این شامل شبه فضاهای نام میانبر ایران‌پدیا نمی‌شود). اگر این نتیجهٔ انتقال صفحه بود، یک یا دو روز پیش از حذف تغییرمسیر صبر کنید.'
	},
	{
		label: 'ت۳ : تغییرمسیر دارای اشتباه املایی نامحتمل که به تازگی ساخته شده‌است',
		value: 'redirtypo',
		tooltip: 'اگرچه، تغییرمسیرهایی از غلط‌های املایی رایج یا اسم بی‌مسمی عموماً مفید هستند، زیرا تغییرمسیرهایی به زبان‌های دیگر هستند.'
	},
	{
		label: 'ع۸: تغییرمسیر به اهداف نامعتبر همچون اهداف ناموجود، تغییرمسیرهای حلقه‌ای و عنوان‌های نادرست',
		value: 'redirnone',
		tooltip: 'این هر صفحه‌ای را که برای پروژه مفید باشد، به ویژه بحث‌های حذف که جایی ثبت نشده‌اند، صفحه‌های بحث کاربر یا صفحهٔ کاربری، بایگانی‌های صفحهٔ بحث، تغییرمسیرهای محتمل که می‌توانند به اهداف معتبر تغییر یابند و صفحه‌های پرونده یا صفحه‌های بحث پرونده‌ها که در انبار ویکی‌مدیا وجود دارند مستثنی می‌کند.'
	}
];
 
Twinkle.speedy.normalizeHash = {
	'reason': 'db',
	'nonsense': 'ع۱',
	'test': 'ع۲',
	'vandalism': 'ع۳',
	'hoax': 'ع۳',
	'repost': 'ع۴',
	'banned': 'ع۵',
	'histmerge': 'ع۶',
	'move': 'ع۶',
	'xfd': 'ع۶',
	'disambig': 'ع۶',
	'movedab': 'ع۶',
	'copypaste': 'ع۶',
	'ع۶': 'ع۶',
	'author': 'ع۷',
	'ع۸': 'ع۸',
	'talk': 'ع۸',
	'subpage': 'ع۸',
	'redirnone': 'ع۸',
	'templatecat': 'ع۸',
	'imagepage': 'ع۸',
	'attack': 'ع۱۰',
	'negublp': 'ع۱۰',
	'spam': 'ع۱۱',
	'spamuser': 'ع۱۱',
	'copyvio': 'ع۱۲',
	'afc': 'ع۱۳',
	'nocontext': 'م۱',
	'foreign': 'م۲',
	'nocontent': 'م۳',
	'transwiki': 'م۵',
	'م۷': 'م۷',
	'person': 'م۷',
	'corp': 'م۷',
	'web': 'م۷',
	'band': 'م۷',
	'club': 'م۷',
	'animal': 'م۷',
	'event': 'م۷',
	'م۹': 'م۹',
	'م۱۰': 'م۱۰',
	'madeup': 'م۱۱',
	'rediruser': 'ت۲',
	'redirtypo': 'ت۳',
	'redundantimage': 'پ۱',
	'noimage': 'پ۲',
	'fpcfail': 'پ۲',
	'noncom': 'پ۳',
	'unksource': 'پ۴',
	'unfree': 'پ۵',
	'norat': 'پ۶',
	'badfairuse': 'پ۷',
	'nowcommons': 'پ۸',
	'imgcopyvio': 'پ۹',
	'badfiletype': 'پ۱۰',
	'nopermission': 'پ۱۱',
	'catempty': 'ر۱',
	'userreq': 'ک۱',
	'nouser': 'ک۲',
	'gallery': 'ک۳',
	'notwebhost': 'ک۵',
	'policy': 'ت۲',
	'duplicatetemplate': 'ا۳',
	'ا۳': 'ا۳',
	'د۱': 'د۱',
	'emptyportal': 'د۲'
};
 
// keep this synched with [[MediaWiki:Deletereason-dropdown]]
Twinkle.speedy.reasonHash = {
	'reason': '',
// General
	'nonsense': '[[اپ:چرند|بی‌معنا]] یا نامفهوم',
	'test': 'صفحهٔ آزمایش',
	'vandalism': '[[اپ:خرابکاری|خرابکاری]]',
	'hoax': '[[اپ:کلک مزنید|کلک]] آشکار',
	'repost': 'ساخت دوبارهٔ صفحه‌ای که برپایهٔ [[اپ:نظرخواهی برای حذف]] [[اپ:حذف|حذف]] شده است',
	'banned': 'ساخت به دست کاربران [[اپ:قطع دسترسی|بسته‌شده]] یا [[اپ:تحریم|تحریم‌شده]] با زیر پا گذاشتن قطع دسترسی یا تحریم',
	'histmerge': 'حذف موقت برای ادغام تاریخچه‌ها',
	'move': 'باز کردن راه برای انتقال‌های بی‌مناقشه',
	'xfd': 'حذف صفحه بر پایهٔ نتیجهٔ [[اپ:نبح|نظرخواهی حذف]]',
	'disambig': 'صفحهٔ ابهام‌زدایی نالازم',
	'movedab': 'تغییرمسیر به [[:en:ip:MALPLACED|صفحهٔ ابهام‌زدایی بدجا]]',
	'copypaste': 'انتقال صفحه با[[:en:ip:CPMV|رونوشت‌برداری و چسباندن]]',
	'ع۶': 'تمیزکاری در راه نگهداری و روزمره (بحث‌نابرانگیز)',
	'author': 'تک‌نویسنده که درخواست حذف داده یا صفحه را خالی کرده است',
	'ع۸': 'صفحهٔ وابسته به صفحهٔ حذف‌شده یا ناموجود',
	'talk': '[[اپ:صفحه بحث|صفحهٔ بحث]] صفحه‌ای نامجود یا حذف‌شده',
	'subpage': '[[اپ:زیرصفحه|زیرصفحهٔ]] صفحه‌ای ناموجود یا حذف‌شده',
	'redirnone': '[[اپ:تغییرمسیر|تغییرمسیر]] به صفحه‌ای ناموجود یا حذف‌شده',
	'templatecat': 'پرشده با الگوهای حذف‌شده یا تغییرهدف‌یافته',
	'imagepage': 'صفحهٔ توصیف پرونده برای پرونده‌ای که وجود ندارد',
	'attack': '[[اپ:صفحه حمله|صفحهٔ حمله]] یا منفی بدون منبع [[اپ:زز|زندگی‌نامه زندگان]]',
	'negublp': '[[اپ:زندگی‌نامه زندگان|زندگی‌نامهٔ]] منفی بدون منبع',
	'spam': '[[اپ:هرزنامه|هرزنگاری]] یا تبلیغ آشکار',
	'copyvio': 'زیر پا گذاشتن آشکار [[اپ:حق تکثیر|حق نشر]]',
	'afc': '[[:en:ip:AFC|درخواست ساخت]] مقالهٔ ترک‌شده',
// Articles
	'nocontext': 'مقالهٔ کوتاه و فاقد بافت لازم برای شناسایی موضوع',
	'foreign': 'مقاله‌ای به زبان غیرفارسی که در پروژه‌ای دیگر موجود است',
	'nocontent': 'مقالهٔ فاقد محتوای عمده یا معنادار',
	'transwiki': ' منتقل شده به یک پروژهٔ خواهر',
	'م۷': 'فاقد توضیح دربارهٔ اهمیت موضوع (شخص حقیقی، سازمان، جانور، یا محتوای وب)',
	'person' : 'فاقد توضیح دربارهٔ اهمیت موضوع (شخص حقیقی)',
	'web': 'فاقد توضیح دربارهٔ اهمیت موضوع (محتوای وب)',
	'corp': 'فاقد توضیح دربارهٔ اهمیت موضوع (سازمان)',
	'club': 'فاقد توضیح دربارهٔ اهمیت موضوع (سازمان)',
	'band': 'فاقد توضیح دربارهٔ اهمیت موضوع (گروه موسیقی/موسیقی‌دان)',
	'animal': 'فاقد توضیح دربارهٔ اهمیت موضوع (تک‌جانور)',
	'event': 'فاقد توضیح دربارهٔ اهمیت موضوع (رویداد)',
	'م۹': 'ضبط‌های موسیقی از هنرمندان با پیوند قرمز بدون نشانی از اهمیت یا سرشناسی',
	'م۱۰': 'مقالهٔ تازه‌ساز که موضوعی از پیش موجود را پوشش می‌دهد',
	'madeup': 'تنها برآمده از ذهن نویسنده یا همکاران او، فاقد هرگونه نشانی از سرشناسی یا اهمیت',
// Images and media
	'redundantimage': 'پرونده یکسان با پرونده‌ای دیگر در ایران‌پدیا',
	'noimage': 'پروندهٔ خالی یا خراب',
	'fpcfail': 'صفحهٔ نالازم توصیف پرونده‌ای که در انبار است',
	'noncom': 'پرونده و با مجوز نامناسب',
	'unksource': 'کمبود اطلاعات در مورد مجوز',
	'unfree': 'رسانهٔ ناآزاد استفاده‌نشده',
	'norat': 'پروندهٔ ناآزاد بدون [[اپ:اصول استفاده از منابع غیر آزاد|دلیل استفادهٔ منصفانه]]',
	'badfairuse': 'زیر پا گذاشتن [[اپ:استفاده منصفانه|سیاست استفاده منصفانه]]',
	'nowcommons': 'پروندهٔ رسانه‌ای موجود در انبار',
	'imgcopyvio': '[[:en:ip:COPYVIO|نقض حق تکثیر]] آشکار',
	'badfiletype': 'پروندهٔ رسانه‌ای بی‌کاربرد (تصویر، صدا یا فیلم نباشد)',
	'nopermission': 'مدرکی در مورد مجوز ندارد',
// Categories
	'catempty': 'ردهٔ خالی',
// User pages
	'userreq': 'درخواست کاربر برای حذف صفحه‌ای در فضای نام کاربری خودش',
	'nouser': 'صفحهٔ کاربری یا زیرصفحهٔ کاربری کاربر ناموجود',
	'gallery': '[[:ایران‌پدیا:خودآموز (تصاویر)|گالری]] [[:ایران‌پدیا:استفاده منصفانه|ناآزاد]]',
	'notwebhost': '[[اپ:نیست|استفاده از ایران‌پدیا به عنوان میزبان وب]]',
// Templates
	'policy': 'الگویی که به روشنی نمایش نادرستی از ا سیاست‌های موجود باشد',
	'duplicatetemplate': 'الگوی بی‌استفاده و تکراری',
	'ا۳': 'الگوی بی‌استفاده و تکراری',
// Portals
	'د۱': '[[اپ:درگاه|درگاه]]ی که به عنوان مقاله حذف سریع می‌شود',
	'emptyportal': '[[اپ:درگاه|درگاه]] فاقد پایهٔ موضوعی عمده',
// Redirects
	'rediruser': '[[اپ:تغییرمسیر|تغییرمسیر]] میان [[اپ:فضای نام|فضاهای نام]] از فضای نام اصلی',
	'redirtypo': '[[اپ:تغییرمسیر|تغییرمسیر]] تازه‌ساز نامحتمل'
};
 
Twinkle.speedy.callbacks = {
	sysop: {
		main: function( params ) {
			var thispage;
 
			Morebits.wiki.addCheckpoint();  // prevent actionCompleted from kicking in until user interaction is done
 
			// look up initial contributor. If prompting user for deletion reason, just display a link.
			// Otherwise open the talk page directly
			if( params.openusertalk ) {
				thispage = new Morebits.wiki.page( mw.config.get('wgPageName') );  // a necessary evil, in order to clear incorrect status text
				thispage.setCallbackParameters( params );
				thispage.lookupCreator( Twinkle.speedy.callbacks.sysop.openUserTalkPage );
			}
 
			// delete page
			var reason;
			thispage = new Morebits.wiki.page( mw.config.get('wgPageName'), "در حال حذف صفحه" );
			if (params.normalized === 'db') {
				reason = prompt("معیار حذفی را که قصد دارید در سیاهه دیده شود، بنویسید:", "");
			} else {
				var presetReason = "[[اپ:محس#" + params.normalized.toUpperCase() + "|" + params.normalized.toUpperCase() + "]]: " + params.reason;
				if (Twinkle.getPref("promptForSpeedyDeletionSummary").indexOf(params.normalized) !== -1) {
					reason = prompt("معیار حذف را بنویسید یا دکمه تائید را کلیک کنید تا به صورت خودکار معیار نوشته شود", presetReason);
				} else {
					reason = presetReason;
				}
			}
			if (reason === null) {
				Morebits.status.error("درخواست دلیل", "کاربر لغو کرد");
				Morebits.wiki.removeCheckpoint();
				return;
			} else if (!reason || !reason.replace(/^\s*/, "").replace(/\s*$/, "")) {
				Morebits.status.error("درخواست دلیل", "شما دلیلی ارائه نکردید. I don't know... what with admins and their apathetic antics... I give up...");
				Morebits.wiki.removeCheckpoint();
				return;
			}
			thispage.setEditSummary( reason + Twinkle.getPref('deletionSummaryAd') );
			thispage.deletePage(function() {
				thispage.getStatusElement().info("انجام شد");
				Twinkle.speedy.callbacks.sysop.deleteTalk( params );
			});
			Morebits.wiki.removeCheckpoint();
		},
		deleteTalk: function( params ) {
			// delete talk page
			if (params.deleteTalkPage &&
					params.normalized !== 'پ۸' &&
					document.getElementById( 'ca-talk' ).className !== 'new') {
				var talkpage = new Morebits.wiki.page( Morebits.iranpedia.namespaces[ mw.config.get('wgNamespaceNumber') + 1 ] + ':' + mw.config.get('wgTitle'), "در حال حذف صفحهٔ بحث" );
				talkpage.setEditSummary('[[اپ:محس#ع۸|ع۸]]: صفحهٔ بحث صفحهٔ حذف‌شده «' + Morebits.pageNameNorm + '»' + Twinkle.getPref('deletionSummaryAd'));
				talkpage.deletePage();
				// this is ugly, but because of the architecture of wiki.api, it is needed
				// (otherwise success/failure messages for the previous action would be suppressed)
				window.setTimeout(function() { Twinkle.speedy.callbacks.sysop.deleteRedirects( params ); }, 1800);
			} else {
				Twinkle.speedy.callbacks.sysop.deleteRedirects( params );
			}
		},
		deleteRedirects: function( params ) {
			// delete redirects
			if (params.deleteRedirects) {
				var query = {
					'action': 'query',
					'list': 'backlinks',
					'blfilterredir': 'redirects',
					'bltitle': mw.config.get('wgPageName'),
					'bllimit': 5000  // 500 is max for normal users, 5000 for bots and sysops
				};
				var iranpedia_api = new Morebits.wiki.api( 'در حال گرفتن فهرست تغییرمسیرها...', query, Twinkle.speedy.callbacks.sysop.deleteRedirectsMain,
					new Morebits.status( 'در حال حذف تغییرمسیرها' ) );
				iranpedia_api.params = params;
				iranpedia_api.post();
			}
 
			// promote Unlink tool
			var $link, $bigtext;
			if( mw.config.get('wgNamespaceNumber') === 6 && params.normalized !== 'پ۸' ) {
				$link = $('<a/>', {
					'href': '#',
					'text': 'اینجا را برای رفتن به ابزار پیوندزدایی کلیک کنید.',
					'css': { 'fontSize': '130%', 'fontWeight': 'bold' },
					'click': function(){
						Morebits.wiki.actionCompleted.redirect = null;
						Twinkle.speedy.dialog.close();
						Twinkle.unlink.callback("در حال حذف استفادهٔ یا پیوندها به پروندهٔ حذف‌شده " + Morebits.pageNameNorm);
					}
				});
				$bigtext = $('<span/>', {
					'text': 'برای یتیم‌ساختن پیوندهای برگشتی و حذف نمونه‌های استفاده از پرونده',
					'css': { 'fontSize': '130%', 'fontWeight': 'bold' }
				});
				Morebits.status.info($bigtext[0], $link[0]);
			} else if (params.normalized !== 'پ۸') {
				$link = $('<a/>', {
					'href': '#',
					'text': 'اینجا را برای رفتن به ابزار پیوندزدایی کلیک کنید.',
					'css': { 'fontSize': '130%', 'fontWeight': 'bold' },
					'click': function(){
						Morebits.wiki.actionCompleted.redirect = null;
						Twinkle.speedy.dialog.close();
						Twinkle.unlink.callback("در حال حذف پیوندها به صفحهٔ حذف‌شده " + Morebits.pageNameNorm);
					}
				});
				$bigtext = $('<span/>', {
					'text': 'برای یتیم‌ساختن پیوندهای برگشتی',
					'css': { 'fontSize': '130%', 'fontWeight': 'bold' }
				});
				Morebits.status.info($bigtext[0], $link[0]);
			}
		},
		openUserTalkPage: function( pageobj ) {
			pageobj.getStatusElement().unlink();  // don't need it anymore
			var user = pageobj.getCreator();
			var params = pageobj.getCallbackParameters();
 
			var query = {
				'title': 'بحث کاربر:' + user,
				'action': 'edit',
				'preview': 'yes',
				'vanarticle': Morebits.pageNameNorm
			};
 
			if (params.normalized === 'db' || Twinkle.getPref("promptForSpeedyDeletionSummary").indexOf(params.normalized) !== -1) {
				// provide a link to the user talk page
				var $link, $bigtext;
				$link = $('<a/>', {
					'href': mw.util.wikiScript('index') + '?' + Morebits.queryString.create( query ),
					'text': 'اینجا را برای بازکردن بحث کاربر کلیک کنید:' + user,
					'target': '_blank',
					'css': { 'fontSize': '130%', 'fontWeight': 'bold' }
				});
				$bigtext = $('<span/>', {
					'text': 'برای آگاهی‌دادن به ایجادگر صفحه',
					'css': { 'fontSize': '130%', 'fontWeight': 'bold' }
				});
				Morebits.status.info($bigtext[0], $link[0]);
			} else {
				// open the initial contributor's talk page
				var statusIndicator = new Morebits.status('در حال بازکردن فرم ویرایش صفحهٔ بحث کاربر برای ' + user, 'در حال بازکردن...');
 
				switch( Twinkle.getPref('userTalkPageMode') ) {
				case 'tab':
					window.open( mw.util.wikiScript('index') + '?' + Morebits.queryString.create( query ), '_blank' );
					break;
				case 'blank':
					window.open( mw.util.wikiScript('index') + '?' + Morebits.queryString.create( query ), '_blank', 'location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800' );
					break;
				case 'window':
					/* falls through */
				default:
					window.open( mw.util.wikiScript('index') + '?' + Morebits.queryString.create( query ),
						( window.name === 'twinklewarnwindow' ? '_blank' : 'twinklewarnwindow' ),
						'location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800' );
					break;
				}
 
				statusIndicator.info( 'complete' );
			}
		},
		deleteRedirectsMain: function( apiobj ) {
			var xmlDoc = apiobj.getXML();
			var $snapshot = $(xmlDoc).find('backlinks bl');
			var total = $snapshot.length;
			var statusIndicator = apiobj.statelem;
 
			if( !total ) {
				statusIndicator.status("تغییرمسیری یافت نشد.");
				return;
			}
 
			statusIndicator.status("0%");
 
			var current = 0;
			var onsuccess = function( apiobjInner ) {
				var now = parseInt( 100 * (++current)/total, 10 ) + '%';
				statusIndicator.update( now );
				apiobjInner.statelem.unlink();
				if( current >= total ) {
					statusIndicator.info( now + ' (کامل شد)' );
					Morebits.wiki.removeCheckpoint();
				}
			};
 
			Morebits.wiki.addCheckpoint();
 
			$snapshot.each(function(key, value) {
				var title = $(value).attr('title');
				var page = new Morebits.wiki.page(title, 'در حال حذف تغییرمسیر «' + title + '»');
				page.setEditSummary('[[اپ:محس#ع۸|ع۸]]: تغییرمسیر به صفحهٔ ناموجود "' + Morebits.pageNameNorm + '"' + Twinkle.getPref('deletionSummaryAd'));
				page.deletePage(onsuccess);
			});
		}
	},
 
	user: {
		main: function(pageobj) {
			var statelem = pageobj.getStatusElement();
 
			if (!pageobj.exists()) {
				statelem.error( "به نظر می‌رسد که این صفحه قبلاً حذف شده است." );
				return;
			}
 
			var text = pageobj.getPageText();
			var params = pageobj.getCallbackParameters();
 
			statelem.status( 'چک کردن صفحه برای موجود بودن برچسب ...' );
 
			// check for existing deletion tags
			var tag = /(?:\{\{\s*(حس-.*?|db|delete|db-.*?|حذف سریع|speedy deletion-.*?|حذف سریع-.*?)(?:\s*\||\s*\}\}))/.exec( text );
			if( tag ) {
				statelem.error( [ Morebits.htmlNode( 'strong', tag[1] ) , " از پیش در صفحه قرار گرفته‌است." ] );
				return;
			}
 
			var xfd = /(?:\{\{([rsaiftcm]fd|md1|proposed deletion)[^{}]*?\}\})/i.exec( text );
			if( xfd && !confirm( "برچسب حذف {{" + xfd[1] + "}} در صفحه موجود است. آیا می‌خواهید برچسب دیگری بزنید؟" ) ) {
				return;
			}
 
			var code, parameters, i;
			if (params.normalizeds.length > 1) {
				code = "{{db-multiple";
				params.utparams = {};
				$.each(params.normalizeds, function(index, norm) {
					code += "|" + norm.toUpperCase();
					parameters = params.templateParams[index] || [];
					for (var i in parameters) {
						if (typeof parameters[i] === 'string' && !parseInt(i, 10)) {  // skip numeric parameters - {{db-multiple}} doesn't understand them
							code += "|" + i + "=" + parameters[i];
						}
					}
					$.extend(params.utparams, Twinkle.speedy.getUserTalkParameters(norm, parameters));
				});
				code += "}}";
			} else {
				parameters = params.templateParams[0] || [];
				code = "{{db-" + params.values[0];
				for (i in parameters) {
					if (typeof parameters[i] === 'string') {
						code += "|" + i + "=" + parameters[i];
					}
				}
				code += "}}";
				params.utparams = Twinkle.speedy.getUserTalkParameters(params.normalizeds[0], parameters);
			}
 
			var thispage = new Morebits.wiki.page(mw.config.get('wgPageName'));
			// patrol the page, if reached from ویژه:صفحه‌های تازه
			if( Twinkle.getPref('markSpeedyPagesAsPatrolled') ) {
				thispage.patrol();
			}
 
			// Wrap SD template in noinclude tags if we are in template space.
			// Won't work with userboxes in userspace, or any other transcluded page outside template space
			if (mw.config.get('wgNamespaceNumber') === 10) {  // Template:
				code = "<noinclude>" + code + "</noinclude>";
			}
 
			// Remove tags that become superfluous with this action
			text = text.replace(/\{\{\s*([Nn]ew unreviewed article|[Uu]nreviewed|[Uu]serspace draft)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/g, "");
			if (mw.config.get('wgNamespaceNumber') === 6) {
				// 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, "");
			}
 
			// Generate edit summary for edit
			var editsummary;
			if (params.normalizeds.length > 1) {
				editsummary = 'درخواست حذف سریع (';
				$.each(params.normalizeds, function(index, norm) {
					editsummary += '[[اپ:محس#' + norm.toUpperCase() + '|محس ' + norm.toUpperCase() + ']], ';
				});
				editsummary = editsummary.substr(0, editsummary.length - 2); // remove trailing comma
				editsummary += ') نامزد حذف سریع است.';
			} else if (params.normalizeds[0] === "db") {
				editsummary = 'درخواست [[اپ:محس|حذف سریع]] با دلیل \"' + parameters["1"] + '\".';
			} else if (params.values[0] === "histmerge") {
				editsummary = "درخواست ادغام تاریخچه با [[" + parameters["1"] + "]] ([[اپ:محس#ع۶|محس ع۶]]).";
			} else {
				editsummary = "درخواست حذف سریع ([[اپ:محس#" + params.normalizeds[0].toUpperCase() + "|محس " + params.normalizeds[0].toUpperCase() + "]]).";
			}
 
			pageobj.setPageText(code + ((params.normalizeds.indexOf('ع۱۰') !== -1) ? '' : ("\n" + text) )); // cause attack pages to be blanked
			pageobj.setEditSummary(editsummary + Twinkle.getPref('summaryAd'));
			pageobj.setWatchlist(params.watch);
			pageobj.setCreateOption('nocreate');
			pageobj.save(Twinkle.speedy.callbacks.user.tagComplete);
		},
 
		tagComplete: function(pageobj) {
			var params = pageobj.getCallbackParameters();
 
			// Notification to first contributor
			if (params.usertalk) {
				var callback = function(pageobj) {
					var initialContrib = pageobj.getCreator();
 
					// disallow warning yourself
					if (initialContrib === mw.config.get('wgUserName')) {
						Morebits.status.warn("شما (" + initialContrib + ") این صفحه را ایجاد کردید؛ در حال لغوکردن اطلاع به کاربر");
 
					// don't notify users when their user talk page is nominated
					} else if (initialContrib === mw.config.get('wgTitle') && mw.config.get('wgNamespaceNumber') === 3) {
						Morebits.status.warn("در حال آگاه‌ساختن مشارکت‌کننده نخست: این کاربر صفحهٔ بحث کاربری خود را ایجاد کرد؛ در حال لغوکردن اطلاعیه");
 
					// quick hack to prevent excessive unwanted notifications, per request. Should actually be configurable on recipient page...
					} else if ((initialContrib === "Cyberbot I" || initialContrib === "SoxBot") && params.normalizeds[0] === "پ۲") {
						Morebits.status.warn("در حال آگاه‌ساختن مشارکت‌کننده نخست: صفحه توسط ربات رویه‌ای ایجاد شد؛ در حال لغوکردن اطلاعیه");
 
					} else {
						var usertalkpage = new Morebits.wiki.page('User talk:' + initialContrib, "در حال آگاه‌ساختن مشارکت‌کننده نخست (" + initialContrib + ")"),
							notifytext, i;
 
						// specialcase "db" and "db-multiple"
						if (params.normalizeds.length > 1) {
							notifytext = "\n{{جا:db-notice-multiple|1=" + Morebits.pageNameNorm;
							var count = 2;
							$.each(params.normalizeds, function(index, norm) {
								notifytext += "|" + (count++) + "=" + norm.toUpperCase();
							});
						} else if (params.normalizeds[0] === "db") {
							notifytext = "\n{{جا:db-reason-notice|1=" + Morebits.pageNameNorm;
						} else {
							notifytext = "\n{{جا:db-csd-notice-custom|1=" + Morebits.pageNameNorm + "|2=" + params.values[0];
						}
 
						for (i in params.utparams) {
							if (typeof params.utparams[i] === 'string') {
								notifytext += "|" + i + "=" + params.utparams[i];
							}
						}
						notifytext += (params.welcomeuser ? "" : "|nowelcome=yes") + "}} ~~~~";
 
						var editsummary = "اطلاعیه: نامزدی حذف سریع";
						if (params.normalizeds.indexOf("ع۱۰") === -1) {  // no article name in summary for G10 deletions
							editsummary += " [[" + Morebits.pageNameNorm + "]].";
						} else {
							editsummary += " یک صفحهٔ حمله.";
						}
 
						usertalkpage.setAppendText(notifytext);
						usertalkpage.setEditSummary(editsummary + Twinkle.getPref('summaryAd'));
						usertalkpage.setCreateOption('recreate');
						usertalkpage.setFollowRedirect(true);
						usertalkpage.append();
					}
 
					// add this nomination to the user's userspace log, if the user has enabled it
					if (params.lognomination) {
						Twinkle.speedy.callbacks.user.addToLog(params, initialContrib);
					}
				};
				var thispage = new Morebits.wiki.page(Morebits.pageNameNorm);
				thispage.lookupCreator(callback);
			}
			// or, if not notifying, add this nomination to the user's userspace log without the initial contributor's name
			else if (params.lognomination) {
				Twinkle.speedy.callbacks.user.addToLog(params, null);
			}
		},
 
		// note: this code is also invoked from twinkleimage
		// the params used are:
		//   for CSD: params.values, params.normalizeds  (note: normalizeds is an array)
		//   for DI: params.fromDI = true, params.type, params.normalized  (note: normalized is a string)
		addToLog: function(params, initialContrib) {
			var iranpedia_page = new Morebits.wiki.page("User:" + mw.config.get('wgUserName') + "/" + Twinkle.getPref('speedyLogPageName'), "در حال افزودن ورودی به سیاههٔ فضای کاربری");
			params.logInitialContrib = initialContrib;
			iranpedia_page.setCallbackParameters(params);
			iranpedia_page.load(Twinkle.speedy.callbacks.user.saveLog);
		},
 
		saveLog: function(pageobj) {
			var text = pageobj.getPageText();
			var params = pageobj.getCallbackParameters();
 
			var appendText = "";
 
			// add blurb if log page doesn't exist
			if (!pageobj.exists()) {
				appendText +=
					"This is a log of all [[اپ:محس|speedy deletion]] nominations made by this user using [[ip:TW|Twinkle]]'s CSD module.\n\n" +
					"If you no longer wish to keep this log, you can turn it off using the [[Iranpedia:Twinkle/Preferences|preferences panel]], and " +
					"nominate this page for speedy deletion under [[اپ:محس#ک۱|محس ک۱]].\n";
				if (Morebits.userIsInGroup("sysop")) {
					appendText += "\n\nاین سیاهه حذف‌های سریع کاملاً ایجادشده توسط توینکل را ردیابی نمی‌کند.";
				}
			}
 
			// create monthly header
			var date = new Date();
			var headerRe = new RegExp("^==+\\s*" + date.getUTCMonthName() + "\\s+" + date.getUTCFullYear() + "\\s*==+", "m");
			if (!headerRe.exec(text)) {
				appendText += "\n\n=== {{جا:CURRENTMONTHNAME}} {{جا:CURRENTYEAR}} ===";
			}
 
			appendText += "\n# [[:" + Morebits.pageNameNorm + "]]: ";
			if (params.fromDI) {
				appendText += "حپ [[اپ:محس#" + params.normalized.toUpperCase() + "|محس " + params.normalized.toUpperCase() + "]] (" + params.type + ")";
			} else {
				if (params.normalizeds.length > 1) {
					appendText += "معیارهای چندگانه (";
					$.each(params.normalizeds, function(index, norm) {
						appendText += "[[اپ:محس#" + norm.toUpperCase() + "|" + norm.toUpperCase() + ']]، ';
					});
					appendText = appendText.substr(0, appendText.length - 2);  // remove trailing comma
					appendText += ')';
				} else if (params.normalizeds[0] === "db") {
					appendText += "{{tl|db-reason}}";
				} else {
					appendText += "[[اپ:محس#" + params.normalizeds[0].toUpperCase() + "|محس " + params.normalizeds[0].toUpperCase() + "]] ({{tl|db-" + params.values[0] + "}})";
				}
			}
 
			if (params.logInitialContrib) {
				appendText += "؛ {{user|1=" + params.logInitialContrib + "}} آگاه شد";
			}
			appendText += " ~~~~~\n";
 
			pageobj.setAppendText(appendText);
			pageobj.setEditSummary("ثبت درخواست حذف سریع [[" + Morebits.pageNameNorm + "]]." + Twinkle.getPref('summaryAd'));
			pageobj.setCreateOption("recreate");
			pageobj.append();
		}
	}
};
 
// validate subgroups in the form passed into the speedy deletion tag
Twinkle.speedy.getParameters = function twinklespeedyGetParameters(form, values) {
	var parameters = [];
 
	$.each(values, function(index, value) {
		var currentParams = [];
		switch (value) {
			case 'reason':
				if (form["csd.reason_1"]) {
					var dbrationale = form["csd.reason_1"].value;
					if (!dbrationale || !dbrationale.trim()) {
						alert( 'دلیل سفارشی:  لطفاً دلیل منطقی آن را ذکر کنید.' );
						parameters = null;
						return false;
					}
					currentParams["1"] = dbrationale;
				}
				break;
 
			case 'userreq':  // U1
				if (form["csd.userreq_rationale"]) {
					var u1rationale = form["csd.userreq_rationale"].value;
					if (mw.config.get('wgNamespaceNumber') === 3 && !((/\//).test(mw.config.get('wgTitle'))) &&
							(!u1rationale || !u1rationale.trim())) {
						alert( 'محس ک۱:  لطفاً هنگام نامزدکردن صفحه‌های بحث کاربری دلیل خود را ذکر کنید.' );
						parameters = null;
						return false;
					}
					currentParams.rationale = u1rationale;
				}
				break;
 
			case 'repost':  // G4
				if (form["csd.repost_1"]) {
					var deldisc = form["csd.repost_1"].value;
					if (deldisc) {
						if (deldisc.substring(0, 9) !== "ایران‌پدیا" && deldisc.substring(0, 3) !== "اپ:") {
							alert( 'محس ع۴:  نام صفحهٔ نظرخواهی برای حذف، درصورتی که ذکر شود، باید با "ایران‌پدیا:" آغاز شده باشد.' );
							parameters = null;
							return false;
						}
						currentParams["1"] = deldisc;
					}
				}
				break;
 
			case 'banned':  // G5
				if (form["csd.banned_1"] && form["csd.banned_1"].value) {
					currentParams["1"] = form["csd.banned_1"].value.replace(/^\s*(User|کاربر):/i, "");
				}
				break;
 
			case 'histmerge':  // G6
				if (form["csd.histmerge_1"]) {
					var merger = form["csd.histmerge_1"].value;
					if (!merger || !merger.trim()) {
						alert( 'محس ع۶ (ادغام تاریخچه):  لطفاً صفحهٔ مقصد ادغام را مشخص کنید.' );
						parameters = null;
						return false;
					}
					currentParams["1"] = merger;
				}
				break;
 
			case 'move':  // G6
				if (form["csd.move_1"] && form["csd.move_2"]) {
					var movepage = form["csd.move_1"].value,
						movereason = form["csd.move_2"].value;
					if (!movepage || !movepage.trim()) {
						alert( 'محس ع۶ (انتقال):  لطفاً صفحه‌ای که قرار است به اینجا منتقل شود را ذکر کنید.' );
						parameters = null;
						return false;
					}
					if (!movereason || !movereason.trim()) {
						alert( 'محس ع۶ (انتقال):  لطفاً دلیل انتقال را ذکر کنید.' );
						parameters = null;
						return false;
					}
					currentParams["1"] = movepage;
					currentParams["2"] = movereason;
				}
				break;
 
			case 'xfd':  // G6
				if (form["csd.xfd_fullvotepage"]) {
					var xfd = form["csd.xfd_fullvotepage"].value;
					if (xfd) {
						if (xfd.substring(0, 9) !== "ایران‌پدیا" && xfd.substring(0, 3) !== "اپ:") {
							alert( 'محس ع۶ (نبح):  صفحهٔ نظرخواهی، در صورتی که ذکر شود، باید با "ایران‌پدیا:" آغاز شده باشد.' );
							parameters = null;
							return false;
						}
						currentParams.fullvotepage = xfd;
					}
				}
				break;
 
			case 'copypaste':  // G6
				if (form["csd.copypaste_1"]) {
					var copypaste = form["csd.copypaste_1"].value;
					if (!copypaste || !copypaste.trim()) {
						alert( 'محس ع۶ (رونوشت‌برداری و چسباندن): لطفاً نام صفحهٔ منبع را مشخص کنید.' );
						parameters = null;
						return false;
					}
					currentParams["1"] = copypaste;
				}
				break;
 
			case 'ع۶':  // G6
				if (form["csd.g6_rationale"] && form["csd.g6_rationale"].value) {
					currentParams.rationale = form["csd.g6_rationale"].value;
				}
				break;
 
			case 'author':  // G7
				if (form["csd.author_rationale"] && form["csd.author_rationale"].value) {
					currentParams.rationale = form["csd.author_rationale"].value;
				}
				break;
 
			case 'ع۸':  // G8
				if (form["csd.g8_rationale"] && form["csd.g8_rationale"].value) {
					currentParams.rationale = form["csd.g8_rationale"].value;
				}
				break;
 
			case 'attack':  // G10
				currentParams.blanked = 'yes';
				// it is actually blanked elsewhere in code, but setting the flag here
				break;
 
			case 'copyvio':  // G12
				if (form["csd.copyvio_url"] && form["csd.copyvio_url"].value) {
					currentParams.url = form["csd.copyvio_url"].value;
				}
				if (form["csd.copyvio_url2"] && form["csd.copyvio_url2"].value) {
					currentParams.url2 = form["csd.copyvio_url2"].value;
				}
				if (form["csd.copyvio_url3"] && form["csd.copyvio_url3"].value) {
					currentParams.url3 = form["csd.copyvio_url3"].value;
				}
				break;
 
			case 'afc':  // G13
				var query = {
							action: "query",
							titles: mw.config.get("wgPageName"),
							prop: "revisions",
							rvprop: "timestamp"
						},
						api = new Morebits.wiki.api( 'در حال گرفتن برچسب زمانی آخرین بازبینی', query, function( apiobj ) {
							var xmlDoc = apiobj.getXML(),
									isoDateString = $(xmlDoc).find("rev").attr("timestamp");
 
							currentParams.ts = isoDateString;
						});
 
				// Wait for API call to finish
				api.post({
					async: false
				});
 
				break;
 
			case 'redundantimage':  // F1
				if (form["csd.redundantimage_filename"]) {
					var redimage = form["csd.redundantimage_filename"].value;
					if (!redimage || !redimage.trim()) {
						alert( 'محس پ۱:  لطفاً نام آن پروندهٔ دیگر را ذکر کنید.' );
						parameters = null;
						return false;
					}
					currentParams.filename = redimage.replace(/^\s*(Image|File):/i, "");
				}
				break;
 
			case 'badfairuse':  // F7
				if (form["csd.badfairuse_reason"] && form["csd.badfairuse_reason"].value) {
					currentParams.reason = form["csd.badfairuse_reason"].value;
				}
				break;
 
			case 'nowcommons':  // F8
				if (form["csd.nowcommons_filename"]) {
					var filename = form["csd.nowcommons_filename"].value;
					if (filename && filename !== Morebits.pageNameNorm) {
						if (filename.indexOf("Image:") === 0 || filename.indexOf("File:") === 0) {
							currentParams["1"] = filename;
						} else {
							currentParams["1"] = "File:" + filename;
						}
					}
				}
				currentParams.date = "~~~~~";
				break;
 
			case 'imgcopyvio':  // F9
				if (form["csd.imgcopyvio_url"] && form["csd.imgcopyvio_url"].value) {
					currentParams.url = form["csd.imgcopyvio_url"].value;
				}
				break;
 
			case 'foreign':  // A2
				if (form["csd.foreign_source"]) {
					var foreignlink = form["csd.foreign_source"].value;
					if (!foreignlink || !foreignlink.trim()) {
						alert( 'محس م۲:  لطفاً میان‌ویکی مقاله‌ای که این مقاله رونوشتی از آن است را ذکر کنید.' );
						parameters = null;
						return false;
					}
					currentParams.source = foreignlink;
				}
				break;
 
			case 'م۱۰':  // A10
				if (form["csd.a10_article"]) {
					var duptitle = form["csd.a10_article"].value;
					if (!duptitle || !duptitle.trim()) {
						alert( 'محس م۱۰:  لطفاً نام مقاله‌ای که تکرار شده است را ذکر کنید.' );
						parameters = null;
						return false;
					}
					currentParams.article = duptitle;
				}
				break;
 
			case 'duplicatetemplate':  // T3
				if (form["csd.duplicatetemplate_2"]) {
					var t3template = form["csd.duplicatetemplate_2"].value;
					if (!t3template || !t3template.trim()) {
						alert( 'محس ت۳:  لطفاً نام الگویی که این الگو تکرار آن است را ذکر کنید.' );
						parameters = null;
						return false;
					}
					currentParams["1"] = "~~~~~";
					currentParams["2"] = t3template.replace(/^\s*(Template|الگو):/i, "");
				}
				break;
 
			case 'ا۳':  // T3
				if (form["csd.t3_rationale"]) {
					var t3rationale = form["csd.t3_rationale"].value;
					if (!t3rationale || !t3rationale.trim()) {
						alert( 'محس ت۳:  لطفاً دلیلتان را ذکر کنید.' );
						parameters = null;
						return false;
					}
					currentParams["1"] = "~~~~~";
					currentParams.rationale = t3rationale;
				}
				break;
 
			case 'د۱':  // P1
				if (form["csd.p1_criterion"]) {
					var criterion = form["csd.p1_criterion"].value;
					if (!criterion || !criterion.trim()) {
						alert( 'محس د۱:  لطفاً یک معیار یا دلیل مشخص خود را ذکر کنید.' );
						parameters = null;
						return false;
					}
					currentParams["1"] = criterion;
				}
				break;
 
			default:
				break;
		}
		parameters.push(currentParams);
	});
	return parameters;
};
 
// function for processing talk page notification template parameters
Twinkle.speedy.getUserTalkParameters = function twinklespeedyGetUserTalkParameters(normalized, parameters) {
	var utparams = [];
	switch (normalized) {
		case 'db':
			utparams["2"] = parameters["1"];
			break;
		case 'ع۱۲':
			utparams.key1 = "url";
			utparams.value1 = utparams.url = parameters.url;
			break;
		case 'م۱۰':
			utparams.key1 = "article";
			utparams.value1 = utparams.article = parameters.article;
			break;
		default:
			break;
	}
	return utparams;
};
 
 
Twinkle.speedy.resolveCsdValues = function twinklespeedyResolveCsdValues(e) {
	var values = (e.target.form ? e.target.form : e.target).getChecked('csd');
	if (values.length === 0) {
		alert( "لطفاً یک معیار انتخاب کنید!" );
		return null;
	}
	return values;
};
 
Twinkle.speedy.callback.evaluateSysop = function twinklespeedyCallbackEvaluateSysop(e) {
	var form = (e.target.form ? e.target.form : e.target);
 
	var tag_only = form.tag_only;
	if( tag_only && tag_only.checked ) {
		Twinkle.speedy.callback.evaluateUser(e);
		return;
	}
 
	var value = Twinkle.speedy.resolveCsdValues(e)[0];
	if (!value) {
		return;
	}
	var normalized = Twinkle.speedy.normalizeHash[ value ];
 
	var params = {
		value: value,
		normalized: normalized,
		watch: Twinkle.getPref('watchSpeedyPages').indexOf( normalized ) !== -1,
		reason: Twinkle.speedy.reasonHash[ value ],
		openusertalk: Twinkle.getPref('openUserTalkPageOnSpeedyDelete').indexOf( normalized ) !== -1,
		deleteTalkPage: form.talkpage && form.talkpage.checked,
		deleteRedirects: form.redirects.checked
	};
 
	Morebits.simpleWindow.setButtonsEnabled( false );
	Morebits.status.init( form );
 
	Twinkle.speedy.callbacks.sysop.main( params );
};
 
Twinkle.speedy.callback.evaluateUser = function twinklespeedyCallbackEvaluateUser(e) {
	var form = (e.target.form ? e.target.form : e.target);
 
	if (e.target.type === "checkbox" || e.target.type === "text" || 
			e.target.type === "select") {
		return;
	}
 
	var values = Twinkle.speedy.resolveCsdValues(e);
	if (!values) {
		return;
	}
	//var multiple = form.multiple.checked;
	var normalizeds = [];
	$.each(values, function(index, value) {
		var norm = Twinkle.speedy.normalizeHash[ value ];
 
		normalizeds.push(norm);
	});
 
	// analyse each criterion to determine whether to watch the page/notify the creator
	var watchPage = false;
	$.each(normalizeds, function(index, norm) {
		if (Twinkle.getPref('watchSpeedyPages').indexOf(norm) !== -1) {
			watchPage = true;
			return false;  // break
		}
	});
 
	var notifyuser = false;
	if (form.notify.checked) {
		$.each(normalizeds, function(index, norm) {
			if (Twinkle.getPref('notifyUserOnSpeedyDeletionNomination').indexOf(norm) !== -1) {
				if (norm === 'ع۶' && ['disambig', 'copypaste'].indexOf(values[index]) === -1) {
					return true;
				}
				notifyuser = true;
				return false;  // break
			}
		});
	}
 
	var welcomeuser = false;
	if (notifyuser) {
		$.each(normalizeds, function(index, norm) {
			if (Twinkle.getPref('welcomeUserOnSpeedyDeletionNotification').indexOf(norm) !== -1) {
				welcomeuser = true;
				return false;  // break
			}
		});
	}
 
	var csdlog = false;
	if (Twinkle.getPref('logSpeedyNominations')) {
		$.each(normalizeds, function(index, norm) {
			if (Twinkle.getPref('noLogOnSpeedyNomination').indexOf(norm) === -1) {
				csdlog = true;
				return false;  // break
			}
		});
	}
 
	var params = {
		values: values,
		normalizeds: normalizeds,
		watch: watchPage,
		usertalk: notifyuser,
		welcomeuser: welcomeuser,
		lognomination: csdlog,
		templateParams: Twinkle.speedy.getParameters( form, values )
	};
	if (!params.templateParams) {
		return;
	}
 
	Morebits.simpleWindow.setButtonsEnabled( false );
	Morebits.status.init( form );
 
	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
	Morebits.wiki.actionCompleted.notice = "برچسب‌زدن کامل شد";
 
	var iranpedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), "در حال برچسب‌زدن به صفحه");
	iranpedia_page.setCallbackParameters(params);
	iranpedia_page.load(Twinkle.speedy.callbacks.user.main);
};
})(jQuery);
 
 
//</nowiki>