پیش‌نویس:Gadget-friendlywelcome-2020.js

// <nowiki>


(function($) {


/*
 ****************************************
 *** friendlywelcome.js: Welcome module
 ****************************************
 * Mode of invocation:     Tab ("Wel"), or from links on diff pages
 * Active on:              Any page with relevant user name (userspace,
 *                         contribs, etc.) and diff pages
 */

Twinkle.welcome = function friendlywelcome() {
	if (mw.util.getParamValue('friendlywelcome')) {
		if (mw.util.getParamValue('friendlywelcome') === 'auto') {
			Twinkle.welcome.auto();
		} else {
			Twinkle.welcome.semiauto();
		}
	} else {
		Twinkle.welcome.normal();
	}
};

Twinkle.welcome.auto = function() {
	if (mw.util.getParamValue('action') !== 'edit') {
		// userpage not empty, aborting auto-welcome
		return;
	}

	Twinkle.welcome.welcomeUser();
};

Twinkle.welcome.semiauto = function() {
	Twinkle.welcome.callback(mw.config.get('wgRelevantUserName'));
};

Twinkle.welcome.normal = function() {
	if (mw.util.getParamValue('diff')) {
		// check whether the contributors' talk pages exist yet
		var $oList = $('#mw-diff-otitle2').find('span.mw-usertoollinks a.new:contains(talk)').first();
		var $nList = $('#mw-diff-ntitle2').find('span.mw-usertoollinks a.new:contains(talk)').first();

		if ($oList.length > 0 || $nList.length > 0) {
			var spanTag = function(color, content) {
				var span = document.createElement('span');
				span.style.color = color;
				span.appendChild(document.createTextNode(content));
				return span;
			};

			var welcomeNode = document.createElement('strong');
			var welcomeLink = document.createElement('a');
			welcomeLink.appendChild(spanTag('Black', '['));
			welcomeLink.appendChild(spanTag('Goldenrod', 'خوشامد')); // localized
			welcomeLink.appendChild(spanTag('Black', ']'));
			welcomeNode.appendChild(welcomeLink);

			if ($oList.length > 0) {
				var oHref = $oList.attr('href');

				var oWelcomeNode = welcomeNode.cloneNode(true);
				oWelcomeNode.firstChild.setAttribute('href', oHref + '&' + $.param({
					'friendlywelcome': Twinkle.getPref('quickWelcomeMode') === 'auto' ? 'auto' : 'norm',
					'vanarticle': Morebits.pageNameNorm
				}));
				$oList[0].parentNode.parentNode.appendChild(document.createTextNode(' '));
				$oList[0].parentNode.parentNode.appendChild(oWelcomeNode);
			}

			if ($nList.length > 0) {
				var nHref = $nList.attr('href');

				var nWelcomeNode = welcomeNode.cloneNode(true);
				nWelcomeNode.firstChild.setAttribute('href', nHref + '&' + $.param({
					'friendlywelcome': Twinkle.getPref('quickWelcomeMode') === 'auto' ? 'auto' : 'norm',
					'vanarticle': Morebits.pageNameNorm
				}));
				$nList[0].parentNode.parentNode.appendChild(document.createTextNode(' '));
				$nList[0].parentNode.parentNode.appendChild(nWelcomeNode);
			}
		}
	}
	if (mw.config.get('wgRelevantUserName')) {
		Twinkle.addPortletLink(function() {
			Twinkle.welcome.callback(mw.config.get('wgRelevantUserName'));
		}, 'خوشامد', 'friendly-welcome', 'خوشامدگویی به کاربر'); // localized
	}
};

Twinkle.welcome.welcomeUser = function welcomeUser() {
	Morebits.status.init(document.getElementById('mw-content-text'));
	$('#catlinks').remove();

	var params = {
		value: Twinkle.getPref('quickWelcomeTemplate'),
		article: mw.util.getParamValue('vanarticle') || '',
		mode: 'auto'
	};

	var userTalkPage = mw.config.get('wgFormattedNamespaces')[3] + ':' + mw.config.get('wgRelevantUserName');
	Morebits.wiki.actionCompleted.redirect = userTalkPage;
	Morebits.wiki.actionCompleted.notice = 'خوشامدگویی انجام شد، در حال بارگزاری دوبارهٔ صفحه بحث تا چند ثانیهٔ دیگر'; // localized

	var wikipedia_page = new Morebits.wiki.page(userTalkPage, 'ویرایش صفحهٔ بحث کاربر'); // localized
	wikipedia_page.setFollowRedirect(true);
	wikipedia_page.setCallbackParameters(params);
	wikipedia_page.load(Twinkle.welcome.callbacks.main);
};

Twinkle.welcome.callback = function friendlywelcomeCallback(uid) {
	if (uid === mw.config.get('wgUserName') && !confirm('آیا از خوشامدگویی به خودتان مطمئن هستید؟...')) { // localized
		return;
	}

	var Window = new Morebits.simpleWindow(600, 420);
	Window.setTitle('خوشامدگویی به کاربر'); // localized
	Window.setScriptName('توینکل'); // localiezd
	// Window.addFooterLink('Welcoming Committee', 'WP:WC'); // localized [removed]
	Window.addFooterLink('راهنمای توینکل', 'en:WP:TW/DOC#welcome'); // localized

	var form = new Morebits.quickForm(Twinkle.welcome.callback.evaluate);

	form.append({
		type: 'select',
		name: 'type',
		label: 'نوع خوشامدگویی: ',
		event: Twinkle.welcome.populateWelcomeList,
		list: [
			{ type: 'option', value: 'standard', label: 'خوشامدهای استاندارد', selected: !mw.util.isIPAddress(mw.config.get('wgRelevantUserName')) }, // localized
			{ type: 'option', value: 'anonymous', label: 'خوشامد به کاربران ناشناس', selected: mw.util.isIPAddress(mw.config.get('wgRelevantUserName')) } // , // localized
			// { type: 'option', value: 'wikiProject', label: 'WikiProject welcomes' }, // localized [removed]
			// { type: 'option', value: 'nonEnglish', label: 'Non-English welcomes' } // localiezd [removed]
		]
	});

	form.append({
		type: 'div',
		id: 'welcomeWorkArea',
		className: 'morebits-scrollbox'
	});

	form.append({
		type: 'input',
		name: 'article',
		label: '* مقالهٔ پیوند شده (در صورت پشتیبانی توسط الگو):', // localized
		value: mw.util.getParamValue('vanarticle') || '',
		tooltip: 'در صورت پشتیبانی توسط الگو، می‌توان یک مقاله را از درون پیام خوشامد پیوند داد. برای اینکه به هیچ مقاله‌ای پیوند داده نشود، جعبه را خالی بگذارید. الگوهایی که از پیونددهی به یک مقاله پشتیبانی می‌کنند با یک ستاره علامت‌گذاری شده‌اند.' // localized
	});

	var previewlink = document.createElement('a');
	$(previewlink).click(function() {
		Twinkle.welcome.callbacks.preview(result);  // |result| is defined below
	});
	previewlink.style.cursor = 'pointer';
	previewlink.textContent = 'پیش‌نمایش'; // localized
	form.append({ type: 'div', name: 'welcomepreview', label: [ previewlink ] });

	form.append({ type: 'submit' });

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

	// initialize the welcome list
	var evt = document.createEvent('Event');
	evt.initEvent('change', true, true);
	result.type.dispatchEvent(evt);
};

Twinkle.welcome.populateWelcomeList = function(e) {
	var type = e.target.value;

	var container = new Morebits.quickForm.element({ type: 'fragment' });

	if ((type === 'standard' || type === 'anonymous') && Twinkle.getPref('customWelcomeList').length) {
		container.append({ type: 'header', label: 'الگوهای خوشامد سفارشی' }); // localized
		container.append({
			type: 'radio',
			name: 'template',
			list: Twinkle.getPref('customWelcomeList'),
			event: function() {
				e.target.form.article.disabled = false;
			}
		});
	}

	var sets = Twinkle.welcome.templates[type];
	$.each(sets, function(label, templates) {
		container.append({ type: 'header', label: label });
		container.append({
			type: 'radio',
			name: 'template',
			list: $.map(templates, function(properties, template) {
				return {
					value: template,
					label: '{{' + template + '}}: ' + properties.description + (properties.linkedArticle ? '\u00A0*' : ''),  // U+00A0 NO-BREAK SPACE
					tooltip: properties.tooltip  // may be undefined
				};
			}),
			event: function(ev) {
				ev.target.form.article.disabled = !templates[ev.target.value].linkedArticle;
			}
		});
	});

	var rendered = container.render();
	$(e.target.form).find('div#welcomeWorkArea').empty().append(rendered);

	var firstRadio = e.target.form.template[0];
	firstRadio.checked = true;
	var vals = sets[Object.keys(sets)[0]];
	e.target.form.article.disabled = vals[firstRadio.value] ? !vals[firstRadio.value].linkedArticle : true;
};

// A list of welcome templates and their properties and syntax

// The four fields that are available are "description", "linkedArticle", "syntax", and "tooltip".
// The three magic words that can be used in the "syntax" field are:
//   - $USERNAME$  - replaced by the welcomer's username, depending on user's preferences
//   - $ARTICLE$   - replaced by an article name, if "linkedArticle" is true
//   - $HEADER$    - adds a level 2 header (most templates already include this)

Twinkle.welcome.templates = {
	'standard': {
		'الگوهای خوشامد عمومی': { // localized
			'خوشامد': { // localized
				description: 'خوشامد استاندارد', // localized
				linkedArticle: true,
				syntax: '{{subst:خوشامد|$USERNAME$|art=$ARTICLE$}} ~~~~' // localized
			}, /*
			'welcome-retro': {
				description: 'پیام خوشامد با یک فهرست کوچک از پیوندهای کاربردی', // localized
				linkedArticle: true,
				syntax: '{{subst:welcome-retro|$USERNAME$|art=$ARTICLE$}} ~~~~' // localized
			}, */ // localized [removed]
			'خوشامد-کوتاه': { // localized
				description: 'یک پیام خوشامد کوتاه‌تر', // localized
				syntax: '{{subst:خوشامد-کوتاه|heading=yes|$EXTRA$}}' // localized
			}/* ,
			'welcome-personal': {
				description: 'یک خوشامدگویی صمیمی‌تر، شامل بشقابی پر از کلوچه', // localized
				syntax: '{{subst:Welcome-personal|$USERNAME$}} ~~~~'
			},
			'welcome-graphical': {
				description: 'پیام رنگارنگ خوشامد با جدولی تشکیل‌شده از حدود ۲۰ پیوند', // localized
				syntax: '$HEADER$ {{subst:خوشامد-رنگی|$EXTRA$}}' // localized
			},
			'welcome-menu': {
				description: 'پیام خوشامد با جدولی بزرگ، تشکیل‌شده از حدود ۶۰ پیوند', // localized
				syntax: '{{subst:welcome-menu}}'
			},
			'welcome-screen': {
				description: 'پیام خوشامد با یک جدول تخت و حاشیه‌نویسی‌شده، تشکیل‌شده از ۱۰ پیوند', // localized
				syntax: '$HEADER$ {{subst:welcome-screen}}'
			},
			'welcome-belated': {
				description: 'خوشامد برای کاربرانی با مشارکت‌های قابل توجه‌تر', // localized
				syntax: '{{subst:Welcome-belated|$USERNAME$}}' // localized
			},
			'welcome student': {
				description: 'خوشامد برای دانش‌آموزانی که به‌عنوان بخشی از یک پروژهٔ کلاس تحصیلی به ویرایش می‌پردازند',
				syntax: '$HEADER$ {{subst:Welcome student|$USERNAME$}} ~~~~' // localized
			},
			'welcome teacher': {
				description: 'خوشامد برای مدرسان دوره‌ای که در یک پروژهٔ کلاس تحصیلی نقش دارند', // localized
				syntax: '$HEADER$ {{subst:Welcome teacher|$USERNAME$}} ~~~~' // localized
			},
			'welcome non-latin': {
				description: 'welcome for users with a username containing non-Latin characters',
				syntax: '{{subst:welcome non-latin|$USERNAME$}} ~~~~'
			} */ // localized [removed]
		},

		'الگوهای خوشامد به کاربر مشکلساز': { // localized
			/*'welcomelaws': {
				description: 'خوشامد با اطلاعاتی دربارهٔ حق تکثیر، دیدگاه بی‌طرف، صفحهٔ تمرین و خرابکاری', // localized
				syntax: '{{subst:Welcomelaws|$USERNAME$}} ~~~~' // localized
			},*/ // localized [removed]
			'نخستین نوشتار': { // localized
				description: 'برای شخصی که نخستین مقاله‌اش با رهنمودهای ایجاد صفحه‌ها مطابقت نداشته‌است', // localized
				linkedArticle: true,
				syntax: '{{subst:نخستین نوشتار|$ARTICLE$|$USERNAME$}}' // localized
			}/*,
			'welcometest': {
				description: 'برای شخصی که نخستین تلاش‌های او به‌نظر آزمایشی هستند', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcometest|$ARTICLE$|$USERNAME$}} ~~~~' // localized
			},
			'welcomevandal': {
				description: 'برای شخصی که نخستین تلاش‌های او به‌نظر خرابکاری هستند', // localized
				linkedArticle: true,
				syntax: '{{subst:welcomevandal|$ARTICLE$|$USERNAME$}}'
			},
			'welcomenpov': {
				description: 'برای شخصی که تلاش‌های اولیهٔ او با سیاست دیدگاه بی‌طرف سازگار نیست', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcomenpov|$ARTICLE$|$USERNAME$}} ~~~~' // localized
			},
			'welcomespam': {
				description: 'خوشامد با بحث‌های بیشتر در مورد سیاست‌های ضد هرزنگاری', // localized
				linkedArticle: true,
				syntax: '{{subst:خوشامد به هرزه‌نگار|$ARTICLE$|$USERNAME$}} ~~~~' // localized
			},
			'welcomeunsourced': {
				description: 'برای شخصی که ویرایش‌های اولیهٔ او فاقد منبع هستند', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcomeunsourced|$ARTICLE$|$USERNAME$}} ~~~~' // localized
			},
			'welcomeauto': {
				description: 'برای شخصی که یک مقالهٔ خودزندگی‌نامه را ایجاد کرده‌است', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcomeauto|$USERNAME$|art=$ARTICLE$}} ~~~~' // localized
			},
			'welcome-COI': {
				description: 'برای شخصی که در زمینه‌هایی که ممکن است با آن‌ها تعارض منافع داشته‌باشد، ویرایش کرده‌است', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcome-COI|$USERNAME$|art=$ARTICLE$}} ~~~~' // localized
			},
			'welcome-delete': {
				description: 'برای شخصی که مشغول به حذف اطلاعات از مقاله‌های بوده‌است', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcome-delete|$ARTICLE$|$USERNAME$}} ~~~~' // localized
			},
			'welcome-image': {
				description: 'خوشامد با اطلاعات بیشتر دربارهٔ تصاویر (سیاست و فرایند)', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcome-image|$USERNAME$|art=$ARTICLE$}}' // localized
			}*/ // localized [removed]
		}
	},

	'anonymous': {
		'الگوهای خوشامد به کاربران گمنام': { // localized
			'خوشامد-آی‌پی': { // localized
				description: 'برای کاربران ناشناس؛ تشویق به ساخت حساب کاربری', // localized
				linkedArticle: true,
				syntax: '{{subst:خوشامد-آی‌پی|art=$ARTICLE$}} ~~~~' // localized
			}/*,
			'welcome-anon-test': {
				description: 'برای کاربران ناشناسی که ویرایش‌های آزمایشی انجام داده‌اند', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcome-anon-test|$ARTICLE$|$USERNAME$}} ~~~~' // localized
			},
			'welcome-anon-unconstructive': {
				description: 'برای کاربران ناشناسی که ویرایش‌های خرابکارانه یا غیرسازنده انجام داده‌اند', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcome-anon-unconstructive|$ARTICLE$|$USERNAME$}}' // localized
			},
			'welcome-anon-constructive': {
				description: 'برای کاربران ناشناسی که با خرابکاری مبارزه می‌کنند یا ویرایش‌های سازنده انجام می‌دهند', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcome-anon-constructive|art=$ARTICLE$}}' // localized
			},
			'welcome-anon-delete': {
				description: 'برای کاربران ناشناسی که محتوایی را از صفحه‌ها حذف کرده‌اند', // localized
				linkedArticle: true,
				syntax: '{{subst:Welcome-anon-delete|$ARTICLE$|$USERNAME$}} ~~~~' // localized
			}*/ // localized [removed]
		}
	}/*,

	'wikiProject': {
		'WikiProject-specific welcome templates': {
			'welcome-anatomy': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات کالبدشناسی', // localized
				syntax: '{{subst:welcome-anatomy}} ~~~~'
			},
			'welcome-athletics': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات ورزشی (دو و میدانی)', // localized
				syntax: '{{subst:welcome-athletics}}'
			},
			'welcome-au': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با استرالیا', // localized
				syntax: '{{subst:Welcome-au}} ~~~~' // localized
			},
			'welcome-bd': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با بنگلادش', // localized
				linkedArticle: true,
				syntax: '{{subst:welcome-bd|$USERNAME$||$EXTRA$|art=$ARTICLE$}} ~~~~'
			},
			'welcome-bio': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات زندگی‌نامه', // localized
				syntax: '{{subst:Welcome-bio}} ~~~~' // localized
			},
			'welcome-cal': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با کالیفرنیا', // localized
				syntax: '{{subst:welcome-cal}} ~~~~'
			},
			'welcome-conserv': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات محافظه‌کاری', // localized
				syntax: '{{subst:welcome-conserv}}'
			},
			'welcome-cycling': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات دوچرخه‌سواری', // localized
				syntax: '{{subst:welcome-cycling}} ~~~~'
			},
			'welcome-dbz': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات دراگون بال', // localized
				syntax: '{{subst:welcome-dbz|$EXTRA$|sig=~~~~}}'
			},
			'welcome-et': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با استونی', // localized
				syntax: '{{subst:welcome-et}}'
			},
			'welcome-de': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با آلمان', // localized
				syntax: '{{subst:welcome-de}} ~~~~'
			},
			'welcome-in': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با هند', // localized
				linkedArticle: true,
				syntax: '{{subst:welcome-in|$USERNAME$|art=$ARTICLE$}} ~~~~'
			},
			'welcome-math': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات ریاضی', // localized
				linkedArticle: true,
				syntax: '{{subst:welcome-math|$USERNAME$|art=$ARTICLE$}} ~~~~'
			},
			'welcome-med': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات پزشکی', // localized
				linkedArticle: true,
				syntax: '{{subst:welcome-med|$USERNAME$|art=$ARTICLE$}} ~~~~'
			},
			'welcome-no': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با نروژ', // localized
				syntax: '{{subst:Welcome-no}} ~~~~' // localized
			},
			'welcome-pk': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با پاکستان', // localized
				linkedArticle: true,
				syntax: '{{subst:welcome-pk|$USERNAME$|art=$ARTICLE$}} ~~~~'
			},
			'welcome-phys': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات فیزیک', // localized
				linkedArticle: true,
				syntax: '{{subst:welcome-phys|$USERNAME$|art=$ARTICLE$}} ~~~~'
			},
			'welcome-pl': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با لهستان', // localized
				syntax: '{{subst:welcome-pl}} ~~~~'
			},
			'welcome-rugbyunion': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات اتحادیه راگبی', // localized
				syntax: '{{subst:welcome-rugbyunion}} ~~~~'
			},
			'welcome-ru': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با روسیه', // localized
				syntax: '{{subst:welcome-ru}} ~~~~'
			},
			'welcome-starwars': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات جنگ ستارگان', // localized
				syntax: '{{subst:welcome-starwars}} ~~~~'
			},
			'welcome-ch': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با سوئیس', // localized
				linkedArticle: true,
				syntax: '{{subst:welcome-ch|$USERNAME$|art=$ARTICLE$}} ~~~~'
			},
			'welcome-uk': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات مرتبط با اکراین', // localized
				syntax: '{{subst:welcome-uk}} ~~~~'
			},
			'welcome-roads': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات جاده‌ها و بزرگراه‌ها', // localized
				syntax: '{{subst:Welcome-roads}}' // localized
			},
			'welcome-videogames': {
				description: 'خوشامد برای کاربرانی با علاقهٔ آشکار به موضوعات بازی‌های ویدئویی', // localized
				syntax: '{{subst:welcome-videogames}}'
			},
			'TWA invite': {
				description: 'دعوت کردن کاربر به ماجراجویی در ویکی‌پدیا (این یک الگوی خوشامد نیست)', // localized
				syntax: '{{وپ:مدو/دعوت|امضا=~~~~}}' // localized
			}
		}
	},

	'nonEnglish': {
		'Non-English welcome templates': {
			'welcomeen': {
				description: 'خوشامد به کاربرانی که زبان مادری آن‌ها در این فهرست نیامده‌است', // localized
				syntax: '{{subst:welcomeen}}'
			},
			'welcomeen-ar': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها عربی است', // localized
				syntax: '{{subst:welcomeen-ar}}'
			},
			'welcomeen-sq': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها آلبانیایی است', // localized
				syntax: '{{subst:welcomeen-sq}}'
			},
			'welcomeen-zh': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها چینی است', // localized
				syntax: '{{subst:welcomeen-zh}}'
			},
			'welcomeen-nl': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها هلندی است', // localized
				syntax: '{{subst:welcomeen-nl}}'
			},
			'welcomeen-fi': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها فنلاندی است', // localized
				syntax: '{{subst:welcomeen-fi}}'
			},
			'welcomeen-fr': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها فرانسوی است', // localized
				syntax: '{{subst:welcomeen-fr}}'
			},
			'welcomeen-de': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها آلمانی است', // localized
				syntax: '{{subst:welcomeen-de}}'
			},
			'welcomeen-he': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها عبری است', // localized
				syntax: '{{subst:welcomeen-he}}'
			},
			'welcomeen-ja': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها ژاپنی است', // localized
				syntax: '{{subst:welcomeen-ja}}'
			},
			'welcomeen-ko': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها کره‌ای است', // localized
				syntax: '{{subst:welcomeen-ko}}'
			},
			'welcomeen-ml': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها مالایالم است', // localized
				syntax: '{{subst:welcomeen-ml}}'
			},
			'welcomeen-mr': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها مراتی', // localized
				syntax: '{{subst:welcomeen-mr}}'
			},
			'welcomeen-or': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها اوریه (اودیه) است', // localized
				syntax: '{{subst:welcomeen-or}}'
			},
			'welcomeen-pt': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها پرتغالی است', // localized
				syntax: '{{subst:welcomeen-pt}}'
			},
			'welcomeen-ro': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها رومانیایی است', // localized
				syntax: '{{subst:welcomeen-ro}}'
			},
			'welcomeen-ru': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها روسی است', // localized
				syntax: '{{subst:welcomeen-ru}}'
			},
			'welcomeen-es': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها اسپانیایی است', // localized
				syntax: '{{subst:welcomeen-es}}'
			},
			'welcomeen-sv': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها سوئدی است', // localized
				syntax: '{{subst:welcomeen-sv}}'
			},
			'welcomeen-uk': {
				description: 'خوشامد به کاربرانی ظاهراً زبان مادری آن‌ها اکراینی است', // localized
				syntax: '{{subst:welcomeen-uk}}'
			}
		}
	}*/ // localized [removed]

};

Twinkle.welcome.getTemplateWikitext = function(type, template, article) {
	// the iteration is required as the type=standard has two groups
	var properties;
	$.each(Twinkle.welcome.templates[type], function(label, templates) {
		properties = templates[template];
		if (properties) {
			return false; // break
		}
	});
	if (properties) {
		return properties.syntax.
			replace('$USERNAME$', Twinkle.getPref('insertUsername') ? mw.config.get('wgUserName') : '').
			replace('$ARTICLE$', article ? article : '').
			replace(/\$HEADER\$\s*/, '== Welcome ==\n\n').
			replace('$EXTRA$', '');  // EXTRA is not implemented yet
	}
	return '{{subst:' + template + (article ? '|art=' + article : '') + '}}' +
			(Twinkle.getPref('customWelcomeSignature') ? ' ~~~~' : '');
};

Twinkle.welcome.callbacks = {
	preview: function(form) {
		var previewDialog = new Morebits.simpleWindow(750, 400);
		previewDialog.setTitle('پیش‌نمایش الگوی خوشامد'); // localized
		previewDialog.setScriptName('خوشامد به کاربر'); // localized
		previewDialog.setModality(true);

		var previewdiv = document.createElement('div');
		previewdiv.style.marginLeft = previewdiv.style.marginRight = '0.5em';
		previewdiv.style.fontSize = 'small';
		previewDialog.setContent(previewdiv);

		var previewer = new Morebits.wiki.preview(previewdiv);
		previewer.beginRender(Twinkle.welcome.getTemplateWikitext(form.type.value, form.getChecked('template'), form.article.value), 'User talk:' + mw.config.get('wgRelevantUserName')); // Force wikitext/correct username

		var submit = document.createElement('input');
		submit.setAttribute('type', 'submit');
		submit.setAttribute('value', 'Close');
		previewDialog.addContent(submit);

		previewDialog.display();

		$(submit).click(function() {
			previewDialog.close();
		});
	},
	main: function(pageobj) {
		var params = pageobj.getCallbackParameters();
		var text = pageobj.getPageText();

		// abort if mode is auto and form is not empty
		if (pageobj.exists() && params.mode === 'auto') {
			Morebits.status.info('Warning', 'صفحهٔ بحث کاربر خالی نیست؛ در حال چشم‌پوشی از خوشامدگویی خودکار'); // localized
			Morebits.wiki.actionCompleted.event();
			return;
		}

		var welcomeText = Twinkle.welcome.getTemplateWikitext(params.type, params.value, params.article);

		if (Twinkle.getPref('topWelcomes')) {
			text = welcomeText + '\n\n' + text;
		} else {
			text += '\n' + welcomeText;
		}

		var summaryText = 'به ویکی‌پدیا خوش‌آمدید!'; // localized
		pageobj.setPageText(text);
		pageobj.setEditSummary(summaryText + Twinkle.getPref('summaryAd'));
		pageobj.setWatchlist(Twinkle.getPref('watchWelcomes'));
		pageobj.setCreateOption('recreate');
		pageobj.save();
	}
};

Twinkle.welcome.callback.evaluate = function friendlywelcomeCallbackEvaluate(e) {
	var form = e.target;

	var params = {
		type: form.type.value,
		value: form.getChecked('template'),
		article: form.article.value,
		mode: 'manual'
	};

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

	var userTalkPage = mw.config.get('wgFormattedNamespaces')[3] + ':' + mw.config.get('wgRelevantUserName');
	Morebits.wiki.actionCompleted.redirect = userTalkPage;
	Morebits.wiki.actionCompleted.notice = 'خوشامدگویی انجام شد، در حال بارگزاری دوبارهٔ صفحهٔ بحث تا چند لحظه دیگر'; // localized

	var wikipedia_page = new Morebits.wiki.page(userTalkPage, 'User talk page modification');
	wikipedia_page.setFollowRedirect(true);
	wikipedia_page.setCallbackParameters(params);
	wikipedia_page.load(Twinkle.welcome.callbacks.main);
};
})(jQuery);


// </nowiki>