<?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-twinkletalkback.js</id>
	<title>MediaWiki:Gadget-twinkletalkback.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-twinkletalkback.js"/>
	<link rel="alternate" type="text/html" href="https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:Gadget-twinkletalkback.js&amp;action=history"/>
	<updated>2026-06-11T04:27:36Z</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-twinkletalkback.js&amp;diff=43&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-twinkletalkback.js&amp;diff=43&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-twinkletalkback.js&amp;diff=42&amp;oldid=prev</id>
		<title>en&gt;Novem Linguae: Repo at 28f9f79: add {{AE-notice}} (#2172)</title>
		<link rel="alternate" type="text/html" href="https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:Gadget-twinkletalkback.js&amp;diff=42&amp;oldid=prev"/>
		<updated>2025-11-20T06:50:05Z</updated>

		<summary type="html">&lt;p&gt;Repo at 28f9f79: add {{AE-notice}} (#2172)&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;
 *** twinkletalkback.js: Talkback module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;TB&amp;quot;)&lt;br /&gt;
 * Active on:              Any page with relevant user name (userspace, contribs, etc.) except IP ranges&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback = function() {&lt;br /&gt;
	if (!mw.config.exists(&amp;#039;wgRelevantUserName&amp;#039;) || Morebits.ip.isRange(mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;))) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	Twinkle.addPortletLink(Twinkle.talkback.callback, &amp;#039;TB&amp;#039;, &amp;#039;twinkle-talkback&amp;#039;, &amp;#039;Easy talkback&amp;#039;);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.callback = function() {&lt;br /&gt;
	if (mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;) === mw.config.get(&amp;#039;wgUserName&amp;#039;) &amp;amp;&amp;amp; !confirm(&amp;quot;Is it really so bad that you&amp;#039;re talking back to yourself?&amp;quot;)) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	const Window = new Morebits.SimpleWindow(600, 350);&lt;br /&gt;
	Window.setTitle(&amp;#039;Talkback&amp;#039;);&lt;br /&gt;
	Window.setScriptName(&amp;#039;Twinkle&amp;#039;);&lt;br /&gt;
	Window.addFooterLink(&amp;#039;Talkback prefs&amp;#039;, &amp;#039;WP:TW/PREF#talkback&amp;#039;);&lt;br /&gt;
	Window.addFooterLink(&amp;#039;Twinkle help&amp;#039;, &amp;#039;WP:TW/DOC#talkback&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.talkback.evaluate);&lt;br /&gt;
&lt;br /&gt;
	form.append({ type: &amp;#039;radio&amp;#039;, name: &amp;#039;tbtarget&amp;#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{&lt;br /&gt;
				label: &amp;#039;Talkback&amp;#039;,&lt;br /&gt;
				value: &amp;#039;talkback&amp;#039;,&lt;br /&gt;
				checked: &amp;#039;true&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: &amp;#039;Please see&amp;#039;,&lt;br /&gt;
				value: &amp;#039;see&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: &amp;#039;Noticeboard notification&amp;#039;,&lt;br /&gt;
				value: &amp;#039;notice&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: &amp;quot;You&amp;#039;ve got mail&amp;quot;,&lt;br /&gt;
				value: &amp;#039;mail&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		],&lt;br /&gt;
		event: Twinkle.talkback.changeTarget&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	form.append({&lt;br /&gt;
		type: &amp;#039;field&amp;#039;,&lt;br /&gt;
		label: &amp;#039;Work area&amp;#039;,&lt;br /&gt;
		name: &amp;#039;work_area&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.talkback.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;, id: &amp;#039;talkbackpreview&amp;#039;, label: [ previewlink ] });&lt;br /&gt;
	form.append({ type: &amp;#039;div&amp;#039;, id: &amp;#039;twinkletalkback-previewbox&amp;#039;, style: &amp;#039;display: none&amp;#039; });&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;
	result.previewer = new Morebits.wiki.Preview($(result).find(&amp;#039;div#twinkletalkback-previewbox&amp;#039;).last()[0]);&lt;br /&gt;
&lt;br /&gt;
	// We must init the&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.tbtarget[0].dispatchEvent(evt);&lt;br /&gt;
&lt;br /&gt;
	// Check whether the user has opted out from talkback&lt;br /&gt;
	const query = {&lt;br /&gt;
		action: &amp;#039;query&amp;#039;,&lt;br /&gt;
		prop: &amp;#039;extlinks&amp;#039;,&lt;br /&gt;
		titles: &amp;#039;User talk:&amp;#039; + mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;),&lt;br /&gt;
		elquery: &amp;#039;userjs.invalid/noTalkback&amp;#039;,&lt;br /&gt;
		ellimit: &amp;#039;1&amp;#039;,&lt;br /&gt;
		format: &amp;#039;json&amp;#039;&lt;br /&gt;
	};&lt;br /&gt;
	const wpapi = new Morebits.wiki.Api(&amp;#039;Fetching talkback opt-out status&amp;#039;, query, Twinkle.talkback.callback.optoutStatus);&lt;br /&gt;
	wpapi.post();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.optout = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.callback.optoutStatus = function(apiobj) {&lt;br /&gt;
	const el = apiobj.getResponse().query.pages[0].extlinks;&lt;br /&gt;
	if (el &amp;amp;&amp;amp; el.length) {&lt;br /&gt;
		Twinkle.talkback.optout = mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;) + &amp;#039; prefers not to receive talkbacks&amp;#039;;&lt;br /&gt;
		const url = el[0].url;&lt;br /&gt;
		const reason = mw.util.getParamValue(&amp;#039;reason&amp;#039;, url);&lt;br /&gt;
		Twinkle.talkback.optout += reason ? &amp;#039;: &amp;#039; + reason : &amp;#039;.&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	$(&amp;#039;#twinkle-talkback-optout-message&amp;#039;).text(Twinkle.talkback.optout);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
let prev_page = &amp;#039;&amp;#039;;&lt;br /&gt;
let prev_section = &amp;#039;&amp;#039;;&lt;br /&gt;
let prev_message = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.changeTarget = function(e) {&lt;br /&gt;
	const value = e.target.values;&lt;br /&gt;
	const root = e.target.form;&lt;br /&gt;
&lt;br /&gt;
	const old_area = Morebits.QuickForm.getElements(root, &amp;#039;work_area&amp;#039;)[0];&lt;br /&gt;
&lt;br /&gt;
	if (root.section) {&lt;br /&gt;
		prev_section = root.section.value;&lt;br /&gt;
	}&lt;br /&gt;
	if (root.message) {&lt;br /&gt;
		prev_message = root.message.value;&lt;br /&gt;
	}&lt;br /&gt;
	if (root.page) {&lt;br /&gt;
		prev_page = root.page.value;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	let work_area = new Morebits.QuickForm.Element({&lt;br /&gt;
		type: &amp;#039;field&amp;#039;,&lt;br /&gt;
		label: &amp;#039;Talkback information&amp;#039;,&lt;br /&gt;
		name: &amp;#039;work_area&amp;#039;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	root.previewer.closePreview();&lt;br /&gt;
&lt;br /&gt;
	switch (value) {&lt;br /&gt;
		case &amp;#039;talkback&amp;#039;:&lt;br /&gt;
			/* falls through */&lt;br /&gt;
		default:&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: &amp;#039;div&amp;#039;,&lt;br /&gt;
				label: &amp;#039;&amp;#039;,&lt;br /&gt;
				style: &amp;#039;color: red&amp;#039;,&lt;br /&gt;
				id: &amp;#039;twinkle-talkback-optout-message&amp;#039;&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: &amp;#039;input&amp;#039;,&lt;br /&gt;
				name: &amp;#039;page&amp;#039;,&lt;br /&gt;
				label: &amp;#039;Page name of the discussion&amp;#039;,&lt;br /&gt;
				tooltip: &amp;quot;The page name where the discussion is being held. For example: &amp;#039;User talk:Jimbo Wales&amp;#039; or Wikipedia talk:Twinkle&amp;#039;. Limited to all talks, Wikipedia-space, and Template-space.&amp;quot;,&lt;br /&gt;
				value: prev_page || &amp;#039;User talk:&amp;#039; + mw.config.get(&amp;#039;wgUserName&amp;#039;)&lt;br /&gt;
			});&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: &amp;#039;input&amp;#039;,&lt;br /&gt;
				name: &amp;#039;section&amp;#039;,&lt;br /&gt;
				label: &amp;#039;Linked section (optional)&amp;#039;,&lt;br /&gt;
				tooltip: &amp;quot;The section heading where the discussion is being held. For example: &amp;#039;Merge proposal&amp;#039;.&amp;quot;,&lt;br /&gt;
				value: prev_section&lt;br /&gt;
			});&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;#039;notice&amp;#039;:&lt;br /&gt;
			var noticeboard = work_area.append({&lt;br /&gt;
				type: &amp;#039;select&amp;#039;,&lt;br /&gt;
				name: &amp;#039;noticeboard&amp;#039;,&lt;br /&gt;
				label: &amp;#039;Noticeboard:&amp;#039;,&lt;br /&gt;
				event: function(e) {&lt;br /&gt;
					if (e.target.value === &amp;#039;afchd&amp;#039;) {&lt;br /&gt;
						Morebits.QuickForm.overrideElementLabel(root.section, &amp;#039;Title of draft (excluding the prefix): &amp;#039;);&lt;br /&gt;
						Morebits.QuickForm.setElementTooltipVisibility(root.section, false);&lt;br /&gt;
					} else {&lt;br /&gt;
						Morebits.QuickForm.resetElementLabel(root.section);&lt;br /&gt;
						Morebits.QuickForm.setElementTooltipVisibility(root.section, true);&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			$.each(Twinkle.talkback.noticeboards, (value, data) =&amp;gt; {&lt;br /&gt;
				noticeboard.append({&lt;br /&gt;
					type: &amp;#039;option&amp;#039;,&lt;br /&gt;
					label: data.label,&lt;br /&gt;
					value: value,&lt;br /&gt;
					selected: !!data.defaultSelected&lt;br /&gt;
				});&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: &amp;#039;input&amp;#039;,&lt;br /&gt;
				name: &amp;#039;section&amp;#039;,&lt;br /&gt;
				label: &amp;#039;Linked thread&amp;#039;,&lt;br /&gt;
				tooltip: &amp;#039;The heading of the relevant thread on the noticeboard page.&amp;#039;,&lt;br /&gt;
				value: prev_section&lt;br /&gt;
			});&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;#039;mail&amp;#039;:&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: &amp;#039;input&amp;#039;,&lt;br /&gt;
				name: &amp;#039;section&amp;#039;,&lt;br /&gt;
				label: &amp;#039;Subject of email (optional)&amp;#039;,&lt;br /&gt;
				tooltip: &amp;#039;The subject line of the email you sent.&amp;#039;&lt;br /&gt;
			});&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (value !== &amp;#039;notice&amp;#039;) {&lt;br /&gt;
		work_area.append({ type: &amp;#039;textarea&amp;#039;, label: &amp;#039;Additional message (optional):&amp;#039;, name: &amp;#039;message&amp;#039;, tooltip: &amp;#039;An additional message that you would like to leave below the talkback template. Your signature will be added to the end of the message if you leave one.&amp;#039; });&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	work_area = work_area.render();&lt;br /&gt;
	root.replaceChild(work_area, old_area);&lt;br /&gt;
	if (root.message) {&lt;br /&gt;
		root.message.value = prev_message;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$(&amp;#039;#twinkle-talkback-optout-message&amp;#039;).text(Twinkle.talkback.optout);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.noticeboards = {&lt;br /&gt;
	ae: {&lt;br /&gt;
		label: &amp;#039;WP:AE (Arbitration/Requests/Enforcement)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:AE-notice|$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:Arbitration/Requests/Enforcement]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	an: {&lt;br /&gt;
		label: &amp;quot;WP:AN (Administrators&amp;#039; noticeboard)&amp;quot;,&lt;br /&gt;
		text: &amp;#039;{{subst:AN-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:Administrators\&amp;#039; noticeboard]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	an3: {&lt;br /&gt;
		label: &amp;quot;WP:AN3 (Administrators&amp;#039; noticeboard/Edit warring)&amp;quot;,&lt;br /&gt;
		text: &amp;#039;{{subst:An3-notice|$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;quot;Notice of discussion at [[Wikipedia:Administrators&amp;#039; noticeboard/Edit warring]]&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	ani: {&lt;br /&gt;
		label: &amp;quot;WP:ANI (Administrators&amp;#039; noticeboard/Incidents)&amp;quot;,&lt;br /&gt;
		text: &amp;quot;== Notice of Administrators&amp;#039; noticeboard/Incidents discussion ==\n&amp;quot; +&lt;br /&gt;
		&amp;#039;{{subst:ANI-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:Administrators\&amp;#039; noticeboard/Incidents]]&amp;#039;,&lt;br /&gt;
		defaultSelected: true&lt;br /&gt;
	},&lt;br /&gt;
	// let&amp;#039;s keep AN and its cousins at the top&lt;br /&gt;
	afchd: {&lt;br /&gt;
		label: &amp;#039;WP:AFCHD (Articles for creation/Help desk)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:AFCHD/u|$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;You have replies at the [[Wikipedia:AFCHD|Articles for Creation Help Desk]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	blpn: {&lt;br /&gt;
		label: &amp;#039;WP:BLPN (Biographies of living persons noticeboard)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:BLPN-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:Biographies of living persons/Noticeboard]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	coin: {&lt;br /&gt;
		label: &amp;#039;WP:COIN (Conflict of interest noticeboard)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:Coin-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:Conflict of interest/Noticeboard]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	drn: {&lt;br /&gt;
		label: &amp;#039;WP:DRN (Dispute resolution noticeboard)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:DRN-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:Dispute resolution noticeboard]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	effp: {&lt;br /&gt;
		label: &amp;#039;WP:EFFP/R (Edit filter false positive report)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{EFFPReply|1=$SECTION|2=~~~~}}&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;You have replies to your [[Wikipedia:Edit filter/False positives/Reports|edit filter false positive report]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	eln: {&lt;br /&gt;
		label: &amp;#039;WP:ELN (External links noticeboard)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:ELN-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:External links/Noticeboard]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	ftn: {&lt;br /&gt;
		label: &amp;#039;WP:FTN (Fringe theories noticeboard)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:Ftn-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:Fringe theories/Noticeboard]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	hd: {&lt;br /&gt;
		label: &amp;#039;WP:HD (Help desk)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;== Your question at the Help desk ==\n{{helpdeskreply|1=$SECTION|ts=~~~~~}}&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;You have replies at the [[Wikipedia:Help desk|Wikipedia help desk]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	norn: {&lt;br /&gt;
		label: &amp;#039;WP:NORN (No original research noticeboard)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:Norn-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:No original research/Noticeboard]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	npovn: {&lt;br /&gt;
		label: &amp;#039;WP:NPOVN (Neutral point of view noticeboard)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:NPOVN-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:Neutral point of view/Noticeboard]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	rsn: {&lt;br /&gt;
		label: &amp;#039;WP:RSN (Reliable sources noticeboard)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:RSN-notice|thread=$SECTION}} ~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;Notice of discussion at [[Wikipedia:Reliable sources/Noticeboard]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	th: {&lt;br /&gt;
		label: &amp;#039;WP:TH (Teahouse)&amp;#039;,&lt;br /&gt;
		text: &amp;quot;== Teahouse talkback: you&amp;#039;ve got messages! ==\n{{WP:Teahouse/Teahouse talkback|WP:Teahouse|$SECTION|ts=~~~~}}&amp;quot;,&lt;br /&gt;
		editSummary: &amp;#039;You have replies at the [[Wikipedia:Teahouse|Teahouse question board]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	vrt: {&lt;br /&gt;
		label: &amp;#039;WP:VRTN (VRT noticeboard)&amp;#039;,&lt;br /&gt;
		text: &amp;#039;{{subst:VRTreply|1=$SECTION}}\n~~~~&amp;#039;,&lt;br /&gt;
		editSummary: &amp;#039;You have replies at the [[Wikipedia:VRT noticeboard|VRT noticeboard]]&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.evaluate = function(e) {&lt;br /&gt;
	const input = Morebits.QuickForm.getInputData(e.target);&lt;br /&gt;
&lt;br /&gt;
	const fullUserTalkPageName = new mw.Title(mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;), 3).toText();&lt;br /&gt;
	const talkpage = new Morebits.wiki.Page(fullUserTalkPageName, &amp;#039;Adding talkback&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	Morebits.SimpleWindow.setButtonsEnabled(false);&lt;br /&gt;
	Morebits.Status.init(e.target);&lt;br /&gt;
&lt;br /&gt;
	Morebits.wiki.actionCompleted.redirect = fullUserTalkPageName;&lt;br /&gt;
	Morebits.wiki.actionCompleted.notice = &amp;#039;Talkback complete; reloading talk page in a few seconds&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	switch (input.tbtarget) {&lt;br /&gt;
		case &amp;#039;notice&amp;#039;:&lt;br /&gt;
			talkpage.setEditSummary(Twinkle.talkback.noticeboards[input.noticeboard].editSummary);&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;#039;mail&amp;#039;:&lt;br /&gt;
			talkpage.setEditSummary(&amp;quot;Notification: You&amp;#039;ve got mail&amp;quot;);&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;#039;see&amp;#039;:&lt;br /&gt;
			input.page = Twinkle.talkback.callbacks.normalizeTalkbackPage(input.page);&lt;br /&gt;
			talkpage.setEditSummary(&amp;#039;Please check the discussion at [[:&amp;#039; + input.page +&lt;br /&gt;
			(input.section ? &amp;#039;#&amp;#039; + input.section : &amp;#039;&amp;#039;) + &amp;#039;]]&amp;#039;);&lt;br /&gt;
			break;&lt;br /&gt;
		default: // talkback&lt;br /&gt;
			input.page = Twinkle.talkback.callbacks.normalizeTalkbackPage(input.page);&lt;br /&gt;
			talkpage.setEditSummary(&amp;#039;Talkback ([[:&amp;#039; + input.page +&lt;br /&gt;
			(input.section ? &amp;#039;#&amp;#039; + input.section : &amp;#039;&amp;#039;) + &amp;#039;]])&amp;#039;);&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	talkpage.setFollowRedirect(true);&lt;br /&gt;
&lt;br /&gt;
	talkpage.load((pageobj) =&amp;gt; {&lt;br /&gt;
		const whitespaceToPrepend = pageobj.exists() &amp;amp;&amp;amp; pageobj.getPageText() !== &amp;#039;&amp;#039; ? &amp;#039;\n\n&amp;#039; : &amp;#039;&amp;#039;;&lt;br /&gt;
		talkpage.setAppendText(whitespaceToPrepend + Twinkle.talkback.callbacks.getNoticeWikitext(input));&lt;br /&gt;
		talkpage.setChangeTags(Twinkle.changeTags);&lt;br /&gt;
		talkpage.setCreateOption(&amp;#039;recreate&amp;#039;);&lt;br /&gt;
		talkpage.setMinorEdit(Twinkle.getPref(&amp;#039;markTalkbackAsMinor&amp;#039;));&lt;br /&gt;
		talkpage.append();&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.callbacks = {&lt;br /&gt;
	// Not used for notice or mail, default to user page&lt;br /&gt;
	normalizeTalkbackPage: function(page) {&lt;br /&gt;
		page = page || mw.config.get(&amp;#039;wgUserName&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		// Assume no prefix is a username, convert to user talk space&lt;br /&gt;
		let normal = mw.Title.newFromText(page, 3);&lt;br /&gt;
		// Normalize erroneous or likely mis-entered items&lt;br /&gt;
		if (normal) {&lt;br /&gt;
			// Only allow talks and WPspace, as well as Template-space for DYK&lt;br /&gt;
			if (normal.namespace !== 4 &amp;amp;&amp;amp; normal.namespace !== 10) {&lt;br /&gt;
				normal = normal.getTalkPage();&lt;br /&gt;
			}&lt;br /&gt;
			page = normal.getPrefixedText();&lt;br /&gt;
		}&lt;br /&gt;
		return page;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	preview: function(form) {&lt;br /&gt;
		const input = Morebits.QuickForm.getInputData(form);&lt;br /&gt;
&lt;br /&gt;
		if (input.tbtarget === &amp;#039;talkback&amp;#039; || input.tbtarget === &amp;#039;see&amp;#039;) {&lt;br /&gt;
			input.page = Twinkle.talkback.callbacks.normalizeTalkbackPage(input.page);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const noticetext = Twinkle.talkback.callbacks.getNoticeWikitext(input);&lt;br /&gt;
		form.previewer.beginRender(noticetext, &amp;#039;User talk:&amp;#039; + mw.config.get(&amp;#039;wgRelevantUserName&amp;#039;)); // Force wikitext/correct username&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getNoticeWikitext: function(input) {&lt;br /&gt;
		let text;&lt;br /&gt;
&lt;br /&gt;
		switch (input.tbtarget) {&lt;br /&gt;
			case &amp;#039;notice&amp;#039;:&lt;br /&gt;
				text = Morebits.string.safeReplace(Twinkle.talkback.noticeboards[input.noticeboard].text, &amp;#039;$SECTION&amp;#039;, input.section);&lt;br /&gt;
				break;&lt;br /&gt;
			case &amp;#039;mail&amp;#039;:&lt;br /&gt;
				text = &amp;#039;==&amp;#039; + Twinkle.getPref(&amp;#039;mailHeading&amp;#039;) + &amp;#039;==\n&amp;#039; +&lt;br /&gt;
					&amp;quot;{{You&amp;#039;ve got mail|subject=&amp;quot; + input.section + &amp;#039;|ts=~~~~~}}&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
				if (input.message) {&lt;br /&gt;
					text += &amp;#039;\n&amp;#039; + input.message + &amp;#039;  ~~~~&amp;#039;;&lt;br /&gt;
				} else if (Twinkle.getPref(&amp;#039;insertTalkbackSignature&amp;#039;)) {&lt;br /&gt;
					text += &amp;#039;\n~~~~&amp;#039;;&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case &amp;#039;see&amp;#039;:&lt;br /&gt;
				var heading = Twinkle.getPref(&amp;#039;talkbackHeading&amp;#039;);&lt;br /&gt;
				text = &amp;#039;{{subst:Please see|location=&amp;#039; + input.page + (input.section ? &amp;#039;#&amp;#039; + input.section : &amp;#039;&amp;#039;) +&lt;br /&gt;
				&amp;#039;|more=&amp;#039; + input.message + &amp;#039;|heading=&amp;#039; + heading + &amp;#039;}}&amp;#039;;&lt;br /&gt;
				break;&lt;br /&gt;
			default: // talkback&lt;br /&gt;
				text = &amp;#039;==&amp;#039; + Twinkle.getPref(&amp;#039;talkbackHeading&amp;#039;) + &amp;#039;==\n&amp;#039; +&lt;br /&gt;
					&amp;#039;{{talkback|&amp;#039; + input.page + (input.section ? &amp;#039;|&amp;#039; + input.section : &amp;#039;&amp;#039;) + &amp;#039;|ts=~~~~~}}&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
				if (input.message) {&lt;br /&gt;
					text += &amp;#039;\n&amp;#039; + input.message + &amp;#039; ~~~~&amp;#039;;&lt;br /&gt;
				} else if (Twinkle.getPref(&amp;#039;insertTalkbackSignature&amp;#039;)) {&lt;br /&gt;
					text += &amp;#039;\n~~~~&amp;#039;;&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
		return text;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
Twinkle.addInitCallback(Twinkle.talkback, &amp;#039;talkback&amp;#039;);&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>en&gt;Novem Linguae</name></author>
	</entry>
</feed>