मेडियाविकि:Gadget-twinklespeedy.js

मैथिली विकिपिडियासँ, एक मुक्त विश्वकोश

टिप्पणी: संरक्षणक बाद, अहाँक परिवर्तन देखबा लेल अपन ब्राउजरक उपस्मृतिक हटबए पडत। फायरफक्स/ सफारी: सिफ्टके दाबि रिलोड, वा Ctrl-F5 वा Ctrl-R (म्याकपर ⌘-R) गुगल क्रोम: Ctrl-Shift-R दाबी(म्याकपर ⌘-Shift-R) इन्टरनेट एक्सप्लोरर: Refresh क्लिक करि Ctrl दाबि, वा Ctrl-F5 दाबी ओपेरा: Menu → Settings पर जाए (म्याकपर Opera → Preferences) आ ओकर बाद Privacy & security → Clear browsing data → Cached images and files

// <nowiki>


(function($) {


/*
 ****************************************
 *** twinklespeedy.js: CSD module
 ****************************************
 * Mode of invocation:     Tab ("शीमे")
 * Active on:              Non-special, existing pages
 *
 * 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.userIsSysop ? 'वि:शीमे अनुसार पृष्ठ मेटाबी' : 'वि:शीमे अनुसार शीघ्र मेटेबाक अनुरोध करी');
};

// This function is run when the CSD tab/header link is clicked
Twinkle.speedy.callback = function twinklespeedyCallback() {
	Twinkle.speedy.initDialog(Morebits.userIsSysop ? Twinkle.speedy.callback.evaluateSysop : Twinkle.speedy.callback.evaluateUser, true);
};

// Used by unlink feature
Twinkle.speedy.dialog = null;
// Used throughout
Twinkle.speedy.hasCSD = !!$('#delete-reason').length;

// 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('शीमे खासमखास', 'विकिपिडिया:ट्विङ्कल/अभिरुचीसभ#शीमे');
	dialog.addFooterLink('ट्विङ्कल सहायता', 'वि:ट्विङ्कल/दस्तावेज#शीघ्र');
	dialog.addFooterLink('प्रतिक्रिया दी', 'विकिपिडिया वार्ता:ट्विङ्कल');

	var form = new Morebits.quickForm(callbackfunc, Twinkle.getPref('speedySelectionStyle') === 'radioClick' ? 'change' : null);
	if (Morebits.userIsSysop) {
		form.append({
			type: 'checkbox',
			list: [
				{
					label: 'पृष्ठ चिह्नित मात्र करी, नै मेटाबी',
					value: 'tag_only',
					name: 'tag_only',
					tooltip: 'अहाँ एखन तुरत्ते मेटेबाक बदला, एहि पृष्ठ केर चिह्नित करऽ लेल चाहैत छी तँ',
					checked: !(Twinkle.speedy.hasCSD || Twinkle.getPref('deleteSysopDefaultToDelete')),
					event: function(event) {
						var cForm = event.target.form;
						var cChecked = event.target.checked;
						// enable talk page checkbox
						if (cForm.talkpage) {
							cForm.talkpage.checked = !cChecked && Twinkle.getPref('deleteTalkPageOnDelete');
						}
						// enable redirects checkbox
						cForm.redirects.checked = !cChecked;
						// enable delete multiple
						cForm.delmultiple.checked = false;
						// enable notify checkbox
						cForm.notify.checked = cChecked;
						// enable deletion notification checkbox
						cForm.warnusertalk.checked = !cChecked && !Twinkle.speedy.hasCSD;
						// enable multiple
						cForm.multiple.checked = false;
						// enable requesting creation protection
						cForm.salting.checked = false;

						Twinkle.speedy.callback.modeChanged(cForm);

						event.stopPropagation();
					}
				}
			]
		});

		var deleteOptions = form.append({
			type: 'div',
			name: 'delete_options'
		});
		deleteOptions.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
			deleteOptions.append({
				type: 'checkbox',
				list: [
					{
						label: 'वार्ता पृष्ठ सेहो मेटाबी',
						value: 'talkpage',
						name: 'talkpage',
						tooltip: "ई विकल्पद्वारा पृष्ठक वार्ता पृष्ठकेँ मेटाए देल जाएत अछि। यदि अहाँ मापदण्ड फा८ चयन करब तँ (कमन्समे घसकाएल), ई विकल्पकेँ बेवास्ता कएल जाएत अछि आ वार्ता पृष्ठकेँ *नै मेटबैत अछि*।",
						checked: Twinkle.getPref('deleteTalkPageOnDelete'),
						event: function(event) {
							event.stopPropagation();
						}
					}
				]
			});
		}
		deleteOptions.append({
			type: 'checkbox',
			list: [
				{
					label: 'सम्पूर्ण अनुप्रेषणसभ सेहो मेटाबी',
					value: 'redirects',
					name: 'redirects',
					tooltip: 'ई विकल्पद्वारा आगमनक अतिरिक्त सम्पूर्ण अनुप्रेषणसभ मेटाएत। प्रक्रियागत कदमक लेल (जेना घसकाब/समायोजन करऽकऽ लेल) ई विकल्प बेवास्ता करी।',
					checked: Twinkle.getPref('deleteRedirectsOnDelete'),
					event: function (event) {
						event.stopPropagation();
					}
				},
				{
					label: 'विविध मापदण्ड अन्तर्गत मेटाबी',
					value: 'delmultiple',
					name: 'delmultiple',
					tooltip: 'जब चयन कएल जाएत, अहाँ पृष्ठमे लागू होमए वला बहुतेक मापदण्डसभ चयन कऽ सकैत छी। उदाहरणक लेल सा११ आ ले७ लेखक लेल साझा संयोजन छी।',
					event: function(event) {
						Twinkle.speedy.callback.modeChanged(event.target.form);
						event.stopPropagation();
					}
				},
				{
					label: 'यदि सम्भव होए तहन पृष्ठ सृजनाकर्ताकेँ सूचित करी',
					value: 'warnusertalk',
					name: 'warnusertalk',
					tooltip: 'एक अधिसूचना आकृति सृजनाकर्ताक वार्ता पृष्ठमे राखि देत, यदि अहाँ अप्पन ट्विङ्कलक अभिरुचीमे अधिसूचना सक्षम केनए छी तहन ' +
						'अहाँद्वारा चयन कएल मापदण्डक लेल आ ई बक्सा जाँच कएल गेला पर। सृजनाकर्ताकेँ स्वागत सेहो कएल जा सकैत अछि।',
					checked: !Twinkle.speedy.hasCSD,
					event: function(event) {
						event.stopPropagation();
					}
				}
			]
		});
	}

	var tagOptions = form.append({
		type: 'div',
		name: 'tag_options'
	});

	if (Morebits.userIsSysop) {
		tagOptions.append({
			type: 'header',
			label: 'चिह्न-सम्बन्धित विकल्पसभ'
		});
	}

	tagOptions.append({
		type: 'checkbox',
		list: [
			{
				label: 'यदि सम्भव होए तहन पृष्ठ सृजनाकर्ताकेँ सूचित करी',
				value: 'notify',
				name: 'notify',
				tooltip: 'एक अधिसूचना आकृति सृजनाकर्ताक वार्ता पृष्ठमे राखि देत, यदि अहाँ अप्पन ट्विङ्कलक अभिरुचीमे अधिसूचना सक्षम केनए छी तहन ' +
						'अहाँद्वारा चयन कएल मापदण्डक लेल आ ई बक्सा जाँच कएल गेला पर। सृजनाकर्ताकेँ स्वागत सेहो कएल जा सकैत अछि।',
				checked: !Morebits.userIsSysop || !(Twinkle.speedy.hasCSD || Twinkle.getPref('deleteSysopDefaultToDelete')),
				event: function(event) {
					event.stopPropagation();
				}
			},
			{
				label: 'सृजना सुरक्षा सङ्गे (सल्टिङ) चिन्ह',
				value: 'salting',
				name: 'salting',
				tooltip: 'जखन चुनाव कएल जाएत अछि, शीघ्र मेटेबाक चिन्ह सङ्गे पृष्ठ मेटाबऽवला प्रशासक पृष्ठ सृजना सुरक्षा करऽकऽ लेल {{salt}} चिन्ह लगा सकैत अछि। यदि ई पृष्ठ बारम्बार पुनः सृजना कएल गेल होए तहने टा चयन करी।',
				event: function(event) {
					event.stopPropagation();
				}
			},
			{
				label: 'विविध मापदण्डसहित चिन्ह लगाबी',
				value: 'multiple',
				name: 'multiple',
				tooltip: 'जब चयन कएल जाएत, अहाँ पृष्ठमे लागू होमए वला बहुतेक मापदण्डसभ चयन कऽ सकैत छी। उदाहरणक लेल सा११ आ ले७ लेखक लेल साझा संयोजन छी',
				event: function(event) {
					Twinkle.speedy.callback.modeChanged(event.target.form);
					event.stopPropagation();
				}
			}
		]
	});

	form.append({
		type: 'div',
		id: 'prior-deletion-count',
		style: 'font-style: italic'
	});

	form.append({
		type: 'div',
		name: 'work_area',
		label: 'शीमे मोड्युल आरम्भ गर्न असफल भयो। कृपया फेरि प्रयास गर्नुहोस्, वा त्रुटिको बारेमा ट्विङ्कल विकासकर्ता वा स्थानीय प्रबन्धकहरूलाई बताउनुहोस्।'
	});

	if (Twinkle.getPref('speedySelectionStyle') !== 'radioClick') {
		form.append({ type: 'submit', className: 'tw-speedy-submit' }); // Renamed in modeChanged
	}

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

	Twinkle.speedy.callback.modeChanged(result);

	// Check for prior deletions.  Just once, upon init
	Twinkle.speedy.callback.priorDeletionCount();
};

Twinkle.speedy.callback.modeChanged = function twinklespeedyCallbackModeChanged(form) {
	var namespace = mw.config.get('wgNamespaceNumber');

	// first figure out what mode we're in
	var mode = {
		isSysop: !!form.tag_only && !form.tag_only.checked,
		isMultiple: form.tag_only && !form.tag_only.checked ? form.delmultiple.checked : form.multiple.checked,
		isRadioClick: Twinkle.getPref('speedySelectionStyle') === 'radioClick'
	};

	if (mode.isSysop) {
		$('[name=delete_options]').show();
		$('[name=tag_options]').hide();
		$('button.tw-speedy-submit').text('पृष्ठ मेटाउने');
	} else {
		$('[name=delete_options]').hide();
		$('[name=tag_options]').show();
		$('button.tw-speedy-submit').text('पृष्ठमा चिनो लगाउने');
	}

	var work_area = new Morebits.quickForm.element({
		type: 'div',
		name: 'work_area'
	});

	if (mode.isMultiple && mode.isRadioClick) {
		var evaluateType = mode.isSysop ? 'evaluateSysop' : 'evaluateUser';

		work_area.append({
			type: 'div',
			label: 'मापदण्ड छनौट गरेपछि, निम्न चयन गर्नुहोस्:'
		});
		work_area.append({
			type: 'button',
			name: 'submit-multiple',
			label: mode.isSysop ? 'पृष्ठ मेटाउने' : 'पृष्ठमा चिनो लगाउने',
			event: function(event) {
				Twinkle.speedy.callback[evaluateType](event);
				event.stopPropagation();
			}
		});
	}

	var appendList = function(headerLabel, csdList) {
		work_area.append({ type: 'header', label: headerLabel });
		work_area.append({ type: mode.isMultiple ? 'checkbox' : 'radio', name: 'csd', list: Twinkle.speedy.generateCsdList(csdList, mode) });
	};

	if (mode.isSysop && !mode.isMultiple) {
		appendList('अनुकूलन कारण', Twinkle.speedy.customRationale);
	}

	if (namespace % 2 === 1 && namespace !== 3) {
		// show db-talk on talk pages, but not user talk pages
		appendList('वार्ता पृष्ठहरू', Twinkle.speedy.talkList);
	}

	if (!Morebits.isPageRedirect()) {
		switch (namespace) {
			case 0:  // article
			case 1:  // talk
				appendList('लेखहरू', Twinkle.speedy.articleList);
				break;

			case 2:  // user
			case 3:  // user talk
				appendList('प्रयोगकर्ता पृष्ठहरू', Twinkle.speedy.userList);
				break;

			case 6:  // file
			case 7:  // file talk
				appendList('चित्रहरू', Twinkle.speedy.fileList);
				if (!mode.isSysop) {
					work_area.append({ type: 'div', label: 'शीमे फा४ (कुनै प्रतिलिपि अधिकार नभएको), फा५ (अनाथ उचित उपयोग), फा६ (उचित उपयोग तर्क नभएको), र फा११ (अनुमति नभएको) को लागि चिह्नित गर्न ट्विङ्कलको "डिआई" ट्याब प्रयोग गरि गर्न सकिन्छ।' });
				}
				break;

			case 14:  // category
			case 15:  // category talk
				appendList('श्रेणीहरू', Twinkle.speedy.categoryList);
				break;

			case 100:  // portal
			case 101:  // portal talk
				appendList('पोर्टलहरू', Twinkle.speedy.portalList);
				break;

			default:
				break;
		}
	} else {
		if (namespace === 2 || namespace === 3) {
			appendList('प्रयोगकर्ता पृष्ठहरू', Twinkle.speedy.userList);
		}
		appendList('अनुप्रेषणहरू', Twinkle.speedy.redirectList);
	}

	var generalCriteria = Twinkle.speedy.generalList;

	// custom rationale lives under general criteria when tagging
	if (!mode.isSysop) {
		generalCriteria = Twinkle.speedy.customRationale.concat(generalCriteria);
	}
	appendList('सामान्य मापदण्ड', generalCriteria);

	var old_area = Morebits.quickForm.getElements(form, 'work_area')[0];
	form.replaceChild(work_area.render(), old_area);

	// if sysop, check if CSD is already on the page and fill in custom rationale
	if (mode.isSysop && Twinkle.speedy.hasCSD) {
		var customOption = $('input[name=csd][value=reason]')[0];
		if (customOption) {
			if (Twinkle.getPref('speedySelectionStyle') !== 'radioClick') {
				// force listeners to re-init
				customOption.click();
				customOption.parentNode.appendChild(customOption.subgroup);
			}
			customOption.subgroup.querySelector('input').value = decodeURIComponent($('#delete-reason').text()).replace(/\+/g, ' ');
		}
	}
};

Twinkle.speedy.callback.priorDeletionCount = function () {
	var query = {
		action: 'query',
		format: 'json',
		list: 'logevents',
		letype: 'delete',
		leaction: 'delete/delete', // Just pure page deletion, no redirect overwrites or revdel
		letitle: mw.config.get('wgPageName'),
		leprop: '', // We're just counting we don't actually care about the entries
		lelimit: 5  // A little bit goes a long way
	};

	new Morebits.wiki.api('Checking for past deletions', query, function(apiobj) {
		var response = apiobj.getResponse();
		var delCount = response.query.logevents.length;
		if (delCount) {
			var message = delCount + ' previous deletion';
			if (delCount > 1) {
				message += 's';
				if (response.continue) {
					message = 'More than ' + message;
				}

				// 3+ seems problematic
				if (delCount >= 3) {
					$('#prior-deletion-count').css('color', 'red');
				}
			}

			// Provide a link to page logs (CSD templates have one for sysops)
			var link = Morebits.htmlNode('a', '(logs)');
			link.setAttribute('href', mw.util.getUrl('Special:Log', {page: mw.config.get('wgPageName')}));
			link.setAttribute('target', '_blank');

			$('#prior-deletion-count').text(message + ' '); // Space before log link
			$('#prior-deletion-count').append(link);
		}
	}).post();
};


Twinkle.speedy.generateCsdList = function twinklespeedyGenerateCsdList(list, mode) {

	var pageNamespace = mw.config.get('wgNamespaceNumber');

	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) {
		var evaluateType = mode.isSysop ? 'evaluateSysop' : 'evaluateUser';
		Twinkle.speedy.callback[evaluateType](e);
		e.stopPropagation();
	};

	return $.map(list, function(critElement) {
		var criterion = $.extend({}, critElement);

		if (mode.isMultiple) {
			if (criterion.hideWhenMultiple) {
				return null;
			}
			if (criterion.hideSubgroupWhenMultiple) {
				criterion.subgroup = null;
			}
		} else {
			if (criterion.hideWhenSingle) {
				return null;
			}
			if (criterion.hideSubgroupWhenSingle) {
				criterion.subgroup = null;
			}
		}

		if (mode.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 (Morebits.isPageRedirect() && criterion.hideWhenRedirect) {
			return null;
		}

		if (criterion.showInNamespaces && criterion.showInNamespaces.indexOf(pageNamespace) < 0) {
			return null;
		}
		if (criterion.hideInNamespaces && criterion.hideInNamespaces.indexOf(pageNamespace) > -1) {
			return null;
		}

		if (criterion.subgroup && !mode.isMultiple && mode.isRadioClick) {
			if (Array.isArray(criterion.subgroup)) {
				criterion.subgroup = criterion.subgroup.concat({
					type: 'button',
					name: 'submit',
					label: mode.isSysop ? 'पृष्ठ मेटाउने' : 'पृष्ठमा चिनो लगाउने',
					event: submitSubgroupHandler
				});
			} else {
				criterion.subgroup = [
					criterion.subgroup,
					{
						type: 'button',
						name: 'submit',  // ends up being called "csd.submit" so this is OK
						label: mode.isSysop ? 'पृष्ठ मेटाउने' : 'पृष्ठमा चिनो लगाउने',
						event: submitSubgroupHandler
					}
				];
			}
			// FIXME: does this do anything?
			criterion.event = openSubgroupHandler;
		}

		return criterion;
	});
};

Twinkle.speedy.customRationale = [
	{
		label: 'अनुकूलन कारण' + (Morebits.userIsSysop ? ' (मेटाउने अनुकूलन कारण)' : ' {{शीमे}} ढाँचाको प्रयोग'),
		value: 'reason',
		tooltip: '{{शीमे}} "मेटाउने किनभने"को छोटो रूप हो। कम्तिमा अन्य हटाउने मापदण्ड मध्ये एक अझै पनि पृष्ठमा लागू हुनुपर्दछ, र तपाईंले आफ्नो तर्कमा यो उल्लेख गर्नुपर्दछ। यो "सबै-समेटने" होइन जब तपाईंले कुनै पनि मापदण्ड फेला पार्न सक्नुहुन्न।',
		subgroup: {
			name: 'reason_1',
			type: 'input',
			label: 'कारण:',
			size: 60
		},
		hideWhenMultiple: true
	}
];

Twinkle.speedy.talkList = [
	{
		label: 'सा८: कुनै सम्बन्धित विषय पृष्ठ बिनाका वार्ता पृष्ठहरू',
		value: 'talk',
		tooltip: 'प्रयोगकर्ता वार्तापृष्ठहरू, कुराकानी अभिलेख पृष्ठहरू, भविष्यका लागि जानकारी लेख, आदि जस्ता उपयोगी पृष्ठहरू यस मापदण्दमा पर्दैनन्।'
	}
];

Twinkle.speedy.fileList = [
	{
		label: 'फा१: अनावश्यक फाइल',
		value: 'redundantimage',
		tooltip: 'यो मापदण्ड अन्तर्गत अनावश्यक/प्रयुक्त/निरर्थक/व्यर्थ प्रतिलिपि वा कम रिजोल्युसन तस्विरहरू जुन अर्को विकिपिडियामा फाइलको प्रयोग भइसकेको फाइलहरूमा लागू हुन्छ। यसले विकिमिडिया कमन्समा रहेका तस्विरहरू समावेश गर्दैन; यसका लागि, {{subst:ncd|Image:newname.ext}} वा {{subst:ncd}} चिनोहरू लगाउनु उपयुक्त हुन्छ।',
		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: 'f5',
		tooltip: 'यो मापदण्ड अन्तर्गत नि:शुल्क इजाजतपत्र वा सार्वजनिक डोमेन नरहि कुनैपनि लेखमा प्रयोग नभएका तस्विरहरू तथा अन्य मिडियाहरूमा लागू हुन्छ। यो सात दिन भन्दा बढीको लागि अनाथ भएको पहिचान पछि मेटिने छ। मिडिया फाइलहरूको प्रयोग मेटाइएको लेखमा भएको छ भने तुरुन्तै मेटिने छ भने यसमा मिडिया फाइलहरूको अघिल्लो संशोधन समावेश हुन्छ। अन्य लेखका लागि अपलोड गरिएको तस्विरहरूको उचित अपवादहरू सृजना गर्न सकिन्छ।',
		hideWhenUser: true
	},
	{
		label: 'फा६: गैर-मुक्त उपयोग तर्क छुटेको',
		value: 'norat',
		tooltip: 'यो मापदण्ड अन्तर्गत उचित प्रयोगको दावी भएका तर प्रयोगको तर्क नभएका गैर-मुक्त फाइलहरूमा लागू हुन्छ। यो सात दिन भन्दा बढी प्रयोगको तर्क नभएका गैर-मुक्त फाइलहरूको पहिचान पछि मेटिने छ। बोइलरप्लेटले उचित उपयोग मापदण्डहरू सेटअप गर्ने प्रतिलिपि चिनो तर्कको आधार बनाउँदैन। यो मापदण्डले तर्कको प्रयोगको स्थितिमा लागू नगरि विवाद सृजना गर्दछ।',
		hideWhenUser: true
	},
	{
		label: 'फा७: गैर-मुक्त सामग्री स्पष्ट रूपमा निष्पक्ष-प्रयोग चिह्नित गरिएको',
		value: 'badfairuse',
		tooltip: 'गैर-मुक्त सामग्री स्पष्ट रूपमा निष्पक्ष-प्रयोग चिनो लगाइएको। गैर-मुक्त फाइल व्यापारिक स्रोतबाट, (जस्तै सम्बद्ध प्रेस, गेटी) लिइएको, जहाँ फाइल आफ्नो विषयको स्रोत नभएको।',
		subgroup: {
			name: 'badfairuse_rationale',
			type: 'input',
			label: 'वैकल्पिक व्याख्या:',
			size: 60
		},
		hideWhenMultiple: true
	},
	{
		label: 'फा८: तस्विर विकिमिडिया कमन्समा समान प्रतिलिपिहरूको रूपमा उपलब्ध',
		value: 'commons',
		tooltip: 'निम्न शर्तहरू पूरा गरेमा: १: कमन्स संस्करण एउटै फाइल ढाँचामा छ र सोही वा उच्च गुण/रिजोल्युसन भएमा। २: तस्विरको इजाजतपत्र र स्रोत स्थिति उचित सन्देहभन्दा बाहिर छ र अनुमतिपत्र निसन्देह कमन्समा स्वीकार गरिएमा। ३: प्रतिनिधित्व गरिएको कलात्मक कार्यको निर्माताको मृत्युको नाम र मिति फाइलद्वारा उल्लेख गरेमा वा अन्य मुक्त इजाजत पत्र दिइएको साक्ष्य स्पष्ट भएमा। अज्ञात छ भने, वर्णन पृष्ठले अज्ञात स्थिति स्थापित प्रमाण प्रदान गरेको सुनिश्चित गर्नुहोस्। ४: यो पहिलो कुन देशमा प्रकाशित भएको थियो। ५: तस्विरलाई {{Do not move to Commons}} र {{Keep local}} चिह्न नलगाइएमा। ६: {{C-uploaded}} तस्विरहरू मुख्य पृष्ठमा नभएमा शीघ्र हटाइन्छ।',
		subgroup: {
			name: 'commons_filename',
			type: 'input',
			label: 'कमन्सको फाइलनाम:',
			value: Morebits.pageNameNorm,
			tooltip: 'यदि फाइलको नाम कमन्समा एउटै भएमा यहाँको यो नाम खाली छोड्न सकिन्छ। "फाइल:" उपसर्ग छोड्न सकिन्छ।'
		},
		hideWhenMultiple: true
	},
	{
		label: 'फा९: स्पष्ट प्रतिलिपि अधिकार उल्लङ्घन',
		value: 'imgcopyvio',
		tooltip: 'यो स्पष्ट रूपमा गैर-मुक्त तस्विरहरू (वा अन्य मिडिया फाइलहरू) मा लागू हुन्छ जुन अपलोडरद्वारा उचित-प्रयोग दावी गरिएका छैनन्। एक युआरएल वा अन्य चित्र कहाँबाट ल्याइएको हो उल्लेख हुनुपर्छ। यसमा एक विश्वसनीय दावीमा समावेश भएका तस्विरहरू जुन मालिकले तिनीहरूलाई विकिपिडिया-सङ्गत गैर-मुक्त इजाजतपत्र अन्तर्गत जारी गरेको छ। स्पष्ट उल्लङ्घनहरूलाई {{Db-filecopyvio}} साथ चिनो लगाउनु पर्छ। अस्पष्ट प्रतिलिपि अधिकार उल्लङ्घनको बारेमा विकिपिडिया:फाइल सम्बन्धी छलफलहरूमा छलफल गरिनेछ।',
		subgroup: [
			{
				name: 'imgcopyvio_url',
				type: 'input',
				label: 'प्रतिलिपि उल्लङ्घन स्रोतको युआरएल, "http://" सहित। यदि तपाईं युआरएल प्रदान गर्न सक्नुहुन्न भने, कृपया "शीमे फा९" प्रयोग नगर्नुहोस्। (अपवाद: गैर-इन्टरनेट स्रोतहरूको प्रतिलिपि उल्लङ्घनको लागि बाकस खाली छोड्नुहोस्।',
				size: 60
			},
			{
				name: 'imgcopyvio_rationale',
				type: 'input',
				label: 'गैर-इन्टरनेट प्रतिलिपि उल्लङ्घनको कारण:',
				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: 'उदाहरणको लागि, en:Nepal'
		}
	},
	{
		label: 'ले३: कुनै सामग्री नभएको',
		value: 'nocontent',
		tooltip: 'लेखमा धोखापूर्ण र गलत जानकारी समावेस गरेर बनाइएको पृष्ठ वा कुनै सामग्री नभएको वा मात्रै बाहिरी सूत्र, श्रेणी पद, यो पनि हेर्नुहोस खण्ड, शीर्षकसँग मिल्दोजुल्दो सामग्री वा अभद्र लेखाई, ढाँचा र चित्र राखिएका लेखहरूमा लागू हुन्छ। यसमा अस्पष्ट पृष्ठहरू समावेश छैनन्'
	},
	{
		label: 'ले५: अर्को परियोजनामा भएको लेख',
		value: 'transwiki',
		tooltip: 'यो मापदण्ड पहिले नै ट्रान्सवाइज्ड, (उदाहरणार्थ, विकी शब्दकोश वा विकिस्रोत)मा समावेश गरिएको वा शब्दकोश परिभाषामा समावेश गरिसकिएको लेख वा पहिले नै अर्को परियोजनामा भएको लेखहरूमा लागू हुन्छ।',
		subgroup: {
			name: 'transwiki_location',
			type: 'input',
			label: 'जहाँ पृष्ठ ट्रान्सविकि गरिएको सूत्र: ',
			tooltip: 'उदाहरणको लागि, https://ne.wiktionary.org/wiki/ट्विङ्कल वा [[विक्सनरी:ट्विङ्कल]]'
		}
	},
	{
		label: 'ले७: महत्वहीन व्यक्तिहरू, समूहहरू, कम्पनीहरू, वेब सामग्री, व्यक्तिगत जनावरहरू, वा संगठित घटनाहरू',
		value: 'a7',
		tooltip: 'एक वास्तविक व्यक्ति, व्यक्तिको समूह, ब्यान्ड, क्लब, कम्पनी, वेब सामग्री, व्यक्तिगत जनावर, भ्रमण, वा पार्टीको बारेमा लेख जुन यस विषयको महत्त्व वा उल्लेखनीयतालाई जोड दिदैन। यदि विवादास्पद, वा अघिल्लो एएफडीको परिणाम लेख राखिएको भए, यसको सट्टामा लेख एएफडीको लागि मनोनयन गर्नुपर्छ',
		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: 'a9',
		tooltip: 'लेख साङ्गीतिक रेकर्डिङ वा साङ्गीतिक रेकर्डिङहरूको सूचीको बारेमा रहेको तथा विषयको महत्त्व वा विश्वसनीयतालाई नदर्साएको, र जहाँ कलाकार स्वयमको बारेमा लेख नभएको वा मेटाइसकिएको'
	},
	{
		label: 'ले१०: हालसालै सृजित लेख जसले विद्यमान शीर्षकको नक्कल गरेको',
		value: 'a10',
		tooltip: 'हालसालै सृजित लेख जसमा विस्तारको कुनै प्रासङ्गिक पृष्ठ इतिहास, विवरण, वा विद्यमान विषयको सुधार जानकारी नभएको',
		subgroup: {
			name: 'a10_article',
			type: 'input',
			label: 'नक्कल गरिएको लेख: '
		}
	},
	{
		label: 'ले११: विषय महत्त्वपूर्ण नभएको स्पष्ट आविष्कार',
		value: 'madeup',
		tooltip: 'लेख सृजनाकर्ता वा उनीहरूले व्यक्तिगत रूपमा चिनेका कसैको बारेमा लेखिएको, र यस विषयको महत्त्व वा विश्वसनीयतालाई नदर्साएको'
	}
];

Twinkle.speedy.categoryList = [
	{
		label: 'श्रे१: रित्ता श्रेणीहरू',
		value: 'catempty',
		tooltip: 'यो मापदण्ड कम्तीमा सात दिन सम्म रित्ता रहेका श्रेणीहरूमा लागू हुन्छ। बहुविकल्पी श्रेणी, अनुप्रेषित श्रेणी, प्रमुख लेख श्रेणी, छलफल विकिपिडिया:श्रेणी सम्बन्धि छलफलहरू अन्तर्गतका श्रेणीहरू (छलफलहरू), वा परियोजनाका अक्सर समय-समयमा रित्ता हुन सक्ने श्रेणीहरू यस मापदण्डमा लागू हुँदैनन्। त्यस्ता श्रेणीहरू मेटाउनबाट रोक्न पृष्ठको शीर्ष मा {{Possibly empty category}} ढाँचा राख्नुहोस्।'
	},
	{
		label: 'सा८: मेटाइएका वा ढाँचाद्वारा पुन:आबद्ध गरिएका श्रेणीहरू',
		value: 'templatecat',
		tooltip: 'एक ढाँचाद्वारा आबद्ध श्रेणी जुन हुँदै नभएको, मेटिएको, वा मेटाउनको लागि हालै चिह्नित गरिएको। यसले हाल प्रयोगमा रहेका श्रेणीहरूलाई समावेश गर्दैन।',
		subgroup: {
			name: 'templatecat_rationale',
			type: 'input',
			label: 'वैकल्पिक व्याख्या:',
			size: 60
		}
	},
	{
		label: 'सा८: गैर-अवस्थित लक्ष्यहरूमा गरिएको अनुप्रेषण',
		value: 'redirnone',
		tooltip: 'यसले परियोजनाको लागि उपयोगी हुने कुनै पनि पृष्ठलाई, र विशेष रूपमा: मेटाउने छलफलहरू जुन अन्य ठाउँमा आबद्ध नभएका, प्रयोगकर्ता र प्रयोगकर्ता वार्ता पृष्ठहरू, वार्ता पृष्ठ अभिलेखहरू, वैधानिक लक्ष्यहरूमा परिवर्तन गर्न सकिने अनुप्रेषणहरू, र फाइल पृष्ठहरू वा वार्ता पृष्ठहरू विकिमिडिया कमन्समा अवस्थित फाइलहरू समावेश गर्दैन।',
		hideWhenMultiple: true
	}
];

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: 'अवस्थित नभएका/अस्तित्वहीन प्रयोगकर्ताहरूको प्रयोगकर्ता पृष्ठहरू यहाँ हेर्नुहोस् (Special:Listusers) मा यो मापदण्ड लागू हुन्छ।'
	},
	{
		label: 'प्र३: गैर-मुक्त ग्यालरीहरू',
		value: 'gallery',
		tooltip: 'प्रयोगकर्तास्थानमा ग्यालरीहरू प्रायः वा पूर्णतया "उचित-उपयोग" वा गैर-मुक्त तस्विरहरू समावेश हुन्छन्। विकिपिडियाको गैर-मुक्त सामग्री नीतिले प्रयोगकर्ता-स्थानमा गैर-रहित सामग्रीको प्रयोगलाई निषेध गर्दछ, प्रयोगकर्ताले अपलोड गरेको सार्वजनिक डोमेनका सामग्री वा गैर-मुक्त इजाजतपत्र अन्तर्गत पनि अस्वीकार्य हुन्छन्।',
		hideWhenRedirect: true
	},
	{
		label: 'प्र५: स्पष्ट वि:वेबहोस्टहोइन उल्लङ्घन',
		value: 'notwebhost',
		tooltip: 'प्रयोगकर्ता-स्थानमा भएका लेख, सूचना, छलफल, र/वा विकिपिडियाका लक्ष्यहरूसँग नमिल्ने गतिविधिहरू, जहाँ प्रयोगकर्ता स्वयमले प्रयोगकर्ता पृष्ठ बाहेक अरू कुनैपनि सम्पादन गरेको छैन वा सम्भावित मस्यौदाहरू र प्रयोगकर्ता पृष्ठहरू अपवाद हुन्।',
		hideWhenRedirect: true
	},
	{
		label: 'सा११: एक प्रचारात्मक प्रयोगकर्ता नाम अन्तर्गतको प्रयोगकर्ता पृष्ठ',
		value: 'spamuser',
		tooltip: 'प्रयोगकर्ता पृष्ठ विज्ञापन वा प्रचारको लागि मात्र प्रयोग भइरहेको, एक प्रयोगकर्ता नामको प्रचार वा सम्बद्ध इकाईको विज्ञापन गरिएको। नोट गर्नुहोस् कि केवल एक कम्पनी वा उत्पादन विषयको पृष्ठ प्रयोगकर्तास्थानमा भएमात्रैले प्रयोगकर्ता पृष्ठ मेटाउन योग्य हुँदैन। यदि एक प्रयोगकर्ता पृष्ठ प्रचारात्मक हो तर प्रयोगकर्ता नाम हैन भने नियमित सा११ अन्तर्गत चिह्नित गर्नुहोस्।',
		hideWhenMultiple: true,
		hideWhenRedirect: true
	},
	{
		label: 'सा१३: लेख सृजनाको अस्वीकृत/पेश नगरिएको मस्यौदा, जसलाई ६ महिना सम्म पनि सम्पादन नगरिएको',
		value: 'afc',
		tooltip: 'या त मस्यौदा नामस्थानको एक पृष्ठ, लेख सृजनाको अस्वीकृत/पेश नगरिएको प्रयोगकर्ता स्थानको लेख, वा लेख विजार्ड पाठ बाहेक सामग्री नभएको कुनै नामस्थानको मस्यौदा जुन ६ महिना सम्म पनि सम्पादन नगरिएको (बोट सम्पादनहरू बाहेक)।',
		hideWhenMultiple: true,
		hideWhenRedirect: true
	}
];

Twinkle.speedy.portalList = [
	{
		label: 'पो१: पोर्टल पृष्ठ लेख बनेमा शीघ्र मेटाउनको लागि योग्य हुनेछ',
		value: 'p1',
		tooltip: 'तपाईंले लेख मापदण्ड (ले१, ले३, ले७, वा ले१०) निर्दिष्ट गर्नुपर्छ जुन यस अवस्थामा लागू हुन्छ।',
		subgroup: {
			name: 'p1_criterion',
			type: 'input',
			label: 'लागू हुने लेख मापदण्ड:'
		}
	},
	{
		label: 'पो२: अल्पसङ्ख्यक पोर्टल (तीन भन्दा थोरै गैर-अपूर्ण लेखहरू)',
		value: 'emptyportal',
		tooltip: 'एक विषयमा आधारित पोर्टल, जहाँ उक्त पोर्टलको शीर्षकको केवल अपूर्ण शीर्ष लेख वा तीन भन्दा थोरै गैर-अपूर्ण लेखहरू।'
	}
];

Twinkle.speedy.generalList = [
	{
		label: 'सा१: स्पष्ट अर्थहीन, पूर्ण विशुद्ध पाठ, अस्पष्ट उच्चारण सहितका निरर्थक सामग्री वा ईतिहास।',
		value: 'nonsense',
		tooltip: 'यसमा नराम्रो लेखन, पक्षपातपूर्ण व्याख्यान, अश्लील टिप्पणी, बर्बरता, काल्पनिक सामग्री, नेपालीमा नलेखिएको सामग्री, खराब अनुवाद गरिएको सामग्री, अकल्पनीय सिद्धान्तहरू, वा भ्रमहरू समावेश हुँदैन। छोटकरीमा भन्नुपर्दा, यदि तपाईं यसलाई बुझ्न सक्नुहुन्छ भने, सा१ लागू हुँदैन।',
		hideInNamespaces: [ 2 ] // प्रयोगकर्ता नामस्थानमा लागू हुँदैन
	},
	{
		label: 'सा२: परिक्षण पृष्ठ',
		value: 'test',
		tooltip: 'एउटा पृष्ठ सम्पादन वा अन्य विकिपिडिया कार्यहरू परीक्षण गर्न सृजना गरिएको। प्रयोगकर्ता नामस्थानका पृष्ठहरू, न त वैध तर प्रयोग नभएको वा नक्कल ढाँचाहरूमा लागू हुँदैन (जे होस् मापदण्ड ढाँ३ लागू हुन सक्छ)।',
		hideInNamespaces: [ 2 ] // प्रयोगकर्ता नामस्थानमा लागू हुँदैन
	},
	{
		label: 'सा३: शुद्ध बर्बरता',
		value: 'vandalism',
		tooltip: 'शुद्ध बर्बरता (पृष्ठ सार्दा छोडिएका अनुप्रेषण सहितका बर्बरता)'
	},
	{
		label: 'सा३: स्पष्ट छल वा भ्रम',
		value: 'hoax',
		tooltip: 'बर्बरताको दृष्टिकोणले प्रबल तथा स्पष्ट भ्रम',
		hideWhenMultiple: true
	},
	{
		label: 'सा४: छलफल गरेर मेटिसकिएको पृष्ठको पुनर्निर्माण',
		value: 'repost',
		tooltip: 'एक पृष्ठ जुन मेटाउने छलफलको माध्यमबाट पहिल्यै मेटाइएको, मेटाईएको संस्करणसँग ठ्याक्कै मिल्दो, र कुनै परिवर्तनले सामग्री मेटिएको कारणलाई सम्बोधन गर्न नसकेको। यो धारा "हटाइएको समीक्षा" को परिणामस्वरूप हटाइएको सामग्रीमा "प्रयोगकर्ताकृत" गरिएको सामग्रीमा लागू हुँदैन, वा यदि पहिले मेटाउने प्रस्तावहरू गरिएको थियो वा शीघ्र मेटाइहरू, यद्यपि यो अन्तिम अवस्थामा, अन्य शीघ्र हटाउने मापदण्ड भने अझै पनि लागू हुन सक्छ।',
		subgroup: {
			name: 'repost_xfd',
			type: 'input',
			label: 'पृष्ठ मेटाउने छलफल: ',
			tooltip: '"विकिपिडिया:" सँग सुरू हुनुपर्छ',
			size: 60
		}
	},
	{
		label: 'सा५: निषेधित वा अवरोधित प्रयोगकर्ताद्वारा सृजना गरिएको',
		value: 'banned',
		tooltip: 'निषेधित वा अवरोधित प्रयोगकर्ताद्वारा बनाइएको पृष्ठ वा अरूद्वारा ठोस सम्पादनहरू बिनै अवरोधित प्रयोगकर्ताको उल्लङ्घन',
		subgroup: {
			name: 'banned_user',
			type: 'input',
			label: 'निषेधित प्रयोगकर्ताको नाम (उपलब्ध भएमा): ',
			tooltip: '"प्रयोगकर्ता:" सँग सुरू गर्नुहुँदैन'
		}
	},
	{
		label: 'सा६: सार्ने',
		value: 'move',
		tooltip: 'एक अनुप्रेषण उल्टाउने जस्ता अविवादास्पद कार्यको लागि बाटो खुलाउन',
		subgroup: [
			{
				name: 'move_page',
				type: 'input',
				label: 'पृष्ठ यस नाममा सारिनुपर्ने: '
			},
			{
				name: 'move_reason',
				type: 'input',
				label: 'कारण: ',
				size: 60
			}
		],
		hideWhenMultiple: true
	},
	{
		label: 'सा६: पृहनी',
		value: 'xfd',
		tooltip: ' मेटाउने छलफलमा पृष्ठ मेटाउन सहमति पुगेको, तर अझै नमेटिएको',
		subgroup: {
			name: 'xfd_fullvotepage',
			type: 'input',
			label: 'मेटाउने छलफल भएको पृष्ठ: ',
			tooltip: '"विकिपिडिया:" को साथ सुरू हुनुपर्दछ',
			size: 40
		},
		hideWhenMultiple: true
	},
	{
		label: 'सा६: प्रतिलिपि-साभार-गरि पृष्ठ सार्न ',
		value: 'copypaste',
		tooltip: 'यो केवल प्रतिलिपि-साभार गरि पृष्ठ सार्नको लागि बाटो खुलाउन अस्थायी रूपमा मेटाउन आवश्यकका लागि लागू हुन्छ ',
		subgroup: {
			name: 'copypaste_sourcepage',
			type: 'input',
			label: 'प्रतिलिपि साभार गरिएको मूल पृष्ठ: '
		},
		hideWhenMultiple: true
	},
	{
		label: 'सा६: प्राविधिक तथा गैर-विवादास्पद सफाइ',
		value: 'g6',
		tooltip: 'अन्य नियमित मर्मत कार्यहरू',
		subgroup: {
			name: 'g6_rationale',
			type: 'input',
			label: 'कारण: ',
			size: 60
		}
	},
	{
		label: 'सा७: लेखकद्वारा पृष्ठ मेट्न अनुरोध',
		value: 'author',
		tooltip: 'केवल पर्याप्त सामग्रीको लेखकले मेटाउन अनुरोध गरेको र/वा पृष्ठ राम्रो नियतले खाली गरिएको। यदि लेखकले पृष्ठ खाली गर्दछ भने, यसलाई मेटाउने अनुरोधको रूपमा पनि लिन सकिन्छ।',
		subgroup: {
			name: 'author_rationale',
			type: 'input',
			label: 'वैकल्पिक व्याख्या: ',
			tooltip: 'सम्भवतः लेखकले मेटाउने अनुरोध कहाँ सूत्रित गरेको छ',
			size: 60
		},
		hideSubgroupWhenSysop: true
	},
	{
		label: 'सा८: हुँदै नभएको, मेटिसकिएको पृष्ठमा आश्रित पृष्ठ',
		value: 'g8', 
		tooltip: 'जस्तै कुनै सम्बन्धित पृष्ठ बिनाका वार्ता पृष्ठहरू; कुनै अभिभावक पृष्ठ बिना उपपृष्ठहरू; सम्बन्धित फाइल बिना फाइल पृष्ठहरू; गैर-अस्तित्वहीन लक्ष्यहरूका अनुप्रेषणहरू; वा मेटिएको ढाँचाहरूद्वारा पुन: आबद्ध गरिएका श्रेणीहरू। विकिपिडियाको लागि उपयोगी पृष्ठहरू, जस्तै प्रयोगकर्ता उपपृष्ठहरू र वार्ता पृष्ठहरू, वार्ता पृष्ठ अभिलेखहरू, भविष्यको लेखका लागि जानकारी, लेख सृजनाका मस्यौदाहरू, आदि यो मापदण्डमा पर्दैनन्।',
		subgroup: {
			name: 'g8_rationale',
			type: 'input',
			label: 'वैकल्पिक व्याख्या: ',
			size: 60
		},
		hideSubgroupWhenSysop: true
	},
	{
		label: 'सा८: हुँदै नभएको पृष्ठको उपपृष्ठ',
		value: 'subpage',
		tooltip: 'विकिपिडियाको लागि उपयोगी पृष्ठहरू, जस्तै प्रयोगकर्ता उपपृष्ठहरू र वार्ता पृष्ठहरू, वार्ता पृष्ठ अभिलेखहरू, भविष्यको लेखका लागि जानकारी, लेख सृजनाका मस्यौदाहरू, आदि यो मापदण्डमा पर्दैनन्।',
		hideWhenMultiple: true,
		hideInNamespaces: [ 0, 6, 8 ]  // मुख्य, फाइल, र मिडीयाविकि-स्थानमा लुकाउनुहोस्
	},
	{
		label: 'सा१०: आक्रमण पृष्ठ',
		value: 'attack',
		tooltip: 'एक खास उद्देश्य नभई आफ्नो विषय अथवा केहि अन्य निकायको अपमान, निराशा वा धम्की दिने पृष्ठ। यसले मानहानि, कानूनी धम्की, कुनै व्यक्तिलाई धम्काउने वा तर्साउने उद्देश्यले लेखिएको, वा एक जीवित व्यक्तिको जीवनी जुन पूर्ण नकारात्मक तथा स्रोतहीन, जहाँ लेख उल्टाउन इतिहासमा कुनै तटस्थ संस्करण पनि नभएका जस्ता कुराहरूलाई जनाउदछ। त्यस्ता पृष्ठहरू मेटाउने प्रशासकहरूले मेटाउने सारांशमा पृष्ठको सामग्री उद्धृत गर्नु हुँदैन!'
	},
	{
		label: 'सा१०: स्रोतहीन र पूर्ण नकारात्मक जीमाजी',
		value: 'negublp',
		tooltip: 'एक स्रोतहीन तथा पूर्ण नकारात्मक जीवित व्यक्तिको जीवनी बारेको लेख, जहाँ उल्टाउन इतिहासमा कुनै तटस्थ संस्करण नभएको।',
		hideWhenMultiple: true
	},
	{
		label: 'सा११: अनावश्यक प्रचारबाजी वा प्रसार',
		value: 'spam',
		tooltip: 'हालको संस्करणमा यसले संस्था, व्यक्ति, उत्पादन, वा विचार प्रवर्धन वा प्रचार मात्र गर्दछ, र ज्ञानकोश बन्नको लागि मौलिक पुनर्लेखन चाहिन्छ। यद्यपि कम्पनी, संगठन, वा उत्पादन पृष्ठको विषय हो भन्ने तथ्य मात्रले, आफ्नै मापदण्ड अनुसार, यो पृष्ठ यस मापदण्डको आधारमा मेटाउन योग्य हुँदैन। न त यो मापदण्ड प्रचारात्मक सामग्री हटाएपछि पर्याप्त ज्ञानकोश सामग्री रहने ठाँउमा लागू हुन्छ; यस अवस्थामा कृपया प्रचारात्मक सामग्री आफैंले हटाउनुहोस्, वा अरूलाई सचेत गराउन {{advert}} चिनो थप्नुहोस्।'
	},
	{
		label: 'सा१२: स्पष्ट प्रतिलिपि अधिकार उल्लङ्घन',
		value: 'copyvio',
		tooltip: 'या त: (१) पृष्ठमा राखिएको सामग्रीले प्रतिलिपि अधिकार उल्लङ्घन गरेको; (२) यो मापदण्ड त्यस्ता पृष्ठहरूमाथि लागू हुन्छ जुन पृष्ठमा सोझै कुनै व्यावसायिक वेबसाइट, ब्लग अथवा पत्रिकाबाट सामग्री कपी गरेर राखिएको हुन्छ।; वा (३) यदि अन्य कुनै सा१२ मा मापदण्ड जोड्नुपरेमा {{Db-multiple}} ढाँचाको प्रयोग गर्नुपर्नेछ जसले गर्दा हामी प्रतिलिपि अधिकारको अनुमतिमा समय खेर नफाली पृष्ठ मेट्न सकियोस।',
		subgroup: [
			{
				name: 'copyvio_url',
				type: 'input',
				label: 'यूआरएल (यदि उपलब्ध भएमा): ',
				tooltip: 'यदि सामग्री अनलाइनबाट प्रतिलिपि गरिएको थियो भने, "http://" वा "https://" प्रोटोकल सहित यूआरएल यहाँ राख्नुहोस्।',
				size: 60
			},
			{
				name: 'copyvio_url2',
				type: 'input',
				label: 'थप यूआरएल: ',
				tooltip: 'वैकल्पिक। "http: //" वा "https: //" को साथ सुरू हुनुपर्छ',
				size: 60
			},
			{
				name: 'copyvio_url3',
				type: 'input',
				label: 'थप यूआरएल: ',
				tooltip: 'वैकल्पिक। "http: //" वा "https: //" को साथ सुरू हुनुपर्छ',
				size: 60
			}
		]
	},
	{
		label: 'सा१३: ६ महिना बढीको मस्यौदा नामस्थानको पृष्ठ वा लेख सृजनाको प्रयोगकर्ता स्थानको लेख',
		value: 'afc',
		tooltip: 'या त मस्यौदा नामस्थानको एक पृष्ठ, लेख सृजनाको अस्वीकृत/पेश नगरिएको प्रयोगकर्ता स्थानको लेख, वा लेख विजार्ड पाठ बाहेक सामग्री नभएको कुनै नामस्थानको मस्यौदा जुन ६ महिना सम्म पनि सम्पादन नगरिएको',
		hideWhenRedirect: true,
		showInNamespaces: [2, 118]  // प्रयोगकर्ता, मस्यौदा नामस्थानहरू मात्र
	},
	{
		label: 'सा१४: अनावश्यक अस्पष्ट पृष्ठहरू',
		value: 'disambig',
		tooltip: 'अस्पष्ट पृष्ठहरू अथवा यसको शीर्षकको बावजूद विकिपिडियामा अवस्थित नगन्य पृष्ठहरू'
	}
];

Twinkle.speedy.redirectList = [
	{
		label: 'अ२:  श्रेणी:, ढाँचा:, विकिपिडिया:, मद्दत: र पोर्टल: नामस्थान बाहेक मुख्य/लेख नामस्थानबाट अन्य कुनै नामस्थानमा गरिएको अनुप्रेषण',
		value: 'rediruser',
		tooltip: 'यसमा विकिपिडियाका सङ्क्षिप्त रूप-नामस्थानहरू समावेश हुँदैनन्। यदि यो पृष्ठ सार्दाको नतिजा हो भने, अनुप्रेषण मेटाउनु अघि एक वा दुई दिन पर्खनुहोस्।',
		showInNamespaces: [ 0 ]
	},
	{
		label: 'अ३: लेखन् त्रुटि',
		value: 'redirtypo',
		tooltip: 'यद्यपि, सामान्य गलत हिज्जे, व्याकरण/भाषा वा गलत नामका कारणले सृजना भएको, लेख सारिएको, जसको परिणाम स्वरूप लेख पुन:सृजना भएको अनुप्रेषित पृष्ठहरूमा लागू हुन्छ।'
	},
	{
		label: 'अ४: कमन्स पृष्ठसँग मेल खाने फाइल नामस्थानमा गरिएको अनुप्रेषण',
		value: 'redircom',
		tooltip: 'अनुप्रेषणसँग आउने सूत्रहरू हुनुहुँदैन (जबसम्म सूत्रहरू फाइलको लागि स्पष्ट नभएसम्म वा कमन्समा अनुप्रेषण नहुँदासम्म)।',
		showInNamespaces: [ 6 ]
	},
	{
		label: 'सा६: गलतस्थानको अस्पष्ट पृष्ठको अनुप्रेषण',
		value: 'movedab',
		tooltip: 'यो केवल अस्पष्ट पृष्ठहरूको अन्तमा (स्पष्टता) हुँने अनुप्रेषणको लागि लागू हुन्छ जहाँ प्राथमिक शीर्षक अवस्थित हुँदैन।',
		hideWhenMultiple: true
	},
	{
		label: 'सा८: गैर-अस्तित्वहीन लक्ष्यका अनुप्रेषणहरू',
		value: 'redirnone',
		tooltip: 'विकिपिडियाको लागि उपयोगी पृष्ठहरू, जस्तै प्रयोगकर्ता उपपृष्ठहरू र वार्ता पृष्ठहरू, वार्ता पृष्ठ अभिलेखहरू, भविष्यको लेखका लागि जानकारी, लेख सृजनाका मस्यौदाहरू, आदि यो मापदण्डमा पर्दैनन्।',
		hideWhenMultiple: true
	}
];

Twinkle.speedy.normalizeHash = {
	reason: 'शीमे',
	nonsense: 'सा१',
	test: 'सा२',
	vandalism: 'सा३',
	hoax: 'सा३',
	repost: 'सा४',
	banned: 'सा५',
	move: 'सा६',
	xfd: 'सा६',
	movedab: 'सा६',
	copypaste: 'सा६',
	g6: 'सा६',
	author: 'सा७',
	g8: 'सा८',
	talk: 'सा८',
	subpage: 'सा८',
	redirnone: 'सा८',
	templatecat: 'सा८',
	imagepage: 'सा८',
	attack: 'सा१०',
	negublp: 'सा१०',
	spam: 'सा११',
	spamuser: 'सा११',
	copyvio: 'सा१२',
	afc: 'सा१३',
	disambig: 'सा१४',
	nocontext: 'ले१',
	foreign: 'ले२',
	nocontent: 'ले३',
	transwiki: 'ले५',
	a7: 'ले७',
	person: 'ले७',
	corp: 'ले७',
	web: 'ले७',
	band: 'ले७',
	club: 'ले७',
	animal: 'ले७',
	event: 'ले७',
	a9: 'ले९',
	a10: 'ले१०',
	madeup: 'ले११',
	rediruser: 'अ२',
	redirtypo: 'अ३',
	redircom: 'अ४',
	redundantimage: 'फा१',
	noimage: 'फा२',
	fpcfail: 'फा२',
	noncom: 'फा३',
	unksource: 'फा४',
	unfree: 'फा५',
	f5: 'फा५',
	norat: 'फा६',
	badfairuse: 'फा७',
	commons: 'फा८',
	imgcopyvio: 'फा९',
	badfiletype: 'फा१०',
	nopermission: 'फा११',
	catempty: 'श्रे१',
	userreq: 'प्र१',
	nouser: 'प्र२',
	gallery: 'प्र३',
	notwebhost: 'प्र५',
	p1: 'पो१',
	emptyportal: 'पो२'
};

Twinkle.speedy.callbacks = {
	getTemplateCodeAndParams: function(params) {
		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];
				}
			}
			if (params.usertalk) {
				code += '|help=off';
			}
			code += '}}';
			params.utparams = Twinkle.speedy.getUserTalkParameters(params.normalizeds[0], parameters);
		}

		return [code, params.utparams];
	},

	parseWikitext: function(wikitext, callback) {
		var query = {
			action: 'parse',
			prop: 'text',
			pst: 'true',
			text: wikitext,
			contentmodel: 'wikitext',
			title: mw.config.get('wgPageName'),
			disablelimitreport: true,
			format: 'json'
		};

		var statusIndicator = new Morebits.status('मेटाउने सारांश निर्माण गर्दै');
		var api = new Morebits.wiki.api('मेटाउने ढाँचा पदवर्णन गर्दै', query, function(apiobj) {
			var reason = decodeURIComponent($(apiobj.getResponse().parse.text).find('#delete-reason').text()).replace(/\+/g, ' ');
			if (!reason) {
				statusIndicator.warn('मेटाउने ढाँचाबाट सारांश उत्पन्न गर्न असमर्थ');
			} else {
				statusIndicator.info('complete');
			}
			callback(reason);
		}, statusIndicator);
		api.post();
	},

	noteToCreator: function(pageobj) {
		var params = pageobj.getCallbackParameters();
		var initialContrib = pageobj.getCreator();

		// disallow notifying yourself
		if (initialContrib === mw.config.get('wgUserName')) {
			Morebits.status.warn('तपाईंले नै यो (' + initialContrib + ') पृष्ठ सृजना गर्नुभयो; प्रयोगकर्ता सूचना रद्द गर्दै');
			initialContrib = null;

		// don't notify users when their user talk page is nominated/deleted
		} else if (initialContrib === mw.config.get('wgTitle') && mw.config.get('wgNamespaceNumber') === 3) {
			Morebits.status.warn('तपाईंले नै यो (' + initialContrib + ') पृष्ठ सृजना गर्नुभयो; प्रयोगकर्ता सूचना रद्द गर्दै');
			initialContrib = null;

		// 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] === 'f2') {
			Morebits.status.warn('प्रारम्भिक योगदानकर्तालाई सूचित गर्दै: यो प्रयोगकर्ताले आफ्नै प्रयोगकर्ता वार्ता पृष्ठ सृजना गर्दैहुनुहुन्छ; सूचना रद्द गर्दै');
			initialContrib = null;

		// Check for already existing tags
		} else if (Twinkle.speedy.hasCSD && params.warnUser && !confirm('पृष्ठसँग मेटाउने सम्बन्धित चिनो छ, र यसैले सृजनाकर्तालाई सूचित गरिएको हुन सक्छ। के तपाईं तिनीहरूलाई यो शीमेको बारेमा सूचित गर्न चाहानुहुन्छ?')) {
			Morebits.status.info('प्रारम्भिक योगदानकर्तालाई सूचित गर्दै: पृष्ठ बोटद्वारा प्रक्रियागत बनाइयो; सूचना रद्द गर्दै');
			initialContrib = null;
		}

		if (initialContrib) {
			var usertalkpage = new Morebits.wiki.page('User talk:' + initialContrib, 'प्रारम्भिक योगदानकर्तालाई सूचित गर्दै (' + initialContrib + ')'),
				notifytext, i, editsummary;

			// special cases: "db" and "db-multiple"
			if (params.normalizeds.length > 1) {
				notifytext = '\n{{subst:db-' + (params.warnUser ? 'deleted' : '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{{subst:db-reason-' + (params.warnUser ? 'deleted' : 'notice') + '|1=' + Morebits.pageNameNorm;
			} else {
				notifytext = '\n{{subst:db-csd-' + (params.warnUser ? 'deleted' : 'notice') + '-custom|1=';
				if (params.values[0] === 'copypaste') {
					notifytext += params.templateParams[0].sourcepage;
				} else {
					notifytext += Morebits.pageNameNorm;
				}
				notifytext += '|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') + '}} ~~~~';

			editsummary = 'अधिसूचना: शीघ्र मेटाउने' + (params.warnUser ? '' : ' नामाङ्कन');
			if (params.normalizeds.indexOf('g10') === -1) {  // no article name in summary for G10 taggings
				editsummary += ' [[:' + Morebits.pageNameNorm + ']]।';
			} else {
				editsummary += ' एक आक्रमण पृष्ठ।';
			}

			usertalkpage.setAppendText(notifytext);
			usertalkpage.setEditSummary(editsummary);
			usertalkpage.setChangeTags(Twinkle.changeTags);
			usertalkpage.setCreateOption('recreate');
			usertalkpage.setWatchlist(Twinkle.getPref('watchSpeedyUser'));
			usertalkpage.setFollowRedirect(true, false);
			usertalkpage.append(function onNotifySuccess() {
				// 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);
				}
			}, function onNotifyError() {
				// if user could not be notified, log nomination without mentioning that notification was sent
				if (params.lognomination) {
					Twinkle.speedy.callbacks.user.addToLog(params, null);
				}
			});
		} else if (params.lognomination) {
			// log nomination even if the user notification wasn't sent
			Twinkle.speedy.callbacks.user.addToLog(params, null);
		}
	},

	sysop: {
		main: function(params) {
			var reason;
			if (!params.normalizeds.length && params.normalizeds[0] === 'db') {
				reason = prompt('मेटाउनको लागि सारांश हाल्नुहोस्, जुन मेटाउने लगमा प्रविष्टि हुनेछ:', '');
				Twinkle.speedy.callbacks.sysop.deletePage(reason, params);
			} else {
				var code = Twinkle.speedy.callbacks.getTemplateCodeAndParams(params)[0];
				Twinkle.speedy.callbacks.parseWikitext(code, function(reason) {
					if (params.promptForSummary) {
						reason = prompt('मेटाउनको लागि सारांश हाल्नुहोस्, वा स्वचालित रूपमा उत्पन्न भएको स्वीकार गर्न ठीक थिच्नुहोस्।', reason);
					}
					Twinkle.speedy.callbacks.sysop.deletePage(reason, params);
				});
			}
		},
		deletePage: function(reason, params) {
			var thispage = new Morebits.wiki.page(mw.config.get('wgPageName'), 'पृष्ठ मेटाउँदै');

			if (reason === null) {
				return Morebits.status.error('कारण माग्दै', 'प्रयोगकर्ताद्वारा रद्द गरियो');
			} else if (!reason || !reason.replace(/^\s*/, '').replace(/\s*$/, '')) {
				return Morebits.status.error('कारण माग्दै', "तपाईंले एउटा दिनुभएन।  मलाई थाहा छैन... प्रशासकहरू र उनीहरूको उदासीन एन्टिक्सको साथ के... मैले छाडिदिए...");
			}

			var deleteMain = function(callback) {
				thispage.setEditSummary(reason);
				thispage.setChangeTags(Twinkle.changeTags);
				thispage.setWatchlist(params.watch);
				thispage.deletePage(function() {
					thispage.getStatusElement().info('done');
					typeof callback === 'function' && callback();
					Twinkle.speedy.callbacks.sysop.deleteTalk(params);
				});
			};

			// look up initial contributor. If prompting user for deletion reason, just display a link.
			// Otherwise open the talk page directly
			if (params.warnUser) {
				thispage.setCallbackParameters(params);
				thispage.lookupCreation(function(pageobj) {
					deleteMain(function() {
						Twinkle.speedy.callbacks.noteToCreator(pageobj);
					});
				});
			} else {
				deleteMain();
			}
		},
		deleteTalk: function(params) {
			// delete talk page
			if (params.deleteTalkPage &&
					params.normalized !== 'f8' &&
					!document.getElementById('ca-talk').classList.contains('new')) {
				var talkpage = new Morebits.wiki.page(mw.config.get('wgFormattedNamespaces')[mw.config.get('wgNamespaceNumber') + 1] + ':' + mw.config.get('wgTitle'), 'वार्ता पृष्ठ मेटाइँदै');
				talkpage.setEditSummary('[[वि:शीमे#सा८|सा८]]: मेटाइएको पृष्ठको वार्ता पृष्ठ "' + Morebits.pageNameNorm + '"');
				talkpage.setChangeTags(Twinkle.changeTags);
				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',
					titles: mw.config.get('wgPageName'),
					prop: 'redirects',
					rdlimit: 'max', // 500 is max for normal users, 5000 for bots and sysops
					format: 'json'
				};
				var wikipedia_api = new Morebits.wiki.api('अनुप्रेषणहरूको सूची प्राप्त गर्दै...', query, Twinkle.speedy.callbacks.sysop.deleteRedirectsMain,
					new Morebits.status('अनुप्रेषित पृष्ठ मेटाइँदै'));
				wikipedia_api.params = params;
				wikipedia_api.post();
			}

			// promote Unlink tool
			var $link, $bigtext;
			if (mw.config.get('wgNamespaceNumber') === 6 && params.normalized !== 'f8') {
				$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 !== 'f8') {
				$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: 'To orphan backlinks',
					css: { fontSize: '130%', fontWeight: 'bold' }
				});
				Morebits.status.info($bigtext[0], $link[0]);
			}
		},
		deleteRedirectsMain: function(apiobj) {
			var response = apiobj.getResponse();
			var snapshot = response.query.pages[0].redirects || [];
			var total = snapshot.length;
			var statusIndicator = apiobj.statelem;

			if (!total) {
				statusIndicator.status('no redirects found');
				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 + ' (completed)');
					Morebits.wiki.removeCheckpoint();
				}
			};

			Morebits.wiki.addCheckpoint();

			snapshot.forEach(function(value) {
				var title = value.title;
				var page = new Morebits.wiki.page(title, 'मेटाउँदै अनुप्रेषण "' + title + '"');
				page.setEditSummary('[[वि:शीमे#सा८|सा८]]: मेटाइएको पृष्ठको अनुप्रेषण "' + Morebits.pageNameNorm + '"');
				page.setChangeTags(Twinkle.changeTags);
				page.deletePage(onsuccess);
			});
		}
	},

	user: {
		main: function(pageobj) {
			var statelem = pageobj.getStatusElement();

			if (!pageobj.exists()) {
				statelem.error("यस्तो देखिन्छ कि पृष्ठ अवस्थित छैन; हुनसक्छ यो पहिले नै हटाइएको छ");
				return;
			}

			var params = pageobj.getCallbackParameters();

			// given the params, builds the template and also adds the user talk page parameters to the params that were passed in
			// returns => [<string> wikitext, <object> utparams]
			var buildData = Twinkle.speedy.callbacks.getTemplateCodeAndParams(params),
				code = buildData[0];
			params.utparams = buildData[1];

			// Set the correct value for |ts= parameter in {{db-g13}}
			if (params.normalizeds.indexOf('g13') !== -1) {
				code = code.replace('$TIMESTAMP', pageobj.getLastEditTime());
			}

			// Tag if possible, post on talk if not
			if (pageobj.canEdit() && ['wikitext', 'Scribunto', 'javascript', 'css', 'sanitized-css'].indexOf(pageobj.getContentModel()) !== -1) {
				var text = pageobj.getPageText();

				statelem.status('Checking for tags on the page...');

				// check for existing deletion tags
				var tag = /(?:\{\{\s*(db|delete|db-.*?|speedy deletion-.*?)(?:\s*\||\s*\}\}))/.exec(text);
				// This won't make use of the db-multiple template but it probably should
				if (tag && !confirm('The page already has the CSD-related template {{' + tag[1] + '}} on it.  Do you want to add another CSD template?')) {
					return;
				}

				var xfd = /\{\{((?:article for deletion|proposed deletion|prod blp|template for discussion)\/dated|[cfm]fd\b)/i.exec(text) || /#invoke:(RfD)/.exec(text);
				if (xfd && !confirm('The deletion-related template {{' + xfd[1] + '}} was found on the page. Do you still want to add a CSD template?')) {
					return;
				}

				// curate/patrol the page
				if (Twinkle.getPref('markSpeedyPagesAsPatrolled')) {
					pageobj.triage();
				}

				// 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*([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, '');
				}

				if (params.requestsalt) {
					if (params.normalizeds.indexOf('g10') === -1) {
						code += '\n{{salt}}';
					} else {
						code = '{{salt}}\n' + code;
					}
				}

				if (mw.config.get('wgPageContentModel') === 'Scribunto') {
					// Scribunto isn't parsed like wikitext, so CSD templates on modules need special handling to work
					var equals = '';
					while (code.indexOf(']' + equals + ']') !== -1) {
						equals += '=';
					}
					code = "require('Module:Module wikitext')._addText([" + equals + '[' + code + ']' + equals + ']);';
				} else if (['javascript', 'css', 'sanitized-css'].indexOf(mw.config.get('wgPageContentModel')) !== -1) {
					// Likewise for JS/CSS pages
					code = '/* ' + code + ' */';
				}

			// 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 = 'कारणका साथ [[वि:शीमे|शीघ्र मेटाउन]] अनुरोध गरिँदै "' + params.templateParams[0]['1'] + '"।';
			} else {
				editsummary = 'शीघ्र मेटाउन अनुरोध गरिँदै ([[वि:शीमे#' + params.normalizeds[0].toUpperCase() + '|शीमे ' + params.normalizeds[0].toUpperCase() + ']])।';
			}

				// Blank attack pages
				if (params.normalizeds.indexOf('g10') !== -1) {
					text = code;
				} else {
					// Insert tag after short description or any hatnotes
					var wikipage = new Morebits.wikitext.page(text);
					text = wikipage.insertAfterTemplates(code + '\n', Twinkle.hatnoteRegex).getText();
				}


				pageobj.setPageText(text);
				pageobj.setEditSummary(editsummary);
				pageobj.setWatchlist(params.watch);
				pageobj.save(Twinkle.speedy.callbacks.user.tagComplete);
			} else { // Attempt to place on talk page
				var talkName = new mw.Title(pageobj.getPageName()).getTalkPage().toText();
				if (talkName !== pageobj.getPageName()) {
					if (params.requestsalt) {
						code += '\n{{salt}}';
					}

					pageobj.getStatusElement().warn('Unable to edit page, placing tag on talk page');

					var talk_page = new Morebits.wiki.page(talkName, 'Automatically placing tag on talk page');
					talk_page.setNewSectionTitle(pageobj.getPageName() + ' nominated for CSD, request deletion');
					talk_page.setNewSectionText(code + '\n\nI was unable to tag ' + pageobj.getPageName() + ' so please delete it. ~~~~');
					talk_page.setCreateOption('recreate');
					talk_page.setFollowRedirect(true);
					talk_page.setWatchlist(params.watch);
					talk_page.setChangeTags(Twinkle.changeTags);
					talk_page.setCallbackParameters(params);
					talk_page.newSection(Twinkle.speedy.callbacks.user.tagComplete);
				} else {
					pageobj.getStatusElement().error('Page protected and nowhere to add an edit request, aborting');
				}
			}
		},

		tagComplete: function(pageobj) {
			var params = pageobj.getCallbackParameters();

			// Notification to first contributor, will also log nomination to the user's userspace log
			if (params.usertalk) {
				var thispage = new Morebits.wiki.page(Morebits.pageNameNorm);
				thispage.setCallbackParameters(params);
				thispage.lookupCreation(Twinkle.speedy.callbacks.noteToCreator);
			// 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);
			}
		},

		addToLog: function(params, initialContrib) {
			var usl = new Morebits.userspaceLogger(Twinkle.getPref('speedyLogPageName'));
			usl.initialText =
				"This is a log of all [[WP:CSD|speedy deletion]] nominations made by this user using [[WP:TW|Twinkle]]'s CSD module.\n\n" +
				'If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and ' +
				'nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].' +
				(Morebits.userIsSysop ? '\n\nThis log does not track outright speedy deletions made using Twinkle.' : '');

			var formatParamLog = function(normalize, csdparam, input) {
				if ((normalize === 'सा४' && csdparam === 'xfd') ||
					(normalize === 'सा६' && csdparam === 'page') ||
					(normalize === 'सा६' && csdparam === 'fullvotepage') ||
					(normalize === 'सा६' && csdparam === 'sourcepage') ||
					(normalize === 'ले२' && csdparam === 'source') ||
					(normalize === 'ले१०' && csdparam === 'article') ||
					(normalize === 'फा१' && csdparam === 'filename')) {
					input = '[[:' + input + ']]';
				} else if (normalize === 'फा५' && csdparam === 'user') {
					input = '[[:User:' + input + ']]';
				} else if (normalize === 'सा१२' && csdparam.lastIndexOf('url', 0) === 0 && input.lastIndexOf('http', 0) === 0) {
					input = '[' + input + ' ' + input + ']';
				} else if (normalize === 'फा८' && csdparam === 'filename') {
					input = '[[commons:' + input + ']]';
				} else if (normalize === 'पो१' && csdparam === 'criterion') {
					input = '[[वि:शीमे#' + input + ']]';
				}
				return ' {' + normalize + ' ' + csdparam + ': ' + input + '}';
			};

			var extraInfo = '';

			// If a logged file is deleted but exists on commons, the wikilink will be blue, so provide a link to the log
			var fileLogLink = mw.config.get('wgNamespaceNumber') === 6 ? ' ([{{fullurl:Special:Log|page=' + mw.util.wikiUrlencode(mw.config.get('wgPageName')) + '}} लग])' : '';

			var editsummary = 'शीघ्र मेटाउने नामाङ्कनको लग बनाउँदै';
			var appendText = '# [[:' + Morebits.pageNameNorm;

			if (params.normalizeds.indexOf('g10') === -1) {  // no article name in log for G10 taggings
				appendText += ']]' + fileLogLink + ': ';
				editsummary += ' of [[:' + Morebits.pageNameNorm + ']].';
			} else {
				appendText += '|यो]] आक्रमण पृष्ठ' + fileLogLink + ': ';
				editsummary += ' एक आक्रमण पृष्ठ';
			}
			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() + '|CSD ' + params.normalizeds[0].toUpperCase() + ']] ({{tl|db-' + params.values[0] + '}})';
			}

			// If params is "empty" it will still be full of empty arrays, but ask anyway
			if (params.templateParams) {
				// Treat custom rationale individually
				if (params.normalizeds[0] && params.normalizeds[0] === 'db') {
					extraInfo += formatParamLog('अनुकूलन', 'rationale', params.templateParams[0]['1']);
				} else {
					params.templateParams.forEach(function(item, index) {
						var keys = Object.keys(item);
						if (keys[0] !== undefined && keys[0].length > 0) {
							// Second loop required since some items (G12, F9) may have multiple keys
							keys.forEach(function(key, keyIndex) {
								if (keys[keyIndex] === 'blanked' || keys[keyIndex] === 'ts') {
									return true; // Not worth logging
								}
								extraInfo += formatParamLog(params.normalizeds[index].toUpperCase(), keys[keyIndex], item[key]);
							});
						}
					});
				}
			}

			if (params.requestsalt) {
				appendText += '; निर्माण संरक्षण (साल्टिङ) अनुरोध गरिएको)';
			}
			if (extraInfo) {
				appendText += '; थप जानकारी:' + extraInfo;
			}
			if (initialContrib) {
				appendText += '; सूचित गरियो {{user|1=' + initialContrib + '}}';
			}
			appendText += ' ~~~~~\n';

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

// 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('CSD U1:  Please specify a rationale when nominating user talk pages.');
						parameters = null;
						return false;
					}
					currentParams.rationale = u1rationale;
				}
				break;

			case 'repost':  // G4
				if (form['csd.repost_xfd']) {
					var deldisc = form['csd.repost_xfd'].value;
					if (deldisc) {
						if (!new RegExp('^:?' + Morebits.namespaceRegex(4) + ':', 'i').test(deldisc)) {
							alert('शीमे सा४: मेटाउने छलफल पृष्ठको नाम, यदि प्रदान गरिएमा, "विकिपिडिया:"सँग सुरू हुनुपर्छ।');
							parameters = null;
							return false;
						}
						currentParams.xfd = deldisc;
					}
				}
				break;

			case 'banned':  // G5
				if (form['csd.banned_user'] && form['csd.banned_user'].value) {
					currentParams.user = form['csd.banned_user'].value.replace(/^\s*User:/i, '');
				}
				break;

			case 'move':  // G6
				if (form['csd.move_page'] && form['csd.move_reason']) {
					var movepage = form['csd.move_page'].value,
						movereason = form['csd.move_reason'].value;
					if (!movepage || !movepage.trim()) {
						alert('शीमे सा६ (सार्ने): कृपया सार्ने पृष्ठलाई यहाँ निर्दिष्ट गर्नुहोस्।');
						parameters = null;
						return false;
					}
					if (!movereason || !movereason.trim()) {
						alert('शीमे सा६ (सार्ने): कृपया पृष्ठलाई सार्ने कारण यहाँ निर्दिष्ट गर्नुहोस्।');
						parameters = null;
						return false;
					}
					currentParams.page = movepage;
					currentParams.reason = movereason;
				}
				break;

			case 'xfd':  // G6
				if (form['csd.xfd_fullvotepage']) {
					var xfd = form['csd.xfd_fullvotepage'].value;
					if (xfd) {
						if (!new RegExp('^:?' + Morebits.namespaceRegex(4) + ':', 'i').test(xfd)) {
							alert('शीमे सा६ (पृहनी): मेटाउने छलफल पृष्ठको नाम, यदि प्रदान गरिएमा, "विकिपिडिया:"सँग सुरू हुनुपर्छ।');
							parameters = null;
							return false;
						}
						currentParams.fullvotepage = xfd;
					}
				}
				break;

			case 'copypaste':  // G6
				if (form['csd.copypaste_sourcepage']) {
					var copypaste = form['csd.copypaste_sourcepage'].value;
					if (!copypaste || !copypaste.trim()) {
						alert('शीमे सा६ (प्रतिलिपिसाभार): कृपया स्रोत पृष्ठको नाम निर्दिष्ट गर्नुहोस्।');
						parameters = null;
						return false;
					}
					currentParams.sourcepage = copypaste;
				}
				break;

			case 'g6':  // 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':  // G8
				if (form['csd.g8_rationale'] && form['csd.g8_rationale'].value) {
					currentParams.rationale = form['csd.g8_rationale'].value;
				}
				break;

			case 'templatecat':  // G8
				if (form['csd.templatecat_rationale'] && form['csd.templatecat_rationale'].value) {
					currentParams.rationale = form['csd.templatecat_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
				currentParams.ts = '$TIMESTAMP'; // to be replaced by the last revision timestamp when page is saved
				break;

			case 'redundantimage':  // F1
				if (form['csd.redundantimage_filename']) {
					var redimage = form['csd.redundantimage_filename'].value;
					if (!redimage || !redimage.trim()) {
						alert('CSD F1:  Please specify the filename of the other file.');
						parameters = null;
						return false;
					}
					currentParams.filename = new RegExp('^\\s*' + Morebits.namespaceRegex(6) + ':', 'i').test(redimage) ? redimage : 'File:' + redimage;
				}
				break;

			case 'badfairuse':  // F7
				if (form['csd.badfairuse_rationale'] && form['csd.badfairuse_rationale'].value) {
					currentParams.rationale = form['csd.badfairuse_rationale'].value;
				}
				break;

			case 'commons':  // F8
				if (form['csd.commons_filename']) {
					var filename = form['csd.commons_filename'].value;
					if (filename && filename.trim() && filename !== Morebits.pageNameNorm) {
						currentParams.filename = new RegExp('^\\s*' + Morebits.namespaceRegex(6) + ':', 'i').test(filename) ? filename : 'File:' + filename;
					}
				}
				break;

			case 'imgcopyvio':  // F9
				if (form['csd.imgcopyvio_url'] && form['csd.imgcopyvio_rationale']) {
					var f9url = form['csd.imgcopyvio_url'].value;
					var f9rationale = form['csd.imgcopyvio_rationale'].value;
					if ((!f9url || !f9url.trim()) && (!f9rationale || !f9rationale.trim())) {
						alert('शीमे फा९: फा९ अन्तर्गत फाइल नामाङ्कन गर्दा तपाईंले यूआरएल वा कारण (वा दुबै) प्रविष्ट गर्नुपर्नेछ।');
						parameters = null;
						return false;
					}
					if (form['csd.imgcopyvio_url'].value) {
						currentParams.url = f9url;
					}
					if (form['csd.imgcopyvio_rationale'].value) {
						currentParams.rationale = f9rationale;
					}
				}
				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 'transwiki':  // A5
				if (form['csd.transwiki_location'] && form['csd.transwiki_location'].value) {
					currentParams.location = form['csd.transwiki_location'].value;
				}
				break;

			case 'a10':  // 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 'p1':  // P1
				if (form['csd.p1_criterion']) {
					var criterion = form['csd.p1_criterion'].value;
					if (!criterion || !criterion.trim()) {
						alert('शीमे पो१:  एक मापदण्ड र/वा सम्बन्धित कारण निर्दिष्ट गर्नुहोस्।');
						parameters = null;
						return false;
					}
					currentParams.criterion = criterion;
				}
				break;

			default:
				break;
		}
		parameters.push(currentParams);
	});
	return parameters;
};

// Function for processing talk page notification template parameters
// key1/value1: for {{db-criterion-[notice|deleted]}} (via {{db-csd-[notice|deleted]-custom}})
// utparams.param: for {{db-[notice|deleted]-multiple}}
Twinkle.speedy.getUserTalkParameters = function twinklespeedyGetUserTalkParameters(normalized, parameters) {
	var utparams = [];

	// Special cases
	if (normalized === 'db') {
		utparams['2'] = parameters['1'];
	} else if (normalized === 'g6') {
		utparams.key1 = 'to';
		utparams.value1 = Morebits.pageNameNorm;
	} else if (normalized === 'g12') {
		['url', 'url2', 'url3'].forEach(function(item, idx) {
			if (parameters[item]) {
				idx++;
				utparams['key' + idx] = item;
				utparams['value' + idx] = utparams[item] = parameters[item];
			}
		});
	} else {
		// Handle the rest
		var param;
		switch (normalized) {
			case 'g4':
				param = 'xfd';
				break;
			case 'a2':
				param = 'source';
				break;
			case 'a5':
				param = 'location';
				break;
			case 'a10':
				param = 'article';
				break;
			case 'f9':
				param = 'url';
				break;
			case 'p1':
				param = 'criterion';
				break;
			default:
				break;
		}
		// No harm in providing a usertalk template with the others' parameters
		if (param && parameters[param]) {
			utparams.key1 = param;
			utparams.value1 = utparams[param] = parameters[param];
		}
	}
	return utparams;
};

/**
 * @param {Event} e
 * @returns {Array}
 */
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;

	if (e.target.type === 'checkbox' || e.target.type === 'text' ||
			e.target.type === 'select') {
		return;
	}

	var tag_only = form.tag_only;
	if (tag_only && tag_only.checked) {
		Twinkle.speedy.callback.evaluateUser(e);
		return;
	}

	var values = Twinkle.speedy.resolveCsdValues(e);
	if (!values) {
		return;
	}
	var templateParams = Twinkle.speedy.getParameters(form, values);
	if (!templateParams) {
		return;
	}

	var normalizeds = values.map(function(value) {
		return Twinkle.speedy.normalizeHash[value];
	});

	// analyse each criterion to determine whether to watch the page, prompt for summary, or notify the creator
	var watchPage, promptForSummary;
	normalizeds.forEach(function(norm) {
		if (Twinkle.getPref('watchSpeedyPages').indexOf(norm) !== -1) {
			watchPage = Twinkle.getPref('watchSpeedyExpiry');
		}
		if (Twinkle.getPref('promptForSpeedyDeletionSummary').indexOf(norm) !== -1) {
			promptForSummary = true;
		}
	});

	var warnusertalk = form.warnusertalk.checked && normalizeds.some(function (norm, index) {
		return Twinkle.getPref('warnUserOnSpeedyDelete').indexOf(norm) !== -1 &&
			!(norm === 'g6' && values[index] !== 'copypaste');
	});

	var welcomeuser = warnusertalk && normalizeds.some(function (norm) {
		return Twinkle.getPref('welcomeUserOnSpeedyDeletionNotification').indexOf(norm) !== -1;
	});

	var params = {
		values: values,
		normalizeds: normalizeds,
		watch: watchPage,
		deleteTalkPage: form.talkpage && form.talkpage.checked,
		deleteRedirects: form.redirects.checked,
		warnUser: warnusertalk,
		welcomeuser: welcomeuser,
		promptForSummary: promptForSummary,
		templateParams: templateParams
	};

	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 templateParams = Twinkle.speedy.getParameters(form, values);
	if (!templateParams) {
		return;
	}

	// var multiple = form.multiple.checked;

	var normalizeds = values.map(function(value) {
		return Twinkle.speedy.normalizeHash[value];
	});

	// analyse each criterion to determine whether to watch the page/notify the creator
	var watchPage = normalizeds.some(function(norm) {
		return Twinkle.getPref('watchSpeedyPages').indexOf(norm) !== -1 && Twinkle.getPref('watchSpeedyExpiry');
	});
	var notifyuser = form.notify.checked && normalizeds.some(function(norm, index) {
		return Twinkle.getPref('notifyUserOnSpeedyDeletionNomination').indexOf(norm) !== -1 &&
			!(norm === 'g6' && values[index] !== 'copypaste');
	});
	var welcomeuser = notifyuser && normalizeds.some(function(norm) {
		return Twinkle.getPref('welcomeUserOnSpeedyDeletionNotification').indexOf(norm) !== -1;
	});
	var csdlog = Twinkle.getPref('logSpeedyNominations') && normalizeds.some(function(norm) {
		return Twinkle.getPref('noLogOnSpeedyNomination').indexOf(norm) === -1;
	});

	var params = {
		values: values,
		normalizeds: normalizeds,
		watch: watchPage,
		usertalk: notifyuser,
		welcomeuser: welcomeuser,
		lognomination: csdlog,
		requestsalt: form.salting.checked,
		templateParams: templateParams
	};

	Morebits.simpleWindow.setButtonsEnabled(false);
	Morebits.status.init(form);

	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
	Morebits.wiki.actionCompleted.notice = 'चिनो लगाउने कार्य सम्पन्न भयो';

	var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'पृष्ठ चिह्नित गर्दै');
	wikipedia_page.setChangeTags(Twinkle.changeTags); // Here to apply to triage
	wikipedia_page.setCallbackParameters(params);
	wikipedia_page.load(Twinkle.speedy.callbacks.user.main);
};

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


// </nowiki>