<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://eurovision.jobogamer.xyz/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinklewelcome.js</id>
	<title>MediaWiki:Gadget-twinklewelcome.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://eurovision.jobogamer.xyz/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinklewelcome.js"/>
	<link rel="alternate" type="text/html" href="https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:Gadget-twinklewelcome.js&amp;action=history"/>
	<updated>2026-06-11T10:19:15Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:Gadget-twinklewelcome.js&amp;diff=41&amp;oldid=prev</id>
		<title>Alfie: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:Gadget-twinklewelcome.js&amp;diff=41&amp;oldid=prev"/>
		<updated>2026-03-19T09:58:25Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 05:58, 19 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Alfie</name></author>
	</entry>
	<entry>
		<id>https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:Gadget-twinklewelcome.js&amp;diff=40&amp;oldid=prev</id>
		<title>en&gt;SD0001: Repo at cb2c638: Move all non-test source files to a new src directory (#2254); fix some template parameters (#2295)</title>
		<link rel="alternate" type="text/html" href="https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:Gadget-twinklewelcome.js&amp;diff=40&amp;oldid=prev"/>
		<updated>2026-01-27T13:49:05Z</updated>

		<summary type="html">&lt;p&gt;Repo at cb2c638: Move all non-test source files to a new src directory (#2254); fix some template parameters (#2295)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklewelcome.js: Welcome module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;Wel&amp;quot;), or from links on diff pages&lt;br /&gt;
 * Active on:              Any page with relevant user name (userspace,&lt;br /&gt;
 *                         contribs, etc.) and diff pages&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome = function twinklewelcome() {&lt;br /&gt;
	if (Twinkle.getPrefill(&amp;#039;twinklewelcome&amp;#039;)) {&lt;br /&gt;
		if (Twinkle.getPrefill(&amp;#039;twinklewelcome&amp;#039;) === &amp;#039;auto&amp;#039;) {&lt;br /&gt;
			Twinkle.welcome.auto();&lt;br /&gt;
		} else {&lt;br /&gt;
			Twinkle.welcome.semiauto();&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		Twinkle.welcome.normal();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.auto = function() {&lt;br /&gt;
	if (mw.util.getParamValue(&amp;#039;action&amp;#039;) !== &amp;#039;edit&amp;#039;) {&lt;br /&gt;
		// userpage not empty, aborting auto-welcome&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	Twinkle.welcome.welcomeUser();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.semiauto = function() {&lt;br /&gt;
	Twinkle.welcome.callback(mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;));&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.normal = function() {&lt;br /&gt;
	const isDiff = mw.util.getParamValue(&amp;#039;diff&amp;#039;);&lt;br /&gt;
	if (isDiff) {&lt;br /&gt;
		// check whether the contributors&amp;#039; talk pages exist yet&lt;br /&gt;
		const $oldDiffUsernameLine = $(&amp;#039;#mw-diff-otitle2&amp;#039;);&lt;br /&gt;
		const $newDiffUsernameLine = $(&amp;#039;#mw-diff-ntitle2&amp;#039;);&lt;br /&gt;
		const $oldDiffHasRedlinkedTalkPage = $oldDiffUsernameLine.find(&amp;#039;span.mw-usertoollinks a.new:contains(talk)&amp;#039;).first();&lt;br /&gt;
		const $newDiffHasRedlinkedTalkPage = $newDiffUsernameLine.find(&amp;#039;span.mw-usertoollinks a.new:contains(talk)&amp;#039;).first();&lt;br /&gt;
&lt;br /&gt;
		const diffHasRedlinkedTalkPage = $oldDiffHasRedlinkedTalkPage.length &amp;gt; 0 || $newDiffHasRedlinkedTalkPage.length &amp;gt; 0;&lt;br /&gt;
		if (diffHasRedlinkedTalkPage) {&lt;br /&gt;
			const spanTag = function(color, content) {&lt;br /&gt;
				const span = document.createElement(&amp;#039;span&amp;#039;);&lt;br /&gt;
				span.style.color = color;&lt;br /&gt;
				span.appendChild(document.createTextNode(content));&lt;br /&gt;
				return span;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			const welcomeNode = document.createElement(&amp;#039;strong&amp;#039;);&lt;br /&gt;
			const welcomeLink = document.createElement(&amp;#039;a&amp;#039;);&lt;br /&gt;
			welcomeLink.appendChild(spanTag(&amp;#039;Black&amp;#039;, &amp;#039;[&amp;#039;));&lt;br /&gt;
			welcomeLink.appendChild(spanTag(&amp;#039;Goldenrod&amp;#039;, &amp;#039;welcome&amp;#039;));&lt;br /&gt;
			welcomeLink.appendChild(spanTag(&amp;#039;Black&amp;#039;, &amp;#039;]&amp;#039;));&lt;br /&gt;
			welcomeNode.appendChild(welcomeLink);&lt;br /&gt;
&lt;br /&gt;
			if ($oldDiffHasRedlinkedTalkPage.length &amp;gt; 0) {&lt;br /&gt;
				const oHref = $oldDiffHasRedlinkedTalkPage.attr(&amp;#039;href&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
				const oWelcomeNode = welcomeNode.cloneNode(true);&lt;br /&gt;
				oWelcomeNode.firstChild.setAttribute(&amp;#039;href&amp;#039;, oHref + &amp;#039;&amp;amp;&amp;#039; + $.param({&lt;br /&gt;
					twinklewelcome: Twinkle.getPref(&amp;#039;quickWelcomeMode&amp;#039;) === &amp;#039;auto&amp;#039; ? &amp;#039;auto&amp;#039; : &amp;#039;norm&amp;#039;,&lt;br /&gt;
					vanarticle: Morebits.pageNameNorm&lt;br /&gt;
				}));&lt;br /&gt;
				$oldDiffHasRedlinkedTalkPage[0].parentNode.parentNode.appendChild(document.createTextNode(&amp;#039; &amp;#039;));&lt;br /&gt;
				$oldDiffHasRedlinkedTalkPage[0].parentNode.parentNode.appendChild(oWelcomeNode);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ($newDiffHasRedlinkedTalkPage.length &amp;gt; 0) {&lt;br /&gt;
				const nHref = $newDiffHasRedlinkedTalkPage.attr(&amp;#039;href&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
				const nWelcomeNode = welcomeNode.cloneNode(true);&lt;br /&gt;
				nWelcomeNode.firstChild.setAttribute(&amp;#039;href&amp;#039;, nHref + &amp;#039;&amp;amp;&amp;#039; + $.param({&lt;br /&gt;
					twinklewelcome: Twinkle.getPref(&amp;#039;quickWelcomeMode&amp;#039;) === &amp;#039;auto&amp;#039; ? &amp;#039;auto&amp;#039; : &amp;#039;norm&amp;#039;,&lt;br /&gt;
					vanarticle: Morebits.pageNameNorm&lt;br /&gt;
				}));&lt;br /&gt;
				$newDiffHasRedlinkedTalkPage[0].parentNode.parentNode.appendChild(document.createTextNode(&amp;#039; &amp;#039;));&lt;br /&gt;
				$newDiffHasRedlinkedTalkPage[0].parentNode.parentNode.appendChild(nWelcomeNode);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	// Users and IPs but not IP ranges&lt;br /&gt;
	if (mw.config.exists(&amp;#039;wgRelevantUserName&amp;#039;) &amp;amp;&amp;amp; !Morebits.ip.isRange(mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;))) {&lt;br /&gt;
		Twinkle.addPortletLink(() =&amp;gt; {&lt;br /&gt;
			Twinkle.welcome.callback(mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;));&lt;br /&gt;
		}, &amp;#039;Wel&amp;#039;, &amp;#039;twinkle-welcome&amp;#039;, &amp;#039;Welcome user&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.welcomeUser = function welcomeUser() {&lt;br /&gt;
	Morebits.Status.init(document.getElementById(&amp;#039;mw-content-text&amp;#039;));&lt;br /&gt;
	$(&amp;#039;#catlinks&amp;#039;).remove();&lt;br /&gt;
&lt;br /&gt;
	const params = {&lt;br /&gt;
		template: Twinkle.getPref(&amp;#039;quickWelcomeTemplate&amp;#039;),&lt;br /&gt;
		article: Twinkle.getPrefill(&amp;#039;vanarticle&amp;#039;) || &amp;#039;&amp;#039;,&lt;br /&gt;
		mode: &amp;#039;auto&amp;#039;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const userTalkPage = mw.config.get(&amp;#039;wgFormattedNamespaces&amp;#039;)[3] + &amp;#039;:&amp;#039; + mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;);&lt;br /&gt;
	Morebits.wiki.actionCompleted.redirect = userTalkPage;&lt;br /&gt;
	Morebits.wiki.actionCompleted.notice = &amp;#039;Welcoming complete, reloading talk page in a few seconds&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	const wikipedia_page = new Morebits.wiki.Page(userTalkPage, &amp;#039;User talk page modification&amp;#039;);&lt;br /&gt;
	wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
	wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
	wikipedia_page.load(Twinkle.welcome.callbacks.main);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.callback = function twinklewelcomeCallback(uid) {&lt;br /&gt;
	if (uid === mw.config.get(&amp;#039;wgUserName&amp;#039;) &amp;amp;&amp;amp; !confirm(&amp;#039;Are you really sure you want to welcome yourself?...&amp;#039;)) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	const Window = new Morebits.SimpleWindow(600, 420);&lt;br /&gt;
	Window.setTitle(&amp;#039;Welcome user&amp;#039;);&lt;br /&gt;
	Window.setScriptName(&amp;#039;Twinkle&amp;#039;);&lt;br /&gt;
	Window.addFooterLink(&amp;#039;Welcoming Committee&amp;#039;, &amp;#039;WP:WC&amp;#039;);&lt;br /&gt;
	Window.addFooterLink(&amp;#039;Welcome prefs&amp;#039;, &amp;#039;WP:TW/PREF#welcome&amp;#039;);&lt;br /&gt;
	Window.addFooterLink(&amp;#039;Twinkle help&amp;#039;, &amp;#039;WP:TW/DOC#welcome&amp;#039;);&lt;br /&gt;
	Window.addFooterLink(&amp;#039;Give feedback&amp;#039;, &amp;#039;WT:TW&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	const form = new Morebits.QuickForm(Twinkle.welcome.callback.evaluate);&lt;br /&gt;
&lt;br /&gt;
	form.append({&lt;br /&gt;
		type: &amp;#039;select&amp;#039;,&lt;br /&gt;
		name: &amp;#039;type&amp;#039;,&lt;br /&gt;
		label: &amp;#039;Type of welcome:&amp;#039;,&lt;br /&gt;
		event: Twinkle.welcome.populateWelcomeList,&lt;br /&gt;
		list: [&lt;br /&gt;
			{ type: &amp;#039;option&amp;#039;, value: &amp;#039;standard&amp;#039;, label: &amp;#039;Standard welcomes&amp;#039;, selected: !mw.util.isIPAddress(mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;)) },&lt;br /&gt;
			{ type: &amp;#039;option&amp;#039;, value: &amp;#039;unregistered&amp;#039;, label: &amp;#039;Unregistered user welcomes&amp;#039;, selected: mw.util.isIPAddress(mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;)) || mw.util.isTemporaryUser(mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;)) },&lt;br /&gt;
			{ type: &amp;#039;option&amp;#039;, value: &amp;#039;wikiProject&amp;#039;, label: &amp;#039;WikiProject welcomes&amp;#039; },&lt;br /&gt;
			{ type: &amp;#039;option&amp;#039;, value: &amp;#039;nonEnglish&amp;#039;, label: &amp;#039;Non-English welcomes&amp;#039; }&lt;br /&gt;
		]&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	form.append({&lt;br /&gt;
		type: &amp;#039;div&amp;#039;,&lt;br /&gt;
		id: &amp;#039;welcomeWorkArea&amp;#039;,&lt;br /&gt;
		className: &amp;#039;morebits-scrollbox&amp;#039;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	form.append({&lt;br /&gt;
		type: &amp;#039;input&amp;#039;,&lt;br /&gt;
		name: &amp;#039;article&amp;#039;,&lt;br /&gt;
		label: &amp;#039;* Linked article (if supported by template):&amp;#039;,&lt;br /&gt;
		value: Twinkle.getPrefill(&amp;#039;vanarticle&amp;#039;) || &amp;#039;&amp;#039;,&lt;br /&gt;
		tooltip: &amp;#039;An article might be linked from within the welcome if the template supports it. Leave empty for no article to be linked.  Templates that support a linked article are marked with an asterisk.&amp;#039;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	const previewlink = document.createElement(&amp;#039;a&amp;#039;);&lt;br /&gt;
	$(previewlink).on(&amp;#039;click&amp;#039;, () =&amp;gt; {&lt;br /&gt;
		Twinkle.welcome.callbacks.preview(result); // |result| is defined below&lt;br /&gt;
	});&lt;br /&gt;
	previewlink.style.cursor = &amp;#039;pointer&amp;#039;;&lt;br /&gt;
	previewlink.textContent = &amp;#039;Preview&amp;#039;;&lt;br /&gt;
	form.append({ type: &amp;#039;div&amp;#039;, name: &amp;#039;welcomepreview&amp;#039;, label: [ previewlink ] });&lt;br /&gt;
&lt;br /&gt;
	form.append({ type: &amp;#039;submit&amp;#039; });&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent(result);&lt;br /&gt;
	Window.display();&lt;br /&gt;
&lt;br /&gt;
	// initialize the welcome list&lt;br /&gt;
	const evt = document.createEvent(&amp;#039;Event&amp;#039;);&lt;br /&gt;
	evt.initEvent(&amp;#039;change&amp;#039;, true, true);&lt;br /&gt;
	result.type.dispatchEvent(evt);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.populateWelcomeList = function(e) {&lt;br /&gt;
	const type = e.target.value;&lt;br /&gt;
&lt;br /&gt;
	const container = new Morebits.QuickForm.Element({ type: &amp;#039;fragment&amp;#039; });&lt;br /&gt;
&lt;br /&gt;
	if ((type === &amp;#039;standard&amp;#039; || type === &amp;#039;unregistered&amp;#039;) &amp;amp;&amp;amp; Twinkle.getPref(&amp;#039;customWelcomeList&amp;#039;).length) {&lt;br /&gt;
		container.append({ type: &amp;#039;header&amp;#039;, label: &amp;#039;Custom welcome templates&amp;#039; });&lt;br /&gt;
		container.append({&lt;br /&gt;
			type: &amp;#039;radio&amp;#039;,&lt;br /&gt;
			name: &amp;#039;template&amp;#039;,&lt;br /&gt;
			list: Twinkle.getPref(&amp;#039;customWelcomeList&amp;#039;),&lt;br /&gt;
			event: function() {&lt;br /&gt;
				e.target.form.article.disabled = false;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	const sets = Twinkle.welcome.templates[type];&lt;br /&gt;
	$.each(sets, (label, templates) =&amp;gt; {&lt;br /&gt;
		container.append({ type: &amp;#039;header&amp;#039;, label: label });&lt;br /&gt;
		container.append({&lt;br /&gt;
			type: &amp;#039;radio&amp;#039;,&lt;br /&gt;
			name: &amp;#039;template&amp;#039;,&lt;br /&gt;
			list: $.map(templates, (properties, template) =&amp;gt; ({&lt;br /&gt;
					value: template,&lt;br /&gt;
					label: &amp;#039;{{&amp;#039; + template + &amp;#039;}}: &amp;#039; + properties.description + (properties.linkedArticle ? &amp;#039;\u00A0*&amp;#039; : &amp;#039;&amp;#039;), // U+00A0 NO-BREAK SPACE&lt;br /&gt;
					tooltip: properties.tooltip // may be undefined&lt;br /&gt;
				})),&lt;br /&gt;
			event: function(ev) {&lt;br /&gt;
				ev.target.form.article.disabled = !templates[ev.target.value].linkedArticle;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	const rendered = container.render();&lt;br /&gt;
	$(e.target.form).find(&amp;#039;div#welcomeWorkArea&amp;#039;).empty().append(rendered);&lt;br /&gt;
&lt;br /&gt;
	const firstRadio = e.target.form.template[0];&lt;br /&gt;
	firstRadio.checked = true;&lt;br /&gt;
	const vals = Object.values(sets)[0];&lt;br /&gt;
	e.target.form.article.disabled = vals[firstRadio.value] ? !vals[firstRadio.value].linkedArticle : true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// A list of welcome templates and their properties and syntax&lt;br /&gt;
&lt;br /&gt;
// The four fields that are available are:&lt;br /&gt;
//   - &amp;quot;description&amp;quot;&lt;br /&gt;
//   - &amp;quot;linkedArticle&amp;quot; - when set to true, adds a &amp;quot;Linked article (if supported by template):&amp;quot; label and text box. The value typed into this text box is used to populate the $ARTICLE$ magic word below.&lt;br /&gt;
//   - &amp;quot;syntax&amp;quot;&lt;br /&gt;
//   - &amp;quot;tooltip&amp;quot;&lt;br /&gt;
// The three magic words that can be used in the &amp;quot;syntax&amp;quot; field are:&lt;br /&gt;
//   - $USERNAME$  - replaced by the welcomer&amp;#039;s username, depending on user&amp;#039;s preferences&lt;br /&gt;
//   - $ARTICLE$   - replaced by an article name, if &amp;quot;linkedArticle&amp;quot; is true&lt;br /&gt;
//   - $HEADER$    - adds a level 2 header (most templates already include this)&lt;br /&gt;
//   - $EXTRA$     - custom message to be added at the end of the template. not implemented yet.&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.templates = {&lt;br /&gt;
	standard: {&lt;br /&gt;
		&amp;#039;General welcome templates&amp;#039;: {&lt;br /&gt;
			welcome: {&lt;br /&gt;
				description: &amp;#039;standard welcome&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome|$USERNAME$|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-retro&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;a welcome message with a small list of helpful links&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-retro|$USERNAME$|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-short&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;a shorter welcome message&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:W-short|$EXTRA$}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-cookie&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;a welcome message with some helpful links and a plate of cookies&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome cookie}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			welcoming: {&lt;br /&gt;
				description: &amp;#039;welcome message with tutorial links and basic editing tips&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:Welcoming}}&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		&amp;#039;Specific welcome templates&amp;#039;: {&lt;br /&gt;
			&amp;#039;welcome-belated&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with more substantial contributions&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-belated|$USERNAME$}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome student&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for students editing as part of an educational class project&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;$HEADER$ {{subst:welcome student|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome teacher&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for course instructors involved in an educational class project&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;$HEADER$ {{subst:welcome teacher|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome non-latin&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with a username containing non-Latin characters&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome non-latin|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome mentor&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for mentor users to give to their mentees&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:mentor welcome|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome draft&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users who write draft articles&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome draft|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		&amp;#039;Problem user welcome templates&amp;#039;: {&lt;br /&gt;
			&amp;#039;first article&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for someone whose first article did not meet page creation guidelines&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:first article|$ARTICLE$|$USERNAME$}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-COI&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for someone who has edited in areas where they may have a conflict of interest&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-COI|$USERNAME$|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-auto&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for someone who created an autobiographical article&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-auto|$USERNAME$|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-copyright&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for someone who has been adding copyright violations to articles&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-copyright|$ARTICLE$|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-delete&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for someone who has been removing information from articles&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-delete|$ARTICLE$|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-image&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome with additional information about images (policy and procedure)&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-image|$USERNAME$|art=$ARTICLE$}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-LLM&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for someone whose initial efforts seem to be made with a large language model&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-LLM}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-translation&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for someone whose initial efforts are unattributed translations from another language Wikipedia&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-translation}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-unsourced&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for someone whose initial efforts are unsourced&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-unsourced|$ARTICLE$|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			welcomelaws: {&lt;br /&gt;
				description: &amp;#039;welcome with information about copyrights, NPOV, the sandbox, and vandalism&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcomelaws|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			welcomenpov: {&lt;br /&gt;
				description: &amp;#039;for someone whose initial efforts do not adhere to the neutral point of view policy&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcomenpov|$ARTICLE$|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			welcomevandal: {&lt;br /&gt;
				description: &amp;#039;for someone whose initial efforts appear to be vandalism&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcomevandal|$ARTICLE$|$USERNAME$}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			welcomespam: {&lt;br /&gt;
				description: &amp;#039;welcome with additional discussion of anti-spamming policies&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcomespam|$ARTICLE$|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			welcometest: {&lt;br /&gt;
				description: &amp;#039;for someone whose initial efforts appear to be tests&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcometest|$ARTICLE$|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	unregistered: {&lt;br /&gt;
		&amp;#039;Unregistered user welcome templates&amp;#039;: {&lt;br /&gt;
			&amp;#039;welcome-unregistered&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for unregistered users; encourages creating an account&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-unregistered|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			thanks: {&lt;br /&gt;
				description: &amp;#039;for unregistered users; short; encourages creating an account&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:thanks|page=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-unregistered-test&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for unregistered users who have performed test edits&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-unregistered-test|$ARTICLE$|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-unregistered-unconstructive&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for unregistered users who have vandalized or made unhelpful edits&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-unregistered-unconstructive|$ARTICLE$|$USERNAME$}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-unregistered-constructive&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for unregistered users who fight vandalism or edit constructively&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-unregistered-constructive|art=$ARTICLE$}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-unregistered-delete&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for unregistered users who have removed content from pages&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-unregistered-delete|$ARTICLE$|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-unregistered-unsourced&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;for anonymous users who have added unsourced content&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-unregistered-unsourced|$ARTICLE$|$USERNAME$}}&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	wikiProject: {&lt;br /&gt;
		&amp;#039;WikiProject-specific welcome templates&amp;#039;: {&lt;br /&gt;
			&amp;#039;TWA invite&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;invite the user to The Wikipedia Adventure (not a welcome template)&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:WP:TWA/InviteTW|signature=~~~~}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-anatomy&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in anatomy topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-anatomy}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-athletics&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in athletics (track and field) topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-athletics}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-au&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Australia topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-au}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-bd&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Bangladesh topics&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-bd|$USERNAME$||$EXTRA$|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-bio&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in biographical topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-bio}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-cal&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in California topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-cal}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-cath&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Catholic topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-cath}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-conserv&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in conservatism topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-conserv}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-cycling&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in cycling topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-cycling}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-dbz&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Dragon Ball topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-dbz|$EXTRA$|sig=~~~~}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-et&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Estonia topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-et}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-de&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Germany topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-de}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-in&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in India topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-in|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-math&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in mathematical topics&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-math|$USERNAME$|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-med&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in medicine topics&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-med|$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-no&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Norway topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-no}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-pk&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Pakistan topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-pk|$USERNAME$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-phys&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in physics topics&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-phys|$USERNAME$|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-pl&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Poland topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-pl}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-rugbyunion&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in rugby union topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-rugbyunion}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-ru&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Russia topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-ru}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-starwars&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Star Wars topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-starwars}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-ch&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Switzerland topics&amp;#039;,&lt;br /&gt;
				linkedArticle: true,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-ch|$USERNAME$|art=$ARTICLE$}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-uk&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in Ukraine topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-uk}} ~~~~&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-roads&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in roads and highways topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-roads}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcome-videogames&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an apparent interest in video game topics&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcome-videogames}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;WikiProject Women in Red invite&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users with an interest in writing about women&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:WikiProject Women in Red invite|1=~~~~}}&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	nonEnglish: {&lt;br /&gt;
		&amp;#039;Non-English welcome templates&amp;#039;: {&lt;br /&gt;
			welcomeen: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language is not listed here&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;{{subst:welcomeen}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-ar&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Arabic&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-ar}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-sq&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Albanian&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-sq}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-zh&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Chinese&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-zh}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-nl&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Dutch&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-nl}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-fi&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Finnish&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-fi}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-fr&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be French&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-fr}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-de&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be German&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-de}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-ha&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Hausa&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-ha}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-he&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Hebrew&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-he}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-hi&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Hindi&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-hi}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-id&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Indonesian&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-id}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-it&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Italian&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-it}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-ja&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Japanese&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-ja}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-ko&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Korean&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-ko}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-ms&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Malay&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-ms}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-ml&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Malayalam&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-ml}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-mr&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Marathi&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-mr}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-no&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Norwegian&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-no}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-or&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Oriya (Odia)&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-or}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-fa&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Persian&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-fa}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-pl&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Polish&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-pl}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-pt&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Portuguese&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-pt}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-ro&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Romanian&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-ro}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-ru&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Russian&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-ru}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-es&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Spanish&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-es}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-sv&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Swedish&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-sv}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-th&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Thai&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-th}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-tl&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Tagalog&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-tl}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-tr&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Turkish&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-tr}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-uk&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Ukrainian&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-uk}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-ur&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Urdu&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-ur}}&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;#039;welcomeen-vi&amp;#039;: {&lt;br /&gt;
				description: &amp;#039;welcome for users whose first language appears to be Vietnamese&amp;#039;,&lt;br /&gt;
				syntax: &amp;#039;== Welcome! ==\n{{subst:welcomeen-vi}}&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.getTemplateWikitext = function(type, template, article) {&lt;br /&gt;
	// the iteration is required as the type=standard has two groups&lt;br /&gt;
	let properties;&lt;br /&gt;
	$.each(Twinkle.welcome.templates[type], (label, templates) =&amp;gt; {&lt;br /&gt;
		properties = templates[template];&lt;br /&gt;
		if (properties) {&lt;br /&gt;
			return false; // break&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	if (properties) {&lt;br /&gt;
		return properties.syntax&lt;br /&gt;
			.replace(&amp;#039;$USERNAME$&amp;#039;, Twinkle.getPref(&amp;#039;insertUsername&amp;#039;) ? mw.config.get(&amp;#039;wgUserName&amp;#039;) : &amp;#039;&amp;#039;)&lt;br /&gt;
			.replace(&amp;#039;$ARTICLE$&amp;#039;, article || &amp;#039;&amp;#039;)&lt;br /&gt;
			.replace(/\$HEADER\$\s*/, &amp;#039;== Welcome ==\n\n&amp;#039;)&lt;br /&gt;
			.replace(&amp;#039;$EXTRA$&amp;#039;, &amp;#039;&amp;#039;); // EXTRA is not implemented yet&lt;br /&gt;
	}&lt;br /&gt;
	return &amp;#039;{{subst:&amp;#039; + template + (article ? &amp;#039;|art=&amp;#039; + article : &amp;#039;&amp;#039;) + &amp;#039;}}&amp;#039; +&lt;br /&gt;
			(Twinkle.getPref(&amp;#039;customWelcomeSignature&amp;#039;) ? &amp;#039; ~~~~&amp;#039; : &amp;#039;&amp;#039;);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.callbacks = {&lt;br /&gt;
	preview: function(form) {&lt;br /&gt;
		const previewDialog = new Morebits.SimpleWindow(750, 400);&lt;br /&gt;
		previewDialog.setTitle(&amp;#039;Welcome template preview&amp;#039;);&lt;br /&gt;
		previewDialog.setScriptName(&amp;#039;Welcome user&amp;#039;);&lt;br /&gt;
		previewDialog.setModality(true);&lt;br /&gt;
&lt;br /&gt;
		const previewdiv = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
		previewdiv.style.marginLeft = previewdiv.style.marginRight = &amp;#039;0.5em&amp;#039;;&lt;br /&gt;
		previewdiv.style.fontSize = &amp;#039;small&amp;#039;;&lt;br /&gt;
		previewDialog.setContent(previewdiv);&lt;br /&gt;
&lt;br /&gt;
		const previewer = new Morebits.wiki.Preview(previewdiv);&lt;br /&gt;
		const input = Morebits.QuickForm.getInputData(form);&lt;br /&gt;
		previewer.beginRender(Twinkle.welcome.getTemplateWikitext(input.type, input.template, input.article), &amp;#039;User talk:&amp;#039; + mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;)); // Force wikitext/correct username&lt;br /&gt;
&lt;br /&gt;
		const submit = document.createElement(&amp;#039;input&amp;#039;);&lt;br /&gt;
		submit.setAttribute(&amp;#039;type&amp;#039;, &amp;#039;submit&amp;#039;);&lt;br /&gt;
		submit.setAttribute(&amp;#039;value&amp;#039;, &amp;#039;Close&amp;#039;);&lt;br /&gt;
		previewDialog.addContent(submit);&lt;br /&gt;
&lt;br /&gt;
		previewDialog.display();&lt;br /&gt;
&lt;br /&gt;
		$(submit).on(&amp;#039;click&amp;#039;, () =&amp;gt; {&lt;br /&gt;
			previewDialog.close();&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
	main: function(pageobj) {&lt;br /&gt;
		const params = pageobj.getCallbackParameters();&lt;br /&gt;
		let text = pageobj.getPageText();&lt;br /&gt;
&lt;br /&gt;
		// abort if mode is auto and form is not empty&lt;br /&gt;
		if (pageobj.exists() &amp;amp;&amp;amp; params.mode === &amp;#039;auto&amp;#039;) {&lt;br /&gt;
			Morebits.Status.info(&amp;#039;Warning&amp;#039;, &amp;#039;User talk page not empty; aborting automatic welcome&amp;#039;);&lt;br /&gt;
			Morebits.wiki.actionCompleted.event();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const welcomeText = Twinkle.welcome.getTemplateWikitext(params.type, params.template, params.article);&lt;br /&gt;
&lt;br /&gt;
		if (Twinkle.getPref(&amp;#039;topWelcomes&amp;#039;)) {&lt;br /&gt;
			const hasTalkHeader = /^\{\{Talk ?header\}\}/i.test(text);&lt;br /&gt;
			if (hasTalkHeader) {&lt;br /&gt;
				text = text.replace(/^\{\{Talk ?header\}\}\n{0,2}/i, &amp;#039;&amp;#039;);&lt;br /&gt;
				text = &amp;#039;{{Talk header}}\n\n&amp;#039; + welcomeText + &amp;#039;\n\n&amp;#039; + text;&lt;br /&gt;
				text = text.trim();&lt;br /&gt;
			} else {&lt;br /&gt;
				text = welcomeText + &amp;#039;\n\n&amp;#039; + text;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			text += &amp;#039;\n&amp;#039; + welcomeText;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const summaryText = &amp;#039;Welcome to Wikipedia!&amp;#039;;&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setEditSummary(summaryText);&lt;br /&gt;
		pageobj.setChangeTags(Twinkle.changeTags);&lt;br /&gt;
		pageobj.setWatchlist(Twinkle.getPref(&amp;#039;watchWelcomes&amp;#039;));&lt;br /&gt;
		pageobj.setCreateOption(&amp;#039;recreate&amp;#039;);&lt;br /&gt;
		pageobj.save();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.callback.evaluate = function twinklewelcomeCallbackEvaluate(e) {&lt;br /&gt;
	const form = e.target;&lt;br /&gt;
&lt;br /&gt;
	const params = Morebits.QuickForm.getInputData(form); // : type, template, article&lt;br /&gt;
	params.mode = &amp;#039;manual&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	Morebits.SimpleWindow.setButtonsEnabled(false);&lt;br /&gt;
	Morebits.Status.init(form);&lt;br /&gt;
&lt;br /&gt;
	const userTalkPage = mw.config.get(&amp;#039;wgFormattedNamespaces&amp;#039;)[3] + &amp;#039;:&amp;#039; + mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;);&lt;br /&gt;
	Morebits.wiki.actionCompleted.redirect = userTalkPage;&lt;br /&gt;
	Morebits.wiki.actionCompleted.notice = &amp;#039;Welcoming complete, reloading talk page in a few seconds&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	const wikipedia_page = new Morebits.wiki.Page(userTalkPage, &amp;#039;User talk page modification&amp;#039;);&lt;br /&gt;
	wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
	wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
	wikipedia_page.load(Twinkle.welcome.callbacks.main);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.addInitCallback(Twinkle.welcome, &amp;#039;welcome&amp;#039;);&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>en&gt;SD0001</name></author>
	</entry>
</feed>