<?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%3AAFC-submit-wizard.js</id>
	<title>MediaWiki:AFC-submit-wizard.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%3AAFC-submit-wizard.js"/>
	<link rel="alternate" type="text/html" href="https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:AFC-submit-wizard.js&amp;action=history"/>
	<updated>2026-05-19T22:25:39Z</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:AFC-submit-wizard.js&amp;diff=4925&amp;oldid=prev</id>
		<title>Alfie at 14:36, 19 March 2026</title>
		<link rel="alternate" type="text/html" href="https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:AFC-submit-wizard.js&amp;diff=4925&amp;oldid=prev"/>
		<updated>2026-03-19T14:36:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:36, 19 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  *&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  *&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  * JavaScript used for submitting drafts to AfC.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  * JavaScript used for submitting drafts to AfC.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  * Used on [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia&lt;/del&gt;:Articles for creation/Submitting]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  * Used on [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Eurovision_Wiki&lt;/ins&gt;:Articles for creation/Submitting]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  * Loaded via [[mw:Snippets/Load JS and CSS by URL]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  * Loaded via [[mw:Snippets/Load JS and CSS by URL]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  *&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  *&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l25&quot;&gt;Line 25:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 25:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	])&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;).then(function () {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;).then(function () {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if (mw.config.get(&#039;wgPageName&#039;) !== &#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia&lt;/del&gt;:Articles_for_creation/Submitting&#039; ||&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if (mw.config.get(&#039;wgPageName&#039;) !== &#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Eurovision_Wiki&lt;/ins&gt;:Articles_for_creation/Submitting&#039; ||&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		mw.config.get(&amp;#039;wgAction&amp;#039;) !== &amp;#039;view&amp;#039;) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		mw.config.get(&amp;#039;wgAction&amp;#039;) !== &amp;#039;view&amp;#039;) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l63&quot;&gt;Line 63:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 63:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;orestopic-helptip&amp;quot;: &amp;quot;Pick the topic areas that are relevant&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;orestopic-helptip&amp;quot;: &amp;quot;Pick the topic areas that are relevant&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;submit-label&amp;quot;: &amp;quot;Submit&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;submit-label&amp;quot;: &amp;quot;Submit&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&quot;footer-text&quot;: &quot;&amp;lt;small&amp;gt;If you are not sure about what to enter in a field, you can skip it. If you need help, you can ask at the &amp;lt;b&amp;gt;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;WP&lt;/del&gt;:AFCHD|AfC help desk]]&amp;lt;/b&amp;gt; or get live help via &amp;lt;b&amp;gt;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;WP&lt;/del&gt;:IRCHELP|IRC]]&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;WP&lt;/del&gt;:DISCORD|Discord]]&amp;lt;/b&amp;gt;.&amp;lt;br&amp;gt;Facing some issues in using this form? &amp;lt;b&amp;gt;[/w/index.php?title=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia_talk&lt;/del&gt;:WikiProject_Articles_for_creation/Submission_wizard&amp;amp;action=edit&amp;amp;section=new&amp;amp;preloadtitle=Issue%20with%20submission%20form&amp;amp;editintro=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia_talk&lt;/del&gt;:WikiProject_Articles_for_creation/Submission_wizard/editintro Report it]&amp;lt;/b&amp;gt;.&amp;lt;/small&amp;gt;&quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&quot;footer-text&quot;: &quot;&amp;lt;small&amp;gt;If you are not sure about what to enter in a field, you can skip it. If you need help, you can ask at the &amp;lt;b&amp;gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;EV&lt;/ins&gt;:AFCHD|AfC help desk]]&amp;lt;/b&amp;gt; or get live help via &amp;lt;b&amp;gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;EV&lt;/ins&gt;:IRCHELP|IRC]]&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;EV&lt;/ins&gt;:DISCORD|Discord]]&amp;lt;/b&amp;gt;.&amp;lt;br&amp;gt;Facing some issues in using this form? &amp;lt;b&amp;gt;[/w/index.php?title=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Eurovision_Wiki_talk&lt;/ins&gt;:WikiProject_Articles_for_creation/Submission_wizard&amp;amp;action=edit&amp;amp;section=new&amp;amp;preloadtitle=Issue%20with%20submission%20form&amp;amp;editintro=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Eurovision_Wiki_talk&lt;/ins&gt;:WikiProject_Articles_for_creation/Submission_wizard/editintro Report it]&amp;lt;/b&amp;gt;.&amp;lt;/small&amp;gt;&quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;submitting-as&amp;quot;: &amp;quot;Submitting as User:$1&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;submitting-as&amp;quot;: &amp;quot;Submitting as User:$1&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;validation-notitle&amp;quot;: &amp;quot;Please enter the draft page name&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;validation-notitle&amp;quot;: &amp;quot;Please enter the draft page name&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l72&quot;&gt;Line 72:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 72:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-processing&amp;quot;: &amp;quot;Processing ...&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-processing&amp;quot;: &amp;quot;Processing ...&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-saving&amp;quot;: &amp;quot;Saving draft page ...&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-saving&amp;quot;: &amp;quot;Saving draft page ...&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&quot;editsummary-main&quot;: &quot;Submitting using [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;WP&lt;/del&gt;:AFCSW|AfC-submit-wizard]]&quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&quot;editsummary-main&quot;: &quot;Submitting using [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;EV&lt;/ins&gt;:AFCSW|AfC-submit-wizard]]&quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-redirecting&amp;quot;: &amp;quot;Submission succeeded. Redirecting you to the draft page ...&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-redirecting&amp;quot;: &amp;quot;Submission succeeded. Redirecting you to the draft page ...&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;captcha-label&amp;quot;: &amp;quot;Please enter the letters appearing in the box below&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;captcha-label&amp;quot;: &amp;quot;Please enter the letters appearing in the box below&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l79&quot;&gt;Line 79:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 79:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;error-saving-main&amp;quot;: &amp;quot;An error occurred ($1). Please try again or refer to the help desk.&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;error-saving-main&amp;quot;: &amp;quot;An error occurred ($1). Please try again or refer to the help desk.&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-saving-talk&amp;quot;: &amp;quot;Saving draft talk page ...&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-saving-talk&amp;quot;: &amp;quot;Saving draft talk page ...&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&quot;editsummary-talk&quot;: &quot;Adding WikiProject tags using [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;WP&lt;/del&gt;:AFCSW|AfC-submit-wizard]]&quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&quot;editsummary-talk&quot;: &quot;Adding WikiProject tags using [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;EV&lt;/ins&gt;:AFCSW|AfC-submit-wizard]]&quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-talk-success&amp;quot;: &amp;quot;Successfully added WikiProject tags to talk page&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;status-talk-success&amp;quot;: &amp;quot;Successfully added WikiProject tags to talk page&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;error-saving-talk&amp;quot;: &amp;quot;An error occurred in editing the talk page ($1).&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&amp;quot;error-saving-talk&amp;quot;: &amp;quot;An error occurred in editing the talk page ($1).&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l202&quot;&gt;Line 202:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 202:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	});&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	});&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afc.topicOptionsLoaded = getJSONPage(&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia&lt;/del&gt;:WikiProject Articles for creation/AfC topic map.json&#039;).then(function (optionsJson) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afc.topicOptionsLoaded = getJSONPage(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Eurovision_Wiki&lt;/ins&gt;:WikiProject Articles for creation/AfC topic map.json&#039;).then(function (optionsJson) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		var options = [];&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		var options = [];&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		$.each(optionsJson, function (code, info) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		$.each(optionsJson, function (code, info) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l238&quot;&gt;Line 238:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 238:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	// Populate talk page tags for multi-select widget&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	// Populate talk page tags for multi-select widget&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afc.talkTagOptionsLoaded = getJSONPage(&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia&lt;/del&gt;:WikiProject Articles for creation/WikiProject templates.json&#039;).then(function (data) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afc.talkTagOptionsLoaded = getJSONPage(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Eurovision_Wiki&lt;/ins&gt;:WikiProject Articles for creation/WikiProject templates.json&#039;).then(function (data) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		ui.talkTagsInput.addOptions(Object.keys(data).map(function (k) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		ui.talkTagsInput.addOptions(Object.keys(data).map(function (k) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			return {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			return {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l259&quot;&gt;Line 259:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 259:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	// Get mapping of infoboxes with relevant WikiProjects&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	// Get mapping of infoboxes with relevant WikiProjects&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afc.ibxmapLoaded = getJSONPage(&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia&lt;/del&gt;:WikiProject Articles for creation/Infobox WikiProject map.json&#039;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afc.ibxmapLoaded = getJSONPage(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Eurovision_Wiki&lt;/ins&gt;:WikiProject Articles for creation/Infobox WikiProject map.json&#039;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	ui.submitButton.on(&amp;#039;click&amp;#039;, handleSubmit);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	ui.submitButton.on(&amp;#039;click&amp;#039;, handleSubmit);&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:AFC-submit-wizard.js&amp;diff=4924&amp;oldid=prev</id>
		<title>Alfie: Protected &quot;MediaWiki:AFC-submit-wizard.js&quot; ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))</title>
		<link rel="alternate" type="text/html" href="https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:AFC-submit-wizard.js&amp;diff=4924&amp;oldid=prev"/>
		<updated>2026-03-19T14:34:09Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/wiki/MediaWiki:AFC-submit-wizard.js&quot; title=&quot;MediaWiki:AFC-submit-wizard.js&quot;&gt;MediaWiki:AFC-submit-wizard.js&lt;/a&gt;&amp;quot; ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))&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 10:34, 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:AFC-submit-wizard.js&amp;diff=4921&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:AFC-submit-wizard.js&amp;diff=4921&amp;oldid=prev"/>
		<updated>2026-03-19T14:27:23Z</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 10:27, 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:AFC-submit-wizard.js&amp;diff=4920&amp;oldid=prev</id>
		<title>en&gt;SD0001: Migrate stats collection from Graphite to Prometheus, stats available at https://grafana.wikimedia.org/d/IlK0cZbSk/gadget-stats</title>
		<link rel="alternate" type="text/html" href="https://eurovision.jobogamer.xyz/index.php?title=MediaWiki:AFC-submit-wizard.js&amp;diff=4920&amp;oldid=prev"/>
		<updated>2025-09-15T09:45:01Z</updated>

		<summary type="html">&lt;p&gt;Migrate stats collection from Graphite to Prometheus, stats available at https://grafana.wikimedia.org/d/IlK0cZbSk/gadget-stats&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * MediaWiki:AfC-submit-wizard.js&lt;br /&gt;
 *&lt;br /&gt;
 * JavaScript used for submitting drafts to AfC.&lt;br /&gt;
 * Used on [[Wikipedia:Articles for creation/Submitting]].&lt;br /&gt;
 * Loaded via [[mw:Snippets/Load JS and CSS by URL]].&lt;br /&gt;
 *&lt;br /&gt;
 * Edits can be proposed via GitHub (https://github.com/wikimedia-gadgets/afc-submit-wizard)&lt;br /&gt;
 * or a talk page request.&lt;br /&gt;
 *&lt;br /&gt;
 * Author: [[User:SD0001]]&lt;br /&gt;
 * Licence: MIT&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* globals mw, $, OO */&lt;br /&gt;
/* &amp;lt;nowiki&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
$.when(&lt;br /&gt;
	$.ready,&lt;br /&gt;
	mw.loader.using([&lt;br /&gt;
		&amp;#039;mediawiki.util&amp;#039;, &amp;#039;mediawiki.api&amp;#039;, &amp;#039;mediawiki.Title&amp;#039;,&lt;br /&gt;
		&amp;#039;mediawiki.widgets&amp;#039;, &amp;#039;oojs-ui-core&amp;#039;, &amp;#039;oojs-ui-widgets&amp;#039;&lt;br /&gt;
	])&lt;br /&gt;
).then(function () {&lt;br /&gt;
	if (mw.config.get(&amp;#039;wgPageName&amp;#039;) !== &amp;#039;Wikipedia:Articles_for_creation/Submitting&amp;#039; ||&lt;br /&gt;
		mw.config.get(&amp;#039;wgAction&amp;#039;) !== &amp;#039;view&amp;#039;) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	init();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var afc = {}, ui = {};&lt;br /&gt;
window.afc = afc;&lt;br /&gt;
afc.ui = ui;&lt;br /&gt;
&lt;br /&gt;
var config = {&lt;br /&gt;
	allowedNamespaces: [2, 118, 5], // User, Draft, WT&lt;br /&gt;
	debounceDelay: 500,&lt;br /&gt;
	redirectionDelay: 1000,&lt;br /&gt;
	defaultAfcTopic: &amp;#039;other&amp;#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// TODO: move to a separate JSON subpage, would be feasible once [[phab:T198758]] is resolved&lt;br /&gt;
var messages = {&lt;br /&gt;
	&amp;quot;document-title&amp;quot;: &amp;quot;Submitting your draft ...&amp;quot;,&lt;br /&gt;
	&amp;quot;page-title&amp;quot;: &amp;quot;Submitting your draft ...&amp;quot;,&lt;br /&gt;
	&amp;quot;fieldset-label&amp;quot;: &amp;quot;Submit your draft for review at Articles for Creation (AfC)&amp;quot;,&lt;br /&gt;
	&amp;quot;title-label&amp;quot;: &amp;quot;Draft title&amp;quot;,&lt;br /&gt;
	&amp;quot;title-placeholder&amp;quot;: &amp;quot;Enter the draft page name, usually begins with \&amp;quot;Draft:\&amp;quot;&amp;quot;,&lt;br /&gt;
	&amp;quot;title-helptip&amp;quot;: &amp;quot;This should be pre-filled if you clicked the link while on the draft page&amp;quot;,&lt;br /&gt;
	&amp;quot;rawclass-label&amp;quot;: &amp;quot;Choose the most appropriate category&amp;quot;,&lt;br /&gt;
	&amp;quot;rawclass-helptip&amp;quot;: &amp;quot;For biographies about scholars, choose one of the two biography categories rather than one associated to their field&amp;quot;,&lt;br /&gt;
	&amp;quot;shortdesc-placeholder&amp;quot;: &amp;quot;Briefly describe the subject in 2–5 words (eg. \&amp;quot;British astronomer\&amp;quot;, \&amp;quot;Cricket stadium in India\&amp;quot;)&amp;quot;,&lt;br /&gt;
	&amp;quot;shortdesc-label&amp;quot;: &amp;quot;Short description&amp;quot;,&lt;br /&gt;
	&amp;quot;shortdesc-helptip&amp;quot;: &amp;quot;Try not to exceed 40 characters&amp;quot;,&lt;br /&gt;
	&amp;quot;talktags-placeholder&amp;quot;: &amp;quot;Start typing to search for tags ...&amp;quot;,&lt;br /&gt;
	&amp;quot;talktags-label&amp;quot;: &amp;quot;WikiProject classification tags&amp;quot;,&lt;br /&gt;
	&amp;quot;talktags-helptip&amp;quot;: &amp;quot;Adding the 1–4 most applicable WikiProjects is plenty. For example, if you add the Physics tag, you do not need to also add the Science tag.&amp;quot;,&lt;br /&gt;
	&amp;quot;orestopic-placeholder&amp;quot;: &amp;quot;Start typing to search for topics ...&amp;quot;,&lt;br /&gt;
	&amp;quot;orestopic-label&amp;quot;: &amp;quot;Topic classifiers&amp;quot;,&lt;br /&gt;
	&amp;quot;orestopic-helptip&amp;quot;: &amp;quot;Pick the topic areas that are relevant&amp;quot;,&lt;br /&gt;
	&amp;quot;submit-label&amp;quot;: &amp;quot;Submit&amp;quot;,&lt;br /&gt;
	&amp;quot;footer-text&amp;quot;: &amp;quot;&amp;lt;small&amp;gt;If you are not sure about what to enter in a field, you can skip it. If you need help, you can ask at the &amp;lt;b&amp;gt;[[WP:AFCHD|AfC help desk]]&amp;lt;/b&amp;gt; or get live help via &amp;lt;b&amp;gt;[[WP:IRCHELP|IRC]]&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;[[WP:DISCORD|Discord]]&amp;lt;/b&amp;gt;.&amp;lt;br&amp;gt;Facing some issues in using this form? &amp;lt;b&amp;gt;[/w/index.php?title=Wikipedia_talk:WikiProject_Articles_for_creation/Submission_wizard&amp;amp;action=edit&amp;amp;section=new&amp;amp;preloadtitle=Issue%20with%20submission%20form&amp;amp;editintro=Wikipedia_talk:WikiProject_Articles_for_creation/Submission_wizard/editintro Report it]&amp;lt;/b&amp;gt;.&amp;lt;/small&amp;gt;&amp;quot;,&lt;br /&gt;
	&amp;quot;submitting-as&amp;quot;: &amp;quot;Submitting as User:$1&amp;quot;,&lt;br /&gt;
	&amp;quot;validation-notitle&amp;quot;: &amp;quot;Please enter the draft page name&amp;quot;,&lt;br /&gt;
	&amp;quot;validation-invalidtitle&amp;quot;: &amp;quot;Please check draft title. This title is invalid.&amp;quot;,&lt;br /&gt;
	&amp;quot;validation-missingtitle&amp;quot;: &amp;quot;Please check draft title. No such draft exists.&amp;quot;,&lt;br /&gt;
	&amp;quot;validation-wrongns&amp;quot;: &amp;quot;Please check draft title – it should begin with \&amp;quot;Draft:\&amp;quot; or \&amp;quot;User:\&amp;quot;&amp;quot;,&lt;br /&gt;
	&amp;quot;warning-norefs&amp;quot;: &amp;quot;This draft doesn&amp;#039;t appear to contain any references. Please add references, without which it is likely to be declined. See [[Help:Introduction to referencing with Wiki Markup/2|help on adding references]].&amp;quot;,&lt;br /&gt;
	&amp;quot;status-processing&amp;quot;: &amp;quot;Processing ...&amp;quot;,&lt;br /&gt;
	&amp;quot;status-saving&amp;quot;: &amp;quot;Saving draft page ...&amp;quot;,&lt;br /&gt;
	&amp;quot;editsummary-main&amp;quot;: &amp;quot;Submitting using [[WP:AFCSW|AfC-submit-wizard]]&amp;quot;,&lt;br /&gt;
	&amp;quot;status-redirecting&amp;quot;: &amp;quot;Submission succeeded. Redirecting you to the draft page ...&amp;quot;,&lt;br /&gt;
	&amp;quot;captcha-label&amp;quot;: &amp;quot;Please enter the letters appearing in the box below&amp;quot;,&lt;br /&gt;
	&amp;quot;captcha-placeholder&amp;quot;: &amp;quot;Enter the letters here&amp;quot;,&lt;br /&gt;
	&amp;quot;captcha-helptip&amp;quot;: &amp;quot;CAPTCHA security check. Click \&amp;quot;Submit\&amp;quot; again when done.&amp;quot;,&lt;br /&gt;
	&amp;quot;error-saving-main&amp;quot;: &amp;quot;An error occurred ($1). Please try again or refer to the help desk.&amp;quot;,&lt;br /&gt;
	&amp;quot;status-saving-talk&amp;quot;: &amp;quot;Saving draft talk page ...&amp;quot;,&lt;br /&gt;
	&amp;quot;editsummary-talk&amp;quot;: &amp;quot;Adding WikiProject tags using [[WP:AFCSW|AfC-submit-wizard]]&amp;quot;,&lt;br /&gt;
	&amp;quot;status-talk-success&amp;quot;: &amp;quot;Successfully added WikiProject tags to talk page&amp;quot;,&lt;br /&gt;
	&amp;quot;error-saving-talk&amp;quot;: &amp;quot;An error occurred in editing the talk page ($1).&amp;quot;,&lt;br /&gt;
	&amp;quot;error-main&amp;quot;: &amp;quot;An error occurred ($1). Please try again or refer to the help desk.&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function init() {&lt;br /&gt;
	for (var key in messages) {&lt;br /&gt;
		mw.messages.set(&amp;#039;afcsw-&amp;#039; + key, messages[key]);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	document.title = msg(&amp;#039;document-title&amp;#039;);&lt;br /&gt;
	$(&amp;#039;#firstHeading&amp;#039;).text(msg(&amp;#039;page-title&amp;#039;));&lt;br /&gt;
&lt;br /&gt;
	mw.util.addCSS(&lt;br /&gt;
		// CSS adjustments for vector-2022: hide prominent page controls which are&lt;br /&gt;
		// irrelevant and confusing while using the wizard&lt;br /&gt;
		&amp;#039;.vector-page-toolbar { display: none } &amp;#039; +&lt;br /&gt;
		&amp;#039;.vector-page-titlebar #p-lang-btn { display: none } &amp;#039; +&lt;br /&gt;
&lt;br /&gt;
		// Hide categories as well, prevents accidental HotCat usage&lt;br /&gt;
		&amp;#039;#catlinks { display: none } &amp;#039;&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	var apiOptions = {&lt;br /&gt;
		parameters: {&lt;br /&gt;
			format: &amp;#039;json&amp;#039;,&lt;br /&gt;
			formatversion: &amp;#039;2&amp;#039;&lt;br /&gt;
		},&lt;br /&gt;
		ajax: {&lt;br /&gt;
			headers: {&lt;br /&gt;
				&amp;#039;Api-User-Agent&amp;#039;: &amp;#039;w:en:MediaWiki:AFC-submit-wizard.js&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Two different API objects so that aborts on the lookupApi don&amp;#039;t stop the final&lt;br /&gt;
	// evaluate process&lt;br /&gt;
	afc.api = new mw.Api(apiOptions);&lt;br /&gt;
	afc.lookupApi = new mw.Api(apiOptions);&lt;br /&gt;
&lt;br /&gt;
	constructUI();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function constructUI() {&lt;br /&gt;
&lt;br /&gt;
	ui.fieldset = new OO.ui.FieldsetLayout({&lt;br /&gt;
		label: msg(&amp;#039;fieldset-label&amp;#039;),&lt;br /&gt;
		classes: [ &amp;#039;container&amp;#039; ],&lt;br /&gt;
		items: [&lt;br /&gt;
			ui.titleLayout = new OO.ui.FieldLayout(ui.titleInput = new mw.widgets.TitleInputWidget({&lt;br /&gt;
				value: (mw.util.getParamValue(&amp;#039;page&amp;#039;) || &amp;#039;&amp;#039;).replace(/_/g, &amp;#039; &amp;#039;),&lt;br /&gt;
				placeholder: msg(&amp;#039;title-placeholder&amp;#039;),&lt;br /&gt;
			}), {&lt;br /&gt;
				label: msg(&amp;#039;title-label&amp;#039;),&lt;br /&gt;
				align: &amp;#039;top&amp;#039;,&lt;br /&gt;
				help: msg(&amp;#039;title-helptip&amp;#039;),&lt;br /&gt;
				helpInline: true&lt;br /&gt;
			}),&lt;br /&gt;
&lt;br /&gt;
			ui.afcTopicLayout = new OO.ui.FieldLayout(ui.afcTopicInput = new OO.ui.RadioSelectInputWidget(), {&lt;br /&gt;
				label: msg(&amp;#039;rawclass-label&amp;#039;),&lt;br /&gt;
				help: msg(&amp;#039;rawclass-helptip&amp;#039;),&lt;br /&gt;
				align: &amp;#039;inline&amp;#039;,&lt;br /&gt;
			}),&lt;br /&gt;
&lt;br /&gt;
			ui.shortdescLayout = new OO.ui.FieldLayout(ui.shortdescInput = new OO.ui.TextInputWidget({&lt;br /&gt;
				placeholder: msg(&amp;#039;shortdesc-placeholder&amp;#039;),&lt;br /&gt;
				maxLength: 100&lt;br /&gt;
			}), {&lt;br /&gt;
				label: msg(&amp;#039;shortdesc-label&amp;#039;),&lt;br /&gt;
				align: &amp;#039;top&amp;#039;,&lt;br /&gt;
				help: msg(&amp;#039;shortdesc-helptip&amp;#039;),&lt;br /&gt;
				helpInline: true,&lt;br /&gt;
			}),&lt;br /&gt;
&lt;br /&gt;
			ui.talkTagsLayout = new OO.ui.FieldLayout(ui.talkTagsInput = new OO.ui.MenuTagMultiselectWidget({&lt;br /&gt;
				placeholder: msg(&amp;#039;talktags-placeholder&amp;#039;),&lt;br /&gt;
				tagLimit: 10,&lt;br /&gt;
				autocomplete: false,&lt;br /&gt;
				$overlay: $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).addClass(&amp;#039;projectTagOverlay&amp;#039;).css({&lt;br /&gt;
					&amp;#039;position&amp;#039;: &amp;#039;absolute&amp;#039;,&lt;br /&gt;
					&amp;#039;z-index&amp;#039;: &amp;#039;110&amp;#039;&lt;br /&gt;
				}).appendTo(&amp;#039;body&amp;#039;)&lt;br /&gt;
			}), {&lt;br /&gt;
				label: msg(&amp;#039;talktags-label&amp;#039;),&lt;br /&gt;
				align: &amp;#039;top&amp;#039;,&lt;br /&gt;
				help: msg(&amp;#039;talktags-helptip&amp;#039;),&lt;br /&gt;
				helpInline: true,&lt;br /&gt;
			}),&lt;br /&gt;
&lt;br /&gt;
			// This is shown only if the ORES topic lookup fails, or is inconclusive&lt;br /&gt;
			ui.oresTopicLayout = new OO.ui.FieldLayout(ui.oresTopicInput = new OO.ui.MenuTagMultiselectWidget({&lt;br /&gt;
				placeholder: msg(&amp;#039;orestopic-placeholder&amp;#039;),&lt;br /&gt;
				tagLimit: 10,&lt;br /&gt;
				autocomplete: false, // XXX: doesn&amp;#039;t seem to work&lt;br /&gt;
				options: [ &amp;quot;biography&amp;quot;, &amp;quot;women&amp;quot;, &amp;quot;food-and-drink&amp;quot;, &amp;quot;internet-culture&amp;quot;, &amp;quot;linguistics&amp;quot;, &amp;quot;literature&amp;quot;, &amp;quot;books&amp;quot;, &amp;quot;entertainment&amp;quot;, &amp;quot;films&amp;quot;, &amp;quot;media&amp;quot;, &amp;quot;music&amp;quot;, &amp;quot;radio&amp;quot;, &amp;quot;software&amp;quot;, &amp;quot;television&amp;quot;, &amp;quot;video-games&amp;quot;, &amp;quot;performing-arts&amp;quot;, &amp;quot;philosophy-and-religion&amp;quot;, &amp;quot;sports&amp;quot;, &amp;quot;architecture&amp;quot;, &amp;quot;comics-and-anime&amp;quot;, &amp;quot;fashion&amp;quot;, &amp;quot;visual-arts&amp;quot;, &amp;quot;geographical&amp;quot;, &amp;quot;africa&amp;quot;, &amp;quot;central-africa&amp;quot;, &amp;quot;eastern-africa&amp;quot;, &amp;quot;northern-africa&amp;quot;, &amp;quot;southern-africa&amp;quot;, &amp;quot;western-africa&amp;quot;, &amp;quot;central-america&amp;quot;, &amp;quot;north-america&amp;quot;, &amp;quot;south-america&amp;quot;, &amp;quot;asia&amp;quot;, &amp;quot;central-asia&amp;quot;, &amp;quot;east-asia&amp;quot;, &amp;quot;north-asia&amp;quot;, &amp;quot;south-asia&amp;quot;, &amp;quot;southeast-asia&amp;quot;, &amp;quot;west-asia&amp;quot;, &amp;quot;eastern-europe&amp;quot;, &amp;quot;europe&amp;quot;, &amp;quot;northern-europe&amp;quot;, &amp;quot;southern-europe&amp;quot;, &amp;quot;western-europe&amp;quot;, &amp;quot;oceania&amp;quot;, &amp;quot;business-and-economics&amp;quot;, &amp;quot;education&amp;quot;, &amp;quot;history&amp;quot;, &amp;quot;military-and-warfare&amp;quot;, &amp;quot;politics-and-government&amp;quot;, &amp;quot;society&amp;quot;, &amp;quot;transportation&amp;quot;, &amp;quot;biology&amp;quot;, &amp;quot;chemistry&amp;quot;, &amp;quot;computing&amp;quot;, &amp;quot;earth-and-environment&amp;quot;, &amp;quot;engineering&amp;quot;, &amp;quot;libraries-and-information&amp;quot;, &amp;quot;mathematics&amp;quot;, &amp;quot;medicine-and-health&amp;quot;, &amp;quot;physics&amp;quot;, &amp;quot;stem&amp;quot;, &amp;quot;space&amp;quot;, &amp;quot;technology&amp;quot; ].map(function (e) {&lt;br /&gt;
					return {&lt;br /&gt;
						data: e,&lt;br /&gt;
						label: e&lt;br /&gt;
					};&lt;br /&gt;
				})&lt;br /&gt;
			}), {&lt;br /&gt;
				label: msg(&amp;#039;orestopic-label&amp;#039;),&lt;br /&gt;
				align: &amp;#039;top&amp;#039;,&lt;br /&gt;
				help: msg(&amp;#039;orestopic-helptip&amp;#039;),&lt;br /&gt;
				helpInline: true&lt;br /&gt;
			}),&lt;br /&gt;
&lt;br /&gt;
			ui.submitLayout = new OO.ui.FieldLayout(ui.submitButton = new OO.ui.ButtonWidget({&lt;br /&gt;
				label: msg(&amp;#039;submit-label&amp;#039;),&lt;br /&gt;
				flags: [ &amp;#039;progressive&amp;#039;, &amp;#039;primary&amp;#039; ],&lt;br /&gt;
			}))&lt;br /&gt;
		]&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	ui.footerLayout = new OO.ui.FieldLayout(new OO.ui.LabelWidget({&lt;br /&gt;
		label: $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;)&lt;br /&gt;
			.append(linkify(msg(&amp;#039;footer-text&amp;#039;)))&lt;br /&gt;
	}), {&lt;br /&gt;
		align: &amp;#039;top&amp;#039;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	afc.topicOptionsLoaded = getJSONPage(&amp;#039;Wikipedia:WikiProject Articles for creation/AfC topic map.json&amp;#039;).then(function (optionsJson) {&lt;br /&gt;
		var options = [];&lt;br /&gt;
		$.each(optionsJson, function (code, info) {&lt;br /&gt;
			options.push({&lt;br /&gt;
				label: info.label,&lt;br /&gt;
				data: code&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
		ui.afcTopicInput.setOptions(options);&lt;br /&gt;
		ui.afcTopicInput.setValue(config.defaultAfcTopic);&lt;br /&gt;
&lt;br /&gt;
		// resolve promise with allowed option codes:&lt;br /&gt;
		return options.map(function (op) {&lt;br /&gt;
			return op.data;&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	ui.oresTopicLayout.toggle(false);&lt;br /&gt;
&lt;br /&gt;
	var asUser = mw.util.getParamValue(&amp;#039;username&amp;#039;);&lt;br /&gt;
	if (asUser &amp;amp;&amp;amp; asUser !== mw.config.get(&amp;#039;wgUserName&amp;#039;)) {&lt;br /&gt;
		ui.fieldset.addItems([&lt;br /&gt;
			new OO.ui.FieldLayout(new OO.ui.MessageWidget({&lt;br /&gt;
				type: &amp;#039;notice&amp;#039;,&lt;br /&gt;
				inline: true,&lt;br /&gt;
				label: msg(&amp;#039;submitting-as&amp;#039;, asUser)&lt;br /&gt;
			}))&lt;br /&gt;
		], /* position */ 5); // just before submit button&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Attach&lt;br /&gt;
	$(&amp;#039;#afc-submit-wizard-container&amp;#039;).empty().append(ui.fieldset.$element, ui.footerLayout.$element);&lt;br /&gt;
&lt;br /&gt;
	mw.track(&amp;#039;stats.mediawiki_gadget_AFCSW_total&amp;#039;, 1, { action: &amp;#039;opened&amp;#039; });&lt;br /&gt;
&lt;br /&gt;
	// Populate talk page tags for multi-select widget&lt;br /&gt;
	afc.talkTagOptionsLoaded = getJSONPage(&amp;#039;Wikipedia:WikiProject Articles for creation/WikiProject templates.json&amp;#039;).then(function (data) {&lt;br /&gt;
		ui.talkTagsInput.addOptions(Object.keys(data).map(function (k) {&lt;br /&gt;
			return {&lt;br /&gt;
				data: data[k],&lt;br /&gt;
				label: k&lt;br /&gt;
			};&lt;br /&gt;
		}));&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	ui.clearTalkTags = function () {&lt;br /&gt;
		afc.talkTagOptionsLoaded.then(function () {&lt;br /&gt;
			ui.talkTagsInput.setValue([]);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	ui.addTalkTags = function (tags) {&lt;br /&gt;
		afc.talkTagOptionsLoaded.then(function () {&lt;br /&gt;
			ui.talkTagsInput.setValue(ui.talkTagsInput.getValue().concat(tags));&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Get mapping of infoboxes with relevant WikiProjects&lt;br /&gt;
	afc.ibxmapLoaded = getJSONPage(&amp;#039;Wikipedia:WikiProject Articles for creation/Infobox WikiProject map.json&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	ui.submitButton.on(&amp;#039;click&amp;#039;, handleSubmit);&lt;br /&gt;
	ui.titleInput.on(&amp;#039;change&amp;#039;, mw.util.debounce(config.debounceDelay, onDraftInputChange));&lt;br /&gt;
&lt;br /&gt;
	if (mw.util.getParamValue(&amp;#039;page&amp;#039;)) {&lt;br /&gt;
		onDraftInputChange();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// The default font size in monobook and modern are too small at 10px&lt;br /&gt;
	mw.util.addCSS(&amp;#039;.skin-modern .projectTagOverlay, .skin-monobook .projectTagOverlay { font-size: 130%; }&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	afc.beforeUnload = function (e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		e.returnValue = &amp;#039;&amp;#039;;&lt;br /&gt;
		return &amp;#039;&amp;#039;;&lt;br /&gt;
	};&lt;br /&gt;
	$(window).on(&amp;#039;beforeunload&amp;#039;, afc.beforeUnload);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function onDraftInputChange() {&lt;br /&gt;
	afc.lookupApi.abort(); // abort older API requests&lt;br /&gt;
&lt;br /&gt;
	var drafttitle = ui.titleInput.getValue().trim();&lt;br /&gt;
	if (!drafttitle) { // empty&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	debug(&amp;#039;draft input changed: &amp;quot;&amp;#039; + ui.titleInput.getValue() + &amp;#039;&amp;quot;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	// re-initialize&lt;br /&gt;
	ui.titleLayout.setErrors([]);&lt;br /&gt;
	ui.titleLayout.setWarnings([]);&lt;br /&gt;
	afc.oresTopics = null;&lt;br /&gt;
	afc.talktext = null;&lt;br /&gt;
	afc.pagetext = null;&lt;br /&gt;
	ui.clearTalkTags();&lt;br /&gt;
&lt;br /&gt;
	afc.lookupApi.get({&lt;br /&gt;
		&amp;quot;action&amp;quot;: &amp;quot;query&amp;quot;,&lt;br /&gt;
		&amp;quot;prop&amp;quot;: &amp;quot;revisions|description|info&amp;quot;,&lt;br /&gt;
		&amp;quot;titles&amp;quot;: drafttitle,&lt;br /&gt;
		&amp;quot;rvprop&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
		&amp;quot;rvslots&amp;quot;: &amp;quot;main&amp;quot;&lt;br /&gt;
	}).then(setPrefillsFromPageData);&lt;br /&gt;
&lt;br /&gt;
	var titleObj = mw.Title.newFromText(drafttitle);&lt;br /&gt;
	if (!titleObj || titleObj.isTalkPage()) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	var talkpagename = titleObj.getTalkPage().toText();&lt;br /&gt;
	afc.lookupApi.get({&lt;br /&gt;
		&amp;quot;action&amp;quot;: &amp;quot;query&amp;quot;,&lt;br /&gt;
		&amp;quot;prop&amp;quot;: &amp;quot;revisions&amp;quot;,&lt;br /&gt;
		&amp;quot;titles&amp;quot;: talkpagename,&lt;br /&gt;
		&amp;quot;rvprop&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
		&amp;quot;rvslots&amp;quot;: &amp;quot;main&amp;quot;,&lt;br /&gt;
	}).then(setPrefillsFromTalkPageData);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function setPrefillsFromPageData(json) {&lt;br /&gt;
	debug(&amp;#039;page fetch query&amp;#039;, json);&lt;br /&gt;
	var page = json.query.pages[0];&lt;br /&gt;
	var preNormalizedTitle = json.query.normalized &amp;amp;&amp;amp; json.query.normalized[0] &amp;amp;&amp;amp;&lt;br /&gt;
		json.query.normalized[0].from;&lt;br /&gt;
	debug(&amp;#039;page.title: &amp;quot;&amp;#039; + page.title + &amp;#039;&amp;quot;&amp;#039;);&lt;br /&gt;
	if (ui.titleInput.getValue() !== (preNormalizedTitle || page.title)) {&lt;br /&gt;
		return; // user must have changed the title already&lt;br /&gt;
	}&lt;br /&gt;
	var errors = errorsFromPageData(page);&lt;br /&gt;
	if (errors.length) {&lt;br /&gt;
		ui.titleLayout.setErrors(errors);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	ui.titleLayout.setWarnings(warningsFromPageData(page));&lt;br /&gt;
&lt;br /&gt;
	afc.pagetext = page.revisions[0].slots.main.content;&lt;br /&gt;
&lt;br /&gt;
	// Set AfC topic category&lt;br /&gt;
	var topicMatch = afc.pagetext.match(/\{\{AfC topic\|(.*?)\}\}/);&lt;br /&gt;
	if (topicMatch) {&lt;br /&gt;
		afc.topicOptionsLoaded.then(function(allowedCodes) {&lt;br /&gt;
			var topic = topicMatch[1];&lt;br /&gt;
			debug(&amp;quot;Allowed topic codes fetched:&amp;quot;, allowedCodes);&lt;br /&gt;
			debug(&amp;quot;AfC topic found:&amp;quot;, topic);&lt;br /&gt;
			// if the code found in the template is an invalid one, keep the default to &amp;quot;other&amp;quot;,&lt;br /&gt;
			// rather than the first item in the list&lt;br /&gt;
			if (allowedCodes.indexOf(topic) !== -1) {&lt;br /&gt;
				ui.afcTopicInput.setValue(topic);&lt;br /&gt;
			} else {&lt;br /&gt;
				ui.afcTopicInput.setValue(config.defaultAfcTopic);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	} else {&lt;br /&gt;
		ui.afcTopicInput.setValue(config.defaultAfcTopic);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Set short description in form&lt;br /&gt;
	ui.shortdescInput.setValue(page.description || &amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	// Guess WikiProject tags from infoboxes on the page&lt;br /&gt;
	afc.ibxmapLoaded.then(function (ibxmap) {&lt;br /&gt;
		var infoboxRgx = /\{\{([Ii]nfobox [^|}]*)/g,&lt;br /&gt;
			wikiprojects = [],&lt;br /&gt;
			match;&lt;br /&gt;
		while (match = infoboxRgx.exec(afc.pagetext)) {&lt;br /&gt;
			var ibx = match[1].trim();&lt;br /&gt;
			ibx = ibx[0].toUpperCase() + ibx.slice(1);&lt;br /&gt;
			if (ibxmap[ibx]) {&lt;br /&gt;
				wikiprojects = wikiprojects.concat(ibxmap[ibx]);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		debug(&amp;#039;wikiprojects from infobox: &amp;#039;, wikiprojects);&lt;br /&gt;
		ui.addTalkTags(wikiprojects);&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	// Fill ORES topics&lt;br /&gt;
	getOresTopics(page.lastrevid).then(function (topics) {&lt;br /&gt;
		debug(&amp;#039;ORES topics: &amp;#039;, topics);&lt;br /&gt;
		if (!topics || !topics.length) { // unexpected API response or API returns unsorted&lt;br /&gt;
			ui.oresTopicLayout.toggle(true);&lt;br /&gt;
		} else {&lt;br /&gt;
			ui.oresTopicLayout.toggle(false);&lt;br /&gt;
			afc.oresTopics = topics;&lt;br /&gt;
		}&lt;br /&gt;
	}, function () {&lt;br /&gt;
		ui.oresTopicLayout.toggle(true);&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function setPrefillsFromTalkPageData (json) {&lt;br /&gt;
	var talkpage = json.query.pages[0];&lt;br /&gt;
	if (!talkpage || talkpage.missing) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	afc.talktext = talkpage.revisions[0].slots.main.content;&lt;br /&gt;
	debug(afc.talktext);&lt;br /&gt;
&lt;br /&gt;
	var existingWikiProjects = extractWikiProjectTagsFromText(afc.talktext);&lt;br /&gt;
	var existingTags = existingWikiProjects.map(function (e) {&lt;br /&gt;
		return e.name;&lt;br /&gt;
	});&lt;br /&gt;
	debug(existingTags);&lt;br /&gt;
	ui.addTalkTags(existingTags);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} page - from query API response&lt;br /&gt;
 * @returns {string[]}&lt;br /&gt;
 */&lt;br /&gt;
function errorsFromPageData(page) {&lt;br /&gt;
	if (!page || page.invalid) {&lt;br /&gt;
		return [msg(&amp;#039;validation-invalidtitle&amp;#039;)];&lt;br /&gt;
	}&lt;br /&gt;
	if (page.missing) {&lt;br /&gt;
		return [msg(&amp;#039;validation-missingtitle&amp;#039;)];&lt;br /&gt;
	}&lt;br /&gt;
	if (config.allowedNamespaces.indexOf(page.ns) === -1) {&lt;br /&gt;
		return [msg(&amp;#039;validation-wrongns&amp;#039;)];&lt;br /&gt;
	}&lt;br /&gt;
	return [];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} page - from query API response&lt;br /&gt;
 * @returns {string[]}&lt;br /&gt;
 */&lt;br /&gt;
function warningsFromPageData(page) {&lt;br /&gt;
	var pagetext = page.revisions[0].slots.main.content;&lt;br /&gt;
&lt;br /&gt;
	var warnings = [];&lt;br /&gt;
&lt;br /&gt;
	// Show no refs warning&lt;br /&gt;
	if (!/&amp;lt;ref/i.test(pagetext) &amp;amp;&amp;amp; !/\{\{([Ss]fn|[Hh]arv)/.test(pagetext)) {&lt;br /&gt;
		warnings.push(&amp;#039;warning-norefs&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// TODO: Show warning for use of deprecated/unreliable sources&lt;br /&gt;
	// TODO: Show tip for avoiding peacock words or promotional language?&lt;br /&gt;
&lt;br /&gt;
	return warnings.map(function (warning) {&lt;br /&gt;
		return new OO.ui.HtmlSnippet(linkify(msg(warning)));&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {number} revid&lt;br /&gt;
 * @returns {jQuery.Promise&amp;lt;string[]&amp;gt;}&lt;br /&gt;
 */&lt;br /&gt;
function getOresTopics(revid) {&lt;br /&gt;
	return $.get(&amp;#039;https://ores.wikimedia.org/v3/scores/enwiki/?models=drafttopic&amp;amp;revids=&amp;#039; + revid).then(function (json) {&lt;br /&gt;
&lt;br /&gt;
		// null is returned if at any point something in the API output is unexpected&lt;br /&gt;
		// ES2020 has optional chaining, but of course on MediaWiki we&amp;#039;re still stuck with ES5&lt;br /&gt;
		return json &amp;amp;&amp;amp;&lt;br /&gt;
			json.enwiki &amp;amp;&amp;amp;&lt;br /&gt;
			json.enwiki.scores &amp;amp;&amp;amp;&lt;br /&gt;
			json.enwiki.scores[revid] &amp;amp;&amp;amp;&lt;br /&gt;
			json.enwiki.scores[revid].drafttopic &amp;amp;&amp;amp;&lt;br /&gt;
			json.enwiki.scores[revid].drafttopic.score &amp;amp;&amp;amp;&lt;br /&gt;
			(json.enwiki.scores[revid].drafttopic.score.prediction instanceof Array) &amp;amp;&amp;amp;&lt;br /&gt;
			json.enwiki.scores[revid].drafttopic.score.prediction.map(function (topic, idx, topics) {&lt;br /&gt;
				// Remove Asia.Asia* if Asia.South-Asia is present (example)&lt;br /&gt;
				if (topic.slice(-1) === &amp;#039;*&amp;#039;) {&lt;br /&gt;
					var metatopic = topic.split(&amp;#039;.&amp;#039;).slice(0, -1).join(&amp;#039;.&amp;#039;);&lt;br /&gt;
					for (var i = 0; i &amp;lt; topics.length; i++) {&lt;br /&gt;
						if (topics[i] !== topic &amp;amp;&amp;amp; topics[i].startsWith(metatopic)) {&lt;br /&gt;
							return;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					return metatopic.split(&amp;#039;.&amp;#039;).pop();&lt;br /&gt;
				}&lt;br /&gt;
				return topic.split(&amp;#039;.&amp;#039;).pop();&lt;br /&gt;
			})&lt;br /&gt;
			.filter(function (e) {&lt;br /&gt;
				return e; // filter out undefined from above&lt;br /&gt;
			})&lt;br /&gt;
			.map(function (topic) {&lt;br /&gt;
				// convert topic string to normalised form&lt;br /&gt;
				return topic&lt;br /&gt;
					.replace(/[A-Z]/g, function (match) {&lt;br /&gt;
						return match[0].toLowerCase();&lt;br /&gt;
					})&lt;br /&gt;
					.replace(/ /g, &amp;#039;-&amp;#039;)&lt;br /&gt;
					.replace(/&amp;amp;/g, &amp;#039;and&amp;#039;);&lt;br /&gt;
			});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/***&lt;br /&gt;
 * @param {string} text&lt;br /&gt;
 * @returns {{wikitext: string, name: string}[]}&lt;br /&gt;
 */&lt;br /&gt;
function extractWikiProjectTagsFromText(text) {&lt;br /&gt;
	if (!text) {&lt;br /&gt;
		return [];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// this is best-effort, no guaranteed accuracy&lt;br /&gt;
	var existingTags = [];&lt;br /&gt;
	var rgx = /\{\{(WikiProject [^|}]*).*?\}\}/g;&lt;br /&gt;
	var match;&lt;br /&gt;
	while (match = rgx.exec(text)) { // jshint ignore:line&lt;br /&gt;
		var tag = match[1].trim();&lt;br /&gt;
		if (tag === &amp;#039;WikiProject banner shell&amp;#039;) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		existingTags.push({&lt;br /&gt;
			wikitext: match[0],&lt;br /&gt;
			name: tag&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	return existingTags;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {string} type&lt;br /&gt;
 * @param {string} message&lt;br /&gt;
 */&lt;br /&gt;
function setMainStatus(type, message) {&lt;br /&gt;
	if (!ui.mainStatusLayout || !ui.mainStatusLayout.isElementAttached()) {&lt;br /&gt;
		ui.fieldset.addItems([&lt;br /&gt;
			ui.mainStatusLayout = new OO.ui.FieldLayout(ui.mainStatusArea = new OO.ui.MessageWidget())&lt;br /&gt;
		]);&lt;br /&gt;
	}&lt;br /&gt;
	ui.mainStatusArea.setType(type);&lt;br /&gt;
	ui.mainStatusArea.setLabel(message);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {string} type&lt;br /&gt;
 * @param {string} message&lt;br /&gt;
 */&lt;br /&gt;
function setTalkStatus(type, message) {&lt;br /&gt;
	if (!ui.talkStatusLayout) {&lt;br /&gt;
		ui.fieldset.addItems([&lt;br /&gt;
			ui.talkStatusLayout = new OO.ui.FieldLayout(ui.talkStatusArea = new OO.ui.MessageWidget())&lt;br /&gt;
		]);&lt;br /&gt;
	}&lt;br /&gt;
	ui.talkStatusArea.setType(type);&lt;br /&gt;
	ui.talkStatusArea.setLabel(message);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function handleSubmit() {&lt;br /&gt;
&lt;br /&gt;
	setMainStatus(&amp;#039;notice&amp;#039;, msg(&amp;#039;status-processing&amp;#039;));&lt;br /&gt;
	mw.track(&amp;#039;stats.mediawiki_gadget_AFCSW_total&amp;#039;, 1, { action: &amp;#039;submit_attempted&amp;#039; });&lt;br /&gt;
	ui.submitButton.setDisabled(true);&lt;br /&gt;
	ui.mainStatusLayout.scrollElementIntoView();&lt;br /&gt;
&lt;br /&gt;
	var draft = ui.titleInput.getValue();&lt;br /&gt;
	if (!draft) {&lt;br /&gt;
		ui.titleLayout.setErrors([msg(&amp;#039;validation-notitle&amp;#039;)]);&lt;br /&gt;
		ui.fieldset.removeItems([ui.mainStatusLayout]);&lt;br /&gt;
		ui.submitButton.setDisabled(false);&lt;br /&gt;
		ui.titleLayout.scrollElementIntoView();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	debug(draft);&lt;br /&gt;
&lt;br /&gt;
	afc.api.get({&lt;br /&gt;
		&amp;quot;action&amp;quot;: &amp;quot;query&amp;quot;,&lt;br /&gt;
		&amp;quot;prop&amp;quot;: &amp;quot;revisions|description&amp;quot;,&lt;br /&gt;
		&amp;quot;titles&amp;quot;: draft,&lt;br /&gt;
		&amp;quot;rvprop&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
		&amp;quot;rvslots&amp;quot;: &amp;quot;main&amp;quot;,&lt;br /&gt;
	}).then(function (json) {&lt;br /&gt;
		var apiPage = json.query.pages[0];&lt;br /&gt;
&lt;br /&gt;
		var errors = errorsFromPageData(apiPage);&lt;br /&gt;
		if (errors.length) {&lt;br /&gt;
			ui.titleLayout.setErrors(errors);&lt;br /&gt;
			ui.fieldset.removeItems([ui.mainStatusLayout]);&lt;br /&gt;
			ui.submitButton.setDisabled(false);&lt;br /&gt;
			ui.titleLayout.scrollElementIntoView();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var text = prepareDraftText(apiPage);&lt;br /&gt;
&lt;br /&gt;
		setMainStatus(&amp;#039;notice&amp;#039;, msg(&amp;#039;status-saving&amp;#039;));&lt;br /&gt;
		saveDraftPage(draft, text).then(function () {&lt;br /&gt;
			setMainStatus(&amp;#039;success&amp;#039;, msg(&amp;#039;status-redirecting&amp;#039;));&lt;br /&gt;
			mw.track(&amp;#039;stats.mediawiki_gadget_AFCSW_total&amp;#039;, 1, { action: &amp;#039;submit_succeeded&amp;#039; });&lt;br /&gt;
&lt;br /&gt;
			$(window).off(&amp;#039;beforeunload&amp;#039;, afc.beforeUnload);&lt;br /&gt;
			setTimeout(function () {&lt;br /&gt;
				location.href = mw.util.getUrl(draft);&lt;br /&gt;
			}, config.redirectionDelay);&lt;br /&gt;
		}, function (code, err) {&lt;br /&gt;
			if (code === &amp;#039;captcha&amp;#039;) {&lt;br /&gt;
				ui.fieldset.removeItems([ui.mainStatusLayout, ui.talkStatusLayout]);&lt;br /&gt;
				ui.captchaLayout.scrollElementIntoView();&lt;br /&gt;
				mw.track(&amp;#039;stats.mediawiki_gadget_AFCSW_total&amp;#039;, 1, { action: &amp;#039;submit_captcha&amp;#039; });&lt;br /&gt;
			} else {&lt;br /&gt;
				setMainStatus(&amp;#039;error&amp;#039;, msg(&amp;#039;error-saving-main&amp;#039;, makeErrorMessage(code, err)));&lt;br /&gt;
				mw.track(&amp;#039;stats.mediawiki_gadget_AFCSW_total&amp;#039;, 1, { action: &amp;#039;submit_failed&amp;#039; });&lt;br /&gt;
				mw.track(&amp;#039;stats.mediawiki_gadget_AFCSW_total&amp;#039;, 1, { action: &amp;#039;submit_failed_&amp;#039; + code });&lt;br /&gt;
			}&lt;br /&gt;
			ui.submitButton.setDisabled(false);&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		var talktext = prepareTalkText(afc.talktext);&lt;br /&gt;
		if (!afc.talktext &amp;amp;&amp;amp; !talktext) {&lt;br /&gt;
			// No content earlier, no content now. Stop here to avoid&lt;br /&gt;
			// creating the talk page as empty.&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		setTalkStatus(&amp;#039;notice&amp;#039;, msg(&amp;#039;status-saving-talk&amp;#039;));&lt;br /&gt;
		afc.api.postWithEditToken({&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;edit&amp;quot;,&lt;br /&gt;
			&amp;quot;title&amp;quot;: new mw.Title(draft).getTalkPage().toText(),&lt;br /&gt;
			&amp;quot;text&amp;quot;: talktext,&lt;br /&gt;
			&amp;quot;summary&amp;quot;: msg(&amp;#039;editsummary-talk&amp;#039;)&lt;br /&gt;
		}).then(function (data) {&lt;br /&gt;
			if (data.edit &amp;amp;&amp;amp; data.edit.result === &amp;#039;Success&amp;#039;) {&lt;br /&gt;
				setTalkStatus(&amp;#039;success&amp;#039;, msg(&amp;#039;status-talk-success&amp;#039;));&lt;br /&gt;
			} else {&lt;br /&gt;
				return $.Deferred().reject(&amp;#039;unexpected result&amp;#039;);&lt;br /&gt;
			}&lt;br /&gt;
		}).catch(function (code, err) {&lt;br /&gt;
			setTalkStatus(&amp;#039;error&amp;#039;, msg(&amp;#039;error-saving-talk&amp;#039;, makeErrorMessage(code, err)));&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	}).catch(function (code, err) {&lt;br /&gt;
		setMainStatus(&amp;#039;error&amp;#039;, msg(&amp;#039;error-main&amp;#039;, makeErrorMessage(code, err)));&lt;br /&gt;
		ui.submitButton.setDisabled(false);&lt;br /&gt;
		mw.track(&amp;#039;stats.mediawiki_gadget_AFCSW_total&amp;#039;, 1, { action: &amp;#039;submit_failed&amp;#039; });&lt;br /&gt;
		mw.track(&amp;#039;stats.mediawiki_gadget_AFCSW_total&amp;#039;, 1, { action: &amp;#039;submit_failed_&amp;#039; + code });&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveDraftPage(title, text) {&lt;br /&gt;
&lt;br /&gt;
	// TODO: handle edit conflict&lt;br /&gt;
	var editParams = {&lt;br /&gt;
		&amp;quot;action&amp;quot;: &amp;quot;edit&amp;quot;,&lt;br /&gt;
		&amp;quot;title&amp;quot;: title,&lt;br /&gt;
		&amp;quot;text&amp;quot;: text,&lt;br /&gt;
		&amp;quot;summary&amp;quot;: msg(&amp;#039;editsummary-main&amp;#039;)&lt;br /&gt;
	};&lt;br /&gt;
	if (ui.captchaLayout &amp;amp;&amp;amp; ui.captchaLayout.isElementAttached()) {&lt;br /&gt;
		editParams.captchaid = afc.captchaid;&lt;br /&gt;
		editParams.captchaword = ui.captchaInput.getValue();&lt;br /&gt;
		ui.fieldset.removeItems([ui.captchaLayout]);&lt;br /&gt;
	}&lt;br /&gt;
	return afc.api.postWithEditToken(editParams).then(function (data) {&lt;br /&gt;
		if (!data.edit || data.edit.result !== &amp;#039;Success&amp;#039;) {&lt;br /&gt;
			if (data.edit &amp;amp;&amp;amp; data.edit.captcha) {&lt;br /&gt;
				// Handle captcha for non-confirmed users&lt;br /&gt;
&lt;br /&gt;
				var url = data.edit.captcha.url;&lt;br /&gt;
				afc.captchaid = data.edit.captcha.id; // abuse of global?&lt;br /&gt;
				ui.fieldset.addItems([&lt;br /&gt;
					ui.captchaLayout = new OO.ui.FieldLayout(ui.captchaInput = new OO.ui.TextInputWidget({&lt;br /&gt;
						placeholder: msg(&amp;#039;captcha-placeholder&amp;#039;),&lt;br /&gt;
						required: true&lt;br /&gt;
					}), {&lt;br /&gt;
						warnings: [ new OO.ui.HtmlSnippet(&amp;#039;&amp;lt;img src=&amp;#039; + url + &amp;#039;&amp;gt;&amp;#039;) ],&lt;br /&gt;
						label: msg(&amp;#039;captcha-label&amp;#039;),&lt;br /&gt;
						align: &amp;#039;top&amp;#039;,&lt;br /&gt;
						help: msg(&amp;#039;captcha-helptip&amp;#039;),&lt;br /&gt;
						helpInline: true,&lt;br /&gt;
					}),&lt;br /&gt;
				], /* position */ 6); // just after submit button&lt;br /&gt;
				// TODO: submit when enter key is pressed in captcha field&lt;br /&gt;
&lt;br /&gt;
				return $.Deferred().reject(&amp;#039;captcha&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
			} else {&lt;br /&gt;
				return $.Deferred().reject(&amp;#039;unexpected-result&amp;#039;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} page - page information from the API&lt;br /&gt;
 * @returns {string} final draft page text to save&lt;br /&gt;
 */&lt;br /&gt;
function prepareDraftText(page) {&lt;br /&gt;
	var text = page.revisions[0].slots.main.content;&lt;br /&gt;
&lt;br /&gt;
	var header = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	// Handle short description&lt;br /&gt;
	var shortDescTemplateExists = /\{\{[Ss]hort ?desc(ription)?\s*\|/.test(text);&lt;br /&gt;
	var shortDescExists = !!page.description;&lt;br /&gt;
	var existingShortDesc = page.description;&lt;br /&gt;
&lt;br /&gt;
	if (ui.shortdescInput.getValue()) {&lt;br /&gt;
		// 1. No shortdesc - insert the one provided by user&lt;br /&gt;
		if (!shortDescExists) {&lt;br /&gt;
			header += &amp;#039;{{Short description|&amp;#039; + ui.shortdescInput.getValue() + &amp;#039;}}\n&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		// 2. Shortdesc exists from {{short description}} template - replace it&lt;br /&gt;
		} else if (shortDescExists &amp;amp;&amp;amp; shortDescTemplateExists) {&lt;br /&gt;
			text = text.replace(/\{\{[Ss]hort ?desc(ription)?\s*\|.*?\}\}\n*/g, &amp;#039;&amp;#039;);&lt;br /&gt;
			header += &amp;#039;{{Short description|&amp;#039; + ui.shortdescInput.getValue() + &amp;#039;}}\n&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		// 3. Shortdesc exists, but not generated by {{short description}}. If the user&lt;br /&gt;
		//  has changed the value, save the new value&lt;br /&gt;
		} else if (shortDescExists &amp;amp;&amp;amp; existingShortDesc !== ui.shortdescInput.getValue()) {&lt;br /&gt;
			header += &amp;#039;{{Short description|&amp;#039; + ui.shortdescInput.getValue() + &amp;#039;}}\n&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		// 4. Shortdesc exists, but not generated by {{short description}}, and user hasn&amp;#039;t changed the value&lt;br /&gt;
		} else {&lt;br /&gt;
			// Do nothing&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		// User emptied the shortdesc field (or didn&amp;#039;t exist from before): remove any existing shortdesc.&lt;br /&gt;
		// This doesn&amp;#039;t remove any shortdesc that is generated by other templates&lt;br /&gt;
		// Race condition (FIXME): if someone else added a shortdesc to the draft after this user opened the wizard,&lt;br /&gt;
		// that shortdesc gets removed&lt;br /&gt;
		text = text.replace(/\{\{[Ss]hort ?desc(ription)?\s*\|.*?\}\}\n*/g, &amp;#039;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Draft topics&lt;br /&gt;
	debug(ui.oresTopicInput);&lt;br /&gt;
	if (ui.oresTopicLayout.isVisible()) {&lt;br /&gt;
		afc.oresTopics = ui.oresTopicInput.getValue();&lt;br /&gt;
	}&lt;br /&gt;
	if (afc.oresTopics &amp;amp;&amp;amp; afc.oresTopics.length) {&lt;br /&gt;
		text = text.replace(/\{\{[Dd]raft topics\|.*?\}\}\n*/g, &amp;#039;&amp;#039;);&lt;br /&gt;
		header += &amp;#039;{{Draft topics|&amp;#039; + afc.oresTopics.join(&amp;#039;|&amp;#039;) + &amp;#039;}}\n&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Add AfC topic&lt;br /&gt;
	text = text.replace(/\{\{AfC topic\|(.*?)\}\}/g, &amp;#039;&amp;#039;);&lt;br /&gt;
	header += &amp;#039;{{AfC topic|&amp;#039; + ui.afcTopicInput.getValue() + &amp;#039;}}\n&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	// put AfC submission template&lt;br /&gt;
	header += &amp;#039;{{subst:submit|1=&amp;#039; + (mw.util.getParamValue(&amp;#039;username&amp;#039;) || &amp;#039;{{subst:REVISIONUSER}}&amp;#039;) + &amp;#039;}}\n&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	// insert everything to the top&lt;br /&gt;
	text = header + text;&lt;br /&gt;
	debug(text);&lt;br /&gt;
&lt;br /&gt;
	return text;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {string} initialText - initial talk page text&lt;br /&gt;
 * @returns {string} - final talk page text to save&lt;br /&gt;
 */&lt;br /&gt;
function prepareTalkText(initialText) {&lt;br /&gt;
	var text = initialText;&lt;br /&gt;
&lt;br /&gt;
	// TODO: this can be improved to put tags within {{WikiProject banner shell}} (if already present or otherwise)&lt;br /&gt;
	var alreadyExistingWikiProjects = extractWikiProjectTagsFromText(text);&lt;br /&gt;
	var alreadyExistingTags = alreadyExistingWikiProjects.map(function (e) {&lt;br /&gt;
		return e.name;&lt;br /&gt;
	});&lt;br /&gt;
	var tagsToAdd = ui.talkTagsInput.getValue().filter(function (tag) {&lt;br /&gt;
		return alreadyExistingTags.indexOf(tag) === -1;&lt;br /&gt;
	});&lt;br /&gt;
	var tagsToRemove = alreadyExistingTags.filter(function (tag) {&lt;br /&gt;
		return ui.talkTagsInput.getValue().indexOf(tag) === -1;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	tagsToRemove.forEach(function (tag) {&lt;br /&gt;
		text = text.replace(new RegExp(&amp;#039;\\{\\{\\s*&amp;#039; + tag + &amp;#039;\\s*(\\|.*?)?\\}\\}\\n?&amp;#039;), &amp;#039;&amp;#039;);&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	var tagsToAddText = tagsToAdd.map(function (tag) {&lt;br /&gt;
		return &amp;#039;{{&amp;#039; + tag + &amp;#039;}}&amp;#039;;&lt;br /&gt;
	}).join(&amp;#039;\n&amp;#039;) + (tagsToAdd.length ? &amp;#039;\n&amp;#039; : &amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	text = tagsToAddText + (text || &amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	// remove |class=draft parameter in any WikiProject templates&lt;br /&gt;
	text = text.replace(/(\{\{wikiproject.*?)\|\s*class\s*=\s*draft\s*/gi, &amp;#039;$1&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	return text;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load a JSON page from the wiki.&lt;br /&gt;
 * Use API (instead of $.getJSON with action=raw) to take advantage of caching&lt;br /&gt;
 * @param {string} page&lt;br /&gt;
 * @returns {jQuery.Promise&amp;lt;Record&amp;lt;string, any&amp;gt;&amp;gt;}&lt;br /&gt;
 **/&lt;br /&gt;
function getJSONPage (page) {&lt;br /&gt;
	return afc.api.get({&lt;br /&gt;
		action: &amp;#039;query&amp;#039;,&lt;br /&gt;
		titles: page,&lt;br /&gt;
		prop: &amp;#039;revisions&amp;#039;,&lt;br /&gt;
		rvprop: &amp;#039;content&amp;#039;,&lt;br /&gt;
		rvlimit: 1,&lt;br /&gt;
		rvslots: &amp;#039;main&amp;#039;,&lt;br /&gt;
		uselang: &amp;#039;content&amp;#039;,&lt;br /&gt;
		maxage: &amp;#039;3600&amp;#039;, // 1 hour&lt;br /&gt;
		smaxage: &amp;#039;3600&amp;#039;,&lt;br /&gt;
		formatversion: 2&lt;br /&gt;
	}).then(function (json) {&lt;br /&gt;
		var content = json.query.pages[0].revisions[0].slots.main.content;&lt;br /&gt;
		return JSON.parse(content);&lt;br /&gt;
	}).catch(function (code, err) {&lt;br /&gt;
		console.error(makeErrorMessage(code, err));&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Expands wikilinks and external links into HTML.&lt;br /&gt;
 * Used instead of mw.msg(...).parse() because we want links to open in a new tab,&lt;br /&gt;
 * and we don&amp;#039;t want tags to be mangled.&lt;br /&gt;
 * @param {string} input&lt;br /&gt;
 * @returns {string}&lt;br /&gt;
 */&lt;br /&gt;
function linkify(input) {&lt;br /&gt;
	return input&lt;br /&gt;
		.replace(&lt;br /&gt;
			/\[\[:?(?:([^|\]]+?)\|)?([^\]|]+?)\]\]/g,&lt;br /&gt;
			function(_, target, text) {&lt;br /&gt;
				if (!target) {&lt;br /&gt;
					target = text;&lt;br /&gt;
				}&lt;br /&gt;
				return &amp;#039;&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;&amp;#039; + mw.util.getUrl(target) +&lt;br /&gt;
					&amp;#039;&amp;quot; title=&amp;quot;&amp;#039; + target.replace(/&amp;quot;/g, &amp;#039;&amp;amp;#34;&amp;#039;) + &amp;#039;&amp;quot;&amp;gt;&amp;#039; + text + &amp;#039;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
		)&lt;br /&gt;
		// for ext links, display text should be given&lt;br /&gt;
		.replace(&lt;br /&gt;
			/\[(\S*?) (.*?)\]/g,&lt;br /&gt;
			function (_, target, text) {&lt;br /&gt;
				return &amp;#039;&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;&amp;#039; + target + &amp;#039;&amp;quot;&amp;gt;&amp;#039; + text + &amp;#039;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
		);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function msg(key) {&lt;br /&gt;
	var messageArgs = Array.prototype.slice.call(arguments, 1);&lt;br /&gt;
	return mw.msg.apply(mw, [&amp;#039;afcsw-&amp;#039; + key].concat(messageArgs));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeErrorMessage(code, err) {&lt;br /&gt;
	if (code === &amp;#039;http&amp;#039;) {&lt;br /&gt;
		return &amp;#039;http: there is no internet connectivity&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	return code + (err &amp;amp;&amp;amp; err.error &amp;amp;&amp;amp; err.error.info ? &amp;#039;: &amp;#039; + err.error.info : &amp;#039;&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function debug() {&lt;br /&gt;
	Array.prototype.slice.call(arguments).forEach(function (arg) {&lt;br /&gt;
		console.log(arg);&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
})(); // File-level closure to protect functions from being exposed to the global scope or overwritten&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/nowiki&amp;gt; */&lt;/div&gt;</summary>
		<author><name>en&gt;SD0001</name></author>
	</entry>
</feed>