<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://www.micropedia.site/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>微國家百科 - 使用者貢獻 [zh-tw]</title>
	<link rel="self" type="application/atom+xml" href="https://www.micropedia.site/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://www.micropedia.site/wiki/%E7%89%B9%E6%AE%8A:%E4%BD%BF%E7%94%A8%E8%80%85%E8%B2%A2%E7%8D%BB/Admin"/>
	<updated>2026-09-21T21:23:14Z</updated>
	<subtitle>使用者貢獻</subtitle>
	<generator>MediaWiki 1.45.0-alpha</generator>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E4%BD%BF%E7%94%A8%E8%80%85:%E6%99%AE%E6%B8%A1%E7%9C%BE%E7%94%9F&amp;diff=53396</id>
		<title>使用者:普渡眾生</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E4%BD%BF%E7%94%A8%E8%80%85:%E6%99%AE%E6%B8%A1%E7%9C%BE%E7%94%9F&amp;diff=53396"/>
		<updated>2025-09-28T14:15:17Z</updated>

		<summary type="html">&lt;p&gt;Admin：​Admin已移動頁面使用者:普渡眾生重至使用者:普渡眾生，不留重新導向：​重新命名使用者「普渡眾生重」為「普渡眾生」時已自動移動頁面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;普渡眾生&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E8%B2%A1%E5%8B%99%E5%A0%B1%E5%91%8A&amp;diff=48974</id>
		<title>微國家百科:財務報告</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E8%B2%A1%E5%8B%99%E5%A0%B1%E5%91%8A&amp;diff=48974"/>
		<updated>2025-07-15T11:28:50Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;以下為微國家百科自2024年12月28日起的財務報告：&#039;&#039;&#039;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;font-size:100%; width:100%&amp;quot;&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | 微國家百科自2024年12月28日起的財務報告&amp;lt;br /&amp;gt; &amp;lt;small&amp;gt;最後更新於2025年7月15日&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! width=15% | 日期&lt;br /&gt;
! 事項&lt;br /&gt;
! width=15% | 收入&lt;br /&gt;
! width=15% | 支出 &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | &#039;&#039;此前戶口餘額&#039;&#039;&lt;br /&gt;
| colspan=2 | &#039;&#039;&#039;NT$10&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 2024年12月28日&lt;br /&gt;
| 捐款 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 何正先生&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$10,000}}&#039;&#039;&#039;&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| rowspan=3 | 2024年12月29日&lt;br /&gt;
| 捐款 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 大郲華夏帝國&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$500}}&#039;&#039;&#039;&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 存入伺服器扣款帳戶&lt;br /&gt;
!&lt;br /&gt;
| &#039;&#039;&#039;{{color|red|NT$5,092}}&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 手續費&lt;br /&gt;
!&lt;br /&gt;
| &#039;&#039;&#039;{{color|red|NT$72}}&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 2025年3月3日&lt;br /&gt;
| 捐款 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 格蘭迪亞共和國&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$1,000}}&#039;&#039;&#039; &lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| rowspan=2 | 2025年4月1日&lt;br /&gt;
| 存入伺服器扣款帳戶&lt;br /&gt;
! &lt;br /&gt;
| &#039;&#039;&#039;{{color|red|NT$3,104}}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 手續費&lt;br /&gt;
! &lt;br /&gt;
| &#039;&#039;&#039;{{color|red|NT$47}}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 2025年4月10日&lt;br /&gt;
| 捐款 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 大郲華夏帝國&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$1,000}}&#039;&#039;&#039;&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 2025年5月26日&lt;br /&gt;
| 捐款 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 李興道先生&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$2,000}}&#039;&#039;&#039;&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 2025年6月12日&lt;br /&gt;
| 捐款 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 大郲華夏帝國&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$1,000}}&#039;&#039;&#039;&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 2025年6月17日&lt;br /&gt;
| 存入伺服器扣款帳戶&lt;br /&gt;
!&lt;br /&gt;
| &#039;&#039;&#039;{{color|red|NT$1,694}}&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| rowspan=2 | 2025年6月21日&lt;br /&gt;
| 戶口利息&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$3}}&#039;&#039;&#039;&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 捐款 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 華江斯坦君憲國&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$600}}&#039;&#039;&#039;&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 2025年6月22日&lt;br /&gt;
| 捐款 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 阿爾帕德王國&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$238}}&#039;&#039;&#039;&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 2025年7月11日&lt;br /&gt;
| 存入伺服器扣款帳戶&lt;br /&gt;
!&lt;br /&gt;
| &#039;&#039;&#039;{{color|red|NT$271}}&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| rowspan=2 | 2025年7月15日&lt;br /&gt;
| 存入伺服器扣款帳戶&lt;br /&gt;
!&lt;br /&gt;
| &#039;&#039;&#039;{{color|red|NT$2,811}}&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
| 捐款 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 大郲華夏帝國&lt;br /&gt;
| &#039;&#039;&#039;{{color|darkgreen|NT$758}}&#039;&#039;&#039;&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | &#039;&#039;現存餘額&#039;&#039;&lt;br /&gt;
| colspan=2 | &#039;&#039;&#039;NT$4,000&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%8D%97%E8%8C%97%E6%B0%91%E4%B8%BB%E5%85%B1%E5%92%8C%E5%9C%8B&amp;diff=48707</id>
		<title>南茗民主共和國</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%8D%97%E8%8C%97%E6%B0%91%E4%B8%BB%E5%85%B1%E5%92%8C%E5%9C%8B&amp;diff=48707"/>
		<updated>2025-07-09T04:37:38Z</updated>

		<summary type="html">&lt;p&gt;Admin：​受保護 &amp;quot;南茗民主共和國&amp;quot;：​編輯戰（[編輯=僅允許管理員]（期限至 2025年7月23日 (三) 04:37 (UTC)）[移動=僅允許管理員]（期限至 2025年7月23日 (三) 04:37 (UTC)））&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039; 南茗民主共和國&#039;&#039;&#039;，通稱&#039;&#039;&#039;南茗&#039;&#039;&#039;，是位於台灣的微國家。&lt;br /&gt;
&lt;br /&gt;
{{Infobox country||name=南茗民主共和國|image_symbol=檔案:南茗民主共和國國徽.png|image_flag=檔案:南茗民主共和國.jpg|anthem=[[南茗之歌.ogg]]&amp;lt;br&amp;gt;|flag_type=國旗|symbol_type=國徽|languages_type=官方語言|languages=華語|established_event1=建國|established_date1=2024年11月17日&lt;br /&gt;
|time_zone=UTC+8|leader_title1=總統|leader_name1=[[江羽萱]]|leader_title4=立法院院長|leader_name4=韓國瑜|capital=台北市|loctext=虛擬世界|largest_city=台北市|population_census=25,453,693人（聲稱）|currency=南圓|currency_code=|date_format=yyyy-mm-dd|calendar_type=公曆|drives_on=靠右行駛|calling_code=|legislature=立法院|population_census_year=2025年1月30日|HDI=0.902|national_motto=自由的國度，才是人嚮往的|government_type=民主共和制 多黨制 和平主義|religion=宗教自由}}&lt;br /&gt;
&lt;br /&gt;
== 國名 ==&lt;br /&gt;
=== 國名 ===&lt;br /&gt;
「南茗」的名稱來自「南方」與「茗茶」，象徵著該國的文化與歷史。&lt;br /&gt;
&lt;br /&gt;
=== 國歌 ===&lt;br /&gt;
{{Main|南茗之歌}}&lt;br /&gt;
《南茗之歌》是該國的國歌，旋律改編自[[烏克蘭蘇維埃社會主義共和國]]國歌，象徵國家精神與團結。&lt;br /&gt;
&lt;br /&gt;
== 歷史 ==&lt;br /&gt;
南茗民主共和國於2024年成立，目標是建立一個虛擬但有完善制度的國家。主要歷史事件包括：&lt;br /&gt;
* 2024年11月17日 - 國家成立&lt;br /&gt;
* 2025年01月06日 - M7.0地震 （架）&lt;br /&gt;
* 2025年01月12日 - 基隆戰役 （架）&lt;br /&gt;
* 2025年01月15日 - 南61快速道路通車（架）&lt;br /&gt;
* 2025年01月22日 - 領土擴至台灣島 （架）&lt;br /&gt;
* 2025年03月05日-03月09日 - 超大豪雨 全國停班課 （架）&lt;br /&gt;
&lt;br /&gt;
== 地理與行政區劃 ==&lt;br /&gt;
=== 領土 ===&lt;br /&gt;
台灣島、澎湖列島、金門島、馬祖列島（聲稱）&lt;br /&gt;
&lt;br /&gt;
=== 行政區劃 ===&lt;br /&gt;
* 首都：台北市&lt;br /&gt;
* 直轄市：桃嶺市 台中市 台南市 高雄市&lt;br /&gt;
* 省轄市：中壢市&lt;br /&gt;
* 縣：竹原縣 昌禾縣 嶺南縣 義雲縣 屏南縣 蘭陽縣 花蓮縣 台東縣 澎灣縣 江月金川縣&lt;br /&gt;
* 特區：三義特區 南台特區 蘭嶼特區&lt;br /&gt;
&lt;br /&gt;
== 政治與政府 == &lt;br /&gt;
南茗民主共和國為[[民主共和制]]，政治體制如下：&lt;br /&gt;
* 總統：&lt;br /&gt;
[[江羽萱]]（第一、二、五任)-[[南茗社會民主黨]]&lt;br /&gt;
&lt;br /&gt;
[[黃國蔥]](第三任)-[[南茗民眾黨]]&lt;br /&gt;
&lt;br /&gt;
[[吳杭]](第四任)-[[南茗社會民主黨]]&lt;br /&gt;
* 主要政黨：&lt;br /&gt;
  * [[南茗社會民主黨]]（執政黨）&lt;br /&gt;
  * [[南茗基進黨]]&lt;br /&gt;
  * [[南茗共產黨]]&lt;br /&gt;
  * [[人權聯盟]]&lt;br /&gt;
  * [[國家無政府保護聯盟]]&lt;br /&gt;
  * [[新黨]]&lt;br /&gt;
  * [[三民主義國民促進黨]]&lt;br /&gt;
  * [[津聯聯合向前黨]]&lt;br /&gt;
  * [[南茗青年黨]]&lt;br /&gt;
  * [[南茗民眾自由黨]]&lt;br /&gt;
&lt;br /&gt;
== 經濟 ==&lt;br /&gt;
南茗民主共和國擁有獨立的貨幣[[南圓]] (ℳ)並以科技產業為經濟支柱。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 南茗經濟概況&lt;br /&gt;
|-&lt;br /&gt;
! 項目 !! 數據&lt;br /&gt;
|-&lt;br /&gt;
| GDP || 78萬南圓/年&lt;br /&gt;
|-&lt;br /&gt;
| 主要產業 || [[南茗積體電路製造股份有限公司]]（半導體產業）&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 文化 ==&lt;br /&gt;
南茗民主共和國擁有獨特的文化特色，並注重傳統與創新並存。&lt;br /&gt;
&lt;br /&gt;
=== 語言 ===&lt;br /&gt;
官方語言為[[中文（繁體）]]，通用語言為[[英語]]及[[韓文]]&lt;br /&gt;
&lt;br /&gt;
=== 主要企業 ===&lt;br /&gt;
* [[南茗積體電路製造股份有限公司]]（NSMC）&lt;br /&gt;
* [[南茗HYBE娛樂]]&lt;br /&gt;
*[[南茗捷運公司]]&lt;br /&gt;
*[[南茗國家鋼鐵]]&lt;br /&gt;
*[[天空集團]]&lt;br /&gt;
*[[初始化科技]]&lt;br /&gt;
&lt;br /&gt;
== 外交 ==&lt;br /&gt;
&lt;br /&gt;
=== 邦交國 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; |邦交國列表&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;順序&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;國旗&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;國名&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;建立外交關係時間&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;外交銜級&#039;&#039;&#039;&lt;br /&gt;
!詳見 / 備註&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 國際組織 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable mw-collapsible&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; |參與的國際組織列表&lt;br /&gt;
|-&lt;br /&gt;
!順序&lt;br /&gt;
!旗幟&lt;br /&gt;
!組織名&lt;br /&gt;
!組織內身分&lt;br /&gt;
!加入時間&lt;br /&gt;
!備註&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[檔案:Flag_of_MU.svg|無框|50x50像素]]&lt;br /&gt;
|[[微國家聯盟]]&lt;br /&gt;
|成員國&lt;br /&gt;
|2025.3.22&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[檔案:Flag_of_FUMO.svg|無框|50x50像素]]&lt;br /&gt;
|[[聯合微國家組織]]&lt;br /&gt;
|觀察國&lt;br /&gt;
|2025.4.12&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 分類 ==&lt;br /&gt;
&lt;br /&gt;
{{聯合微國家組織}}&lt;br /&gt;
[[Category:南茗民主共和國]]&lt;br /&gt;
[[分類:國家列表]]&lt;br /&gt;
[[分類:架空國家列表]]&lt;br /&gt;
[[分類:2024年建立的國家或政權]]&lt;br /&gt;
[[分類:台灣北部地區國家]]&lt;br /&gt;
[[分類:聯合微國家組織觀察國]]&lt;br /&gt;
[[分類:共和國]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E4%BD%BF%E7%94%A8%E8%80%85%E8%A8%8E%E8%AB%96:%E5%B9%B3%E5%9F%8E%E4%BC%8A&amp;diff=32988</id>
		<title>使用者討論:平城伊</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E4%BD%BF%E7%94%A8%E8%80%85%E8%A8%8E%E8%AB%96:%E5%B9%B3%E5%9F%8E%E4%BC%8A&amp;diff=32988"/>
		<updated>2024-10-15T23:41:13Z</updated>

		<summary type="html">&lt;p&gt;Admin：​取消Admin（留言）的編輯，改回LarryChou的先前版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 關於閣下近日之編輯行為 ==&lt;br /&gt;
&lt;br /&gt;
閣下貴安。&amp;lt;br&amp;gt;&lt;br /&gt;
近日閣下在微國家百科作出了一連串編輯，在此亦感謝閣下使用本百科。&amp;lt;br&amp;gt;&lt;br /&gt;
然而閣下部份編輯行為有部分問題，如使用可能使用戶感疑惑之頁面標題，或擅自回退管理員之編輯。&amp;lt;br&amp;gt;&lt;br /&gt;
是以請注意。 [[用戶:NoahLDW|&#039;&#039;&#039;&amp;lt;font color=&amp;quot;#115C31&amp;quot;&amp;gt;Noah Lee De-yong&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt; | &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;#01A8EC&amp;quot;&amp;gt;微國家百科技術支援&amp;lt;/font&amp;gt;]] 2024年10月6日 (日) 22:47 (CST)&lt;br /&gt;
&lt;br /&gt;
== 2024年10月 ==&lt;br /&gt;
&lt;br /&gt;
請勿任意移除提交快速刪除模板（如同閣下在[[平戸中平港獨及中華民國自由盟]]的編輯），這種行為有可能被視為破壞，並可能讓閣下被封禁，請注意。&amp;lt;br/&amp;gt; [[使用者:LarryChou|LarryChou]]（[[使用者討論:LarryChou|留言]]） 2024年10月12日 (六) 17:50 (CST)&lt;br /&gt;
&lt;br /&gt;
== 封禁通知 ==&lt;br /&gt;
&lt;br /&gt;
由於閣下持續刪除其他編者之提請速刪模板（如閣下在[[平戸中平港獨及中華民國自由盟]]的編輯），且管理員已經勸告多次仍然屢犯，因此認定其為擾亂性編輯，封鎖一週。&amp;lt;br/&amp;gt; [[使用者:LarryChou|LarryChou]]（[[使用者討論:LarryChou|留言]]） 2024年10月15日 (二) 18:02 (CST)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E4%BD%BF%E7%94%A8%E8%80%85%E8%A8%8E%E8%AB%96:%E5%B9%B3%E5%9F%8E%E4%BC%8A&amp;diff=32987</id>
		<title>使用者討論:平城伊</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E4%BD%BF%E7%94%A8%E8%80%85%E8%A8%8E%E8%AB%96:%E5%B9%B3%E5%9F%8E%E4%BC%8A&amp;diff=32987"/>
		<updated>2024-10-15T23:39:13Z</updated>

		<summary type="html">&lt;p&gt;Admin：​取消LarryChou（留言）的編輯，改回Noah LDW的先前版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 關於閣下近日之編輯行為 ==&lt;br /&gt;
&lt;br /&gt;
閣下貴安。&amp;lt;br&amp;gt;&lt;br /&gt;
近日閣下在微國家百科作出了一連串編輯，在此亦感謝閣下使用本百科。&amp;lt;br&amp;gt;&lt;br /&gt;
然而閣下部份編輯行為有部分問題，如使用可能使用戶感疑惑之頁面標題，或擅自回退管理員之編輯。&amp;lt;br&amp;gt;&lt;br /&gt;
是以請注意。 [[用戶:NoahLDW|&#039;&#039;&#039;&amp;lt;font color=&amp;quot;#115C31&amp;quot;&amp;gt;Noah Lee De-yong&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt; | &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;#01A8EC&amp;quot;&amp;gt;微國家百科技術支援&amp;lt;/font&amp;gt;]] 2024年10月6日 (日) 22:47 (CST)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%98%9F%E6%96%AF%E7%B6%AD%E5%85%B1%E5%92%8C%E5%9C%8B&amp;diff=32937</id>
		<title>星斯維共和國</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%98%9F%E6%96%AF%E7%B6%AD%E5%85%B1%E5%92%8C%E5%9C%8B&amp;diff=32937"/>
		<updated>2024-10-14T04:07:29Z</updated>

		<summary type="html">&lt;p&gt;Admin：​取消Xuzsgxu 2010（留言）的編輯，改回Bontojiping的先前版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;星斯維共和國（英語：Republic of Singsvi)，通稱&#039;&#039;&#039;星斯維&#039;&#039;&#039;，別稱&#039;&#039;&#039;新思維&#039;&#039;&#039;、&#039;&#039;&#039;星司韋&#039;&#039;&#039;、&#039;&#039;&#039;星司維&#039;&#039;&#039;、&#039;&#039;&#039;星洲&#039;&#039;&#039;、&#039;&#039;&#039;星國&#039;&#039;&#039;，是位於東亞的國家，面積為964萬平方公里。&lt;br /&gt;
&lt;br /&gt;
2011年成立自治邦，2023年9月以獨立城邦的形式加入第六聯邦，稱為星斯維州（簡稱星州）。但在2024年9月15日，第六聯邦國會以175票贊成、0票反對，同意將星斯維驅逐出第六聯邦，使星斯維獨立建國，成立星斯維共和國。&lt;br /&gt;
&lt;br /&gt;
{{Infobox country|name=星斯維共和國|name_en=Repubilc of Singsvi|image_symbol=星斯維共和國國徽.png|image_flag=453924514 805729345068021 179915949172240085 n.jpg|motto=前進吧!星斯維|anthem=《前進吧!星斯維》|largest_city=[[北京]]|capital=[[下海市]]|admin_center=下海市|official_languages=華語 英語 閩南語|common_languages=華語 英語 星斯維語 各地方方言|government_type=單一民主制&lt;br /&gt;
共和立憲制&lt;br /&gt;
議會共和制&lt;br /&gt;
一黨優勢制|leader_title1=總統|leader_name1=[[許育誠]]|date_start=09月15日|year_start=2024年|population_estimate=1523080819人|area_km2=9640819|official_website=https://singsvi.mystrikingly.com/}}&lt;br /&gt;
&lt;br /&gt;
== 行政區劃 ==&lt;br /&gt;
星斯維土地面積僅0.000781123938平方公里，以符合都市規劃的方式將全國劃分為四個社區（行政區），北區社區，中區社區，南區社區，東區社區，，由相應的社區發展理事會（簡稱社理會）管理，其首長原為星斯維國會議員兼任之主席，2024年起首長改制為專職稱市長，市長級別相當於部長。在星斯維，市長指的就是社區發展理事會的最高行政首長。這四社區進一步分為選區。&lt;br /&gt;
&lt;br /&gt;
== 地理 ==&lt;br /&gt;
星斯維是一個內陸國，地勢起伏和緩。&lt;br /&gt;
&lt;br /&gt;
星斯維未採行夏時制，星斯維標準時間為UTC+8&lt;br /&gt;
&lt;br /&gt;
== 文化 ==&lt;br /&gt;
&#039;&#039;&#039;人口&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
到2023年9月為止，星斯維的常住人口為72人。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;語言&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
星斯維是一個多語言的國家，其官方語言包括華語、英語、閩南語。&lt;br /&gt;
&lt;br /&gt;
== 宗教 ==&lt;br /&gt;
星斯維是一個多元民族、多元文化的移民社會，也因此匯集了世界上多種宗教。&lt;br /&gt;
&lt;br /&gt;
海皮教為星斯維第一大宗教，其他宗教依人口多寡分別為凱恩教和塔教。據星斯維官方2024年的統計結果，從2010年至2020年間，無宗教佔比增長了2.0%，海皮教佔比增長了5.7%，凱恩教佔比增長了0.8%，塔教佔比增長了1.8%。&lt;br /&gt;
&lt;br /&gt;
== 教育 ==&lt;br /&gt;
星斯維很重視教育，教育部是僅次於國防部的第二大財政開支部門，星斯維奉行精英教育，教育制度類似美國式制度，除了各語文類科外，均以華語為媒介語言。一般修讀完十到十一年的中小學後能選擇到初級學院、高中或理工學院就讀，前兩者半數以上能升上國內大學。星斯維有2所理工學院與1所大專學府，其中星斯維國立大學與星斯維理工大學都是星斯維頗具盛名的學府。由於採用美國式教育系統，因此不少學生亦選擇前往美國升學。&lt;br /&gt;
&lt;br /&gt;
== 軍事 ==&lt;br /&gt;
星斯維擁有堪稱私人國家科技最先進的軍隊，軍隊包括陸軍、海軍、空軍，軍隊也被認為是維持城市獨立的保證。而警察部隊及民防部隊（消防救援及救護服務）也屬兵役制。&lt;br /&gt;
&lt;br /&gt;
星斯維的軍人稱為[[星斯維武裝部隊]]，[[星斯維武裝部隊]]分為三類，包括：正規軍人，現役軍人以及戰備軍人。正規軍人指的是職業軍人，現役軍人指的是十六歲到二十餘歲不等為了保護國家而強制服兩年左右兵役的軍人，戰備軍人指的是從現役中役滿退伍，進入十年回營訓練周期並能夠在一定時間內動員起來的後備軍人。星斯維法律規定年滿十八歲的男性公民或第二代永久居民必須服兵役2年，拒絕服役屬違法。服役前須接受為期九個月的基礎軍事訓練課程，完成後會派往軍隊或民防部隊。星斯維軍隊分陸、海、空三軍，具體數量未知，但是一般認為整體數量有超過10人以上，但是正規軍人和現役軍人總數應該超過20人。&lt;br /&gt;
&lt;br /&gt;
目前星斯維武裝部隊含有長城火箭&amp;amp;快舟火箭以及捷安一型飛彈。&lt;br /&gt;
&lt;br /&gt;
== 公共假日 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!公曆日期&lt;br /&gt;
!&lt;br /&gt;
!名稱&lt;br /&gt;
!來由&lt;br /&gt;
|-&lt;br /&gt;
|1月1日&lt;br /&gt;
|&lt;br /&gt;
|元旦&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|農曆十二月廿九~正月初五&lt;br /&gt;
|農曆&lt;br /&gt;
|華人新年&lt;br /&gt;
|春節&lt;br /&gt;
|-&lt;br /&gt;
|9月15日&lt;br /&gt;
|&lt;br /&gt;
|國慶日&lt;br /&gt;
|獨立&lt;br /&gt;
|-&lt;br /&gt;
|12月24日&lt;br /&gt;
|&lt;br /&gt;
|海誕節&lt;br /&gt;
|海皮教教主誕辰&lt;br /&gt;
|}&lt;br /&gt;
==其他連結==&lt;br /&gt;
https://singsvi.mystrikingly.com/&lt;br /&gt;
[[Category:國家列表]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E7%9B%A7%E7%88%BE%E6%8F%90%E6%96%AF%E5%85%B1%E5%92%8C%E5%9C%8B%E4%BA%8B%E4%BB%B6&amp;diff=32704</id>
		<title>盧爾提斯共和國事件</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E7%9B%A7%E7%88%BE%E6%8F%90%E6%96%AF%E5%85%B1%E5%92%8C%E5%9C%8B%E4%BA%8B%E4%BB%B6&amp;diff=32704"/>
		<updated>2024-10-06T16:52:29Z</updated>

		<summary type="html">&lt;p&gt;Admin：​取消Admin（留言）的編輯，改回友愛共融會大佬代表的先前版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox military conflict&lt;br /&gt;
|width=&lt;br /&gt;
|conflict=盧爾提斯共和國事件&amp;lt;br /&amp;gt;The Pseudo-Lurtis Republic Incident&lt;br /&gt;
|partof=&lt;br /&gt;
|image=&lt;br /&gt;
|image-hans=[[檔案:盧爾提斯帝國外交文書 (4).png|縮圖]]&lt;br /&gt;
|image-hant=&lt;br /&gt;
|image_size=&lt;br /&gt;
|caption=[[盧爾提斯帝國]]與[[盧爾提斯自治邦]]的聯合公報&lt;br /&gt;
|date= 2024年09月19日~2024年10月03日&lt;br /&gt;
|place= [[盧爾提斯帝國]]、[[盧爾提斯共和國]]&lt;br /&gt;
|territory= &lt;br /&gt;
|result= 經雙方高層談判後，[[盧爾提斯共和國]]併入[[盧爾提斯帝國]]成為[[盧爾提斯帝國]]屬[[盧爾提斯共和自治領]]&lt;br /&gt;
|combatant1= [[File:盧爾提斯帝國國旗.png|29px]] [[盧爾提斯帝國]]&amp;lt;br&amp;gt;[[File:紅花坂國旗.png|29px]][[紅花坂民主共和國]] &amp;lt;br&amp;gt; [[File:盧米涅企業共和國國旗2.png|29px]][[盧米涅企業共和國]]  &amp;lt;br&amp;gt;[[File:國旗2.png|29px]] [[里塔多斯坦尼亞聯邦共和國]] &amp;lt;br&amp;gt;[[File:高加西亞新國旗.png|29px]][[高加西亞人民民主共和國]] &amp;lt;br&amp;gt; [[File:萊其亞國旗.jpg|29px]] [[萊齊亞皇冠領地及立窩尼亞伏林領地聯邦]]&amp;lt;br&amp;gt; [[File:Republic of Sardolia.png|29px]] [[薩爾多尼亞共和國|薩爾多利亞共和國]]&amp;lt;br&amp;gt; [[File:HuacheshaFlag.png|29px]] [[華辰沙光顧國]]&amp;lt;br&amp;gt; [[File:納爾斯共和國國旗.png|29px]] [[納爾斯共和國]]&amp;lt;br&amp;gt; [[File:暗影聯邦國旗.jpg|29px]] [[大暗影聯邦帝國]]&amp;lt;br&amp;gt; [[File:拉納卡共和國國旗.png|29px]] [[拉納卡共和國]]&amp;lt;br&amp;gt; [[File:大延帝國國旗.png|29px]] [[大延帝國]]&amp;lt;br&amp;gt; [[File:Flag of Great Shun.png|29px]] [[大舜帝國]]&amp;lt;br&amp;gt; [[File:北平民主共和國國旗.png|29px]] [[納雷茲民主共和國]]&amp;lt;br&amp;gt; [[File:天華人民共和國國旗.png|29px]] [[天華人民共和國]]&amp;lt;br&amp;gt; [[File:卡布雷勒爾紅城旗幟.png|29px]] [[卡布雷勒爾紅城]]&lt;br /&gt;
|combatant2= [[File:Fdcb590f1872ed45.png|29px]] [[盧爾提斯共和國]]&amp;lt;br&amp;gt;[[File:Icon.png|29px]] [[友愛共融會]]&lt;br /&gt;
|combatant3=&lt;br /&gt;
|commander1= [[File:盧爾提斯帝國國旗.png|29px]] [[春時]]&amp;lt;br&amp;gt;[[File:盧爾提斯帝國國旗.png|29px]] [[白太]]&amp;lt;br&amp;gt; [[File:紅花坂國旗.png|29px]][[觀辰恩]]&amp;lt;br&amp;gt;[[File:盧米涅企業共和國國旗2.png|29px]][[成田路/Naritaroad|成田路]]&amp;lt;br&amp;gt;[[File:盧米涅企業共和國國旗2.png|29px]][[待兼嘯天]] &amp;lt;br&amp;gt;[[File:國旗2.png|29px]] [[里見光鑽]] &amp;lt;br&amp;gt;[[File:高加西亞新國旗.png|29px]][[Radovan Izmetgovič]]&amp;lt;br&amp;gt;[[File:萊其亞國旗.jpg|29px]] [[Civicliteracy]]&amp;lt;br&amp;gt; [[File:Republic of Sardolia.png|29px]] [[雷霆屁哥]]&amp;lt;br&amp;gt; [[File:HuacheshaFlag.png|29px]] [[黄&#039;白玻]]&amp;lt;br&amp;gt; [[File:納爾斯共和國國旗.png|29px]] [[納爾斯共和國]]&amp;lt;br&amp;gt; [[File:暗影聯邦國旗.jpg|29px]] [[大暗影聯邦帝國]]&amp;lt;br&amp;gt; [[File:拉納卡共和國國旗.png|29px]] [[Kanada R&#039;Larnaca]]&amp;lt;br&amp;gt; [[File:大延帝國國旗.png|29px]] [[林新政]]&amp;lt;br&amp;gt; [[File:Flag of Great Shun.png|29px]] [[陳易]]&amp;lt;br&amp;gt; [[File:北平民主共和國國旗.png|29px]] [[和平路]]&amp;lt;br&amp;gt; [[File:天華人民共和國國旗.png|29px]] [[Tonerd]]&amp;lt;br&amp;gt; [[File:卡布雷勒爾紅城旗幟.png|29px]] [[詹姆士徐]]&lt;br /&gt;
|commander2=[[File:Fdcb590f1872ed45.png|29px]][[藍平哥]]&amp;lt;br&amp;gt;[[File:Icon.png|29px]] [[928waynee]]&lt;br /&gt;
|commander3=&lt;br /&gt;
|strength1=&lt;br /&gt;
|strength2=&lt;br /&gt;
|strength3=&lt;br /&gt;
|polstrength1=&lt;br /&gt;
|polstrength2=&lt;br /&gt;
|milstrength1= &lt;br /&gt;
|milstrength2= &lt;br /&gt;
|milstrength3= &lt;br /&gt;
|casualties1=&lt;br /&gt;
|casualties2=&lt;br /&gt;
|casualties3=&lt;br /&gt;
|notes=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;盧爾提斯共和國事件&#039;&#039;&#039;(英文：&#039;&#039;&#039;The Pseudo-Lurtis Republic Incident&#039;&#039;&#039;)，為發生於盧爾提斯帝國和其分裂出的盧爾提斯共和國之間。作為歷史悠久的盧爾提斯王國的正統繼承者，盧爾提斯帝國在建立後，強調其合法統治權，並致力於延續王國的傳統與體制。然而，共和主義者在國內的反對聲音逐漸加強，最終成立了盧爾提斯共和國，意圖與帝國抗衡並挑戰帝國的正統性。&lt;br /&gt;
&lt;br /&gt;
= 衝突過程 =&lt;br /&gt;
共和國成立後，兩國之間的緊張局勢不斷升級。帝國認為共和國的成立是一種背離國家正統的行為，而共和國則宣稱其代表了國內的正統性。隨著衝突加劇，國際社會開始介入，呼籲雙方通過和平方式解決爭端。經過數天的外交斡旋，兩國最終進行了正式談判，達成和解。&lt;br /&gt;
&lt;br /&gt;
= 和解協議 =&lt;br /&gt;
和解協議最終確立了盧爾提斯共和國的「盧爾提斯自治邦」地位。根據協議，盧爾提斯共和國成為盧爾提斯帝國的自治邦，享有高度自治權。自治邦在行政、立法和司法方面擁有獨立權力，但中央政府保留在特殊情況下進行干預的權利。這一協議被視為兩國避免進一步對立的重要里程碑。&lt;br /&gt;
&lt;br /&gt;
= 各國反應 =&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:紅花坂國旗.png|無框|30x30像素]][[紅花坂民主共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;{{Main|紅花坂民主共和國於盧爾提斯共和國事件中發布之梗圖列表}}&lt;br /&gt;
我國堅決支持「盧爾提斯帝國」的主權合法性，並不承認所謂的「偽盧爾提斯共和國」非法政權。 我國也支持盧爾提斯帝國做出合理的行動捍衛國家主權及和平，並適時提供「盧爾提斯帝國」相關協助。 奉勸「偽盧爾提斯共和國」非法政權須停止盜用「盧爾提斯」的正統性，停止與恐怖組織的合作及滲透自身，並停止抹滅「盧提亞」人們的名譽之行徑。「 身為紅花坂民族國家，我國表示盧爾提斯共和國是偽政府，爾等謹代表紅花坂民族強烈支持盧爾提斯帝國是盧提亞民族正當政權」&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:盧米涅企業共和國國旗.png|無框|30x30像素]][[盧米涅企業共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;我國堅決支持「盧爾提斯帝國」的主權合法性，並不承認所謂的「偽盧爾提斯共和國」非法政權。&lt;br /&gt;
&lt;br /&gt;
我國也支持盧爾提斯帝國做出合理的行動捍衛國家主權及和平，並適時提供「盧爾提斯帝國」相關協助。奉勸「偽盧爾提斯共和國」非法政權須停止盜用「盧爾提斯」的正統性，停止與恐怖組織的合作及滲透自身，並停止抹滅「盧提亞」人們的名譽之行徑。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:高加西亞新國旗.png|無框|30x30像素]][[高加西亞人民民主共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;經全國人民革命委員會的討論後，正式宣佈撤銷「盧爾提斯共和國」的承認。並且認同現時盧爾提斯帝國和其正統大盧提亞統一思想。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:Republic of Sardolia.png|無框|30x30像素]][[薩爾多尼亞共和國|薩爾多利亞共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;對於「盧爾提斯共和國」當局拒絕正視盧爾提斯帝國為盧爾提斯王國的正統繼承人和其法統地位的行為，我的回答是：「盧爾提斯共和國」當局罔顧事實、顛倒黑白，公然拒絕正視盧爾提斯帝國為盧爾提斯王國的正統繼承人和其法統地位，性質極其惡劣，用心十分險惡，其根本目的是干涉盧爾提斯帝國的內政，破壞國際穩定和和平。我國政府和人民堅決反對「盧爾提斯共和國」當局拒絕正視盧爾提斯帝國為盧爾提斯王國的正統繼承人和其法統地位的行為。「盧爾提斯共和國」當局的一些政客和官員隔三差五就要出來叫一叫、跳一跳,攻擊抹黑盧爾提斯帝國，他們的拙劣表演充分暴露出其不可告人的險惡用心和政治企圖。 在國際社會大家庭裡，我國始終維護和平，促進發展，堅守道義，同各國攜手構建人類命運共同體。「盧爾提斯共和國」當局卻損人利己，唯我獨尊，背信棄義，在世界上大搞順我者昌，逆我者亡。「盧爾提斯共和國」當局任何企圖干預盧爾提斯帝國內政、阻礙該國發展的把戲都不會得逞，到頭來只會是枉費心機一場空。我們敦促「盧爾提斯共和國」當局立即停止此類挑釁行為，不要逆勢而動，避免損害地區的和平與安寧。我們敦促「盧爾提斯共和國」當局在國際問題上要謹言慎行，不要再發出錯誤信號，不要再挑撥慫恿。我國堅持走和平發展道路，積極為維護世界和平穩定貢獻智慧力量。 希望「盧爾提斯共和國」當局個別人士能以開放的心態和客觀公正的態度對待盧爾提斯帝國，不要無中生有。對於「盧爾提斯共和國」當局的錯誤做法，各方必將採取有力的措施堅決予以反制，堅定地維護盧爾提斯帝國的自身主權、安全、發展利益。這樣的「盧爾提斯共和國」當局，能和正統的盧爾提斯帝國相提並論嗎！ 我們奉勸「盧爾提斯共和國」當局有關媒體和人士尊重已經明確無誤的事實和真相，恪守起碼的職業道德操守，放下意識形態偏見，摘掉有色眼鏡，不要再做不負責任、徒增笑柄的事情。「盧爾提斯共和國」當局試圖挑撥盧爾提斯帝國和國際間的關係，極其陰險。我們要正告「盧爾提斯共和國」當局，任何外國政府和勢力都無權干預盧爾提斯帝國的內政。 我們希望「盧爾提斯共和國」當局認真對待各方的嚴正交涉和嚴正立場，立即停止不負責任的言行。還是我們經常說的那句話，請「盧爾提斯共和國」當局不要高估自己的造謠能力，也不要低估別人的判斷能力。謊言重複一千遍，依然還是謊言。我們敦促「盧爾提斯共和國」當局懸崖勒馬，否則必將自食惡果，勿謂言之不預也！對於「盧爾提斯共和國」當局干涉盧爾提斯帝國內政、損害該國利益的行徑，加入聯合聲明的各方必將採取有力措施堅決反制。任何人都不要低估盧爾提斯帝國維護國家主權、安全、發展利益的堅定決心。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:HuacheshaFlag.png|無框|30x30像素]][[華辰沙光顧國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;正如卢尔提斯帝国相关部门所言，我国坚决不承认所谓的“卢尔提斯共和国”政权。我国政府全力支持卢尔提斯帝国对伪“卢尔提斯共和国”采取的所有正义行动，严厉谴责伪“卢尔提斯共和国”窃取卢尔提斯国家名誉的行径。联邦外交部敦促伪“卢尔提斯共和国”放弃妄图窃取卢尔提斯帝国正统地位的无望企图，尽快结束这一闹剧。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:納爾斯共和國國旗.png|無框|30x30像素]][[納爾斯聯邦]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;正如盧爾提斯帝國有關部門所言，聯邦絕不會承認所謂的「盧爾提斯共和國」政權。聯邦政府堅決支持盧爾提斯帝國的一切針對偽「盧爾提斯共和國」採取的正義行動，並強烈譴責偽「盧爾提斯共和國」政權盜竊盧爾提斯國家名譽的舉動。聯邦外交部建議偽盧爾提斯共和國放棄其絕不會成功的盜竊盧爾提斯帝國正統地位的打算，並儘快終止這場由其主演的馬戲。願神的光輝終歸於盧爾提斯帝國。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:萊其亞國旗.jpg|無框|30x30像素]][[萊齊亞皇冠領地及立窩尼亞伏林領地聯邦|萊其亞聯邦]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;鑒於我國與盧爾提斯帝國建交,我國堅決支持友邦盧爾提斯帝國,簽署「合法統治權聯合聲明」並不承認「盧爾提斯共和國」偽政權,並支持盧&lt;br /&gt;
&lt;br /&gt;
爾提斯帝國為了正義對偽政權做出的一切行為。我國呼籲盧爾提斯共和國偽政權不要嘗試竊取盧&lt;br /&gt;
&lt;br /&gt;
提亞民族正統性,現在偽政權只是在一群霸佔著舊伺服器在歹戲拖棚的跳樑小丑罷了。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:國旗2.png|無框|30x30像素]][[里塔多斯坦尼亞聯邦共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;《我國與盧爾提斯帝國聯合聲明》 聯邦絕不承為共和國政府!!&lt;br /&gt;
&lt;br /&gt;
拉納卡共和國：&lt;br /&gt;
&lt;br /&gt;
我國僅承認盧爾提斯帝國為正統, 不承認所謂的 「盧爾提斯共和國」&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:Flag of Great Shun.png|無框|30x30像素]][[大舜帝國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;詔令奉天承運皇帝詔曰今所謂之盧爾提斯共和國宣告其為盧爾提斯之正統然朕相信我國國民及全世界之人類都清&lt;br /&gt;
&lt;br /&gt;
楚何為正統之盧爾提斯朕代表大舜帝國全體國民宣告將不承&lt;br /&gt;
&lt;br /&gt;
認所謂盧爾提斯共和國之合法性並堅決支持盧爾提斯帝國及&lt;br /&gt;
&lt;br /&gt;
其政府慶德元年八月三十日皇帝&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:北平民主共和國國旗.png|無框|30x30像素]][[納雷茲民主共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;我方只堅持帝國，而不支持共和國，堅持一爾。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:大延帝國國旗.png|無框|30x30像素]][[大延帝國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;多利僞政權宣告自己是正統，但我國絕不承認其正統性，我國在這件事之後決定支持春時政權的正統性，並且加強外交貿易，以保護盧提亞民族以及盧爾提斯全體上下的老百姓！&amp;lt;/blockquote&amp;gt;[[檔案:外交公告 的複本 (20).png|縮圖]]&lt;br /&gt;
&lt;br /&gt;
= 影響 =&lt;br /&gt;
盧爾提斯共和國事件的和平解決對該地區乃至國際微國家社群產生了深遠的影響。這一事件表明，通過和平對話和外交途徑可以有效解決內部的政治分歧。盧爾提斯帝國通過與共和國達成和解，展示了其包容多元政治觀點的能力，同時保護了自身的主權與正統性。這一事件也進一步鞏固了[[盧爾提斯帝國]]在國際舞台上的地位。&lt;br /&gt;
[[分類:事件列表]]&lt;br /&gt;
[[分類:盧提亞]]&lt;br /&gt;
[[分類:盧爾提斯帝國]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E7%9B%A7%E7%88%BE%E6%8F%90%E6%96%AF%E5%85%B1%E5%92%8C%E5%9C%8B%E4%BA%8B%E4%BB%B6&amp;diff=32703</id>
		<title>盧爾提斯共和國事件</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E7%9B%A7%E7%88%BE%E6%8F%90%E6%96%AF%E5%85%B1%E5%92%8C%E5%9C%8B%E4%BA%8B%E4%BB%B6&amp;diff=32703"/>
		<updated>2024-10-06T16:51:39Z</updated>

		<summary type="html">&lt;p&gt;Admin：​取消友愛共融會大佬代表（留言）的編輯，改回Naritaroad的先前版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox military conflict&lt;br /&gt;
|width=&lt;br /&gt;
|conflict=盧爾提斯共和國事件&amp;lt;br /&amp;gt;The Pseudo-Lurtis Republic Incident&lt;br /&gt;
|partof=&lt;br /&gt;
|image=&lt;br /&gt;
|image-hans=[[檔案:盧爾提斯帝國外交文書 (4).png|縮圖]]&lt;br /&gt;
|image-hant=&lt;br /&gt;
|image_size=&lt;br /&gt;
|caption=[[盧爾提斯帝國]]與[[盧爾提斯自治邦]]的聯合公報&lt;br /&gt;
|date= 2024年09月19日~2024年10月03日&lt;br /&gt;
|place= [[盧爾提斯帝國]]、[[盧爾提斯共和國]]&lt;br /&gt;
|territory= &lt;br /&gt;
|result= 經雙方高層談判後，[[盧爾提斯共和國]]併入[[盧爾提斯帝國]]成為[[盧爾提斯帝國]]屬[[盧爾提斯共和自治領]]&lt;br /&gt;
|combatant1= [[File:盧爾提斯帝國國旗.png|29px]] [[盧爾提斯帝國]]&amp;lt;br&amp;gt;[[File:紅花坂國旗.png|29px]][[紅花坂民主共和國]] &amp;lt;br&amp;gt; [[File:盧米涅企業共和國國旗2.png|29px]][[盧米涅企業共和國]]  &amp;lt;br&amp;gt;[[File:國旗2.png|29px]] [[里塔多斯坦尼亞聯邦共和國]] &amp;lt;br&amp;gt;[[File:高加西亞新國旗.png|29px]][[高加西亞人民民主共和國]] &amp;lt;br&amp;gt; [[File:萊其亞國旗.jpg|29px]] [[萊齊亞皇冠領地及立窩尼亞伏林領地聯邦]]&amp;lt;br&amp;gt; [[File:Republic of Sardolia.png|29px]] [[薩爾多尼亞共和國|薩爾多利亞共和國]]&amp;lt;br&amp;gt; [[File:HuacheshaFlag.png|29px]] [[華辰沙光顧國]]&amp;lt;br&amp;gt; [[File:納爾斯共和國國旗.png|29px]] [[納爾斯共和國]]&amp;lt;br&amp;gt; [[File:暗影聯邦國旗.jpg|29px]] [[大暗影聯邦帝國]]&amp;lt;br&amp;gt; [[File:拉納卡共和國國旗.png|29px]] [[拉納卡共和國]]&amp;lt;br&amp;gt; [[File:大延帝國國旗.png|29px]] [[大延帝國]]&amp;lt;br&amp;gt; [[File:Flag of Great Shun.png|29px]] [[大舜帝國]]&amp;lt;br&amp;gt; [[File:北平民主共和國國旗.png|29px]] [[納雷茲民主共和國]]&amp;lt;br&amp;gt; [[File:天華人民共和國國旗.png|29px]] [[天華人民共和國]]&amp;lt;br&amp;gt; [[File:卡布雷勒爾紅城旗幟.png|29px]] [[卡布雷勒爾紅城]]&lt;br /&gt;
|combatant2= [[File:Fdcb590f1872ed45.png|29px]] [[盧爾提斯共和國]]&amp;lt;br&amp;gt;[[File:友愛共榮會標誌.png|29px]] [[友愛共融會]]&lt;br /&gt;
|combatant3=&lt;br /&gt;
|commander1= [[File:盧爾提斯帝國國旗.png|29px]] [[春時]]&amp;lt;br&amp;gt;[[File:盧爾提斯帝國國旗.png|29px]] [[白太]]&amp;lt;br&amp;gt; [[File:紅花坂國旗.png|29px]][[觀辰恩]]&amp;lt;br&amp;gt;[[File:盧米涅企業共和國國旗2.png|29px]][[成田路/Naritaroad|成田路]]&amp;lt;br&amp;gt;[[File:盧米涅企業共和國國旗2.png|29px]][[待兼嘯天]] &amp;lt;br&amp;gt;[[File:國旗2.png|29px]] [[里見光鑽]] &amp;lt;br&amp;gt;[[File:高加西亞新國旗.png|29px]][[Radovan Izmetgovič]]&amp;lt;br&amp;gt;[[File:萊其亞國旗.jpg|29px]] [[Civicliteracy]]&amp;lt;br&amp;gt; [[File:Republic of Sardolia.png|29px]] [[雷霆屁哥]]&amp;lt;br&amp;gt; [[File:HuacheshaFlag.png|29px]] [[黄&#039;白玻]]&amp;lt;br&amp;gt; [[File:納爾斯共和國國旗.png|29px]] [[納爾斯共和國]]&amp;lt;br&amp;gt; [[File:暗影聯邦國旗.jpg|29px]] [[大暗影聯邦帝國]]&amp;lt;br&amp;gt; [[File:拉納卡共和國國旗.png|29px]] [[Kanada R&#039;Larnaca]]&amp;lt;br&amp;gt; [[File:大延帝國國旗.png|29px]] [[林新政]]&amp;lt;br&amp;gt; [[File:Flag of Great Shun.png|29px]] [[陳易]]&amp;lt;br&amp;gt; [[File:北平民主共和國國旗.png|29px]] [[和平路]]&amp;lt;br&amp;gt; [[File:天華人民共和國國旗.png|29px]] [[Tonerd]]&amp;lt;br&amp;gt; [[File:卡布雷勒爾紅城旗幟.png|29px]] [[詹姆士徐]]&lt;br /&gt;
|commander2=[[File:Fdcb590f1872ed45.png|29px]][[藍平哥]]&amp;lt;br&amp;gt;[[File:友愛共榮會標誌.png|29px]] [[928waynee]]&lt;br /&gt;
|commander3=&lt;br /&gt;
|strength1=&lt;br /&gt;
|strength2=&lt;br /&gt;
|strength3=&lt;br /&gt;
|polstrength1=&lt;br /&gt;
|polstrength2=&lt;br /&gt;
|milstrength1= &lt;br /&gt;
|milstrength2= &lt;br /&gt;
|milstrength3= &lt;br /&gt;
|casualties1=&lt;br /&gt;
|casualties2=&lt;br /&gt;
|casualties3=&lt;br /&gt;
|notes=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;盧爾提斯共和國事件&#039;&#039;&#039;(英文：&#039;&#039;&#039;The Pseudo-Lurtis Republic Incident&#039;&#039;&#039;)，為發生於盧爾提斯帝國和其分裂出的盧爾提斯共和國之間。作為歷史悠久的盧爾提斯王國的正統繼承者，盧爾提斯帝國在建立後，強調其合法統治權，並致力於延續王國的傳統與體制。然而，共和主義者在國內的反對聲音逐漸加強，最終成立了盧爾提斯共和國，意圖與帝國抗衡並挑戰帝國的正統性。&lt;br /&gt;
&lt;br /&gt;
= 衝突過程 =&lt;br /&gt;
共和國成立後，兩國之間的緊張局勢不斷升級。帝國認為共和國的成立是一種背離國家正統的行為，而共和國則宣稱其代表了國內的正統性。隨著衝突加劇，國際社會開始介入，呼籲雙方通過和平方式解決爭端。經過數天的外交斡旋，兩國最終進行了正式談判，達成和解。&lt;br /&gt;
&lt;br /&gt;
= 和解協議 =&lt;br /&gt;
和解協議最終確立了盧爾提斯共和國的「盧爾提斯自治邦」地位。根據協議，盧爾提斯共和國成為盧爾提斯帝國的自治邦，享有高度自治權。自治邦在行政、立法和司法方面擁有獨立權力，但中央政府保留在特殊情況下進行干預的權利。這一協議被視為兩國避免進一步對立的重要里程碑。&lt;br /&gt;
&lt;br /&gt;
= 各國反應 =&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:紅花坂國旗.png|無框|30x30像素]][[紅花坂民主共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;{{Main|紅花坂民主共和國於盧爾提斯共和國事件中發布之梗圖列表}}&lt;br /&gt;
我國堅決支持「盧爾提斯帝國」的主權合法性，並不承認所謂的「偽盧爾提斯共和國」非法政權。 我國也支持盧爾提斯帝國做出合理的行動捍衛國家主權及和平，並適時提供「盧爾提斯帝國」相關協助。 奉勸「偽盧爾提斯共和國」非法政權須停止盜用「盧爾提斯」的正統性，停止與恐怖組織的合作及滲透自身，並停止抹滅「盧提亞」人們的名譽之行徑。「 身為紅花坂民族國家，我國表示盧爾提斯共和國是偽政府，爾等謹代表紅花坂民族強烈支持盧爾提斯帝國是盧提亞民族正當政權」&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:盧米涅企業共和國國旗.png|無框|30x30像素]][[盧米涅企業共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;我國堅決支持「盧爾提斯帝國」的主權合法性，並不承認所謂的「偽盧爾提斯共和國」非法政權。&lt;br /&gt;
&lt;br /&gt;
我國也支持盧爾提斯帝國做出合理的行動捍衛國家主權及和平，並適時提供「盧爾提斯帝國」相關協助。奉勸「偽盧爾提斯共和國」非法政權須停止盜用「盧爾提斯」的正統性，停止與恐怖組織的合作及滲透自身，並停止抹滅「盧提亞」人們的名譽之行徑。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:高加西亞新國旗.png|無框|30x30像素]][[高加西亞人民民主共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;經全國人民革命委員會的討論後，正式宣佈撤銷「盧爾提斯共和國」的承認。並且認同現時盧爾提斯帝國和其正統大盧提亞統一思想。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:Republic of Sardolia.png|無框|30x30像素]][[薩爾多尼亞共和國|薩爾多利亞共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;對於「盧爾提斯共和國」當局拒絕正視盧爾提斯帝國為盧爾提斯王國的正統繼承人和其法統地位的行為，我的回答是：「盧爾提斯共和國」當局罔顧事實、顛倒黑白，公然拒絕正視盧爾提斯帝國為盧爾提斯王國的正統繼承人和其法統地位，性質極其惡劣，用心十分險惡，其根本目的是干涉盧爾提斯帝國的內政，破壞國際穩定和和平。我國政府和人民堅決反對「盧爾提斯共和國」當局拒絕正視盧爾提斯帝國為盧爾提斯王國的正統繼承人和其法統地位的行為。「盧爾提斯共和國」當局的一些政客和官員隔三差五就要出來叫一叫、跳一跳,攻擊抹黑盧爾提斯帝國，他們的拙劣表演充分暴露出其不可告人的險惡用心和政治企圖。 在國際社會大家庭裡，我國始終維護和平，促進發展，堅守道義，同各國攜手構建人類命運共同體。「盧爾提斯共和國」當局卻損人利己，唯我獨尊，背信棄義，在世界上大搞順我者昌，逆我者亡。「盧爾提斯共和國」當局任何企圖干預盧爾提斯帝國內政、阻礙該國發展的把戲都不會得逞，到頭來只會是枉費心機一場空。我們敦促「盧爾提斯共和國」當局立即停止此類挑釁行為，不要逆勢而動，避免損害地區的和平與安寧。我們敦促「盧爾提斯共和國」當局在國際問題上要謹言慎行，不要再發出錯誤信號，不要再挑撥慫恿。我國堅持走和平發展道路，積極為維護世界和平穩定貢獻智慧力量。 希望「盧爾提斯共和國」當局個別人士能以開放的心態和客觀公正的態度對待盧爾提斯帝國，不要無中生有。對於「盧爾提斯共和國」當局的錯誤做法，各方必將採取有力的措施堅決予以反制，堅定地維護盧爾提斯帝國的自身主權、安全、發展利益。這樣的「盧爾提斯共和國」當局，能和正統的盧爾提斯帝國相提並論嗎！ 我們奉勸「盧爾提斯共和國」當局有關媒體和人士尊重已經明確無誤的事實和真相，恪守起碼的職業道德操守，放下意識形態偏見，摘掉有色眼鏡，不要再做不負責任、徒增笑柄的事情。「盧爾提斯共和國」當局試圖挑撥盧爾提斯帝國和國際間的關係，極其陰險。我們要正告「盧爾提斯共和國」當局，任何外國政府和勢力都無權干預盧爾提斯帝國的內政。 我們希望「盧爾提斯共和國」當局認真對待各方的嚴正交涉和嚴正立場，立即停止不負責任的言行。還是我們經常說的那句話，請「盧爾提斯共和國」當局不要高估自己的造謠能力，也不要低估別人的判斷能力。謊言重複一千遍，依然還是謊言。我們敦促「盧爾提斯共和國」當局懸崖勒馬，否則必將自食惡果，勿謂言之不預也！對於「盧爾提斯共和國」當局干涉盧爾提斯帝國內政、損害該國利益的行徑，加入聯合聲明的各方必將採取有力措施堅決反制。任何人都不要低估盧爾提斯帝國維護國家主權、安全、發展利益的堅定決心。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:HuacheshaFlag.png|無框|30x30像素]][[華辰沙光顧國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;正如卢尔提斯帝国相关部门所言，我国坚决不承认所谓的“卢尔提斯共和国”政权。我国政府全力支持卢尔提斯帝国对伪“卢尔提斯共和国”采取的所有正义行动，严厉谴责伪“卢尔提斯共和国”窃取卢尔提斯国家名誉的行径。联邦外交部敦促伪“卢尔提斯共和国”放弃妄图窃取卢尔提斯帝国正统地位的无望企图，尽快结束这一闹剧。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:納爾斯共和國國旗.png|無框|30x30像素]][[納爾斯聯邦]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;正如盧爾提斯帝國有關部門所言，聯邦絕不會承認所謂的「盧爾提斯共和國」政權。聯邦政府堅決支持盧爾提斯帝國的一切針對偽「盧爾提斯共和國」採取的正義行動，並強烈譴責偽「盧爾提斯共和國」政權盜竊盧爾提斯國家名譽的舉動。聯邦外交部建議偽盧爾提斯共和國放棄其絕不會成功的盜竊盧爾提斯帝國正統地位的打算，並儘快終止這場由其主演的馬戲。願神的光輝終歸於盧爾提斯帝國。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:萊其亞國旗.jpg|無框|30x30像素]][[萊齊亞皇冠領地及立窩尼亞伏林領地聯邦|萊其亞聯邦]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;鑒於我國與盧爾提斯帝國建交,我國堅決支持友邦盧爾提斯帝國,簽署「合法統治權聯合聲明」並不承認「盧爾提斯共和國」偽政權,並支持盧&lt;br /&gt;
&lt;br /&gt;
爾提斯帝國為了正義對偽政權做出的一切行為。我國呼籲盧爾提斯共和國偽政權不要嘗試竊取盧&lt;br /&gt;
&lt;br /&gt;
提亞民族正統性,現在偽政權只是在一群霸佔著舊伺服器在歹戲拖棚的跳樑小丑罷了。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:國旗2.png|無框|30x30像素]][[里塔多斯坦尼亞聯邦共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;《我國與盧爾提斯帝國聯合聲明》 聯邦絕不承為共和國政府!!&lt;br /&gt;
&lt;br /&gt;
拉納卡共和國：&lt;br /&gt;
&lt;br /&gt;
我國僅承認盧爾提斯帝國為正統, 不承認所謂的 「盧爾提斯共和國」&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:Flag of Great Shun.png|無框|30x30像素]][[大舜帝國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;詔令奉天承運皇帝詔曰今所謂之盧爾提斯共和國宣告其為盧爾提斯之正統然朕相信我國國民及全世界之人類都清&lt;br /&gt;
&lt;br /&gt;
楚何為正統之盧爾提斯朕代表大舜帝國全體國民宣告將不承&lt;br /&gt;
&lt;br /&gt;
認所謂盧爾提斯共和國之合法性並堅決支持盧爾提斯帝國及&lt;br /&gt;
&lt;br /&gt;
其政府慶德元年八月三十日皇帝&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:北平民主共和國國旗.png|無框|30x30像素]][[納雷茲民主共和國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;我方只堅持帝國，而不支持共和國，堅持一爾。&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[檔案:大延帝國國旗.png|無框|30x30像素]][[大延帝國]] ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;多利僞政權宣告自己是正統，但我國絕不承認其正統性，我國在這件事之後決定支持春時政權的正統性，並且加強外交貿易，以保護盧提亞民族以及盧爾提斯全體上下的老百姓！&amp;lt;/blockquote&amp;gt;[[檔案:外交公告 的複本 (20).png|縮圖]]&lt;br /&gt;
&lt;br /&gt;
= 影響 =&lt;br /&gt;
盧爾提斯共和國事件的和平解決對該地區乃至國際微國家社群產生了深遠的影響。這一事件表明，通過和平對話和外交途徑可以有效解決內部的政治分歧。盧爾提斯帝國通過與共和國達成和解，展示了其包容多元政治觀點的能力，同時保護了自身的主權與正統性。這一事件也進一步鞏固了[[盧爾提斯帝國]]在國際舞台上的地位。&lt;br /&gt;
[[分類:事件列表]]&lt;br /&gt;
[[分類:盧提亞]]&lt;br /&gt;
[[分類:盧爾提斯帝國]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%85%AC%E6%B0%91%E8%81%AF%E7%9B%9F&amp;diff=30727</id>
		<title>公民聯盟</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%85%AC%E6%B0%91%E8%81%AF%E7%9B%9F&amp;diff=30727"/>
		<updated>2024-08-27T15:20:49Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox political party&lt;br /&gt;
| name = 公民聯盟&lt;br /&gt;
| native_name = Civic Union&lt;br /&gt;
| native_name_lang =&lt;br /&gt;
| lang1 = &lt;br /&gt;
| name_lang1 = &lt;br /&gt;
| lang2 = &lt;br /&gt;
| name_lang2 = &lt;br /&gt;
| lang3 = &lt;br /&gt;
| name_lang3 = &lt;br /&gt;
| lang4 = &lt;br /&gt;
| name_lang4 = &lt;br /&gt;
| logo = 公民聯盟標誌.png&lt;br /&gt;
| logo_size = 250px&lt;br /&gt;
| caption =&lt;br /&gt;
| colorcode =#01A8EC&lt;br /&gt;
| abbreviation =    &amp;lt;!-- official abbreviation --&amp;gt;&lt;br /&gt;
| leader = &lt;br /&gt;
| president = &lt;br /&gt;
| chairperson = [[鄭延誠]]&lt;br /&gt;
| vice_chairperson =     &amp;lt;!-- or: | vice_chair = --&amp;gt; &amp;lt;!-- or: | vice_chairman = --&amp;gt;&lt;br /&gt;
| general_secretary =&lt;br /&gt;
| first_secretary =&lt;br /&gt;
| secretary_general = &lt;br /&gt;
| presidium =&lt;br /&gt;
| secretary =&lt;br /&gt;
| spokesperson = &lt;br /&gt;
| founder = [[江誠佑]]及[[李德永]]&lt;br /&gt;
| leader1_title = 全國委員會主席&lt;br /&gt;
| leader1_name = [[鄭延誠]]&lt;br /&gt;
| leader2_title = 黨秘書長&lt;br /&gt;
| leader2_name = [[柯英國]]&lt;br /&gt;
| leader3_title = 大議會黨團總召&lt;br /&gt;
| leader3_name = [[鄭靖永]]&lt;br /&gt;
| leader4_title = &lt;br /&gt;
| leader4_name =&lt;br /&gt;
| leader5_title = &lt;br /&gt;
| leader5_name = &lt;br /&gt;
| founded ={{Start date|2022|7|18|df=yes}}&lt;br /&gt;
| legalised =	2022年7月18日&lt;br /&gt;
| dissolved =       &amp;lt;!-- {{end date|YYYY|MM|DD}} --&amp;gt;&lt;br /&gt;
| banned = &lt;br /&gt;
| merger = [[聯邦自由運動]]&amp;lt;br&amp;gt;新民主黨&lt;br /&gt;
| split =&lt;br /&gt;
| predecessor = &lt;br /&gt;
| merged =&lt;br /&gt;
| successor = &lt;br /&gt;
| newspaper = &lt;br /&gt;
| think_tank = &lt;br /&gt;
| student_wing = &lt;br /&gt;
| youth_wing = &lt;br /&gt;
| womens_wing = &lt;br /&gt;
| wing1_title = &lt;br /&gt;
| wing1 = &lt;br /&gt;
| wing2_title = &lt;br /&gt;
| wing2 = &lt;br /&gt;
| wing3_title = &lt;br /&gt;
| wing3 = &lt;br /&gt;
| wing4_title = &lt;br /&gt;
| wing4 = &lt;br /&gt;
| membership_year = 2022&lt;br /&gt;
| membership = 未公開&lt;br /&gt;
|headquarters = {{flag|漢孜高瓦自由邦}}&lt;br /&gt;
| ideology = 進步主義&amp;lt;br&amp;gt;自由主義&amp;lt;br&amp;gt;社會民主主義&amp;lt;br&amp;gt;社會自由主義&amp;lt;br&amp;gt;新多邊外交主義&amp;lt;br&amp;gt;紐新至上主義（爭議）&lt;br /&gt;
| position = 中間偏左&lt;br /&gt;
| religion = &lt;br /&gt;
| national = &lt;br /&gt;
| regional = [[共和邦聯公民聯盟]]&lt;br /&gt;
| european =&lt;br /&gt;
| continental =&lt;br /&gt;
| international = &lt;br /&gt;
| europarl = &lt;br /&gt;
| affiliation1_title = &lt;br /&gt;
| affiliation1 = &lt;br /&gt;
| slogan = &lt;br /&gt;
| anthem =《國際歌》&amp;lt;br&amp;gt;[[File:Internationale-ru.ogg]]&lt;br /&gt;
| colors = {{colour box|#01A8EC}} 天藍色&lt;br /&gt;
| country = {{flag|蒙聯}}&lt;br /&gt;
| seats1_title = [[總統評議會|聯邦總統與副總統]]&lt;br /&gt;
| seats1 = {{Infobox political party/seats|2|3|hex=#01A8EC}}&lt;br /&gt;
| seats2_title = [[蒙萊納瓦聯邦國務總理|總理]]&lt;br /&gt;
| seats2 = {{Infobox political party/seats|1|1|hex=#01A8EC}}&lt;br /&gt;
| seats3_title = [[聯邦主權議會]]議員&lt;br /&gt;
| seats3 = {{Infobox political party/seats|1|6|hex=#01A8EC|per=1}}&lt;br /&gt;
| seats4_title = [[蒙萊納瓦國民議會|國民議會]]議員&lt;br /&gt;
| seats4 = {{Infobox political party/seats|3|13|hex=#01A8EC|per=1}}&lt;br /&gt;
| seats5_title = [[國務最高議會]]國務委員&lt;br /&gt;
| seats5 = {{Infobox political party/seats|5|9|hex=#01A8EC|per=1}}&lt;br /&gt;
| seats6_title = 邦首長&lt;br /&gt;
| seats6 = {{Infobox political party/seats|1|2|hex=#01A8EC}}&lt;br /&gt;
| seats7_title = 邦議會議員&lt;br /&gt;
| seats7 = {{Infobox political party/seats|2|10|hex=#01A8EC}}&lt;br /&gt;
| seats8_title = 制憲會議議員&lt;br /&gt;
| seats8 = {{Infobox political party/seats|3|9|hex=#01A8EC|per=1}}&lt;br /&gt;
| symbol = &lt;br /&gt;
| flag = &lt;br /&gt;
| website = &lt;br /&gt;
| state =           &amp;lt;!-- or country --&amp;gt;&lt;br /&gt;
| country =&lt;br /&gt;
| country_dab1 = &lt;br /&gt;
| parties_dab1 = &lt;br /&gt;
| elections_dab1 = &lt;br /&gt;
| country2 = &lt;br /&gt;
| country_dab2 = &lt;br /&gt;
| parties_dab2 = &lt;br /&gt;
| elections_dab2 = &lt;br /&gt;
| footnotes = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;公民聯盟&#039;&#039;&#039;（英語：&#039;&#039;&#039;Civic Union&#039;&#039;&#039;，縮寫為 &#039;&#039;&#039;CVU&#039;&#039;&#039;），簡稱&#039;&#039;&#039;公聯&#039;&#039;&#039;，是[[蒙萊納瓦聯邦]]主要政黨之一，於2022年7月18日由[[聯邦自由運動]]及[[新民主黨 (紐新)|新民主黨]]合併後成立，在2024年[[第三屆國民議會議員選舉]]後為第三大黨。&lt;br /&gt;
&lt;br /&gt;
== 歷史 ==&lt;br /&gt;
公民聯盟成立於2022年7月，是由前政黨[[聯邦自由運動]]及新民主黨合併而成，合併之後保持議會第一大黨的地位。&lt;br /&gt;
&lt;br /&gt;
2023年3月25日，因應[[第六任科紐瓦與新韓志聯邦總統選舉]]之舉行，公民聯盟成立總統選舉提名委員會，並計劃以徵召產生該黨總統候選人。&lt;br /&gt;
&lt;br /&gt;
2023年3月26日，黨秘書長宣布徵召時任總統[[鄭靖永]]為該黨總統選舉參選人，原總統選舉提名委員會改為總統選舉策略委員會，由黨秘書長任召集人，而鄭靖永最終勝出，成為繼前總統韓慶銘後首位競選連任並成功的總統。&lt;br /&gt;
&lt;br /&gt;
迄今為止，公民聯盟共有一名黨員曾擔任過科紐瓦與新韓志聯邦總統（即[[鄭靖永]]閣下），一位黨員擔任過國務總理（即[[李德永]]閣下），一位黨員擔任過聯邦主權議會議長（即[[陳清洋]]閣下），亦有一名黨員曾擔任過高級專員（即[[江誠佑]]閣下）。&lt;br /&gt;
&lt;br /&gt;
== 組織 ==&lt;br /&gt;
=== 中央黨部 ===&lt;br /&gt;
全國委員會是公民聯盟的最高行政機構，由全國委員會決定黨的重大方針並推展政策；根據黨章，全國委員會由黨主席（政黨領袖）、黨秘書長、主權議會黨團總召及若干名的黨員代表組成，而當總統由公民聯盟黨籍成員擔任時，總統亦會成為全國委員會成員，但不具有全國委員會主席的被選舉權。&lt;br /&gt;
&lt;br /&gt;
根據黨章規定，全國委員會主席是公民聯盟全黨及全國委員會的最高領導者，而全國委員會主席由全國委員會委員選舉產生，通常任期為一年，並且連選得連任；現任全國委員會主席為[[鄭延誠]]先生，自202ˋ年4月21日擔任。&lt;br /&gt;
&lt;br /&gt;
=== 政黨領導人 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+歷任全國委員會主席&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |任次&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |屆次&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |肖像&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |姓名&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |任職期間&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |經歷、備註&lt;br /&gt;
|-&lt;br /&gt;
!上任時間&lt;br /&gt;
!卸任時間&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;|1&lt;br /&gt;
| 1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[李德永]]&lt;br /&gt;
| 2022年7月18日&lt;br /&gt;
| 2023年7月17日&lt;br /&gt;
| [[蒙萊納瓦聯邦國務總理|國務總理]]及創黨黨員。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2023年7月18日&lt;br /&gt;
| 2024年4月21日&lt;br /&gt;
| 全國委員會推舉。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;| 2&lt;br /&gt;
| 3&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; |&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | [[鄭延誠]]&lt;br /&gt;
| 2024年4月21日&lt;br /&gt;
| 現任&lt;br /&gt;
| [[李德永]]辭職後由全國委員會推舉，創黨黨員。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+歷任祕書長&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |任次&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |屆次&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |肖像&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |姓名&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |任職期間&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |經歷、備註&lt;br /&gt;
|-&lt;br /&gt;
!上任時間&lt;br /&gt;
!卸任時間&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1&lt;br /&gt;
| 1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[江誠佑]]&lt;br /&gt;
| 2022年7月18日&lt;br /&gt;
| 2023年7月17日&lt;br /&gt;
| 創黨黨員。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 2&lt;br /&gt;
| 2023年7月18日&lt;br /&gt;
| 2024年2月21日&lt;br /&gt;
| 全國委員會主席指定。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;| 代理&lt;br /&gt;
|&lt;br /&gt;
| 鄭延誠&lt;br /&gt;
| 2024年2月21日&lt;br /&gt;
| 2024年4月21日&lt;br /&gt;
| 江誠佑辭職後代理。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 2&lt;br /&gt;
| 3&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; |&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | [[柯英國]]&lt;br /&gt;
| 2024年4月21日&lt;br /&gt;
| 現任&lt;br /&gt;
| 全國委員會主席指定。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 選舉 ==&lt;br /&gt;
&lt;br /&gt;
=== 總統與副總統選舉 ===&lt;br /&gt;
{| class=wikitable style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
|+ 歷屆總統與副總統選舉結果&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 選舉&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 參選人&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | 第一輪&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | 第二輪&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 領袖&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 當選標記&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 注釋&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! 得票數&lt;br /&gt;
! 得票比例&lt;br /&gt;
! 名次&lt;br /&gt;
! 得票數&lt;br /&gt;
! 得票比例&lt;br /&gt;
! 名次&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! [[第六任科紐瓦與新韓志聯邦總統選舉|2023年·第六任總統]]&lt;br /&gt;
| &amp;lt;center&amp;gt; [[鄭靖永]] &amp;lt;/center&amp;gt;&lt;br /&gt;
| 14票&lt;br /&gt;
| 45.2%&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;/3&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;lt;center&amp;gt;無第二輪&amp;lt;/center&amp;gt;&lt;br /&gt;
| [[李德永]]&lt;br /&gt;
| [[File:Vote1.svg|22px]]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! [[第一任科紐瓦與新韓志聯邦副總統選舉|2023年·第一任副總統]]&lt;br /&gt;
| &amp;lt;center&amp;gt; [[江誠佑]]及[[李齊洋]] &amp;lt;/center&amp;gt;&lt;br /&gt;
| 13票&lt;br /&gt;
| 54.2%&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;/2&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;lt;center&amp;gt;無第二輪&amp;lt;/center&amp;gt;&lt;br /&gt;
| [[李德永]]&lt;br /&gt;
| [[File:Vote1.svg|22px]]&lt;br /&gt;
| 與[[中間派與獨立人士]]聯合競選&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! [[第七任蒙萊納瓦聯邦總統選舉|2024年·第七任總統]]&lt;br /&gt;
| &amp;lt;center&amp;gt;[[何韋臣]]&amp;lt;/center&amp;gt;&lt;br /&gt;
| 12票&lt;br /&gt;
| 31.6%&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;/5&lt;br /&gt;
| 19票&lt;br /&gt;
| 47.5%&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;/5&lt;br /&gt;
| [[鄭延誠]]&lt;br /&gt;
| [[File:Vote1.svg|22px]]&lt;br /&gt;
| 與[[中間派與獨立人士]]聯合競選&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! [[第二任蒙萊納瓦聯邦副總統選舉|2024年·第二任副總統]]&lt;br /&gt;
| &amp;lt;center&amp;gt; [[鄭靖永]] &amp;lt;/center&amp;gt;&lt;br /&gt;
| 20票&lt;br /&gt;
| 17.5%&lt;br /&gt;
| &#039;&#039;&#039;2&#039;&#039;&#039;/7&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;lt;center&amp;gt;無第二輪&amp;lt;/center&amp;gt;&lt;br /&gt;
| [[鄭延誠]]&lt;br /&gt;
| [[File:Vote1.svg|22px]]&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 議會選舉 ===&lt;br /&gt;
{| class=wikitable style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
|+ 歷屆議會選舉結果&lt;br /&gt;
! 選舉&lt;br /&gt;
! 政黨票得票&lt;br /&gt;
! 得票比例&lt;br /&gt;
! 分區得票數&lt;br /&gt;
! 分區得票增長&lt;br /&gt;
! 領袖&lt;br /&gt;
! 議席&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;|+/-&lt;br /&gt;
! 名次&lt;br /&gt;
! 參政情況&lt;br /&gt;
|-&lt;br /&gt;
! [[第二屆聯邦主權議會議員選舉|第二屆主權議會選舉]]&lt;br /&gt;
| 8票&lt;br /&gt;
| 40%&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;|[[李德永]]&lt;br /&gt;
| {{composition bar|4|10|#01A8EC}}&lt;br /&gt;
| {{increase}} 40%&lt;br /&gt;
| {{increase}} 4&lt;br /&gt;
| {{increase}} 1&lt;br /&gt;
| {{yes2|少數派政府}}&lt;br /&gt;
|-&lt;br /&gt;
! [[第一屆國民議會國民代表選舉|第一屆國民議會選舉]]&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
| 8票&lt;br /&gt;
| 32%&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;|[[李德永]]&lt;br /&gt;
| {{composition bar|2|6|#01A8EC}}&lt;br /&gt;
| {{Steady}}&lt;br /&gt;
| {{increase}} 1&lt;br /&gt;
| {{Steady}} 1&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
|-&lt;br /&gt;
! 選舉&lt;br /&gt;
! 政黨票得票&lt;br /&gt;
! 得票比例&lt;br /&gt;
! 不分區當選人數&lt;br /&gt;
! 分區當選人數&lt;br /&gt;
! 領袖&lt;br /&gt;
! 議席&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;|+/-&lt;br /&gt;
! 名次&lt;br /&gt;
! 參政情況&lt;br /&gt;
|-&lt;br /&gt;
! [[第二屆國民議會議員選舉|第二屆國民議會選舉]]&lt;br /&gt;
| 7張&lt;br /&gt;
| 29%&lt;br /&gt;
| {{composition bar|2|6|#01A8EC}}&lt;br /&gt;
| {{composition bar|2|7|#01A8EC}}&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;|[[李德永]]&lt;br /&gt;
| {{composition bar|4|13|#01A8EC}}&lt;br /&gt;
| {{decrease}} 15%&lt;br /&gt;
| {{steady}}&lt;br /&gt;
| {{steady}} 1&lt;br /&gt;
| {{yes2|執政黨}}&lt;br /&gt;
|-&lt;br /&gt;
! [[第三屆國民議會議員選舉|第三屆國民議會選舉]]&lt;br /&gt;
| 6張&lt;br /&gt;
| 15.789%&lt;br /&gt;
| {{composition bar|1|5|#01A8EC}}&lt;br /&gt;
| {{composition bar|2|8|#01A8EC}}&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;|[[李德永]]&lt;br /&gt;
| {{composition bar|3|13|#01A8EC}}&lt;br /&gt;
| {{decrease}} 13.211%&lt;br /&gt;
| {{decrease}} 1&lt;br /&gt;
| {{decrease}} 2&lt;br /&gt;
| {{no2|在野黨}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;br /&gt;
[[分類:政黨列表]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%85%AC%E6%B0%91%E8%81%AF%E7%9B%9F&amp;diff=30726</id>
		<title>公民聯盟</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%85%AC%E6%B0%91%E8%81%AF%E7%9B%9F&amp;diff=30726"/>
		<updated>2024-08-27T15:17:11Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox political party&lt;br /&gt;
| name = 公民聯盟&lt;br /&gt;
| native_name = Civic Union&lt;br /&gt;
| native_name_lang =&lt;br /&gt;
| lang1 = &lt;br /&gt;
| name_lang1 = &lt;br /&gt;
| lang2 = &lt;br /&gt;
| name_lang2 = &lt;br /&gt;
| lang3 = &lt;br /&gt;
| name_lang3 = &lt;br /&gt;
| lang4 = &lt;br /&gt;
| name_lang4 = &lt;br /&gt;
| logo = 公民聯盟標誌.png&lt;br /&gt;
| logo_size = 250px&lt;br /&gt;
| caption =&lt;br /&gt;
| colorcode =#01A8EC&lt;br /&gt;
| abbreviation =    &amp;lt;!-- official abbreviation --&amp;gt;&lt;br /&gt;
| leader = &lt;br /&gt;
| president = &lt;br /&gt;
| chairperson = [[鄭延誠]]&lt;br /&gt;
| vice_chairperson =     &amp;lt;!-- or: | vice_chair = --&amp;gt; &amp;lt;!-- or: | vice_chairman = --&amp;gt;&lt;br /&gt;
| general_secretary =&lt;br /&gt;
| first_secretary =&lt;br /&gt;
| secretary_general = &lt;br /&gt;
| presidium =&lt;br /&gt;
| secretary =&lt;br /&gt;
| spokesperson = &lt;br /&gt;
| founder = [[江誠佑]]及[[李德永]]&lt;br /&gt;
| leader1_title = 全國委員會主席&lt;br /&gt;
| leader1_name = [[鄭延誠]]&lt;br /&gt;
| leader2_title = 黨秘書長&lt;br /&gt;
| leader2_name = [[柯英國]]&lt;br /&gt;
| leader3_title = 大議會黨團總召&lt;br /&gt;
| leader3_name = [[鄭靖永]]&lt;br /&gt;
| leader4_title = &lt;br /&gt;
| leader4_name =&lt;br /&gt;
| leader5_title = &lt;br /&gt;
| leader5_name = &lt;br /&gt;
| founded ={{Start date|2022|7|18|df=yes}}&lt;br /&gt;
| legalised =	2022年7月18日&lt;br /&gt;
| dissolved =       &amp;lt;!-- {{end date|YYYY|MM|DD}} --&amp;gt;&lt;br /&gt;
| banned = &lt;br /&gt;
| merger = [[聯邦自由運動]]&amp;lt;br&amp;gt;新民主黨&lt;br /&gt;
| split =&lt;br /&gt;
| predecessor = &lt;br /&gt;
| merged =&lt;br /&gt;
| successor = &lt;br /&gt;
| newspaper = &lt;br /&gt;
| think_tank = &lt;br /&gt;
| student_wing = &lt;br /&gt;
| youth_wing = &lt;br /&gt;
| womens_wing = &lt;br /&gt;
| wing1_title = &lt;br /&gt;
| wing1 = &lt;br /&gt;
| wing2_title = &lt;br /&gt;
| wing2 = &lt;br /&gt;
| wing3_title = &lt;br /&gt;
| wing3 = &lt;br /&gt;
| wing4_title = &lt;br /&gt;
| wing4 = &lt;br /&gt;
| membership_year = 2022&lt;br /&gt;
| membership = 未公開&lt;br /&gt;
|headquarters = {{flag|漢孜高瓦自由邦}}&lt;br /&gt;
| ideology = 進步主義&amp;lt;br&amp;gt;自由主義&amp;lt;br&amp;gt;社會民主主義&amp;lt;br&amp;gt;社會自由主義&amp;lt;br&amp;gt;新多邊外交主義&amp;lt;br&amp;gt;紐新至上主義（爭議）&lt;br /&gt;
| position = 中間偏左&lt;br /&gt;
| religion = &lt;br /&gt;
| national = &lt;br /&gt;
| regional = [[共和邦聯公民聯盟]]&lt;br /&gt;
| european =&lt;br /&gt;
| continental =&lt;br /&gt;
| international = &lt;br /&gt;
| europarl = &lt;br /&gt;
| affiliation1_title = &lt;br /&gt;
| affiliation1 = &lt;br /&gt;
| slogan = &lt;br /&gt;
| anthem =《國際歌》&amp;lt;br&amp;gt;[[File:Internationale-ru.ogg]]&lt;br /&gt;
| colors = {{colour box|#01A8EC}} 天藍色&lt;br /&gt;
| country = {{flag|蒙聯}}&lt;br /&gt;
| seats1_title = [[總統評議會|聯邦總統與副總統]]&lt;br /&gt;
| seats1 = {{Infobox political party/seats|2|3|hex=#01A8EC}}&lt;br /&gt;
| seats2_title = [[蒙萊納瓦聯邦國務總理|總理]]&lt;br /&gt;
| seats2 = {{Infobox political party/seats|1|1|hex=#01A8EC}}&lt;br /&gt;
| seats3_title = [[聯邦主權議會]]議員&lt;br /&gt;
| seats3 = {{Infobox political party/seats|1|6|hex=#01A8EC|per=1}}&lt;br /&gt;
| seats4_title = [[蒙萊納瓦國民議會|國民議會]]議員&lt;br /&gt;
| seats4 = {{Infobox political party/seats|3|13|hex=#01A8EC|per=1}}&lt;br /&gt;
| seats5_title = [[國務最高議會]]國務委員&lt;br /&gt;
| seats5 = {{Infobox political party/seats|5|9|hex=#01A8EC|per=1}}&lt;br /&gt;
| seats6_title = 邦首長&lt;br /&gt;
| seats6 = {{Infobox political party/seats|1|2|hex=#01A8EC}}&lt;br /&gt;
| seats7_title = 邦議會議員&lt;br /&gt;
| seats7 = {{Infobox political party/seats|2|10|hex=#01A8EC}}&lt;br /&gt;
| seats8_title = 制憲會議議員&lt;br /&gt;
| seats8 = {{Infobox political party/seats|3|9|hex=#01A8EC|per=1}}&lt;br /&gt;
| symbol = &lt;br /&gt;
| flag = &lt;br /&gt;
| website = &lt;br /&gt;
| state =           &amp;lt;!-- or country --&amp;gt;&lt;br /&gt;
| country =&lt;br /&gt;
| country_dab1 = &lt;br /&gt;
| parties_dab1 = &lt;br /&gt;
| elections_dab1 = &lt;br /&gt;
| country2 = &lt;br /&gt;
| country_dab2 = &lt;br /&gt;
| parties_dab2 = &lt;br /&gt;
| elections_dab2 = &lt;br /&gt;
| footnotes = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;公民聯盟&#039;&#039;&#039;（英語：&#039;&#039;&#039;Civic Union&#039;&#039;&#039;，縮寫為 &#039;&#039;&#039;CVU&#039;&#039;&#039;），簡稱&#039;&#039;&#039;公聯&#039;&#039;&#039;，是[[蒙萊納瓦聯邦]]主要政黨之一，於2022年7月18日由[[聯邦自由運動]]及[[新民主黨 (紐新)|新民主黨]]合併後成立，在2024年[[第三屆國民議會議員選舉]]後為第三大黨。&lt;br /&gt;
&lt;br /&gt;
== 黨名 ==&lt;br /&gt;
== 組織 ==&lt;br /&gt;
=== 中央黨部 ===&lt;br /&gt;
全國委員會是公民聯盟的最高行政機構，由全國委員會決定黨的重大方針並推展政策；根據黨章，全國委員會由黨主席（政黨領袖）、黨秘書長、主權議會黨團總召及若干名的黨員代表組成，而當總統由公民聯盟黨籍成員擔任時，總統亦會成為全國委員會成員，但不具有全國委員會主席的被選舉權。&lt;br /&gt;
&lt;br /&gt;
根據黨章規定，全國委員會主席是公民聯盟全黨及全國委員會的最高領導者，而全國委員會主席由全國委員會委員選舉產生，通常任期為一年，並且連選得連任；現任全國委員會主席為[[鄭延誠]]先生，自202ˋ年4月21日擔任。&lt;br /&gt;
&lt;br /&gt;
=== 政黨領導人 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+歷任全國委員會主席&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |任次&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |屆次&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |肖像&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |姓名&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |任職期間&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |經歷、備註&lt;br /&gt;
|-&lt;br /&gt;
!上任時間&lt;br /&gt;
!卸任時間&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot;|1&lt;br /&gt;
| 1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[李德永]]&lt;br /&gt;
| 2022年7月18日&lt;br /&gt;
| 2023年7月17日&lt;br /&gt;
| [[蒙萊納瓦聯邦國務總理|國務總理]]及創黨黨員。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2023年7月18日&lt;br /&gt;
| 2024年4月21日&lt;br /&gt;
| 全國委員會推舉。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;| 2&lt;br /&gt;
| 3&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; |&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | [[鄭延誠]]&lt;br /&gt;
| 2024年4月21日&lt;br /&gt;
| 現任&lt;br /&gt;
| [[李德永]]辭職後由全國委員會推舉，創黨黨員。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+歷任祕書長&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |任次&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |屆次&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |肖像&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |姓名&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |任職期間&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |經歷、備註&lt;br /&gt;
|-&lt;br /&gt;
!上任時間&lt;br /&gt;
!卸任時間&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1&lt;br /&gt;
| 1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[江誠佑]]&lt;br /&gt;
| 2022年7月18日&lt;br /&gt;
| 2023年7月17日&lt;br /&gt;
| 創黨黨員。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 2&lt;br /&gt;
| 2023年7月18日&lt;br /&gt;
| 2024年2月21日&lt;br /&gt;
| 全國委員會主席指定。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;| 代理&lt;br /&gt;
|&lt;br /&gt;
| 鄭延誠&lt;br /&gt;
| 2024年2月21日&lt;br /&gt;
| 2024年4月21日&lt;br /&gt;
| 江誠佑辭職後代理。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 2&lt;br /&gt;
| 3&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; |&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | [[柯英國]]&lt;br /&gt;
| 2024年4月21日&lt;br /&gt;
| 現任&lt;br /&gt;
| 全國委員會主席指定。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 選舉 ==&lt;br /&gt;
&lt;br /&gt;
=== 總統與副總統選舉 ===&lt;br /&gt;
{| class=wikitable style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
|+ 歷屆總統與副總統選舉結果&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 選舉&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 參選人&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | 第一輪&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | 第二輪&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 領袖&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 當選標記&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 注釋&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! 得票數&lt;br /&gt;
! 得票比例&lt;br /&gt;
! 名次&lt;br /&gt;
! 得票數&lt;br /&gt;
! 得票比例&lt;br /&gt;
! 名次&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! [[第六任科紐瓦與新韓志聯邦總統選舉|2023年·第六任總統]]&lt;br /&gt;
| &amp;lt;center&amp;gt; [[鄭靖永]] &amp;lt;/center&amp;gt;&lt;br /&gt;
| 14票&lt;br /&gt;
| 45.2%&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;/3&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;lt;center&amp;gt;無第二輪&amp;lt;/center&amp;gt;&lt;br /&gt;
| [[李德永]]&lt;br /&gt;
| [[File:Vote1.svg|22px]]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! [[第一任科紐瓦與新韓志聯邦副總統選舉|2023年·第一任副總統]]&lt;br /&gt;
| &amp;lt;center&amp;gt; [[江誠佑]]及[[李齊洋]] &amp;lt;/center&amp;gt;&lt;br /&gt;
| 13票&lt;br /&gt;
| 54.2%&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;/2&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;lt;center&amp;gt;無第二輪&amp;lt;/center&amp;gt;&lt;br /&gt;
| [[李德永]]&lt;br /&gt;
| [[File:Vote1.svg|22px]]&lt;br /&gt;
| 與[[中間派與獨立人士]]聯合競選&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! [[第七任蒙萊納瓦聯邦總統選舉|2024年·第七任總統]]&lt;br /&gt;
| &amp;lt;center&amp;gt;[[何韋臣]]&amp;lt;/center&amp;gt;&lt;br /&gt;
| 12票&lt;br /&gt;
| 31.6%&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;/5&lt;br /&gt;
| 19票&lt;br /&gt;
| 47.5%&lt;br /&gt;
| &#039;&#039;&#039;1&#039;&#039;&#039;/5&lt;br /&gt;
| [[鄭延誠]]&lt;br /&gt;
| [[File:Vote1.svg|22px]]&lt;br /&gt;
| 與[[中間派與獨立人士]]聯合競選&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! [[第二任蒙萊納瓦聯邦副總統選舉|2024年·第二任副總統]]&lt;br /&gt;
| &amp;lt;center&amp;gt; [[鄭靖永]] &amp;lt;/center&amp;gt;&lt;br /&gt;
| 20票&lt;br /&gt;
| 17.5%&lt;br /&gt;
| &#039;&#039;&#039;2&#039;&#039;&#039;/7&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;lt;center&amp;gt;無第二輪&amp;lt;/center&amp;gt;&lt;br /&gt;
| [[鄭延誠]]&lt;br /&gt;
| [[File:Vote1.svg|22px]]&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 議會選舉 ===&lt;br /&gt;
{| class=wikitable style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
|+ 歷屆議會選舉結果&lt;br /&gt;
! 選舉&lt;br /&gt;
! 政黨票得票&lt;br /&gt;
! 得票比例&lt;br /&gt;
! 分區得票數&lt;br /&gt;
! 分區得票增長&lt;br /&gt;
! 領袖&lt;br /&gt;
! 議席&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;|+/-&lt;br /&gt;
! 名次&lt;br /&gt;
! 參政情況&lt;br /&gt;
|-&lt;br /&gt;
! [[第二屆聯邦主權議會議員選舉|第二屆主權議會選舉]]&lt;br /&gt;
| 8票&lt;br /&gt;
| 40%&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;|[[李德永]]&lt;br /&gt;
| {{composition bar|4|10|#01A8EC}}&lt;br /&gt;
| {{increase}} 40%&lt;br /&gt;
| {{increase}} 4&lt;br /&gt;
| {{increase}} 1&lt;br /&gt;
| {{yes2|少數派政府}}&lt;br /&gt;
|-&lt;br /&gt;
! [[第一屆國民議會國民代表選舉|第一屆國民議會選舉]]&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
| 8票&lt;br /&gt;
| 32%&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;|[[李德永]]&lt;br /&gt;
| {{composition bar|2|6|#01A8EC}}&lt;br /&gt;
| {{Steady}}&lt;br /&gt;
| {{increase}} 1&lt;br /&gt;
| {{Steady}} 1&lt;br /&gt;
| {{N/A}}&lt;br /&gt;
|-&lt;br /&gt;
! 選舉&lt;br /&gt;
! 政黨票得票&lt;br /&gt;
! 得票比例&lt;br /&gt;
! 不分區當選人數&lt;br /&gt;
! 分區當選人數&lt;br /&gt;
! 領袖&lt;br /&gt;
! 議席&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;|+/-&lt;br /&gt;
! 名次&lt;br /&gt;
! 參政情況&lt;br /&gt;
|-&lt;br /&gt;
! [[第二屆國民議會議員選舉|第二屆國民議會選舉]]&lt;br /&gt;
| 7張&lt;br /&gt;
| 29%&lt;br /&gt;
| {{composition bar|2|6|#01A8EC}}&lt;br /&gt;
| {{composition bar|2|7|#01A8EC}}&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;|[[李德永]]&lt;br /&gt;
| {{composition bar|4|13|#01A8EC}}&lt;br /&gt;
| {{decrease}} 15%&lt;br /&gt;
| {{steady}}&lt;br /&gt;
| {{steady}} 1&lt;br /&gt;
| {{yes2|執政黨}}&lt;br /&gt;
|-&lt;br /&gt;
! [[第三屆國民議會議員選舉|第三屆國民議會選舉]]&lt;br /&gt;
| 6張&lt;br /&gt;
| 15.789%&lt;br /&gt;
| {{composition bar|1|5|#01A8EC}}&lt;br /&gt;
| {{composition bar|2|8|#01A8EC}}&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot;|[[李德永]]&lt;br /&gt;
| {{composition bar|3|13|#01A8EC}}&lt;br /&gt;
| {{decrease}} 13.211%&lt;br /&gt;
| {{decrease}} 1&lt;br /&gt;
| {{decrease}} 2&lt;br /&gt;
| {{no2|在野黨}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;br /&gt;
[[分類:政黨列表]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E4%BD%95%E9%9F%8B%E8%87%A3%E7%B8%BD%E7%B5%B1%E4%BB%BB%E6%9C%9F&amp;diff=29525</id>
		<title>何韋臣總統任期</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E4%BD%95%E9%9F%8B%E8%87%A3%E7%B8%BD%E7%B5%B1%E4%BB%BB%E6%9C%9F&amp;diff=29525"/>
		<updated>2024-08-07T16:55:28Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox government cabinet&lt;br /&gt;
|cabinet_name           = 何韋臣政府&lt;br /&gt;
|jurisdiction           = 蒙萊納瓦&lt;br /&gt;
|cabinet_number         = 第2屆&lt;br /&gt;
|cabinet_type           = 總統評議會領導下的聯邦政府&lt;br /&gt;
|flag                   = 韓寧政府旗.png&lt;br /&gt;
|flag_border            = true&lt;br /&gt;
|incumbent              = 何韋臣總統&lt;br /&gt;
|image                  = 何韋臣官方元首肖像照.jpg&lt;br /&gt;
|image_size             = 250x250px&lt;br /&gt;
|caption                = 何韋臣總統肖像&lt;br /&gt;
|date_formed            = 2024年5月30日&lt;br /&gt;
|date_dissolved         = &lt;br /&gt;
|state_leader           = [[總統評議會]]&lt;br /&gt;
|state_head             = [[何韋臣]]、[[江誠佑]]及[[鄭靖永]]&lt;br /&gt;
|government_head        = [[莊在安]]→&amp;lt;br&amp;gt;[[林維閎]]→&amp;lt;br&amp;gt;[[李德永]]&lt;br /&gt;
|deputy_government_head = [[江誠佑]]及[[盧義禾]]→&amp;lt;br&amp;gt;[[盧義禾]]→&amp;lt;br&amp;gt;[[江誠佑]]、[[盧義禾]]及[[李齊洋]]→&amp;lt;br&amp;gt;[[高鈞啟]]、[[江誠佑]]及[[李齊洋]]→&lt;br /&gt;
|political_party        = [[蒙萊納瓦保守黨|保守黨]]、[[蒙聯維新會]]及[[國民民主黨]]→&amp;lt;br&amp;gt;[[蒙萊納瓦保守黨|保守黨]]及[[國民民主黨]]→&amp;lt;br&amp;gt;[[蒙聯維新會]]、[[中間派與獨立人士]]及[[國民民主黨]]→&amp;lt;br&amp;gt;[[蒙聯工黨]]、[[中間派與獨立人士]]及[[國民民主黨]]→&amp;lt;br&amp;gt;[[公民聯盟]]、[[蒙萊納瓦保守黨|保守黨]]、[[蒙聯工黨]]及[[中間派與獨立人士|中間聯盟]]&lt;br /&gt;
|party_leader           = [[莊在安]]（保）/ [[江誠佑]]（維）/ [[盧義禾]]（民）→&amp;lt;br&amp;gt;[[莊在安]]（保）/ [[盧義禾]]（民）→&amp;lt;br&amp;gt;[[江誠佑]]（維）/ [[盧義禾]]（民）/ [[李齊洋]]（中）→&amp;lt;br&amp;gt;[[鄭延誠]]（公）/ [[高鈞啟]]（保）/ [[江誠佑]]（維）/ [[李齊洋]]（中）&lt;br /&gt;
|legislature_status     = 多數派政府→&amp;lt;br&amp;gt;少數派政府，CVU 閣外支持→&amp;lt;br&amp;gt;聯合少數派政府，CVU 閣外支持→&amp;lt;br&amp;gt;國民團結政府&lt;br /&gt;
|opposition_party       = [[中間派與獨立人士]]→&amp;lt;br&amp;gt;[[蒙萊納瓦保守黨|保守黨]]→&amp;lt;br&amp;gt;無&lt;br /&gt;
|opposition_leader      = 李齊洋（中）→&amp;lt;br&amp;gt;[[莊在安]]（保）→&amp;lt;br&amp;gt;[[高鈞啟]]（保）&lt;br /&gt;
|election               = [[第七任蒙萊納瓦聯邦總統選舉|第七任總統選舉]]&amp;lt;br&amp;gt;[[第二任蒙萊納瓦聯邦副總統選舉|第二任副總統選舉]]&lt;br /&gt;
|previous               = [[鄭靖永總統任期]]&lt;br /&gt;
|legislature_term=[[第三屆國民議會|第3屆國民議會]]：&amp;lt;br&amp;gt;2024年4月12日 -&lt;br /&gt;
|successor=}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;何韋臣總統任期&#039;&#039;&#039;（英語：&#039;&#039;&#039;Presidency of Charles Fitzwilliam Watson Ho&#039;&#039;&#039;），亦稱為&#039;&#039;&#039;何韋臣政府&#039;&#039;&#039;，是指在第七任[[蒙萊納瓦聯邦總統]]領導下的聯邦政府，在何韋臣總統執政初期，延續了鄭靖永總統任期中首次出現的左中右三派共治政府；但後來莊在安內閣因保守黨黨內壓力及公民聯盟要求莊在安下台的日期逼近，莊遂在5月31日向總統評議會辭職，並在6月4日隨林維閎組閣而下台。林維閎率領蒙聯維新黨與中間派與獨立人士及國民民主黨共同組成少數派政府，並由公民聯盟提供閣外信任支持，但僅一月便因轉型正義委員會公佈《前新韓志共和國轉型正義報告書》出臺，揭露前新韓志共和國大量立法不法行徑，造成不少影響，最終導致林維閎兩次向總統評議會請辭，一度造成政治危機，最終在工黨主席江誠佑協調下，由前任國務總理李德永在同年8月2日率領公民聯盟，保守黨，蒙聯工黨及中間派與獨立人士組成國民聯合政府，並預定在一個月後解散國民議會重選，以徹解決政治危機。&lt;br /&gt;
&lt;br /&gt;
何韋臣政府總計共{{ayd|2024|5|30|age=no}}。&lt;br /&gt;
&lt;br /&gt;
== 政府人事 ==&lt;br /&gt;
=== 總統評議會成員 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;width: 100%;&amp;quot; style=&amp;quot;text-align:center;&lt;br /&gt;
|+style=&amp;quot;background-color:lightblue;&amp;quot; colspan=&amp;quot;3&amp;quot;|總統評議會成員&lt;br /&gt;
! width=150 | 頭銜&lt;br /&gt;
! width=080 | 肖像&lt;br /&gt;
! width=100 | 姓名&lt;br /&gt;
! width=150 | 政黨&lt;br /&gt;
! width=140 | 就任日期&lt;br /&gt;
! width=145 | 卸任日期&lt;br /&gt;
! width=300 | 備註&lt;br /&gt;
|-&lt;br /&gt;
|[[蒙萊納瓦聯邦總統|總統]]&lt;br /&gt;
|[[File:何韋臣官方元首肖像照.jpg|center|80px]]&lt;br /&gt;
|[[何韋臣]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |[[中間派與獨立人士]]&lt;br /&gt;
|2024年5月30日&lt;br /&gt;
|現任&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[蒙萊納瓦聯邦副總統|副總統]]&lt;br /&gt;
|[[File:江誠佑官方肖像.jpg|center|80px]]&lt;br /&gt;
|[[江誠佑]]&lt;br /&gt;
|2023年9月18日&lt;br /&gt;
|現任&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[蒙萊納瓦聯邦副總統|副總統]]&lt;br /&gt;
|[[File:鄭靖永2023年官方元首肖像照.png|center|80px]]&lt;br /&gt;
|[[鄭靖永]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |[[公民聯盟]]&lt;br /&gt;
|2024年5月30日&lt;br /&gt;
|現任&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 國務最高議會及其相關單位 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;width: 100%;&amp;quot; style=&amp;quot;text-align:center;&lt;br /&gt;
|+style=&amp;quot;background-color:lightblue;&amp;quot; colspan=&amp;quot;3&amp;quot;|國務最高議會&lt;br /&gt;
! width=150 | 頭銜&lt;br /&gt;
! width=080 | 肖像&lt;br /&gt;
! width=100 | 姓名&lt;br /&gt;
! width=150 | 政黨&lt;br /&gt;
! width=140 | 就任日期&lt;br /&gt;
! width=145 | 卸任日期&lt;br /&gt;
! width=300 | 備註&lt;br /&gt;
|-&lt;br /&gt;
|[[國務最高議會主席|最高議會主席]]&lt;br /&gt;
|[[File:鄭靖永2023年官方元首肖像照.png|center|80px]]&lt;br /&gt;
|[[何韋臣]]&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; |[[中間派與獨立人士]]&lt;br /&gt;
|2024年5月31日&lt;br /&gt;
|現任&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[國務知事]]&lt;br /&gt;
|[[File:江誠佑官方肖像.jpg|center|80px]]&lt;br /&gt;
|[[江誠佑]]&lt;br /&gt;
|[[蒙聯維新會]]&lt;br /&gt;
|2023年8月21日&lt;br /&gt;
|現任&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|+style=&amp;quot;background-color:lightblue;&amp;quot; colspan=&amp;quot;3&amp;quot;|樞密院&lt;br /&gt;
|-&lt;br /&gt;
|[[蒙萊納瓦樞密院院長|樞密院院長]]&lt;br /&gt;
|[[File:李德永2023年國務總理肖像照.jpeg|center|80px]]&lt;br /&gt;
|[[李德永]]&lt;br /&gt;
|[[公民聯盟]]&lt;br /&gt;
|2024年4月8日&lt;br /&gt;
|現任&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 國家機關 ==&lt;br /&gt;
&lt;br /&gt;
=== 內閣 ===&lt;br /&gt;
{{main|莊在安內閣|第二次林維閎內閣}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#CCCCFF&amp;quot; | &#039;&#039;&#039;總統任內之內閣列表&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | {{abbr|屆次|Number}}&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 肖像&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; width=&amp;quot;12%&amp;quot; | 姓名&amp;lt;br&amp;gt;{{small|所屬選區}}&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | 任期&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 內閣&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 所屬政黨&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | 議會&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;10%&amp;quot; | 上任&lt;br /&gt;
! width=&amp;quot;10%&amp;quot; | 離任&lt;br /&gt;
! width=&amp;quot;10%&amp;quot; | 總任期&lt;br /&gt;
|- style=&amp;quot;background:#E6E6AA;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background:{{colour box|#FF7F02}}; color:white;&amp;quot; rowspan=2 | 1&lt;br /&gt;
| rowspan=2| [[File:韓寧政府旗.png|50px]]&lt;br /&gt;
| align=center rowspan=2 | &amp;lt;span style=&amp;quot;font-size:125%;&amp;quot;&amp;gt;&#039;&#039;&#039;[[莊在安]]&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;{{small|非議員}}&lt;br /&gt;
| rowspan=2 | 2024年&amp;lt;br&amp;gt;4月12日&lt;br /&gt;
| rowspan=2 | 2024年&amp;lt;br&amp;gt;6月4日&lt;br /&gt;
| rowspan=2 | {{ayd|duration=yes|2024|4|12|2024|6|4|age=no}}&lt;br /&gt;
| rowspan=2 | [[莊在安內閣]]&lt;br /&gt;
| rowspan=1 | [[四月十一日聯盟|APA]]-[[蒙萊納瓦保守黨|CON]]&amp;lt;br&amp;gt;{{small|多數派政府}}&lt;br /&gt;
| rowspan=4 | [[第三屆國民議會議員選舉|第三屆國民議會]]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=1| [[蒙萊納瓦保守黨|CON]]-[[國民民主黨|CDP]]&amp;lt;br&amp;gt;{{small|少數派政府，獲[[公民聯盟|CVU]]閣外支持}}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background:{{colour box|#FFBE00}}; color:white;&amp;quot; rowspan=1| 2&lt;br /&gt;
| rowspan=1 | [[File:韓寧政府旗.png|50px]]&lt;br /&gt;
| align=center rowspan=1 | &amp;lt;span style=&amp;quot;font-size:125%;&amp;quot;&amp;gt;&#039;&#039;&#039;[[林維閎]]&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;{{small|政黨名單選舉區}}&lt;br /&gt;
| 2024年&amp;lt;br&amp;gt;6月4日&lt;br /&gt;
| 2024年&amp;lt;br&amp;gt;8月2日&lt;br /&gt;
| {{ayd|duration=yes|2024|6|4|2024|8|2|age=no}}&lt;br /&gt;
| rowspan=1 | [[第二次林維閎內閣|第二次林維閎內閣]]&lt;br /&gt;
| rowspan=1 | [[蒙聯維新會|MIP]]-[[國民民主黨|CDP]]-[[中間派與獨立人士|CAI]]&amp;lt;br&amp;gt;→[[蒙聯工黨|MLP]]-[[中間派與獨立人士|CAI]]&amp;lt;br&amp;gt;{{small|聯合少數派政府&amp;lt;br&amp;gt;獲[[公民聯盟|CVU]]閣外支持}}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background:{{colour box|#01A8EC}}; color:white;&amp;quot; rowspan=&amp;quot;1&amp;quot; | 3&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | [[File:李德永2023年國務總理肖像照.jpeg|50px]]&lt;br /&gt;
| align=center rowspan=&amp;quot;1&amp;quot; | &amp;lt;span style=&amp;quot;font-size:125%;&amp;quot;&amp;gt;&#039;&#039;&#039;[[李德永]]&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;{{small|代表第二選區}}&lt;br /&gt;
| 2024年&amp;lt;br&amp;gt;8月2日&lt;br /&gt;
| &#039;&#039;現任&#039;&#039;&lt;br /&gt;
| {{ayd|duration=yes|2024|8|2|age=no}} &lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | [[第六次李德永內閣|第六次李德永內閣]]&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; |[[公民聯盟|CVU]]-[[蒙萊納瓦保守黨|CON]]-[[蒙聯工黨|MLP]]-[[中間派與獨立人士|CAI]]&amp;lt;br&amp;gt;{{small|國民團結政府}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 任內施政 ==&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%BB%96%E8%8B%A1%E7%A8%8B&amp;diff=29524</id>
		<title>廖苡程</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%BB%96%E8%8B%A1%E7%A8%8B&amp;diff=29524"/>
		<updated>2024-08-07T16:52:29Z</updated>

		<summary type="html">&lt;p&gt;Admin：​受保護 &amp;quot;廖苡程&amp;quot;：​預防性保護（[編輯=僅允許自動確認使用者]（無限期）[移動=僅允許自動確認使用者]（無限期））&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;廖苡程&#039;&#039;&#039;，貓羅聯邦共和國政治人物，現任[[貓羅聯邦共和國]][[貓羅聯邦共和國執政委員會|執政委員]]。&lt;br /&gt;
{{Infobox officeholder&lt;br /&gt;
|office={{flag|貓羅聯邦共和國}}法務省長官&lt;br /&gt;
|term_start1=2024年2月5日&lt;br /&gt;
|term_end1=&lt;br /&gt;
|predecessor=&lt;br /&gt;
|president=[[周鼎睿]]&lt;br /&gt;
|office3={{flag|貓羅聯邦共和國}}[[貓羅聯邦共和國總統|總統]]&lt;br /&gt;
|term_start3=2023年10月24日&lt;br /&gt;
|term_end3=2024年2月5日&lt;br /&gt;
|predecessor3=&lt;br /&gt;
|office2={{flag|貓羅聯邦共和國}}第2-3屆[[貓羅聯邦共和國執政委員會|執政委員]]&amp;lt;br/&amp;gt;{{small|選舉：[[第二屆貓羅聯邦共和國執政委員選舉|第二屆]]、[[第三屆貓羅聯邦共和國執政委員選舉|第三屆]]}}&lt;br /&gt;
|term_start2=2023年10月24日&lt;br /&gt;
|term_end2=&lt;br /&gt;
|office4={{flag|貓羅聯邦共和國}} 外務省長官&lt;br /&gt;
|term_start4 = 2023年10月24日&lt;br /&gt;
|term_end4 = 2023年11月6日&lt;br /&gt;
|predecessor4 = [[宋芷容]]&lt;br /&gt;
|successor4 = [[周鼎睿]]&lt;br /&gt;
|president4 = [[廖苡程]]&lt;br /&gt;
&lt;br /&gt;
|birth_date = 2003-08-08&lt;br /&gt;
|birth_place = &lt;br /&gt;
|death_date = &lt;br /&gt;
|death_place = &lt;br /&gt;
|nationality = {{flag|台灣}}&amp;lt;br/&amp;gt;{{flag|貓羅聯邦共和國}} [[貓羅聯邦共和國]]&lt;br /&gt;
|religion = &lt;br /&gt;
|profession = &lt;br /&gt;
|known_for = &lt;br /&gt;
|party = &lt;br /&gt;
|alma_mater = &lt;br /&gt;
|其他名字=}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%91%A8%E9%BC%8E%E7%9D%BF&amp;diff=29523</id>
		<title>周鼎睿</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%91%A8%E9%BC%8E%E7%9D%BF&amp;diff=29523"/>
		<updated>2024-08-07T16:52:07Z</updated>

		<summary type="html">&lt;p&gt;Admin：​受保護 &amp;quot;周鼎睿&amp;quot;：​預防性保護（[編輯=僅允許自動確認使用者]（無限期）[移動=僅允許自動確認使用者]（無限期））&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;周鼎睿（英文：&#039;&#039;&#039;CHOU, Ting-jui&#039;&#039;&#039;，&#039;&#039;&#039;2006年1月29日－&#039;&#039;&#039;），貓羅聯邦共和國政治人物，現任[[貓羅聯邦共和國]]外務省長官、[[貓羅聯邦共和國執政委員會|執政委員]]暨櫻和殖民領總督。&lt;br /&gt;
{{Infobox officeholder&lt;br /&gt;
|honorific_prefix    = &lt;br /&gt;
|前綴尊稱= &lt;br /&gt;
|image=&lt;br /&gt;
|caption = &lt;br /&gt;
|office={{flag|貓羅聯邦共和國}} [[貓羅聯邦共和國總統|總統]]&lt;br /&gt;
|term_start1 = 2024年2月5日&lt;br /&gt;
|term_end = &lt;br /&gt;
|predecessor = [[廖苡程]]&lt;br /&gt;
|president = &lt;br /&gt;
|vicepresident = [[廖苡程]]&lt;br /&gt;
|successor = &lt;br /&gt;
|office2={{flag|貓羅聯邦共和國}} 總務省長官&lt;br /&gt;
|term_start2 = 2024年2月6日&lt;br /&gt;
|term_end2 = &lt;br /&gt;
|predecessor2 = 伊芙琳&lt;br /&gt;
|president2 = [[周鼎睿]]&lt;br /&gt;
|successor2 = &lt;br /&gt;
|office3={{flag|貓羅聯邦共和國}} 外務省長官&lt;br /&gt;
|term_start3 = 2023年11月6日&lt;br /&gt;
|term_end3 = &lt;br /&gt;
|predecessor3 = [[廖苡程]]&lt;br /&gt;
|president3 = [[廖苡程]]（2023/11/6-2024/2/5）&amp;lt;br/&amp;gt;[[周鼎睿]]（2024/2/5-）&lt;br /&gt;
|successor3 = &lt;br /&gt;
|office5 = {{flag|貓羅聯邦共和國}} 櫻和殖民領總督&lt;br /&gt;
|term_start5 = 2023年8月23日&lt;br /&gt;
|term_end5 = &lt;br /&gt;
|predecessor5 = 無，首任&lt;br /&gt;
|successor5 = &lt;br /&gt;
|office4= {{flag|貓羅聯邦共和國}}第2-4屆[[貓羅聯邦共和國執政委員會|執政委員]]&amp;lt;br/&amp;gt;{{small|選舉：[[第二屆貓羅聯邦共和國執政委員選舉#補選|第二屆補選]]．[[第三屆貓羅聯邦共和國執政委員選舉|第三屆]]，[[第四屆貓羅聯邦共和國執政委員選舉|第四屆]]}}&lt;br /&gt;
|term_start4=2023年12月04日&lt;br /&gt;
|term_end4=&lt;br /&gt;
|office6={{flag|貓羅聯邦共和國}} 最高裁判院長官&lt;br /&gt;
|term_start6 = 2023年7月9日&lt;br /&gt;
|term_end6 = 2023年11月6日&lt;br /&gt;
|predecessor6 = 無，首任&lt;br /&gt;
|successor6 = K.C.Chen&lt;br /&gt;
|office7 = {{flag|貓羅聯邦共和國}} 法務省長官&lt;br /&gt;
|term_start7= 2023年7月23日&lt;br /&gt;
|term_end7=  2023年8月26日&lt;br /&gt;
|successor7 = 從缺&lt;br /&gt;
|president7= [[宋芷容]]&lt;br /&gt;
&lt;br /&gt;
|birth_date = {{birth date and age|2006|01|29}}&lt;br /&gt;
|birth_place = {{flag|台灣}}臺北市&lt;br /&gt;
|death_date = &lt;br /&gt;
|death_place = &lt;br /&gt;
|nationality = {{flag|台灣}}&amp;lt;br/&amp;gt;{{flag|貓羅聯邦共和國}} &lt;br /&gt;
|religion = &lt;br /&gt;
|profession = &lt;br /&gt;
|known_for = &lt;br /&gt;
|party = [[貓羅社會民主黨]]&amp;lt;br/&amp;gt;（2024年1月21日-）&lt;br /&gt;
|otherparty =貓羅世代傳承黨&amp;lt;br/&amp;gt;（2023年9月16日-2023年10月8日）&lt;br /&gt;
|educate = *國立臺灣師範大學附屬高級中學&lt;br /&gt;
|其他名字=別名：LarryChou}}&lt;br /&gt;
&lt;br /&gt;
[[Category:人物列表]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E7%AC%AC%E4%BA%8C%E6%AC%A1%E6%9E%97%E7%B6%AD%E9%96%8E%E5%85%A7%E9%96%A3&amp;diff=29275</id>
		<title>第二次林維閎內閣</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E7%AC%AC%E4%BA%8C%E6%AC%A1%E6%9E%97%E7%B6%AD%E9%96%8E%E5%85%A7%E9%96%A3&amp;diff=29275"/>
		<updated>2024-08-06T06:44:27Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox government cabinet&lt;br /&gt;
| cabinet_name= 第二次林維閎內閣&lt;br /&gt;
| cabinet_number          = 第11屆&lt;br /&gt;
| cabinet_type            = 內閣&lt;br /&gt;
| jurisdiction            = [[蒙萊納瓦聯邦]]&lt;br /&gt;
| flag                    = 紐新聯邦國旗.png&lt;br /&gt;
| flag_border             = true&lt;br /&gt;
| image = &lt;br /&gt;
| caption = &lt;br /&gt;
| date_formed = {{startdate|2024|6|4|}}&lt;br /&gt;
| date_dissolved =  2024年8月2日&lt;br /&gt;
| government_head  = [[林維閎]]&lt;br /&gt;
| deputy_government_head = [[江誠佑]]、[[盧義禾]]及[[李齊洋]]&lt;br /&gt;
| state_head_title = [[總統評議會]]&lt;br /&gt;
| state_head = [[何韋臣]]、[[江誠佑]]及[[鄭靖永]]&lt;br /&gt;
| former_members_number =&lt;br /&gt;
| former_members_resigned = &lt;br /&gt;
| political_party = [[蒙聯維新會]]&amp;lt;br&amp;gt;[[中間派與獨立人士]]&amp;lt;br&amp;gt;[[國民民主黨]]&lt;br /&gt;
| legislature_status = {{Longitem|少數派政府&amp;lt;br&amp;gt;{{midsize|&#039;&#039;以及公民聯盟信任供給&#039;&#039;}}}}&lt;br /&gt;
{{Composition_bar/advanced&lt;br /&gt;
|divisionname = &lt;br /&gt;
|total        = 13&lt;br /&gt;
|boxwidth     = 200&lt;br /&gt;
|party1       = 2&lt;br /&gt;
|partycolor1  = #FFBE00&lt;br /&gt;
|party2       = 1&lt;br /&gt;
|partycolor2  = #EA5405&lt;br /&gt;
|party3       = 3&lt;br /&gt;
|partycolor3  = #396100&lt;br /&gt;
}}&lt;br /&gt;
| legislature_term = [[第三屆國民議會]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;（2024年4月12日 - ）&amp;lt;/small&amp;gt;&lt;br /&gt;
| budget = &lt;br /&gt;
| opposition_cabinet = 沒有正式成立影子內閣&lt;br /&gt;
| opposition_party = [[蒙萊納瓦保守黨]] &lt;br /&gt;
| opposition_leader = [[莊在安]]&lt;br /&gt;
| election = [[第三屆國民議會議員選舉]]&lt;br /&gt;
| last_election =&lt;br /&gt;
| previous = [[莊在安內閣]]&lt;br /&gt;
| successor = [[第六次李德永內閣]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;第二次林維閎內閣&#039;&#039;&#039;（英語：&#039;&#039;&#039;Second Wei-Hong Lin Cabinet&#039;&#039;&#039;）是由[[蒙聯維新會]]、[[中間派與獨立人士]]及[[國民民主黨]]組成的聯合政府，為蒙聯維新會自成立至今首次主導組閣並成功之內閣。而林維閎本人也成為首位「回鍋」的國務總理，此前他曾於2020年至2021年時，以韓志民主陣線的黨籍出任第3任國務總理。&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
7月5日，前新韓志共和國眾多立法不法之行徑被發掘，導致&lt;br /&gt;
&lt;br /&gt;
並被認為是動搖國本之事，林維閎已於宣佈其將於7月28日進行總辭。--&amp;gt;&lt;br /&gt;
== 國務總理信任動議投票 ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;font-size:90%;&amp;quot;&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | 第二屆大議會第二次[[國務總理信任動議投票]]&amp;lt;br /&amp;gt; &amp;lt;small&amp;gt;獲得絕對多數需7票&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | 第一輪&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; width=&amp;quot;100&amp;quot; | 候選人&lt;br /&gt;
| bgcolor=&amp;quot;#FF7F02&amp;quot; |&lt;br /&gt;
| bgcolor=&amp;quot;#FFBE00&amp;quot; | &lt;br /&gt;
| bgcolor=&amp;quot;#396100&amp;quot;|&lt;br /&gt;
| bgcolor=&amp;quot;gray&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | [[宋元順]]&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | [[林維閎]]&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | [[李齊洋]]&lt;br /&gt;
| width=&amp;quot;100&amp;quot; |  無效票&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! 得票&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | 第二輪&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; width=&amp;quot;100&amp;quot; | 候選人&lt;br /&gt;
| bgcolor=&amp;quot;#FF7F02&amp;quot; |&lt;br /&gt;
| bgcolor=&amp;quot;#FFBE00&amp;quot; | &lt;br /&gt;
| bgcolor=&amp;quot;gray&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | [[宋元順]]&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | [[林維閎]]&lt;br /&gt;
| width=&amp;quot;100&amp;quot; |  無效票&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! 得票&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| 3&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | 第三輪&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; width=&amp;quot;100&amp;quot; | 候選人&lt;br /&gt;
| bgcolor=&amp;quot;#FF7F02&amp;quot; |&lt;br /&gt;
| bgcolor=&amp;quot;#FFBE00&amp;quot; | &lt;br /&gt;
| bgcolor=&amp;quot;gray&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | [[宋元順]]&lt;br /&gt;
| width=&amp;quot;100&amp;quot; | &#039;&#039;&#039;[[林維閎]]&#039;&#039;&#039;&lt;br /&gt;
| width=&amp;quot;100&amp;quot; |  無效票&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
! 得票&lt;br /&gt;
| 4&lt;br /&gt;
| &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 內閣成員 ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! rowspan=4 | 黨籍&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&lt;br /&gt;
| 五部及兩委員會&lt;br /&gt;
| 國務總理、副國務總理及國務部長所屬&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#396100&amp;quot; | &lt;br /&gt;
| [[中間派與獨立人士]]&lt;br /&gt;
| 三部&lt;br /&gt;
| 副國務總理及國務部長所屬&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#EA5405&amp;quot; | &lt;br /&gt;
| [[國民民主黨]]&lt;br /&gt;
| 一部&lt;br /&gt;
| 副國務總理所屬&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; |&lt;br /&gt;
| 獨立人士&lt;br /&gt;
| 一部、四委員會及一銀行&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; bgcolor=&amp;quot;#F2F2F2&amp;quot; align=&amp;quot;center&amp;quot;| [[莊在安內閣|←]] &#039;&#039;&#039;第二次林維閎內閣&#039;&#039;&#039;&amp;lt;br/&amp;gt;（2024年6月4日至今，共{{ayd|2024|6|4|age=no}}）&lt;br /&gt;
|-&lt;br /&gt;
! 職位&lt;br /&gt;
! 姓名&lt;br /&gt;
! width=&amp;quot;100px&amp;quot; colspan=&amp;quot;2&amp;quot;| 政黨&lt;br /&gt;
! width=&amp;quot;125px&amp;quot;| 上任&lt;br /&gt;
! width=&amp;quot;125px&amp;quot;| 離任&lt;br /&gt;
! 備註&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#cccccc;&amp;quot; colspan=&amp;quot;7&amp;quot; | &amp;lt;big&amp;gt;&amp;lt;center&amp;gt; &#039;&#039;&#039;內閣部會首長&#039;&#039;&#039; &amp;lt;/big&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[蒙萊納瓦聯邦國務總理|國務總理]]&lt;br /&gt;
| &#039;&#039;&#039;[[林維閎]]&#039;&#039;&#039; {{small|議員[[閣下]]}}&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | [[蒙萊納瓦聯邦副總理|副總理]]&lt;br /&gt;
| &#039;&#039;&#039;[[江誠佑]]&#039;&#039;&#039; {{small|[[國民議會議員|議員]][[閣下]]}}&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[盧義禾]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#EA5405&amp;quot; | &lt;br /&gt;
| [[國民民主黨]]&lt;br /&gt;
|  2024年6月4日&lt;br /&gt;
|  &lt;br /&gt;
| 自莊在安內閣中續任。&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[李齊洋]]&#039;&#039;&#039; {{small|[[閣下]]}}&lt;br /&gt;
| style=&amp;quot;background:#396100&amp;quot; | &lt;br /&gt;
| [[中間派與獨立人士]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[蒙萊納瓦聯邦國務部長|國務部長]]&lt;br /&gt;
| &#039;&#039;&#039;[[陳清洋]]&#039;&#039;&#039; {{small|議員閣下}}&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[內政事務暨國土安全部部長]]部長&lt;br /&gt;
| &#039;&#039;&#039;[[李維斌]]&#039;&#039;&#039; {{small|[[閣下]]}}&lt;br /&gt;
| style=&amp;quot;background:#396100&amp;quot; | &lt;br /&gt;
| [[中間派與獨立人士]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[外交暨共同體事務部]]部長&amp;lt;br /&amp;gt;&lt;br /&gt;
| &#039;&#039;&#039;[[江誠佑]]&#039;&#039;&#039; {{small|[[國民議會議員|議員]][[閣下]]}}&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[國際發展事務部]]部長&amp;lt;br /&amp;gt;&lt;br /&gt;
| &#039;&#039;&#039;[[江誠佑]]&#039;&#039;&#039; {{small|[[國民議會議員|議員]][[閣下]]}}&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[教育文化研究部]]部長&lt;br /&gt;
| &#039;&#039;&#039;[[林維閎]]&#039;&#039;&#039;  {{small|[[國民議會議員|議員]]閣下}}&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&amp;lt;br&amp;gt;&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|  [[政府行政安全與永續化發展部]]部長&lt;br /&gt;
|  &#039;&#039;&#039;[[藍銘洋]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#396100&amp;quot; | &lt;br /&gt;
| [[中間派與獨立人士]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[企劃財政與經濟部]]部長&lt;br /&gt;
| &#039;&#039;&#039;[[盧義禾]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#EA5405&amp;quot; | &lt;br /&gt;
| [[國民民主黨]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  [[國家防衛部]]部長&lt;br /&gt;
|  &#039;&#039;&#039;[[林紹楷]]&#039;&#039;&#039;  {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#396100&amp;quot; | &lt;br /&gt;
| [[中間派與獨立人士]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | [[法務及司法行政部]]部長&amp;lt;br/&amp;gt;（[[蒙萊納瓦首席法官|首席法官]]兼任）&lt;br /&gt;
| &#039;&#039;&#039;[[劉政恭]]&#039;&#039;&#039; {{small|大法官閣下}}&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &lt;br /&gt;
| 獨立人士&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  [[科學技術與數位化轉型部]]部長&lt;br /&gt;
|  &#039;&#039;&#039;[[李逸]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[內閣協調委員會]]主席&lt;br /&gt;
| &#039;&#039;&#039;[[陳清洋]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&amp;lt;br&amp;gt;&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[語言標準化委員會]]主席&lt;br /&gt;
| &#039;&#039;&#039;[[陳宏澤]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &lt;br /&gt;
| 獨立人士&lt;br /&gt;
| 2024年6月4日&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#cccccc;&amp;quot; colspan=&amp;quot;7&amp;quot; | &amp;lt;big&amp;gt;&amp;lt;center&amp;gt; &#039;&#039;&#039;獨立機關首長&#039;&#039;&#039; &amp;lt;/big&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[選務委員會]]主席&lt;br /&gt;
| &#039;&#039;&#039;[[陳維健]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &lt;br /&gt;
| 獨立人士&lt;br /&gt;
| 2024年1月1日&lt;br /&gt;
| &lt;br /&gt;
| （任期獨立制機關）&lt;br /&gt;
|-&lt;br /&gt;
| [[聯邦傳播委員會]]主席&lt;br /&gt;
| &#039;&#039;&#039;[[柯亦詮]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &lt;br /&gt;
| 獨立人士&lt;br /&gt;
| 2023年5月4日&lt;br /&gt;
|&lt;br /&gt;
| （任期獨立制機關）&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[蒙萊納瓦國家銀行]]總裁&lt;br /&gt;
| &#039;&#039;&#039;[[陳宏澤]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &lt;br /&gt;
| 獨立人士&lt;br /&gt;
| 2023年8月9日&lt;br /&gt;
| &lt;br /&gt;
| （任期獨立制機關）&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[轉型正義委員會]]主席&lt;br /&gt;
|  &#039;&#039;&#039;[[林維閎]]&#039;&#039;&#039;  {{small|[[聯邦主權議會議員|議員]]閣下}}&lt;br /&gt;
| style=&amp;quot;background:#FFBE00&amp;quot; | &lt;br /&gt;
| [[蒙聯維新會]]&amp;lt;br&amp;gt;&lt;br /&gt;
| 2023年5月7日&lt;br /&gt;
| &lt;br /&gt;
|（任期獨立制機關）&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [[國家改革委員會]]主席&lt;br /&gt;
| &#039;&#039;&#039;[[陳宏澤]]&#039;&#039;&#039; {{small|閣下}}&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &lt;br /&gt;
| 獨立人士&lt;br /&gt;
| 2023年5月4日&lt;br /&gt;
|&lt;br /&gt;
|（任期獨立制機關）&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;br /&gt;
* [[何韋臣總統任期]]&lt;br /&gt;
{{蒙萊納瓦聯邦內閣列表}}&lt;br /&gt;
[[分類:蒙萊納瓦聯邦內閣]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Age_in_days&amp;diff=29256</id>
		<title>模板:Age in days</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Age_in_days&amp;diff=29256"/>
		<updated>2024-08-05T15:13:39Z</updated>

		<summary type="html">&lt;p&gt;Admin：​建立內容為「&amp;lt;includeonly&amp;gt;{{#invoke:age|age_generic|template=age_days}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;」的新頁面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:age|age_generic|template=age_days}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E8%92%99%E8%90%8A%E7%B4%8D%E7%93%A6%E8%81%AF%E9%82%A6&amp;diff=29255</id>
		<title>蒙萊納瓦聯邦</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E8%92%99%E8%90%8A%E7%B4%8D%E7%93%A6%E8%81%AF%E9%82%A6&amp;diff=29255"/>
		<updated>2024-08-05T14:54:55Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox country&lt;br /&gt;
|name =  {{flag|蒙聯}} &amp;lt;br&amp;gt; Monreinavaská Federace&lt;br /&gt;
| native_name = &lt;br /&gt;
|name_en = &amp;lt;small&amp;gt;[[w:英語|英語]]: &#039;&#039;Federation of Monreinava&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;[[w:馬來語|馬來語]]: &#039;&#039;Persekutuan Monreinava&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;[[w:俄語|俄語]]: &#039;&#039;Монрейнаваская Федерация&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;韓語: &#039;&#039;몽라나와연방&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|image_flag= 紐新聯邦國旗.png&lt;br /&gt;
|image_symbol= 紐新聯邦國徽.png&lt;br /&gt;
|motto= &amp;lt;br&amp;gt;Vždy věrný 永遠忠誠&lt;br /&gt;
|anthem= &amp;lt;br&amp;gt;《[[祖國的榮耀屬於我們]]&amp;lt;br&amp;gt;[[File: Glory to our motherland.oga]]&lt;br /&gt;
|loctext= 東亞&lt;br /&gt;
|capital= {{Flag|聯邦首都領地}}&lt;br /&gt;
|official_languages= [[標準文化語]]、[[w:現代標準漢語|漢語]]、[[w:英語|英語]]、韓文及[[w:俄語|俄語]]&lt;br /&gt;
| official_script = 正體中文、拉丁字母及西里爾字母&lt;br /&gt;
| languages_type = 地方語言&lt;br /&gt;
| languages    = 馬來文、海陸腔客家話、廣東話及粵語&lt;br /&gt;
&lt;br /&gt;
| languages2_type = 少數語言&lt;br /&gt;
| languages2    = 西班牙文及俄語&lt;br /&gt;
&lt;br /&gt;
|ethnic_groups= 漢族&lt;br /&gt;
|government_type= 聯邦制&amp;lt;br&amp;gt;委員會制&amp;lt;br&amp;gt;議會內閣制&amp;lt;br&amp;gt;民主共和國&lt;br /&gt;
|religion = [[w:基督宗教|基督宗教]]、傳統信仰與[[w:伊斯蘭教|伊斯蘭教]]&lt;br /&gt;
|legislature = [[大議會]]&lt;br /&gt;
|upper_house = [[聯邦主權議會]]&lt;br /&gt;
|lower_house = [[蒙萊納瓦國民議會|國民議會]]&lt;br /&gt;
|leader_title1=[[蒙萊納瓦聯邦總統|聯邦總統]]&lt;br /&gt;
|leader_name1=[[何韋臣]]&lt;br /&gt;
|leader_title2 = [[蒙萊納瓦聯邦副總統|副總統]]&lt;br /&gt;
|leader_name2 =  [[江誠佑]]&amp;lt;br&amp;gt;[[鄭靖永]]&lt;br /&gt;
|leader_title3=[[蒙萊納瓦聯邦國務總理|國務總理]]&lt;br /&gt;
|leader_name3= [[李德永]]&lt;br /&gt;
|leader_title5 = [[蒙萊納瓦聯邦副總理|副總理]]&lt;br /&gt;
|leader_name5 = [[高鈞啟]]&amp;lt;br&amp;gt;[[江誠佑]]&amp;lt;br&amp;gt;[[李齊洋]]&lt;br /&gt;
|leader_title4 = [[人民委員會主席]]&lt;br /&gt;
|leader_name4 = [[秦正洋]]&lt;br /&gt;
|leader_title6 = [[聯邦主權議會議長|主權議會議長]]&lt;br /&gt;
|leader_name6 = [[陳勝凱]]&lt;br /&gt;
|leader_title7 = [[國民議會議長|國民議會議長]]&lt;br /&gt;
|leader_name7 = [[宋元順]]&lt;br /&gt;
|established= 2023年5月24日&lt;br /&gt;
|currency= [[w:新台幣|新台幣]]、[[w:港元|港元]]、[[w:人民幣|人民幣]]及[[w:馬幣|馬幣]] &amp;lt;small&amp;gt;（主要貨幣） &amp;lt;/small&amp;gt; &amp;lt;br&amp;gt;[[通用克朗]] &amp;lt;small&amp;gt;（法定）&amp;lt;/small&amp;gt; &lt;br /&gt;
|time_zone = [[w:UTC|UTC]]+8（聯邦標準時間）&lt;br /&gt;
|calendar_type=&lt;br /&gt;
|date_format= YYYY/MM/DD（西元） &amp;lt;br /&amp;gt; 詮和Y年M月D日&lt;br /&gt;
|drives_on=&lt;br /&gt;
|cctld=&lt;br /&gt;
|population_census = 49&lt;br /&gt;
|population_census_year = 2024年5月&lt;br /&gt;
|official_website                = [https://www.monreinava.net/ 官方網站]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;蒙萊納瓦聯邦&#039;&#039;&#039;（文化語：&#039;&#039;&#039;Monreinavaská Federace&#039;&#039;&#039;），通稱為&#039;&#039;&#039;蒙萊納瓦&#039;&#039;&#039;（英語：&#039;&#039;&#039;Monreinava&#039;&#039;&#039;）或&#039;&#039;&#039;蒙聯&#039;&#039;&#039;，是一個橫跨歐洲及亞洲之分權自治型、委員會制及內閣制之微主權國家。蒙萊納瓦由一個領地、兩個自由邦及兩個隸屬於[[國家邦聯]]體制下的構成國而構成，首都為[[聯邦首都領地]]。蒙萊納瓦聯邦之國家元首是[[總統評議會]]全體，而非[[總統評議會主席]]或[[蒙萊納瓦聯邦總統|聯邦總統]]。&lt;br /&gt;
&lt;br /&gt;
蒙萊納瓦聯邦政治體制為行政、立法、司法三權分立，由[[蒙萊納瓦聯邦總統|總統]]及兩名[[蒙萊納瓦聯邦副總統|副總統]]組成之[[總統評議會]]作為國家元首並擁有禮儀性國家元首職權，一般情況下，總統評議會全體成員均由合格選舉人直接選舉產生，並且任期為一年，[[蒙萊納瓦聯邦國務總理|國務總理]]是蒙萊納瓦聯邦之政府首腦，依據國民議會之信任動議投票選舉產生，並領導具最高行政權之[[蒙萊納瓦聯邦國務院|國務院]]；蒙萊納瓦聯邦大議會是兩院制立法機構，由直接選舉之[[聯邦主權議會]]及[[蒙萊納瓦國民議會|國民議會]]組成，分別具七席及十三席，任期均為一年；[[蒙萊納瓦聯邦法院|聯邦法院]]為獨立於行政權及立法權之最高司法機關，首席法官及大法官由總統評議會提名後經國民議會同意後任命，另蒙萊納瓦聯邦設立[[蒙萊納瓦憲法法院|憲法法院]]及[[蒙萊納瓦選舉爭議法院|選舉爭議法院]]，保護憲法、民主選舉原則及國民之基本權利。&lt;br /&gt;
&lt;br /&gt;
蒙萊納瓦聯邦在國際外交中扮演活躍之角色，蒙萊納瓦聯邦目前是[[福爾摩沙微國家共同體]]、[[柴可拉夫那協防組織]]及[[明德合作聯盟]]之會員國，並且與[[赫斯維爾公國]]及[[大赫卡忒及里格利亞聯合帝國]]組成[[赫紐羅條約組織]]。&lt;br /&gt;
&lt;br /&gt;
== 歷史 ==&lt;br /&gt;
=== 現代蒙萊納瓦的形成 ===&lt;br /&gt;
2023年5月24日，時科紐瓦與新韓志聯邦與大西威與般咸大公國對等合併，國名維持&#039;&#039;&#039;科紐瓦與新韓志聯邦&#039;&#039;&#039;，原屬瓦倫克爾自由邦管轄之紐克蘭多地區移交由西威拉惹管轄，而合併後所成立之大西威與紐克蘭多具有高度自治權，[[國家邦聯]]概念初步形成；後續在公眾意見及主要黨派之倡議下，隸屬於國家邦聯體制下之[[波爾維亞那]]及[[蒙特高東方共和國]]分別成立。&lt;br /&gt;
&lt;br /&gt;
同年10月，[[第一屆制憲會議選舉]]正式舉行，對於公民之間主要討論之社會議題，主要黨派均具有高度共識；制憲會議起草之憲法草案於同年11月26日獲得公眾批准，蒙萊納瓦聯邦之國家相貌及政治體制獲得重塑，委員會制、議會內閣制及地方分權自治制之國家及政府體制正式被確定，現代蒙萊納瓦正式形成。&lt;br /&gt;
&lt;br /&gt;
=== 多黨制下之政府危機 ===&lt;br /&gt;
{{main|2024年蒙萊納瓦政府危機}}&lt;br /&gt;
&lt;br /&gt;
2024年4月，第二屆國民議會因即將屆滿而舉行[[第三屆國民議會議員選舉]]，在選舉其中，連續執政兩年之國務總理[[李德永]]所屬之政黨[[公民聯盟]]首次未獲第一大黨之地位，而長年在野黨[[蒙萊納瓦保守黨|保守黨]]首次取得第一大黨地位，惟未獲得穩定多數並亦未達到組閣門檻，在詭譎的政治環境下，由[[蒙萊納瓦保守黨|保守黨]]、[[蒙聯維新會]]及[[國民民主黨]]組成之左右派大帳篷聯合政府正式成立，公民聯盟自成立後首次淪為在野黨。&lt;br /&gt;
&lt;br /&gt;
2024年5月，維新會與保守黨之政見理念衝突逐漸激化，由於保守黨強推未獲得政府共識之評議會增額法案，在第一輪總統選舉投票之隔天，蒙聯維新會宣布退出政府，保守黨淪為少數政府，公民聯盟向保守黨提出有條件交換之閣外支持；5月31日，因條件即將到期，保守黨籍國務總理[[莊在安]]宣布辭職，成為蒙萊納瓦聯邦憲政史上總任期最短之國務總理；4日，維新會議員[[林維閎]]被選舉為國務總理，一個由[[蒙聯維新會]]領頭之左中派聯合政府正式成立，此次是維新會成員首次擔任國務總理一職，亦是林維閎第二次擔任國務總理。&lt;br /&gt;
&lt;br /&gt;
2024年6月，[[詮和七年第二次憲法修正複決|第二次憲法複決投票]]正式舉行；於該次複決中，賦予了樞密院憲法地位、恢復[[人民委員會]]之建制、裁撤公眾委員會並將權利捍衛者公署歸編為樞密院機關，同時設立樞密院審計會，該次複決是繼四月之[[詮和七年第一次憲法修正複決|第一次憲法複決投票]]後之第二次憲法複決投票，同時是政治危機發生後之首次公民複決。&lt;br /&gt;
&lt;br /&gt;
== 政治 ==&lt;br /&gt;
{{main|蒙萊納瓦聯邦政府|國家邦聯|國家邦聯協議會}}&lt;br /&gt;
&lt;br /&gt;
=== 國家元首 ===&lt;br /&gt;
{{main|總統評議會|蒙萊納瓦聯邦總統|蒙萊納瓦聯邦副總統|督政|蒙萊納瓦樞密院|國務最高議會}}&lt;br /&gt;
&lt;br /&gt;
=== 行政機構 ===&lt;br /&gt;
{{main|蒙萊納瓦聯邦國務院|蒙萊納瓦聯邦國務總理}}&lt;br /&gt;
&lt;br /&gt;
==== 行政權輔助國家機關 ====&lt;br /&gt;
{{main|人民委員會|人民委員會主席}}&lt;br /&gt;
&lt;br /&gt;
=== 立法機構 ===&lt;br /&gt;
{{main|大議會|大議會常務委員會|聯邦主權議會|蒙萊納瓦國民議會}}&lt;br /&gt;
&lt;br /&gt;
=== 司法機構 ===&lt;br /&gt;
{{main|蒙萊納瓦聯邦法院|蒙萊納瓦憲法法院}}&lt;br /&gt;
&lt;br /&gt;
=== 獨立憲法機構 ===&lt;br /&gt;
{{main|選務委員會|蒙萊納瓦檢察院}}&lt;br /&gt;
&lt;br /&gt;
=== 政黨與選舉 ===&lt;br /&gt;
&lt;br /&gt;
== 外交 ==&lt;br /&gt;
{{main|蒙萊納瓦聯邦外交|蒙萊納瓦駐外機構列表}}&lt;br /&gt;
&lt;br /&gt;
== 法律 ==&lt;br /&gt;
&lt;br /&gt;
== 經濟 ==&lt;br /&gt;
&lt;br /&gt;
== 地理 ==&lt;br /&gt;
=== 領土輪廓 ===&lt;br /&gt;
=== 行政區劃 ===&lt;br /&gt;
&lt;br /&gt;
== 社會文化 ==&lt;br /&gt;
=== 語言 ===&lt;br /&gt;
&lt;br /&gt;
=== 國定節假日 ===&lt;br /&gt;
&lt;br /&gt;
=== 媒體 ===&lt;br /&gt;
&lt;br /&gt;
=== 教育 ===&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;br /&gt;
*[[共和邦聯]]&lt;br /&gt;
*[[國家邦聯]]&lt;br /&gt;
&lt;br /&gt;
== 外部連結 ==&lt;br /&gt;
{{蒙萊納瓦聯邦主題}}&lt;br /&gt;
{{柴約}}&lt;br /&gt;
[[category:國家列表]]&lt;br /&gt;
[[category:共和邦聯]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut&amp;diff=29238</id>
		<title>模組:Shortcut</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut&amp;diff=29238"/>
		<updated>2024-08-05T11:31:30Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{shortcut}}.&lt;br /&gt;
&lt;br /&gt;
-- Set constants&lt;br /&gt;
local CONFIG_MODULE = &#039;Module:Shortcut/config&#039;&lt;br /&gt;
&lt;br /&gt;
-- Load required modules&lt;br /&gt;
local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p._getshortname(frame)&lt;br /&gt;
	return &amp;quot;捷徑&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getshortlink(frame)&lt;br /&gt;
	return &amp;quot;[[微國家百科:捷徑|&amp;quot; .. p._getshortname(frame) .. &amp;quot;]]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getshortlink_policy(frame)&lt;br /&gt;
	return &amp;quot;[[微國家百科:捷徑|方針&amp;quot; .. p._getshortname(frame) .. &amp;quot;]]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function message(msg, ...)&lt;br /&gt;
	return mw.message.newRawMessage(msg, ...):plain()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat)&lt;br /&gt;
	return string.format(&#039;[[%s:%s]]&#039;, mw.site.namespaces[14].name, cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local isCategorized = yesno(options.category) ~= false&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		listItems[i] = frame:expandTemplate{&lt;br /&gt;
			title = &#039;No redirect&#039;,&lt;br /&gt;
			args = {shortcut}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, options.msg)&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;Shortcut/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			shortcutHeading = message(p.getshortlink(frame), nShortcuts)&lt;br /&gt;
			shortcutHeading = frame:preprocess(shortcutHeading)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(options.policy) then&lt;br /&gt;
	    shortcutHeading = p.getshortlink_policy(frame)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutboxplain plainlist noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if options.float == &#039;left&#039; then&lt;br /&gt;
		shortcutList:addClass(&#039;module-shortcutboxplain-left&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&#039;ul&#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&#039;li&#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Shortcut&#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._main(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._ombx(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local isCategorized = yesno(options.category) ~= false&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		listItems[i] = frame:expandTemplate{&lt;br /&gt;
			title = &#039;No redirect&#039;,&lt;br /&gt;
			args = {shortcut}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, options.msg)&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;Shortcut/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			shortcutHeading = message(p.getshortlink(frame), nShortcuts)&lt;br /&gt;
			shortcutHeading = frame:preprocess(shortcutHeading)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-omboxshortcutplain plainlist noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&#039;ul&#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&#039;li&#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ombox(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Shortcut&#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._ombx(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._template(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local isCategorized = yesno(options.category) ~= false&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		listItems[i] = &#039;&amp;amp;#123;&amp;amp;#123;&#039;&lt;br /&gt;
	    	    .. frame:expandTemplate{&lt;br /&gt;
		    	title = &#039;Template_shortcut/link&#039;,&lt;br /&gt;
		    	args = {shortcut}&lt;br /&gt;
		    	}..&#039;&amp;amp;#125;&amp;amp;#125;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, options.msg)&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;Shortcut/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, &#039;Template:&#039;..anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			shortcutHeading = message(cfg[&#039;shortcut-heading&#039;], nShortcuts)&lt;br /&gt;
			shortcutHeading = shortcutHeading&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutboxplain plainlist noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if options.float == &#039;left&#039; then&lt;br /&gt;
		shortcutList:addClass(&#039;module-shortcutboxplain-left&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&#039;ul&#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&#039;li&#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.template(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Shortcut&#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._template(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._ombx_template(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local isCategorized = yesno(options.category) ~= false&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		listItems[i] = &#039;&amp;amp;#123;&amp;amp;#123;&#039;&lt;br /&gt;
	    	    .. frame:expandTemplate{&lt;br /&gt;
		    	title = &#039;Template_shortcut/link&#039;,&lt;br /&gt;
		    	args = {shortcut}&lt;br /&gt;
		    	}..&#039;&amp;amp;#125;&amp;amp;#125;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, options.msg)&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;Shortcut/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, &#039;Template:&#039;..anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			shortcutHeading = message(p.getshortlink(frame), nShortcuts)&lt;br /&gt;
			shortcutHeading = frame:preprocess(shortcutHeading)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-omboxshortcutplain plainlist noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&#039;ul&#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&#039;li&#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ombox_template(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Shortcut&#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._ombx_template(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;diff=29142</id>
		<title>MediaWiki:Gadget-Twinkle.js</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;diff=29142"/>
		<updated>2024-08-04T17:03:54Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * +-------------------------------------------------------------------------+&lt;br /&gt;
 * |                  === WARNING: GLOBAL GADGET FILE ===                    |&lt;br /&gt;
 * |                Changes to this page affect many users.                  |&lt;br /&gt;
 * |           Please discuss changes at [[WT:TW]] before editing.           |&lt;br /&gt;
 * +-------------------------------------------------------------------------+&lt;br /&gt;
 *&lt;br /&gt;
 * Imported from github [https://github.com/azatoth/twinkle]&lt;br /&gt;
 * To update this script from github, you must have a local repository set up. Then&lt;br /&gt;
 * follow the instructions at [https://github.com/azatoth/twinkle/blob/master/README.md].&lt;br /&gt;
 *&lt;br /&gt;
 * ----------&lt;br /&gt;
 *&lt;br /&gt;
 * This is AzaToth&#039;s Twinkle. See [[MP:TW]].&lt;br /&gt;
 * It needs a better header comment than this one.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
//&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var Twinkle = {};&lt;br /&gt;
window.Twinkle = Twinkle;  // allow global access&lt;br /&gt;
&lt;br /&gt;
// for use by custom modules (normally empty)&lt;br /&gt;
Twinkle.initCallbacks = [];&lt;br /&gt;
Twinkle.addInitCallback = function twinkleAddInitCallback(func) {&lt;br /&gt;
	Twinkle.initCallbacks.push(func);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.defaultConfig = {};&lt;br /&gt;
/**&lt;br /&gt;
 * Twinkle.defaultConfig.twinkle and Twinkle.defaultConfig.friendly&lt;br /&gt;
 *&lt;br /&gt;
 * This holds the default set of preferences used by Twinkle. (The |friendly| object holds preferences stored in the FriendlyConfig object.)&lt;br /&gt;
 * It is important that all new preferences added here, especially admin-only ones, are also added to&lt;br /&gt;
 * |Twinkle.config.sections| in twinkleconfig.js, so they are configurable via the Twinkle preferences panel.&lt;br /&gt;
 * For help on the actual preferences, see the comments in twinkleconfig.js.&lt;br /&gt;
 */&lt;br /&gt;
Twinkle.defaultConfig.twinkle = {&lt;br /&gt;
	 // General&lt;br /&gt;
	summaryAd: &amp;quot; ([[MP:TW|TW]])&amp;quot;,&lt;br /&gt;
	deletionSummaryAd: &amp;quot; ([[MP:TW|TW]])&amp;quot;,&lt;br /&gt;
	protectionSummaryAd: &amp;quot; ([[MP:TW|TW]])&amp;quot;,&lt;br /&gt;
	userTalkPageMode: &amp;quot;window&amp;quot;,&lt;br /&gt;
	dialogLargeFont: false,&lt;br /&gt;
	 // Fluff (revert and rollback)&lt;br /&gt;
	openTalkPage: [ &amp;quot;agf&amp;quot;, &amp;quot;norm&amp;quot;, &amp;quot;vand&amp;quot; ],&lt;br /&gt;
	openTalkPageOnAutoRevert: false,&lt;br /&gt;
	markRevertedPagesAsMinor: [ &amp;quot;vand&amp;quot; ],&lt;br /&gt;
	watchRevertedPages: [ &amp;quot;agf&amp;quot;, &amp;quot;norm&amp;quot;, &amp;quot;vand&amp;quot;, &amp;quot;torev&amp;quot; ],&lt;br /&gt;
	offerReasonOnNormalRevert: true,&lt;br /&gt;
	confirmOnFluff: false,&lt;br /&gt;
	showRollbackLinks: [ &amp;quot;diff&amp;quot;, &amp;quot;others&amp;quot; ],&lt;br /&gt;
	 // DI (twinkleimage)&lt;br /&gt;
	notifyUserOnDeli: true,&lt;br /&gt;
	deliWatchPage: &amp;quot;default&amp;quot;,&lt;br /&gt;
	deliWatchUser: &amp;quot;default&amp;quot;,&lt;br /&gt;
	 // PROD&lt;br /&gt;
	watchProdPages: true,&lt;br /&gt;
	prodReasonDefault: &amp;quot;&amp;quot;,&lt;br /&gt;
	logProdPages: false,&lt;br /&gt;
	prodLogPageName: &amp;quot;PROD log&amp;quot;,&lt;br /&gt;
	 // CSD&lt;br /&gt;
	speedyPromptOnG7: false,&lt;br /&gt;
	watchSpeedyPages: [ &amp;quot;g3&amp;quot;, &amp;quot;g5&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot; ],&lt;br /&gt;
	markSpeedyPagesAsPatrolled: true,&lt;br /&gt;
	// these next two should probably be identical by default&lt;br /&gt;
	notifyUserOnSpeedyDeletionNomination:    [ &amp;quot;db&amp;quot;, &amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;, &amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a5&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;, &amp;quot;f1&amp;quot;, &amp;quot;f2&amp;quot;, &amp;quot;f3&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f9&amp;quot;, &amp;quot;f10&amp;quot;, &amp;quot;u3&amp;quot;, &amp;quot;t2&amp;quot;, &amp;quot;t3&amp;quot;, &amp;quot;p1&amp;quot;, &amp;quot;p2&amp;quot; ],&lt;br /&gt;
	welcomeUserOnSpeedyDeletionNotification: [ &amp;quot;db&amp;quot;, &amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;, &amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a5&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;, &amp;quot;f1&amp;quot;, &amp;quot;f2&amp;quot;, &amp;quot;f3&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f9&amp;quot;, &amp;quot;f10&amp;quot;, &amp;quot;u3&amp;quot;, &amp;quot;t2&amp;quot;, &amp;quot;t3&amp;quot;, &amp;quot;p1&amp;quot;, &amp;quot;p2&amp;quot; ],&lt;br /&gt;
	promptForSpeedyDeletionSummary: [ &amp;quot;db&amp;quot;, &amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g6&amp;quot;, &amp;quot;g7&amp;quot;, &amp;quot;g8&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;, &amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a5&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;, &amp;quot;f2&amp;quot;, &amp;quot;f4&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f8&amp;quot;, &amp;quot;f10&amp;quot;, &amp;quot;t2&amp;quot;, &amp;quot;t3&amp;quot;, &amp;quot;p1&amp;quot;, &amp;quot;p2&amp;quot; ],&lt;br /&gt;
	openUserTalkPageOnSpeedyDelete: [ &amp;quot;db&amp;quot;, &amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g5&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;, &amp;quot;a1&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;, &amp;quot;f3&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f9&amp;quot;, &amp;quot;u3&amp;quot;, &amp;quot;t2&amp;quot;, &amp;quot;p1&amp;quot; ],&lt;br /&gt;
	deleteTalkPageOnDelete: false,&lt;br /&gt;
	deleteSysopDefaultToTag: false,&lt;br /&gt;
	speedyWindowHeight: 500,&lt;br /&gt;
	speedyWindowWidth: 800,&lt;br /&gt;
	logSpeedyNominations: false,&lt;br /&gt;
	speedyLogPageName: &amp;quot;CSD log&amp;quot;,&lt;br /&gt;
	noLogOnSpeedyNomination: [ &amp;quot;u1&amp;quot; ],&lt;br /&gt;
	 // Unlink&lt;br /&gt;
	unlinkNamespaces: [ &amp;quot;0&amp;quot;, &amp;quot;100&amp;quot; ],&lt;br /&gt;
	 // Warn&lt;br /&gt;
	defaultWarningGroup: &amp;quot;1&amp;quot;,&lt;br /&gt;
	showSharedIPNotice: true,&lt;br /&gt;
	watchWarnings: true,&lt;br /&gt;
	blankTalkpageOnIndefBlock: false,&lt;br /&gt;
	 // XfD&lt;br /&gt;
	xfdWatchDiscussion: &amp;quot;default&amp;quot;,&lt;br /&gt;
	xfdWatchList: &amp;quot;no&amp;quot;,&lt;br /&gt;
	xfdWatchPage: &amp;quot;default&amp;quot;,&lt;br /&gt;
	xfdWatchUser: &amp;quot;default&amp;quot;,&lt;br /&gt;
	 // Hidden preferences&lt;br /&gt;
	revertMaxRevisions: 50,&lt;br /&gt;
	batchdeleteChunks: 50,&lt;br /&gt;
	batchDeleteMinCutOff: 5,&lt;br /&gt;
	batchMax: 5000,&lt;br /&gt;
	batchProtectChunks: 50,&lt;br /&gt;
	batchProtectMinCutOff: 5,&lt;br /&gt;
	batchundeleteChunks: 50,&lt;br /&gt;
	batchUndeleteMinCutOff: 5,&lt;br /&gt;
	deliChunks: 500,&lt;br /&gt;
	deliMax: 5000,&lt;br /&gt;
	proddeleteChunks: 50&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// now some skin dependent config.&lt;br /&gt;
if (mw.config.get(&amp;quot;skin&amp;quot;) === &#039;vector&#039;) {&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletArea = &#039;right-navigation&#039;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletId   = &#039;p-twinkle&#039;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletName = &#039;TW&#039;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletType = &#039;menu&#039;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletNext = &#039;p-search&#039;;&lt;br /&gt;
} else {&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletArea =  null;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletId   = &#039;p-cactions&#039;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletName = null;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletType = null;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletNext = null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.defaultConfig.friendly = {&lt;br /&gt;
	 // Tag&lt;br /&gt;
	groupByDefault: true,&lt;br /&gt;
	watchTaggedPages: true,&lt;br /&gt;
	markTaggedPagesAsMinor: false,&lt;br /&gt;
	markTaggedPagesAsPatrolled: true,&lt;br /&gt;
	customTagList: [],&lt;br /&gt;
	 // Welcome&lt;br /&gt;
	topWelcomes: false,&lt;br /&gt;
	watchWelcomes: true,&lt;br /&gt;
	welcomeHeading: &amp;quot;Welcome&amp;quot;,&lt;br /&gt;
	insertHeadings: true,&lt;br /&gt;
	insertUsername: true,&lt;br /&gt;
	insertSignature: true,  // sign welcome templates, where appropriate&lt;br /&gt;
	markWelcomesAsMinor: true,&lt;br /&gt;
	quickWelcomeMode: &amp;quot;norm&amp;quot;,&lt;br /&gt;
	quickWelcomeTemplate: &amp;quot;welcome&amp;quot;,&lt;br /&gt;
	maskTemplateInSummary: true,&lt;br /&gt;
	customWelcomeList: [],&lt;br /&gt;
	 // Talkback&lt;br /&gt;
	markTalkbackAsMinor: true,&lt;br /&gt;
	insertTalkbackSignature: true,  // always sign talkback templates&lt;br /&gt;
	talkbackHeading: &amp;quot;Talkback&amp;quot;,&lt;br /&gt;
	adminNoticeHeading: &amp;quot;Notice&amp;quot;,&lt;br /&gt;
	 // Shared&lt;br /&gt;
	markSharedIPAsMinor: true&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.getPref = function twinkleGetPref(name) {&lt;br /&gt;
	var result;&lt;br /&gt;
	if (typeof(Twinkle.prefs) === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; typeof(Twinkle.prefs.twinkle) === &amp;quot;object&amp;quot;) {&lt;br /&gt;
		// look in Twinkle.prefs (twinkleoptions.js)&lt;br /&gt;
		result = Twinkle.prefs.twinkle[name];&lt;br /&gt;
	} else if (typeof(window.TwinkleConfig) === &amp;quot;object&amp;quot;) {&lt;br /&gt;
		// look in TwinkleConfig&lt;br /&gt;
		result = window.TwinkleConfig[name];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (typeof(result) === &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
		return Twinkle.defaultConfig.twinkle[name];&lt;br /&gt;
	}&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.getFriendlyPref = function twinkleGetFriendlyPref(name) {&lt;br /&gt;
	var result;&lt;br /&gt;
	if (typeof(Twinkle.prefs) === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; typeof(Twinkle.prefs.friendly) === &amp;quot;object&amp;quot;) {&lt;br /&gt;
		// look in Twinkle.prefs (twinkleoptions.js)&lt;br /&gt;
		result = Twinkle.prefs.friendly[name];&lt;br /&gt;
	} else if (typeof(window.FriendlyConfig) === &amp;quot;object&amp;quot;) {&lt;br /&gt;
		// look in FriendlyConfig&lt;br /&gt;
		result = window.FriendlyConfig[name];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (typeof(result) === &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
		return Twinkle.defaultConfig.friendly[name];&lt;br /&gt;
	}&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * **************** twAddPortlet() ****************&lt;br /&gt;
 *&lt;br /&gt;
 * Adds a portlet menu to one of the navigation areas on the page.&lt;br /&gt;
 * This is necessarily quite a hack since skins, navigation areas, and&lt;br /&gt;
 * portlet menu types all work slightly different.&lt;br /&gt;
 *&lt;br /&gt;
 * Available navigation areas depend on the skin used.&lt;br /&gt;
 * Monobook:&lt;br /&gt;
 *  &amp;quot;column-one&amp;quot;, outer div class &amp;quot;portlet&amp;quot;, inner div class &amp;quot;pBody&amp;quot;. Existing portlets: &amp;quot;p-cactions&amp;quot;, &amp;quot;p-personal&amp;quot;, &amp;quot;p-logo&amp;quot;, &amp;quot;p-navigation&amp;quot;, &amp;quot;p-search&amp;quot;, &amp;quot;p-interaction&amp;quot;, &amp;quot;p-tb&amp;quot;, &amp;quot;p-coll-print_export&amp;quot;&lt;br /&gt;
 *  Special layout of p-cactions and p-personal through specialized styles.&lt;br /&gt;
 * Vector:&lt;br /&gt;
 *  &amp;quot;mw-panel&amp;quot;, outer div class &amp;quot;portal&amp;quot;, inner div class &amp;quot;body&amp;quot;. Existing portlets/elements: &amp;quot;p-logo&amp;quot;, &amp;quot;p-navigation&amp;quot;, &amp;quot;p-interaction&amp;quot;, &amp;quot;p-tb&amp;quot;, &amp;quot;p-coll-print_export&amp;quot;&lt;br /&gt;
 *  &amp;quot;left-navigation&amp;quot;, outer div class &amp;quot;vectorTabs&amp;quot; or &amp;quot;vectorMenu&amp;quot;, inner div class &amp;quot;&amp;quot; or &amp;quot;menu&amp;quot;. Existing portlets: &amp;quot;p-namespaces&amp;quot;, &amp;quot;p-variants&amp;quot; (menu)&lt;br /&gt;
 *  &amp;quot;right-navigation&amp;quot;, outer div class &amp;quot;vectorTabs&amp;quot; or &amp;quot;vectorMenu&amp;quot;, inner div class &amp;quot;&amp;quot; or &amp;quot;menu&amp;quot;. Existing portlets: &amp;quot;p-views&amp;quot;, &amp;quot;p-cactions&amp;quot; (menu), &amp;quot;p-search&amp;quot;&lt;br /&gt;
 *  Special layout of p-personal portlet (part of &amp;quot;head&amp;quot;) through specialized styles.&lt;br /&gt;
 * Modern:&lt;br /&gt;
 *  &amp;quot;mw_contentwrapper&amp;quot; (top nav), outer div class &amp;quot;portlet&amp;quot;, inner div class &amp;quot;pBody&amp;quot;. Existing portlets or elements: &amp;quot;p-cactions&amp;quot;, &amp;quot;mw_content&amp;quot;&lt;br /&gt;
 *  &amp;quot;mw_portlets&amp;quot; (sidebar), outer div class &amp;quot;portlet&amp;quot;, inner div class &amp;quot;pBody&amp;quot;. Existing portlets: &amp;quot;p-navigation&amp;quot;, &amp;quot;p-search&amp;quot;, &amp;quot;p-interaction&amp;quot;, &amp;quot;p-tb&amp;quot;, &amp;quot;p-coll-print_export&amp;quot;&lt;br /&gt;
 *&lt;br /&gt;
 * @param String navigation -- id of the target navigation area (skin dependant, on vector either of &amp;quot;left-navigation&amp;quot;, &amp;quot;right-navigation&amp;quot;, or &amp;quot;mw-panel&amp;quot;)&lt;br /&gt;
 * @param String id -- id of the portlet menu to create, preferably start with &amp;quot;p-&amp;quot;.&lt;br /&gt;
 * @param String text -- name of the portlet menu to create. Visibility depends on the class used.&lt;br /&gt;
 * @param String type -- type of portlet. Currently only used for the vector non-sidebar portlets, pass &amp;quot;menu&amp;quot; to make this portlet a drop down menu.&lt;br /&gt;
 * @param Node nextnodeid -- the id of the node before which the new item should be added, should be another item in the same list, or undefined to place it at the end.&lt;br /&gt;
 *&lt;br /&gt;
 * @return Node -- the DOM node of the new item (a DIV element) or null&lt;br /&gt;
 */&lt;br /&gt;
function twAddPortlet( navigation, id, text, type, nextnodeid )&lt;br /&gt;
{&lt;br /&gt;
	//sanity checks, and get required DOM nodes&lt;br /&gt;
	var root = document.getElementById( navigation );&lt;br /&gt;
	if ( !root ) {&lt;br /&gt;
		return null;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var item = document.getElementById( id );&lt;br /&gt;
	if (item) {&lt;br /&gt;
		if (item.parentNode &amp;amp;&amp;amp; item.parentNode === root) {&lt;br /&gt;
			return item;&lt;br /&gt;
		}&lt;br /&gt;
		return null;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var nextnode;&lt;br /&gt;
	if (nextnodeid) {&lt;br /&gt;
		nextnode = document.getElementById(nextnodeid);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//verify/normalize input&lt;br /&gt;
	type = (skin === &amp;quot;vector&amp;quot; &amp;amp;&amp;amp; type === &amp;quot;menu&amp;quot; &amp;amp;&amp;amp; (navigation === &amp;quot;left-navigation&amp;quot; || navigation === &amp;quot;right-navigation&amp;quot;)) ? &amp;quot;menu&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
	var outerDivClass;&lt;br /&gt;
	var innerDivClass;&lt;br /&gt;
	switch (skin)&lt;br /&gt;
	{&lt;br /&gt;
		case &amp;quot;vector&amp;quot;:&lt;br /&gt;
			if (navigation !== &amp;quot;portal&amp;quot; &amp;amp;&amp;amp; navigation !== &amp;quot;left-navigation&amp;quot; &amp;amp;&amp;amp; navigation !== &amp;quot;right-navigation&amp;quot;) {&lt;br /&gt;
				navigation = &amp;quot;mw-panel&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			outerDivClass = (navigation === &amp;quot;mw-panel&amp;quot;) ? &amp;quot;portal&amp;quot; : (type === &amp;quot;menu&amp;quot; ? &amp;quot;vectorMenu extraMenu&amp;quot; : &amp;quot;vectorTabs extraMenu&amp;quot;);&lt;br /&gt;
			innerDivClass = (navigation === &amp;quot;mw-panel&amp;quot;) ? &#039;body&#039; : (type === &#039;menu&#039; ? &#039;menu&#039;:&#039;&#039;);&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;quot;modern&amp;quot;:&lt;br /&gt;
			if (navigation !== &amp;quot;mw_portlets&amp;quot; &amp;amp;&amp;amp; navigation !== &amp;quot;mw_contentwrapper&amp;quot;) {&lt;br /&gt;
				navigation = &amp;quot;mw_portlets&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			outerDivClass = &amp;quot;portlet&amp;quot;;&lt;br /&gt;
			innerDivClass = &amp;quot;pBody&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			navigation = &amp;quot;column-one&amp;quot;;&lt;br /&gt;
			outerDivClass = &amp;quot;portlet&amp;quot;;&lt;br /&gt;
			innerDivClass = &amp;quot;pBody&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//Build the DOM elements.&lt;br /&gt;
	var outerDiv = document.createElement( &#039;div&#039; );&lt;br /&gt;
	outerDiv.className = outerDivClass+&amp;quot; emptyPortlet&amp;quot;;&lt;br /&gt;
	outerDiv.id = id;&lt;br /&gt;
	if ( nextnode &amp;amp;&amp;amp; nextnode.parentNode === root ) {&lt;br /&gt;
		root.insertBefore( outerDiv, nextnode );&lt;br /&gt;
	} else {&lt;br /&gt;
		root.appendChild( outerDiv );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var h5 = document.createElement( &#039;h5&#039; );&lt;br /&gt;
	if (type === &#039;menu&#039;) {&lt;br /&gt;
		var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
		span.appendChild( document.createTextNode( text ) );&lt;br /&gt;
		h5.appendChild( span );&lt;br /&gt;
&lt;br /&gt;
		var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
		a.href = &amp;quot;#&amp;quot;;&lt;br /&gt;
		span = document.createElement( &#039;span&#039; );&lt;br /&gt;
		span.appendChild( document.createTextNode( text ) );&lt;br /&gt;
		a.appendChild( span );&lt;br /&gt;
		h5.appendChild( a );&lt;br /&gt;
	} else {&lt;br /&gt;
		h5.appendChild( document.createTextNode( text ) );&lt;br /&gt;
	}&lt;br /&gt;
	outerDiv.appendChild( h5 );&lt;br /&gt;
&lt;br /&gt;
	var innerDiv = document.createElement( &#039;div&#039; ); //not strictly necessary with type vectorTabs, or other skins.&lt;br /&gt;
	innerDiv.className = innerDivClass;&lt;br /&gt;
	outerDiv.appendChild(innerDiv);&lt;br /&gt;
&lt;br /&gt;
	var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
	innerDiv.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
	return outerDiv;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * **************** twAddPortletLink() ****************&lt;br /&gt;
 * Builds a portlet menu if it doesn&#039;t exist yet, and add the portlet link.&lt;br /&gt;
 */&lt;br /&gt;
function twAddPortletLink( href, text, id, tooltip, accesskey, nextnode )&lt;br /&gt;
{&lt;br /&gt;
	if (Twinkle.getPref(&amp;quot;portletArea&amp;quot;) !== null) {&lt;br /&gt;
		twAddPortlet(Twinkle.getPref(&amp;quot;portletArea&amp;quot;), Twinkle.getPref(&amp;quot;portletId&amp;quot;), Twinkle.getPref(&amp;quot;portletName&amp;quot;), Twinkle.getPref(&amp;quot;portletType&amp;quot;), Twinkle.getPref(&amp;quot;portletNext&amp;quot;));&lt;br /&gt;
	}&lt;br /&gt;
	return mw.util.addPortletLink( Twinkle.getPref(&amp;quot;portletId&amp;quot;), href, text, id, tooltip, accesskey, nextnode );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// check if account is experienced enough for more advanced functions&lt;br /&gt;
var twinkleUserAuthorized = userIsInGroup( &#039;autoconfirmed&#039; ) || userIsInGroup( &#039;confirmed&#039; );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** friendlyshared.js: Shared IP tagging module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;Shared&amp;quot;)&lt;br /&gt;
 * Active on:              Existing IP user talk pages&lt;br /&gt;
 * Config directives in:   FriendlyConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.shared = function friendlyshared() {&lt;br /&gt;
	if( mw.config.get(&#039;wgNamespaceNumber&#039;) === 3 &amp;amp;&amp;amp; isIPAddress(mw.config.get(&#039;wgTitle&#039;)) ) {&lt;br /&gt;
		var username = mw.config.get(&#039;wgTitle&#039;).split( &#039;/&#039; )[0].replace( /\&amp;quot;/, &amp;quot;\\\&amp;quot;&amp;quot;); // only first part before any slashes&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Shared IP&amp;quot;, &amp;quot;friendly-shared&amp;quot;, &amp;quot;Shared IP tagging&amp;quot;, &amp;quot;&amp;quot;)).click(function() { Twinkle.shared.callback(username); });&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.shared.callback = function friendlysharedCallback( uid ) {&lt;br /&gt;
	var Window = new SimpleWindow( 600, 400 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Shared IP address tagging&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#shared&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.shared.callback.evaluate );&lt;br /&gt;
&lt;br /&gt;
	form.append( { type:&#039;header&#039;, label:&#039;Shared IP address templates&#039; } );&lt;br /&gt;
	form.append( { type: &#039;radio&#039;, name: &#039;shared&#039;, list: Twinkle.shared.standardList,&lt;br /&gt;
		event: function( e ) {&lt;br /&gt;
			Twinkle.shared.callback.change_shared( e );&lt;br /&gt;
			e.stopPropagation();&lt;br /&gt;
		} } );&lt;br /&gt;
&lt;br /&gt;
	var org = form.append( { type:&#039;field&#039;, label:&#039;Fill in IP address owner/operator, hostname and contact information (if applicable) and hit \&amp;quot;Submit\&amp;quot;&#039; } );&lt;br /&gt;
	org.append( {&lt;br /&gt;
			type: &#039;input&#039;,&lt;br /&gt;
			name: &#039;organization&#039;,&lt;br /&gt;
			label: &#039;Organization name&#039;,&lt;br /&gt;
			disabled: true,&lt;br /&gt;
			tooltip: &#039;Some of these templates support an optional parameter for the organization name that owns/operates the IP address.  The organization name can be entered here for those templates, including wikimarkup if necessary.&#039;&lt;br /&gt;
		}&lt;br /&gt;
	);&lt;br /&gt;
	org.append( {&lt;br /&gt;
			type: &#039;input&#039;,&lt;br /&gt;
			name: &#039;host&#039;,&lt;br /&gt;
			label: &#039;Host name (optional)&#039;,&lt;br /&gt;
			disabled: true,&lt;br /&gt;
			tooltip: &#039;These templates support an optional parameter for the host name.  The host name (for example, proxy.example.com) can be entered here and will be linked by the template.&#039;&lt;br /&gt;
		}&lt;br /&gt;
	);&lt;br /&gt;
	org.append( {&lt;br /&gt;
			type: &#039;input&#039;,&lt;br /&gt;
			name: &#039;contact&#039;,&lt;br /&gt;
			label: &#039;Contact information (only if requested)&#039;,&lt;br /&gt;
			disabled: true,&lt;br /&gt;
			tooltip: &#039;Some of these templates support an optional parameter for the organization\&#039;s contact information.  Use this parameter only if the organization has specifically request that it be added.  This contact information can be entered here for those templates, including wikimarkup if necessary.&#039;&lt;br /&gt;
		}&lt;br /&gt;
	);&lt;br /&gt;
	&lt;br /&gt;
	form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent( result );&lt;br /&gt;
	Window.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.shared.standardList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{shared IP}}: standard shared IP address template&#039;,&lt;br /&gt;
		value: &#039;shared IP&#039;,&lt;br /&gt;
		tooltip: &#039;IP user talk page template that shows helpful information to IP users and those wishing to warn, block or ban them&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{shared IP edu}}: shared IP address template modified for educational institutions&#039;,&lt;br /&gt;
		value: &#039;shared IP edu&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{shared IP corp}}: shared IP address template modified for businesses&#039;,&lt;br /&gt;
		value: &#039;shared IP corp&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{shared IP public}}: shared IP address template modified for public terminals&#039;,&lt;br /&gt;
		value: &#039;shared IP public&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{shared IP gov}}: shared IP address template modified for government agencies or facilities&#039;,&lt;br /&gt;
		value: &#039;shared IP gov&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{dynamicIP}}: shared IP address template modified for organizations with dynamic addressing&#039;,&lt;br /&gt;
		value: &#039;dynamicIP&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{ISP}}: shared IP address template modified for ISP organizations (specifically proxies)&#039;,&lt;br /&gt;
		value: &#039;ISP&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{mobileIP}}: shared IP address template modified for mobile phone companies and their customers&#039;,&lt;br /&gt;
		value: &#039;mobileIP&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.shared.callback.change_shared = function friendlytagCallbackChangeShared(e) {&lt;br /&gt;
	if( e.target.value === &#039;shared IP edu&#039; ) {&lt;br /&gt;
		e.target.form.contact.disabled = false;&lt;br /&gt;
	} else {&lt;br /&gt;
		e.target.form.contact.disabled = true;&lt;br /&gt;
	}&lt;br /&gt;
	e.target.form.organization.disabled=false;&lt;br /&gt;
	e.target.form.host.disabled=false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.shared.callbacks = {&lt;br /&gt;
	main: function( pageobj ) {&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
		var pageText = pageobj.getPageText();&lt;br /&gt;
		var found = false;&lt;br /&gt;
		var text = &#039;{{&#039;;&lt;br /&gt;
&lt;br /&gt;
		for( var i=0; i &amp;lt; Twinkle.shared.standardList.length; i++ ) {&lt;br /&gt;
			tagRe = new RegExp( &#039;(\\{\\{&#039; + Twinkle.shared.standardList[i].value + &#039;(\\||\\}\\}))&#039;, &#039;im&#039; );&lt;br /&gt;
			if( tagRe.exec( pageText ) ) {&lt;br /&gt;
				Status.warn( &#039;Info&#039;, &#039;Found {{&#039; + Twinkle.shared.standardList[i].value + &#039;}} on the user\&#039;s talk page already...aborting&#039; );&lt;br /&gt;
				found = true;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( found ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		Status.info( &#039;Info&#039;, &#039;Will add the shared IP address template to the top of the user\&#039;s talk page.&#039; );&lt;br /&gt;
		text += params.value + &#039;|&#039; + params.organization;&lt;br /&gt;
		if( params.value === &#039;shared IP edu&#039; &amp;amp;&amp;amp; params.contact !== &#039;&#039;) {&lt;br /&gt;
			text += &#039;|&#039; + params.contact;&lt;br /&gt;
		}&lt;br /&gt;
		if( params.host !== &#039;&#039; ) {&lt;br /&gt;
			text += &#039;|host=&#039; + params.host;&lt;br /&gt;
		}&lt;br /&gt;
		text += &#039;}}\n\n&#039;;&lt;br /&gt;
&lt;br /&gt;
		var summaryText = &#039;Added {{[[Template:&#039; + params.value + &#039;|&#039; + params.value + &#039;]]}} template.&#039;;&lt;br /&gt;
		pageobj.setPageText(text + pageText);&lt;br /&gt;
		pageobj.setEditSummary(summaryText + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
		pageobj.setMinorEdit(Twinkle.getFriendlyPref(&#039;markSharedIPAsMinor&#039;));&lt;br /&gt;
		pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
		pageobj.save();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.shared.callback.evaluate = function friendlysharedCallbackEvaluate(e) {&lt;br /&gt;
	var shared = e.target.getChecked( &#039;shared&#039; );&lt;br /&gt;
	if( !shared || shared.length &amp;lt;= 0 ) {&lt;br /&gt;
		alert( &#039;You must select a shared IP address template to use!&#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	var value = shared[0];&lt;br /&gt;
	&lt;br /&gt;
	if( e.target.organization.value === &#039;&#039;) {&lt;br /&gt;
		alert( &#039;You must input an organization for the {{&#039; + value + &#039;}} template!&#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	var params = {&lt;br /&gt;
		value: value,&lt;br /&gt;
		organization: e.target.organization.value,&lt;br /&gt;
		host: e.target.host.value,&lt;br /&gt;
		contact: e.target.contact.value&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( e.target );&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Tagging complete, reloading talk page in a few seconds&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;User talk page modification&amp;quot;);&lt;br /&gt;
	wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
	wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
	wikipedia_page.load(Twinkle.shared.callbacks.main);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** friendlytag.js: Tag module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;Tag&amp;quot;)&lt;br /&gt;
 * Active on:              Existing articles, all redirects&lt;br /&gt;
 * Config directives in:   FriendlyConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag = function friendlytag() {&lt;br /&gt;
	if( QueryString.exists( &#039;redirect&#039; ) &amp;amp;&amp;amp; QueryString.get( &#039;redirect&#039; ) === &#039;no&#039; &amp;amp;&amp;amp; $(&amp;quot;span.redirectText&amp;quot;).length &amp;gt; 0 ) {&lt;br /&gt;
		Twinkle.tag.isRedirect = true;&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Tag&amp;quot;, &amp;quot;friendly-tag&amp;quot;, &amp;quot;Tag redirect&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.tag.callback);&lt;br /&gt;
	} else if( mw.config.get(&#039;wgNamespaceNumber&#039;) !== 0 || !mw.config.get(&#039;wgCurRevisionId&#039;) ) {&lt;br /&gt;
		return;&lt;br /&gt;
	} else {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Tag&amp;quot;, &amp;quot;friendly-tag&amp;quot;, &amp;quot;Add maintenance tags to article&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.tag.callback);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag.callback = function friendlytagCallback( uid ) {&lt;br /&gt;
	var Window = new SimpleWindow( 630, 400 );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	// anyone got a good policy/guideline/info page/instructional page link??&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#tag&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.tag.callback.evaluate );&lt;br /&gt;
&lt;br /&gt;
	if( !Twinkle.tag.isRedirect ) {&lt;br /&gt;
		Window.setTitle( &amp;quot;Article maintenance tagging&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
		form.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Group into {{multiple issues}} if possible&#039;,&lt;br /&gt;
						value: &#039;group&#039;,&lt;br /&gt;
						name: &#039;group&#039;,&lt;br /&gt;
						tooltip: &#039;If applying three or more templates supported by {{multiple issues}} and this box is checked, all supported templates will be grouped into a single {{multiple issues}} template.&#039;,&lt;br /&gt;
						checked: Twinkle.getFriendlyPref(&#039;groupByDefault&#039;)&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			}&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
		form.append( { type:&#039;header&#039;, label:&#039;Maintenance templates&#039; } );&lt;br /&gt;
		form.append( { type:&#039;checkbox&#039;, name: &#039;maintenance&#039;, list: Twinkle.tag.maintenanceList } );&lt;br /&gt;
&lt;br /&gt;
		form.append( { type:&#039;header&#039;, label:&#039;Problem templates&#039; } );&lt;br /&gt;
		form.append( { type:&#039;checkbox&#039;, name: &#039;problem&#039;, list: Twinkle.tag.problemList } );&lt;br /&gt;
&lt;br /&gt;
		form.append( { type:&#039;header&#039;, label:&#039;Notice templates&#039; } );&lt;br /&gt;
		form.append( { type:&#039;checkbox&#039;, name: &#039;notice&#039;, list: Twinkle.tag.noticeList } );&lt;br /&gt;
&lt;br /&gt;
		if( Twinkle.getFriendlyPref(&#039;customTagList&#039;).length ) {&lt;br /&gt;
			form.append( { type:&#039;header&#039;, label:&#039;Custom templates&#039; } );&lt;br /&gt;
			form.append( { type: &#039;checkbox&#039;, name: &#039;custom&#039;, list: Twinkle.getFriendlyPref(&#039;customTagList&#039;) } );&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		Window.setTitle( &amp;quot;Redirect tagging&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
		form.append( { type:&#039;header&#039;, label:&#039;Spelling, misspelling, tense and capitalization templates&#039; } );&lt;br /&gt;
		form.append( { type:&#039;checkbox&#039;, name: &#039;spelling&#039;, list: Twinkle.tag.spellingList } );&lt;br /&gt;
&lt;br /&gt;
		form.append( { type:&#039;header&#039;, label:&#039;Alternative name templates&#039; } );&lt;br /&gt;
		form.append( { type:&#039;checkbox&#039;, name: &#039;alternative&#039;, list: Twinkle.tag.alternativeList } );&lt;br /&gt;
&lt;br /&gt;
		form.append( { type:&#039;header&#039;, label:&#039;Miscellaneous and administrative redirect templates&#039; } );&lt;br /&gt;
		form.append( { type:&#039;checkbox&#039;, name: &#039;administrative&#039;, list: Twinkle.tag.administrativeList } );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent( result );&lt;br /&gt;
	Window.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag.maintenanceList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{allplot}}: article is almost entirely a plot summary&#039;,&lt;br /&gt;
		value: &#039;allplot&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{catimprove}}: article may require additional categories.&#039;,&lt;br /&gt;
		value: &#039;catimprove&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{cleanup}}: article may require cleanup&#039;,&lt;br /&gt;
		value: &#039;cleanup&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{confusing}}: article may be confusing or unclear&#039;,&lt;br /&gt;
		value: &#039;confusing&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{copyedit}}: article needs copy editing for grammar, style, cohesion, tone, and/or spelling&#039;,&lt;br /&gt;
		value: &#039;copyedit&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{citation style}}: article has unclear or inconsistent inline citations&#039;,&lt;br /&gt;
		value: &#039;citation style&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{deadend}}: article has few or no links to other articles&#039;,&lt;br /&gt;
		value: &#039;deadend&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{essay-like}}: article is written like an essay and needs cleanup&#039;,&lt;br /&gt;
		value: &#039;essay-like&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{expert}}: article needs attention from an expert on the subject&#039;,&lt;br /&gt;
		value: &#039;expert&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{fansite}}: article  resembles a fansite&#039;,&lt;br /&gt;
		value: &#039;fansite&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{in-universe}}: article subject is fictional and needs rewriting from a non-fictional perspective&#039;,&lt;br /&gt;
		value: &#039;in-universe&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{lead missing}}: article has no lead section and one should be written&#039;,&lt;br /&gt;
		value: &#039;lead missing&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{lead too long}}: article lead section is too long and should be shortened&#039;,&lt;br /&gt;
		value: &#039;lead too long&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{lead too short}}: article lead section is too short and should be expanded&#039;,&lt;br /&gt;
		value: &#039;lead too short&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{lead rewrite}}: article lead section needs to be rewritten to comply with guidelines&#039;,&lt;br /&gt;
		value: &#039;lead rewrite&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{linkrot}}: article uses bare URLs for references, which are prone to link rot&#039;,&lt;br /&gt;
		value: &#039;linkrot&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{merge}}: article should be merged with another given article&#039;,&lt;br /&gt;
		value: &#039;merge&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{merge from}}: another given article should be merged into this one&#039;,&lt;br /&gt;
		value: &#039;merge from&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{merge to}}: article should be merged into another given article&#039;,&lt;br /&gt;
		value: &#039;merge to&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{morefootnotes}}: article has some references, but insufficient in-text citations&#039;,&lt;br /&gt;
		value: &#039;morefootnotes&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{nofootnotes}}: article has references, but no in-text citations&#039;,&lt;br /&gt;
		value: &#039;nofootnotes&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{notenglish}}: article is written in a language other than English and needs translation&#039;,&lt;br /&gt;
		value: &#039;notenglish&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{orphan}}: article has few or no other articles that link to it&#039;,&lt;br /&gt;
		value: &#039;orphan&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{plot}}: plot summary in article is too long&#039;,&lt;br /&gt;
		value: &#039;plot&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{prose}}: article is in a list format that may be better presented using prose&#039;,&lt;br /&gt;
		value: &#039;prose&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{pov-check}}: nominate article to be checked for neutrality&#039;,&lt;br /&gt;
		value: &#039;pov-check&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{sections}}: article needs to be broken into sections&#039;,&lt;br /&gt;
		value: &#039;sections&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{tense}}: article is written in an incorrect tense&#039;,&lt;br /&gt;
		value: &#039;tense&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{tone}}: tone of article is not appropriate&#039;,&lt;br /&gt;
		value: &#039;tone&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{uncategorized}}: article is uncategorized&#039;,&lt;br /&gt;
		value: &#039;uncategorized&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{verylong}}: article is too long&#039;,&lt;br /&gt;
		value: &#039;verylong&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{wikify}}: article needs to be wikified&#039;,&lt;br /&gt;
		value: &#039;wikify&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag.problemList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{advert}}: article is written like an advertisement&#039;,&lt;br /&gt;
		value: &#039;advert&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{autobiography}}: article is an autobiography and may not be of NPOV&#039;,&lt;br /&gt;
		value: &#039;autobiography&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{close paraphrase}}: article contains close paraphrasing of a non-free copyrighted source&#039;,&lt;br /&gt;
		value: &#039;close paraphrase&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{coi}}: article creator or major contributor may have a conflict of interest&#039;,&lt;br /&gt;
		value: &#039;coi&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{context}}: article provides insufficient context&#039;,&lt;br /&gt;
		value: &#039;context&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{copypaste}}: article appears to have been copied and pasted from a source&#039;,&lt;br /&gt;
		value: &#039;copypaste&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{disputed}}: article has questionable factual accuracy&#039;,&lt;br /&gt;
		value: &#039;disputed&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{external links}}: article\&#039;s external links may not follow content policies or guidelines&#039;,&lt;br /&gt;
		value: &#039;external links&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{globalize}}: article may not represent a worldwide view of the subject&#039;,&lt;br /&gt;
		value: &#039;globalize&#039;,&lt;br /&gt;
		subgroup: {&lt;br /&gt;
			name: &#039;globalize&#039;,&lt;br /&gt;
			type: &#039;select&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{globalize}}: article may not represent a worldwide view of the subject&amp;quot;,&lt;br /&gt;
					value: &amp;quot;globalize&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;Region-specific {{globalize}} subtemplates&amp;quot;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Australia}}: article deals primarily with the Australian viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Australia&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Belgium}}: article deals primarily with the Belgian viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Belgium&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Canada}}: article deals primarily with the Canadian viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Canada&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Common law}}: article deals primarily with the viewpoint of common law countries&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Common law&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Eng}}: article deals primarily with the English-speaking viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Eng&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Europe}}: article deals primarily with the European viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Europe&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/France}}: article deals primarily with the French viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/France&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Germany}}: article deals primarily with the German viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Germany&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Greece}}: article deals primarily with the Greek viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Greece&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Luxembourg}}: article deals primarily with the Luxembourgish viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Luxembourg&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Netherlands}}: article deals primarily with the Dutch viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Netherlands&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/North America}}: article deals primarily with the North American viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/North America&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Northern}}: article deals primarily with the northern hemisphere viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Northern&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Russia}}: article deals primarily with the Russian viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Russia&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/Southern}}: article deals primarily with the southern hemisphere viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/Southern&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/UK}}: article deals primarily with the British viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/UK&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/UK and Canada}}: article deals primarily with the British and Canadian viewpoints&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/UK and Canada&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label: &amp;quot;{{globalize/USA}}: article deals primarily with the American viewpoint&amp;quot;,&lt;br /&gt;
							value: &amp;quot;globalize/USA&amp;quot;&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{hoax}}: article may be a complete hoax&#039;,&lt;br /&gt;
		value: &#039;hoax&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{non-free}}: article may contain excessive or improper use of copyrighted materials&#039;,&lt;br /&gt;
		value: &#039;non-free&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{notability}}: article\&#039;s subject may not meet the notability guideline&#039;,&lt;br /&gt;
		value: &#039;notability&#039;,&lt;br /&gt;
		subgroup: {&lt;br /&gt;
			name: &#039;notability&#039;,&lt;br /&gt;
			type: &#039;select&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability}}: article\&#039;s subject may not meet the notability guideline&amp;quot;,&lt;br /&gt;
					value: &amp;quot;none&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Academics}}: notability guideline for academics&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Academics&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Biographies}}: notability guideline for biographies&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Biographies&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Books}}: notability guideline for books&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Books&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Companies}}: notability guideline for companies and organizations&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Companies&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Episode}}: notability guideline for television episodes&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Episode&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Fiction}}: notability guideline for fiction&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Fiction&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Films}}: notability guideline for films&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Films&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Institutions}}: synonym of \&amp;quot;Companies\&amp;quot;&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Institutions&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Music}}: notability guideline for music&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Music&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Neologisms}}: notability guideline for neologisms&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Neologisms&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Numbers}}: notability guideline for numbers&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Numbers&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Organizations}}: synonym of \&amp;quot;Companies\&amp;quot;&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Organizations&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Products}}: notability guideline for products and services&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Products&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;quot;{{notability|Web}}: notability guideline for web content&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Web&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{npov}}: article does not maintain a neutral point of view&#039;,&lt;br /&gt;
		value: &#039;npov&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{one source}}: article relies largely or entirely upon a single source&#039;,&lt;br /&gt;
		value: &#039;one source&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{original research}}: article has original research or unverified claims&#039;,&lt;br /&gt;
		value: &#039;original research&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{overcoverage}}: Examples and perspectives in the article might have an extensive bias or disproportional coverage towards one or more specific regions&#039;,&lt;br /&gt;
		value: &#039;overcoverage&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{peacock}}: article may contain peacock terms that promotes the subject in a subjective manner without adding information&#039;,&lt;br /&gt;
		value: &#039;peacock&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{primarysources}}: article needs reliable, third-party sources&#039;,&lt;br /&gt;
		value: &#039;primarysources&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &amp;quot;{{overdetailed}}: article contains an excessive amount of intricate detail&amp;quot;,&lt;br /&gt;
		value: &amp;quot;overdetailed&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &amp;quot;{{recentism}}: article is slanted towards recent events&amp;quot;,&lt;br /&gt;
		value: &amp;quot;recentism&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{refimprove}}: article needs additional references or sources for verification&#039;,&lt;br /&gt;
		value: &#039;refimprove&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{refimproveBLP}}: BLP article needs additional references or sources for verification&#039;,&lt;br /&gt;
		value: &#039;refimproveBLP&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{self-published}}: article may contain improper references to self-published sources&#039;,&lt;br /&gt;
		value: &#039;self-published&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{synthesis}}: article may contain unpublished synthesis of published material that conveys unattributable ideas&#039;,&lt;br /&gt;
		value: &#039;synthesis&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &amp;quot;{{toofewopinions}}: article may not include all significant viewpoints&amp;quot;,&lt;br /&gt;
		value: &amp;quot;toofewopinions&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{unencyclopedic}}: article contains unencyclopedic material&#039;,&lt;br /&gt;
		value: &#039;unencyclopedic&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{unreferenced}}: article has no references at all&#039;,&lt;br /&gt;
		value: &#039;unreferenced&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{unreferencedBLP}}: BLP article has no references at all&#039;,&lt;br /&gt;
		value: &#039;unreferencedBLP&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{update}}: article information is out of date&#039;,&lt;br /&gt;
		value: &#039;update&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{weasel}}: article quality may be compromised by the use of weasel words&#039;,&lt;br /&gt;
		value: &#039;weasel&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag.noticeList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{goceinuse}}: article is currently undergoing a major copy edit by the Guild of Copy Editors&#039;,&lt;br /&gt;
		value: &#039;goceinuse&#039; },&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{inuse}}: article is undergoing a major edit for a short while&#039;,&lt;br /&gt;
		value: &#039;inuse&#039; },&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{new unreviewed article}}: mark article for later review&#039;,&lt;br /&gt;
		value: &#039;new unreviewed article&#039; },&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{underconstruction}}: article is currently in the middle of an expansion or major revamping&#039;,&lt;br /&gt;
		value: &#039;underconstruction&#039; }&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag.spellingList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from abbreviation}}: redirect from a title with an abbreviation&#039;,&lt;br /&gt;
		value: &#039;R from abbreviation&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R to list entry}}: redirect to a \&amp;quot;list of minor entities\&amp;quot;-type article which is a collection of brief descriptions for subjects not notable enough to have separate articles&#039;,&lt;br /&gt;
		value: &#039;R to list entry&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R to section}}: sames as {{R to list entry}}, but when list is more sectionlike in organization, such as list of fictional characters in a fictional universe.&#039;,&lt;br /&gt;
		value: &#039;R to section&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from misspelling}}: redirect from a misspelling or typographical error&#039;,&lt;br /&gt;
		value: &#039;R from misspelling&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from alternative spelling}}: redirect from a title with a different spelling&#039;,&lt;br /&gt;
		value: &#039;R from alternative spelling&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from plural}}: redirect from a plural word to the singular equivalent&#039;,&lt;br /&gt;
		value: &#039;R from plural&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from related word}}: redirect from a related word&#039;,&lt;br /&gt;
		value: &#039;R from related word&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R with possibilities}}: redirect from a title for a topic more detailed than what is currently provided on the target page, or section of that page, hence something which can and should be expanded&#039;,&lt;br /&gt;
		value: &#039;R with possibilities&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from member}}: redirect from a person who is a member of a group to more general related topics, such as the group, organization, ensemble or team that he or she belongs to&#039;,&lt;br /&gt;
		value: &#039;R from member&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from other capitalisation}}: redirect from a title with another method of capitalisation&#039;,&lt;br /&gt;
		value: &#039;R from other capitalisation&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag.alternativeList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from alternative name}}: redirect from a title that is another name, a pseudonym, a nickname, or a synonym&#039;,&lt;br /&gt;
		value: &#039;R from alternative name&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from full name}}: redirect from a title that is a complete or more complete name&#039;,&lt;br /&gt;
		value: &#039;R from full name&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from surname}}: redirect from a title that is a surname&#039;,&lt;br /&gt;
		value: &#039;R from surname&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from historic name}}: redirect from a title that is another name, a pseudonym, a nickname, or a synonym that has a significant historic past as a region, state, principate\&#039;s holding, city, city-state or such, but which region has been subsumed into a modern era municipality, district or state, or otherwise suffered from a name change over time&#039;,&lt;br /&gt;
		value: &#039;R from historic name&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from scientific name}}: redirect from the scientific name to the common name&#039;,&lt;br /&gt;
		value: &#039;R from scientific name&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R to scientific name}}: redirect from the common name to the scientific name&#039;,&lt;br /&gt;
		value: &#039;R to scientific name&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from name and country}}: redirect from the specific name to the briefer name&#039;,&lt;br /&gt;
		value: &#039;R from name and country&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from alternative language}}: redirect from an English name to a name in another language, or vice-versa&#039;,&lt;br /&gt;
		value: &#039;R from alternative language&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from ASCII}}: redirect from a title in basic ASCII to the formal article title, with differences that are not diacritical marks (accents, umlauts, etc.)&#039;,&lt;br /&gt;
		value: &#039;R from ASCII&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from title without diacritics}}: redirect to the article title with diacritical marks (accents, umlauts, etc.)&#039;,&lt;br /&gt;
		value: &#039;R from title without diacritics&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag.administrativeList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from merge}}: redirect from a merged page in order to preserve its edit history&#039;,&lt;br /&gt;
		value: &#039;R from merge&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R to disambiguation page}}: redirect to a disambiguation page&#039;,&lt;br /&gt;
		value: &#039;R to disambiguation page&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from duplicated article}}: redirect to a similar article in order to preserve its edit history&#039;,&lt;br /&gt;
		value: &#039;R from duplicated article&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R to decade}}: redirect from a year to the decade article&#039;,&lt;br /&gt;
		value: &#039;R to decade&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from shortcut}}: redirect from a Wikipedia shortcut&#039;,&lt;br /&gt;
		value: &#039;R from shortcut&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from CamelCase}}: redirect from a CamelCase title&#039;,&lt;br /&gt;
		value: &#039;R from CamelCase&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from EXIF}}: redirect of a wikilink created from JPEG EXIF information (i.e. the \&amp;quot;metadata\&amp;quot; section on some image description pages)&#039;,&lt;br /&gt;
		value: &#039;R from EXIF&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{R from school}}: redirect from a school article that had very little information&#039;,&lt;br /&gt;
		value: &#039;R from school&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
// Set to true if template can be grouped into {{articleissues}}&lt;br /&gt;
Twinkle.tag.groupHash = {&lt;br /&gt;
	&#039;3O&#039;: true,&lt;br /&gt;
	&#039;advert&#039;: true,&lt;br /&gt;
	&#039;autobiography&#039;: true,&lt;br /&gt;
	&#039;biased&#039;: true,&lt;br /&gt;
	&#039;blpdispute&#039;: true,&lt;br /&gt;
	&#039;BLPrefimprove&#039;: true,&lt;br /&gt;
	&#039;BLPsources&#039;: true,&lt;br /&gt;
	&#039;BLP sources&#039;: true,&lt;br /&gt;
	&#039;BLPunsourced&#039;: true,&lt;br /&gt;
	&#039;BLPunreferenced&#039;: true,&lt;br /&gt;
	&#039;BLPunref&#039;: true,&lt;br /&gt;
	&#039;citations missing&#039;: true,&lt;br /&gt;
	&#039;citationstyle&#039;: true,&lt;br /&gt;
	&#039;citecheck&#039;: true,&lt;br /&gt;
	&#039;cleanup&#039;: true,&lt;br /&gt;
	&#039;COI&#039;: true,&lt;br /&gt;
	&#039;coi&#039;: true,&lt;br /&gt;
	&#039;colloquial&#039;: true,&lt;br /&gt;
	&#039;confusing&#039;: true,&lt;br /&gt;
	&#039;context&#039;: true,&lt;br /&gt;
	&#039;contradict&#039;: true,&lt;br /&gt;
	&#039;copyedit&#039;: true,&lt;br /&gt;
	&#039;citation style&#039;: true,&lt;br /&gt;
	&#039;criticisms&#039;: true,&lt;br /&gt;
	&#039;crystal&#039;: true,&lt;br /&gt;
	&#039;deadend&#039;: true,&lt;br /&gt;
	&#039;disputed&#039;: true,&lt;br /&gt;
	&#039;essay&#039;: true,&lt;br /&gt;
	&#039;essay-like&#039;: true,&lt;br /&gt;
	&#039;examplefarm&#039;: true,&lt;br /&gt;
	&#039;expert&#039;: false,&lt;br /&gt;
	&#039;external links&#039;: true,&lt;br /&gt;
	&#039;fancruft&#039;: true,&lt;br /&gt;
	&#039;fansite&#039;: true,&lt;br /&gt;
	&#039;fiction&#039;: true,&lt;br /&gt;
	&#039;gameguide&#039;: true,&lt;br /&gt;
	&#039;globalize&#039;: true,&lt;br /&gt;
	&#039;grammar&#039;: true,&lt;br /&gt;
	&#039;histinfo&#039;: true,&lt;br /&gt;
	&#039;hoax&#039;: true,&lt;br /&gt;
	&#039;howto&#039;: true,&lt;br /&gt;
	&#039;importance&#039;: true,&lt;br /&gt;
	&#039;inappropriate person&#039;: true,&lt;br /&gt;
	&#039;incomplete&#039;: true,&lt;br /&gt;
	&#039;lead missing&#039;: true,&lt;br /&gt;
	&#039;lead rewrite&#039;: true,&lt;br /&gt;
	&#039;lead too long&#039;: true,&lt;br /&gt;
	&#039;lead too short&#039;: true,&lt;br /&gt;
	&#039;in-universe&#039;: true,&lt;br /&gt;
	&#039;jargon&#039;: true,&lt;br /&gt;
	&#039;laundry&#039;: true,&lt;br /&gt;
	&#039;laundrylists&#039;: true,&lt;br /&gt;
	&#039;likeresume&#039;: true,&lt;br /&gt;
	&#039;long&#039;: true,&lt;br /&gt;
	&#039;newsrelease&#039;: true,&lt;br /&gt;
	&#039;notability&#039;: true,&lt;br /&gt;
	&#039;notable&#039;: true,&lt;br /&gt;
	&#039;NPOV&#039;: true,&lt;br /&gt;
	&#039;npov&#039;: true,&lt;br /&gt;
	&#039;one source&#039;: true,&lt;br /&gt;
	&#039;OR&#039;: true,&lt;br /&gt;
	&#039;or&#039;: true,&lt;br /&gt;
	&#039;original research&#039;: true,&lt;br /&gt;
	&#039;orphan&#039;: true,&lt;br /&gt;
	&#039;out of date&#039;: true,&lt;br /&gt;
	&#039;peacock&#039;: true,&lt;br /&gt;
	&#039;plot&#039;: true,&lt;br /&gt;
	&#039;POV&#039;: true,&lt;br /&gt;
	&#039;pov&#039;: true,&lt;br /&gt;
	&#039;primarysources&#039;: true,&lt;br /&gt;
	&#039;prose&#039;: true,&lt;br /&gt;
	&#039;proseline&#039;: true,&lt;br /&gt;
	&#039;quotefarm&#039;: true,&lt;br /&gt;
	&#039;recentism&#039;: true,&lt;br /&gt;
	&#039;refimprove&#039;: true,&lt;br /&gt;
	&#039;refimproveBLP&#039;: true,&lt;br /&gt;
	&#039;restructure&#039;: true,&lt;br /&gt;
	&#039;review&#039;: true,&lt;br /&gt;
	&#039;rewrite&#039;: true,&lt;br /&gt;
	&#039;roughtranslation&#039;: true,&lt;br /&gt;
	&#039;sections&#039;: true,&lt;br /&gt;
	&#039;self-published&#039;: true,&lt;br /&gt;
	&#039;spam&#039;: true,&lt;br /&gt;
	&#039;story&#039;: true,&lt;br /&gt;
	&#039;synthesis&#039;: true,&lt;br /&gt;
	&#039;technical&#039;: true,&lt;br /&gt;
	&#039;tone&#039;: true,&lt;br /&gt;
	&#039;toolong&#039;: true,&lt;br /&gt;
	&#039;tooshort&#039;: true,&lt;br /&gt;
	&#039;travelguide&#039;: true,&lt;br /&gt;
	&#039;trivia&#039;: true,&lt;br /&gt;
	&#039;unbalanced&#039;: true,&lt;br /&gt;
	&#039;unencyclopedic&#039;: true,&lt;br /&gt;
	&#039;unref&#039;: true,&lt;br /&gt;
	&#039;unreferenced&#039;: true,&lt;br /&gt;
	&#039;unrefBLP&#039;: true,&lt;br /&gt;
	&#039;unreferencedBLP&#039;: true,&lt;br /&gt;
	&#039;update&#039;: true,&lt;br /&gt;
	&#039;verylong&#039;: true,&lt;br /&gt;
	&#039;weasel&#039;: true,&lt;br /&gt;
	&#039;wikify&#039;: true&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag.callbacks = {&lt;br /&gt;
	main: function( pageobj ) {&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
		var tagRe, tagText = &#039;&#039;, summaryText = &#039;Added&#039;;&lt;br /&gt;
		var tags = [], groupableTags = [];&lt;br /&gt;
&lt;br /&gt;
		//Remove tags that become superfluous with this action&lt;br /&gt;
		var pageText = pageobj.getPageText().replace(/\{\{\s*(New unreviewed article|Userspace draft)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/ig, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		var i;&lt;br /&gt;
		if( !Twinkle.tag.isRedirect ) {&lt;br /&gt;
			// Check for preexisting tags and separate tags into groupable and non-groupable arrays&lt;br /&gt;
			for( i = 0; i &amp;lt; params.tags.length; i++ ) {&lt;br /&gt;
				tagRe = new RegExp( &#039;(\\{\\{&#039; + params.tags[i] + &#039;(\\||\\}\\}))&#039;, &#039;im&#039; );&lt;br /&gt;
				if( !tagRe.exec( pageText ) ) {&lt;br /&gt;
					if( Twinkle.tag.groupHash[ params.tags[i] ] &amp;amp;&amp;amp; &lt;br /&gt;
							(params.tags[i] !== &#039;globalize&#039; || params.globalizeSubcategory === &#039;globalize&#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
							(params.tags[i] !== &#039;notability&#039; || params.notabilitySubcategory === &#039;none&#039; )) {&lt;br /&gt;
						// don&#039;t add to multipleissues for globalize/notability subcats&lt;br /&gt;
						groupableTags = groupableTags.concat( params.tags[i] );&lt;br /&gt;
					} else {&lt;br /&gt;
						tags = tags.concat( params.tags[i] );&lt;br /&gt;
					}&lt;br /&gt;
				} else {&lt;br /&gt;
					Status.info( &#039;Info&#039;, &#039;Found {{&#039; + params.tags[i] +&lt;br /&gt;
						&#039;}} on the article already...excluding&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if( params.group &amp;amp;&amp;amp; groupableTags.length &amp;gt;= 3 ) {&lt;br /&gt;
				Status.info( &#039;Info&#039;, &#039;Grouping supported tags into {{multiple issues}}&#039; );&lt;br /&gt;
&lt;br /&gt;
				groupableTags.sort();&lt;br /&gt;
				tagText += &#039;{{multiple issues&#039;;&lt;br /&gt;
				summaryText += &#039; {{[[Template:multiple issues|multiple issues]]}} with parameters&#039;;&lt;br /&gt;
				for( i = 0; i &amp;lt; groupableTags.length; i++ ) {&lt;br /&gt;
					tagText += &#039;|&#039; + groupableTags[i] +&lt;br /&gt;
						&#039;={{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}&#039;;&lt;br /&gt;
&lt;br /&gt;
					if( i === (groupableTags.length - 1) ) {&lt;br /&gt;
						summaryText += &#039; and&#039;;&lt;br /&gt;
					} else if ( i &amp;lt; (groupableTags.length - 1) &amp;amp;&amp;amp; i &amp;gt; 0 ) {&lt;br /&gt;
						summaryText += &#039;,&#039;;&lt;br /&gt;
					}&lt;br /&gt;
					summaryText += &#039; &#039; + groupableTags[i];&lt;br /&gt;
				}&lt;br /&gt;
				tagText += &#039;}}\n&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				tags = tags.concat( groupableTags );&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			// Check for pre-existing tags&lt;br /&gt;
			for( i = 0; i &amp;lt; params.tags.length; i++ ) {&lt;br /&gt;
				tagRe = new RegExp( &#039;(\\{\\{&#039; + params.tags[i] + &#039;(\\||\\}\\}))&#039;, &#039;im&#039; );&lt;br /&gt;
				if( !tagRe.exec( pageText ) ) {&lt;br /&gt;
					tags = tags.concat( params.tags[i] );&lt;br /&gt;
				} else {&lt;br /&gt;
					Status.info( &#039;Info&#039;, &#039;Found {{&#039; + params.tags[i] +&lt;br /&gt;
						&#039;}} on the redirect already...excluding&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		tags.sort();&lt;br /&gt;
		for( i = 0; i &amp;lt; tags.length; i++ ) {&lt;br /&gt;
			var currentTag = &amp;quot;&amp;quot;;&lt;br /&gt;
			if( tags[i] === &#039;uncategorized&#039; || tags[i] === &#039;catimprove&#039; ) {&lt;br /&gt;
				pageText += &#039;\n\n{{&#039; + tags[i] +&lt;br /&gt;
					&#039;|date={{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}}}&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				if( tags[i] === &#039;globalize&#039; ) {&lt;br /&gt;
					currentTag += &#039;{{&#039; + params.globalizeSubcategory;&lt;br /&gt;
				} else {&lt;br /&gt;
					currentTag += ( Twinkle.tag.isRedirect ? &#039;\n&#039; : &#039;&#039; ) + &#039;{{&#039; + tags[i];&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if( tags[i] === &#039;notability&#039; &amp;amp;&amp;amp; params.notabilitySubcategory !== &#039;none&#039; ) {&lt;br /&gt;
					currentTag += &#039;|&#039; + params.notabilitySubcategory;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// prompt for other parameters, based on the tag&lt;br /&gt;
				switch( tags[i] ) {&lt;br /&gt;
					case &#039;cleanup&#039;:&lt;br /&gt;
						var reason = prompt(&#039;You can optionally enter a more specific reason why the article requires cleanup.  \n&#039; +&lt;br /&gt;
							&amp;quot;Just click OK if you don&#039;t wish to enter this.  To skip the {{cleanup}} tag, click Cancel.&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
						if (reason === null) {&lt;br /&gt;
							continue;&lt;br /&gt;
						} else if (reason !== &amp;quot;&amp;quot;) {&lt;br /&gt;
							currentTag += &#039;|reason=&#039; + reason;&lt;br /&gt;
						}&lt;br /&gt;
						break;&lt;br /&gt;
					case &#039;notenglish&#039;:&lt;br /&gt;
						var langname = prompt(&#039;Please enter the name of the language the article is thought to be written in.  \n&#039; +&lt;br /&gt;
							&amp;quot;Just click OK if you don&#039;t know.  To skip the {{notenglish}} tag, click Cancel.&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
						if (langname === null) {&lt;br /&gt;
							continue;&lt;br /&gt;
						} else if (langname !== &amp;quot;&amp;quot;) {&lt;br /&gt;
							currentTag += &#039;|1=&#039; + langname;&lt;br /&gt;
						}&lt;br /&gt;
						break;&lt;br /&gt;
					case &#039;roughtranslation&#039;:&lt;br /&gt;
						var roughlang = prompt(&#039;Please enter the name of the language the article is thought to have been translated from.  \n&#039; +&lt;br /&gt;
							&amp;quot;Just click OK if you don&#039;t know.  To skip the {{roughtranslation}} tag, click Cancel.&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
						if (roughlang === null) {&lt;br /&gt;
							continue;&lt;br /&gt;
						} else if (roughlang !== &amp;quot;&amp;quot;) {&lt;br /&gt;
							currentTag += &#039;|1=&#039; + roughlang;&lt;br /&gt;
						}&lt;br /&gt;
						break;&lt;br /&gt;
					case &#039;merge&#039;:&lt;br /&gt;
					case &#039;merge to&#039;:&lt;br /&gt;
					case &#039;merge from&#039;:&lt;br /&gt;
						var param = prompt(&#039;Please enter the name of the other article(s) involved in the merge.  \n&#039; +&lt;br /&gt;
							&amp;quot;To specify multiple articles, separate them with a vertical pipe (|) character.  \n&amp;quot; +&lt;br /&gt;
							&amp;quot;This information is required.  Click OK when done, or click Cancel to skip the merge tag.&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
						if (param === null) {&lt;br /&gt;
							continue;&lt;br /&gt;
						} else if (param !== &amp;quot;&amp;quot;) {&lt;br /&gt;
							currentTag += &#039;|&#039; + param;&lt;br /&gt;
						}&lt;br /&gt;
						break;&lt;br /&gt;
					default:&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
				currentTag += Twinkle.tag.isRedirect ? &#039;}}&#039; : &#039;|date={{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}}}\n&#039;;&lt;br /&gt;
				tagText += currentTag;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( i &amp;gt; 0 || groupableTags.length &amp;gt; 3 ) {&lt;br /&gt;
				if( i === (tags.length - 1) ) {&lt;br /&gt;
					summaryText += &#039; and&#039;;&lt;br /&gt;
				} else if ( i &amp;lt; (tags.length - 1) ) {&lt;br /&gt;
					summaryText += &#039;,&#039;;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			summaryText += &#039; {{[[Template:&#039;;&lt;br /&gt;
			if( tags[i] === &#039;globalize&#039; ) {&lt;br /&gt;
				summaryText += params.globalizeSubcategory + &#039;|&#039; + params.globalizeSubcategory;&lt;br /&gt;
			} else {&lt;br /&gt;
				summaryText += tags[i] + &#039;|&#039; + tags[i];&lt;br /&gt;
			}&lt;br /&gt;
			summaryText += &#039;]]}}&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( Twinkle.tag.isRedirect ) {&lt;br /&gt;
			pageText += tagText;&lt;br /&gt;
		} else {&lt;br /&gt;
			// smartly insert the new tags after any hatnotes. Regex is a bit more&lt;br /&gt;
			// complicated than it&#039;d need to be, to allow templates as parameters,&lt;br /&gt;
			// and to handle whitespace properly.&lt;br /&gt;
			pageText = pageText.replace(/^\s*(?:((?:\s*\{\{\s*(?:about|correct title|dablink|distinguish|for|other\s?(?:hurricaneuses|people|persons|places|uses(?:of)?)|redirect(?:-acronym)?|see\s?(?:also|wiktionary)|selfref|the)\d*\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\})+(?:\s*\n)?)\s*)?/i,&lt;br /&gt;
				&amp;quot;$1&amp;quot; + tagText);&lt;br /&gt;
		}&lt;br /&gt;
		summaryText += &#039; tag&#039; + ( ( tags.length + ( groupableTags.length &amp;gt; 3 ? 1 : 0 ) ) &amp;gt; 1 ? &#039;s&#039; : &#039;&#039; ) +&lt;br /&gt;
			&#039; to &#039; + ( Twinkle.tag.isRedirect ? &#039;redirect&#039; : &#039;article&#039; ) + Twinkle.getPref(&#039;summaryAd&#039;);&lt;br /&gt;
&lt;br /&gt;
		pageobj.setPageText(pageText);&lt;br /&gt;
		pageobj.setEditSummary(summaryText);&lt;br /&gt;
		pageobj.setWatchlist(Twinkle.getFriendlyPref(&#039;watchTaggedPages&#039;));&lt;br /&gt;
		pageobj.setMinorEdit(Twinkle.getFriendlyPref(&#039;markTaggedPagesAsMinor&#039;));&lt;br /&gt;
		pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
		pageobj.save();&lt;br /&gt;
		&lt;br /&gt;
		if( Twinkle.getFriendlyPref(&#039;markTaggedPagesAsPatrolled&#039;) ) {&lt;br /&gt;
			pageobj.patrol();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.tag.callback.evaluate = function friendlytagCallbackEvaluate(e) {&lt;br /&gt;
	var form = e.target;&lt;br /&gt;
	var tags, globalizeSubcategory, notabilitySubcategory;&lt;br /&gt;
	if( Twinkle.tag.isRedirect ) {&lt;br /&gt;
		tags = form.getChecked( &#039;administrative&#039; ).concat( form.getChecked( &#039;alternative&#039; ) ).concat( form.getChecked( &#039;spelling&#039; ) );&lt;br /&gt;
	} else {&lt;br /&gt;
		if( Twinkle.getFriendlyPref(&#039;customTagList&#039;).length ) {&lt;br /&gt;
			tags = form.getChecked( &#039;notice&#039; ).concat( form.getChecked( &#039;problem&#039; ) ).concat( form.getChecked( &#039;maintenance&#039; ) ).concat( form.getChecked( &#039;custom&#039; ) );&lt;br /&gt;
		} else {&lt;br /&gt;
			tags = form.getChecked( &#039;notice&#039; ).concat( form.getChecked( &#039;problem&#039; ) ).concat( form.getChecked( &#039;maintenance&#039; ) );&lt;br /&gt;
		}&lt;br /&gt;
		globalizeSubcategory = form.getChecked( &#039;problem.globalize&#039; );&lt;br /&gt;
		notabilitySubcategory = form.getChecked( &#039;problem.notability&#039; );&lt;br /&gt;
	}&lt;br /&gt;
	var params;&lt;br /&gt;
&lt;br /&gt;
	if( !tags.length ) {&lt;br /&gt;
		alert( &#039;You must select at least one tag!&#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if( !Twinkle.tag.isRedirect ) {&lt;br /&gt;
		params = {&lt;br /&gt;
			tags: tags,&lt;br /&gt;
			group: form.group.checked,&lt;br /&gt;
			globalizeSubcategory: globalizeSubcategory ? globalizeSubcategory[0] : null,&lt;br /&gt;
			notabilitySubcategory: notabilitySubcategory ? notabilitySubcategory[0] : null&lt;br /&gt;
		};&lt;br /&gt;
	} else {&lt;br /&gt;
		params = {&lt;br /&gt;
			tags: tags&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( form );&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Tagging complete, reloading article in a few seconds&amp;quot;;&lt;br /&gt;
	if (Twinkle.tag.isRedirect) {&lt;br /&gt;
		Wikipedia.actionCompleted.followRedirect = false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), Twinkle.tag.isRedirect ? &amp;quot;Tagging redirect&amp;quot; : &amp;quot;Tagging article&amp;quot;);&lt;br /&gt;
	wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
	wikipedia_page.load(Twinkle.tag.callbacks.main);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** friendlytalkback.js: Talkback module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;TB&amp;quot;)&lt;br /&gt;
 * Active on:              Existing user talk pages&lt;br /&gt;
 * Config directives in:   FriendlyConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback = function friendlytalkback() {&lt;br /&gt;
	if( mw.config.get(&#039;wgNamespaceNumber&#039;) === 3 ) {&lt;br /&gt;
		var username = mw.config.get(&#039;wgTitle&#039;).split( &#039;/&#039; )[0].replace( /\&amp;quot;/, &amp;quot;\\\&amp;quot;&amp;quot;); // only first part before any slashes&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;TB&amp;quot;, &amp;quot;friendly-talkback&amp;quot;, &amp;quot;Easy talkback&amp;quot;, &amp;quot;&amp;quot;)).click(function() { Twinkle.talkback.callback(username); });&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.callback = function friendlytalkbackCallback( uid ) {&lt;br /&gt;
	if( uid === mw.config.get(&#039;wgUserName&#039;) ){&lt;br /&gt;
		alert( &#039;Is it really so bad that you\&#039;re talking back to yourself?&#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var Window = new SimpleWindow( 600, 350 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Talkback&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;About {{talkback}}&amp;quot;, &amp;quot;Template:Talkback&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#talkback&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.talkback.callback.evaluate );&lt;br /&gt;
&lt;br /&gt;
	form.append( { type: &#039;radio&#039;, name: &#039;tbtarget&#039;,&lt;br /&gt;
				list: [ {&lt;br /&gt;
						label: &#039;My talk page&#039;,&lt;br /&gt;
						value: &#039;mytalk&#039;,&lt;br /&gt;
						checked: &#039;true&#039; },&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Other user talk page&#039;,&lt;br /&gt;
						value: &#039;usertalk&#039; },&lt;br /&gt;
					{&lt;br /&gt;
						label: &amp;quot;Administrators&#039; noticeboard&amp;quot;,&lt;br /&gt;
						value: &#039;an&#039; },&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Other page&#039;,&lt;br /&gt;
						value: &#039;other&#039; } ],&lt;br /&gt;
				event: Twinkle.talkback.callback.change_target&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;field&#039;,&lt;br /&gt;
			label: &#039;Work area&#039;,&lt;br /&gt;
			name: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent( result );&lt;br /&gt;
	Window.display();&lt;br /&gt;
&lt;br /&gt;
	// We must init the&lt;br /&gt;
	var evt = document.createEvent( &amp;quot;Event&amp;quot; );&lt;br /&gt;
	evt.initEvent( &#039;change&#039;, true, true );&lt;br /&gt;
	result.tbtarget[0].dispatchEvent( evt );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.prev_page = &#039;&#039;;&lt;br /&gt;
Twinkle.talkback.prev_section = &#039;&#039;;&lt;br /&gt;
Twinkle.talkback.prev_message = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.callback.change_target = function friendlytagCallbackChangeTarget(e) {&lt;br /&gt;
	var value = e.target.values;&lt;br /&gt;
	var root = e.target.form;&lt;br /&gt;
	var old_area;&lt;br /&gt;
&lt;br /&gt;
	if(root.section) {&lt;br /&gt;
		Twinkle.talkback.prev_section = root.section.value;&lt;br /&gt;
	}&lt;br /&gt;
	if(root.message) {&lt;br /&gt;
		Twinkle.talkback.prev_message = root.message.value;&lt;br /&gt;
	}&lt;br /&gt;
	if(root.page) {&lt;br /&gt;
		Twinkle.talkback.prev_page = root.page.value;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for( var i = 0; i &amp;lt; root.childNodes.length; ++i ) {&lt;br /&gt;
		var node = root.childNodes[i];&lt;br /&gt;
		if (node instanceof Element &amp;amp;&amp;amp; node.getAttribute( &#039;name&#039; ) === &#039;work_area&#039; ) {&lt;br /&gt;
			old_area = node;&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	var work_area = new QuickForm.element( { &lt;br /&gt;
			type: &#039;field&#039;,&lt;br /&gt;
			label: &#039;Talkback information&#039;,&lt;br /&gt;
			name: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	switch( value ) {&lt;br /&gt;
		case &#039;mytalk&#039;:&lt;br /&gt;
			/* falls through */&lt;br /&gt;
		default:&lt;br /&gt;
			work_area.append( { &lt;br /&gt;
					type:&#039;input&#039;,&lt;br /&gt;
					name:&#039;section&#039;,&lt;br /&gt;
					label:&#039;Linked section (optional)&#039;,&lt;br /&gt;
					tooltip:&#039;The section heading on your talk page where you left a message. Leave empty for no section to be linked.&#039;,&lt;br /&gt;
					value: Twinkle.talkback.prev_section&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;usertalk&#039;:&lt;br /&gt;
			work_area.append( { &lt;br /&gt;
					type:&#039;input&#039;,&lt;br /&gt;
					name:&#039;page&#039;,&lt;br /&gt;
					label:&#039;User&#039;,&lt;br /&gt;
					tooltip:&#039;The username of the user on whose talk page you left a message.&#039;,&lt;br /&gt;
					value: Twinkle.talkback.prev_page&lt;br /&gt;
				} );&lt;br /&gt;
			&lt;br /&gt;
			work_area.append( { &lt;br /&gt;
					type:&#039;input&#039;,&lt;br /&gt;
					name:&#039;section&#039;,&lt;br /&gt;
					label:&#039;Linked section (optional)&#039;,&lt;br /&gt;
					tooltip:&#039;The section heading on the page where you left a message. Leave empty for no section to be linked.&#039;,&lt;br /&gt;
					value: Twinkle.talkback.prev_section&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;an&#039;:&lt;br /&gt;
			var noticeboard = work_area.append( {&lt;br /&gt;
					type: &#039;select&#039;,&lt;br /&gt;
					name: &#039;noticeboard&#039;,&lt;br /&gt;
					label: &#039;Noticeboard:&#039;&lt;br /&gt;
				} );&lt;br /&gt;
			noticeboard.append( {&lt;br /&gt;
					type: &#039;option&#039;,&lt;br /&gt;
					label: &amp;quot;MP:AN (Administrators&#039; noticeboard)&amp;quot;,&lt;br /&gt;
					value: &amp;quot;Wikipedia:Administrators&#039; noticeboard&amp;quot;&lt;br /&gt;
				} );&lt;br /&gt;
			noticeboard.append( {&lt;br /&gt;
					type: &#039;option&#039;,&lt;br /&gt;
					label: &#039;MP:ANI (Administrators\&#039; noticeboard/Incidents)&#039;,&lt;br /&gt;
					selected: true,&lt;br /&gt;
					value: &amp;quot;Wikipedia:Administrators&#039; noticeboard/Incidents&amp;quot;&lt;br /&gt;
				} );&lt;br /&gt;
			work_area.append( {&lt;br /&gt;
					type:&#039;input&#039;,&lt;br /&gt;
					name:&#039;section&#039;,&lt;br /&gt;
					label:&#039;Linked thread&#039;,&lt;br /&gt;
					tooltip:&#039;The heading of the relevant AN or ANI thread.&#039;,&lt;br /&gt;
					value: Twinkle.talkback.prev_section&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;other&#039;:&lt;br /&gt;
			work_area.append( { &lt;br /&gt;
					type:&#039;input&#039;,&lt;br /&gt;
					name:&#039;page&#039;,&lt;br /&gt;
					label:&#039;Full page name&#039;,&lt;br /&gt;
					tooltip:&#039;The full page name where you left the message.  For example: &amp;quot;Wikipedia talk:Friendly&amp;quot;.&#039;,&lt;br /&gt;
					value: Twinkle.talkback.prev_page&lt;br /&gt;
				} );&lt;br /&gt;
			&lt;br /&gt;
			work_area.append( { &lt;br /&gt;
					type:&#039;input&#039;,&lt;br /&gt;
					name:&#039;section&#039;,&lt;br /&gt;
					label:&#039;Linked section (optional)&#039;,&lt;br /&gt;
					tooltip:&#039;The section heading on the page where you left a message. Leave empty for no section to be linked.&#039;,&lt;br /&gt;
					value: Twinkle.talkback.prev_section&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (value !== &amp;quot;an&amp;quot;) {&lt;br /&gt;
		work_area.append( { type:&#039;textarea&#039;, label:&#039;Additional message (optional):&#039;, name:&#039;message&#039;, tooltip:&#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.&#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;
	root.message.value = Twinkle.talkback.prev_message;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.talkback.callback.evaluate = function friendlytalkbackCallbackEvaluate(e) {&lt;br /&gt;
	var tbtarget = e.target.getChecked( &#039;tbtarget&#039; )[0];&lt;br /&gt;
	var page = null;&lt;br /&gt;
	var section = e.target.section.value;&lt;br /&gt;
	if( tbtarget === &#039;usertalk&#039; || tbtarget === &#039;other&#039; ) {&lt;br /&gt;
		page = e.target.page.value;&lt;br /&gt;
		&lt;br /&gt;
		if( tbtarget === &#039;usertalk&#039; ) {&lt;br /&gt;
			if( !page ) {&lt;br /&gt;
				alert( &#039;You must specify the username of the user whose talk page you left a message on.&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			if( !page ) {&lt;br /&gt;
				alert( &#039;You must specify the full page name when your message is not on a user talk page.&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	} else if (tbtarget === &amp;quot;an&amp;quot;) {&lt;br /&gt;
		page = e.target.noticeboard.value;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var message = e.target.message.value;&lt;br /&gt;
&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( e.target );&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Talkback complete; reloading talk page in a few seconds&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var talkpage = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Adding talkback&amp;quot;);&lt;br /&gt;
	var tbPageName = (tbtarget === &#039;mytalk&#039;) ? mw.config.get(&#039;wgUserName&#039;) : page;&lt;br /&gt;
&lt;br /&gt;
	var text;&lt;br /&gt;
	if ( tbtarget === &amp;quot;an&amp;quot; ) {&lt;br /&gt;
		text = &amp;quot;\n== &amp;quot; + Twinkle.getFriendlyPref(&#039;adminNoticeHeading&#039;) + &amp;quot; ==\n{{subst:ANI-notice|thread=&amp;quot;;&lt;br /&gt;
		text += section + &amp;quot;|noticeboard=&amp;quot; + tbPageName + &amp;quot;}}~~~~&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		talkpage.setEditSummary(&amp;quot;Notice of AN/ANI discussion&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
	} else {&lt;br /&gt;
		//clean talkback heading: strip section header markers, were erroneously suggested in the documentation&lt;br /&gt;
		text = &#039;\n==&#039; + Twinkle.getFriendlyPref(&#039;talkbackHeading&#039;).replace(/^\s*=+\s*(.*?)\s*=+$\s*/, &amp;quot;$1&amp;quot;) + &#039;==\n{{talkback|&#039;;&lt;br /&gt;
		text += tbPageName;&lt;br /&gt;
&lt;br /&gt;
		if( section ) {&lt;br /&gt;
			text += &#039;|&#039; + section;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		text += &#039;|ts=~~~~~}}&#039;;&lt;br /&gt;
&lt;br /&gt;
		if( message ) {&lt;br /&gt;
			text += &#039;\n&#039; + message + &#039;  ~~~~&#039;;&lt;br /&gt;
		} else if( Twinkle.getFriendlyPref(&#039;insertTalkbackSignature&#039;) ) {&lt;br /&gt;
			text += &#039;\n~~~~&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		talkpage.setEditSummary(&amp;quot;Talkback ([[&amp;quot; + (tbtarget === &#039;other&#039; ? &#039;&#039; : &#039;User talk:&#039;) + tbPageName +&lt;br /&gt;
			(section ? (&#039;#&#039; + section) : &#039;&#039;) + &amp;quot;]])&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	talkpage.setAppendText(text);&lt;br /&gt;
	talkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
	talkpage.setMinorEdit(Twinkle.getFriendlyPref(&#039;markTalkbackAsMinor&#039;));&lt;br /&gt;
	talkpage.setFollowRedirect(true);&lt;br /&gt;
	talkpage.append();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** friendlywelcome.js: Welcome module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;Wel&amp;quot;), or from links on diff pages&lt;br /&gt;
 * Active on:              Existing user talk pages, diff pages&lt;br /&gt;
 * Config directives in:   FriendlyConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome = function friendlywelcome() {&lt;br /&gt;
	if( QueryString.exists( &#039;friendlywelcome&#039; ) ) {&lt;br /&gt;
		if( QueryString.get( &#039;friendlywelcome&#039; ) === &#039;auto&#039; ) {&lt;br /&gt;
			Twinkle.welcome.auto();&lt;br /&gt;
		} else {&lt;br /&gt;
			Twinkle.welcome.semiauto();&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		Twinkle.welcome.normal();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.auto = function() {&lt;br /&gt;
	if( QueryString.get( &#039;action&#039; ) !== &#039;edit&#039; ) {&lt;br /&gt;
		// userpage not empty, aborting auto-welcome&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	Twinkle.welcome.welcomeUser();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.semiauto = function() {&lt;br /&gt;
	Twinkle.welcome.callback( mw.config.get( &#039;wgTitle&#039; ).split( &#039;/&#039; )[0].replace( /\&amp;quot;/, &amp;quot;\\\&amp;quot;&amp;quot;) );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.normal = function() {&lt;br /&gt;
	if( QueryString.exists( &#039;diff&#039; ) ) {&lt;br /&gt;
		// check whether the contributors&#039; talk pages exist yet&lt;br /&gt;
		var $oList = $(&amp;quot;div#mw-diff-otitle2 span.mw-usertoollinks a.new:contains(talk)&amp;quot;).first();&lt;br /&gt;
		var $nList = $(&amp;quot;div#mw-diff-ntitle2 span.mw-usertoollinks a.new:contains(talk)&amp;quot;).first();&lt;br /&gt;
&lt;br /&gt;
		if( $oList.length &amp;gt; 0 || $nList.length &amp;gt; 0 ) {&lt;br /&gt;
			var spanTag = function( color, content ) {&lt;br /&gt;
				var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
				span.style.color = color;&lt;br /&gt;
				span.appendChild( document.createTextNode( content ) );&lt;br /&gt;
				return span;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			var welcomeNode = document.createElement(&#039;strong&#039;);&lt;br /&gt;
			var welcomeLink = document.createElement(&#039;a&#039;);&lt;br /&gt;
			welcomeLink.appendChild( spanTag( &#039;Black&#039;, &#039;[&#039; ) );&lt;br /&gt;
			welcomeLink.appendChild( spanTag( &#039;Goldenrod&#039;, &#039;welcome&#039; ) );&lt;br /&gt;
			welcomeLink.appendChild( spanTag( &#039;Black&#039;, &#039;]&#039; ) );&lt;br /&gt;
			welcomeNode.appendChild(welcomeLink);&lt;br /&gt;
&lt;br /&gt;
			if( $oList.length &amp;gt; 0 ) {&lt;br /&gt;
				var oHref = $oList.attr(&amp;quot;href&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				var oWelcomeNode = welcomeNode.cloneNode( true );&lt;br /&gt;
				oWelcomeNode.firstChild.setAttribute( &#039;href&#039;, oHref + &#039;&amp;amp;&#039; + QueryString.create( { &#039;friendlywelcome&#039;: Twinkle.getFriendlyPref(&#039;quickWelcomeMode&#039;)===&#039;auto&#039;?&#039;auto&#039;:&#039;norm&#039; } ) + &#039;&amp;amp;&#039; + QueryString.create( { &#039;vanarticle&#039;: mw.config.get( &#039;wgPageName&#039; ).replace(/_/g, &#039; &#039;) } ) );&lt;br /&gt;
				$oList[0].parentNode.parentNode.appendChild( document.createTextNode( &#039; &#039; ) );&lt;br /&gt;
				$oList[0].parentNode.parentNode.appendChild( oWelcomeNode );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if( $nList.length &amp;gt; 0 ) {&lt;br /&gt;
				var nHref = $nList.attr(&amp;quot;href&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				var nWelcomeNode = welcomeNode.cloneNode( true );&lt;br /&gt;
				nWelcomeNode.firstChild.setAttribute( &#039;href&#039;, nHref + &#039;&amp;amp;&#039; + QueryString.create( { &#039;friendlywelcome&#039;: Twinkle.getFriendlyPref(&#039;quickWelcomeMode&#039;)===&#039;auto&#039;?&#039;auto&#039;:&#039;norm&#039; } ) + &#039;&amp;amp;&#039; + QueryString.create( { &#039;vanarticle&#039;: mw.config.get( &#039;wgPageName&#039; ).replace(/_/g, &#039; &#039;) } ) );&lt;br /&gt;
				$nList[0].parentNode.parentNode.appendChild( document.createTextNode( &#039; &#039; ) );&lt;br /&gt;
				$nList[0].parentNode.parentNode.appendChild( nWelcomeNode );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if( mw.config.get( &#039;wgNamespaceNumber&#039; ) === 3 ) {&lt;br /&gt;
		var username = mw.config.get( &#039;wgTitle&#039; ).split( &#039;/&#039; )[0].replace( /\&amp;quot;/, &amp;quot;\\\&amp;quot;&amp;quot;); // only first part before any slashes&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Wel&amp;quot;, &amp;quot;friendly-welcome&amp;quot;, &amp;quot;Welcome user&amp;quot;, &amp;quot;&amp;quot;)).click(function() { Twinkle.welcome.callback(username); });&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.welcomeUser = function welcomeUser() {&lt;br /&gt;
	Status.init( document.getElementById(&#039;bodyContent&#039;) );&lt;br /&gt;
&lt;br /&gt;
	var params = {&lt;br /&gt;
		value: Twinkle.getFriendlyPref(&#039;quickWelcomeTemplate&#039;),&lt;br /&gt;
		article: QueryString.exists( &#039;vanarticle&#039; ) ? QueryString.get( &#039;vanarticle&#039; ) : &#039;&#039;,&lt;br /&gt;
		mode: &#039;auto&#039;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Welcoming complete, reloading talk page in a few seconds&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;User talk page modification&amp;quot;);&lt;br /&gt;
	wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
	wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
	wikipedia_page.load(Twinkle.welcome.callbacks.main);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.callback = function friendlywelcomeCallback( uid ) {&lt;br /&gt;
	var Window = new SimpleWindow( 600, 400 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Welcome user&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Welcoming Committee&amp;quot;, &amp;quot;MP:WC&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#welcome&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.welcome.callback.evaluate, &#039;change&#039; );&lt;br /&gt;
&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;input&#039;,&lt;br /&gt;
			name: &#039;article&#039;,&lt;br /&gt;
			label: &#039;Linked article (if supported by template)&#039;,&lt;br /&gt;
			value:( QueryString.exists( &#039;vanarticle&#039; ) ? QueryString.get( &#039;vanarticle&#039; ) : &#039;&#039; ),&lt;br /&gt;
			tooltip: &#039;An article might be linked to the welcome if the template supports it. Leave empty for no artice to be linked.  Templates that support a linked article are marked with an asterisk.  Ignored for templates that do not support a linked article.&#039;,&lt;br /&gt;
			event: function( event ) {&lt;br /&gt;
				event.stopPropagation();&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	form.append( { type:&#039;header&#039;, label:&#039;Simple templates&#039; } );&lt;br /&gt;
	form.append( { type: &#039;radio&#039;, name: &#039;simple&#039;, list: Twinkle.welcome.standardList } );&lt;br /&gt;
&lt;br /&gt;
	if( Twinkle.getFriendlyPref(&#039;customWelcomeList&#039;).length ) {&lt;br /&gt;
		form.append( { type:&#039;header&#039;, label:&#039;Custom templates&#039; } );&lt;br /&gt;
		form.append( { type: &#039;radio&#039;, name: &#039;custom&#039;, list: Twinkle.getFriendlyPref(&#039;customWelcomeList&#039;) } );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	form.append( { type:&#039;header&#039;, label:&#039;Welcoming committee templates&#039; } );&lt;br /&gt;
	form.append( { type: &#039;radio&#039;, name: &#039;welcomingCommittee&#039;, list: Twinkle.welcome.welcomingCommitteeList } );&lt;br /&gt;
&lt;br /&gt;
	form.append( { type:&#039;header&#039;, label:&#039;Potential problem user templates&#039; } );&lt;br /&gt;
	form.append( { type: &#039;radio&#039;, name: &#039;problem&#039;, list: Twinkle.welcome.problemList } );&lt;br /&gt;
&lt;br /&gt;
	form.append( { type:&#039;header&#039;, label:&#039;Anonymous user templates&#039; } );&lt;br /&gt;
	form.append( { type: &#039;radio&#039;, name: &#039;anonymous&#039;, list: Twinkle.welcome.anonymousList } );&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent( result );&lt;br /&gt;
	Window.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.standardList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{Welcome}}: standard welcome*&#039;,&lt;br /&gt;
		value: &#039;Welcome&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcomeshort}}: short welcome&#039;,&lt;br /&gt;
		value: &#039;Welcomeshort&#039;,&lt;br /&gt;
		tooltip: &#039;Includes section heading.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{WelcomeSimple}}: simple welcome&#039;,&lt;br /&gt;
		value: &#039;WelcomeSimple&#039;,&lt;br /&gt;
		tooltip: &#039;Won\&#039;t overwhelm new users.  Includes section heading.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{Welcome-personal}}: includes a plate of cookies&#039;,&lt;br /&gt;
		value: &#039;Welcome-personal&#039;,&lt;br /&gt;
		tooltip: &#039;A personal welcome with an introduction from you and a plate of cookies.  Includes section heading and signature.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{WelcomeMenu}}: welcome with menu of links&#039;,&lt;br /&gt;
		value: &#039;WelcomeMenu&#039;,&lt;br /&gt;
		tooltip: &#039;Contains a welcome message and many useful links broken up into different sections.  Includes signature.&#039; &lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcomeg}}: similar to {{WelcomeMenu}}&#039;,&lt;br /&gt;
		value: &#039;Welcomeg&#039;,&lt;br /&gt;
		tooltip: &#039;Contains a welcome message and many useful links broken up into different sections.  Includes signature.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcomeh}}: same as {{Welcomeg}} but with a section heading&#039;,&lt;br /&gt;
		value: &#039;Welcomeh&#039;,&lt;br /&gt;
		tooltip: &#039;Contains a section heading, a welcome message and many useful links broken up into different sections.  Includes section heading and signature.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcome-belated}}: welcome for users with more substantial contributions&#039;,&lt;br /&gt;
		value: &#039;Welcome-belated&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.welcomingCommitteeList = [&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Wel}}: similar to {{Welcome}}, but automatically identifies anonymous and registered users*&#039;,&lt;br /&gt;
		value: &#039;Wel&#039;,&lt;br /&gt;
		tooltip: &#039;This template checks whether the username contains any letters. If there are any, {{Welcome-reg}} will be shown. If there are none, {{Welcome-anon}} will be shown.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{W-basic}}: standard template, similar to {{Welcome}} with additional options&#039;,&lt;br /&gt;
		value: &#039;W-basic&#039;,&lt;br /&gt;
		tooltip: &#039;This template is similar to {{Welcome}} but supports many different options.  Includes a signature.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{W-shout}}: extroverted message with bold advice&#039;,&lt;br /&gt;
		value: &#039;W-shout&#039;,&lt;br /&gt;
		tooltip: &#039;This template is similar to {{WelcomeShout}} but supports many different options.  Includes a signature.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{W-short}}: concise; won\&#039;t overwhelm&#039;,&lt;br /&gt;
		value: &#039;W-short||&#039;,&lt;br /&gt;
		tooltip: &#039;This template is similar to {{Welcomeshort}} but supports many different options.  Includes a signature.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{W-link}}: shortest greeting, links to Welcoming committee\&#039;s greetings page&#039;,&lt;br /&gt;
		value: &#039;W-link&#039;,&lt;br /&gt;
		tooltip: &#039;This template is similar to {{Welcom}} but supports many different options.  Includes a signature.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{W-graphical}}: graphical menu format to ease transition from the graphic-heavy web&#039;,&lt;br /&gt;
		value: &#039;W-graphical&#039;,&lt;br /&gt;
		tooltip: &#039;This template is similar to {{Welcomeg}} but has fewer links.  Supports many different options.  Includes a signature.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{W-screen}}: graphical; designed to fit the size of the user\&#039;s screen&#039;,&lt;br /&gt;
		value: &#039;W-screen&#039;,&lt;br /&gt;
		tooltip: &#039;This template is a nice graphical welcome with many different options.  Includes a signature.&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.problemList = [&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcomelaws}}: welcome with information about copyrights, npov, the sandbox, and vandalism&#039;,&lt;br /&gt;
		value: &#039;Welcomelaws&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Firstarticle}}: for someone whose first article did not meet page creation guidelines*&#039;,&lt;br /&gt;
		value: &#039;Firstarticle&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcomevandal}}: for someone whose initial efforts appear to be vandalism*&#039;,&lt;br /&gt;
		value: &#039;Welcomevandal&#039;,&lt;br /&gt;
		tooltip: &#039;Includes a section heading.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcomenpov}}: for someone whose initial efforts do not adhere to the neutral point of view policy*&#039;,&lt;br /&gt;
		value: &#039;Welcomenpov&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcomespam}}: welcome with additional discussion of anti-spamming polices*&#039;,&lt;br /&gt;
		value: &#039;Welcomespam&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcomeunsourced}}: for someone whose initial efforts are uncited*&#039;,&lt;br /&gt;
		value: &#039;Welcomeunsourced&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcomeauto}}: for someone who created an autobiographical article*&#039;,&lt;br /&gt;
		value: &#039;Welcomeauto&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{ &lt;br /&gt;
		label: &#039;{{Welcome-COI}}: for someone who created or edited an article about a subject with which they have a conflict of interest*&#039;,&lt;br /&gt;
		value: &#039;Welcome-COI&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.anonymousList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{Welcome-anon}}: for anonymous users; encourages getting a username*&#039;,&lt;br /&gt;
		value: &#039;Welcome-anon&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{Welcomeanon2}}: similar to {{Welcome-anon}} but with hints and tips*&#039;,&lt;br /&gt;
		value: &#039;Welcomeanon2&#039;,&lt;br /&gt;
		tooltip: &#039;Includes section heading.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{Welc-anon}}: similar to {{Welcome-anon}} but with a border and section heading&#039;,&lt;br /&gt;
		value: &#039;Welc-anon||&#039;,&lt;br /&gt;
		tooltip: &#039;Includes section heading.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{Welcome-anon-vandal}}: for anonymous users who have vandalized a page*&#039;,&lt;br /&gt;
		value: &#039;Welcome-anon-vandal&#039;,&lt;br /&gt;
		tooltip: &#039;Includes a section heading and signature.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;{{Welcome-anon-vandalism-fighter}}: for anonymous users who fight vandalism, urging them to create an account*&#039;,&lt;br /&gt;
		value: &#039;Welcome-anon-vandalism-fighter&#039;, &lt;br /&gt;
		tooltip: &#039;Includes section heading.&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
// Set to true if template does not already have heading&lt;br /&gt;
Twinkle.welcome.headingHash = {&lt;br /&gt;
	&#039;Welcome&#039;: true,&lt;br /&gt;
	&#039;Welcomeshort&#039;: false,&lt;br /&gt;
	&#039;WelcomeSimple&#039;: false,&lt;br /&gt;
	&#039;Welcom&#039;: false,&lt;br /&gt;
	&#039;Welcome-personal&#039;: false,&lt;br /&gt;
	&#039;WelcomeMenu&#039;: true,&lt;br /&gt;
	&#039;Welcomeg&#039;: true,&lt;br /&gt;
	&#039;Welcomeh&#039;: false,&lt;br /&gt;
	&#039;Welcome-belated&#039;: false,&lt;br /&gt;
	&#039;Wel&#039;: false,&lt;br /&gt;
	&#039;W-basic&#039;: true,&lt;br /&gt;
	&#039;W-shout&#039;: true,&lt;br /&gt;
	&#039;W-short||&#039;: true,&lt;br /&gt;
	&#039;W-link&#039;: true,&lt;br /&gt;
	&#039;W-graphical&#039;: true,&lt;br /&gt;
	&#039;W-screen&#039;: true,&lt;br /&gt;
	&#039;Welcomelaws&#039;: true,&lt;br /&gt;
	&#039;Firstarticle&#039;: true,&lt;br /&gt;
	&#039;Welcomevandal&#039;: false,&lt;br /&gt;
	&#039;Welcomenpov&#039;: true,&lt;br /&gt;
	&#039;Welcomespam&#039;: true,&lt;br /&gt;
	&#039;Welcomeunsourced&#039;: true,&lt;br /&gt;
	&#039;Welcomeauto&#039;: false,&lt;br /&gt;
	&#039;Welcome-COI&#039;: true,&lt;br /&gt;
	&#039;Welcome-anon&#039;: true,&lt;br /&gt;
	&#039;Welcomeanon2&#039;: false,&lt;br /&gt;
	&#039;Welc-anon||&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon-vandalism-fighter&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon-vandal&#039;: false&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Set to true if template already has signature&lt;br /&gt;
Twinkle.welcome.signatureHash = {&lt;br /&gt;
	&#039;Welcome&#039;: false,&lt;br /&gt;
	&#039;Welcomeshort&#039;: false,&lt;br /&gt;
	&#039;WelcomeSimple&#039;: false,&lt;br /&gt;
	&#039;Welcom&#039;: true,&lt;br /&gt;
	&#039;Welcome-personal&#039;: false,&lt;br /&gt;
	&#039;WelcomeMenu&#039;: true,&lt;br /&gt;
	&#039;Welcomeg&#039;: true,&lt;br /&gt;
	&#039;Welcomeh&#039;: true,&lt;br /&gt;
	&#039;Welcome-belated&#039;: true,&lt;br /&gt;
	&#039;Wel&#039;: false,&lt;br /&gt;
	&#039;W-basic&#039;: true,&lt;br /&gt;
	&#039;W-shout&#039;: true,&lt;br /&gt;
	&#039;W-short||&#039;: true,&lt;br /&gt;
	&#039;W-link&#039;: true,&lt;br /&gt;
	&#039;W-graphical&#039;: true,&lt;br /&gt;
	&#039;W-screen&#039;: true,&lt;br /&gt;
	&#039;Welcomelaws&#039;: false,&lt;br /&gt;
	&#039;Firstarticle&#039;: true,&lt;br /&gt;
	&#039;Welcomevandal&#039;: true,&lt;br /&gt;
	&#039;Welcomenpov&#039;: false,&lt;br /&gt;
	&#039;Welcomespam&#039;: false,&lt;br /&gt;
	&#039;Welcomeunsourced&#039;: false,&lt;br /&gt;
	&#039;Welcome-COI&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon&#039;: false,&lt;br /&gt;
	&#039;Welcomeanon2&#039;: false,&lt;br /&gt;
	&#039;Welc-anon||&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon-vandalism-fighter&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon-vandal&#039;: true&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* Set to true if template supports article&lt;br /&gt;
 * name from art template parameter &lt;br /&gt;
 */&lt;br /&gt;
Twinkle.welcome.artHash = {&lt;br /&gt;
	&#039;Welcome&#039;: true,&lt;br /&gt;
	&#039;Welcomeshort&#039;: false,&lt;br /&gt;
	&#039;WelcomeSimple&#039;: false,&lt;br /&gt;
	&#039;Welcom&#039;: false,&lt;br /&gt;
	&#039;Welcome-personal&#039;: false,&lt;br /&gt;
	&#039;WelcomeMenu&#039;: false,&lt;br /&gt;
	&#039;Welcomeg&#039;: false,&lt;br /&gt;
	&#039;Welcomeh&#039;: false,&lt;br /&gt;
	&#039;Welcome-belated&#039;: false,&lt;br /&gt;
	&#039;Wel&#039;: true,&lt;br /&gt;
	&#039;W-basic&#039;: false,&lt;br /&gt;
	&#039;W-shout&#039;: false,&lt;br /&gt;
	&#039;W-short||&#039;: false,&lt;br /&gt;
	&#039;W-link&#039;: false,&lt;br /&gt;
	&#039;W-graphical&#039;: false,&lt;br /&gt;
	&#039;W-screen&#039;: false,&lt;br /&gt;
	&#039;Welcomelaws&#039;: false,&lt;br /&gt;
	&#039;Firstarticle&#039;: false,&lt;br /&gt;
	&#039;Welcomevandal&#039;: false,&lt;br /&gt;
	&#039;Welcomenpov&#039;: false,&lt;br /&gt;
	&#039;Welcomespam&#039;: false,&lt;br /&gt;
	&#039;Welcomeunsourced&#039;: false,&lt;br /&gt;
	&#039;Welcomeauto&#039;: true,&lt;br /&gt;
	&#039;Welcome-COI&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon&#039;: true,&lt;br /&gt;
	&#039;Welcomeanon2&#039;: true,&lt;br /&gt;
	&#039;Welc-anon||&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon-vandalism-fighter&#039;: true,&lt;br /&gt;
	&#039;Welcome-anon-vandal&#039;: false&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* Set to true if template supports article&lt;br /&gt;
 * name from vanarticle template parameter &lt;br /&gt;
 */&lt;br /&gt;
Twinkle.welcome.vandalHash = {&lt;br /&gt;
	&#039;Welcome&#039;: false,&lt;br /&gt;
	&#039;Welcomeshort&#039;: false,&lt;br /&gt;
	&#039;WelcomeSimple&#039;: false,&lt;br /&gt;
	&#039;Welcom&#039;: false,&lt;br /&gt;
	&#039;Welcome-personal&#039;: false,&lt;br /&gt;
	&#039;WelcomeMenu&#039;: false,&lt;br /&gt;
	&#039;Welcomeg&#039;: false,&lt;br /&gt;
	&#039;Welcomeh&#039;: false,&lt;br /&gt;
	&#039;Welcome-belated&#039;: false,&lt;br /&gt;
	&#039;Wel&#039;: false,&lt;br /&gt;
	&#039;W-basic&#039;: false,&lt;br /&gt;
	&#039;W-shout&#039;: false,&lt;br /&gt;
	&#039;W-short||&#039;: false,&lt;br /&gt;
	&#039;W-link&#039;: false,&lt;br /&gt;
	&#039;W-graphical&#039;: false,&lt;br /&gt;
	&#039;W-screen&#039;: false,&lt;br /&gt;
	&#039;Welcomelaws&#039;: false,&lt;br /&gt;
	&#039;Firstarticle&#039;: true,&lt;br /&gt;
	&#039;Welcomevandal&#039;: true,&lt;br /&gt;
	&#039;Welcomenpov&#039;: true,&lt;br /&gt;
	&#039;Welcomespam&#039;: true,&lt;br /&gt;
	&#039;Welcomeunsourced&#039;: true,&lt;br /&gt;
	&#039;Welcomeauto&#039;: false,&lt;br /&gt;
	&#039;Welcome-COI&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon&#039;: false,&lt;br /&gt;
	&#039;Welcomeanon2&#039;: false,&lt;br /&gt;
	&#039;Welc-anon||&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon-vandalism-fighter&#039;: false,&lt;br /&gt;
	&#039;Welcome-anon-vandal&#039;: true&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.callbacks = {&lt;br /&gt;
	main: function( pageobj ) {&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
		var oldText = pageobj.getPageText();&lt;br /&gt;
		&lt;br /&gt;
		// abort if mode is auto and form is not empty&lt;br /&gt;
		if( pageobj.exists() &amp;amp;&amp;amp; params.mode === &#039;auto&#039; ) {&lt;br /&gt;
			Status.info( &#039;Warning&#039;, &#039;User talk page not empty; aborting automatic welcome&#039; );&lt;br /&gt;
			Wikipedia.actionCompleted.event();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var text = &#039;&#039;;&lt;br /&gt;
		Status.info( &#039;Info&#039;, &#039;Will add the welcome template to the &#039; +&lt;br /&gt;
			( Twinkle.getFriendlyPref(&#039;topWelcomes&#039;) ? &#039;top&#039; : &#039;bottom&#039; ) +&lt;br /&gt;
			&#039; of the user\&#039;s talk page.&#039; );&lt;br /&gt;
		if( !Twinkle.getFriendlyPref(&#039;topWelcomes&#039;) ) {&lt;br /&gt;
			text += oldText + &#039;\n&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if( Twinkle.welcome.headingHash[ params.value ] &amp;amp;&amp;amp; Twinkle.getFriendlyPref(&#039;insertHeadings&#039;) ) {&lt;br /&gt;
			Status.info( &#039;Info&#039;, &#039;Will create a new heading for the welcome&#039; );&lt;br /&gt;
			// strip section header markers from pref, to preserve backwards compatibility&lt;br /&gt;
			text += &amp;quot;== &amp;quot; + Twinkle.getFriendlyPref(&#039;welcomeHeading&#039;).replace(/^\s*=+\s*(.*?)\s*=+$\s*/, &amp;quot;$1&amp;quot;) + &amp;quot; ==\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		Status.info( &#039;Info&#039;, &#039;Will substitute the {{&#039; + params.value + &#039;}} welcome template&#039; );&lt;br /&gt;
		text += &#039;{{subst:&#039; + params.value;&lt;br /&gt;
		&lt;br /&gt;
		if( Twinkle.welcome.artHash[ params.value ] ) {&lt;br /&gt;
			if( Twinkle.getFriendlyPref(&#039;insertUsername&#039;) &amp;amp;&amp;amp; params.value.substring(2,0) !== &#039;W-&#039; ) {&lt;br /&gt;
				Status.info( &#039;Info&#039;, &#039;Will add your username to the template&#039; );&lt;br /&gt;
				text += &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if( params.article ) {&lt;br /&gt;
				Status.info( &#039;Info&#039;, &#039;Will add article link to the template&#039; );&lt;br /&gt;
				text += &#039;|art=&#039; + params.article;&lt;br /&gt;
			}&lt;br /&gt;
		} else if( Twinkle.welcome.vandalHash[ params.value ] ) {&lt;br /&gt;
			if( params.article ) {&lt;br /&gt;
				Status.info( &#039;Info&#039;, &#039;Will add article link to the template&#039; );&lt;br /&gt;
			}&lt;br /&gt;
			text += &#039;|&#039; + params.article;&lt;br /&gt;
			&lt;br /&gt;
			if( Twinkle.getFriendlyPref(&#039;insertUsername&#039;) ) {&lt;br /&gt;
				Status.info( &#039;Info&#039;, &#039;Will add your username to the template&#039; );&lt;br /&gt;
				text += &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		} else if( Twinkle.getFriendlyPref(&#039;insertUsername&#039;) ) {&lt;br /&gt;
			Status.info( &#039;Info&#039;, &#039;Will add your username to the template&#039; );&lt;br /&gt;
			text += &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;);&lt;br /&gt;
		} &lt;br /&gt;
		&lt;br /&gt;
		text += &#039;}}&#039;;&lt;br /&gt;
		&lt;br /&gt;
		if( !Twinkle.welcome.signatureHash[ params.value ] &amp;amp;&amp;amp; Twinkle.getFriendlyPref(&#039;insertSignature&#039;) ) {&lt;br /&gt;
			Status.info( &#039;Info&#039;, &#039;Will add your signature after the welcome&#039; );&lt;br /&gt;
			text += &#039; \n~~~~&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if( Twinkle.getFriendlyPref(&#039;topWelcomes&#039;) ) {&lt;br /&gt;
			text += &#039;\n\n&#039; + oldText;&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		var summaryText = &amp;quot;Added &amp;quot; + ( Twinkle.getFriendlyPref(&#039;maskTemplateInSummary&#039;) ? &#039;welcome&#039; : ( &#039;{{[[Template:&#039; + params.value + &#039;|&#039; + params.value + &#039;]]}}&#039; ) ) +&lt;br /&gt;
			&amp;quot; template to user talk page&amp;quot;;&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setEditSummary(summaryText + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
		pageobj.setMinorEdit(Twinkle.getFriendlyPref(&#039;markWelcomesAsMinor&#039;));&lt;br /&gt;
		pageobj.setWatchlist(Twinkle.getFriendlyPref(&#039;watchWelcomes&#039;));&lt;br /&gt;
		pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
		pageobj.save();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.welcome.callback.evaluate = function friendlywelcomeCallbackEvaluate(e) {&lt;br /&gt;
	// Ignore if a change to the text field triggered this event&lt;br /&gt;
	if( e.target.name === &#039;article&#039; ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	var params = {&lt;br /&gt;
		value: e.target.values,&lt;br /&gt;
		article: e.target.form.article.value,&lt;br /&gt;
		mode: &#039;manual&#039;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( e.target.form );&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Welcoming complete, reloading talk page in a few seconds&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;User talk page modification&amp;quot;);&lt;br /&gt;
	wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
	wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
	wikipedia_page.load(Twinkle.welcome.callbacks.main);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklearv.js: ARV module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;ARV&amp;quot;)&lt;br /&gt;
 * Active on:              Existing and non-existing user pages, user talk pages, contributions pages&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.arv = function twinklearv() {&lt;br /&gt;
	if ( mw.config.get(&#039;wgNamespaceNumber&#039;) === 2 || mw.config.get(&#039;wgNamespaceNumber&#039;) === 3 || &lt;br /&gt;
	    ( mw.config.get(&#039;wgNamespaceNumber&#039;) === -1 &amp;amp;&amp;amp; mw.config.get(&#039;wgTitle&#039;) === &amp;quot;Contributions&amp;quot; )) {&lt;br /&gt;
&lt;br /&gt;
		// If we are on the contributions page, need to parse some then&lt;br /&gt;
		var username;&lt;br /&gt;
		if( mw.config.get(&#039;wgNamespaceNumber&#039;) === -1 &amp;amp;&amp;amp; mw.config.get(&#039;wgTitle&#039;) === &amp;quot;Contributions&amp;quot; ) {&lt;br /&gt;
			username = decodeURIComponent(/user=(.+)/.exec($(&#039;div#contentSub a[title=&amp;quot;Special:Log&amp;quot;]&#039;).last().attr(&amp;quot;href&amp;quot;).replace(/\+/g, &amp;quot;%20&amp;quot;))[1]);&lt;br /&gt;
		} else {&lt;br /&gt;
			username = mw.config.get(&#039;wgTitle&#039;).split( &#039;/&#039; )[0]; // only first part before any slashes&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( !username ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var title = isIPAddress( username ) ? &#039;Report IP to administrators&#039; : &#039;Report user to administrators&#039;;&lt;br /&gt;
		&lt;br /&gt;
		if (twinkleUserAuthorized) {&lt;br /&gt;
			$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;ARV&amp;quot;, &amp;quot;tw-arv&amp;quot;, title, &amp;quot;&amp;quot; )).click(function() { Twinkle.arv.callback(username.replace( /\&amp;quot;/g, &amp;quot;\\\&amp;quot;&amp;quot;)); } );&lt;br /&gt;
		} else {&lt;br /&gt;
			$(twAddPortletLink(&amp;quot;#&amp;quot;, &#039;ARV&#039;, &#039;tw-arv&#039;, title, &amp;quot;&amp;quot; )).click(function() { alert(&amp;quot;Your account is too new to use Twinkle.&amp;quot;); } );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.arv.callback = function ( uid ) {&lt;br /&gt;
	if( uid === mw.config.get(&#039;wgUserName&#039;) ){&lt;br /&gt;
		alert( &#039;You don\&#039;t want to report yourself, do you?&#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var Window = new SimpleWindow( 600, 500 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Advance Reporting and Vetting&amp;quot; ); //Backronym&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Guide to AIV&amp;quot;, &amp;quot;MP:GAIV&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;UAA instructions&amp;quot;, &amp;quot;MP:UAAI&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;About SPI&amp;quot;, &amp;quot;MP:SPI&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#arv&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.arv.callback.evaluate );&lt;br /&gt;
	var categories = form.append( {&lt;br /&gt;
			type: &#039;select&#039;,&lt;br /&gt;
			name: &#039;category&#039;,&lt;br /&gt;
			label: &#039;Select report type: &#039;,&lt;br /&gt;
			event: Twinkle.arv.callback.changeCategory&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;Vandalism (MP:AIV)&#039;,&lt;br /&gt;
			value: &#039;aiv&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;Username (MP:UAA)&#039;,&lt;br /&gt;
			value: &#039;username&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;Sockpuppeteer (MP:SPI)&#039;,&lt;br /&gt;
			value: &#039;sock&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;Sockpuppet (MP:SPI)&#039;,&lt;br /&gt;
			value: &#039;puppet&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;field&#039;,&lt;br /&gt;
			label:&#039;Work area&#039;,&lt;br /&gt;
			name: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;hidden&#039;,&lt;br /&gt;
			name: &#039;uid&#039;,&lt;br /&gt;
			value: uid&lt;br /&gt;
		} );&lt;br /&gt;
	&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent( result );&lt;br /&gt;
	Window.display();&lt;br /&gt;
&lt;br /&gt;
	// We must init the&lt;br /&gt;
	var evt = document.createEvent( &amp;quot;Event&amp;quot; );&lt;br /&gt;
	evt.initEvent( &#039;change&#039;, true, true );&lt;br /&gt;
	result.category.dispatchEvent( evt );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.arv.callback.changeCategory = function (e) {&lt;br /&gt;
	var value = e.target.value;&lt;br /&gt;
	var root = e.target.form;&lt;br /&gt;
	var old_area;&lt;br /&gt;
	for( var i = 0; i &amp;lt; root.childNodes.length; ++i ) {&lt;br /&gt;
		var node = root.childNodes[i];&lt;br /&gt;
		if (node instanceof Element &amp;amp;&amp;amp; node.getAttribute( &#039;name&#039; ) === &#039;work_area&#039;) {&lt;br /&gt;
			old_area = node;&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	var work_area = null;&lt;br /&gt;
&lt;br /&gt;
	switch( value ) {&lt;br /&gt;
	case &#039;aiv&#039;:&lt;br /&gt;
		/* falls through */&lt;br /&gt;
	default:&lt;br /&gt;
		work_area = new QuickForm.element( { &lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Report user for vandalism&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;input&#039;,&lt;br /&gt;
				name: &#039;page&#039;,&lt;br /&gt;
				label: &#039;Primary linked page: &#039;,&lt;br /&gt;
				tooltip: &#039;Leave blank to not link to the page in the report&#039;,&lt;br /&gt;
				value: QueryString.exists( &#039;vanarticle&#039; ) ? QueryString.get( &#039;vanarticle&#039; ) : &#039;&#039;,&lt;br /&gt;
				event: function(e) {&lt;br /&gt;
					var value = e.target.value;&lt;br /&gt;
					var root = e.target.form;&lt;br /&gt;
					if( value === &#039;&#039; ) {&lt;br /&gt;
						root.badid.disabled = root.goodid.disabled = true;&lt;br /&gt;
					} else {&lt;br /&gt;
						root.badid.disabled = false;&lt;br /&gt;
						root.goodid.disabled = root.badid.value === &#039;&#039;;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;input&#039;,&lt;br /&gt;
				name: &#039;badid&#039;,&lt;br /&gt;
				label: &#039;Revision ID for target page when vandalised: &#039;,&lt;br /&gt;
				tooltip: &#039;Leave blank for no diff link&#039;,&lt;br /&gt;
				value: QueryString.exists( &#039;vanarticlerevid&#039; ) ? QueryString.get( &#039;vanarticlerevid&#039; ) : &#039;&#039;,&lt;br /&gt;
				disabled: !QueryString.exists( &#039;vanarticle&#039; ),&lt;br /&gt;
				event: function(e) {&lt;br /&gt;
					var value = e.target.value;&lt;br /&gt;
					var root = e.target.form;&lt;br /&gt;
					root.goodid.disabled = value === &#039;&#039;;&lt;br /&gt;
				}&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;input&#039;,&lt;br /&gt;
				name: &#039;goodid&#039;,&lt;br /&gt;
				label: &#039;Last good revision ID before vandalism of target page: &#039;,&lt;br /&gt;
				tooltip: &#039;Leave blank for diff link to previous revision&#039;,&lt;br /&gt;
				value: QueryString.exists( &#039;vanarticlegoodrevid&#039; ) ? QueryString.get( &#039;vanarticlegoodrevid&#039; ) : &#039;&#039;,&lt;br /&gt;
				disabled: !QueryString.exists( &#039;vanarticle&#039; ) || QueryString.exists( &#039;vanarticlerevid&#039; )&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				name: &#039;arvtype&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
					{ &lt;br /&gt;
						label: &#039;Vandalism after final (level 4 or 4im) warning given&#039;,&lt;br /&gt;
						value: &#039;final&#039;&lt;br /&gt;
					},&lt;br /&gt;
					{ &lt;br /&gt;
						label: &#039;Vandalism after recent (within 1 day) release of block&#039;,&lt;br /&gt;
						value: &#039;postblock&#039;&lt;br /&gt;
					},&lt;br /&gt;
					{ &lt;br /&gt;
						label: &#039;Evidently a vandalism-only account&#039;,&lt;br /&gt;
						value: &#039;vandalonly&#039;,&lt;br /&gt;
						disabled: isIPAddress( root.uid.value )&lt;br /&gt;
					},&lt;br /&gt;
					{ &lt;br /&gt;
						label: &#039;Account is evidently a spambot or a compromised account&#039;,&lt;br /&gt;
						value: &#039;spambot&#039;&lt;br /&gt;
					},&lt;br /&gt;
					{ &lt;br /&gt;
						label: &#039;Account is a promotion-only account&#039;,&lt;br /&gt;
						value: &#039;promoonly&#039;&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				name: &#039;reason&#039;,&lt;br /&gt;
				label: &#039;Comment: &#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	case &#039;username&#039;:&lt;br /&gt;
		work_area = new QuickForm.element( { &lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Report username violation&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append ( { &lt;br /&gt;
				type:&#039;header&#039;, &lt;br /&gt;
				label:&#039;Type(s) of inappropriate username&#039;,&lt;br /&gt;
				tooltip: &#039;Wikipedia does not allow usernames that are misleading, promotional, offensive or disruptive. Domain names and e-mail addresses are likewise prohibited. These criteria apply to both usernames and signatures. Usernames that are inappropriate in another language, or that represent an inappropriate name with misspellings and substitutions, or do so indirectly or by implication, are still considered inappropriate.&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				name: &#039;arvtype&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Misleading username&#039;,&lt;br /&gt;
						value: &#039;misleading&#039;,&lt;br /&gt;
						tooltip: &#039;Misleading usernames imply relevant, misleading things about the contributor. For example, misleading points of fact, an impression of undue authority, or the suggestion that the account is operated by a group, project or collective rather than one individual.&#039;&lt;br /&gt;
					},&lt;br /&gt;
					{ &lt;br /&gt;
						label: &#039;Promotional username&#039;,&lt;br /&gt;
						value: &#039;promotional&#039;,&lt;br /&gt;
						tooltip: &#039;Promotional usernames are advertisements for a company or group.&#039;&lt;br /&gt;
					},&lt;br /&gt;
					{ &lt;br /&gt;
						label: &#039;Offensive username&#039;,&lt;br /&gt;
						value: &#039;offensive&#039;,&lt;br /&gt;
						tooltip: &#039;Offensive usernames make harmonious editing difficult or impossible.&#039;&lt;br /&gt;
					},&lt;br /&gt;
					{ &lt;br /&gt;
						label: &#039;Disruptive username&#039;,&lt;br /&gt;
						value: &#039;disruptive&#039;,&lt;br /&gt;
						tooltip: &#039;Disruptive usernames include outright trolling or personal attacks, or otherwise show a clear intent to disrupt Wikipedia.&#039;&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				name: &#039;reason&#039;,&lt;br /&gt;
				label: &#039;Comment:&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
	case &#039;puppet&#039;:&lt;br /&gt;
		work_area = new QuickForm.element( { &lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Report suspected sockpuppet&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append(&lt;br /&gt;
			{&lt;br /&gt;
				type: &#039;input&#039;,&lt;br /&gt;
				name: &#039;sockmaster&#039;,&lt;br /&gt;
				label: &#039;Sockpuppeteer&#039;,&lt;br /&gt;
				tooltip: &#039;The username of the sockpuppeteer (sockmaster) without the User:-prefix&#039;&lt;br /&gt;
			}&lt;br /&gt;
		);&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				label: &#039;Evidence:&#039;,&lt;br /&gt;
				name: &#039;evidence&#039;,&lt;br /&gt;
				tooltip: &#039;Enter your evidence. It should make clear that each of these users is likely to be abusing multiple accounts. Usually this means diffs, page histories or other information that justifies why the users are a) the same and b) disruptive. This should purely be evidence and information needed to judge the matter. Avoid all other discussion that is not evidence of sockpuppetry or other multiple account abuse.&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Request CheckUser evidence&#039;,&lt;br /&gt;
						name: &#039;checkuser&#039;,&lt;br /&gt;
						tooltip: &#039;CheckUser is a tool used to obtain technical evidence related to a sock-puppetry allegation. It will not be used without good cause, which you must clearly demonstrate. Make sure your evidence explains why CheckUser is appropriate.&#039;&lt;br /&gt;
					},&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Notify reported users&#039;,&lt;br /&gt;
						name: &#039;notify&#039;,&lt;br /&gt;
						tooltip: &#039;Notification is not mandatory. In many cases, especially of chronic sockpuppeteers, notification may be counterproductive. However, especially in less egregious cases involving users who has not been reported before, notification may make the cases fairer and also appear to be fairer in the eyes of the accused. Use your judgment.&#039;&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	case &#039;sock&#039;:&lt;br /&gt;
		work_area = new QuickForm.element( { &lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Report suspected sockpuppeteer&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append(&lt;br /&gt;
			{&lt;br /&gt;
				type: &#039;dyninput&#039;,&lt;br /&gt;
				name: &#039;sockpuppet&#039;,&lt;br /&gt;
				label: &#039;Sockpuppets&#039;,&lt;br /&gt;
				sublabel: &#039;Sock: &#039;,&lt;br /&gt;
				tooltip: &#039;The username of the sockpuppet without the User:-prefix&#039;,&lt;br /&gt;
				min: 2&lt;br /&gt;
			}&lt;br /&gt;
		);&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				label: &#039;Evidence:&#039;,&lt;br /&gt;
				name: &#039;evidence&#039;,&lt;br /&gt;
				tooltip: &#039;Enter your evidence. It should make clear that each of these users is likely to be abusing multiple accounts. Usually this means diffs, page histories or other information that justifies why the users are a) the same and b) disruptive. This should purely be evidence and information needed to judge the matter. Avoid all other discussion that is not evidence of sockpuppetry or other multiple account abuse.&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [ {&lt;br /&gt;
					label: &#039;Request CheckUser evidence&#039;,&lt;br /&gt;
					name: &#039;checkuser&#039;,&lt;br /&gt;
					tooltip: &#039;CheckUser is a tool used to obtain technical evidence related to a sock-puppetry allegation. It will not be used without good cause, which you must clearly demonstrate. Make sure your evidence explains why CheckUser is appropriate.&#039;&lt;br /&gt;
				}, {&lt;br /&gt;
					label: &#039;Notify reported users&#039;,&lt;br /&gt;
					name: &#039;notify&#039;,&lt;br /&gt;
					tooltip: &#039;Notification is not mandatory. In many cases, especially of chronic sockpuppeteers, notification may be counterproductive. However, especially in less egregious cases involving users who has not been reported before, notification may make the cases fairer and also appear to be fairer in the eyes of the accused. Use your judgment.&#039;&lt;br /&gt;
				} ]&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.arv.callback.evaluate = function(e) {&lt;br /&gt;
&lt;br /&gt;
	var form = e.target;&lt;br /&gt;
	var reason = &amp;quot;&amp;quot;;&lt;br /&gt;
	var comment = &amp;quot;&amp;quot;;&lt;br /&gt;
	if ( form.reason ) {&lt;br /&gt;
		comment = form.reason.value;&lt;br /&gt;
	}&lt;br /&gt;
	var uid = form.uid.value;&lt;br /&gt;
&lt;br /&gt;
	var types;&lt;br /&gt;
	switch( form.category.value ) {&lt;br /&gt;
&lt;br /&gt;
		// Report user for vandalism&lt;br /&gt;
		case &#039;aiv&#039;:&lt;br /&gt;
			/* falls through */&lt;br /&gt;
		default:&lt;br /&gt;
			types = form.getChecked( &#039;arvtype&#039; );&lt;br /&gt;
			if( !types.length &amp;amp;&amp;amp; comment === &#039;&#039; ) {&lt;br /&gt;
				alert( &#039;You must specify some reason&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			types = types.map( function(v) {&lt;br /&gt;
					switch(v) {&lt;br /&gt;
						case &#039;final&#039;:&lt;br /&gt;
							return &#039;vandalism after final warning&#039;;&lt;br /&gt;
						case &#039;postblock&#039;:&lt;br /&gt;
							return &#039;vandalism after recent release of block&#039;;&lt;br /&gt;
						case &#039;spambot&#039;:&lt;br /&gt;
							return &#039;account is evidently a spambot or a compromised account&#039;;&lt;br /&gt;
						case &#039;vandalonly&#039;:&lt;br /&gt;
							return &#039;actions evidently indicate a vandalism-only account&#039;;&lt;br /&gt;
						case &#039;promoonly&#039;:&lt;br /&gt;
							return &#039;account is being used only for promotional purposes&#039;;&lt;br /&gt;
						default:&lt;br /&gt;
							return &#039;unknown reason&#039;;&lt;br /&gt;
					}&lt;br /&gt;
				} ).join( &#039;, &#039; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if ( form.page.value !== &#039;&#039; ) {&lt;br /&gt;
			&lt;br /&gt;
				// add a leading : on linked page namespace to prevent transclusion&lt;br /&gt;
				reason = &#039;On [[&#039; + form.page.value.replace( /^(Image|Category|File):/i, &#039;:$1:&#039; ) + &#039;]]&#039;;&lt;br /&gt;
&lt;br /&gt;
				if ( form.badid.value !== &#039;&#039; ) {&lt;br /&gt;
					var query = {&lt;br /&gt;
						&#039;title&#039;: form.page.value,&lt;br /&gt;
						&#039;diff&#039;: form.badid.value,&lt;br /&gt;
						&#039;oldid&#039;: form.goodid.value&lt;br /&gt;
					};&lt;br /&gt;
					reason += &#039; ({{diff|&#039; + form.page.value + &#039;|&#039; + form.badid.value + &#039;|&#039; + form.goodid.value + &#039;|diff}})&#039;;&lt;br /&gt;
				}&lt;br /&gt;
				reason += &#039;;&#039;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( types ) {&lt;br /&gt;
				reason += &amp;quot; &amp;quot; + types;&lt;br /&gt;
			}&lt;br /&gt;
			if (comment !== &amp;quot;&amp;quot; ) {&lt;br /&gt;
				reason += (reason === &amp;quot;&amp;quot; ? &amp;quot;&amp;quot; : &amp;quot;. &amp;quot;) + comment + &amp;quot;.&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			reason += &amp;quot;~~~~&amp;quot;;&lt;br /&gt;
			reason = reason.replace(/\r?\n/g, &amp;quot;\n*:&amp;quot;);  // indent newlines&lt;br /&gt;
&lt;br /&gt;
			SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
			Status.init( form );&lt;br /&gt;
&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = &amp;quot;Wikipedia:Administrator intervention against vandalism&amp;quot;;&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Reporting complete&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			var aivPage = new Wikipedia.page( &#039;Wikipedia:Administrator intervention against vandalism&#039;, &#039;Processing AIV request&#039; );&lt;br /&gt;
			aivPage.setPageSection( 1 );&lt;br /&gt;
			aivPage.setFollowRedirect( true );&lt;br /&gt;
			&lt;br /&gt;
			aivPage.load( function() {&lt;br /&gt;
				var text = aivPage.getPageText();&lt;br /&gt;
&lt;br /&gt;
				// check if user has already been reported&lt;br /&gt;
				if (new RegExp( &amp;quot;\\{\\{\\s*(?:(?:[Ii][Pp])?[Vv]andal|[Uu]serlinks)\\s*\\|\\s*(?:1=)?\\s*&amp;quot; + RegExp.escape( uid, true ) + &amp;quot;\\s*\\}\\}&amp;quot; ).test(text)) {&lt;br /&gt;
					aivPage.getStatusElement().info( &#039;Report already present, will not add a new one&#039; );&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				aivPage.getStatusElement().status( &#039;Adding new report...&#039; );&lt;br /&gt;
				aivPage.setEditSummary( &#039;Reporting [[Special:Contributions/&#039; + uid + &#039;|&#039; + uid + &#039;]].&#039; + Twinkle.getPref(&#039;summaryAd&#039;) );&lt;br /&gt;
				aivPage.setAppendText( &#039;\n*{{&#039; + ( isIPAddress( uid ) ? &#039;IPvandal&#039; : &#039;vandal&#039; ) + &#039;|&#039; + (/\=/.test( uid ) ? &#039;1=&#039; : &#039;&#039; ) + uid + &#039;}} - &#039; + reason );&lt;br /&gt;
				aivPage.append();&lt;br /&gt;
			} );&lt;br /&gt;
			break;&lt;br /&gt;
			&lt;br /&gt;
		// Report inappropriate username&lt;br /&gt;
		case &#039;username&#039;:&lt;br /&gt;
			types = form.getChecked( &#039;arvtype&#039; );&lt;br /&gt;
			if( !types.length ) {&lt;br /&gt;
				alert( &#039;You must specify at least one breached violation&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			types = types.map( function( v ) { return v.toLowerCaseFirstChar(); } );&lt;br /&gt;
&lt;br /&gt;
			if ( types.length &amp;lt;= 2 ) {&lt;br /&gt;
				types = types.join( &#039; and &#039; );&lt;br /&gt;
			} else {&lt;br /&gt;
				types = [ types.slice( 0, -1 ).join( &#039;, &#039; ), types.slice( -1 ) ].join( &#039; and &#039; );&lt;br /&gt;
			}&lt;br /&gt;
			var article = &#039;a&#039;;&lt;br /&gt;
			if ( /[aeiouwyh]/.test( types[0] ) ) { // non 100% correct, but whatever, inlcuding &#039;h&#039; for Cockney&lt;br /&gt;
				article = &#039;an&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			reason = &amp;quot;*{{user-uaa|1=&amp;quot; + uid + &amp;quot;}} &amp;amp;mdash; Violation of username policy as &amp;quot; + article + &amp;quot; &amp;quot; + types + &amp;quot; username. &amp;quot;;&lt;br /&gt;
			if (comment !== &#039;&#039; ) {&lt;br /&gt;
				reason += comment.toUpperCaseFirstChar() + &amp;quot;. &amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			reason += &amp;quot;~~~~&amp;quot;;&lt;br /&gt;
			reason = reason.replace(/\r?\n/g, &amp;quot;\n*:&amp;quot;);  // indent newlines&lt;br /&gt;
&lt;br /&gt;
			SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
			Status.init( form );&lt;br /&gt;
&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = &amp;quot;Wikipedia:Usernames for administrator attention&amp;quot;;&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Reporting complete&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			var uaaPage = new Wikipedia.page( &#039;Wikipedia:Usernames for administrator attention&#039;, &#039;Processing UAA request&#039; );&lt;br /&gt;
			uaaPage.setFollowRedirect( true );&lt;br /&gt;
&lt;br /&gt;
			uaaPage.load( function() {&lt;br /&gt;
				var text = uaaPage.getPageText();&lt;br /&gt;
				&lt;br /&gt;
				// check if user has already been reported&lt;br /&gt;
				if (new RegExp( &amp;quot;\\{\\{\\s*user-uaa\\s*\\|\\s*(1\\s*=\\s*)?&amp;quot; + RegExp.escape(uid, true) + &amp;quot;\\s*(\\||\\})&amp;quot; ).test(text)) {&lt;br /&gt;
					uaaPage.getStatusElement().error( &#039;User is already listed.&#039; );&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				uaaPage.getStatusElement().status( &#039;Adding new report...&#039; );&lt;br /&gt;
				uaaPage.setEditSummary( &#039;Reporting [[Special:Contributions/&#039; + uid + &#039;|&#039; + uid + &#039;]].&#039;+ Twinkle.getPref(&#039;summaryAd&#039;) );&lt;br /&gt;
				uaaPage.setPageText( text.replace( /List begins below this line.\s*--&amp;gt;/, &amp;quot;List begins below this line.\n--&amp;gt;\n&amp;quot; + reason ) );  // add at top&lt;br /&gt;
				uaaPage.save();&lt;br /&gt;
			} );&lt;br /&gt;
			break;&lt;br /&gt;
			&lt;br /&gt;
		// MP:SPI&lt;br /&gt;
		case &amp;quot;sock&amp;quot;:&lt;br /&gt;
			/* falls through */&lt;br /&gt;
		case &amp;quot;puppet&amp;quot;:&lt;br /&gt;
			var sockParameters = {&lt;br /&gt;
				evidence: form.evidence.value.rtrim(), &lt;br /&gt;
				checkuser: form.checkuser.checked, &lt;br /&gt;
				notify: form.notify.checked&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			var puppetReport = form.category.value === &amp;quot;puppet&amp;quot;;&lt;br /&gt;
			if (puppetReport &amp;amp;&amp;amp; !(form.sockmaster.value.trim())) {&lt;br /&gt;
				if (!confirm(&amp;quot;You have not entered a sockmaster account for this puppet. Do you want to report this account as a sockpuppeteer instead?&amp;quot;)) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				puppetReport = false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			sockParameters.uid = puppetReport ? form.sockmaster.value.rtrim() : uid;&lt;br /&gt;
			sockParameters.sockpuppets = puppetReport ? [uid] : $.map( $(&#039;input:text[@name=sockpuppet]&#039;,form), function(o){ return $(o).val(); });&lt;br /&gt;
&lt;br /&gt;
			SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
			Status.init( form );&lt;br /&gt;
			Twinkle.arv.processSock( sockParameters );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.arv.processSock = function( params ) {&lt;br /&gt;
	Wikipedia.addCheckpoint(); // prevent notification events from causing an erronous &amp;quot;action completed&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	// notify all user accounts if requested&lt;br /&gt;
	if (params.notify &amp;amp;&amp;amp; params.sockpuppets.length&amp;gt;0) {&lt;br /&gt;
	&lt;br /&gt;
		var notifyEditSummary = &amp;quot;Notifying about suspicion of sockpuppeteering.&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;);&lt;br /&gt;
		var notifyText = &amp;quot;\n\n{{subst:socksuspectnotice|1=&amp;quot; + params.uid + &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		// notify user&#039;s master account&lt;br /&gt;
		var masterTalkPage = new Wikipedia.page( &#039;User talk:&#039; + params.uid, &#039;Notifying suspected sockpuppeteer&#039; );&lt;br /&gt;
		masterTalkPage.setFollowRedirect( true );&lt;br /&gt;
		masterTalkPage.setEditSummary( notifyEditSummary );&lt;br /&gt;
		masterTalkPage.setAppendText( notifyText );&lt;br /&gt;
		masterTalkPage.append();&lt;br /&gt;
&lt;br /&gt;
		var statusIndicator = new Status( &#039;Notifying suspected sockpuppets&#039;, &#039;0%&#039; );&lt;br /&gt;
		var total = params.sockpuppets.length;&lt;br /&gt;
		var current =   0;&lt;br /&gt;
		&lt;br /&gt;
		// display status of notifications as they progress&lt;br /&gt;
		var onSuccess = function( sockTalkPage ) {&lt;br /&gt;
			var now = parseInt( 100 * ++(current)/total, 10 ) + &#039;%&#039;;&lt;br /&gt;
			statusIndicator.update( now );&lt;br /&gt;
			sockTalkPage.getStatusElement().unlink();&lt;br /&gt;
			if ( current &amp;gt;= total ) {&lt;br /&gt;
				statusIndicator.info( now + &#039; (completed)&#039; );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		&lt;br /&gt;
		var socks = params.sockpuppets;&lt;br /&gt;
&lt;br /&gt;
		// notify each puppet account&lt;br /&gt;
		for( var i = 0; i &amp;lt; socks.length; ++i ) {&lt;br /&gt;
			var sockTalkPage = new Wikipedia.page( &#039;User talk:&#039; + socks[i], &amp;quot;Notification for &amp;quot; +  socks[i] );&lt;br /&gt;
			sockTalkPage.setFollowRedirect( true );&lt;br /&gt;
			sockTalkPage.setEditSummary( notifyEditSummary );&lt;br /&gt;
			sockTalkPage.setAppendText( notifyText );&lt;br /&gt;
			sockTalkPage.append( onSuccess );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// prepare the SPI report&lt;br /&gt;
	var text = &amp;quot;\n\n{{subst:SPI report|socksraw=&amp;quot; +&lt;br /&gt;
		params.sockpuppets.map( function(v) { &lt;br /&gt;
				return &amp;quot;* {{&amp;quot; + ( isIPAddress( v ) ? &amp;quot;checkip&amp;quot; : &amp;quot;checkuser&amp;quot; ) + &amp;quot;|1=&amp;quot; + v + &amp;quot;}}&amp;quot;;&lt;br /&gt;
			} ).join( &amp;quot;\n&amp;quot; ) + &amp;quot;\n|evidence=&amp;quot; + params.evidence + &amp;quot; \n&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
	if ( params.checkuser ) {&lt;br /&gt;
		text += &amp;quot;|checkuser=yes&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	text += &amp;quot;}}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var reportpage = &#039;Wikipedia:Sockpuppet investigations/&#039; + params.uid;&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = reportpage;&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Reporting complete&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var spiPage = new Wikipedia.page( reportpage, &#039;Retrieving discussion page&#039; );&lt;br /&gt;
	spiPage.setFollowRedirect( true );&lt;br /&gt;
	spiPage.setEditSummary( &#039;Adding new report for [[Special:Contributions/&#039; + params.uid + &#039;|&#039; + params.uid + &#039;]].&#039;+ Twinkle.getPref(&#039;summaryAd&#039;) );&lt;br /&gt;
	spiPage.setAppendText( text );&lt;br /&gt;
	spiPage.append();&lt;br /&gt;
	&lt;br /&gt;
	Wikipedia.removeCheckpoint();  // all page updates have been started&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklebatchdelete.js: Batch delete module (sysops only)&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;D-batch&amp;quot;)&lt;br /&gt;
 * Active on:              Existing and non-existing non-articles, and Special:PrefixIndex&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchdelete = function twinklebatchdelete() {&lt;br /&gt;
	if( userIsInGroup( &#039;sysop&#039; ) &amp;amp;&amp;amp; (mw.config.get( &#039;wgNamespaceNumber&#039; ) &amp;gt; 0 || mw.config.get( &#039;wgCanonicalSpecialPageName&#039; ) === &#039;Prefixindex&#039;) ) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;D-batch&amp;quot;, &amp;quot;tw-batch&amp;quot;, &amp;quot;Delete pages found in this category/on this page&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.batchdelete.callback);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchdelete.unlinkCache = {};&lt;br /&gt;
Twinkle.batchdelete.callback = function twinklebatchdeleteCallback() {&lt;br /&gt;
	var Window = new SimpleWindow( 800, 400 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Batch deletion&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#batchdelete&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.batchdelete.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;checkbox&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{ &lt;br /&gt;
					label: &#039;Delete pages&#039;,&lt;br /&gt;
					name: &#039;delete_page&#039;,&lt;br /&gt;
					value: &#039;delete&#039;,&lt;br /&gt;
					checked: true&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Remove backlinks to the page&#039;,&lt;br /&gt;
					name: &#039;unlink_page&#039;,&lt;br /&gt;
					value: &#039;unlink&#039;,&lt;br /&gt;
					checked: true&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Delete redirects to deleted pages&#039;,&lt;br /&gt;
					name: &#039;delete_redirects&#039;,&lt;br /&gt;
					value: &#039;delete_redirects&#039;,&lt;br /&gt;
					checked: true&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;textarea&#039;,&lt;br /&gt;
			name: &#039;reason&#039;,&lt;br /&gt;
			label: &#039;Reason: &#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	var query;&lt;br /&gt;
	if( mw.config.get( &#039;wgNamespaceNumber&#039; ) === Namespace.CATEGORY ) {&lt;br /&gt;
&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;generator&#039;: &#039;categorymembers&#039;,&lt;br /&gt;
			&#039;gcmtitle&#039;: mw.config.get( &#039;wgPageName&#039; ),&lt;br /&gt;
			&#039;gcmlimit&#039; : Twinkle.getPref(&#039;batchMax&#039;), // the max for sysops&lt;br /&gt;
			&#039;prop&#039;: [ &#039;categories&#039;, &#039;revisions&#039; ],&lt;br /&gt;
			&#039;rvprop&#039;: [ &#039;size&#039; ]&lt;br /&gt;
		};&lt;br /&gt;
	} else if( mw.config.get( &#039;wgCanonicalSpecialPageName&#039; ) === &#039;Prefixindex&#039; ) {&lt;br /&gt;
&lt;br /&gt;
		var gapnamespace, gapprefix;&lt;br /&gt;
		if(QueryString.exists( &#039;from&#039; ) )&lt;br /&gt;
		{&lt;br /&gt;
			gapnamespace = QueryString.get( &#039;namespace&#039; );&lt;br /&gt;
			gapprefix = QueryString.get( &#039;from&#039; ).toUpperCaseFirstChar();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var pathSplit = location.pathname.split(&#039;/&#039;);&lt;br /&gt;
			if (pathSplit.length &amp;lt; 3 || pathSplit[2] !== &amp;quot;Special:PrefixIndex&amp;quot;) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			var titleSplit = pathSplit[3].split(&#039;:&#039;);&lt;br /&gt;
			gapnamespace = Namespace[titleSplit[0].toUpperCase()];&lt;br /&gt;
			if ( titleSplit.length &amp;lt; 2 || typeof(gapnamespace) === &#039;undefined&#039; )&lt;br /&gt;
			{&lt;br /&gt;
				gapnamespace = Namespace.MAIN;&lt;br /&gt;
				gapprefix = pathSplit.splice(3).join(&#039;/&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				pathSplit = pathSplit.splice(4);&lt;br /&gt;
				pathSplit.splice(0,0,titleSplit.splice(1).join(&#039;:&#039;));&lt;br /&gt;
				gapprefix = pathSplit.join(&#039;/&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;generator&#039;: &#039;allpages&#039;,&lt;br /&gt;
			&#039;gapnamespace&#039;: gapnamespace ,&lt;br /&gt;
			&#039;gapprefix&#039;: gapprefix,&lt;br /&gt;
			&#039;gaplimit&#039; : Twinkle.getPref(&#039;batchMax&#039;), // the max for sysops&lt;br /&gt;
			&#039;prop&#039; : [&#039;categories&#039;, &#039;revisions&#039; ],&lt;br /&gt;
			&#039;rvprop&#039;: [ &#039;size&#039; ]&lt;br /&gt;
		};&lt;br /&gt;
	} else {&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;generator&#039;: &#039;links&#039;,&lt;br /&gt;
			&#039;titles&#039;: mw.config.get( &#039;wgPageName&#039; ),&lt;br /&gt;
			&#039;gpllimit&#039; : Twinkle.getPref(&#039;batchMax&#039;), // the max for sysops&lt;br /&gt;
			&#039;prop&#039;: [ &#039;categories&#039;, &#039;revisions&#039; ],&lt;br /&gt;
			&#039;rvprop&#039;: [ &#039;size&#039; ]&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var wikipedia_api = new Wikipedia.api( &#039;Grabbing pages&#039;, query, function( self ) {&lt;br /&gt;
			var xmlDoc = self.responseXML;&lt;br /&gt;
			var snapshot = xmlDoc.evaluate(&#039;//page[@ns != &amp;quot;&#039; + Namespace.IMAGE + &#039;&amp;quot; and not(@missing)]&#039;, xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );&lt;br /&gt;
			var list = [];&lt;br /&gt;
			for ( var i = 0; i &amp;lt; snapshot.snapshotLength; ++i ) {&lt;br /&gt;
				var object = snapshot.snapshotItem(i);&lt;br /&gt;
				var page = xmlDoc.evaluate( &#039;@title&#039;, object, null, XPathResult.STRING_TYPE, null ).stringValue;&lt;br /&gt;
				var size = xmlDoc.evaluate( &#039;revisions/rev/@size&#039;, object, null, XPathResult.NUMBER_TYPE, null ).numberValue;&lt;br /&gt;
&lt;br /&gt;
				var disputed = xmlDoc.evaluate( &#039;boolean(categories/cl[@title=&amp;quot;Category:Contested candidates for speedy deletion&amp;quot;])&#039;, object, null, XPathResult.BOOLEAN_TYPE, null ).booleanValue;&lt;br /&gt;
				list.push( {label:page + &#039; (&#039; + size + &#039; bytes)&#039; + ( disputed ? &#039; (DISPUTED CSD)&#039; : &#039;&#039; ), value:page, checked:!disputed });&lt;br /&gt;
			}&lt;br /&gt;
			self.params.form.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					name: &#039;pages&#039;,&lt;br /&gt;
					list: list&lt;br /&gt;
				} );&lt;br /&gt;
			self.params.form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
			var result = self.params.form.render();&lt;br /&gt;
			self.params.Window.setContent( result );&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	wikipedia_api.params = { form:form, Window:Window };&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
	var root = document.createElement( &#039;div&#039; );&lt;br /&gt;
	Status.init( root );&lt;br /&gt;
	Window.setContent( root );&lt;br /&gt;
	Window.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchdelete.currentDeleteCounter = 0;&lt;br /&gt;
Twinkle.batchdelete.currentUnlinkCounter = 0;&lt;br /&gt;
Twinkle.batchdelete.currentdeletor = 0;&lt;br /&gt;
Twinkle.batchdelete.callback.evaluate = function twinklebatchdeleteCallbackEvaluate(event) {&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &#039;Status&#039;;&lt;br /&gt;
	Wikipedia.actionCompleted.postfix = &#039;batch deletion is now complete&#039;;&lt;br /&gt;
	mw.config.set(&#039;wgPageName&#039;, mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;));  // for queen/king/whatever and country!&lt;br /&gt;
	var pages = event.target.getChecked( &#039;pages&#039; );&lt;br /&gt;
	var reason = event.target.reason.value;&lt;br /&gt;
	var delete_page = event.target.delete_page.checked;&lt;br /&gt;
	var unlink_page = event.target.unlink_page.checked;&lt;br /&gt;
	var delete_redirects = event.target.delete_redirects.checked;&lt;br /&gt;
	if( ! reason ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( event.target );&lt;br /&gt;
	if( !pages ) {&lt;br /&gt;
		Status.error( &#039;Error&#039;, &#039;nothing to delete, aborting&#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function toCall( work ) {&lt;br /&gt;
		if( work.length === 0 &amp;amp;&amp;amp;  Twinkle.batchdelete.currentDeleteCounter &amp;lt;= 0 &amp;amp;&amp;amp; Twinkle.batchdelete.currentUnlinkCounter &amp;lt;= 0 ) {&lt;br /&gt;
			window.clearInterval( Twinkle.batchdelete.currentdeletor );&lt;br /&gt;
			Wikipedia.removeCheckpoint();&lt;br /&gt;
			return;&lt;br /&gt;
		} else if( work.length !== 0 &amp;amp;&amp;amp; ( Twinkle.batchdelete.currentDeleteCounter &amp;lt;= Twinkle.getPref(&#039;batchDeleteMinCutOff&#039;) || Twinkle.batchdelete.currentUnlinkCounter &amp;lt;= Twinkle.getPref(&#039;batchDeleteMinCutOff&#039;)  ) ) {&lt;br /&gt;
			Twinkle.batchdelete.unlinkCache = []; // Clear the cache&lt;br /&gt;
			var pages = work.shift();&lt;br /&gt;
			Twinkle.batchdelete.currentDeleteCounter += pages.length;&lt;br /&gt;
			Twinkle.batchdelete.currentUnlinkCounter += pages.length;&lt;br /&gt;
			for( var i = 0; i &amp;lt; pages.length; ++i ) {&lt;br /&gt;
				var page = pages[i];&lt;br /&gt;
				var query = {&lt;br /&gt;
					&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
					&#039;titles&#039;: page&lt;br /&gt;
				};&lt;br /&gt;
				var wikipedia_api = new Wikipedia.api( &#039;Checking if page &#039; + page + &#039; exists&#039;, query, Twinkle.batchdelete.callbacks.main );&lt;br /&gt;
				wikipedia_api.params = { page:page, reason:reason, unlink_page:unlink_page, delete_page:delete_page, delete_redirects:delete_redirects };&lt;br /&gt;
				wikipedia_api.post();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	var work = pages.chunk( Twinkle.getPref(&#039;batchdeleteChunks&#039;) );&lt;br /&gt;
	Wikipedia.addCheckpoint();&lt;br /&gt;
	Twinkle.batchdelete.currentdeletor = window.setInterval( toCall, 1000, work );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchdelete.callbacks = {&lt;br /&gt;
	main: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var normal = xmlDoc.evaluate( &#039;//normalized/n/@to&#039;, xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;&lt;br /&gt;
		if( normal ) {&lt;br /&gt;
			self.params.page = normal;&lt;br /&gt;
		}&lt;br /&gt;
		var exists = xmlDoc.evaluate( &#039;boolean(//pages/page[not(@missing)])&#039;, xmlDoc, null, XPathResult.BOOLEAN_TYPE, null ).booleanValue;&lt;br /&gt;
&lt;br /&gt;
		if( ! exists ) {&lt;br /&gt;
			self.statelem.error( &amp;quot;It seems that the page doesn&#039;t exist, perhaps it has already been deleted&amp;quot; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var query, wikipedia_api;&lt;br /&gt;
		if( self.params.unlink_page ) {&lt;br /&gt;
			query = {&lt;br /&gt;
				&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
				&#039;list&#039;: &#039;backlinks&#039;,&lt;br /&gt;
				&#039;blfilterredir&#039;: &#039;nonredirects&#039;,&lt;br /&gt;
				&#039;blnamespace&#039;: [0, 100], // main space and portal space only&lt;br /&gt;
				&#039;bltitle&#039;: self.params.page,&lt;br /&gt;
				&#039;bllimit&#039;: userIsInGroup( &#039;sysop&#039; ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			};&lt;br /&gt;
			wikipedia_api = new Wikipedia.api( &#039;Grabbing backlinks&#039;, query, Twinkle.batchdelete.callbacks.unlinkBacklinksMain );&lt;br /&gt;
			wikipedia_api.params = self.params;&lt;br /&gt;
			wikipedia_api.post();&lt;br /&gt;
		} else {&lt;br /&gt;
			--Twinkle.batchdelete.currentUnlinkCounter;&lt;br /&gt;
		}&lt;br /&gt;
		if( self.params.delete_page ) {&lt;br /&gt;
			if (self.params.delete_redirects)&lt;br /&gt;
			{&lt;br /&gt;
				query = {&lt;br /&gt;
					&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
					&#039;list&#039;: &#039;backlinks&#039;,&lt;br /&gt;
					&#039;blfilterredir&#039;: &#039;redirects&#039;,&lt;br /&gt;
					&#039;bltitle&#039;: self.params.page,&lt;br /&gt;
					&#039;bllimit&#039;: userIsInGroup( &#039;sysop&#039; ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
				};&lt;br /&gt;
				wikipedia_api = new Wikipedia.api( &#039;Grabbing redirects&#039;, query, Twinkle.batchdelete.callbacks.deleteRedirectsMain );&lt;br /&gt;
				wikipedia_api.params = self.params;&lt;br /&gt;
				wikipedia_api.post();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var wikipedia_page = new Wikipedia.page( self.params.page, &#039;Deleting page &#039; + self.params.page );&lt;br /&gt;
			wikipedia_page.setEditSummary(self.params.reason + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
			wikipedia_page.deletePage(function( apiobj ) { &lt;br /&gt;
					--Twinkle.batchdelete.currentDeleteCounter;&lt;br /&gt;
					var link = document.createElement( &#039;a&#039; );&lt;br /&gt;
					link.setAttribute( &#039;href&#039;, mw.util.getUrl(self.params.page) );&lt;br /&gt;
					link.setAttribute( &#039;title&#039;, self.params.page );&lt;br /&gt;
					link.appendChild( document.createTextNode( self.params.page ) );&lt;br /&gt;
					apiobj.statelem.info( [ &#039;completed (&#039; , link , &#039;)&#039; ] );&lt;br /&gt;
				} );	&lt;br /&gt;
		} else {&lt;br /&gt;
			--Twinkle.batchdelete.currentDeleteCounter;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	deleteRedirectsMain: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var snapshot = xmlDoc.evaluate(&#039;//backlinks/bl/@title&#039;, xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );&lt;br /&gt;
&lt;br /&gt;
		var total = snapshot.snapshotLength;&lt;br /&gt;
&lt;br /&gt;
		if( snapshot.snapshotLength === 0 ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var statusIndicator = new Status(&#039;Deleting redirects for &#039; + self.params.page, &#039;0%&#039;);&lt;br /&gt;
&lt;br /&gt;
		var onsuccess = function( self ) {&lt;br /&gt;
			var obj = self.params.obj;&lt;br /&gt;
			var total = self.params.total;&lt;br /&gt;
			var now = parseInt( 100 * ++(self.params.current)/total, 10 ) + &#039;%&#039;;&lt;br /&gt;
			obj.update( now );&lt;br /&gt;
			self.statelem.unlink();&lt;br /&gt;
			if( self.params.current &amp;gt;= total ) {&lt;br /&gt;
				obj.info( now + &#039; (completed)&#039; );&lt;br /&gt;
				Wikipedia.removeCheckpoint();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		Wikipedia.addCheckpoint();&lt;br /&gt;
		if( snapshot.snapshotLength === 0 ) {&lt;br /&gt;
			statusIndicator.info( &#039;100% (completed)&#039; );&lt;br /&gt;
			Wikipedia.removeCheckpoint();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var params = clone( self.params );&lt;br /&gt;
		params.current = 0;&lt;br /&gt;
		params.total = total;&lt;br /&gt;
		params.obj = statusIndicator;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		for ( var i = 0; i &amp;lt; snapshot.snapshotLength; ++i ) {&lt;br /&gt;
			var title = snapshot.snapshotItem(i).value;&lt;br /&gt;
			var wikipedia_page = new Wikipedia.page( title, &amp;quot;Deleting &amp;quot; + title );&lt;br /&gt;
			wikipedia_page.setEditSummary(&#039;[[MP:CSD#G8|G8]]: Redirect to deleted page &amp;quot;&#039; + self.params.page + &#039;&amp;quot;&#039; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.deletePage(onsuccess);&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	unlinkBacklinksMain: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var snapshot = xmlDoc.evaluate(&#039;//backlinks/bl/@title&#039;, xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );&lt;br /&gt;
&lt;br /&gt;
		if( snapshot.snapshotLength === 0 ) {&lt;br /&gt;
			--Twinkle.batchdelete.currentUnlinkCounter;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var statusIndicator = new Status(&#039;Unlinking backlinks to &#039; + self.params.page, &#039;0%&#039;);&lt;br /&gt;
&lt;br /&gt;
		var total = snapshot.snapshotLength * 2;&lt;br /&gt;
&lt;br /&gt;
		var onsuccess = function( self ) {&lt;br /&gt;
			var obj = self.params.obj;&lt;br /&gt;
			var total = self.params.total;&lt;br /&gt;
			var now = parseInt( 100 * ++(self.params.current)/total, 10 ) + &#039;%&#039;;&lt;br /&gt;
			obj.update( now );&lt;br /&gt;
			self.statelem.unlink();&lt;br /&gt;
			if( self.params.current &amp;gt;= total ) {&lt;br /&gt;
				obj.info( now + &#039; (completed)&#039; );&lt;br /&gt;
				--Twinkle.batchdelete.currentUnlinkCounter;&lt;br /&gt;
				Wikipedia.removeCheckpoint();&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		Wikipedia.addCheckpoint();&lt;br /&gt;
		if( snapshot.snapshotLength === 0 ) {&lt;br /&gt;
			statusIndicator.info( &#039;100% (completed)&#039; );&lt;br /&gt;
			--Twinkle.batchdelete.currentUnlinkCounter;&lt;br /&gt;
			Wikipedia.removeCheckpoint();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		self.params.total = total;&lt;br /&gt;
		self.params.obj = statusIndicator;&lt;br /&gt;
		self.params.current =   0;&lt;br /&gt;
&lt;br /&gt;
		for ( var i = 0; i &amp;lt; snapshot.snapshotLength; ++i ) {&lt;br /&gt;
			var title = snapshot.snapshotItem(i).value;&lt;br /&gt;
			var wikipedia_page = new Wikipedia.page( title, &amp;quot;Unlinking on &amp;quot; + title );&lt;br /&gt;
			var params = clone( self.params );&lt;br /&gt;
			params.title = title;&lt;br /&gt;
			params.onsuccess = onsuccess;&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.batchdelete.callbacks.unlinkBacklinks);&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	unlinkBacklinks: function( pageobj ) {&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
		if( ! pageobj.exists() ) {&lt;br /&gt;
			// we probably just deleted it, as a recursive backlink&lt;br /&gt;
			params.onsuccess( { params: params, statelem: pageobj.getStatusElement() } );&lt;br /&gt;
			Wikipedia.actionCompleted();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		var text;&lt;br /&gt;
&lt;br /&gt;
		if( params.title in Twinkle.batchdelete.unlinkCache ) {&lt;br /&gt;
			text = Twinkle.batchdelete.unlinkCache[ params.title ];&lt;br /&gt;
		} else {&lt;br /&gt;
			text = pageobj.getPageText();&lt;br /&gt;
		}&lt;br /&gt;
		var old_text = text;&lt;br /&gt;
		var wikiPage = new Mediawiki.Page( text );&lt;br /&gt;
		wikiPage.removeLink( params.page );&lt;br /&gt;
&lt;br /&gt;
		text = wikiPage.getText();&lt;br /&gt;
		Twinkle.batchdelete.unlinkCache[ params.title ] = text;&lt;br /&gt;
		if( text === old_text ) {&lt;br /&gt;
			// Nothing to do, return&lt;br /&gt;
			params.onsuccess( { params: params, statelem: pageobj.getStatusElement() } );&lt;br /&gt;
			Wikipedia.actionCompleted();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		pageobj.setEditSummary(&#039;Removing link(s) to deleted page &#039; + self.params.page + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
		pageobj.save(params.onsuccess);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklebatchprotect.js: Batch protect module (sysops only)&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;P-batch&amp;quot;)&lt;br /&gt;
 * Active on:              Existing and non-existing non-articles, and Special:PrefixIndex&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchprotect = function twinklebatchprotect() {&lt;br /&gt;
	if( userIsInGroup( &#039;sysop&#039; ) &amp;amp;&amp;amp; (wgNamespaceNumber &amp;gt; 0 || wgCanonicalSpecialPageName == &#039;Prefixindex&#039;) ) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;P-batch&amp;quot;, &amp;quot;tw-pbatch&amp;quot;, &amp;quot;Protect pages found on this page&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.batchprotect.callback);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchprotect.unlinkCache = {};&lt;br /&gt;
Twinkle.batchprotect.callback = function twinklebatchprotectCallback() {&lt;br /&gt;
	var Window = new SimpleWindow( 800, 400 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Batch protection&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.batchprotect.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;select&#039;,&lt;br /&gt;
			name: &#039;move&#039;,&lt;br /&gt;
			label: &#039;Move protection&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{ &lt;br /&gt;
					label: &#039;Allow all users (still autoconfirmed)&#039;,&lt;br /&gt;
					value: &#039;&#039;,&lt;br /&gt;
					selected: true&lt;br /&gt;
				},&lt;br /&gt;
				{ &lt;br /&gt;
					label: &#039;Block new and unregistered users&#039;,&lt;br /&gt;
					value: &#039;autoconfirmed&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Block all non-admin users&#039;,&lt;br /&gt;
					value: &#039;sysop&#039;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;select&#039;,&lt;br /&gt;
			name: &#039;edit&#039;,&lt;br /&gt;
			label: &#039;Edit protection&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{ &lt;br /&gt;
					label: &#039;Allow all users&#039;,&lt;br /&gt;
					value: &#039;&#039;,&lt;br /&gt;
					selected: true&lt;br /&gt;
				},&lt;br /&gt;
				{ &lt;br /&gt;
					label: &#039;Block new and unregistered users&#039;,&lt;br /&gt;
					value: &#039;autoconfirmed&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Block all non-admin users&#039;,&lt;br /&gt;
					value: &#039;sysop&#039;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;select&#039;,&lt;br /&gt;
			name: &#039;create&#039;,&lt;br /&gt;
			label: &#039;Create protection&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{ &lt;br /&gt;
					label: &#039;Allow all users (still autoconfirmed)&#039;,&lt;br /&gt;
					value: &#039;&#039;,&lt;br /&gt;
					selected: true&lt;br /&gt;
				},&lt;br /&gt;
				{ &lt;br /&gt;
					label: &#039;Block new and unregistered users&#039;,&lt;br /&gt;
					value: &#039;autoconfirmed&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Block all non-admin users&#039;,&lt;br /&gt;
					value: &#039;sysop&#039;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;checkbox&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					name: &#039;cascade&#039;,&lt;br /&gt;
					label: &#039;Cascade protection&#039;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;select&#039;,&lt;br /&gt;
			name: &#039;expiry&#039;,&lt;br /&gt;
			label: &#039;Expiration: &#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{ label: &#039;15 minutes&#039;, value: &#039;15 minutes&#039; },&lt;br /&gt;
				{ label: &#039;30 minutes&#039;, value: &#039;30 minutes&#039; },&lt;br /&gt;
				{ label: &#039;45 minutes&#039;, value: &#039;45 minutes&#039; },&lt;br /&gt;
				{ label: &#039;1 hour&#039;, value: &#039;1 hour&#039; },&lt;br /&gt;
				{ label: &#039;2 hours&#039;, value: &#039;2 hours&#039; },&lt;br /&gt;
				{ label: &#039;3 hours&#039;, value: &#039;3 hours&#039; },&lt;br /&gt;
				{ label: &#039;6 hours&#039;, value: &#039;6 hours&#039; },&lt;br /&gt;
				{ label: &#039;12 hours&#039;, value: &#039;12 hours&#039; },&lt;br /&gt;
				{ label: &#039;1 day&#039;, value: &#039;1 day&#039; },&lt;br /&gt;
				{ label: &#039;2 days&#039;, value: &#039;2 days&#039; },&lt;br /&gt;
				{ label: &#039;3 days&#039;, value: &#039;3 days&#039; },&lt;br /&gt;
				{ label: &#039;4 days&#039;, value: &#039;4 days&#039; },&lt;br /&gt;
				{ label: &#039;5 days&#039;, value: &#039;5 days&#039; },&lt;br /&gt;
				{ label: &#039;6 days&#039;, value: &#039;6 days&#039; },&lt;br /&gt;
				{ label: &#039;1 week&#039;, value: &#039;1 week&#039; },&lt;br /&gt;
				{ label: &#039;2 weeks&#039;, value: &#039;2 weeks&#039; },&lt;br /&gt;
				{ label: &#039;1 month&#039;, value: &#039;1 month&#039; },&lt;br /&gt;
				{ label: &#039;2 months&#039;, value: &#039;2 months&#039; },&lt;br /&gt;
				{ label: &#039;3 months&#039;, value: &#039;3 months&#039; },&lt;br /&gt;
				{ label: &#039;6 months&#039;, value: &#039;6 months&#039; },&lt;br /&gt;
				{ label: &#039;1 year&#039;, value: &#039;1 year&#039; },&lt;br /&gt;
				{ label: &#039;2 years&#039;, value: &#039;2 years&#039; },&lt;br /&gt;
				{ label: &#039;3 years&#039;, value: &#039;3 years&#039; },&lt;br /&gt;
				{ label: &#039;6 years&#039;, value: &#039;6 years&#039; },&lt;br /&gt;
				{ label: &#039;indefinite&#039;, selected: true, value:&#039;indefinite&#039; }&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;textarea&#039;,&lt;br /&gt;
			name: &#039;reason&#039;,&lt;br /&gt;
			label: &#039;Reason: &#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	var query;&lt;br /&gt;
&lt;br /&gt;
	if( wgNamespaceNumber == Namespace.CATEGORY ) {&lt;br /&gt;
&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;generator&#039;: &#039;categorymembers&#039;,&lt;br /&gt;
			&#039;gcmtitle&#039;: wgPageName,&lt;br /&gt;
			&#039;gcmlimit&#039; : Twinkle.getPref(&#039;batchMax&#039;), // the max for sysops&lt;br /&gt;
			&#039;prop&#039;: [ &#039;revisions&#039; ],&lt;br /&gt;
			&#039;rvprop&#039;: [ &#039;size&#039; ]&lt;br /&gt;
		};&lt;br /&gt;
	} else if( wgCanonicalSpecialPageName == &#039;Prefixindex&#039; ) {&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;generator&#039;: &#039;allpages&#039;,&lt;br /&gt;
			&#039;gapnamespace&#039;: QueryString.exists(&#039;namespace&#039;) ? QueryString.get( &#039;namespace&#039; ): document.getElementById(&#039;namespace&#039;).value,&lt;br /&gt;
			&#039;gapprefix&#039;: QueryString.exists(&#039;from&#039;) ? QueryString.get( &#039;from&#039; ).replace(&#039;+&#039;, &#039; &#039;).toUpperCaseFirstChar() : document.getElementById(&#039;nsfrom&#039;).value.toUpperCaseFirstChar(),&lt;br /&gt;
			&#039;gaplimit&#039; : Twinkle.getPref(&#039;batchMax&#039;), // the max for sysops&lt;br /&gt;
			&#039;prop&#039; : [ &#039;revisions&#039; ],&lt;br /&gt;
			&#039;rvprop&#039;: [ &#039;size&#039; ]&lt;br /&gt;
		};&lt;br /&gt;
	} else {&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;gpllimit&#039; : Twinkle.getPref(&#039;batchMax&#039;), // the max for sysops&lt;br /&gt;
			&#039;generator&#039;: &#039;links&#039;,&lt;br /&gt;
			&#039;titles&#039;: wgPageName,&lt;br /&gt;
			&#039;prop&#039;: [ &#039;revisions&#039; ],&lt;br /&gt;
			&#039;rvprop&#039;: [ &#039;size&#039; ]&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	var wikipedia_api = new Wikipedia.api( &#039;Grabbing pages&#039;, query, function( self ) {&lt;br /&gt;
			var xmlDoc = self.responseXML;&lt;br /&gt;
			var snapshot = xmlDoc.evaluate(&#039;//page&#039;, xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );&lt;br /&gt;
			var list = [];&lt;br /&gt;
			for ( var i = 0; i &amp;lt; snapshot.snapshotLength; ++i ) {&lt;br /&gt;
				var object = snapshot.snapshotItem(i);&lt;br /&gt;
				var page = xmlDoc.evaluate( &#039;@title&#039;, object, null, XPathResult.STRING_TYPE, null ).stringValue;&lt;br /&gt;
				var size = xmlDoc.evaluate( &#039;revisions/rev/@size&#039;, object, null, XPathResult.NUMBER_TYPE, null ).numberValue;&lt;br /&gt;
&lt;br /&gt;
				list.push( {label:page + (size ? &#039; (&#039; + size + &#039;)&#039; : &#039;&#039; ), value:page, checked: true });&lt;br /&gt;
			}&lt;br /&gt;
			self.params.form.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					name: &#039;pages&#039;,&lt;br /&gt;
					list: list&lt;br /&gt;
				}&lt;br /&gt;
			);&lt;br /&gt;
			self.params.form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
			var result = self.params.form.render();&lt;br /&gt;
			self.params.Window.setContent( result );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		}  );&lt;br /&gt;
&lt;br /&gt;
	wikipedia_api.params = { form:form, Window:Window };&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
	var root = document.createElement( &#039;div&#039; );&lt;br /&gt;
	Status.init( root );&lt;br /&gt;
	Window.setContent( root );&lt;br /&gt;
	Window.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchprotect.currentProtectCounter = 0;&lt;br /&gt;
Twinkle.batchprotect.currentprotector = 0;&lt;br /&gt;
Twinkle.batchprotect.callback.evaluate = function twinklebatchprotectCallbackEvaluate(event) {&lt;br /&gt;
	wgPageName = wgPageName.replace( /_/g, &#039; &#039; ); // for queen/king/whatever and country!&lt;br /&gt;
	var pages = event.target.getChecked( &#039;pages&#039; );&lt;br /&gt;
	var reason = event.target.reason.value;&lt;br /&gt;
	var create = event.target.create.value;&lt;br /&gt;
	var edit = event.target.edit.value;&lt;br /&gt;
	var cascade = event.target.cascade.checked;&lt;br /&gt;
	var expiry = event.target.expiry.value;&lt;br /&gt;
	var move = event.target.move.value;&lt;br /&gt;
	if( ! reason ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	Status.init( event.target );&lt;br /&gt;
	if( !pages ) {&lt;br /&gt;
		Status.error( &#039;Error&#039;, &#039;nothing to delete, aborting&#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function toCall( work ) {&lt;br /&gt;
		if( work.length === 0 &amp;amp;&amp;amp; Twinkle.batchprotect.currentProtectCounter &amp;lt;= 0 ) {&lt;br /&gt;
			Status.info( &#039;work done&#039; );&lt;br /&gt;
			window.clearInterval( Twinkle.batchprotect.currentprotector );&lt;br /&gt;
			Wikipedia.removeCheckpoint();&lt;br /&gt;
			return;&lt;br /&gt;
		} else if( work.length !== 0 &amp;amp;&amp;amp; Twinkle.batchprotect.currentProtectCounter &amp;lt;= Twinkle.getPref(&#039;batchProtectMinCutOff&#039;) ) {&lt;br /&gt;
			var pages = work.shift();&lt;br /&gt;
			Twinkle.batchprotect.currentProtectCounter += pages.length;&lt;br /&gt;
			for( var i = 0; i &amp;lt; pages.length; ++i ) {&lt;br /&gt;
				var page = pages[i];&lt;br /&gt;
				var query = {&lt;br /&gt;
					&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
					&#039;titles&#039;: page&lt;br /&gt;
				};&lt;br /&gt;
				var wikipedia_api = new Wikipedia.api( &#039;Checking if page &#039; + page + &#039; exists&#039;, query, Twinkle.batchprotect.callbacks.main );&lt;br /&gt;
				wikipedia_api.params = { page:page, reason:reason, move: move, edit: edit, create: create, expiry: expiry, cascade: cascade };&lt;br /&gt;
				wikipedia_api.post();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	var work = pages.chunk( Twinkle.getPref(&#039;batchProtectChunks&#039;) );&lt;br /&gt;
	Wikipedia.addCheckpoint();&lt;br /&gt;
	Twinkle.batchprotect.currentprotector = window.setInterval( toCall, 1000, work );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchprotect.callbacks = {&lt;br /&gt;
	main: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var normal = xmlDoc.evaluate( &#039;//normalized/n/@to&#039;, xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;&lt;br /&gt;
		if( normal ) {&lt;br /&gt;
			self.params.page = normal;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var query = { &lt;br /&gt;
			&#039;title&#039;: self.params.page, &lt;br /&gt;
			&#039;action&#039;: &#039;protect&#039;&lt;br /&gt;
		};&lt;br /&gt;
		var wikipedia_wiki = new Wikipedia.wiki( &#039;Protecting page &#039; + self.params.page, query, Twinkle.batchprotect.callbacks.protectPage, function( self ) { &lt;br /&gt;
				--Twinkle.batchprotect.currentProtectCounter;&lt;br /&gt;
				var link = document.createElement( &#039;a&#039; );&lt;br /&gt;
				link.setAttribute( &#039;href&#039;, wgArticlePath.replace( &#039;$1&#039;, self.query.title ) );&lt;br /&gt;
				link.setAttribute( &#039;title&#039;, self.query.title );&lt;br /&gt;
				link.appendChild( document.createTextNode( self.query.title ) );&lt;br /&gt;
				self.statelem.info( [ &#039;completed (&#039; , link , &#039;)&#039; ] );&lt;br /&gt;
&lt;br /&gt;
			} );&lt;br /&gt;
		wikipedia_wiki.params = self.params;&lt;br /&gt;
		wikipedia_wiki.followRedirect = false;&lt;br /&gt;
		wikipedia_wiki.get();		&lt;br /&gt;
	},&lt;br /&gt;
	protectPage: function( self ) {&lt;br /&gt;
		var form  = self.responseXML.getElementById( &#039;mw-Protect-Form&#039; );&lt;br /&gt;
		var postData = {&lt;br /&gt;
			&#039;wpEditToken&#039;: form.wpEditToken.value,&lt;br /&gt;
			&#039;mwProtect-level-edit&#039;: self.params.edit,&lt;br /&gt;
			&#039;wpProtectExpirySelection-edit&#039;: self.params.expiry != &#039;indefinite&#039; ? &#039;othertime&#039; : &#039;indefinite&#039;,&lt;br /&gt;
			&#039;mwProtect-expiry-edit&#039;: self.params.expiry != &#039;indefinite&#039; ? self.params.expiry : undefined,&lt;br /&gt;
			&#039;mwProtect-level-move&#039;: self.params.move,&lt;br /&gt;
			&#039;wpProtectExpirySelection-move&#039;: self.params.expiry != &#039;indefinite&#039; ? &#039;othertime&#039; : &#039;indefinite&#039;,&lt;br /&gt;
			&#039;mwProtect-expiry-move&#039;: self.params.expiry != &#039;indefinite&#039; ? self.params.expiry : undefined,&lt;br /&gt;
			&#039;mwProtect-cascade&#039;: self.params.cascade ? &#039;&#039; : undefined,&lt;br /&gt;
			&#039;mwProtectWatch&#039;: form.mwProtectWatch.checked ? &#039;&#039; : undefined,&lt;br /&gt;
			&#039;wpProtectReasonSelection&#039;: &#039;other&#039;,&lt;br /&gt;
			&#039;mwProtect-reason&#039;: self.params.reason + Twinkle.getPref(&#039;protectionSummaryAd&#039;)&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		self.post( postData );&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklebatchundelete.js: Batch undelete module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;Und-batch&amp;quot;)&lt;br /&gt;
 * Active on:              Existing and non-existing user pages (??? why?)&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchundelete = function twinklebatchundelete() {&lt;br /&gt;
	if( wgNamespaceNumber != Namespace.USER ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if( userIsInGroup( &#039;sysop&#039; ) ) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Und-batch&amp;quot;, &amp;quot;tw-batch-undel&amp;quot;, &amp;quot;Undelete &#039;em all&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.batchundelete.callback);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchundelete.callback = function twinklebatchundeleteCallback() {&lt;br /&gt;
	var Window = new SimpleWindow( 800, 400 );&lt;br /&gt;
	var form = new QuickForm( Twinkle.batchundelete.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;textarea&#039;,&lt;br /&gt;
			name: &#039;reason&#039;,&lt;br /&gt;
			label: &#039;Reason: &#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	var query = {&lt;br /&gt;
		&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
		&#039;generator&#039;: &#039;links&#039;,&lt;br /&gt;
		&#039;titles&#039;: wgPageName,&lt;br /&gt;
		&#039;gpllimit&#039; : Twinkle.getPref(&#039;batchMax&#039;) // the max for sysops&lt;br /&gt;
	};&lt;br /&gt;
	var wikipedia_api = new Wikipedia.api( &#039;Grabbing pages&#039;, query, function( self ) {&lt;br /&gt;
			var xmlDoc = self.responseXML;&lt;br /&gt;
			var snapshot = xmlDoc.evaluate(&#039;//page[@missing]&#039;, xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );&lt;br /&gt;
			var list = [];&lt;br /&gt;
			for ( var i = 0; i &amp;lt; snapshot.snapshotLength; ++i ) {&lt;br /&gt;
				var object = snapshot.snapshotItem(i);&lt;br /&gt;
				var page = xmlDoc.evaluate( &#039;@title&#039;, object, null, XPathResult.STRING_TYPE, null ).stringValue;&lt;br /&gt;
				list.push( {label:page, value:page, checked: true });&lt;br /&gt;
			}&lt;br /&gt;
			self.params.form.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					name: &#039;pages&#039;,&lt;br /&gt;
					list: list&lt;br /&gt;
				}&lt;br /&gt;
			);&lt;br /&gt;
			self.params.form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
			var result = self.params.form.render();&lt;br /&gt;
			self.params.Window.setContent( result );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		}  );&lt;br /&gt;
	wikipedia_api.params = { form:form, Window:Window };&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
	var root = document.createElement( &#039;div&#039; );&lt;br /&gt;
	Status.init( root );&lt;br /&gt;
	Window.setContent( root );&lt;br /&gt;
	Window.display();&lt;br /&gt;
};&lt;br /&gt;
Twinkle.batchundelete.currentUndeleteCounter = 0;&lt;br /&gt;
Twinkle.batchundelete.currentundeletor = 0;&lt;br /&gt;
Twinkle.batchundelete.callback.evaluate = function( event ) {&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &#039;Status&#039;;&lt;br /&gt;
	Wikipedia.actionCompleted.postfix = &#039;batch undeletion is now completed&#039;;&lt;br /&gt;
&lt;br /&gt;
	var pages = event.target.getChecked( &#039;pages&#039; );&lt;br /&gt;
	var reason = event.target.reason.value;&lt;br /&gt;
	if( ! reason ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	Status.init( event.target );&lt;br /&gt;
&lt;br /&gt;
	if( !pages ) {&lt;br /&gt;
		Status.error( &#039;Error&#039;, &#039;nothing to undelete, aborting&#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var work = pages.chunk( Twinkle.getPref(&#039;batchUndeleteChunks&#039;) );&lt;br /&gt;
	Wikipedia.addCheckpoint();&lt;br /&gt;
	Twinkle.batchundelete.currentundeletor = window.setInterval( Twinkle.batchundelete.callbacks.main, 1000, work, reason );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchundelete.callbacks = {&lt;br /&gt;
	main: function( work, reason ) {&lt;br /&gt;
		if( work.length === 0 &amp;amp;&amp;amp; Twinkle.batchundelete.currentUndeleteCounter &amp;lt;= 0 ) {&lt;br /&gt;
			Status.info( &#039;work done&#039; );&lt;br /&gt;
			window.clearInterval( Twinkle.batchundelete.currentundeletor );&lt;br /&gt;
			Wikipedia.removeCheckpoint();&lt;br /&gt;
			return;&lt;br /&gt;
		} else if( work.length !== 0 &amp;amp;&amp;amp; Twinkle.batchundelete.currentUndeleteCounter &amp;lt;= Twinkle.getPref(&#039;batchUndeleteMinCutOff&#039;) ) {&lt;br /&gt;
			var pages = work.shift();&lt;br /&gt;
			Twinkle.batchundelete.currentUndeleteCounter += pages.length;&lt;br /&gt;
			for( var i = 0; i &amp;lt; pages.length; ++i ) {&lt;br /&gt;
				var title = pages[i];&lt;br /&gt;
				var query = { &lt;br /&gt;
					&#039;title&#039;: &#039;Special:Undelete&#039;,&lt;br /&gt;
					&#039;target&#039;: title,&lt;br /&gt;
					&#039;action&#039;: &#039;submit&#039;&lt;br /&gt;
				};&lt;br /&gt;
				var wikipedia_wiki = new Wikipedia.wiki( &amp;quot;Undeleting &amp;quot; + title, query, Twinkle.batchundelete.callbacks.undeletePage, function( self ) { &lt;br /&gt;
						--Twinkle.batchundelete.currentUndeleteCounter;&lt;br /&gt;
						var link = document.createElement( &#039;a&#039; );&lt;br /&gt;
						link.setAttribute( &#039;href&#039;, mw.util.getUrl(self.params.title) );&lt;br /&gt;
						link.setAttribute( &#039;title&#039;, self.params.title );&lt;br /&gt;
						link.appendChild( document.createTextNode(self.params.title) );&lt;br /&gt;
						self.statelem.info( [&#039;completed (&#039;,link,&#039;)&#039;] );&lt;br /&gt;
&lt;br /&gt;
					});&lt;br /&gt;
				wikipedia_wiki.params = { title:title, reason: reason };&lt;br /&gt;
				wikipedia_wiki.get();&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	undeletePage: function( self ) {&lt;br /&gt;
		var form = self.responseXML.getElementById(&#039;undelete&#039;);&lt;br /&gt;
		var postData = {&lt;br /&gt;
			&#039;wpComment&#039;: self.params.reason + &#039;.&#039; +  Twinkle.getPref(&#039;deletionSummaryAd&#039;),&lt;br /&gt;
			&#039;target&#039;: self.params.image,&lt;br /&gt;
			&#039;wpEditToken&#039;: form.wpEditToken.value,&lt;br /&gt;
			&#039;restore&#039;: 1&lt;br /&gt;
		};&lt;br /&gt;
		self.post( postData );&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
****************************************&lt;br /&gt;
*** twinklecloser.js: AFD/AFC closer module&lt;br /&gt;
****************************************&lt;br /&gt;
* Mode of invocation:     Link on AFD subpages (including daily log pages) and AFC daily log pages&lt;br /&gt;
* Active on:              The aforementioned pages&lt;br /&gt;
* Config directives in:   TwinkleConfig&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
Twinkle.closer = function twinklecloser() {&lt;br /&gt;
	var closeable = false;&lt;br /&gt;
	var type;&lt;br /&gt;
	if( /Wikipedia:Articles_for_creation\/\d{4}-\d{2}-\d{2}/.test(mw.config.get(&#039;wgPageName&#039;)) ) {&lt;br /&gt;
		closeable = true;&lt;br /&gt;
		type = &#039;afc&#039;;&lt;br /&gt;
	} else if(  /Wikipedia:Articles_for_deletion\//.test(mw.config.get(&#039;wgPageName&#039;)) ) {&lt;br /&gt;
		closeable = true;&lt;br /&gt;
		type = &#039;afd&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if( closeable ) {&lt;br /&gt;
		Twinkle.closer.mark( type );&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.closer.mark = function twinklecloserMark( type ) {&lt;br /&gt;
	var sections;&lt;br /&gt;
	switch( type ) {&lt;br /&gt;
	case &#039;afc&#039;:&lt;br /&gt;
		sections = $(&#039;h2:has(span.editsection)&#039;);&lt;br /&gt;
		sections.each(function(index, section) {&lt;br /&gt;
			var query = new QueryString($(this).find(&#039;span.editsection a&#039;).attr(&#039;href&#039;).split( &#039;?&#039;, 2 )[1]);&lt;br /&gt;
			var section_number = query.get(&#039;section&#039;);&lt;br /&gt;
			var closelink = $(&#039;&amp;lt;a/&amp;gt;&#039;, {&lt;br /&gt;
				&#039;text&#039;: &#039;[close]&#039;,&lt;br /&gt;
				&#039;click&#039;: function(){Twinkle.closer.actions.afc(section_number);},&lt;br /&gt;
				&#039;class&#039;: &#039;twinkle-closer-link twinkle-closer-link-afc&#039;,&lt;br /&gt;
				&#039;css&#039;: { &#039;color&#039;: &#039;#449922&#039;	}&lt;br /&gt;
			}).prependTo(this);&lt;br /&gt;
		});&lt;br /&gt;
		break;&lt;br /&gt;
	case &#039;afd&#039;:&lt;br /&gt;
		sections = $(&#039;h3:has(span.editsection)&#039;);&lt;br /&gt;
		sections.each(function(index, section) {&lt;br /&gt;
			var $a = $(this).find(&#039;span.editsection a&#039;);&lt;br /&gt;
			var page =$a.attr(&#039;title&#039;);&lt;br /&gt;
			var query = new QueryString($a.attr(&#039;href&#039;).split( &#039;?&#039;, 2 )[1]);&lt;br /&gt;
			var section_number = query.get(&#039;section&#039;);&lt;br /&gt;
			var closelink = $(&#039;&amp;lt;a/&amp;gt;&#039;, {&lt;br /&gt;
				&#039;text&#039;: &#039;[close]&#039;,&lt;br /&gt;
				&#039;click&#039;: function(){Twinkle.closer.actions.afd(section_number, page);},&lt;br /&gt;
				&#039;class&#039;: &#039;twinkle-closer-link twinkle-closer-link-afd&#039;,&lt;br /&gt;
				&#039;css&#039;: { &#039;color&#039;: &#039;#449922&#039;	}&lt;br /&gt;
			}).prependTo(this);&lt;br /&gt;
		});&lt;br /&gt;
		break;&lt;br /&gt;
	default:&lt;br /&gt;
		alert(&amp;quot;Twinkle.closer.mark: unknown closure type &amp;quot; + type);&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.closer.actions = {&lt;br /&gt;
	afc: function twinklecloserActionsAfc( section ) {&lt;br /&gt;
		var Window = new SimpleWindow( 800, 400 );&lt;br /&gt;
		Window.setTitle( &amp;quot;Close AFC&amp;quot; );&lt;br /&gt;
		Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
		Window.addFooterLink( &amp;quot;AFC reviewing instructions&amp;quot;, &amp;quot;MP:AFCR&amp;quot; );&lt;br /&gt;
		Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#closer-afc&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
		var form = new QuickForm( Twinkle.closer.callbacks.afc.evaluate );&lt;br /&gt;
		form.append ( {&lt;br /&gt;
			label: &#039;Action: &#039;,&lt;br /&gt;
			type: &#039;select&#039;,&lt;br /&gt;
			name: &#039;type&#039;,&lt;br /&gt;
			event: Twinkle.closer.callbacks.afc.submenu,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Approved&#039;,&lt;br /&gt;
					value: &#039;approved&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Denied&#039;,&lt;br /&gt;
					value: &#039;denied&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Archive&#039;,&lt;br /&gt;
					value: &#039;archive&#039;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		});&lt;br /&gt;
		form.append( {&lt;br /&gt;
			type: &#039;div&#039;,&lt;br /&gt;
			id: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
		form.append( {&lt;br /&gt;
			type: &#039;hidden&#039;,&lt;br /&gt;
			name: &#039;section&#039;,&lt;br /&gt;
			value: section&lt;br /&gt;
		} );&lt;br /&gt;
		form.append( {&lt;br /&gt;
			type: &#039;hidden&#039;,&lt;br /&gt;
			name: &#039;page&#039;,&lt;br /&gt;
			value: page&lt;br /&gt;
		} );&lt;br /&gt;
		form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
		var result = form.render();&lt;br /&gt;
		Window.setContent( result );&lt;br /&gt;
		Window.display();&lt;br /&gt;
&lt;br /&gt;
		// We must init the&lt;br /&gt;
		var evt = document.createEvent( &amp;quot;Event&amp;quot; );&lt;br /&gt;
		evt.initEvent( &#039;change&#039;, true, true );&lt;br /&gt;
		result.type.dispatchEvent( evt );&lt;br /&gt;
	},&lt;br /&gt;
	afd: function twinklecloserActionsAfd( section, page ) {&lt;br /&gt;
		var Window = new SimpleWindow( 800, 400 );&lt;br /&gt;
		Window.setTitle( &amp;quot;Close AFD&amp;quot; );&lt;br /&gt;
		Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
		Window.addFooterLink( &amp;quot;AFD closing instructions&amp;quot;, &amp;quot;Wikipedia:Articles for deletion/Administrator instructions&amp;quot; );&lt;br /&gt;
		Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#closer-afd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
		var form = new QuickForm( Twinkle.closer.callbacks.afd.evaluate );&lt;br /&gt;
		form.append ( {&lt;br /&gt;
			label: &#039;Action: &#039;,&lt;br /&gt;
			type: &#039;radio&#039;,&lt;br /&gt;
			name: &#039;type&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Keep&#039;,&lt;br /&gt;
					value: &#039;keep&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;No consensus&#039;,&lt;br /&gt;
					value: &#039;no consensus&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Merge&#039;,&lt;br /&gt;
					value: &#039;merge&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Redirect&#039;,&lt;br /&gt;
					value: &#039;redirect&#039;,&lt;br /&gt;
					subgroup: {&lt;br /&gt;
						type: &#039;input&#039;,&lt;br /&gt;
						name: &#039;target&#039;,&lt;br /&gt;
						label: &#039;Target: &#039;,&lt;br /&gt;
						tooltip: &#039;the name of the page to redirect to&#039;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Delete&#039;,&lt;br /&gt;
					value: &#039;delete&#039;,&lt;br /&gt;
					subgroup: {&lt;br /&gt;
						type: &#039;checkbox&#039;,&lt;br /&gt;
						list: [&lt;br /&gt;
							{&lt;br /&gt;
								label: &#039;Delete? &#039;,&lt;br /&gt;
								value: &#039;delete&#039;,&lt;br /&gt;
								name: &#039;del&#039;,&lt;br /&gt;
								tooltop: &#039;if we should delete the page on the fly&#039;,&lt;br /&gt;
								checked: true&lt;br /&gt;
							}&lt;br /&gt;
						]&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		});&lt;br /&gt;
		form.append( {&lt;br /&gt;
			type: &#039;textarea&#039;,&lt;br /&gt;
			name: &#039;reason&#039;,&lt;br /&gt;
			label: &#039;Reason:&#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		form.append( {&lt;br /&gt;
			type: &#039;input&#039;,&lt;br /&gt;
			name: &#039;affected_page&#039;,&lt;br /&gt;
			label: &#039;Affected page: &#039;,&lt;br /&gt;
			value: page.replace( /.*\/(.*?)(\s\(.*?\))?/, &amp;quot;$1&amp;quot; )&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		form.append( {&lt;br /&gt;
			type: &#039;div&#039;,&lt;br /&gt;
			id: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		form.append( {&lt;br /&gt;
			type: &#039;hidden&#039;,&lt;br /&gt;
			name: &#039;section&#039;,&lt;br /&gt;
			value: section&lt;br /&gt;
		} );&lt;br /&gt;
		form.append( {&lt;br /&gt;
			type: &#039;hidden&#039;,&lt;br /&gt;
			name: &#039;page&#039;,&lt;br /&gt;
			value: page&lt;br /&gt;
		} );&lt;br /&gt;
		form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
		var result = form.render();&lt;br /&gt;
		Window.setContent( result );&lt;br /&gt;
		Window.display();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.closer.callbacks = {&lt;br /&gt;
	afc: {&lt;br /&gt;
		submenu: function(e) {&lt;br /&gt;
			var value = e.target.value;&lt;br /&gt;
			var root = e.target.form;&lt;br /&gt;
			var old_area = document.getElementById( &#039;work_area&#039; );&lt;br /&gt;
			var work_area = null;&lt;br /&gt;
			switch( value ) {&lt;br /&gt;
			case &#039;archive&#039;:&lt;br /&gt;
				work_area = new QuickForm.element( {&lt;br /&gt;
					type: &#039;div&#039;,&lt;br /&gt;
					id: &#039;work_area&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				work_area.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					name: &#039;approved&#039;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Approved &#039;,&lt;br /&gt;
							value: &#039;approved&#039;&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				work_area = work_area.render();&lt;br /&gt;
				old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;approved&#039;:&lt;br /&gt;
				work_area = new QuickForm.element( {&lt;br /&gt;
					type: &#039;div&#039;,&lt;br /&gt;
					id: &#039;work_area&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				work_area.append( {&lt;br /&gt;
					type: &#039;input&#039;,&lt;br /&gt;
					name: &#039;article&#039;,&lt;br /&gt;
					label: &#039;Article &#039;,&lt;br /&gt;
					tooltop: &#039;Leave empty if article was created as specified&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				work_area = work_area.render();&lt;br /&gt;
				old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;denied&#039;:&lt;br /&gt;
				work_area = new QuickForm.element( {&lt;br /&gt;
					type: &#039;div&#039;,&lt;br /&gt;
					id: &#039;work_area&#039;&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				work_area.append( {&lt;br /&gt;
					type: &#039;select&#039;,&lt;br /&gt;
					name: &#039;reason&#039;,&lt;br /&gt;
					label: &#039;Reason &#039;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;v&#039;,&lt;br /&gt;
							value:&#039;v&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;bio&#039;,&lt;br /&gt;
							value:&#039;bio&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;nn&#039;,&lt;br /&gt;
							value:&#039;nn&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;web&#039;,&lt;br /&gt;
							value:&#039;web&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;corp&#039;,&lt;br /&gt;
							value:&#039;corp&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;music&#039;,&lt;br /&gt;
							value:&#039;music&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;dict&#039;,&lt;br /&gt;
							value:&#039;dict&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;context&#039;,&lt;br /&gt;
							value:&#039;context&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;blank&#039;,&lt;br /&gt;
							value:&#039;blank&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;neo&#039;,&lt;br /&gt;
							value:&#039;neo&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;joke&#039;,&lt;br /&gt;
							value:&#039;joke&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;lang&#039;,&lt;br /&gt;
							value:&#039;lang&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;blp&#039;,&lt;br /&gt;
							value:&#039;blp&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;npov&#039;,&lt;br /&gt;
							value:&#039;npov&#039;&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							label:&#039;not&#039;,&lt;br /&gt;
							value:&#039;not&#039;&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				} );&lt;br /&gt;
				work_area = work_area.render();&lt;br /&gt;
				old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				alert(&amp;quot;Twinkle.closer.callbacks.afc.submenu: unknown outcome &amp;quot; + value);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		evaluate: function(e) {&lt;br /&gt;
			var form = e.target;&lt;br /&gt;
			var type = form.type.value;&lt;br /&gt;
			var section = form.section.value;&lt;br /&gt;
			var params = { type: type };&lt;br /&gt;
			switch( type ) {&lt;br /&gt;
			case &#039;approved&#039;:&lt;br /&gt;
				var article = form.article.value;&lt;br /&gt;
				params.tag = &#039;{{subst:afc accept&#039; + ( article ? &#039;|&#039; + article : &#039;&#039; ) + &#039;}}&#039;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;denied&#039;:&lt;br /&gt;
				var reason = form.reason.value;&lt;br /&gt;
				params.tag = &#039;{{subst:afc &#039; + reason + &#039;}}&#039;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;archive&#039;:&lt;br /&gt;
				var approved = form.approved.checked;&lt;br /&gt;
				params.top = &#039;{{subst:afc top&#039; + ( approved ? &#039;|approved&#039; : &#039;&#039; ) + &#039;}}&#039;;&lt;br /&gt;
				params.bottom = &#039;{{subst:afc b}}&#039;;&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				alert(&amp;quot;Twinkle.closer.callbacks.afc.evaluate: unknown outcome &amp;quot; + type);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
			Status.init( form );&lt;br /&gt;
			var page = Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Processing&amp;quot;);&lt;br /&gt;
			page.setPageSection(section);&lt;br /&gt;
			page.setCallbackParameters(params);&lt;br /&gt;
			page.load(Twinkle.closer.callbacks.afc.edit);&lt;br /&gt;
		},&lt;br /&gt;
		edit: function( pageobj ) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var statelem = pageobj.getStatusElement();&lt;br /&gt;
			var summary;&lt;br /&gt;
&lt;br /&gt;
			switch( params.type ) {&lt;br /&gt;
			case &#039;approved&#039;:&lt;br /&gt;
				text += params.tag + &#039;~~~~&#039;;&lt;br /&gt;
				summary = &#039;Approving article.&#039;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;denied&#039;:&lt;br /&gt;
				text += params.tag + &#039;~~~~&#039;;&lt;br /&gt;
				summary = &#039;Denying article.&#039;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;archive&#039;:&lt;br /&gt;
				text = text.replace( /^(==.*?==)\n/, &amp;quot;$1\n&amp;quot; + params.top  );&lt;br /&gt;
				text += params.bottom;&lt;br /&gt;
				summary = &#039;Archiving.&#039;;&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				alert(&amp;quot;Twinkle.closer.callbacks.afc.edit: unknown outcome &amp;quot; + params.type);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setPageText(text);&lt;br /&gt;
			pageobj.setEditSummary(summary + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	afd: {&lt;br /&gt;
		submenu: function(e) {&lt;br /&gt;
			var value = e.target.value;&lt;br /&gt;
			var root = e.target.form;&lt;br /&gt;
			var old_area = document.getElementById( &#039;work_area&#039; );&lt;br /&gt;
			var	work_area = new QuickForm.element( {&lt;br /&gt;
				type: &#039;div&#039;,&lt;br /&gt;
				id: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
			switch( value ) {&lt;br /&gt;
			case &#039;keep&#039;:&lt;br /&gt;
			case &#039;no consensus&#039;:&lt;br /&gt;
				// nothing&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;redirect&#039;:&lt;br /&gt;
				work_area.append( {&lt;br /&gt;
					type: &#039;input&#039;,&lt;br /&gt;
					name: &#039;target&#039;,&lt;br /&gt;
					label: &#039;Target: &#039;,&lt;br /&gt;
					tooltip: &#039;the name of the page to redirect to&#039;&lt;br /&gt;
				} );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;merge&#039;:&lt;br /&gt;
				// merge must be done manually&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;delete&#039;:&lt;br /&gt;
				work_area.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Delete? &#039;,&lt;br /&gt;
							value: &#039;delete&#039;,&lt;br /&gt;
							name: &#039;del&#039;,&lt;br /&gt;
							tooltop: &#039;if we should delete the page on the fly&#039;,&lt;br /&gt;
							checked: true&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				} );&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				alert(&amp;quot;Twinkle.closer.callbacks.afd.submenu: unknown outcome &amp;quot; + value);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			work_area = work_area.render();&lt;br /&gt;
			old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		},&lt;br /&gt;
		evaluate: function(e) {&lt;br /&gt;
			var form = e.target;&lt;br /&gt;
			var reason = form.reason.value;&lt;br /&gt;
			var type = form.type.value;&lt;br /&gt;
			var section = form.section.value;&lt;br /&gt;
			var page = form.page.value;&lt;br /&gt;
			var affected_page = form.affected_page.value;&lt;br /&gt;
			var params = { type: type, page: page, reason: reason, affected_page: affected_page };&lt;br /&gt;
			var label, wp_page;&lt;br /&gt;
			switch( type ) {&lt;br /&gt;
			case &#039;keep&#039;:&lt;br /&gt;
				label = &amp;quot;Keep&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;no consensus&#039;:&lt;br /&gt;
				label = &amp;quot;No consensus&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;redirect&#039;:&lt;br /&gt;
				label = &amp;quot;Redirect&amp;quot;;&lt;br /&gt;
				var target = form.target.value;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;merge&#039;:&lt;br /&gt;
				label = &amp;quot;Merge&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;delete&#039;:&lt;br /&gt;
				label = &amp;quot;Delete&amp;quot;;&lt;br /&gt;
				var del = form.del.checked;&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				alert(&amp;quot;Twinkle.closer.callbacks.afd.evaluate: unknown outcome &amp;quot; + type);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
			params.label = label;&lt;br /&gt;
&lt;br /&gt;
			SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
			Status.init( form );&lt;br /&gt;
&lt;br /&gt;
			if( type === &#039;delete&#039; ) {&lt;br /&gt;
				if( del ) {&lt;br /&gt;
					// Start by purging redirect&lt;br /&gt;
					var query = {&lt;br /&gt;
						&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
						&#039;list&#039;: &#039;backlinks&#039;,&lt;br /&gt;
						&#039;blfilterredir&#039;: &#039;redirects&#039;,&lt;br /&gt;
						&#039;bltitle&#039;: affected_page,&lt;br /&gt;
						&#039;bllimit&#039;: 5000&lt;br /&gt;
					};&lt;br /&gt;
					var wikipedia_api = new Wikipedia.api( &#039;Grabbing redirects&#039;, query, Twinkle.closer.callbacks.afd.deleteRedirectsMain );&lt;br /&gt;
					wikipedia_api.params = params;&lt;br /&gt;
					wikipedia_api.post();&lt;br /&gt;
&lt;br /&gt;
					// and now, delete!&lt;br /&gt;
&lt;br /&gt;
					wp_page = Wikipedia.page(affected_page, &#039;Deleting page&#039;);&lt;br /&gt;
					wp_page.setEditSummary(&amp;quot;Deleted per outcome of [[MP:AFD]] discussion (see [[&amp;quot; + params.page + &amp;quot;]]).&amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
					wp_page.deletePage();&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			wp_page = Wikipedia.page(page, &amp;quot;Updating process page&amp;quot;);&lt;br /&gt;
			wp_page.setPageSection(section);&lt;br /&gt;
			wp_page.setCallbackParameters(params);&lt;br /&gt;
			wp_page.load(Twinkle.closer.callbacks.afd.edit);&lt;br /&gt;
		},&lt;br /&gt;
		deleteRedirectsMain: function( self ) {&lt;br /&gt;
			var $doc = $(self.responseXML);&lt;br /&gt;
			$doc.find(&amp;quot;backlinks bl&amp;quot;).each(function(){&lt;br /&gt;
				var title = $(this).attr(&#039;title&#039;);&lt;br /&gt;
				var page = new Wikipedia.page(title, &amp;quot;Deleting redirecting page &amp;quot; + title);&lt;br /&gt;
				page.setEditSummary(&amp;quot;Speedy deleted per ([[MP:CSD#R1|CSD R1]]), Redirect to deleted page \&amp;quot;&amp;quot; + self.params.affected_page + &amp;quot;\&amp;quot;.&amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
				page.deletePage();&lt;br /&gt;
			});&lt;br /&gt;
		},&lt;br /&gt;
		edit: function( pageobj ) {&lt;br /&gt;
			var text = pageobj.getText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			pageobj.setEditSummary( &amp;quot;Closing discussion, result was \&amp;quot;&amp;quot; + params.label + &amp;quot;\&amp;quot;&amp;quot; +  Twinkle.getPref(&#039;summaryAd&#039;) );&lt;br /&gt;
			pageobj.setPageText(&amp;quot;{{subst:Afd top}}&#039;&#039;&#039;&amp;quot; + params.label + &amp;quot;&#039;&#039;&#039; &amp;quot; + params.reason + &amp;quot;. ~~~~n&amp;quot; + text + &amp;quot;\n{{subst:Afd bottom}}&amp;quot;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinkleconfig.js: Preferences module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Adds configuration form to Wikipedia:Twinkle/Preferences and user &lt;br /&gt;
                           subpages named &amp;quot;/Twinkle preferences&amp;quot;, and adds ad box to the top of user &lt;br /&gt;
                           subpages belonging to the currently logged-in user which end in &#039;.js&#039;&lt;br /&gt;
 * Active on:              What I just said.  Yeah.&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
&lt;br /&gt;
 I, [[User:This, that and the other]], originally wrote this.  If the code is misbehaving, or you have any&lt;br /&gt;
 questions, don&#039;t hesitate to ask me.  (This doesn&#039;t at all imply [[MP:OWN]]ership - it&#039;s just meant to&lt;br /&gt;
 point you in the right direction.)  -- TTO&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.config = {};&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.commonEnums = {&lt;br /&gt;
	watchlist: { yes: &amp;quot;Add to watchlist&amp;quot;, no: &amp;quot;Don&#039;t add to watchlist&amp;quot;, &amp;quot;default&amp;quot;: &amp;quot;Follow your site preferences&amp;quot; },&lt;br /&gt;
	talkPageMode: { window: &amp;quot;In a window, replacing other user talks&amp;quot;, tab: &amp;quot;In a new tab&amp;quot;, blank: &amp;quot;In a totally new window&amp;quot; }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.commonSets = {&lt;br /&gt;
	csdCriteria: {&lt;br /&gt;
		db: &amp;quot;Custom rationale ({{db}})&amp;quot;,&lt;br /&gt;
		g1: &amp;quot;G1&amp;quot;, g2: &amp;quot;G2&amp;quot;, g3: &amp;quot;G3&amp;quot;, g4: &amp;quot;G4&amp;quot;, g5: &amp;quot;G5&amp;quot;, g6: &amp;quot;G6&amp;quot;, g7: &amp;quot;G7&amp;quot;, g8: &amp;quot;G8&amp;quot;, g10: &amp;quot;G10&amp;quot;, g11: &amp;quot;G11&amp;quot;, g12: &amp;quot;G12&amp;quot;,&lt;br /&gt;
		a1: &amp;quot;A1&amp;quot;, a2: &amp;quot;A2&amp;quot;, a3: &amp;quot;A3&amp;quot;, a5: &amp;quot;A5&amp;quot;, a7: &amp;quot;A7&amp;quot;, a9: &amp;quot;A9&amp;quot;, a10: &amp;quot;A10&amp;quot;,&lt;br /&gt;
		u1: &amp;quot;U1&amp;quot;, u2: &amp;quot;U2&amp;quot;, u3: &amp;quot;U3&amp;quot;,&lt;br /&gt;
		f1: &amp;quot;F1&amp;quot;, f2: &amp;quot;F2&amp;quot;, f3: &amp;quot;F3&amp;quot;, f7: &amp;quot;F7&amp;quot;, f8: &amp;quot;F8&amp;quot;, f9: &amp;quot;F9&amp;quot;, f10: &amp;quot;F10&amp;quot;,&lt;br /&gt;
		c1: &amp;quot;C1&amp;quot;,&lt;br /&gt;
		t2: &amp;quot;T2&amp;quot;, t3: &amp;quot;T3&amp;quot;,&lt;br /&gt;
		r2: &amp;quot;R2&amp;quot;, r3: &amp;quot;R3&amp;quot;,&lt;br /&gt;
		p1: &amp;quot;P1&amp;quot;, p2: &amp;quot;P2&amp;quot;  // db-multiple is not listed here because it is treated differently within twinklespeedy&lt;br /&gt;
	},&lt;br /&gt;
	csdCriteriaDisplayOrder: [&lt;br /&gt;
		&amp;quot;db&amp;quot;,&lt;br /&gt;
		&amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g5&amp;quot;, &amp;quot;g6&amp;quot;, &amp;quot;g7&amp;quot;, &amp;quot;g8&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;,&lt;br /&gt;
		&amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a5&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;,&lt;br /&gt;
		&amp;quot;u1&amp;quot;, &amp;quot;u2&amp;quot;, &amp;quot;u3&amp;quot;,&lt;br /&gt;
		&amp;quot;f1&amp;quot;, &amp;quot;f2&amp;quot;, &amp;quot;f3&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f8&amp;quot;, &amp;quot;f9&amp;quot;, &amp;quot;f10&amp;quot;,&lt;br /&gt;
		&amp;quot;c1&amp;quot;,&lt;br /&gt;
		&amp;quot;t2&amp;quot;, &amp;quot;t3&amp;quot;,&lt;br /&gt;
		&amp;quot;r2&amp;quot;, &amp;quot;r3&amp;quot;,&lt;br /&gt;
		&amp;quot;p1&amp;quot;, &amp;quot;p2&amp;quot;&lt;br /&gt;
	],&lt;br /&gt;
	csdAndDICriteria: {&lt;br /&gt;
		db: &amp;quot;Custom rationale ({{db}})&amp;quot;,&lt;br /&gt;
		g1: &amp;quot;G1&amp;quot;, g2: &amp;quot;G2&amp;quot;, g3: &amp;quot;G3&amp;quot;, g4: &amp;quot;G4&amp;quot;, g5: &amp;quot;G5&amp;quot;, g6: &amp;quot;G6&amp;quot;, g7: &amp;quot;G7&amp;quot;, g8: &amp;quot;G8&amp;quot;, g10: &amp;quot;G10&amp;quot;, g11: &amp;quot;G11&amp;quot;, g12: &amp;quot;G12&amp;quot;,&lt;br /&gt;
		a1: &amp;quot;A1&amp;quot;, a2: &amp;quot;A2&amp;quot;, a3: &amp;quot;A3&amp;quot;, a5: &amp;quot;A5&amp;quot;, a7: &amp;quot;A7&amp;quot;, a9: &amp;quot;A9&amp;quot;, a10: &amp;quot;A10&amp;quot;,&lt;br /&gt;
		u1: &amp;quot;U1&amp;quot;, u2: &amp;quot;U2&amp;quot;, u3: &amp;quot;U3&amp;quot;,&lt;br /&gt;
		f1: &amp;quot;F1&amp;quot;, f2: &amp;quot;F2&amp;quot;, f3: &amp;quot;F3&amp;quot;, f4: &amp;quot;F4&amp;quot;, f5: &amp;quot;F5&amp;quot;, f6: &amp;quot;F6&amp;quot;, f7: &amp;quot;F7&amp;quot;, f8: &amp;quot;F8&amp;quot;, f9: &amp;quot;F9&amp;quot;, f10: &amp;quot;F10&amp;quot;, f11: &amp;quot;F11&amp;quot;,&lt;br /&gt;
		c1: &amp;quot;C1&amp;quot;,&lt;br /&gt;
		t2: &amp;quot;T2&amp;quot;, t3: &amp;quot;T3&amp;quot;,&lt;br /&gt;
		r2: &amp;quot;R2&amp;quot;, r3: &amp;quot;R3&amp;quot;,&lt;br /&gt;
		p1: &amp;quot;P1&amp;quot;, p2: &amp;quot;P2&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	csdAndDICriteriaDisplayOrder: [&lt;br /&gt;
		&amp;quot;db&amp;quot;,&lt;br /&gt;
		&amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g5&amp;quot;, &amp;quot;g6&amp;quot;, &amp;quot;g7&amp;quot;, &amp;quot;g8&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;,&lt;br /&gt;
		&amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a5&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;,&lt;br /&gt;
		&amp;quot;u1&amp;quot;, &amp;quot;u2&amp;quot;, &amp;quot;u3&amp;quot;,&lt;br /&gt;
		&amp;quot;f1&amp;quot;, &amp;quot;f2&amp;quot;, &amp;quot;f3&amp;quot;, &amp;quot;f4&amp;quot;, &amp;quot;f5&amp;quot;, &amp;quot;f6&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f8&amp;quot;, &amp;quot;f9&amp;quot;, &amp;quot;f10&amp;quot;, &amp;quot;f11&amp;quot;,&lt;br /&gt;
		&amp;quot;c1&amp;quot;,&lt;br /&gt;
		&amp;quot;t2&amp;quot;, &amp;quot;t3&amp;quot;,&lt;br /&gt;
		&amp;quot;r2&amp;quot;, &amp;quot;r3&amp;quot;,&lt;br /&gt;
		&amp;quot;p1&amp;quot;, &amp;quot;p2&amp;quot;&lt;br /&gt;
	],&lt;br /&gt;
	namespacesNoSpecial: {&lt;br /&gt;
		&amp;quot;0&amp;quot;: &amp;quot;Article&amp;quot;,&lt;br /&gt;
		&amp;quot;1&amp;quot;: &amp;quot;Talk (article)&amp;quot;,&lt;br /&gt;
		&amp;quot;2&amp;quot;: &amp;quot;User&amp;quot;,&lt;br /&gt;
		&amp;quot;3&amp;quot;: &amp;quot;User talk&amp;quot;,&lt;br /&gt;
		&amp;quot;4&amp;quot;: &amp;quot;Wikipedia&amp;quot;,&lt;br /&gt;
		&amp;quot;5&amp;quot;: &amp;quot;Wikipedia talk&amp;quot;,&lt;br /&gt;
		&amp;quot;6&amp;quot;: &amp;quot;File&amp;quot;,&lt;br /&gt;
		&amp;quot;7&amp;quot;: &amp;quot;File talk&amp;quot;,&lt;br /&gt;
		&amp;quot;8&amp;quot;: &amp;quot;MediaWiki&amp;quot;,&lt;br /&gt;
		&amp;quot;9&amp;quot;: &amp;quot;MediaWiki talk&amp;quot;,&lt;br /&gt;
		&amp;quot;10&amp;quot;: &amp;quot;Template&amp;quot;,&lt;br /&gt;
		&amp;quot;11&amp;quot;: &amp;quot;Template talk&amp;quot;,&lt;br /&gt;
		&amp;quot;12&amp;quot;: &amp;quot;Help&amp;quot;,&lt;br /&gt;
		&amp;quot;13&amp;quot;: &amp;quot;Help talk&amp;quot;,&lt;br /&gt;
		&amp;quot;14&amp;quot;: &amp;quot;Category&amp;quot;,&lt;br /&gt;
		&amp;quot;15&amp;quot;: &amp;quot;Category talk&amp;quot;,&lt;br /&gt;
		&amp;quot;100&amp;quot;: &amp;quot;Portal&amp;quot;,&lt;br /&gt;
		&amp;quot;101&amp;quot;: &amp;quot;Portal talk&amp;quot;,&lt;br /&gt;
		&amp;quot;108&amp;quot;: &amp;quot;Book&amp;quot;,&lt;br /&gt;
		&amp;quot;109&amp;quot;: &amp;quot;Book talk&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Section entry format:&lt;br /&gt;
 *&lt;br /&gt;
 * {&lt;br /&gt;
 *   title: &amp;lt;human-readable section title&amp;gt;,&lt;br /&gt;
 *   adminOnly: &amp;lt;true for admin-only sections&amp;gt;,&lt;br /&gt;
 *   hidden: &amp;lt;true for advanced preferences that rarely need to be changed - they can still be modified by manually editing twinkleoptions.js&amp;gt;,&lt;br /&gt;
 *   inFriendlyConfig: &amp;lt;true for preferences located under FriendlyConfig rather than TwinkleConfig&amp;gt;,&lt;br /&gt;
 *   preferences: [&lt;br /&gt;
 *     {&lt;br /&gt;
 *       name: &amp;lt;TwinkleConfig property name&amp;gt;,&lt;br /&gt;
 *       label: &amp;lt;human-readable short description - used as a form label&amp;gt;,&lt;br /&gt;
 *       helptip: &amp;lt;(optional) human-readable text (using valid HTML) that complements the description, like limits, warnings, etc.&amp;gt;&lt;br /&gt;
 *       adminOnly: &amp;lt;true for admin-only preferences&amp;gt;,&lt;br /&gt;
 *       type: &amp;lt;string|boolean|integer|enum|set|customList&amp;gt; (customList stores an array of JSON objects { value, label }),&lt;br /&gt;
 *       enumValues: &amp;lt;for type = &amp;quot;enum&amp;quot;: a JSON object where the keys are the internal names and the values are human-readable strings&amp;gt;,&lt;br /&gt;
 *       setValues: &amp;lt;for type = &amp;quot;set&amp;quot;: a JSON object where the keys are the internal names and the values are human-readable strings&amp;gt;,&lt;br /&gt;
 *       setDisplayOrder: &amp;lt;(optional) for type = &amp;quot;set&amp;quot;: an array containing the keys of setValues (as strings) in the order that they are displayed&amp;gt;,&lt;br /&gt;
 *       customListValueTitle: &amp;lt;for type = &amp;quot;customList&amp;quot;: the heading for the left &amp;quot;value&amp;quot; column in the custom list editor&amp;gt;,&lt;br /&gt;
 *       customListLabelTitle: &amp;lt;for type = &amp;quot;customList&amp;quot;: the heading for the right &amp;quot;label&amp;quot; column in the custom list editor&amp;gt;&lt;br /&gt;
 *     },&lt;br /&gt;
 *     . . .&lt;br /&gt;
 *   ]&lt;br /&gt;
 * },&lt;br /&gt;
 * . . .&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.sections = [&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;General&amp;quot;,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		// TwinkleConfig.summaryAd (string)&lt;br /&gt;
		// Text to be appended to the edit summary of edits made using Twinkle&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;summaryAd&amp;quot;,&lt;br /&gt;
			label: &amp;quot;\&amp;quot;Ad\&amp;quot; to be appended to Twinkle&#039;s edit summaries&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;The summary ad should start with a space, and be kept short.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.deletionSummaryAd (string)&lt;br /&gt;
		// Text to be appended to the edit summary of deletions made using Twinkle&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;deletionSummaryAd&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Summary ad to use for deletion summaries&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Normally the same as the edit summary ad above.&amp;quot;,&lt;br /&gt;
			adminOnly: true,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.protectionSummaryAd (string)&lt;br /&gt;
		// Text to be appended to the edit summary of page protections made using Twinkle&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;protectionSummaryAd&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Summary ad to use for page protections&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Normally the same as the edit summary ad above.&amp;quot;,&lt;br /&gt;
			adminOnly: true,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.userTalkPageMode may take arguments:&lt;br /&gt;
		// &#039;window&#039;: open a new window, remember the opened window&lt;br /&gt;
		// &#039;tab&#039;: opens in a new tab, if possible.&lt;br /&gt;
		// &#039;blank&#039;: force open in a new window, even if such a window exists&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;userTalkPageMode&amp;quot;,&lt;br /&gt;
			label: &amp;quot;When opening a user talk page, open it&amp;quot;,&lt;br /&gt;
			type: &amp;quot;enum&amp;quot;,&lt;br /&gt;
			enumValues: Twinkle.config.commonEnums.talkPageMode&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.dialogLargeFont (boolean)&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;dialogLargeFont&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Use larger text in Twinkle dialogs&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Image deletion (DI)&amp;quot;,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		// TwinkleConfig.notifyUserOnDeli (boolean)&lt;br /&gt;
		// If the user should be notified after placing a file deletion tag&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;notifyUserOnDeli&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Check the \&amp;quot;notify initial uploader\&amp;quot; box by default&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.deliWatchPage (string)&lt;br /&gt;
		// The watchlist setting of the page tagged for deletion. Either &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, or &amp;quot;default&amp;quot;. Default is &amp;quot;default&amp;quot; (Duh).&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;deliWatchPage&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add image page to watchlist when tagging&amp;quot;,&lt;br /&gt;
			type: &amp;quot;enum&amp;quot;,&lt;br /&gt;
			enumValues: Twinkle.config.commonEnums.watchlist&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.deliWatchUser (string)&lt;br /&gt;
		// The watchlist setting of the user talk page if a notification is placed. Either &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, or &amp;quot;default&amp;quot;. Default is &amp;quot;default&amp;quot; (Duh).&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;deliWatchUser&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add user talk page of initial uploader to watchlist when notifying&amp;quot;,&lt;br /&gt;
			type: &amp;quot;enum&amp;quot;,&lt;br /&gt;
			enumValues: Twinkle.config.commonEnums.watchlist&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Proposed deletion (PROD)&amp;quot;,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		// TwinkleConfig.watchProdPages (boolean)&lt;br /&gt;
		// If, when applying prod template to page, to watch the page&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;watchProdPages&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add article to watchlist when tagging&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.prodReasonDefault (string)&lt;br /&gt;
		// The prefilled PROD reason.&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;prodReasonDefault&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Prefilled PROD reason&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;logProdPages&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Keep a log in userspace of all pages you tag for PROD&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Since non-admins do not have access to their deleted contributions, the userspace log offers a good way to keep track of all pages you tag for PROD using Twinkle.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;prodLogPageName&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Keep the PROD userspace log at this user subpage&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;i.e. User:&amp;lt;i&amp;gt;username&amp;lt;/i&amp;gt;/&amp;lt;i&amp;gt;subpage name&amp;lt;/i&amp;gt;. Only works if you turn on the PROD userspace log.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Revert and rollback&amp;quot;,  // twinklefluff module&lt;br /&gt;
	preferences: [&lt;br /&gt;
		// TwinkleConfig.openTalkPage (array)&lt;br /&gt;
		// What types of actions that should result in opening of talk page&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;openTalkPage&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Open user talk page after these types of reversions&amp;quot;,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: { agf: &amp;quot;AGF rollback&amp;quot;, norm: &amp;quot;Normal rollback&amp;quot;, vand: &amp;quot;Vandalism rollback&amp;quot;, torev: &amp;quot;\&amp;quot;Restore this version\&amp;quot;&amp;quot; }&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.openTalkPageOnAutoRevert (bool)&lt;br /&gt;
		// Defines if talk page should be opened when calling revert from contrib page, because from there, actions may be multiple, and opening talk page not suitable. If set to true, openTalkPage defines then if talk page will be opened.&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;openTalkPageOnAutoRevert&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Open user talk page when invoking rollback from user contributions&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Often, you may be rolling back many pages at a time from a vandal&#039;s contributions page, so it would be unsuitable to open the user talk page. Hence, this option is off by default. When this is on, the desired options must be enabled in the previous setting for this to work.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.markRevertedPagesAsMinor (array)&lt;br /&gt;
		// What types of actions that should result in marking edit as minor&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;markRevertedPagesAsMinor&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Mark as minor edit for these types of reversions&amp;quot;,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: { agf: &amp;quot;AGF rollback&amp;quot;, norm: &amp;quot;Normal rollback&amp;quot;, vand: &amp;quot;Vandalism rollback&amp;quot;, torev: &amp;quot;\&amp;quot;Restore this version\&amp;quot;&amp;quot; }&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.watchRevertedPages (array)&lt;br /&gt;
		// What types of actions that should result in forced addition to watchlist&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;watchRevertedPages&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add pages to watchlist for these types of reversions&amp;quot;,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: { agf: &amp;quot;AGF rollback&amp;quot;, norm: &amp;quot;Normal rollback&amp;quot;, vand: &amp;quot;Vandalism rollback&amp;quot;, torev: &amp;quot;\&amp;quot;Restore this version\&amp;quot;&amp;quot; }&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.offerReasonOnNormalRevert (boolean)&lt;br /&gt;
		// If to offer a prompt for extra summary reason for normal reverts, default to true&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;offerReasonOnNormalRevert&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Prompt for reason for normal rollbacks&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;\&amp;quot;Normal\&amp;quot; rollbacks are the ones that are invoked from the middle [rollback] link.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;confirmOnFluff&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Provide a confirmation message before reverting&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;For users of pen or touch devices, and chronically indecisive people.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.showRollbackLinks (array)&lt;br /&gt;
		// Where Twinkle should show rollback links (diff, others, mine, contribs)&lt;br /&gt;
		// Note from TTO: |contribs| seems to be equal to |others| + |mine|, i.e. redundant, so I left it out heres&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;showRollbackLinks&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Show rollback links on these pages&amp;quot;,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: { diff: &amp;quot;Diff pages&amp;quot;, others: &amp;quot;Contributions pages of other users&amp;quot;, mine: &amp;quot;My contributions page&amp;quot; }&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Shared IP tagging&amp;quot;,&lt;br /&gt;
	inFriendlyConfig: true,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;markSharedIPAsMinor&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Mark shared IP tagging as a minor edit&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Speedy deletion (CSD)&amp;quot;,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		// TwinkleConfig.speedyPromptOnG7 (boolean)&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;speedyPromptOnG7&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Prompt for rationale when tagging with G7 (author request)&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.watchSpeedyPages (array)&lt;br /&gt;
		// Whether to add speedy tagged pages to watchlist&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;watchSpeedyPages&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add page to watchlist when tagging with these criteria&amp;quot;,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: Twinkle.config.commonSets.csdCriteria,&lt;br /&gt;
			setDisplayOrder: Twinkle.config.commonSets.csdCriteriaDisplayOrder&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.markSpeedyPagesAsPatrolled (boolean)&lt;br /&gt;
		// If, when applying speedy template to page, to mark the page as patrolled (if the page was reached from NewPages)&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;markSpeedyPagesAsPatrolled&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Mark page as patrolled when tagging (if possible)&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Due to technical limitations, pages are only marked as patrolled when they are reached via Special:NewPages.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.notifyUserOnSpeedyDeletionNomination (array)&lt;br /&gt;
		// What types of actions should result that the author of the page being notified of nomination&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;notifyUserOnSpeedyDeletionNomination&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Notify page creator only when tagging with these criteria&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Even if you choose to notify from the CSD screen, the notification will only take place for those criteria selected here.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: Twinkle.config.commonSets.csdCriteria,&lt;br /&gt;
			setDisplayOrder: Twinkle.config.commonSets.csdCriteriaDisplayOrder&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.welcomeUserOnSpeedyDeletionNotification (array of strings)&lt;br /&gt;
		// On what types of speedy deletion notifications shall the user be welcomed&lt;br /&gt;
		// with a &amp;quot;firstarticle&amp;quot; notice if his talk page has not yet been created.&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;welcomeUserOnSpeedyDeletionNotification&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Welcome page creator alongside notification when tagging with these criteria&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;The welcome is issued only if the user is notified about the deletion, and only if their talk page does not already exist. The template used is {{&amp;lt;a href=\&amp;quot;&amp;quot; + mw.util.getUrl(&amp;quot;Template:Firstarticle&amp;quot;) + &amp;quot;\&amp;quot;&amp;gt;firstarticle&amp;lt;/a&amp;gt;}}.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: Twinkle.config.commonSets.csdCriteria,&lt;br /&gt;
			setDisplayOrder: Twinkle.config.commonSets.csdCriteriaDisplayOrder&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.promptForSpeedyDeletionSummary (array of strings)&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;promptForSpeedyDeletionSummary&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Allow editing of deletion summary when deleting under these criteria&amp;quot;,&lt;br /&gt;
			adminOnly: true,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: Twinkle.config.commonSets.csdAndDICriteria,&lt;br /&gt;
			setDisplayOrder: Twinkle.config.commonSets.csdAndDICriteriaDisplayOrder&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.openUserTalkPageOnSpeedyDelete (array of strings)&lt;br /&gt;
		// What types of actions that should result user talk page to be opened when speedily deleting (admin only)&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;openUserTalkPageOnSpeedyDelete&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Open user talk page when deleting under these criteria&amp;quot;,&lt;br /&gt;
			adminOnly: true,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: Twinkle.config.commonSets.csdAndDICriteria,&lt;br /&gt;
			setDisplayOrder: Twinkle.config.commonSets.csdAndDICriteriaDisplayOrder&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.deleteTalkPageOnDelete (boolean)&lt;br /&gt;
		// If talk page if exists should also be deleted (CSD G8) when spedying a page (admin only)&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;deleteTalkPageOnDelete&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Check the \&amp;quot;also delete talk page\&amp;quot; box by default&amp;quot;,&lt;br /&gt;
			adminOnly: true,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.deleteSysopDefaultToTag (boolean)&lt;br /&gt;
		// Make the CSD screen default to &amp;quot;tag&amp;quot; instead of &amp;quot;delete&amp;quot; (admin only)&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;deleteSysopDefaultToTag&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Default to speedy tagging instead of outright deletion&amp;quot;,&lt;br /&gt;
			adminOnly: true,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.speedyWindowWidth (integer)&lt;br /&gt;
		// Defines the width of the Twinkle SD window in pixels&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;speedyWindowWidth&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Width of speedy deletion window (pixels)&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.speedyWindowWidth (integer)&lt;br /&gt;
		// Defines the width of the Twinkle SD window in pixels&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;speedyWindowHeight&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Height of speedy deletion window (pixels)&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;If you have a big monitor, you might like to increase this.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;logSpeedyNominations&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Keep a log in userspace of all CSD nominations&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Since non-admins do not have access to their deleted contributions, the userspace log offers a good way to keep track of all pages you nominate for CSD using Twinkle. Files tagged using DI are also added to this log.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;speedyLogPageName&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Keep the CSD userspace log at this user subpage&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;i.e. User:&amp;lt;i&amp;gt;username&amp;lt;/i&amp;gt;/&amp;lt;i&amp;gt;subpage name&amp;lt;/i&amp;gt;. Only works if you turn on the CSD userspace log.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;noLogOnSpeedyNomination&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Do not create a userspace log entry when tagging with these criteria&amp;quot;,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: Twinkle.config.commonSets.csdAndDICriteria,&lt;br /&gt;
			setDisplayOrder: Twinkle.config.commonSets.csdAndDICriteriaDisplayOrder&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Tag&amp;quot;,&lt;br /&gt;
	inFriendlyConfig: true,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;groupByDefault&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Check the \&amp;quot;group into {{multiple issues}}\&amp;quot; box by default&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;watchTaggedPages&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add page to watchlist when tagging&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;markTaggedPagesAsMinor&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Mark addition of tags as a minor edit&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;markTaggedPagesAsPatrolled&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Mark pages as patrolled when tagging (if possible)&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Due to technical limitations, pages are only marked as patrolled when they are reached via Special:NewPages.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;customTagList&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Custom article maintenance tags to display&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;These appear as additional options at the bottom of the list of tags. For example, you could add new maintenance tags which have not yet been added to Twinkle&#039;s defaults.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;customList&amp;quot;,&lt;br /&gt;
			customListValueTitle: &amp;quot;Template name (no curly brackets)&amp;quot;,&lt;br /&gt;
			customListLabelTitle: &amp;quot;Text to show in Welcome dialog&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Talkback&amp;quot;,&lt;br /&gt;
	inFriendlyConfig: true,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;markTalkbackAsMinor&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Mark talkbacks as minor edits&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;insertTalkbackSignature&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Insert signature within talkbacks&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;talkbackHeading&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Section heading to use for talkbacks&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;adminNoticeHeading&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Section heading to use for administrators&#039; noticeboard notices&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Unlink&amp;quot;,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		// TwinkleConfig.unlinkNamespaces (array)&lt;br /&gt;
		// In what namespaces unlink should happen, default in 0 (article) and 100 (portal)&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;unlinkNamespaces&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Remove links from pages in these namespaces&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Avoid selecting any talk namespaces, as Twinkle might end up unlinking on talk archives (a big no-no).&amp;quot;,&lt;br /&gt;
			type: &amp;quot;set&amp;quot;,&lt;br /&gt;
			setValues: Twinkle.config.commonSets.namespacesNoSpecial&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Warn user&amp;quot;,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		// TwinkleConfig.defaultWarningGroup (int)&lt;br /&gt;
		// if true, watch the page which has been dispatched an warning or notice, if false, default applies&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;defaultWarningGroup&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Default warning level&amp;quot;,&lt;br /&gt;
			type: &amp;quot;enum&amp;quot;,&lt;br /&gt;
			enumValues: { &amp;quot;1&amp;quot;: &amp;quot;Level 1&amp;quot;, &amp;quot;2&amp;quot;: &amp;quot;Level 2&amp;quot;, &amp;quot;3&amp;quot;: &amp;quot;Level 3&amp;quot;, &amp;quot;4&amp;quot;: &amp;quot;Level 4&amp;quot;, &amp;quot;5&amp;quot;: &amp;quot;Level 4im&amp;quot;, &amp;quot;6&amp;quot;: &amp;quot;Single-issue notices&amp;quot;, &amp;quot;7&amp;quot;: &amp;quot;Single-issue warnings&amp;quot;, &amp;quot;8&amp;quot;: &amp;quot;Block (admin only)&amp;quot; }&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.showSharedIPNotice may take arguments:&lt;br /&gt;
		// true: to show shared ip notice if an IP address&lt;br /&gt;
		// false: to not print the notice&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;showSharedIPNotice&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add extra notice on shared IP talk pages&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;The notice used for this is not a template - it is hard-coded in Twinkle at the moment.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.watchWarnings (boolean)&lt;br /&gt;
		// if true, watch the page which has been dispatched an warning or notice, if false, default applies&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;watchWarnings&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add user talk page to watchlist when notifying&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.blankTalkpageOnIndefBlock (boolean)&lt;br /&gt;
		// if true, blank the talk page when issuing an indef block notice (per [[MP:UW#Indefinitely blocked users]])&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;blankTalkpageOnIndefBlock&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Blank the talk page when indefinitely blocking users&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;See &amp;lt;a href=\&amp;quot;&amp;quot; + mw.util.getUrl(&amp;quot;MP:UW#Indefinitely blocked users&amp;quot;) + &amp;quot;\&amp;quot;&amp;gt;MP:UW&amp;lt;/a&amp;gt; for more information.&amp;quot;,&lt;br /&gt;
			adminOnly: true,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Welcome user&amp;quot;,&lt;br /&gt;
	inFriendlyConfig: true,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;topWelcomes&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Place welcomes above existing content on user talk pages&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;watchWelcomes&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add user talk pages to watchlist when welcoming&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Doing so adds to the personal element of welcoming a user - you will be able to see how they are coping as a newbie, and possibly help them.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;insertHeadings&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Insert a section heading before welcomes&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;welcomeHeading&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Section heading to use for welcomes&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Only has an effect if headings are enabled, and the heading is not part of the template.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;insertUsername&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add your username to the template (where applicable)&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Some welcome templates have an opening sentence like \&amp;quot;Hi, I&#039;m &amp;amp;lt;username&amp;amp;gt;. Welcome\&amp;quot; etc. If you turn off this option, these templates will not display your username in that way.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;insertSignature&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add your signature after the welcome&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Strongly recommended.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;markWelcomesAsMinor&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Mark welcomes as minor edits&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;maskTemplateInSummary&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Omit the name of the welcome template in the edit summary&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;The names of some of the templates (e.g. \&amp;quot;welcome-anon-vandal\&amp;quot;) may be viewed by the user as attacks, so it is better to leave them out of the edit summary&amp;quot;,&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;quickWelcomeMode&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Clicking the \&amp;quot;welcome\&amp;quot; link on a diff page will&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;If you choose to welcome automatically, the template you specify below will be used.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;enum&amp;quot;,&lt;br /&gt;
			enumValues: { auto: &amp;quot;welcome automatically&amp;quot;, norm: &amp;quot;prompt you to select a template&amp;quot; }&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;quickWelcomeTemplate&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Template to use when welcoming automatically&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;Enter the name of a welcome template, without the curly brackets. A link to the given article will be added.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;customWelcomeList&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Custom welcome templates to display&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;You can add other welcome templates, or user subpages that are welcome templates (prefixed with \&amp;quot;User:\&amp;quot;). Don&#039;t forget that these templates are substituted onto user talk pages.&amp;quot;,&lt;br /&gt;
			type: &amp;quot;customList&amp;quot;,&lt;br /&gt;
			customListValueTitle: &amp;quot;Template name (no curly brackets)&amp;quot;,&lt;br /&gt;
			customListLabelTitle: &amp;quot;Text to show in Welcome dialog&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;XFD (deletion discussions)&amp;quot;,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		// TwinkleConfig.xfdWatchPage (string)&lt;br /&gt;
		// The watchlist setting of the page being nominated for XfD. Either &amp;quot;yes&amp;quot; (add to watchlist), &amp;quot;no&amp;quot; (don&#039;t&lt;br /&gt;
		// add to watchlist), or &amp;quot;default&amp;quot; (use setting from preferences). Default is &amp;quot;default&amp;quot; (duh).&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;xfdWatchPage&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add the nominated page to watchlist&amp;quot;,&lt;br /&gt;
			type: &amp;quot;enum&amp;quot;,&lt;br /&gt;
			enumValues: Twinkle.config.commonEnums.watchlist&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.xfdWatchDiscussion (string)&lt;br /&gt;
		// The watchlist setting of the newly created XfD page (for those processes that create discussion pages for each nomination),&lt;br /&gt;
		// or the list page for the other processes.&lt;br /&gt;
		// Either &amp;quot;yes&amp;quot; (add to watchlist), &amp;quot;no&amp;quot; (don&#039;t add to watchlist), or &amp;quot;default&amp;quot; (use setting from preferences). Default is &amp;quot;default&amp;quot; (duh).&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;xfdWatchDiscussion&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add the deletion discussion page to watchlist&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;This refers to the discussion subpage (for AfD and MfD) or the daily log page (for TfD, CfD, RfD and FfD)&amp;quot;,&lt;br /&gt;
			type: &amp;quot;enum&amp;quot;,&lt;br /&gt;
			enumValues: Twinkle.config.commonEnums.watchlist&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.xfdWatchList (string)&lt;br /&gt;
		// The watchlist setting of the XfD list page, *if* the discussion is on a separate page. Either &amp;quot;yes&amp;quot; (add to watchlist), &amp;quot;no&amp;quot; (don&#039;t&lt;br /&gt;
		// add to watchlist), or &amp;quot;default&amp;quot; (use setting from preferences). Default is &amp;quot;no&amp;quot; (Hehe. Seriously though, who wants to watch it?&lt;br /&gt;
		// Sorry in advance for any false positives.).&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;xfdWatchList&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add the daily log/list page to the watchlist (where applicable)&amp;quot;,&lt;br /&gt;
			helptip: &amp;quot;This only applies for AfD and MfD, where the discussions are transcluded onto a daily log page (for AfD) or the main MfD page (for MfD).&amp;quot;,&lt;br /&gt;
			type: &amp;quot;enum&amp;quot;,&lt;br /&gt;
			enumValues: Twinkle.config.commonEnums.watchlist&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// TwinkleConfig.xfdWatchUser (string)&lt;br /&gt;
		// The watchlist setting of the user if he receives a notification. Either &amp;quot;yes&amp;quot; (add to watchlist), &amp;quot;no&amp;quot; (don&#039;t&lt;br /&gt;
		// add to watchlist), or &amp;quot;default&amp;quot; (use setting from preferences). Default is &amp;quot;default&amp;quot; (duh).&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;xfdWatchUser&amp;quot;,&lt;br /&gt;
			label: &amp;quot;Add the user talk page to watchlist (when notifying)&amp;quot;,&lt;br /&gt;
			type: &amp;quot;enum&amp;quot;,&lt;br /&gt;
			enumValues: Twinkle.config.commonEnums.watchlist&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	title: &amp;quot;Hidden&amp;quot;,&lt;br /&gt;
	hidden: true,&lt;br /&gt;
	preferences: [&lt;br /&gt;
		// twinkle.header.js: portlet setup&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;portletArea&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;portletId&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;portletName&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;portletType&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;portletNext&amp;quot;,&lt;br /&gt;
			type: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinklefluff.js: defines how many revision to query maximum, maximum possible is 50, default is 50&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;revertMaxRevisions&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinklebatchdelete.js: How many pages should be processed at a time&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;batchdeleteChunks&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinklebatchdelete.js: How many pages left in the process of being completed should allow a new batch to be initialized&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;batchDeleteMinCutOff&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinklebatchdelete.js: How many pages should be processed maximum&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;batchMax&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinklebatchprotect.js: How many pages should be processed at a time&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;batchProtectChunks&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinklebatchprotect.js: How many pages left in the process of being completed should allow a new batch to be initialized&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;batchProtectMinCutOff&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinklebatchundelete.js: How many pages should be processed at a time&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;batchundeleteChunks&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinklebatchundelete.js: How many pages left in the process of being completed should allow a new batch to be initialized&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;batchUndeleteMinCutOff&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinkledelimages.js: How many files should be processed at a time&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;deliChunks&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinkledelimages.js: How many files should be processed maximum&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;deliMax&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		// twinkledeprod.js: How many pages should be processed at a time&lt;br /&gt;
		{&lt;br /&gt;
			name: &amp;quot;proddeleteChunks&amp;quot;,&lt;br /&gt;
			type: &amp;quot;integer&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
]; // end of Twinkle.config.sections&lt;br /&gt;
&lt;br /&gt;
//{&lt;br /&gt;
//			name: &amp;quot;&amp;quot;,&lt;br /&gt;
//			label: &amp;quot;&amp;quot;,&lt;br /&gt;
//			type: &amp;quot;&amp;quot;&lt;br /&gt;
//		},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.init = function twinkleconfigInit() {&lt;br /&gt;
&lt;br /&gt;
	if ((mw.config.get(&amp;quot;wgPageName&amp;quot;) === &amp;quot;Wikipedia:Twinkle/Preferences&amp;quot; ||&lt;br /&gt;
	    (mw.config.get(&amp;quot;wgNamespaceNumber&amp;quot;) === 2 &amp;amp;&amp;amp; mw.config.get(&amp;quot;wgTitle&amp;quot;).lastIndexOf(&amp;quot;/Twinkle preferences&amp;quot;) === (mw.config.get(&amp;quot;wgTitle&amp;quot;).length - 20))) &amp;amp;&amp;amp;&lt;br /&gt;
	    mw.config.get(&amp;quot;wgAction&amp;quot;) === &amp;quot;view&amp;quot;) {&lt;br /&gt;
		// create the config page at Wikipedia:Twinkle/Preferences, and at user subpages (for testing purposes)&lt;br /&gt;
&lt;br /&gt;
		if (!document.getElementById(&amp;quot;twinkle-config&amp;quot;)) {&lt;br /&gt;
			return;  // maybe the page is misconfigured, or something - but any attempt to modify it will be pointless&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// set style (the url() CSS function doesn&#039;t seem to work from wikicode - ?!)&lt;br /&gt;
		document.getElementById(&amp;quot;twinkle-config-titlebar&amp;quot;).style.backgroundImage = &amp;quot;url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB%2FqqA%2BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEhQTFRFr73ZobTPusjdsMHZp7nVwtDhzNbnwM3fu8jdq7vUt8nbxtDkw9DhpbfSvMrfssPZqLvVztbno7bRrr7W1d%2Fs1N7qydXk0NjpkW7Q%2BgAAADVJREFUeNoMwgESQCAAAMGLkEIi%2FP%2BnbnbpdB59app5Vdg0sXAoMZCpGoFbK6ciuy6FX4ABAEyoAef0BXOXAAAAAElFTkSuQmCC)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		var contentdiv = document.getElementById(&amp;quot;twinkle-config-content&amp;quot;);&lt;br /&gt;
		contentdiv.textContent = &amp;quot;&amp;quot;;  // clear children&lt;br /&gt;
&lt;br /&gt;
		// let user know about possible conflict with monobook.js/vector.js file&lt;br /&gt;
		// (settings in that file will still work, but they will be overwritten by twinkleoptions.js settings)&lt;br /&gt;
		var contentnotice = document.createElement(&amp;quot;p&amp;quot;);&lt;br /&gt;
		// I hate innerHTML, but this is one thing it *is* good for...&lt;br /&gt;
		contentnotice.innerHTML = &amp;quot;&amp;lt;b&amp;gt;Before modifying your preferences here,&amp;lt;/b&amp;gt; make sure you have removed any old &amp;lt;code&amp;gt;TwinkleConfig&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FriendlyConfig&amp;lt;/code&amp;gt; settings from your &amp;lt;a href=\&amp;quot;&amp;quot; + mw.util.getUrl(&amp;quot;Special:MyPage/skin.js&amp;quot;) + &amp;quot;\&amp;quot; title=\&amp;quot;Special:MyPage/skin.js\&amp;quot;&amp;gt;user JavaScript file&amp;lt;/a&amp;gt;.&amp;quot;;&lt;br /&gt;
		contentdiv.appendChild(contentnotice);&lt;br /&gt;
&lt;br /&gt;
		// look and see if the user does in fact have any old settings in their skin JS file&lt;br /&gt;
		var skinjs = new Wikipedia.page(&amp;quot;User:&amp;quot; + mw.config.get(&amp;quot;wgUserName&amp;quot;) + &amp;quot;/&amp;quot; + mw.config.get(&amp;quot;skin&amp;quot;) + &amp;quot;.js&amp;quot;);&lt;br /&gt;
		skinjs.setCallbackParameters(contentnotice);&lt;br /&gt;
		skinjs.load(Twinkle.config.legacyPrefsNotice);&lt;br /&gt;
&lt;br /&gt;
		// start a table of contents&lt;br /&gt;
		var toctable = document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
		toctable.className = &amp;quot;toc&amp;quot;;&lt;br /&gt;
		toctable.style.marginLeft = &amp;quot;0.4em&amp;quot;;&lt;br /&gt;
		var toctr = document.createElement(&amp;quot;tr&amp;quot;);&lt;br /&gt;
		var toctd = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
		// create TOC title&lt;br /&gt;
		var toctitle = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		toctitle.id = &amp;quot;toctitle&amp;quot;;&lt;br /&gt;
		var toch2 = document.createElement(&amp;quot;h2&amp;quot;);&lt;br /&gt;
		toch2.textContent = &amp;quot;Contents &amp;quot;;&lt;br /&gt;
		toctitle.appendChild(toch2);&lt;br /&gt;
		// add TOC show/hide link&lt;br /&gt;
		var toctoggle = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
		toctoggle.className = &amp;quot;toctoggle&amp;quot;;&lt;br /&gt;
		toctoggle.appendChild(document.createTextNode(&amp;quot;[&amp;quot;));&lt;br /&gt;
		var toctogglelink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		toctogglelink.className = &amp;quot;internal&amp;quot;;&lt;br /&gt;
		toctogglelink.setAttribute(&amp;quot;href&amp;quot;, &amp;quot;#tw-tocshowhide&amp;quot;);&lt;br /&gt;
		toctogglelink.textContent = &amp;quot;hide&amp;quot;;&lt;br /&gt;
		toctoggle.appendChild(toctogglelink);&lt;br /&gt;
		toctoggle.appendChild(document.createTextNode(&amp;quot;]&amp;quot;));&lt;br /&gt;
		toctitle.appendChild(toctoggle);&lt;br /&gt;
		toctd.appendChild(toctitle);&lt;br /&gt;
		// create item container: this is what we add stuff to&lt;br /&gt;
		var tocul = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
		toctogglelink.addEventListener(&amp;quot;click&amp;quot;, function twinkleconfigTocToggle() {&lt;br /&gt;
			var $tocul = $(tocul);&lt;br /&gt;
			$tocul.toggle();&lt;br /&gt;
			if ($tocul.find(&amp;quot;:visible&amp;quot;).length) {&lt;br /&gt;
				toctogglelink.textContent = &amp;quot;hide&amp;quot;;&lt;br /&gt;
			} else {&lt;br /&gt;
				toctogglelink.textContent = &amp;quot;show&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		}, false);&lt;br /&gt;
		toctd.appendChild(tocul);&lt;br /&gt;
		toctr.appendChild(toctd);&lt;br /&gt;
		toctable.appendChild(toctr);&lt;br /&gt;
		contentdiv.appendChild(toctable);&lt;br /&gt;
&lt;br /&gt;
		var tocnumber = 1;&lt;br /&gt;
&lt;br /&gt;
		var contentform = document.createElement(&amp;quot;form&amp;quot;);&lt;br /&gt;
		contentform.setAttribute(&amp;quot;action&amp;quot;, &amp;quot;javascript:void(0)&amp;quot;);  // was #tw-save - changed to void(0) to work around Chrome issue&lt;br /&gt;
		contentform.addEventListener(&amp;quot;submit&amp;quot;, Twinkle.config.save, true);&lt;br /&gt;
		contentdiv.appendChild(contentform);&lt;br /&gt;
&lt;br /&gt;
		var container = document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
		container.style.width = &amp;quot;100%&amp;quot;;&lt;br /&gt;
		contentform.appendChild(container);&lt;br /&gt;
&lt;br /&gt;
		$(Twinkle.config.sections).each(function(sectionkey, section) {&lt;br /&gt;
			if (section.hidden || (section.adminOnly &amp;amp;&amp;amp; !userIsInGroup(&amp;quot;sysop&amp;quot;))) {&lt;br /&gt;
				return true;  // i.e. &amp;quot;continue&amp;quot; in this context&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var configgetter;  // retrieve the live config values&lt;br /&gt;
			if (section.inFriendlyConfig) {&lt;br /&gt;
				configgetter = Twinkle.getFriendlyPref;&lt;br /&gt;
			} else {&lt;br /&gt;
				configgetter = Twinkle.getPref;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// add to TOC&lt;br /&gt;
			var tocli = document.createElement(&amp;quot;li&amp;quot;);&lt;br /&gt;
			tocli.className = &amp;quot;toclevel-1&amp;quot;;&lt;br /&gt;
			var toca = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			toca.setAttribute(&amp;quot;href&amp;quot;, &amp;quot;#twinkle-config-section-&amp;quot; + tocnumber.toString());&lt;br /&gt;
			toca.appendChild(document.createTextNode(section.title));&lt;br /&gt;
			tocli.appendChild(toca);&lt;br /&gt;
			tocul.appendChild(tocli);&lt;br /&gt;
&lt;br /&gt;
			var row = document.createElement(&amp;quot;tr&amp;quot;);&lt;br /&gt;
			var cell = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
			cell.setAttribute(&amp;quot;colspan&amp;quot;, &amp;quot;3&amp;quot;);&lt;br /&gt;
			var heading = document.createElement(&amp;quot;h4&amp;quot;);&lt;br /&gt;
			heading.style.borderBottom = &amp;quot;1px solid gray&amp;quot;;&lt;br /&gt;
			heading.style.marginTop = &amp;quot;0.2em&amp;quot;;&lt;br /&gt;
			heading.id = &amp;quot;twinkle-config-section-&amp;quot; + (tocnumber++).toString();&lt;br /&gt;
			heading.appendChild(document.createTextNode(section.title));&lt;br /&gt;
			cell.appendChild(heading);&lt;br /&gt;
			row.appendChild(cell);&lt;br /&gt;
			container.appendChild(row);&lt;br /&gt;
&lt;br /&gt;
			var rowcount = 1;  // for row banding&lt;br /&gt;
&lt;br /&gt;
			// add each of the preferences to the form&lt;br /&gt;
			$(section.preferences).each(function(prefkey, pref) {&lt;br /&gt;
				if (pref.adminOnly &amp;amp;&amp;amp; !userIsInGroup(&amp;quot;sysop&amp;quot;)) {&lt;br /&gt;
					return true;  // i.e. &amp;quot;continue&amp;quot; in this context&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				row = document.createElement(&amp;quot;tr&amp;quot;);&lt;br /&gt;
				row.style.marginBottom = &amp;quot;0.2em&amp;quot;;&lt;br /&gt;
				// create odd row banding&lt;br /&gt;
				if (rowcount++ % 2 === 0) {&lt;br /&gt;
					row.style.backgroundColor = &amp;quot;rgba(128, 128, 128, 0.1)&amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				cell = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				var label, input;&lt;br /&gt;
				switch (pref.type) {&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;boolean&amp;quot;:  // create a checkbox&lt;br /&gt;
						cell.setAttribute(&amp;quot;colspan&amp;quot;, &amp;quot;2&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
						label = document.createElement(&amp;quot;label&amp;quot;);&lt;br /&gt;
						input = document.createElement(&amp;quot;input&amp;quot;);&lt;br /&gt;
						input.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;checkbox&amp;quot;);&lt;br /&gt;
						input.setAttribute(&amp;quot;id&amp;quot;, pref.name);&lt;br /&gt;
						input.setAttribute(&amp;quot;name&amp;quot;, pref.name);&lt;br /&gt;
						if (configgetter(pref.name) === true) {&lt;br /&gt;
							input.setAttribute(&amp;quot;checked&amp;quot;, &amp;quot;checked&amp;quot;);&lt;br /&gt;
						}&lt;br /&gt;
						label.appendChild(input);&lt;br /&gt;
						label.appendChild(document.createTextNode(&amp;quot; &amp;quot; + pref.label));&lt;br /&gt;
						cell.appendChild(label);&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;string&amp;quot;:  // create an input box&lt;br /&gt;
					case &amp;quot;integer&amp;quot;:&lt;br /&gt;
						// add label to first column&lt;br /&gt;
						cell.style.textAlign = &amp;quot;right&amp;quot;;&lt;br /&gt;
						cell.style.paddingRight = &amp;quot;0.5em&amp;quot;;&lt;br /&gt;
						label = document.createElement(&amp;quot;label&amp;quot;);&lt;br /&gt;
						label.setAttribute(&amp;quot;for&amp;quot;, pref.name);&lt;br /&gt;
						label.appendChild(document.createTextNode(pref.label + &amp;quot;:&amp;quot;));&lt;br /&gt;
						cell.appendChild(label);&lt;br /&gt;
						row.appendChild(cell);&lt;br /&gt;
&lt;br /&gt;
						// add input box to second column&lt;br /&gt;
						cell = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
						cell.style.paddingRight = &amp;quot;1em&amp;quot;;&lt;br /&gt;
						input = document.createElement(&amp;quot;input&amp;quot;);&lt;br /&gt;
						input.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;text&amp;quot;);&lt;br /&gt;
						input.setAttribute(&amp;quot;id&amp;quot;, pref.name);&lt;br /&gt;
						input.setAttribute(&amp;quot;name&amp;quot;, pref.name);&lt;br /&gt;
						if (pref.type === &amp;quot;integer&amp;quot;) {&lt;br /&gt;
							input.setAttribute(&amp;quot;size&amp;quot;, 6);&lt;br /&gt;
							input.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;number&amp;quot;);&lt;br /&gt;
							input.setAttribute(&amp;quot;step&amp;quot;, &amp;quot;1&amp;quot;);  // integers only&lt;br /&gt;
						}&lt;br /&gt;
						if (configgetter(pref.name)) {&lt;br /&gt;
							input.setAttribute(&amp;quot;value&amp;quot;, configgetter(pref.name));&lt;br /&gt;
						}&lt;br /&gt;
						cell.appendChild(input);&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;enum&amp;quot;:  // create a combo box&lt;br /&gt;
						// add label to first column&lt;br /&gt;
						// note: duplicates the code above, under string/integer&lt;br /&gt;
						cell.style.textAlign = &amp;quot;right&amp;quot;;&lt;br /&gt;
						cell.style.paddingRight = &amp;quot;0.5em&amp;quot;;&lt;br /&gt;
						label = document.createElement(&amp;quot;label&amp;quot;);&lt;br /&gt;
						label.setAttribute(&amp;quot;for&amp;quot;, pref.name);&lt;br /&gt;
						label.appendChild(document.createTextNode(pref.label + &amp;quot;:&amp;quot;));&lt;br /&gt;
						cell.appendChild(label);&lt;br /&gt;
						row.appendChild(cell);&lt;br /&gt;
&lt;br /&gt;
						// add input box to second column&lt;br /&gt;
						cell = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
						cell.style.paddingRight = &amp;quot;1em&amp;quot;;&lt;br /&gt;
						input = document.createElement(&amp;quot;select&amp;quot;);&lt;br /&gt;
						input.setAttribute(&amp;quot;id&amp;quot;, pref.name);&lt;br /&gt;
						input.setAttribute(&amp;quot;name&amp;quot;, pref.name);&lt;br /&gt;
						$.each(pref.enumValues, function(enumvalue, enumdisplay) {&lt;br /&gt;
							var option = document.createElement(&amp;quot;option&amp;quot;);&lt;br /&gt;
							option.setAttribute(&amp;quot;value&amp;quot;, enumvalue);&lt;br /&gt;
							if (configgetter(pref.name) == enumvalue) {&lt;br /&gt;
								option.setAttribute(&amp;quot;selected&amp;quot;, &amp;quot;selected&amp;quot;);&lt;br /&gt;
							}&lt;br /&gt;
							option.appendChild(document.createTextNode(enumdisplay));&lt;br /&gt;
							input.appendChild(option);&lt;br /&gt;
						});&lt;br /&gt;
						cell.appendChild(input);&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;set&amp;quot;:  // create a set of check boxes&lt;br /&gt;
						// add label first of all&lt;br /&gt;
						cell.setAttribute(&amp;quot;colspan&amp;quot;, &amp;quot;2&amp;quot;);&lt;br /&gt;
						label = document.createElement(&amp;quot;label&amp;quot;);  // not really necessary to use a label element here, but we do it for consistency of styling&lt;br /&gt;
						label.appendChild(document.createTextNode(pref.label + &amp;quot;:&amp;quot;));&lt;br /&gt;
						cell.appendChild(label);&lt;br /&gt;
&lt;br /&gt;
						var checkdiv = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
						checkdiv.style.paddingLeft = &amp;quot;1em&amp;quot;;&lt;br /&gt;
						var worker = function(itemkey, itemvalue) {&lt;br /&gt;
							var checklabel = document.createElement(&amp;quot;label&amp;quot;);&lt;br /&gt;
							checklabel.style.marginRight = &amp;quot;0.7em&amp;quot;;&lt;br /&gt;
							checklabel.style.display = &amp;quot;inline-block&amp;quot;;&lt;br /&gt;
							var check = document.createElement(&amp;quot;input&amp;quot;);&lt;br /&gt;
							check.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;checkbox&amp;quot;);&lt;br /&gt;
							check.setAttribute(&amp;quot;id&amp;quot;, pref.name + &amp;quot;_&amp;quot; + itemkey);&lt;br /&gt;
							check.setAttribute(&amp;quot;name&amp;quot;, pref.name + &amp;quot;_&amp;quot; + itemkey);&lt;br /&gt;
							if (configgetter(pref.name) &amp;amp;&amp;amp; configgetter(pref.name).indexOf(itemkey) !== -1) {&lt;br /&gt;
								check.setAttribute(&amp;quot;checked&amp;quot;, &amp;quot;checked&amp;quot;);&lt;br /&gt;
							}&lt;br /&gt;
							// cater for legacy integer array values for unlinkNamespaces (this can be removed a few years down the track...)&lt;br /&gt;
							if (pref.name === &amp;quot;unlinkNamespaces&amp;quot;) {&lt;br /&gt;
								if (configgetter(pref.name) &amp;amp;&amp;amp; configgetter(pref.name).indexOf(parseInt(itemkey, 10)) !== -1) {&lt;br /&gt;
									check.setAttribute(&amp;quot;checked&amp;quot;, &amp;quot;checked&amp;quot;);&lt;br /&gt;
								}&lt;br /&gt;
							}&lt;br /&gt;
							checklabel.appendChild(check);&lt;br /&gt;
							checklabel.appendChild(document.createTextNode(itemvalue));&lt;br /&gt;
							checkdiv.appendChild(checklabel);&lt;br /&gt;
						};&lt;br /&gt;
						if (pref.setDisplayOrder) {&lt;br /&gt;
							// add check boxes according to the given display order&lt;br /&gt;
							$.each(pref.setDisplayOrder, function(itemkey, item) {&lt;br /&gt;
								worker(item, pref.setValues[item]);&lt;br /&gt;
							});&lt;br /&gt;
						} else {&lt;br /&gt;
							// add check boxes according to the order it gets fed to us (probably strict alphabetical)&lt;br /&gt;
							$.each(pref.setValues, worker);&lt;br /&gt;
						}&lt;br /&gt;
						cell.appendChild(checkdiv);&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;customList&amp;quot;:&lt;br /&gt;
						// add label to first column&lt;br /&gt;
						cell.style.textAlign = &amp;quot;right&amp;quot;;&lt;br /&gt;
						cell.style.paddingRight = &amp;quot;0.5em&amp;quot;;&lt;br /&gt;
						label = document.createElement(&amp;quot;label&amp;quot;);&lt;br /&gt;
						label.setAttribute(&amp;quot;for&amp;quot;, pref.name);&lt;br /&gt;
						label.appendChild(document.createTextNode(pref.label + &amp;quot;:&amp;quot;));&lt;br /&gt;
						cell.appendChild(label);&lt;br /&gt;
						row.appendChild(cell);&lt;br /&gt;
&lt;br /&gt;
						// add button to second column&lt;br /&gt;
						cell = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
						cell.style.paddingRight = &amp;quot;1em&amp;quot;;&lt;br /&gt;
						var button = document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
						button.setAttribute(&amp;quot;id&amp;quot;, pref.name);&lt;br /&gt;
						button.setAttribute(&amp;quot;name&amp;quot;, pref.name);&lt;br /&gt;
						button.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;button&amp;quot;);&lt;br /&gt;
						button.addEventListener(&amp;quot;click&amp;quot;, Twinkle.config.listDialog.display, false);&lt;br /&gt;
						// use jQuery data on the button to store the current config value&lt;br /&gt;
						$(button).data({&lt;br /&gt;
							value: configgetter(pref.name),&lt;br /&gt;
							pref: pref,&lt;br /&gt;
							inFriendlyConfig: section.inFriendlyConfig&lt;br /&gt;
						});&lt;br /&gt;
						button.appendChild(document.createTextNode(&amp;quot;Edit items&amp;quot;));&lt;br /&gt;
						cell.appendChild(button);&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					default:&lt;br /&gt;
						alert(&amp;quot;twinkleconfig: unknown data type for preference &amp;quot; + pref.name);&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
				row.appendChild(cell);&lt;br /&gt;
&lt;br /&gt;
				// add help tip&lt;br /&gt;
				cell = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
				cell.style.fontSize = &amp;quot;90%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
				cell.style.color = &amp;quot;gray&amp;quot;;&lt;br /&gt;
				if (pref.helptip) {&lt;br /&gt;
					cell.innerHTML = pref.helptip;&lt;br /&gt;
				}&lt;br /&gt;
				// add reset link (custom lists don&#039;t need this, as their config value isn&#039;t displayed on the form)&lt;br /&gt;
				if (pref.type !== &amp;quot;customList&amp;quot;) {&lt;br /&gt;
					var resetlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
					resetlink.setAttribute(&amp;quot;href&amp;quot;, &amp;quot;#tw-reset&amp;quot;);&lt;br /&gt;
					resetlink.setAttribute(&amp;quot;id&amp;quot;, &amp;quot;twinkle-config-reset-&amp;quot; + pref.name);&lt;br /&gt;
					resetlink.addEventListener(&amp;quot;click&amp;quot;, Twinkle.config.resetPrefLink, false);&lt;br /&gt;
					if (resetlink.style.styleFloat) {  // IE (inc. IE9)&lt;br /&gt;
						resetlink.style.styleFloat = &amp;quot;right&amp;quot;;&lt;br /&gt;
					} else {  // standards&lt;br /&gt;
						resetlink.style.cssFloat = &amp;quot;right&amp;quot;;&lt;br /&gt;
					}&lt;br /&gt;
					resetlink.style.margin = &amp;quot;0 0.6em&amp;quot;;&lt;br /&gt;
					resetlink.appendChild(document.createTextNode(&amp;quot;Reset&amp;quot;));&lt;br /&gt;
					cell.appendChild(resetlink);&lt;br /&gt;
				}&lt;br /&gt;
				row.appendChild(cell);&lt;br /&gt;
&lt;br /&gt;
				container.appendChild(row);&lt;br /&gt;
				return true;&lt;br /&gt;
			});&lt;br /&gt;
			return true;&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		var footerbox = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		footerbox.setAttribute(&amp;quot;id&amp;quot;, &amp;quot;twinkle-config-buttonpane&amp;quot;);&lt;br /&gt;
		footerbox.style.backgroundColor = &amp;quot;#BCCADF&amp;quot;;&lt;br /&gt;
		footerbox.style.padding = &amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		var button = document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		button.setAttribute(&amp;quot;id&amp;quot;, &amp;quot;twinkle-config-submit&amp;quot;);&lt;br /&gt;
		button.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;submit&amp;quot;);&lt;br /&gt;
		button.appendChild(document.createTextNode(&amp;quot;Save changes&amp;quot;));&lt;br /&gt;
		footerbox.appendChild(button);&lt;br /&gt;
		var footerspan = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
		footerspan.className = &amp;quot;plainlinks&amp;quot;;&lt;br /&gt;
		footerspan.style.marginLeft = &amp;quot;2.4em&amp;quot;;&lt;br /&gt;
		footerspan.style.fontSize = &amp;quot;90%&amp;quot;;&lt;br /&gt;
		var footera = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		footera.setAttribute(&amp;quot;href&amp;quot;, &amp;quot;#tw-reset-all&amp;quot;);&lt;br /&gt;
		footera.setAttribute(&amp;quot;id&amp;quot;, &amp;quot;twinkle-config-resetall&amp;quot;);&lt;br /&gt;
		footera.addEventListener(&amp;quot;click&amp;quot;, Twinkle.config.resetAllPrefs, false);&lt;br /&gt;
		footera.appendChild(document.createTextNode(&amp;quot;Restore defaults&amp;quot;));&lt;br /&gt;
		footerspan.appendChild(footera);&lt;br /&gt;
		footerbox.appendChild(footerspan);&lt;br /&gt;
		contentform.appendChild(footerbox);&lt;br /&gt;
&lt;br /&gt;
		// since all the section headers exist now, we can try going to the requested anchor&lt;br /&gt;
		if (location.hash) {&lt;br /&gt;
			location.hash = location.hash;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	} else if (mw.config.get(&amp;quot;wgNamespaceNumber&amp;quot;) === 2) {&lt;br /&gt;
&lt;br /&gt;
		var box = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		box.setAttribute(&amp;quot;id&amp;quot;, &amp;quot;twinkle-config-headerbox&amp;quot;);&lt;br /&gt;
		box.style.border = &amp;quot;1px #f60 solid&amp;quot;;&lt;br /&gt;
		box.style.background = &amp;quot;#fed&amp;quot;;&lt;br /&gt;
		box.style.padding = &amp;quot;0.6em&amp;quot;;&lt;br /&gt;
		box.style.margin = &amp;quot;0.5em auto&amp;quot;;&lt;br /&gt;
		box.style.textAlign = &amp;quot;center&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		var link;&lt;br /&gt;
		if (mw.config.get(&amp;quot;wgTitle&amp;quot;) === mw.config.get(&amp;quot;wgUserName&amp;quot;) + &amp;quot;/twinkleoptions.js&amp;quot;) {&lt;br /&gt;
			// place &amp;quot;why not try the preference panel&amp;quot; notice&lt;br /&gt;
			box.style.fontWeight = &amp;quot;bold&amp;quot;;&lt;br /&gt;
			box.style.width = &amp;quot;80%&amp;quot;;&lt;br /&gt;
			box.style.borderWidth = &amp;quot;2px&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			if (mw.config.get(&amp;quot;wgArticleId&amp;quot;) &amp;gt; 0) {  // page exists&lt;br /&gt;
				box.appendChild(document.createTextNode(&amp;quot;This page contains your Twinkle preferences. You can change them using the &amp;quot;));&lt;br /&gt;
			} else {  // page does not exist&lt;br /&gt;
				box.appendChild(document.createTextNode(&amp;quot;You can customize Twinkle to suit your preferences by using the &amp;quot;));&lt;br /&gt;
			}&lt;br /&gt;
			link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			link.setAttribute(&amp;quot;href&amp;quot;, mw.util.getUrl(&amp;quot;Wikipedia:Twinkle/Preferences&amp;quot;) );&lt;br /&gt;
			link.appendChild(document.createTextNode(&amp;quot;Twinkle preferences panel&amp;quot;));&lt;br /&gt;
			box.appendChild(link);&lt;br /&gt;
			box.appendChild(document.createTextNode(&amp;quot;, or by editing this page.&amp;quot;));&lt;br /&gt;
			$(box).insertAfter($(&amp;quot;#contentSub&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
		} else if (mw.config.get(&amp;quot;wgTitle&amp;quot;).indexOf(mw.config.get(&amp;quot;wgUserName&amp;quot;)) === 0 &amp;amp;&amp;amp; mw.config.get(&amp;quot;wgTitle&amp;quot;).lastIndexOf(&amp;quot;.js&amp;quot;) == mw.config.get(&amp;quot;wgTitle&amp;quot;).length - 3) {&lt;br /&gt;
			// place &amp;quot;Looking for Twinkle options?&amp;quot; notice&lt;br /&gt;
			box.style.width = &amp;quot;60%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			box.appendChild(document.createTextNode(&amp;quot;If you want to set Twinkle preferences, you can use the &amp;quot;));&lt;br /&gt;
			link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			link.setAttribute(&amp;quot;href&amp;quot;, mw.util.getUrl(&amp;quot;Wikipedia:Twinkle/Preferences&amp;quot;) );&lt;br /&gt;
			link.appendChild(document.createTextNode(&amp;quot;Twinkle preferences panel&amp;quot;));&lt;br /&gt;
			box.appendChild(link);&lt;br /&gt;
			box.appendChild(document.createTextNode(&amp;quot;.&amp;quot;));&lt;br /&gt;
			$(box).insertAfter($(&amp;quot;#contentSub&amp;quot;));&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Wikipedia.page callback from init code&lt;br /&gt;
Twinkle.config.legacyPrefsNotice = function twinkleconfigLegacyPrefsNotice(pageobj) {&lt;br /&gt;
	var text = pageobj.getPageText();&lt;br /&gt;
	var contentnotice = pageobj.getCallbackParameters();&lt;br /&gt;
	if (text.indexOf(&amp;quot;TwinkleConfig&amp;quot;) !== -1 || text.indexOf(&amp;quot;FriendlyConfig&amp;quot;) !== -1) {&lt;br /&gt;
		contentnotice.innerHTML = &#039;&amp;lt;table class=&amp;quot;plainlinks ombox ombox-content&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;mbox-image&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;img alt=&amp;quot;&amp;quot; src=&amp;quot;//upload.wikimedia.org/wikipedia/en/3/38/Imbox_content.png&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;td class=&amp;quot;mbox-text&amp;quot;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Before modifying your settings here,&amp;lt;/b&amp;gt; you must remove your old Twinkle and Friendly settings from your personal skin JavaScript.&amp;lt;/big&amp;gt;&amp;lt;/p&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;p&amp;gt;To do this, you can &amp;lt;a href=&amp;quot;&#039; + mw.config.get(&amp;quot;wgScript&amp;quot;) + &#039;?title=User:&#039; + encodeURIComponent(mw.config.get(&amp;quot;wgUserName&amp;quot;)) + &#039;/&#039; + mw.config.get(&amp;quot;skin&amp;quot;) + &#039;.js&amp;amp;action=edit&amp;quot; target=&amp;quot;_tab&amp;quot;&amp;gt;&amp;lt;b&amp;gt;edit your personal JavaScript&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;, removing all lines of code that refer to &amp;lt;code&amp;gt;TwinkleConfig&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FriendlyConfig&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&#039;;&lt;br /&gt;
	} else {&lt;br /&gt;
		$(contentnotice).remove();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// custom list-related stuff&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.listDialog = {};&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.listDialog.addRow = function twinkleconfigListDialogAddRow(dlgtable, value, label) {&lt;br /&gt;
	var contenttr = document.createElement(&amp;quot;tr&amp;quot;);&lt;br /&gt;
	// &amp;quot;remove&amp;quot; button&lt;br /&gt;
	var contenttd = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
	var removeButton = document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
	removeButton.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;button&amp;quot;);&lt;br /&gt;
	removeButton.addEventListener(&amp;quot;click&amp;quot;, function() { $(contenttr).remove(); }, false);&lt;br /&gt;
	removeButton.textContent = &amp;quot;Remove&amp;quot;;&lt;br /&gt;
	contenttd.appendChild(removeButton);&lt;br /&gt;
	contenttr.appendChild(contenttd);&lt;br /&gt;
&lt;br /&gt;
	// value input box&lt;br /&gt;
	contenttd = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
	var input = document.createElement(&amp;quot;input&amp;quot;);&lt;br /&gt;
	input.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;text&amp;quot;);&lt;br /&gt;
	input.className = &amp;quot;twinkle-config-customlist-value&amp;quot;;&lt;br /&gt;
	input.style.width = &amp;quot;97%&amp;quot;;&lt;br /&gt;
	if (value) {&lt;br /&gt;
		input.setAttribute(&amp;quot;value&amp;quot;, value);&lt;br /&gt;
	}&lt;br /&gt;
	contenttd.appendChild(input);&lt;br /&gt;
	contenttr.appendChild(contenttd);&lt;br /&gt;
&lt;br /&gt;
	// label input box&lt;br /&gt;
	contenttd = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
	input = document.createElement(&amp;quot;input&amp;quot;);&lt;br /&gt;
	input.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;text&amp;quot;);&lt;br /&gt;
	input.className = &amp;quot;twinkle-config-customlist-label&amp;quot;;&lt;br /&gt;
	input.style.width = &amp;quot;98%&amp;quot;;&lt;br /&gt;
	if (label) {&lt;br /&gt;
		input.setAttribute(&amp;quot;value&amp;quot;, label);&lt;br /&gt;
	}&lt;br /&gt;
	contenttd.appendChild(input);&lt;br /&gt;
	contenttr.appendChild(contenttd);&lt;br /&gt;
&lt;br /&gt;
	dlgtable.appendChild(contenttr);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.listDialog.display = function twinkleconfigListDialogDisplay(e) {&lt;br /&gt;
	var $prefbutton = $(e.target);&lt;br /&gt;
	var curvalue = $prefbutton.data(&amp;quot;value&amp;quot;);&lt;br /&gt;
	var curpref = $prefbutton.data(&amp;quot;pref&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	var dialog = new SimpleWindow(720, 400);&lt;br /&gt;
	dialog.setTitle(curpref.label);&lt;br /&gt;
	dialog.setScriptName(&amp;quot;Twinkle preferences&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	var dialogcontent = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
	var dlgtable = document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
	dlgtable.className = &amp;quot;wikitable&amp;quot;;&lt;br /&gt;
	dlgtable.style.margin = &amp;quot;1.4em 1em&amp;quot;;&lt;br /&gt;
	dlgtable.style.width = &amp;quot;auto&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var dlgtbody = document.createElement(&amp;quot;tbody&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	// header row&lt;br /&gt;
	var dlgtr = document.createElement(&amp;quot;tr&amp;quot;);&lt;br /&gt;
	// top-left cell&lt;br /&gt;
	var dlgth = document.createElement(&amp;quot;th&amp;quot;);&lt;br /&gt;
	dlgth.style.width = &amp;quot;5%&amp;quot;;&lt;br /&gt;
	dlgtr.appendChild(dlgth);&lt;br /&gt;
	// value column header&lt;br /&gt;
	dlgth = document.createElement(&amp;quot;th&amp;quot;);&lt;br /&gt;
	dlgth.style.width = &amp;quot;35%&amp;quot;;&lt;br /&gt;
	dlgth.textContent = (curpref.customListValueTitle ? curpref.customListValueTitle : &amp;quot;Value&amp;quot;);&lt;br /&gt;
	dlgtr.appendChild(dlgth);&lt;br /&gt;
	// label column header&lt;br /&gt;
	dlgth = document.createElement(&amp;quot;th&amp;quot;);&lt;br /&gt;
	dlgth.style.width = &amp;quot;60%&amp;quot;;&lt;br /&gt;
	dlgth.textContent = (curpref.customListLabelTitle ? curpref.customListLabelTitle : &amp;quot;Label&amp;quot;);&lt;br /&gt;
	dlgtr.appendChild(dlgth);&lt;br /&gt;
	dlgtbody.appendChild(dlgtr);&lt;br /&gt;
&lt;br /&gt;
	// content rows&lt;br /&gt;
	var gotRow = false;&lt;br /&gt;
	$.each(curvalue, function(k, v) {&lt;br /&gt;
		gotRow = true;&lt;br /&gt;
		Twinkle.config.listDialog.addRow(dlgtbody, v.value, v.label);&lt;br /&gt;
	});&lt;br /&gt;
	// if there are no values present, add a blank row to start the user off&lt;br /&gt;
	if (!gotRow) {&lt;br /&gt;
		Twinkle.config.listDialog.addRow(dlgtbody);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// final &amp;quot;add&amp;quot; button&lt;br /&gt;
	var dlgtfoot = document.createElement(&amp;quot;tfoot&amp;quot;);&lt;br /&gt;
	dlgtr = document.createElement(&amp;quot;tr&amp;quot;);&lt;br /&gt;
	var dlgtd = document.createElement(&amp;quot;td&amp;quot;);&lt;br /&gt;
	dlgtd.setAttribute(&amp;quot;colspan&amp;quot;, &amp;quot;3&amp;quot;);&lt;br /&gt;
	var addButton = document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
	addButton.style.minWidth = &amp;quot;8em&amp;quot;;&lt;br /&gt;
	addButton.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;button&amp;quot;);&lt;br /&gt;
	addButton.addEventListener(&amp;quot;click&amp;quot;, function(e) {&lt;br /&gt;
		Twinkle.config.listDialog.addRow(dlgtbody);&lt;br /&gt;
	}, false);&lt;br /&gt;
	addButton.textContent = &amp;quot;Add&amp;quot;;&lt;br /&gt;
	dlgtd.appendChild(addButton);&lt;br /&gt;
	dlgtr.appendChild(dlgtd);&lt;br /&gt;
	dlgtfoot.appendChild(dlgtr);&lt;br /&gt;
&lt;br /&gt;
	dlgtable.appendChild(dlgtbody);&lt;br /&gt;
	dlgtable.appendChild(dlgtfoot);&lt;br /&gt;
	dialogcontent.appendChild(dlgtable);&lt;br /&gt;
&lt;br /&gt;
	// buttonpane buttons: [Save changes] [Reset] [Cancel]&lt;br /&gt;
	var button = document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
	button.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;submit&amp;quot;);  // so SimpleWindow puts the button in the button pane&lt;br /&gt;
	button.addEventListener(&amp;quot;click&amp;quot;, function(e) {&lt;br /&gt;
		Twinkle.config.listDialog.save($prefbutton, dlgtbody);&lt;br /&gt;
		dialog.close();&lt;br /&gt;
	}, false);&lt;br /&gt;
	button.textContent = &amp;quot;Save changes&amp;quot;;&lt;br /&gt;
	dialogcontent.appendChild(button);&lt;br /&gt;
	button = document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
	button.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;submit&amp;quot;);  // so SimpleWindow puts the button in the button pane&lt;br /&gt;
	button.addEventListener(&amp;quot;click&amp;quot;, function(e) {&lt;br /&gt;
		Twinkle.config.listDialog.reset($prefbutton, dlgtbody);&lt;br /&gt;
	}, false);&lt;br /&gt;
	button.textContent = &amp;quot;Reset&amp;quot;;&lt;br /&gt;
	dialogcontent.appendChild(button);&lt;br /&gt;
	button = document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
	button.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;submit&amp;quot;);  // so SimpleWindow puts the button in the button pane&lt;br /&gt;
	button.addEventListener(&amp;quot;click&amp;quot;, function(e) {&lt;br /&gt;
		dialog.close();  // the event parameter on this function seems to be broken&lt;br /&gt;
	}, false);&lt;br /&gt;
	button.textContent = &amp;quot;Cancel&amp;quot;;&lt;br /&gt;
	dialogcontent.appendChild(button);&lt;br /&gt;
&lt;br /&gt;
	dialog.setContent(dialogcontent);&lt;br /&gt;
	dialog.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Resets the data value, re-populates based on the new (default) value, then saves the&lt;br /&gt;
// old data value again (less surprising behaviour)&lt;br /&gt;
Twinkle.config.listDialog.reset = function twinkleconfigListDialogReset(button, tbody) {&lt;br /&gt;
	// reset value on button&lt;br /&gt;
	var $button = $(button);&lt;br /&gt;
	var curpref = $button.data(&amp;quot;pref&amp;quot;);&lt;br /&gt;
	var oldvalue = $button.data(&amp;quot;value&amp;quot;);&lt;br /&gt;
	Twinkle.config.resetPref(curpref, $button.data(&amp;quot;inFriendlyConfig&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	// reset form&lt;br /&gt;
	var $tbody = $(tbody);&lt;br /&gt;
	$tbody.find(&amp;quot;tr&amp;quot;).slice(1).remove();  // all rows except the first (header) row&lt;br /&gt;
	// add the new values&lt;br /&gt;
	var curvalue = $button.data(&amp;quot;value&amp;quot;);&lt;br /&gt;
	$.each(curvalue, function(k, v) {&lt;br /&gt;
		Twinkle.config.listDialog.addRow(tbody, v.value, v.label);&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	// save the old value&lt;br /&gt;
	$button.data(&amp;quot;value&amp;quot;, oldvalue);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.listDialog.save = function twinkleconfigListDialogSave(button, tbody) {&lt;br /&gt;
	var result = [];&lt;br /&gt;
	var current = {};&lt;br /&gt;
	$(tbody).find(&#039;input[type=&amp;quot;text&amp;quot;]&#039;).each(function(inputkey, input) {&lt;br /&gt;
		if ($(input).hasClass(&amp;quot;twinkle-config-customlist-value&amp;quot;)) {&lt;br /&gt;
			current = { value: input.value };&lt;br /&gt;
		} else {&lt;br /&gt;
			current.label = input.value;&lt;br /&gt;
			// exclude totally empty rows&lt;br /&gt;
			if (current.value || current.label) {&lt;br /&gt;
				result.push(current);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	$(button).data(&amp;quot;value&amp;quot;, result);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// reset/restore defaults&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.resetPrefLink = function twinkleconfigResetPrefLink(e) {&lt;br /&gt;
	var wantedpref = e.target.id.substring(21); // &amp;quot;twinkle-config-reset-&amp;quot; prefix is stripped&lt;br /&gt;
&lt;br /&gt;
	// search tactics&lt;br /&gt;
	$(Twinkle.config.sections).each(function(sectionkey, section) {&lt;br /&gt;
		if (section.hidden || (section.adminOnly &amp;amp;&amp;amp; !userIsInGroup(&amp;quot;sysop&amp;quot;))) {&lt;br /&gt;
			return true;  // continue: skip impossibilities&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var foundit = false;&lt;br /&gt;
&lt;br /&gt;
		$(section.preferences).each(function(prefkey, pref) {&lt;br /&gt;
			if (pref.name !== wantedpref) {&lt;br /&gt;
				return true;  // continue&lt;br /&gt;
			}&lt;br /&gt;
			Twinkle.config.resetPref(pref, section.inFriendlyConfig);&lt;br /&gt;
			foundit = true;&lt;br /&gt;
			return false;  // break&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		if (foundit) {&lt;br /&gt;
			return false;  // break&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	return false;  // stop link from scrolling page&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.resetPref = function twinkleconfigResetPref(pref, inFriendlyConfig) {&lt;br /&gt;
	switch (pref.type) {&lt;br /&gt;
&lt;br /&gt;
		case &amp;quot;boolean&amp;quot;:&lt;br /&gt;
			document.getElementById(pref.name).checked = (inFriendlyConfig ?&lt;br /&gt;
				Twinkle.defaultConfig.friendly[pref.name] : Twinkle.defaultConfig.twinkle[pref.name]);&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case &amp;quot;string&amp;quot;:&lt;br /&gt;
		case &amp;quot;integer&amp;quot;:&lt;br /&gt;
		case &amp;quot;enum&amp;quot;:&lt;br /&gt;
			document.getElementById(pref.name).value = (inFriendlyConfig ?&lt;br /&gt;
				Twinkle.defaultConfig.friendly[pref.name] : Twinkle.defaultConfig.twinkle[pref.name]);&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case &amp;quot;set&amp;quot;:&lt;br /&gt;
			$.each(pref.setValues, function(itemkey, itemvalue) {&lt;br /&gt;
				if (document.getElementById(pref.name + &amp;quot;_&amp;quot; + itemkey)) {&lt;br /&gt;
					document.getElementById(pref.name + &amp;quot;_&amp;quot; + itemkey).checked = ((inFriendlyConfig ?&lt;br /&gt;
						Twinkle.defaultConfig.friendly[pref.name] : Twinkle.defaultConfig.twinkle[pref.name]).indexOf(itemkey) !== -1);&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case &amp;quot;customList&amp;quot;:&lt;br /&gt;
			$(document.getElementById(pref.name)).data(&amp;quot;value&amp;quot;, (inFriendlyConfig ?&lt;br /&gt;
				Twinkle.defaultConfig.friendly[pref.name] : Twinkle.defaultConfig.twinkle[pref.name]));&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		default:&lt;br /&gt;
			alert(&amp;quot;twinkleconfig: unknown data type for preference &amp;quot; + pref.name);&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.resetAllPrefs = function twinkleconfigResetAllPrefs() {&lt;br /&gt;
	// no confirmation message - the user can just refresh/close the page to abort&lt;br /&gt;
	$(Twinkle.config.sections).each(function(sectionkey, section) {&lt;br /&gt;
		if (section.hidden || (section.adminOnly &amp;amp;&amp;amp; !userIsInGroup(&amp;quot;sysop&amp;quot;))) {&lt;br /&gt;
			return true;  // continue: skip impossibilities&lt;br /&gt;
		}&lt;br /&gt;
		$(section.preferences).each(function(prefkey, pref) {&lt;br /&gt;
			if (!pref.adminOnly || userIsInGroup(&amp;quot;sysop&amp;quot;)) {&lt;br /&gt;
				Twinkle.config.resetPref(pref, section.inFriendlyConfig);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		return true;&lt;br /&gt;
	});&lt;br /&gt;
	return false;  // stop link from scrolling page&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.save = function twinkleconfigSave(e) {&lt;br /&gt;
	Status.init( document.getElementById(&amp;quot;twinkle-config-content&amp;quot;) );&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Save&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var userjs = &amp;quot;User:&amp;quot; + mw.config.get(&amp;quot;wgUserName&amp;quot;) + &amp;quot;/twinkleoptions.js&amp;quot;;&lt;br /&gt;
	var wikipedia_page = new Wikipedia.page(userjs, &amp;quot;Saving preferences to &amp;quot; + userjs);&lt;br /&gt;
	wikipedia_page.setCallbackParameters(e.target);&lt;br /&gt;
	wikipedia_page.load(Twinkle.config.writePrefs);&lt;br /&gt;
&lt;br /&gt;
	return false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// The JSON stringify method in the following code was excerpted from&lt;br /&gt;
// http://www.JSON.org/json2.js&lt;br /&gt;
// version of 2011-02-23&lt;br /&gt;
&lt;br /&gt;
// Douglas Crockford, the code&#039;s author, has released it into the Public Domain.&lt;br /&gt;
// See http://www.JSON.org/js.html&lt;br /&gt;
&lt;br /&gt;
var JSON;&lt;br /&gt;
if (!JSON) {&lt;br /&gt;
	JSON = {};&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
	var escapable = /[\\\&amp;quot;\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,&lt;br /&gt;
		gap,&lt;br /&gt;
		indent = &#039;  &#039;,  // hardcoded indent&lt;br /&gt;
		meta = { &#039;\b&#039;: &#039;\\b&#039;, &#039;\t&#039;: &#039;\\t&#039;, &#039;\n&#039;: &#039;\\n&#039;, &#039;\f&#039;: &#039;\\f&#039;, &#039;\r&#039;: &#039;\\r&#039;, &#039;&amp;quot;&#039; : &#039;\\&amp;quot;&#039;, &#039;\\&#039;: &#039;\\\\&#039; };&lt;br /&gt;
&lt;br /&gt;
	function quote(string) {&lt;br /&gt;
		escapable.lastIndex = 0;&lt;br /&gt;
		return escapable.test(string) ? &#039;&amp;quot;&#039; + string.replace(escapable, function (a) {&lt;br /&gt;
			var c = meta[a];&lt;br /&gt;
			return typeof c === &#039;string&#039; ? c :	&#039;\\u&#039; + (&#039;0000&#039; + a.charCodeAt(0).toString(16)).slice(-4);&lt;br /&gt;
		}) + &#039;&amp;quot;&#039; : &#039;&amp;quot;&#039; + string + &#039;&amp;quot;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function str(key, holder) {&lt;br /&gt;
		var i, k, v, length, mind = gap, partial, value = holder[key];&lt;br /&gt;
&lt;br /&gt;
		if (value &amp;amp;&amp;amp; typeof value === &#039;object&#039; &amp;amp;&amp;amp; typeof value.toJSON === &#039;function&#039;) {&lt;br /&gt;
			value = value.toJSON(key);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		switch (typeof value) {&lt;br /&gt;
		case &#039;string&#039;:&lt;br /&gt;
			return quote(value);&lt;br /&gt;
		case &#039;number&#039;:&lt;br /&gt;
			return isFinite(value) ? String(value) : &#039;null&#039;;&lt;br /&gt;
		case &#039;boolean&#039;:&lt;br /&gt;
		case &#039;null&#039;:&lt;br /&gt;
			return String(value);&lt;br /&gt;
		case &#039;object&#039;:&lt;br /&gt;
			if (!value) {&lt;br /&gt;
				return &#039;null&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			gap += indent;&lt;br /&gt;
			partial = [];&lt;br /&gt;
			if (Object.prototype.toString.apply(value) === &#039;[object Array]&#039;) {&lt;br /&gt;
				length = value.length;&lt;br /&gt;
				for (i = 0; i &amp;lt; length; i += 1) {&lt;br /&gt;
					partial[i] = str(i, value) || &#039;null&#039;;&lt;br /&gt;
				}&lt;br /&gt;
				v = partial.length === 0 ? &#039;[]&#039; : gap ?&lt;br /&gt;
					&#039;[\n&#039; + gap + partial.join(&#039;,\n&#039; + gap) + &#039;\n&#039; + mind + &#039;]&#039; :&lt;br /&gt;
					&#039;[&#039; + partial.join(&#039;,&#039;) + &#039;]&#039;;&lt;br /&gt;
				gap = mind;&lt;br /&gt;
				return v;&lt;br /&gt;
			}&lt;br /&gt;
			for (k in value) {&lt;br /&gt;
				if (Object.prototype.hasOwnProperty.call(value, k)) {&lt;br /&gt;
					v = str(k, value);&lt;br /&gt;
					if (v) {&lt;br /&gt;
						partial.push(quote(k) + (gap ? &#039;: &#039; : &#039;:&#039;) + v);&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			v = partial.length === 0 ? &#039;{}&#039; : gap ?&lt;br /&gt;
				&#039;{\n&#039; + gap + partial.join(&#039;,\n&#039; + gap) + &#039;\n&#039; + mind + &#039;}&#039; :&lt;br /&gt;
				&#039;{&#039; + partial.join(&#039;,&#039;) + &#039;}&#039;;&lt;br /&gt;
			gap = mind;&lt;br /&gt;
			return v;&lt;br /&gt;
		default:&lt;br /&gt;
			throw new Error( &amp;quot;JSON.stringify: unknown data type&amp;quot; );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (typeof JSON.stringify !== &#039;function&#039;) {&lt;br /&gt;
		JSON.stringify = function (value, ignoredParam1, ignoredParam2) {&lt;br /&gt;
			ignoredParam1 = ignoredParam2;  // boredom&lt;br /&gt;
			gap = &#039;&#039;;&lt;br /&gt;
			return str(&#039;&#039;, {&#039;&#039;: value});&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.writePrefs = function twinkleconfigWritePrefs(pageobj) {&lt;br /&gt;
	var form = pageobj.getCallbackParameters();&lt;br /&gt;
	var statelem = pageobj.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
	// this is the object which gets serialized into JSON&lt;br /&gt;
	var newConfig = {&lt;br /&gt;
		twinkle: {},&lt;br /&gt;
		friendly: {}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// keeping track of all preferences that we encounter&lt;br /&gt;
	// any others that are set in the user&#039;s current config are kept&lt;br /&gt;
	// this way, preferences that this script doesn&#039;t know about are not lost&lt;br /&gt;
	// (it does mean obsolete prefs will never go away, but... ah well...)&lt;br /&gt;
	var foundTwinklePrefs = [], foundFriendlyPrefs = [];&lt;br /&gt;
&lt;br /&gt;
	// a comparison function is needed later on&lt;br /&gt;
	// it is just enough for our purposes (i.e. comparing strings, numbers, booleans,&lt;br /&gt;
	// arrays of strings, and arrays of { value, label })&lt;br /&gt;
	// and it is not very robust: e.g. compare([2], [&amp;quot;2&amp;quot;]) === true, and&lt;br /&gt;
	// compare({}, {}) === false, but it&#039;s good enough for our purposes here&lt;br /&gt;
	var compare = function(a, b) {&lt;br /&gt;
		if (Object.prototype.toString.apply(a) === &amp;quot;[object Array]&amp;quot;) {&lt;br /&gt;
			if (a.length !== b.length) {&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
			var asort = a.sort(), bsort = b.sort();&lt;br /&gt;
			for (var i = 0; asort[i]; i++) {&lt;br /&gt;
				// comparison of the two properties of custom lists&lt;br /&gt;
				if ((typeof asort[i] === &amp;quot;object&amp;quot;) &amp;amp;&amp;amp; (asort[i].label !== bsort[i].label ||&lt;br /&gt;
					asort[i].value !== bsort[i].value)) {&lt;br /&gt;
					return false;&lt;br /&gt;
				} else if (asort[i].toString() !== bsort[i].toString()) { &lt;br /&gt;
					return false;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return true;&lt;br /&gt;
		} else {&lt;br /&gt;
			return a === b;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	$(Twinkle.config.sections).each(function(sectionkey, section) {&lt;br /&gt;
		if (section.adminOnly &amp;amp;&amp;amp; !userIsInGroup(&amp;quot;sysop&amp;quot;)) {&lt;br /&gt;
			return;  // i.e. &amp;quot;continue&amp;quot; in this context&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// reach each of the preferences from the form&lt;br /&gt;
		$(section.preferences).each(function(prefkey, pref) {&lt;br /&gt;
			var userValue;  // = undefined&lt;br /&gt;
&lt;br /&gt;
			// only read form values for those prefs that have them&lt;br /&gt;
			if (!section.hidden &amp;amp;&amp;amp; (!pref.adminOnly || userIsInGroup(&amp;quot;sysop&amp;quot;))) {&lt;br /&gt;
				switch (pref.type) {&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;boolean&amp;quot;:  // read from the checkbox&lt;br /&gt;
						userValue = form[pref.name].checked;&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;string&amp;quot;:  // read from the input box or combo box&lt;br /&gt;
					case &amp;quot;enum&amp;quot;:&lt;br /&gt;
						userValue = form[pref.name].value;&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;integer&amp;quot;:  // read from the input box&lt;br /&gt;
						userValue = parseInt(form[pref.name].value, 10);&lt;br /&gt;
						if (isNaN(userValue)) {&lt;br /&gt;
							Status.warn(&amp;quot;Saving&amp;quot;, &amp;quot;The value you specified for &amp;quot; + pref.name + &amp;quot; (&amp;quot; + pref.value + &amp;quot;) was invalid.  The save will continue, but the invalid data value will be skipped.&amp;quot;);&lt;br /&gt;
							userValue = null;&lt;br /&gt;
						}&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;set&amp;quot;:  // read from the set of check boxes&lt;br /&gt;
						userValue = [];&lt;br /&gt;
						if (pref.setDisplayOrder) {&lt;br /&gt;
							// read only those keys specified in the display order&lt;br /&gt;
							$.each(pref.setDisplayOrder, function(itemkey, item) {&lt;br /&gt;
								if (form[pref.name + &amp;quot;_&amp;quot; + item].checked) {&lt;br /&gt;
									userValue.push(item);&lt;br /&gt;
								}&lt;br /&gt;
							});&lt;br /&gt;
						} else {&lt;br /&gt;
							// read all the keys in the list of values&lt;br /&gt;
							$.each(pref.setValues, function(itemkey, itemvalue) {&lt;br /&gt;
								if (form[pref.name + &amp;quot;_&amp;quot; + itemkey].checked) {&lt;br /&gt;
									userValue.push(itemkey);&lt;br /&gt;
								}&lt;br /&gt;
							});&lt;br /&gt;
						}&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					case &amp;quot;customList&amp;quot;:  // read from the jQuery data stored on the button object&lt;br /&gt;
						userValue = $(form[pref.name]).data(&amp;quot;value&amp;quot;);&lt;br /&gt;
						break;&lt;br /&gt;
&lt;br /&gt;
					default:&lt;br /&gt;
						alert(&amp;quot;twinkleconfig: unknown data type for preference &amp;quot; + pref.name);&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// only save those preferences that are *different* from the default&lt;br /&gt;
			if (section.inFriendlyConfig) {&lt;br /&gt;
				if (typeof userValue !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !compare(userValue, Twinkle.defaultConfig.friendly[pref.name])) {&lt;br /&gt;
					newConfig.friendly[pref.name] = userValue;&lt;br /&gt;
				}&lt;br /&gt;
				foundFriendlyPrefs.push(pref.name);&lt;br /&gt;
			} else {&lt;br /&gt;
				if (typeof userValue !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !compare(userValue, Twinkle.defaultConfig.twinkle[pref.name])) {&lt;br /&gt;
					newConfig.twinkle[pref.name] = userValue;&lt;br /&gt;
				}&lt;br /&gt;
				foundTwinklePrefs.push(pref.name);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	if (Twinkle.prefs) {&lt;br /&gt;
		$.each(Twinkle.prefs.twinkle, function(tkey, tvalue) {&lt;br /&gt;
			if (foundTwinklePrefs.indexOf(tkey) === -1) {&lt;br /&gt;
				newConfig.twinkle[tkey] = tvalue;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		$.each(Twinkle.prefs.friendly, function(fkey, fvalue) {&lt;br /&gt;
			if (foundFriendlyPrefs.indexOf(fkey) === -1) {&lt;br /&gt;
				newConfig.friendly[fkey] = fvalue;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var text =&lt;br /&gt;
		&amp;quot;// twinkleoptions.js: personal Twinkle preferences file\n&amp;quot; +&lt;br /&gt;
		&amp;quot;//\n&amp;quot; +&lt;br /&gt;
		&amp;quot;// NOTE: The easiest way to change your Twinkle preferences is by using the\n&amp;quot; +&lt;br /&gt;
		&amp;quot;// Twinkle preferences panel, at [[&amp;quot; + mw.config.get(&amp;quot;wgPageName&amp;quot;) + &amp;quot;]].\n&amp;quot; +&lt;br /&gt;
		&amp;quot;//\n&amp;quot; +&lt;br /&gt;
		&amp;quot;// This file is AUTOMATICALLY GENERATED.  Any changes you make (aside from\n&amp;quot; +&lt;br /&gt;
		&amp;quot;// changing the configuration parameters in a valid-JavaScript way) will be\n&amp;quot; +&lt;br /&gt;
		&amp;quot;// overwritten the next time you click \&amp;quot;save\&amp;quot; in the Twinkle preferences\n&amp;quot; +&lt;br /&gt;
		&amp;quot;// panel.  If modifying this file, make sure to use correct JavaScript.\n&amp;quot; +&lt;br /&gt;
		&amp;quot;\n&amp;quot; +&lt;br /&gt;
		&amp;quot;window.Twinkle.prefs = &amp;quot;;&lt;br /&gt;
	text += JSON.stringify(newConfig, null, 2);&lt;br /&gt;
	text +=&lt;br /&gt;
		&amp;quot;;\n&amp;quot; +&lt;br /&gt;
		&amp;quot;\n&amp;quot; +&lt;br /&gt;
		&amp;quot;// End of twinkleoptions.js\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	pageobj.setPageText(text);&lt;br /&gt;
	pageobj.setEditSummary(&amp;quot;Saving Twinkle preferences: automatic edit from [[&amp;quot; + mw.config.get(&amp;quot;wgPageName&amp;quot;) + &amp;quot;]] ([[MP:TW|TW]])&amp;quot;);&lt;br /&gt;
	pageobj.setCreateOption(&amp;quot;recreate&amp;quot;);&lt;br /&gt;
	pageobj.save(Twinkle.config.saveSuccess);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.config.saveSuccess = function twinkleconfigSaveSuccess(pageobj) {&lt;br /&gt;
	pageobj.getStatusElement().info(&amp;quot;successful&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	var noticebox = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
	noticebox.className = &amp;quot;successbox&amp;quot;;&lt;br /&gt;
	noticebox.style.fontSize = &amp;quot;100%&amp;quot;;&lt;br /&gt;
	noticebox.style.marginTop = &amp;quot;2em&amp;quot;;&lt;br /&gt;
	noticebox.innerHTML = &amp;quot;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Your Twinkle preferences have been saved.&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;To see the changes, you will need to &amp;lt;a href=\&amp;quot;&amp;quot; + mw.util.getUrl(&amp;quot;MP:BYPASS&amp;quot;) + &amp;quot;\&amp;quot; title=\&amp;quot;MP:BYPASS\&amp;quot;&amp;gt;&amp;lt;b&amp;gt;bypass your browser cache&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
	Status.root.appendChild(noticebox);&lt;br /&gt;
	var noticeclear = document.createElement(&amp;quot;br&amp;quot;);&lt;br /&gt;
	noticeclear.style.clear = &amp;quot;both&amp;quot;;&lt;br /&gt;
	Status.root.appendChild(noticeclear);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
****************************************&lt;br /&gt;
*** twinkledelimages.js: Batch deletion of images (sysops only)&lt;br /&gt;
****************************************&lt;br /&gt;
* Mode of invocation:     Tab (&amp;quot;Deli-batch&amp;quot;)&lt;br /&gt;
* Active on:              Existing non-special pages&lt;br /&gt;
* Config directives in:   TwinkleConfig&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
Twinkle.delimages = function twinkledeli() {&lt;br /&gt;
	if( mw.config.get( &#039;wgNamespaceNumber&#039; ) &amp;lt; 0 || !mw.config.get( &#039;wgCurRevisionId&#039; ) ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if( userIsInGroup( &#039;sysop&#039; ) ) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Deli-batch&amp;quot;, &amp;quot;tw-deli&amp;quot;, &amp;quot;Delete files found on page&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.delimages.callback);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.delimages.unlinkCache = {};&lt;br /&gt;
Twinkle.delimages.callback = function twinkledeliCallback() {&lt;br /&gt;
	var Window = new SimpleWindow( 800, 400 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Batch file deletion&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#delimages&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.delimages.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
		type: &#039;checkbox&#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{&lt;br /&gt;
				label: &#039;Delete files&#039;,&lt;br /&gt;
				name: &#039;delete_image&#039;,&lt;br /&gt;
				value: &#039;delete&#039;,&lt;br /&gt;
				checked: true&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: &#039;Unlink uses of this file&#039;,&lt;br /&gt;
				name: &#039;unlink_image&#039;,&lt;br /&gt;
				value: &#039;unlink&#039;,&lt;br /&gt;
				checked: true&lt;br /&gt;
			}&lt;br /&gt;
		]&lt;br /&gt;
	} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
		type: &#039;textarea&#039;,&lt;br /&gt;
		name: &#039;reason&#039;,&lt;br /&gt;
		label: &#039;Reason: &#039;&lt;br /&gt;
	} );&lt;br /&gt;
	var query;&lt;br /&gt;
	if( mw.config.get( &#039;wgNamespaceNumber&#039; ) === Namespace.CATEGORY ) {&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;generator&#039;: &#039;categorymembers&#039;,&lt;br /&gt;
			&#039;gcmtitle&#039;: mw.config.get( &#039;wgPageName&#039; ),&lt;br /&gt;
			&#039;gcmnamespace&#039;: Namespace.IMAGE,&lt;br /&gt;
			&#039;gcmlimit&#039; : Twinkle.getPref(&#039;deliMax&#039;), &lt;br /&gt;
			&#039;prop&#039;: [ &#039;imageinfo&#039;, &#039;categories&#039;, &#039;revisions&#039; ],&lt;br /&gt;
			&#039;grvlimit&#039;: 1,&lt;br /&gt;
			&#039;grvprop&#039;: [ &#039;user&#039; ]&lt;br /&gt;
		};&lt;br /&gt;
	} else {&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;generator&#039;: &#039;images&#039;,&lt;br /&gt;
			&#039;titles&#039;: mw.config.get( &#039;wgPageName&#039; ),&lt;br /&gt;
			&#039;prop&#039;: [ &#039;imageinfo&#039;, &#039;categories&#039;, &#039;revisions&#039; ],&lt;br /&gt;
			&#039;gimlimit&#039;: &#039;max&#039;&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	var wikipedia_api = new Wikipedia.api( &#039;Grabbing files&#039;, query, function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var images = $(xmlDoc).find(&#039;page[imagerepository=&amp;quot;local&amp;quot;]&#039;);&lt;br /&gt;
		var list = [];&lt;br /&gt;
&lt;br /&gt;
		$.each(images, function() {&lt;br /&gt;
			var $self = $(this);&lt;br /&gt;
			var image = $self.attr(&#039;title&#039;);&lt;br /&gt;
			var user = $self.find(&#039;imageinfo ii&#039;).attr(&#039;user&#039;);&lt;br /&gt;
			var last_edit = $self.find(&#039;revisions rev&#039;).attr(&#039;user&#039;);&lt;br /&gt;
			var disputed = $self.find(&#039;categories cl[title=&amp;quot;Category:Contested candidates for speedy deletion&amp;quot;]&#039;).length &amp;gt; 0;&lt;br /&gt;
			list.push( {&lt;br /&gt;
				&#039;label&#039;: image + &#039; - author: &#039; + user + &#039;, last edit from: &#039; + last_edit + ( disputed ? &#039; DISPUTED&#039; : &#039;&#039; ),&lt;br /&gt;
				&#039;value&#039;: image,&lt;br /&gt;
				&#039;checked&#039;: !disputed&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		self.params.form.append( {&lt;br /&gt;
			type: &#039;checkbox&#039;,&lt;br /&gt;
			name: &#039;images&#039;,&lt;br /&gt;
			list: list&lt;br /&gt;
		}&lt;br /&gt;
	);&lt;br /&gt;
	self.params.form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
	var result = self.params.form.render();&lt;br /&gt;
	self.params.Window.setContent( result );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}  );&lt;br /&gt;
&lt;br /&gt;
wikipedia_api.params = { form:form, Window:Window };&lt;br /&gt;
wikipedia_api.post();&lt;br /&gt;
var root = document.createElement( &#039;div&#039; );&lt;br /&gt;
Status.init( root );&lt;br /&gt;
Window.setContent( root );&lt;br /&gt;
Window.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.delimages.currentDeleteCounter = 0;&lt;br /&gt;
Twinkle.delimages.currentUnlinkCounter = 0;&lt;br /&gt;
Twinkle.delimages.currentdeletor = 0;&lt;br /&gt;
Twinkle.delimages.callback.evaluate = function twinkledeliCallbackEvaluate(event) {&lt;br /&gt;
	mw.config.set(&#039;wgPageName&#039;, mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;));  // for queen/king/whatever and country!&lt;br /&gt;
	var images = event.target.getChecked( &#039;images&#039; );&lt;br /&gt;
	var reason = event.target.reason.value;&lt;br /&gt;
	var delete_image = event.target.delete_image.checked;&lt;br /&gt;
	var unlink_image = event.target.unlink_image.checked;&lt;br /&gt;
	if( ! reason ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( event.target );&lt;br /&gt;
&lt;br /&gt;
	function toCall( work ) {&lt;br /&gt;
		if( work.length === 0 &amp;amp;&amp;amp; Twinkle.delimages.currentDeleteCounter &amp;lt;= 0 &amp;amp;&amp;amp; Twinkle.delimages.currentUnlinkCounter &amp;lt;= 0 ) {&lt;br /&gt;
			window.clearInterval( Twinkle.delimages.currentdeletor );&lt;br /&gt;
			Wikipedia.removeCheckpoint();&lt;br /&gt;
			return;&lt;br /&gt;
		} else if( work.length !== 0 &amp;amp;&amp;amp; Twinkle.delimages.currentDeleteCounter &amp;lt;= Twinkle.getPref(&#039;batchDeleteMinCutOff&#039;) &amp;amp;&amp;amp; Twinkle.delimages.currentUnlinkCounter &amp;lt;= Twinkle.getPref(&#039;batchDeleteMinCutOff&#039;) ) {&lt;br /&gt;
			Twinkle.delimages.unlinkCache = []; // Clear the cache&lt;br /&gt;
			var images = work.shift();&lt;br /&gt;
			Twinkle.delimages.currentDeleteCounter = images.length;&lt;br /&gt;
			Twinkle.delimages.currentUnlinkCounter = images.length;&lt;br /&gt;
			var i;&lt;br /&gt;
			for( i = 0; i &amp;lt; images.length; ++i ) {&lt;br /&gt;
				var image = images[i];&lt;br /&gt;
				var query = {&lt;br /&gt;
					&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
					&#039;titles&#039;: image&lt;br /&gt;
				};&lt;br /&gt;
				var wikipedia_api = new Wikipedia.api( &#039;Checking if file &#039; + image + &#039; exists&#039;, query, Twinkle.delimages.callbacks.main );&lt;br /&gt;
				wikipedia_api.params = { image:image, reason:reason, unlink_image:unlink_image, delete_image:delete_image };&lt;br /&gt;
				wikipedia_api.post();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	var work = images.chunk( Twinkle.getPref(&#039;deliChunks&#039;) );&lt;br /&gt;
	Wikipedia.addCheckpoint();&lt;br /&gt;
	Twinkle.delimages.currentdeletor = window.setInterval( toCall, 1000, work );&lt;br /&gt;
};&lt;br /&gt;
Twinkle.delimages.callbacks = {&lt;br /&gt;
	main: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var $data = $(xmlDoc);&lt;br /&gt;
&lt;br /&gt;
		var normal = $data.find(&#039;normalized n&#039;).attr(&#039;to&#039;);&lt;br /&gt;
&lt;br /&gt;
		if( normal ) {&lt;br /&gt;
			self.params.image = normal;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var exists = $data.find(&#039;pages page[title=&amp;quot;&#039;+self.params.image.replace( /&amp;quot;/g, &#039;\\&amp;quot;&#039;)+&#039;&amp;quot;]:not([missing])&#039;).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
		if( ! exists ) {&lt;br /&gt;
			self.statelem.error( &amp;quot;It seems that the page doesn&#039;t exists, perhaps it has already been deleted&amp;quot; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		if( self.params.unlink_image ) {&lt;br /&gt;
			var query = {&lt;br /&gt;
				&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
				&#039;list&#039;: &#039;imageusage&#039;,&lt;br /&gt;
				&#039;iutitle&#039;: self.params.image,&lt;br /&gt;
				&#039;iulimit&#039;: userIsInGroup( &#039;sysop&#039; ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			};&lt;br /&gt;
			var wikipedia_api = new Wikipedia.api( &#039;Grabbing file links&#039;, query, Twinkle.delimages.callbacks.unlinkImageInstancesMain );&lt;br /&gt;
			wikipedia_api.params = self.params;&lt;br /&gt;
			wikipedia_api.post();&lt;br /&gt;
		}&lt;br /&gt;
		if( self.params.delete_image ) {&lt;br /&gt;
&lt;br /&gt;
			var imagepage = new Wikipedia.page( self.params.image, &#039;Deleting image&#039;);&lt;br /&gt;
			imagepage.setEditSummary( &amp;quot;Deleted because \&amp;quot;&amp;quot; + self.params.reason + &amp;quot;\&amp;quot;.&amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
			imagepage.deletePage();&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	unlinkImageInstancesMain: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var instances = [];&lt;br /&gt;
		$(xmlDoc).find(&#039;imageusage iu&#039;).each(function(){&lt;br /&gt;
			instances.push($(this).attr(&#039;title&#039;));&lt;br /&gt;
		});&lt;br /&gt;
		if( instances.length === 0 ) {&lt;br /&gt;
			--twinklebatchdelete.currentUnlinkCounter;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$.each( instances, function(k,title) {&lt;br /&gt;
			page = new Wikipedia.page(title, &amp;quot;Unlinking instances on &amp;quot; + title);&lt;br /&gt;
			page.setFollowRedirect(true);&lt;br /&gt;
			page.setCallbackParameters({&#039;image&#039;: self.params.image, &#039;reason&#039;: self.params.reason});&lt;br /&gt;
			page.load(Twinkle.delimages.callbacks.unlinkImageInstances);&lt;br /&gt;
&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
	unlinkImageInstances: function( self ) {&lt;br /&gt;
		var params = self.getCallbackParameters();&lt;br /&gt;
		var statelem = self.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
		var image = params.image.replace( /^(?:Image|File):/, &#039;&#039; );&lt;br /&gt;
		var old_text = self.getPageText();&lt;br /&gt;
		var wikiPage = new Mediawiki.Page( old_text );&lt;br /&gt;
		wikiPage.commentOutImage( image , &#039;Commented out because image was deleted&#039; );&lt;br /&gt;
		var text = wikiPage.getText();&lt;br /&gt;
&lt;br /&gt;
		if( text === old_text ) {&lt;br /&gt;
			statelem.error( &#039;failed to unlink image &#039; + image +&#039; from &#039; + self.getPageName() );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		self.setPageText(text);&lt;br /&gt;
		self.setEditSummary(&#039;Removing instance of file &#039; + image + &amp;quot; that has been deleted because \&amp;quot;&amp;quot; + params.reason + &amp;quot;\&amp;quot;)&amp;quot; + &amp;quot;; &amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
		self.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
		self.save();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
****************************************&lt;br /&gt;
*** twinkledeprod.js: Batch deletion of expired PRODs (sysops only)&lt;br /&gt;
****************************************&lt;br /&gt;
* Mode of invocation:     Tab (&amp;quot;Deprod&amp;quot;)&lt;br /&gt;
* Active on:              Categories whose name starts with &amp;quot;Category:Proposed deletion as of&amp;quot;&lt;br /&gt;
* Config directives in:   TwinkleConfig&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
;(function(){&lt;br /&gt;
	Twinkle.deprod = function() {&lt;br /&gt;
		if( mw.config.get( &#039;wgNamespaceNumber&#039; ) !== Namespace.CATEGORY || ! userIsInGroup( &#039;sysop&#039; ) || !((/^Category:Proposed_deletion_as_of/).test(mw.config.get( &#039;wgPageName&#039; ))) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		$(twAddPortletLink( &amp;quot;#&amp;quot;, &amp;quot;Deprod&amp;quot;, &amp;quot;tw-deprod&amp;quot;, &amp;quot;Delete prod pages found in this category&amp;quot;, &amp;quot;&amp;quot;)).click(callback);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var unlinkCache = {},&lt;br /&gt;
	concerns = {},&lt;br /&gt;
	currentDeleteCounter = 0,&lt;br /&gt;
	currentUnlinkCounter = 0,&lt;br /&gt;
	currentDeletor = null,&lt;br /&gt;
&lt;br /&gt;
	callback = function() {&lt;br /&gt;
		var Window = new SimpleWindow( 800, 400 );&lt;br /&gt;
		Window.setTitle( &amp;quot;PROD cleaning&amp;quot; );&lt;br /&gt;
		Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
		Window.addFooterLink( &amp;quot;Proposed deletion&amp;quot;, &amp;quot;MP:PROD&amp;quot; );&lt;br /&gt;
		Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#deprod&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
		var form = new QuickForm( callback_commit );&lt;br /&gt;
&lt;br /&gt;
		var query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;generator&#039;: &#039;categorymembers&#039;,&lt;br /&gt;
			&#039;gcmtitle&#039;: mw.config.get( &#039;wgPageName&#039; ),&lt;br /&gt;
			&#039;gcmlimit&#039; : 5000, // the max for sysops&lt;br /&gt;
			&#039;prop&#039;: [ &#039;categories&#039;, &#039;revisions&#039; ],&lt;br /&gt;
			&#039;rvprop&#039;: [ &#039;content&#039; ]&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		var wikipedia_api = new Wikipedia.api( &#039;Grabbing pages&#039;, query, function( self ) {&lt;br /&gt;
			var $doc = $(self.responseXML);&lt;br /&gt;
			var $pages = $doc.find(&amp;quot;page[ns!=\&amp;quot;&amp;quot;+Namespace.IMAGE+&amp;quot;\&amp;quot;]&amp;quot;);&lt;br /&gt;
			var list = [];&lt;br /&gt;
			var re = new RegExp(&amp;quot;{{Proposed deletion&amp;quot;);&lt;br /&gt;
				$pages.each(function() {&lt;br /&gt;
					var $self = $(this);&lt;br /&gt;
					var page = $self.attr(&#039;title&#039;);&lt;br /&gt;
					var content = $self.find(&#039;revisions rev&#039;).text();&lt;br /&gt;
					var concern = &#039;&#039;;&lt;br /&gt;
					var res = re.exec(content);&lt;br /&gt;
					if( res ) {&lt;br /&gt;
						var parsed = Mediawiki.Template.parse( content, res.index );&lt;br /&gt;
						concern = parsed.parameters.concern || &#039;&#039;;&lt;br /&gt;
					}&lt;br /&gt;
					list.push( {label:page + &#039; (&#039; + concern + &#039;)&#039; , value:page, checked:concern !== &#039;&#039; });&lt;br /&gt;
					concerns[page] = concern;&lt;br /&gt;
&lt;br /&gt;
				});&lt;br /&gt;
				self.params.form.append({&lt;br /&gt;
					&#039;type&#039;: &#039;checkbox&#039;,&lt;br /&gt;
					&#039;name&#039;: &#039;pages&#039;,&lt;br /&gt;
					&#039;list&#039;: list&lt;br /&gt;
				});&lt;br /&gt;
				self.params.form.append({&lt;br /&gt;
					&#039;type&#039;: &#039;submit&#039;&lt;br /&gt;
				});&lt;br /&gt;
				self.params.Window.setContent(  self.params.form.render() );&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			wikipedia_api.params = { form:form, Window:Window };&lt;br /&gt;
			wikipedia_api.post();&lt;br /&gt;
			var root = document.createElement( &#039;div&#039; );&lt;br /&gt;
			SimpleWindow.setButtonsEnabled( true );&lt;br /&gt;
&lt;br /&gt;
			Status.init( root );&lt;br /&gt;
			Window.setContent( root );&lt;br /&gt;
			Window.display();&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	callback_commit = function(event) {&lt;br /&gt;
		var pages = event.target.getChecked( &#039;pages&#039; );&lt;br /&gt;
		Status.init( event.target );&lt;br /&gt;
		function toCall( work ) {&lt;br /&gt;
			if( work.length === 0 ) {&lt;br /&gt;
				Status.info( &#039;work done&#039; );&lt;br /&gt;
				window.clearInterval( currentDeletor );&lt;br /&gt;
				Wikipedia.removeCheckpoint();&lt;br /&gt;
				return;&lt;br /&gt;
			} else if( currentDeleteCounter &amp;lt;= 0 || currentUnlinkCounter &amp;lt;= 0 ) {&lt;br /&gt;
				unlinkCache = []; // Clear the cache&lt;br /&gt;
				var pages = work.pop(), i;&lt;br /&gt;
				for( i = 0; i &amp;lt; pages.length; ++i ) {&lt;br /&gt;
					var page = pages[i];&lt;br /&gt;
					var query = {&lt;br /&gt;
						&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
						&#039;prop&#039;: &#039;revisions&#039;,&lt;br /&gt;
						&#039;rvprop&#039;: [ &#039;content&#039; ],&lt;br /&gt;
						&#039;rvlimit&#039;: 1,&lt;br /&gt;
						&#039;titles&#039;: page&lt;br /&gt;
					};&lt;br /&gt;
					var wikipedia_api = new Wikipedia.api( &#039;Checking if page &#039; + page + &#039; exists&#039;, query, callback_check );&lt;br /&gt;
					wikipedia_api.params = { page:page, reason: concerns[page] };&lt;br /&gt;
					wikipedia_api.post();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		var work = pages.chunk( Twinkle.getPref(&#039;proddeleteChunks&#039;) );&lt;br /&gt;
		Wikipedia.addCheckpoint();&lt;br /&gt;
		currentDeletor = window.setInterval( toCall, 1000, work );&lt;br /&gt;
	},&lt;br /&gt;
	callback_check = function( self ) {&lt;br /&gt;
		var $doc  = $(self.responseXML);&lt;br /&gt;
		var normal = $doc.find(&#039;normalized n&#039;).attr(&#039;to&#039;);&lt;br /&gt;
		if( normal ) {&lt;br /&gt;
			self.params.page = normal;&lt;br /&gt;
		}&lt;br /&gt;
		var exists = $doc.find(&#039;pages page:not([missing])&#039;).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
		if( ! exists ) {&lt;br /&gt;
			self.statelem.error( &amp;quot;It seems that the page doesn&#039;t exists, perhaps it has already been deleted&amp;quot; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;list&#039;: &#039;backlinks&#039;,&lt;br /&gt;
			&#039;blfilterredir&#039;: &#039;redirects&#039;,&lt;br /&gt;
			&#039;bltitle&#039;: self.params.page,&lt;br /&gt;
			&#039;bllimit&#039;: userIsInGroup( &#039;sysop&#039; ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
		};&lt;br /&gt;
		var wikipedia_api = new Wikipedia.api( &#039;Grabbing redirects&#039;, query, callback_deleteRedirects );&lt;br /&gt;
		wikipedia_api.params = self.params;&lt;br /&gt;
		wikipedia_api.post();&lt;br /&gt;
&lt;br /&gt;
		var page = new Wikipedia.page(&#039;Talk:&#039; + self.params.page, &amp;quot;Deleting talk page&amp;quot;);&lt;br /&gt;
		page.setEditSummary(&amp;quot;Deleted talk page of a page because expired [[MP:PROD]].&amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
		page.deletePage();&lt;br /&gt;
&lt;br /&gt;
		page = new Wikipedia.page(self.params.page, &amp;quot;Deleting article&amp;quot;);&lt;br /&gt;
		page.setEditSummary(&amp;quot;DDeleted because expired [[MP:PROD]]; Reason given: &amp;quot; + self.params.reason + &amp;quot;.&amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
		page.deletePage();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
	callback_deleteRedirects = function( self ) {&lt;br /&gt;
		$doc = $(self.responseXML);&lt;br /&gt;
		$doc.find(&amp;quot;backlinks bl&amp;quot;).each(function(){&lt;br /&gt;
			var title = $(this).attr(&#039;title&#039;);&lt;br /&gt;
			var page = new Wikipedia.page(title, &amp;quot;Deleting redirecting page &amp;quot; + title);&lt;br /&gt;
			page.setEditSummary(&amp;quot;Speedy deleted per ([[MP:CSD#R1|CSD R1]]), Redirect to deleted page \&amp;quot;&amp;quot; + self.params.page + &amp;quot;\&amp;quot;.&amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
			page.deletePage();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklediff.js: Diff module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab on non-diff pages (&amp;quot;Last&amp;quot;); tabs on diff pages (&amp;quot;Since&amp;quot;, &amp;quot;Since mine&amp;quot;, &amp;quot;Current&amp;quot;)&lt;br /&gt;
 * Active on:              Existing non-special pages&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.diff = function twinklediff() { &lt;br /&gt;
	if( mw.config.get(&#039;wgNamespaceNumber&#039;) &amp;lt; 0 || !mw.config.get(&#039;wgArticleId&#039;) ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var query = {&lt;br /&gt;
		&#039;title&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
		&#039;diff&#039;: &#039;cur&#039;,&lt;br /&gt;
		&#039;oldid&#039;: &#039;prev&#039;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	twAddPortletLink( mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScriptPath&#039;) + &#039;/index.php?&#039; + QueryString.create( query ), &#039;Last&#039;, &#039;tw-lastdiff&#039;, &#039;Show most recent diff&#039; );&lt;br /&gt;
&lt;br /&gt;
	// Show additional tabs only on diff pages&lt;br /&gt;
	if (QueryString.exists(&#039;diff&#039;)) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &#039;Since&#039;, &#039;tw-since&#039;, &#039;Show difference between last diff and the revision made by previous user&#039; )).click(function(){Twinkle.diff.evaluate(false);});&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &#039;Since mine&#039;, &#039;tw-sincemine&#039;, &#039;Show difference between last diff and my last revision&#039; )).click(function(){Twinkle.diff.evaluate(true);});&lt;br /&gt;
&lt;br /&gt;
		var oldid = /oldid=(.+)/.exec($(&#039;div#mw-diff-ntitle1 strong a&#039;).first().attr(&amp;quot;href&amp;quot;))[1];&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;title&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
			&#039;diff&#039;: &#039;cur&#039;,&lt;br /&gt;
			&#039;oldid&#039; : oldid&lt;br /&gt;
		};&lt;br /&gt;
		twAddPortletLink( mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScriptPath&#039;) + &#039;/index.php?&#039; + QueryString.create( query ), &#039;Current&#039;, &#039;tw-curdiff&#039;, &#039;Show difference to current revision&#039; );&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.diff.evaluate = function twinklediffEvaluate(me) {&lt;br /&gt;
	var ntitle = getElementsByClassName( document.getElementById(&#039;bodyContent&#039;), &#039;td&#039; , &#039;diff-ntitle&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
	var user;&lt;br /&gt;
	if( me ) {&lt;br /&gt;
		user = mw.config.get(&#039;wgUserName&#039;);&lt;br /&gt;
	} else {&lt;br /&gt;
		var node = document.getElementById( &#039;mw-diff-ntitle2&#039; );&lt;br /&gt;
		if( ! node ) {&lt;br /&gt;
			// nothing to do?&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		user = $(node).find(&#039;a&#039;).first().text();&lt;br /&gt;
	}&lt;br /&gt;
	var query = {&lt;br /&gt;
		&#039;prop&#039;: &#039;revisions&#039;,&lt;br /&gt;
		&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
		&#039;titles&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
		&#039;rvlimit&#039;: 1, &lt;br /&gt;
		&#039;rvprop&#039;: [ &#039;ids&#039;, &#039;user&#039; ],&lt;br /&gt;
		&#039;rvstartid&#039;: mw.config.get(&#039;wgCurRevisionId&#039;) - 1, // i.e. not the current one&lt;br /&gt;
		&#039;rvuser&#039;: user&lt;br /&gt;
	};&lt;br /&gt;
	Status.init( document.getElementById(&#039;bodyContent&#039;) );&lt;br /&gt;
	var wikipedia_api = new Wikipedia.api( &#039;Grabbing data of initial contributor&#039;, query, Twinkle.diff.callbacks.main );&lt;br /&gt;
	wikipedia_api.params = { user: user };&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.diff.callbacks = {&lt;br /&gt;
	main: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var revid = $(xmlDoc).find(&#039;rev&#039;).attr(&#039;revid&#039;);&lt;br /&gt;
&lt;br /&gt;
		if( ! revid ) {&lt;br /&gt;
			self.statelem.error( &#039;no suitable earlier revision found, or &#039; + self.params.user + &#039; is the only contributor. Aborting.&#039; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		var query = {&lt;br /&gt;
			&#039;title&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
			&#039;oldid&#039;: revid,&lt;br /&gt;
			&#039;diff&#039;: mw.config.get(&#039;wgCurRevisionId&#039;)&lt;br /&gt;
		};&lt;br /&gt;
		window.location = mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScriptPath&#039;) + &#039;/index.php?&#039; + QueryString.create( query );&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklefluff.js: Revert/rollback module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Links on history, contributions, and diff pages&lt;br /&gt;
 * Active on:              Diff pages, history pages, contributions pages&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 Twinklefluff revert and antivandalism utility&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.fluff = {&lt;br /&gt;
	auto: function() {&lt;br /&gt;
		if( parseInt( QueryString.get(&#039;oldid&#039;), 10) !== mw.config.get(&#039;wgCurRevisionId&#039;) ) {&lt;br /&gt;
			// not latest revision&lt;br /&gt;
			alert(&amp;quot;Can&#039;t rollback, page has changed in the meantime.&amp;quot;);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var ntitle = getElementsByClassName( document.getElementById(&#039;bodyContent&#039;), &#039;td&#039; , &#039;diff-ntitle&#039; )[0];&lt;br /&gt;
		vandal = ntitle.getElementsByTagName(&#039;a&#039;)[3].firstChild.nodeValue;&lt;br /&gt;
&lt;br /&gt;
		Twinkle.fluff.revert( QueryString.get( &#039;twinklerevert&#039; ), vandal, true );&lt;br /&gt;
	},&lt;br /&gt;
	normal: function() {&lt;br /&gt;
&lt;br /&gt;
		var spanTag = function( color, content ) {&lt;br /&gt;
			var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
			span.style.color = color;&lt;br /&gt;
			span.appendChild( document.createTextNode( content ) );&lt;br /&gt;
			return span;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		if( mw.config.get(&#039;wgNamespaceNumber&#039;) === -1 &amp;amp;&amp;amp; mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) === &amp;quot;Contributions&amp;quot; ) {&lt;br /&gt;
			//Get the username these contributions are for&lt;br /&gt;
			username = decodeURIComponent(/user=(.+)/.exec($(&#039;div#contentSub a[title=&amp;quot;Special:Log&amp;quot;]&#039;).last().attr(&amp;quot;href&amp;quot;).replace(/\+/g, &amp;quot;%20&amp;quot;))[1]);&lt;br /&gt;
			if( Twinkle.getPref(&#039;showRollbackLinks&#039;).indexOf(&#039;contribs&#039;) !== -1 || &lt;br /&gt;
				( mw.config.get(&#039;wgUserName&#039;) !== username &amp;amp;&amp;amp; Twinkle.getPref(&#039;showRollbackLinks&#039;).indexOf(&#039;others&#039;) !== -1 ) || &lt;br /&gt;
				( mw.config.get(&#039;wgUserName&#039;) === username &amp;amp;&amp;amp; Twinkle.getPref(&#039;showRollbackLinks&#039;).indexOf(&#039;mine&#039;) !== -1 ) ) {&lt;br /&gt;
				var list = $(&amp;quot;div#bodyContent ul li:has(span.mw-uctop)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				var revNode = document.createElement(&#039;strong&#039;);&lt;br /&gt;
				var revLink = document.createElement(&#039;a&#039;);&lt;br /&gt;
				revLink.appendChild( spanTag( &#039;Black&#039;, &#039;[&#039; ) );&lt;br /&gt;
				revLink.appendChild( spanTag( &#039;SteelBlue&#039;, &#039;rollback&#039; ) );&lt;br /&gt;
				revLink.appendChild( spanTag( &#039;Black&#039;, &#039;]&#039; ) );&lt;br /&gt;
				revNode.appendChild(revLink);&lt;br /&gt;
&lt;br /&gt;
				var revVandNode = document.createElement(&#039;strong&#039;);&lt;br /&gt;
				var revVandLink = document.createElement(&#039;a&#039;);&lt;br /&gt;
				revVandLink.appendChild( spanTag( &#039;Black&#039;, &#039;[&#039; ) );&lt;br /&gt;
				revVandLink.appendChild( spanTag( &#039;Red&#039;, &#039;vandalism&#039; ) );&lt;br /&gt;
				revVandLink.appendChild( spanTag( &#039;Black&#039;, &#039;]&#039; ) );&lt;br /&gt;
				revVandNode.appendChild(revVandLink);&lt;br /&gt;
&lt;br /&gt;
				list.each(function(key, current) {&lt;br /&gt;
					var href = $(current).children(&amp;quot;a:eq(1)&amp;quot;).attr(&amp;quot;href&amp;quot;);&lt;br /&gt;
					current.appendChild( document.createTextNode(&#039; &#039;) );&lt;br /&gt;
					var tmpNode = revNode.cloneNode( true );&lt;br /&gt;
					tmpNode.firstChild.setAttribute( &#039;href&#039;, href + &#039;&amp;amp;&#039; + QueryString.create( { &#039;twinklerevert&#039;: &#039;norm&#039; } ) );&lt;br /&gt;
					current.appendChild( tmpNode );&lt;br /&gt;
					current.appendChild( document.createTextNode(&#039; &#039;) );&lt;br /&gt;
					tmpNode = revVandNode.cloneNode( true );&lt;br /&gt;
					tmpNode.firstChild.setAttribute( &#039;href&#039;, href + &#039;&amp;amp;&#039; + QueryString.create( { &#039;twinklerevert&#039;: &#039;vand&#039; } ) );&lt;br /&gt;
					current.appendChild( tmpNode );&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
                        &lt;br /&gt;
			if( mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) === &amp;quot;Special:Undelete&amp;quot; ) {&lt;br /&gt;
				//You can&#039;t rollback deleted pages!&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var body = document.getElementById(&#039;bodyContent&#039;);&lt;br /&gt;
&lt;br /&gt;
			var firstRev = $(&amp;quot;div.firstrevisionheader&amp;quot;).length;&lt;br /&gt;
			if( firstRev ) {&lt;br /&gt;
				// we have first revision here, nothing to do.&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var otitle, ntitle;&lt;br /&gt;
			try {&lt;br /&gt;
				var otitle1 = document.getElementById(&#039;mw-diff-otitle1&#039;); &lt;br /&gt;
				var ntitle1 = document.getElementById(&#039;mw-diff-ntitle1&#039;); &lt;br /&gt;
				if (!otitle1 || !ntitle1) {&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				otitle = otitle1.parentNode;&lt;br /&gt;
				ntitle = ntitle1.parentNode;&lt;br /&gt;
			} catch( e ) {&lt;br /&gt;
				// no old, nor new title, nothing to do really, return;&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var old_rev_url = $(&amp;quot;div#mw-diff-otitle1 strong a&amp;quot;).attr(&amp;quot;href&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			// Lets first add a [edit this revision] link&lt;br /&gt;
			var query = new QueryString( old_rev_url.split( &#039;?&#039;, 2 )[1] );&lt;br /&gt;
&lt;br /&gt;
			var oldrev = query.get(&#039;oldid&#039;);&lt;br /&gt;
&lt;br /&gt;
			var revertToRevision = document.createElement(&#039;div&#039;);&lt;br /&gt;
			revertToRevision.setAttribute( &#039;id&#039;, &#039;tw-revert-to-orevision&#039; );&lt;br /&gt;
			revertToRevision.style.fontWeight = &#039;bold&#039;;&lt;br /&gt;
&lt;br /&gt;
			var revertToRevisionLink = revertToRevision.appendChild( document.createElement(&#039;a&#039;) );&lt;br /&gt;
			revertToRevisionLink.href = &amp;quot;#&amp;quot;;&lt;br /&gt;
			$(revertToRevisionLink).click(function(){&lt;br /&gt;
				Twinkle.fluff.revertToRevision(oldrev);&lt;br /&gt;
			});&lt;br /&gt;
			revertToRevisionLink.appendChild( spanTag( &#039;Black&#039;, &#039;[&#039; ) );&lt;br /&gt;
			revertToRevisionLink.appendChild( spanTag( &#039;SaddleBrown&#039;, &#039;restore this version&#039; ) );&lt;br /&gt;
			revertToRevisionLink.appendChild( spanTag( &#039;Black&#039;, &#039;]&#039; ) );&lt;br /&gt;
&lt;br /&gt;
			otitle.insertBefore( revertToRevision, otitle.firstChild );&lt;br /&gt;
&lt;br /&gt;
			if( document.getElementById(&#039;differences-nextlink&#039;) ) {&lt;br /&gt;
				// Not latest revision&lt;br /&gt;
				curVersion = false;&lt;br /&gt;
&lt;br /&gt;
				var new_rev_url = $(&amp;quot;div#mw-diff-ntitle1 strong a&amp;quot;).attr(&amp;quot;href&amp;quot;);&lt;br /&gt;
				query = new QueryString( new_rev_url.split( &#039;?&#039;, 2 )[1] );&lt;br /&gt;
				var newrev = query.get(&#039;oldid&#039;);&lt;br /&gt;
				revertToRevision = document.createElement(&#039;div&#039;);&lt;br /&gt;
				revertToRevision.setAttribute( &#039;id&#039;, &#039;tw-revert-to-nrevision&#039; );&lt;br /&gt;
				revertToRevision.style.fontWeight = &#039;bold&#039;;&lt;br /&gt;
				revertToRevisionLink = revertToRevision.appendChild( document.createElement(&#039;a&#039;) );&lt;br /&gt;
				revertToRevisionLink.href = &amp;quot;#&amp;quot;;&lt;br /&gt;
				$(revertToRevisionLink).click(function(){&lt;br /&gt;
					Twinkle.fluff.revertToRevision(newrev);&lt;br /&gt;
				});&lt;br /&gt;
				revertToRevisionLink.appendChild( spanTag( &#039;Black&#039;, &#039;[&#039; ) );&lt;br /&gt;
				revertToRevisionLink.appendChild( spanTag( &#039;SaddleBrown&#039;, &#039;restore this version&#039; ) );&lt;br /&gt;
				revertToRevisionLink.appendChild( spanTag( &#039;Black&#039;, &#039;]&#039; ) );&lt;br /&gt;
				ntitle.insertBefore( revertToRevision, ntitle.firstChild );&lt;br /&gt;
&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			if( Twinkle.getPref(&#039;showRollbackLinks&#039;).indexOf(&#039;diff&#039;) != -1 ) {&lt;br /&gt;
				var vandal = $(&amp;quot;#mw-diff-ntitle2 a&amp;quot;).first().text().replace(&amp;quot;&#039;&amp;quot;, &amp;quot;\\&#039;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				var revertNode = document.createElement(&#039;div&#039;);&lt;br /&gt;
				revertNode.setAttribute( &#039;id&#039;, &#039;tw-revert&#039; );&lt;br /&gt;
&lt;br /&gt;
				var agfNode = document.createElement(&#039;strong&#039;);&lt;br /&gt;
				var vandNode = document.createElement(&#039;strong&#039;);&lt;br /&gt;
				var normNode = document.createElement(&#039;strong&#039;);&lt;br /&gt;
&lt;br /&gt;
				var agfLink = document.createElement(&#039;a&#039;);&lt;br /&gt;
				var vandLink = document.createElement(&#039;a&#039;);&lt;br /&gt;
				var normLink = document.createElement(&#039;a&#039;);&lt;br /&gt;
&lt;br /&gt;
				agfLink.href = &amp;quot;#&amp;quot;; &lt;br /&gt;
				vandLink.href = &amp;quot;#&amp;quot;; &lt;br /&gt;
				normLink.href = &amp;quot;#&amp;quot;; &lt;br /&gt;
				$(agfLink).click(function(){&lt;br /&gt;
					Twinkle.fluff.revert(&#039;agf&#039;, vandal);&lt;br /&gt;
				});&lt;br /&gt;
				$(vandLink).click(function(){&lt;br /&gt;
					Twinkle.fluff.revert(&#039;vand&#039;, vandal);&lt;br /&gt;
				});&lt;br /&gt;
				$(normLink).click(function(){&lt;br /&gt;
					Twinkle.fluff.revert(&#039;norm&#039;, vandal);&lt;br /&gt;
				});&lt;br /&gt;
&lt;br /&gt;
				agfLink.appendChild( spanTag( &#039;Black&#039;, &#039;[&#039; ) );&lt;br /&gt;
				agfLink.appendChild( spanTag( &#039;DarkOliveGreen&#039;, &#039;rollback (AGF)&#039; ) );&lt;br /&gt;
				agfLink.appendChild( spanTag( &#039;Black&#039;, &#039;]&#039; ) );&lt;br /&gt;
&lt;br /&gt;
				vandLink.appendChild( spanTag( &#039;Black&#039;, &#039;[&#039; ) );&lt;br /&gt;
				vandLink.appendChild( spanTag( &#039;Red&#039;, &#039;rollback (VANDAL)&#039; ) );&lt;br /&gt;
				vandLink.appendChild( spanTag( &#039;Black&#039;, &#039;]&#039; ) );&lt;br /&gt;
&lt;br /&gt;
				normLink.appendChild( spanTag( &#039;Black&#039;, &#039;[&#039; ) );&lt;br /&gt;
				normLink.appendChild( spanTag( &#039;SteelBlue&#039;, &#039;rollback&#039; ) );&lt;br /&gt;
				normLink.appendChild( spanTag( &#039;Black&#039;, &#039;]&#039; ) );&lt;br /&gt;
&lt;br /&gt;
				agfNode.appendChild(agfLink);&lt;br /&gt;
				vandNode.appendChild(vandLink);&lt;br /&gt;
				normNode.appendChild(normLink);&lt;br /&gt;
&lt;br /&gt;
				revertNode.appendChild( agfNode );&lt;br /&gt;
				revertNode.appendChild( document.createTextNode(&#039; || &#039;) );&lt;br /&gt;
				revertNode.appendChild( normNode );&lt;br /&gt;
				revertNode.appendChild( document.createTextNode(&#039; || &#039;) );&lt;br /&gt;
				revertNode.appendChild( vandNode );&lt;br /&gt;
&lt;br /&gt;
				ntitle.insertBefore( revertNode, ntitle.firstChild );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.fluff.revert = function revertPage( type, vandal, autoRevert, rev, page ) {&lt;br /&gt;
&lt;br /&gt;
	var pagename = page || mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	var revid = rev || mw.config.get(&#039;wgCurRevisionId&#039;);&lt;br /&gt;
&lt;br /&gt;
	Status.init( document.getElementById(&#039;bodyContent&#039;) );&lt;br /&gt;
	var params = {&lt;br /&gt;
		type: type,&lt;br /&gt;
		user: vandal,&lt;br /&gt;
		pagename: pagename,&lt;br /&gt;
		revid: revid,&lt;br /&gt;
		autoRevert: !!autoRevert&lt;br /&gt;
	};&lt;br /&gt;
	var query = {&lt;br /&gt;
		&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
		&#039;prop&#039;: [&#039;info&#039;, &#039;revisions&#039;],&lt;br /&gt;
		&#039;titles&#039;: pagename,&lt;br /&gt;
		&#039;rvlimit&#039;: 50, // max possible&lt;br /&gt;
		&#039;rvprop&#039;: [ &#039;ids&#039;, &#039;timestamp&#039;, &#039;user&#039;, &#039;comment&#039; ],&lt;br /&gt;
		&#039;intoken&#039;: &#039;edit&#039;&lt;br /&gt;
	};&lt;br /&gt;
	var wikipedia_api = new Wikipedia.api( &#039;Grabbing data of earlier revisions&#039;, query, Twinkle.fluff.callbacks.main );&lt;br /&gt;
	wikipedia_api.params = params;&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.fluff.revertToRevision = function revertToRevision( oldrev ) {&lt;br /&gt;
&lt;br /&gt;
	Status.init( document.getElementById(&#039;bodyContent&#039;) );&lt;br /&gt;
&lt;br /&gt;
	var query = {&lt;br /&gt;
		&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
		&#039;prop&#039;: [&#039;info&#039;,  &#039;revisions&#039;],&lt;br /&gt;
		&#039;titles&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
		&#039;rvlimit&#039;: 1,&lt;br /&gt;
		&#039;rvstartid&#039;: oldrev,&lt;br /&gt;
		&#039;rvprop&#039;: [ &#039;ids&#039;, &#039;timestamp&#039;, &#039;user&#039;, &#039;comment&#039; ],&lt;br /&gt;
		&#039;intoken&#039;: &#039;edit&#039;,&lt;br /&gt;
		&#039;format&#039;: &#039;xml&#039;&lt;br /&gt;
	};&lt;br /&gt;
	var wikipedia_api = new Wikipedia.api( &#039;Grabbing data of the earlier revision&#039;, query, Twinkle.fluff.callbacks.toRevision.main );&lt;br /&gt;
	wikipedia_api.params = { rev: oldrev };&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.fluff.userIpLink = function( user ) {&lt;br /&gt;
	return (isIPAddress(user) ? &amp;quot;[[Special:Contributions/&amp;quot; : &amp;quot;[[User:&amp;quot; ) + user + &amp;quot;|&amp;quot; + user + &amp;quot;]]&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.fluff.callbacks = {&lt;br /&gt;
	toRevision: {&lt;br /&gt;
		main: function( self ) {&lt;br /&gt;
			var xmlDoc = self.responseXML;&lt;br /&gt;
&lt;br /&gt;
			var lastrevid = parseInt( $(xmlDoc).find(&#039;page&#039;).attr(&#039;lastrevid&#039;), 10);&lt;br /&gt;
			var touched = $(xmlDoc).find(&#039;page&#039;).attr(&#039;touched&#039;);&lt;br /&gt;
			var starttimestamp = $(xmlDoc).find(&#039;page&#039;).attr(&#039;starttimestamp&#039;);&lt;br /&gt;
			var edittoken = $(xmlDoc).find(&#039;page&#039;).attr(&#039;edittoken&#039;);&lt;br /&gt;
			var revertToRevID = $(xmlDoc).find(&#039;rev&#039;).attr(&#039;revid&#039;);&lt;br /&gt;
			var revertToUser = $(xmlDoc).find(&#039;rev&#039;).attr(&#039;user&#039;);&lt;br /&gt;
&lt;br /&gt;
			if (revertToRevID !== self.params.rev) {&lt;br /&gt;
				self.statitem.error( &#039;The retrieved revision does not match the requested revision.  Aborting.&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var optional_summary = prompt( &amp;quot;Please specify a reason for the revert:&amp;quot;, &amp;quot;&amp;quot; );&lt;br /&gt;
			if (optional_summary === null)&lt;br /&gt;
			{&lt;br /&gt;
				self.statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			var summary = &amp;quot;Reverted to revision &amp;quot; + revertToRevID + &amp;quot; by &amp;quot; + revertToUser + (optional_summary ? &amp;quot;: &amp;quot; + optional_summary : &#039;&#039;) + &amp;quot;.&amp;quot; +&lt;br /&gt;
				Twinkle.getPref(&#039;summaryAd&#039;);&lt;br /&gt;
		&lt;br /&gt;
			var query = { &lt;br /&gt;
				&#039;action&#039;: &#039;edit&#039;,&lt;br /&gt;
				&#039;title&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
				&#039;summary&#039;: summary,&lt;br /&gt;
				&#039;token&#039;: edittoken,&lt;br /&gt;
				&#039;undo&#039;: lastrevid,&lt;br /&gt;
				&#039;undoafter&#039;: revertToRevID,&lt;br /&gt;
				&#039;basetimestamp&#039;: touched,&lt;br /&gt;
				&#039;starttimestamp&#039;: starttimestamp,&lt;br /&gt;
				&#039;watchlist&#039;: Twinkle.getPref(&#039;watchRevertedPages&#039;).indexOf( self.params.type ) !== -1 ? &#039;watch&#039; : undefined,&lt;br /&gt;
				&#039;minor&#039;: Twinkle.getPref(&#039;markRevertedPagesAsMinor&#039;).indexOf( self.params.type ) !== -1  ? true : undefined&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Reversion completed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			var wikipedia_api = new Wikipedia.api( &#039;Saving reverted contents&#039;, query, null/*Twinkle.fluff.callbacks.toRevision.complete*/, self.statelem);&lt;br /&gt;
			wikipedia_api.params = self.params;&lt;br /&gt;
			wikipedia_api.post();&lt;br /&gt;
&lt;br /&gt;
		},&lt;br /&gt;
		complete: function (self) {&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	main: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
&lt;br /&gt;
		var lastrevid = parseInt( $(xmlDoc).find(&#039;page&#039;).attr(&#039;lastrevid&#039;), 10);&lt;br /&gt;
		var touched = $(xmlDoc).find(&#039;page&#039;).attr(&#039;touched&#039;);&lt;br /&gt;
		var starttimestamp = $(xmlDoc).find(&#039;page&#039;).attr(&#039;starttimestamp&#039;);&lt;br /&gt;
		var edittoken = $(xmlDoc).find(&#039;page&#039;).attr(&#039;edittoken&#039;);&lt;br /&gt;
		var lastuser = $(xmlDoc).find(&#039;rev&#039;).attr(&#039;user&#039;);&lt;br /&gt;
&lt;br /&gt;
		var revs = $(xmlDoc).find(&#039;rev&#039;);&lt;br /&gt;
&lt;br /&gt;
		if( revs.length &amp;lt; 1 ) {&lt;br /&gt;
			self.statitem.error( &#039;We have less than one additional revision, thus impossible to revert&#039; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		var top = revs[0];&lt;br /&gt;
		if( lastrevid &amp;lt; self.params.revid ) {&lt;br /&gt;
			Status.error( &#039;Error&#039;, [ &#039;The most recent revision ID received from the server, &#039;, htmlNode( &#039;strong&#039;, lastrevid ), &#039;, is less than the ID of the displayed revision. This could indicate that the current revision has been deleted, the server is lagging, or that bad data has been received. Will stop proceeding at this point.&#039; ] );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		var index = 1;&lt;br /&gt;
		if( self.params.revid !== lastrevid  ) {&lt;br /&gt;
			Status.warn( &#039;Warning&#039;, [ &#039;Latest revision &#039;, htmlNode( &#039;strong&#039;, lastrevid ), &#039; doesn\&#039;t equal our revision &#039;, htmlNode( &#039;strong&#039;, self.params.revid ) ] );&lt;br /&gt;
			if( lastuser === self.params.user ) {&lt;br /&gt;
				switch( self.params.type ) {&lt;br /&gt;
				case &#039;vand&#039;:&lt;br /&gt;
					Status.info( &#039;Info&#039;, [ &#039;Latest revision was made by &#039;, htmlNode( &#039;strong&#039;, self.params.user ) , &#039;. As we assume vandalism, we continue to revert&#039; ]);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;agf&#039;:&lt;br /&gt;
					Status.warn( &#039;Warning&#039;, [ &#039;Latest revision was made by &#039;, htmlNode( &#039;strong&#039;, self.params.user ) , &#039;. As we assume good faith, we stop reverting, as the problem might have been fixed.&#039; ]);&lt;br /&gt;
					return;&lt;br /&gt;
				default:&lt;br /&gt;
					Status.warn( &#039;Notice&#039;, [ &#039;Latest revision was made by &#039;, htmlNode( &#039;strong&#039;, self.params.user ) , &#039;, but we will stop reverting anyway.&#039; ] );&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if(self.params.type === &#039;vand&#039; &amp;amp;&amp;amp; &lt;br /&gt;
					Twinkle.fluff.whiteList.indexOf( top.getAttribute( &#039;user&#039; ) ) !== -1 &amp;amp;&amp;amp; revs.length &amp;gt; 1 &amp;amp;&amp;amp;&lt;br /&gt;
					revs[1].getAttribute( &#039;pageId&#039; ) === self.params.revid) {&lt;br /&gt;
				Status.info( &#039;Info&#039;, [ &#039;Latest revision was made by &#039;, htmlNode( &#039;strong&#039;, lastuser ), &#039;, a trusted bot, and the revision before was made by our vandal, so we proceed with the revert.&#039; ] );&lt;br /&gt;
				index = 2;&lt;br /&gt;
			} else {&lt;br /&gt;
				Status.error( &#039;Error&#039;, [ &#039;Latest revision was made by &#039;, htmlNode( &#039;strong&#039;, lastuser ), &#039;, so it might have already been reverted, stopping  reverting.&#039;] );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( Twinkle.fluff.whiteList.indexOf( self.params.user ) !== -1  ) {&lt;br /&gt;
			switch( self.params.type ) {&lt;br /&gt;
			case &#039;vand&#039;:&lt;br /&gt;
				Status.info( &#039;Info&#039;, [ &#039;Vandalism revert was chosen on &#039;, htmlNode( &#039;strong&#039;, self.params.user ), &#039;. As this is a whitelisted bot, we assume you wanted to revert vandalism made by the previous user instead.&#039; ] );&lt;br /&gt;
				index = 2;&lt;br /&gt;
				vandal = revs[1].getAttribute( &#039;user&#039; );&lt;br /&gt;
				self.params.user = revs[1].getAttribute( &#039;user&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;agf&#039;:&lt;br /&gt;
				Status.warn( &#039;Notice&#039;, [ &#039;Good faith revert was chosen on &#039;, htmlNode( &#039;strong&#039;, self.params.user ), &#039;. This is a whitelisted bot, it makes no sense at all to revert it as a good faith edit, will stop reverting.&#039; ] );&lt;br /&gt;
				return;&lt;br /&gt;
			case &#039;norm&#039;:&lt;br /&gt;
				/* falls through */&lt;br /&gt;
			default:&lt;br /&gt;
				var cont = confirm( &#039;Normal revert was chosen, but the most recent edit was made by a whitelisted bot (&#039; + self.params.user + &#039;). Do you want to revert the revision before instead?&#039; );&lt;br /&gt;
				if( cont ) {&lt;br /&gt;
					Status.info( &#039;Info&#039;, [ &#039;Normal revert was chosen on &#039;, htmlNode( &#039;strong&#039;, self.params.user ), &#039;. This is a whitelisted bot, and per confirmation, we\&#039;ll revert the previous revision instead.&#039; ] );&lt;br /&gt;
					index = 2;&lt;br /&gt;
					self.params.user = revs[1].getAttribute( &#039;user&#039; );&lt;br /&gt;
				} else {&lt;br /&gt;
					Status.warn( &#039;Notice&#039;, [ &#039;Normal revert was chosen on &#039;, htmlNode( &#039;strong&#039;, self.params.user ), &#039;. This is a whitelisted bot, but per confirmation, revert on top revision will proceed.&#039; ] );&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		var found = false;&lt;br /&gt;
		var count = 0;&lt;br /&gt;
&lt;br /&gt;
		for( var i = index; i &amp;lt; revs.length; ++i ) {&lt;br /&gt;
			++count;&lt;br /&gt;
			if( revs[i].getAttribute( &#039;user&#039; ) != self.params.user ) {&lt;br /&gt;
				found = i;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( ! found ) {&lt;br /&gt;
			self.statelem.error( [ &#039;No previous revision found. Perhaps &#039;, htmlNode( &#039;strong&#039;, self.params.user ), &#039; is the only contributor, or that the user has made more than &#039; + Twinkle.getPref(&#039;revertMaxRevisions&#039;) + &#039; edits in a row.&#039; ] );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( ! count ) {&lt;br /&gt;
			Status.error( &#039;Error&#039;, &amp;quot;We were to revert zero revisions. As that makes no sense, we&#039;ll stop reverting this time. It could be that the edit has already been reverted, but the revision ID was still the same.&amp;quot; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var good_revision = revs[ found ];&lt;br /&gt;
		var userHasAlreadyConfirmedAction = false;&lt;br /&gt;
		if (self.params.type !== &#039;vand&#039; &amp;amp;&amp;amp; count &amp;gt; 1) {&lt;br /&gt;
			if ( !confirm( self.params.user + &#039; has made &#039; + count + &#039; edits in a row. Are you sure you want to revert them all?&#039;) ) {&lt;br /&gt;
				Status.info( &#039;Notice&#039;, &#039;Stopping reverting per user input&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			userHasAlreadyConfirmedAction = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		self.params.count = count;&lt;br /&gt;
&lt;br /&gt;
		self.params.goodid = good_revision.getAttribute( &#039;revid&#039; );&lt;br /&gt;
		self.params.gooduser = good_revision.getAttribute( &#039;user&#039; );&lt;br /&gt;
&lt;br /&gt;
		self.statelem.status( [ &#039; revision &#039;, htmlNode( &#039;strong&#039;, self.params.goodid ), &#039; that was made &#039;, htmlNode( &#039;strong&#039;, count ), &#039; revisions ago by &#039;, htmlNode( &#039;strong&#039;, self.params.gooduser ) ] );&lt;br /&gt;
&lt;br /&gt;
		var summary, extra_summary, userstr, gooduserstr;&lt;br /&gt;
		switch( self.params.type ) {&lt;br /&gt;
		case &#039;agf&#039;:&lt;br /&gt;
			extra_summary = prompt( &amp;quot;An optional comment for the edit summary:&amp;quot;, &amp;quot;&amp;quot; );&lt;br /&gt;
			if (extra_summary === null)&lt;br /&gt;
			{&lt;br /&gt;
				self.statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			userHasAlreadyConfirmedAction = true;&lt;br /&gt;
&lt;br /&gt;
			userstr = self.params.user.replace(&amp;quot;\\&#039;&amp;quot;, &amp;quot;&#039;&amp;quot;);&lt;br /&gt;
			summary = &amp;quot;Reverted [[MP:AGF|good faith]] edits by [[Special:Contributions/&amp;quot; + userstr + &amp;quot;|&amp;quot; + userstr + &amp;quot;]] ([[User talk:&amp;quot; + &lt;br /&gt;
				userstr + &amp;quot;|talk]])&amp;quot; + Twinkle.fluff.formatSummaryPostfix(extra_summary) + Twinkle.getPref(&#039;summaryAd&#039;);&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case &#039;vand&#039;:&lt;br /&gt;
&lt;br /&gt;
			userstr = self.params.user.replace(&amp;quot;\\&#039;&amp;quot;, &amp;quot;&#039;&amp;quot;);&lt;br /&gt;
			gooduserstr = self.params.gooduser.replace(&amp;quot;\\&#039;&amp;quot;, &amp;quot;&#039;&amp;quot;)&lt;br /&gt;
			summary = &amp;quot;Reverted &amp;quot; + self.params.count + (self.params.count &amp;gt; 1 ? &#039; edits&#039; : &#039; edit&#039;) + &amp;quot; by [[Special:Contributions/&amp;quot; +&lt;br /&gt;
				userstr + &amp;quot;|&amp;quot; + userstr + &amp;quot;]] ([[User talk:&amp;quot; + userstr + &amp;quot;|talk]]) identified as [[MP:VAND|vandalism]] to last revision by &amp;quot; +&lt;br /&gt;
				gooduserstr + &amp;quot;.&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;);&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case &#039;norm&#039;:&lt;br /&gt;
			/* falls through */&lt;br /&gt;
		default:&lt;br /&gt;
			if( Twinkle.getPref(&#039;offerReasonOnNormalRevert&#039;) ) {&lt;br /&gt;
				extra_summary = prompt( &amp;quot;An optional comment for the edit summary:&amp;quot;, &amp;quot;&amp;quot; );&lt;br /&gt;
				if (extra_summary === null)&lt;br /&gt;
				{&lt;br /&gt;
					self.statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				userHasAlreadyConfirmedAction = true;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			userstr = self.params.user.replace(&amp;quot;\\&#039;&amp;quot;, &amp;quot;&#039;&amp;quot;);&lt;br /&gt;
			summary = &amp;quot;Reverted &amp;quot; + self.params.count + (self.params.count &amp;gt; 1 ? &#039; edits&#039; : &#039; edit&#039;) + &amp;quot; by [[Special:Contributions/&amp;quot; + &lt;br /&gt;
				userstr + &amp;quot;|&amp;quot; + userstr + &amp;quot;]] ([[User talk:&amp;quot; + userstr + &amp;quot;|talk]])&amp;quot; + Twinkle.fluff.formatSummaryPostfix(extra_summary) +&lt;br /&gt;
				Twinkle.getPref(&#039;summaryAd&#039;);&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (Twinkle.getPref(&#039;confirmOnFluff&#039;) &amp;amp;&amp;amp; !userHasAlreadyConfirmedAction &amp;amp;&amp;amp; !confirm(&amp;quot;Reverting page: are you sure?&amp;quot;)) {&lt;br /&gt;
			self.statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var query;&lt;br /&gt;
		if( (!self.params.autoRevert || Twinkle.getPref(&#039;openTalkPageOnAutoRevert&#039;)) &amp;amp;&amp;amp; &lt;br /&gt;
				Twinkle.getPref(&#039;openTalkPage&#039;).indexOf( self.params.type ) !== -1 &amp;amp;&amp;amp;&lt;br /&gt;
				mw.config.get(&#039;wgUserName&#039;) !== self.params.user ) {&lt;br /&gt;
			Status.info( &#039;Info&#039;, [ &#039;Opening user talk page edit form for user &#039;, htmlNode( &#039;strong&#039;, self.params.user ) ] );&lt;br /&gt;
			&lt;br /&gt;
			query = {&lt;br /&gt;
				&#039;title&#039;: &#039;User talk:&#039; + self.params.user,&lt;br /&gt;
				&#039;action&#039;: &#039;edit&#039;,&lt;br /&gt;
				&#039;preview&#039;: &#039;yes&#039;,&lt;br /&gt;
				&#039;vanarticle&#039;: self.params.pagename.replace(/_/g, &#039; &#039;),&lt;br /&gt;
				&#039;vanarticlerevid&#039;: self.params.revid,&lt;br /&gt;
				&#039;vanarticlegoodrevid&#039;: self.params.goodid,&lt;br /&gt;
				&#039;type&#039;: self.params.type,&lt;br /&gt;
				&#039;count&#039;: self.params.count&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			switch( Twinkle.getPref(&#039;userTalkPageMode&#039;) ) {&lt;br /&gt;
			case &#039;tab&#039;:&lt;br /&gt;
				window.open( mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScriptPath&#039;) + &#039;/index.php?&#039; + QueryString.create( query ), &#039;_tab&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;blank&#039;:&lt;br /&gt;
				window.open( mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScriptPath&#039;) + &#039;/index.php?&#039; + QueryString.create( query ), &#039;_blank&#039;, &#039;location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;window&#039;:&lt;br /&gt;
				/* falls through */&lt;br /&gt;
			default:&lt;br /&gt;
				window.open( mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScriptPath&#039;) + &#039;/index.php?&#039; + QueryString.create( query ), &#039;twinklewarnwindow&#039;, &#039;location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;edit&#039;,&lt;br /&gt;
			&#039;title&#039;: self.params.pagename,&lt;br /&gt;
			&#039;summary&#039;: summary,&lt;br /&gt;
			&#039;token&#039;: edittoken,&lt;br /&gt;
			&#039;undo&#039;: lastrevid,&lt;br /&gt;
			&#039;undoafter&#039;: self.params.goodid,&lt;br /&gt;
			&#039;basetimestamp&#039;: touched,&lt;br /&gt;
			&#039;starttimestamp&#039;: starttimestamp,&lt;br /&gt;
			&#039;watchlist&#039; :  Twinkle.getPref(&#039;watchRevertedPages&#039;).indexOf( self.params.type ) != -1 ? &#039;watch&#039; : undefined,&lt;br /&gt;
			&#039;minor&#039;: Twinkle.getPref(&#039;markRevertedPagesAsMinor&#039;).indexOf( self.params.type ) != -1  ? true : undefined&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		Wikipedia.actionCompleted.redirect = self.params.pagename;&lt;br /&gt;
		Wikipedia.actionCompleted.notice = &amp;quot;Reversion completed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		var wikipedia_api = new Wikipedia.api( &#039;Saving reverted contents&#039;, query, Twinkle.fluff.callbacks.complete, self.statelem);&lt;br /&gt;
		wikipedia_api.params = self.params;&lt;br /&gt;
		wikipedia_api.post();&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
	complete: function (self) {&lt;br /&gt;
		self.statelem.info(&amp;quot;done&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.fluff.formatSummaryPostfix = function(stringToAdd) {&lt;br /&gt;
	if (stringToAdd) {&lt;br /&gt;
		stringToAdd = &#039;: &#039; + stringToAdd.toUpperCaseFirstChar();&lt;br /&gt;
		if (stringToAdd.search(/[.?!;]$/) == -1) {&lt;br /&gt;
			stringToAdd = stringToAdd + &#039;.&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		return stringToAdd;&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		return &#039;.&#039;;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.fluff.init = function twinklefluffinit() {&lt;br /&gt;
	if (twinkleUserAuthorized)&lt;br /&gt;
	{&lt;br /&gt;
		// a list of usernames, usually only bots, that vandalism revert is jumped over, that is&lt;br /&gt;
		// if vandalism revert was chosen on such username, then it&#039;s target is on the revision before.&lt;br /&gt;
		// This is for handeling quick bots that makes edits seconds after the original edit is made.&lt;br /&gt;
		// This only affect vandalism rollback, for good faith rollback, it will stop, indicating a bot &lt;br /&gt;
		// has no faith, and for normal rollback, it will rollback that edit.&lt;br /&gt;
		Twinkle.fluff.whiteList = [&lt;br /&gt;
			&#039;AnomieBOT&#039;,&lt;br /&gt;
			&#039;ClueBot NG&#039;,&lt;br /&gt;
			&#039;SineBot&#039;&lt;br /&gt;
		];&lt;br /&gt;
&lt;br /&gt;
		if ( QueryString.exists( &#039;twinklerevert&#039; ) ) {&lt;br /&gt;
			Twinkle.fluff.auto();&lt;br /&gt;
		} else {&lt;br /&gt;
			Twinkle.fluff.normal();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinkleimage.js: Image CSD module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;DI&amp;quot;)&lt;br /&gt;
 * Active on:              File pages with a corresponding file which is local (not on Commons)&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.image = function twinkleimage() {&lt;br /&gt;
	if (mw.config.get(&#039;wgNamespaceNumber&#039;) === 6 &amp;amp;&amp;amp;&lt;br /&gt;
	    !document.getElementById(&amp;quot;mw-sharedupload&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
	    document.getElementById(&amp;quot;mw-imagepage-section-filehistory&amp;quot;))&lt;br /&gt;
	{&lt;br /&gt;
		if(twinkleUserAuthorized) {&lt;br /&gt;
			$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;DI&amp;quot;, &amp;quot;tw-di&amp;quot;, &amp;quot;Nominate file for delayed speedy deletion&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.image.callback);&lt;br /&gt;
		} else {&lt;br /&gt;
			$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;DI&amp;quot;, &amp;quot;tw-di&amp;quot;, &amp;quot;Nominate file for delayed speedy deletion&amp;quot;, &amp;quot;&amp;quot;)).click(function(){&lt;br /&gt;
				alert(&amp;quot;Your account is too new to use Twinkle.&amp;quot;);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.image.callback = function twinkleimageCallback() {&lt;br /&gt;
	var Window = new SimpleWindow( 600, 300 );&lt;br /&gt;
	Window.setTitle( &amp;quot;File for dated speedy deletion&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Speedy deletion policy&amp;quot;, &amp;quot;MP:CSD&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#image&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.image.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;checkbox&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Notify original uploader&#039;,&lt;br /&gt;
					value: &#039;notify&#039;,&lt;br /&gt;
					name: &#039;notify&#039;,&lt;br /&gt;
					tooltip: &amp;quot;Uncheck this if you are planning to make multiple nominations from the same user, and don&#039;t want to overload their talk page with too many notifications.&amp;quot;,&lt;br /&gt;
					checked: Twinkle.getPref(&#039;notifyUserOnDeli&#039;)&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	);&lt;br /&gt;
	var field = form.append( {&lt;br /&gt;
			type: &#039;field&#039;,&lt;br /&gt;
			label: &#039;Type of action wanted&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	field.append( {&lt;br /&gt;
			type: &#039;radio&#039;,&lt;br /&gt;
			name: &#039;type&#039;,&lt;br /&gt;
			event: Twinkle.image.callback.choice,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;No source (CSD F4)&#039;,&lt;br /&gt;
					value: &#039;no source&#039;,&lt;br /&gt;
					checked: true,&lt;br /&gt;
					tooltip: &#039;Image or media has no source information&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;No license (CSD F4)&#039;,&lt;br /&gt;
					value: &#039;no license&#039;,&lt;br /&gt;
					tooltip: &#039;Image or media does not have information on its copyright status&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;No source and no license (CSD F4)&#039;,&lt;br /&gt;
					value: &#039;no source no license&#039;,&lt;br /&gt;
					tooltip: &#039;Image or media has neither information on source nor its copyright status&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Orphaned fair use (CSD F5)&#039;,&lt;br /&gt;
					value: &#039;orphaned fair use&#039;,&lt;br /&gt;
					tooltip: &#039;Image or media is unlicensed for use on Wikipedia and allowed only under a claim of fair use per Wikipedia:Non-free content, but it is not used in any articles&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;No fair use rationale (CSD F6)&#039;,&lt;br /&gt;
					value: &#039;no fair use rationale&#039;,&lt;br /&gt;
					tooltip: &#039;Image or media is claimed to be used under Wikipedia\&#039;s fair use policy but has no explanation as to why it is permitted under the policy&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Disputed fair use rationale (CSD F7)&#039;,&lt;br /&gt;
					value: &#039;disputed fair use rationale&#039;,&lt;br /&gt;
					tooltip: &#039;Image or media has a fair use rationale that is disputed&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Replaceable fair use (CSD F7)&#039;,&lt;br /&gt;
					value: &#039;replaceable fair use&#039;,&lt;br /&gt;
					tooltip: &#039;Image or media may fail Wikipedia\&#039;s first non-free content criterion ([[MP:NFCC#1]]) in that it illustrates a subject for which a free image might reasonably be found or created that adequately provides the same information&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;No permission (CSD F11)&#039;,&lt;br /&gt;
					value: &#039;no permission&#039;,&lt;br /&gt;
					tooltip: &#039;Image or media does not have proof that the author agreed to licence the file&#039;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;div&#039;,&lt;br /&gt;
			label: &#039;Work area&#039;,&lt;br /&gt;
			name: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent( result );&lt;br /&gt;
	Window.display();&lt;br /&gt;
&lt;br /&gt;
	// We must init the parameters&lt;br /&gt;
	var evt = document.createEvent( &amp;quot;Event&amp;quot; );&lt;br /&gt;
	evt.initEvent( &#039;change&#039;, true, true );&lt;br /&gt;
	result.type[0].dispatchEvent( evt );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.image.callback.choice = function twinkleimageCallbackChoose(event) {&lt;br /&gt;
	var value = event.target.values;&lt;br /&gt;
	var root = event.target.form;&lt;br /&gt;
	var work_area = new QuickForm.element( {&lt;br /&gt;
			type: &#039;div&#039;,&lt;br /&gt;
			name: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	switch( value ) {&lt;br /&gt;
		case &#039;no source no license&#039;:&lt;br /&gt;
		case &#039;no source&#039;:&lt;br /&gt;
			work_area.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					name: &#039;non_free&#039;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Non-free&#039;,&lt;br /&gt;
							tooltip: &#039;Image is licensed under a fair use claim&#039;&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;no permission&#039;:&lt;br /&gt;
			work_area.append( {&lt;br /&gt;
					type: &#039;input&#039;,&lt;br /&gt;
					name: &#039;source&#039;,&lt;br /&gt;
					label: &#039;Source: &#039;&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;disputed fair use rationale&#039;:&lt;br /&gt;
			work_area.append( {&lt;br /&gt;
					type: &#039;textarea&#039;,&lt;br /&gt;
					name: &#039;reason&#039;,&lt;br /&gt;
					label: &#039;Concern: &#039;&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;orphaned fair use&#039;:&lt;br /&gt;
			work_area.append( {&lt;br /&gt;
					type: &#039;input&#039;,&lt;br /&gt;
					name: &#039;replacement&#039;,&lt;br /&gt;
					label: &#039;Replacement: &#039;&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;replaceable fair use&#039;:&lt;br /&gt;
			work_area.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					name: &#039;old_image&#039;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Old image&#039;,&lt;br /&gt;
							tooltip: &#039;Image was uploaded before 2006-07-13&#039;&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	root.replaceChild( work_area.render(), $(root).find(&#039;div[name=&amp;quot;work_area&amp;quot;]&#039;)[0] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.image.callback.evaluate = function twinkleimageCallbackEvaluate(event) {&lt;br /&gt;
	var type, non_free, source, reason, replacement, old_image;&lt;br /&gt;
	mw.config.set(&#039;wgPageName&#039;, mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;));  // for queen/king/whatever and country!&lt;br /&gt;
&lt;br /&gt;
	var notify = event.target.notify.checked;&lt;br /&gt;
	var types = event.target.type;&lt;br /&gt;
	for( var i = 0; i &amp;lt; types.length; ++i ) {&lt;br /&gt;
		if( types[i].checked ) {&lt;br /&gt;
			type = types[i].value;&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if( event.target.non_free ) {&lt;br /&gt;
		non_free = event.target.non_free.checked;&lt;br /&gt;
	}&lt;br /&gt;
	if( event.target.source ) {&lt;br /&gt;
		source = event.target.source.value;&lt;br /&gt;
	}&lt;br /&gt;
	if( event.target.reason ) {&lt;br /&gt;
		reason = event.target.reason.value;&lt;br /&gt;
	}&lt;br /&gt;
	if( event.target.replacement ) {&lt;br /&gt;
		replacement = event.target.replacement.value;&lt;br /&gt;
	}&lt;br /&gt;
	if( event.target.old_image ) {&lt;br /&gt;
		old_image = event.target.old_image.checked;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var csdcrit;&lt;br /&gt;
	switch( type ) {&lt;br /&gt;
		case &#039;no source no license&#039;:&lt;br /&gt;
		case &#039;no source&#039;:&lt;br /&gt;
		case &#039;no license&#039;:&lt;br /&gt;
			csdcrit = &amp;quot;F4&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;orphaned fair use&#039;:&lt;br /&gt;
			csdcrit = &amp;quot;F5&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;no fair use rationale&#039;:&lt;br /&gt;
			csdcrit = &amp;quot;F6&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;disputed fair use rationale&#039;:&lt;br /&gt;
		case &#039;replaceable fair use&#039;:&lt;br /&gt;
			csdcrit = &amp;quot;F7&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;no permission&#039;:&lt;br /&gt;
			csdcrit = &amp;quot;F11&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			throw new Error( &amp;quot;Twinkle.image.callback.evaluate: unknown criterion&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var lognomination = Twinkle.getPref(&#039;logSpeedyNominations&#039;) &amp;amp;&amp;amp; Twinkle.getPref(&#039;noLogOnSpeedyNomination&#039;).indexOf(csdcrit) === -1;&lt;br /&gt;
&lt;br /&gt;
	var params = {&lt;br /&gt;
		&#039;type&#039;: type,&lt;br /&gt;
		&#039;normalized&#039;: csdcrit,&lt;br /&gt;
		&#039;non_free&#039;: non_free,&lt;br /&gt;
		&#039;source&#039;: source,&lt;br /&gt;
		&#039;reason&#039;: reason,&lt;br /&gt;
		&#039;replacement&#039;: replacement,&lt;br /&gt;
		&#039;old_image&#039;: old_image,&lt;br /&gt;
		&#039;lognomination&#039;: lognomination&lt;br /&gt;
	};&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( event.target );&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Tagging complete&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	// Tagging image&lt;br /&gt;
	var wikipedia_page = new Wikipedia.page( mw.config.get(&#039;wgPageName&#039;), &#039;Tagging file with deletion tag&#039; );&lt;br /&gt;
	wikipedia_page.setCallbackParameters( params );&lt;br /&gt;
	wikipedia_page.load( Twinkle.image.callbacks.taggingImage );&lt;br /&gt;
&lt;br /&gt;
	// Notifying uploader&lt;br /&gt;
	if( notify ) {&lt;br /&gt;
		wikipedia_page.lookupCreator(Twinkle.image.callbacks.userNotification);&lt;br /&gt;
	} else {&lt;br /&gt;
		// add to CSD log if desired&lt;br /&gt;
		if (lognomination) {&lt;br /&gt;
			params.fromDI = true;&lt;br /&gt;
			Twinkle.speedy.callbacks.user.addToLog(params, null);&lt;br /&gt;
		}&lt;br /&gt;
		// No auto-notification, display what was going to be added.&lt;br /&gt;
		var noteData = document.createElement( &#039;pre&#039; );&lt;br /&gt;
		noteData.appendChild( document.createTextNode( &amp;quot;{{subst:di-&amp;quot; + type + &amp;quot;-notice|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;}} ~~~~&amp;quot; ) );&lt;br /&gt;
		Status.info( &#039;Notification&#039;, [ &#039;Following/similar data should be posted to the original uploader:&#039;, document.createElement( &#039;br&#039; ),  noteData ] );&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.image.callbacks = {&lt;br /&gt;
	taggingImage: function(pageobj) {&lt;br /&gt;
		var text = pageobj.getPageText();&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
		var tag = &amp;quot;{{di-&amp;quot; + params.type + &amp;quot;|date={{subst:#time:j F Y}}&amp;quot;;&lt;br /&gt;
		switch( params.type ) {&lt;br /&gt;
			case &#039;no source no license&#039;:&lt;br /&gt;
			case &#039;no source&#039;:&lt;br /&gt;
				tag += params.non_free ? &amp;quot;|non-free=yes&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;no permission&#039;:&lt;br /&gt;
				tag += params.source ? &amp;quot;|source=&amp;quot; + params.source : &amp;quot;&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;disputed fair use rationale&#039;:&lt;br /&gt;
				tag += params.reason ? &amp;quot;|concern=&amp;quot; + params.reason : &amp;quot;&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;orphaned fair use&#039;:&lt;br /&gt;
				tag += params.replacement ? &amp;quot;|replacement=&amp;quot; + params.replacement : &amp;quot;&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;replaceable fair use&#039;:&lt;br /&gt;
				tag += params.old_image ? &amp;quot;|old image=yes&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				break;  // doesn&#039;t matter&lt;br /&gt;
		}&lt;br /&gt;
		tag += &amp;quot;}}\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		pageobj.setPageText(tag + text);&lt;br /&gt;
		pageobj.setEditSummary(&amp;quot;This file is up for deletion, per [[MP:CSD#&amp;quot; + params.normalized + &amp;quot;|CSD &amp;quot; + params.normalized + &amp;quot;]] (&amp;quot; + params.type + &amp;quot;).&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
		switch (Twinkle.getPref(&#039;deliWatchPage&#039;)) {&lt;br /&gt;
			case &#039;yes&#039;:&lt;br /&gt;
				pageobj.setWatchlist(true);&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;no&#039;:&lt;br /&gt;
				pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
		pageobj.save();&lt;br /&gt;
	},&lt;br /&gt;
	userNotification: function(pageobj) {&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
		var initialContrib = pageobj.getCreator();&lt;br /&gt;
		var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, &amp;quot;Notifying initial contributor (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
		var notifytext = &amp;quot;\n{{subst:di-&amp;quot; + params.type + &amp;quot;-notice|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;);&lt;br /&gt;
		if (params.type === &#039;no permission&#039;) {&lt;br /&gt;
			notifytext += params.source ? &amp;quot;|source=&amp;quot; + params.source : &amp;quot;&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		notifytext += &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
		usertalkpage.setAppendText(notifytext);&lt;br /&gt;
		usertalkpage.setEditSummary(&amp;quot;Notification: tagging for deletion of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
		usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
		switch (Twinkle.getPref(&#039;deliWatchUser&#039;)) {&lt;br /&gt;
			case &#039;yes&#039;:&lt;br /&gt;
				usertalkpage.setWatchlist(true);&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;no&#039;:&lt;br /&gt;
				usertalkpage.setWatchlistFromPreferences(false);&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				usertalkpage.setWatchlistFromPreferences(true);&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		usertalkpage.setFollowRedirect(true);&lt;br /&gt;
		usertalkpage.append();&lt;br /&gt;
&lt;br /&gt;
		// add this nomination to the user&#039;s userspace log, if the user has enabled it&lt;br /&gt;
		if (params.lognomination) {&lt;br /&gt;
			params.fromDI = true;&lt;br /&gt;
			Twinkle.speedy.callbacks.user.addToLog(params, initialContrib);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinkleimagetraverse.js: Image traverse module (sysops only)&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;Traverse&amp;quot;)&lt;br /&gt;
 * Active on:              Categories&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.imagetraverse = function twinkleimagetraverse() {&lt;br /&gt;
	if( userIsInGroup( &#039;sysop&#039; ) &amp;amp;&amp;amp; wgNamespaceNumber == Namespace.CATEGORY ) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Traverse&amp;quot;, &amp;quot;tw-imagetraverse&amp;quot;, &amp;quot;Traverse category&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.imagetraverse.callback);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.imagetraverse.basequery = {&lt;br /&gt;
	&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
	&#039;generator&#039;: &#039;categorymembers&#039;,&lt;br /&gt;
	&#039;gcmtitle&#039;: wgPageName,&lt;br /&gt;
	&#039;gcmnamespace&#039;: Namespace.IMAGE,&lt;br /&gt;
	&#039;gcmlimit&#039; : 1, &lt;br /&gt;
	&#039;prop&#039;: [ &#039;imageinfo&#039;, &#039;categories&#039;, &#039;revisions&#039; ],&lt;br /&gt;
	&#039;rvlimit&#039;: 20,&lt;br /&gt;
	&#039;iihistory&#039;: true,&lt;br /&gt;
	&#039;rvprop&#039;: [ &#039;user&#039;, &#039;size&#039;, &#039;flags&#039;, &#039;ids&#039;, &#039;comment&#039;, &#039;timestamp&#039; ],&lt;br /&gt;
	&#039;iiprop&#039;: [ &#039;timestamp&#039;, &#039;user&#039;, &#039;url&#039;, &#039;size&#039;, &#039;comment&#039; ]&lt;br /&gt;
};&lt;br /&gt;
Twinkle.imagetraverse.callback = function() {&lt;br /&gt;
	var Window = new SimpleWindow( 1200, 650 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Image traverse&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#imagetraverse&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.imagetraverse.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;button&#039;,&lt;br /&gt;
			label: &#039;Skip&#039;,&lt;br /&gt;
			event: Twinkle.imagetraverse.callbacks.skip&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;button&#039;,&lt;br /&gt;
			label: &#039;Delete&#039;,&lt;br /&gt;
			event: Twinkle.imagetraverse.callbacks.deleteMain&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;input&#039;,&lt;br /&gt;
			label: &#039;Reason&#039;,&lt;br /&gt;
			name: &#039;reason&#039;,&lt;br /&gt;
			value: &#039;Speedy deleted&#039;,&lt;br /&gt;
			size: 80&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;checkbox&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Remove image instances to the image&#039;,&lt;br /&gt;
					name: &#039;unlink&#039;,&lt;br /&gt;
					value: &#039;unlink&#039;,&lt;br /&gt;
					checked: true&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	var root = document.createElement( &#039;table&#039; );&lt;br /&gt;
&lt;br /&gt;
	root.style.background = &#039;transparent&#039;;&lt;br /&gt;
	root.style.height = &#039;780px&#039;;&lt;br /&gt;
	var row = root.appendChild( document.createElement( &#039;tr&#039; ) );&lt;br /&gt;
	var options = row.appendChild(  document.createElement( &#039;td&#039; ) );&lt;br /&gt;
	options.setAttribute( &#039;colspan&#039;, 2 );&lt;br /&gt;
	var rendered = form.render();&lt;br /&gt;
	options.appendChild( rendered );&lt;br /&gt;
&lt;br /&gt;
	rendered.root = root;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	options.style.borderBottom = &#039;1px solid gray&#039;;&lt;br /&gt;
	options.style.height = &#039;80px&#039;;&lt;br /&gt;
	row = root.appendChild( document.createElement( &#039;tr&#039; ) );&lt;br /&gt;
	var oview = row.appendChild(  document.createElement( &#039;td&#039; ) );&lt;br /&gt;
	var ohistbox = row.appendChild(  document.createElement( &#039;td&#039; ) );&lt;br /&gt;
	ohistbox.style.width = &#039;250px&#039;;&lt;br /&gt;
	ohistbox.style.verticalAlign = &#039;top&#039;;&lt;br /&gt;
	var histbox = ohistbox.appendChild(  document.createElement( &#039;div&#039; ) );&lt;br /&gt;
	histbox.style.overflow = &#039;auto&#039;;&lt;br /&gt;
	histbox.style.height = &#039;500px&#039;;&lt;br /&gt;
	oview.style.verticalAlign = &#039;top&#039;;&lt;br /&gt;
	var view = oview.appendChild(  document.createElement( &#039;div&#039; ) );&lt;br /&gt;
	view.style.height = &#039;500px&#039;;&lt;br /&gt;
	view.style.overflow = &#039;auto&#039;;&lt;br /&gt;
	row = root.appendChild( document.createElement( &#039;tr&#039; ) );&lt;br /&gt;
	var ostatus = row.appendChild(  document.createElement( &#039;td&#039; ) );&lt;br /&gt;
	ostatus.style.borderTop = &#039;1px solid gray&#039;;&lt;br /&gt;
	ostatus.setAttribute( &#039;colspan&#039;, 2 );&lt;br /&gt;
	var status = ostatus.appendChild(  document.createElement( &#039;div&#039; ) );&lt;br /&gt;
	ostatus.style.verticalAlign = &#039;top&#039;;&lt;br /&gt;
	status.style.height = &#039;180px&#039;;&lt;br /&gt;
	status.style.overflow = &#039;auto&#039;;&lt;br /&gt;
	Wikipedia.actionCompleted.event = function() {}; // just avoid it&lt;br /&gt;
	var wikipedia_api = new Wikipedia.api( &#039;Grabbing images&#039;, Twinkle.imagetraverse.basequery, Twinkle.imagetraverse.callbacks.main );&lt;br /&gt;
	wikipedia_api.params = { root:root, view:view, histbox:histbox, status:status, Window:Window };&lt;br /&gt;
	root.params = wikipedia_api.params;&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
&lt;br /&gt;
	Status.init( status );&lt;br /&gt;
	Window.setContent( root );&lt;br /&gt;
	Window.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.imagetraverse.callback.evaluate = function() {&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function make_wikilink( page, title, oldid, diff ) {&lt;br /&gt;
	var query = {&lt;br /&gt;
		&#039;title&#039;: page,&lt;br /&gt;
		&#039;diff&#039;: diff,&lt;br /&gt;
		&#039;oldid&#039;: oldid&lt;br /&gt;
	};&lt;br /&gt;
	var url = wgScriptPath + &#039;/index.php?&#039; + QueryString.create( query );&lt;br /&gt;
	var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
	a.setAttribute( &#039;href&#039;, url );&lt;br /&gt;
	a.setAttribute( &#039;title&#039;, page );&lt;br /&gt;
	a.appendChild( document.createTextNode( title ) );&lt;br /&gt;
	return a;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Twinkle.imagetraverse.callbacks = {&lt;br /&gt;
	main: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
&lt;br /&gt;
		var image = xmlDoc.evaluate( &#039;//pages/page/@title&#039;, xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;&lt;br /&gt;
&lt;br /&gt;
		if( !image ) {&lt;br /&gt;
			alert( &#039;no more images&#039; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		var next = xmlDoc.evaluate( &#039;//query-continue/categorymembers/@gcmcontinue&#039;, xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;&lt;br /&gt;
		var pagehistory = xmlDoc.evaluate( &#039;//pages/page/revisions/rev&#039;, xmlDoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );&lt;br /&gt;
		var filehistory = xmlDoc.evaluate( &#039;//pages/page/imageinfo/ii&#039;, xmlDoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );&lt;br /&gt;
		var categories = xmlDoc.evaluate( &#039;//pages/page/categories/cl&#039;, xmlDoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );&lt;br /&gt;
&lt;br /&gt;
		var pagehistorylist = document.createElement( &#039;ul&#039; );&lt;br /&gt;
		var filehistorylist = document.createElement( &#039;ul&#039; );&lt;br /&gt;
		var categorylist = document.createElement( &#039;ul&#039; );&lt;br /&gt;
&lt;br /&gt;
		var entry = document.createElement( &#039;li&#039; );&lt;br /&gt;
&lt;br /&gt;
		var i, cur, tmp, link;&lt;br /&gt;
		for( i = 0; i &amp;lt; pagehistory.snapshotLength; ++i ) {&lt;br /&gt;
			cur = pagehistory.snapshotItem(i);&lt;br /&gt;
			tmp = entry.cloneNode(false);&lt;br /&gt;
			tmp.appendChild( make_wikilink( image, cur.getAttribute( &#039;timestamp&#039; ), cur.getAttribute( &#039;revid&#039; ) ) );&lt;br /&gt;
			tmp.appendChild( document.createTextNode( &#039; &#039; ) );&lt;br /&gt;
			tmp.appendChild( make_wikilink( &#039;User:&#039; + cur.getAttribute( &#039;user&#039; ), cur.getAttribute( &#039;user&#039; ) ) );&lt;br /&gt;
			tmp.appendChild( document.createTextNode( &#039; (&#039; + ( new Bytes( cur.getAttribute( &#039;size&#039; ) ) ).toString() + &#039;) (&#039; ) );&lt;br /&gt;
			tmp.appendChild( document.createElement( &#039;em&#039; ) ).appendChild(document.createTextNode( cur.getAttribute( &#039;comment&#039; ) ) );&lt;br /&gt;
			tmp.appendChild( document.createTextNode( &#039;)&#039; ) );&lt;br /&gt;
			pagehistorylist.appendChild( tmp );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		for( i = 0; i &amp;lt; filehistory.snapshotLength; ++i ) {&lt;br /&gt;
			cur = filehistory.snapshotItem(i);&lt;br /&gt;
			tmp = entry.cloneNode(false);&lt;br /&gt;
			link = document.createElement( &#039;a&#039; );&lt;br /&gt;
			link.setAttribute( &#039;href&#039;, cur.getAttribute( &#039;url&#039; ) );&lt;br /&gt;
			link.appendChild( document.createTextNode( cur.getAttribute( &#039;timestamp&#039; ) ) );&lt;br /&gt;
			tmp.appendChild( link );&lt;br /&gt;
			tmp.appendChild( document.createTextNode( &#039; &#039; ) );&lt;br /&gt;
			tmp.appendChild( make_wikilink( &#039;User:&#039; + cur.getAttribute( &#039;user&#039; ), cur.getAttribute( &#039;user&#039; ) ) );&lt;br /&gt;
			tmp.appendChild( document.createTextNode( &#039; (&#039; + ( new Bytes( cur.getAttribute( &#039;size&#039; ) ) ).toString() + &#039;) (&#039; ) );&lt;br /&gt;
			tmp.appendChild( document.createElement( &#039;em&#039; ) ).appendChild(document.createTextNode( cur.getAttribute( &#039;comment&#039; ) ) );&lt;br /&gt;
			tmp.appendChild( document.createTextNode( &#039;)&#039; ) );&lt;br /&gt;
			filehistorylist.appendChild( tmp );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for( i = 0; i &amp;lt; categories.snapshotLength; ++i ) {&lt;br /&gt;
			cur = categories.snapshotItem(i);&lt;br /&gt;
			tmp = entry.cloneNode(false);&lt;br /&gt;
			tmp.appendChild( make_wikilink( cur.getAttribute( &#039;title&#039; ), cur.getAttribute( &#039;title&#039; ).replace( /Category:/, &#039;&#039; ) ) );&lt;br /&gt;
			categorylist.appendChild( tmp );&lt;br /&gt;
		}&lt;br /&gt;
		self.params.next = next;&lt;br /&gt;
		self.params.image = image;&lt;br /&gt;
		var hist = self.params.histbox;&lt;br /&gt;
		while( hist.hasChildNodes() ) {&lt;br /&gt;
			hist.removeChild( hist.lastChild );&lt;br /&gt;
		}&lt;br /&gt;
		hist.appendChild( document.createElement( &#039;h2&#039; ) ).appendChild( document.createTextNode( &#039;Image usage&#039; ) );&lt;br /&gt;
		var placeholder = hist.appendChild( document.createElement( &#039;div&#039; ));&lt;br /&gt;
		placeholder.appendChild( document.createTextNode( &#039;Grabbing data...&#039; ) );&lt;br /&gt;
		self.params.imageusageplaceholder = placeholder;&lt;br /&gt;
		hist.appendChild( document.createElement( &#039;h2&#039; ) ).appendChild( document.createTextNode( &#039;Page history&#039; ) );&lt;br /&gt;
		hist.appendChild( pagehistorylist );&lt;br /&gt;
		hist.appendChild( document.createElement( &#039;h2&#039; ) ).appendChild( document.createTextNode( &#039;File history&#039; ) );&lt;br /&gt;
		hist.appendChild( filehistorylist );&lt;br /&gt;
		hist.appendChild( document.createElement( &#039;h2&#039; ) ).appendChild( document.createTextNode( &#039;Categories&#039; ) );&lt;br /&gt;
		hist.appendChild( categorylist );&lt;br /&gt;
&lt;br /&gt;
		var query = {&lt;br /&gt;
			&#039;action&#039;: &#039;parse&#039;,&lt;br /&gt;
			&#039;title&#039;: image,&lt;br /&gt;
			&#039;text&#039;: &#039;{{Wikipedia:WikiProject User scripts/Scripts/Twinkle/Template|&#039; + image.replace(/^File:/, &#039;&#039;) + &#039;}}&#039;,&lt;br /&gt;
			&#039;prop&#039;: &#039;text&#039;&lt;br /&gt;
		};&lt;br /&gt;
		var wikipedia_api = new Wikipedia.api( &#039;Rendering&#039;, query, Twinkle.imagetraverse.callbacks.render1 );&lt;br /&gt;
		wikipedia_api.params = self.params;&lt;br /&gt;
		wikipedia_api.post();&lt;br /&gt;
	},&lt;br /&gt;
	render1: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var html = xmlDoc.evaluate( &#039;//parse/text&#039;, xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;&lt;br /&gt;
		self.params.view.innerHTML = html; // gah!&lt;br /&gt;
&lt;br /&gt;
		// add instance usage&lt;br /&gt;
		var query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;list&#039;: &#039;imageusage&#039;,&lt;br /&gt;
			&#039;iutitle&#039;: self.params.image,&lt;br /&gt;
			&#039;iulimit&#039;: 20,&lt;br /&gt;
			&#039;iufilterredir&#039;: &#039;nonredirects&#039;&lt;br /&gt;
		};&lt;br /&gt;
		var wikipedia_api = new Wikipedia.api( &#039;Rendering&#039;, query, Twinkle.imagetraverse.callbacks.render2 );&lt;br /&gt;
		wikipedia_api.params = self.params;&lt;br /&gt;
		wikipedia_api.post();&lt;br /&gt;
	},&lt;br /&gt;
	render2: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var usage = xmlDoc.evaluate( &#039;//imageusage/iu&#039;, xmlDoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );&lt;br /&gt;
&lt;br /&gt;
		var usagelist = document.createElement( &#039;ul&#039; );&lt;br /&gt;
&lt;br /&gt;
		var entry = document.createElement( &#039;li&#039; );&lt;br /&gt;
&lt;br /&gt;
		for( var i = 0; i &amp;lt; usage.snapshotLength; ++i ) {&lt;br /&gt;
			var cur = usage.snapshotItem(i);&lt;br /&gt;
			var tmp = entry.cloneNode(false);&lt;br /&gt;
			tmp.appendChild( make_wikilink( cur.getAttribute( &#039;title&#039; ), cur.getAttribute( &#039;title&#039; ) ) );&lt;br /&gt;
			usagelist.appendChild( tmp );&lt;br /&gt;
		}&lt;br /&gt;
		var hist = self.params.histbox;&lt;br /&gt;
		hist.replaceChild( usagelist, self.params.imageusageplaceholder );&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
	next: function( params ) {&lt;br /&gt;
		Twinkle.imagetraverse.basequery.gcmcontinue = params.next;&lt;br /&gt;
		var wikipedia_api = new Wikipedia.api( &#039;Grabbing images&#039;, Twinkle.imagetraverse.basequery, Twinkle.imagetraverse.callbacks.main );&lt;br /&gt;
		wikipedia_api.params = params;&lt;br /&gt;
		wikipedia_api.post();&lt;br /&gt;
	},&lt;br /&gt;
	skip: function( event ) {&lt;br /&gt;
		var form = event.target.form;&lt;br /&gt;
		var params = form.root.params;&lt;br /&gt;
		Twinkle.imagetraverse.callbacks.next( params );&lt;br /&gt;
		Status.info( &#039;Skipped&#039;, params.image );&lt;br /&gt;
	},&lt;br /&gt;
	deleteMain: function( event ) {&lt;br /&gt;
		var form = event.target.form;&lt;br /&gt;
		var params = form.root.params;&lt;br /&gt;
		params.reason = form.reason.value;&lt;br /&gt;
&lt;br /&gt;
		var query;&lt;br /&gt;
		if( form.unlink.checked ) {&lt;br /&gt;
			query = {&lt;br /&gt;
				&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
				&#039;list&#039;: &#039;imageusage&#039;,&lt;br /&gt;
				&#039;titles&#039;: params.image,&lt;br /&gt;
				&#039;iulimit&#039;: 5000,&lt;br /&gt;
				&#039;iufilterredir&#039;: &#039;nonredirects&#039;&lt;br /&gt;
			};&lt;br /&gt;
			var wikipedia_api = new Wikipedia.api( &#039;Grabbing image links&#039;, query, Twinkle.imagetraverse.callbacks.unlinkImageInstancesMain );&lt;br /&gt;
			wikipedia_api.params = params;&lt;br /&gt;
&lt;br /&gt;
			wikipedia_api.post();&lt;br /&gt;
		}&lt;br /&gt;
		var imagepage = new Wikipedia.page( params.image, &#039;Deleting image&#039;);&lt;br /&gt;
		imagepage.setEditSummary( &amp;quot;Deleted because \&amp;quot;&amp;quot; + params.reason + &amp;quot;\&amp;quot;.&amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
		imagepage.setCallbackParameters({&#039;image&#039;: params.image});&lt;br /&gt;
		imagepage.deletePage();&lt;br /&gt;
	},&lt;br /&gt;
	unlinkImageInstancesMain: function( self ) {&lt;br /&gt;
		var xmlDoc = self.responseXML;&lt;br /&gt;
		var instances = [];&lt;br /&gt;
		$(xmlDoc).find(&#039;imageusage iu&#039;).each(function(){&lt;br /&gt;
			instances.push($(this).attr(&#039;title&#039;));&lt;br /&gt;
		});&lt;br /&gt;
		if( instances.length === 0 ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$.each( instances, function(k,title) {&lt;br /&gt;
			page = new Wikipedia.page(title, &amp;quot;Unlinking instances on &amp;quot; + title);&lt;br /&gt;
			page.setFollowRedirect(true);&lt;br /&gt;
			page.setCallbackParameters({&#039;image&#039;: self.params.image, &#039;reason&#039;: self.params.reason});&lt;br /&gt;
			page.load(Twinkle.imagetraverse.callbacks.unlinkImageInstances);&lt;br /&gt;
&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
	unlinkImageInstances: function( self ) {&lt;br /&gt;
		var params = self.getCallbackParameters();&lt;br /&gt;
		var statelem = self.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
		var image = params.image.replace( /^(?:Image|File):/, &#039;&#039; );&lt;br /&gt;
		var old_text = self.getPageText();&lt;br /&gt;
		var wikiPage = new Mediawiki.Page( old_text );&lt;br /&gt;
		wikiPage.commentOutImage( image , &#039;Commented out because image was deleted&#039; );&lt;br /&gt;
		var text = wikiPage.getText();&lt;br /&gt;
&lt;br /&gt;
		if( text === old_text ) {&lt;br /&gt;
			statelem.error( &#039;failed to unlink image &#039; + image +&#039; from &#039; + self.getPageName() );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		self.setPageText(text);&lt;br /&gt;
		self.setEditSummary(&#039;Removing instance of file &#039; + image + &amp;quot; that has been deleted because \&amp;quot;&amp;quot; + params.reason + &amp;quot;\&amp;quot;)&amp;quot; + &amp;quot;; &amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
		self.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
		self.save();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinkleprod.js: PROD module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;PROD&amp;quot;)&lt;br /&gt;
 * Active on:              Existing articles&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.prod = function twinkleprod() {&lt;br /&gt;
	if( mw.config.get(&#039;wgNamespaceNumber&#039;) !== 0 || !mw.config.get(&#039;wgCurRevisionId&#039;) ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if (twinkleUserAuthorized) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;PROD&amp;quot;, &amp;quot;tw-prod&amp;quot;, &amp;quot;Propose deletion via MP:PROD&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.prod.callback);&lt;br /&gt;
	} else {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &#039;PROD&#039;, &#039;tw-prod&#039;, &#039;Propose deletion via MP:PROD&#039;, &#039;&#039;)).click(function() {&lt;br /&gt;
			alert(&amp;quot;Your account is too new to use Twinkle.&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.prod.callback = function twinkleprodCallback() {&lt;br /&gt;
	Twinkle.prod.defaultReason = Twinkle.getPref(&#039;prodReasonDefault&#039;);&lt;br /&gt;
&lt;br /&gt;
	var Window = new SimpleWindow( 800, 410 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Proposed deletion (PROD)&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Proposed deletion policy&amp;quot;, &amp;quot;MP:PROD&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;BLP PROD policy&amp;quot;, &amp;quot;MP:BLPPROD&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#prod&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.prod.callback.evaluate );&lt;br /&gt;
	&lt;br /&gt;
	var field = form.append( {&lt;br /&gt;
			type: &#039;field&#039;,&lt;br /&gt;
			label: &#039;PROD type&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	field.append( {&lt;br /&gt;
			type: &#039;radio&#039;,&lt;br /&gt;
			name: &#039;prodtype&#039;,&lt;br /&gt;
			event: Twinkle.prod.callback.prodtypechanged,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;PROD (proposed deletion)&#039;,&lt;br /&gt;
					value: &#039;prod&#039;,&lt;br /&gt;
					checked: true,&lt;br /&gt;
					tooltip: &#039;Normal proposed deletion, per [[MP:PROD]]&#039;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;BLP PROD (proposed deletion of unsourced BLPs)&#039;,&lt;br /&gt;
					value: &#039;prodblp&#039;,&lt;br /&gt;
					tooltip: &#039;Proposed deletion of new, completely unsourced biographies of living persons, per [[MP:BLPPROD]]&#039;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;field&#039;,&lt;br /&gt;
			label:&#039;Work area&#039;,&lt;br /&gt;
			name: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	form.append( { type:&#039;submit&#039;, label:&#039;Propose deletion&#039; } );	&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent( result );&lt;br /&gt;
	Window.display();&lt;br /&gt;
	&lt;br /&gt;
	// fake a change event on the first prod type radio, to initialize the type-dependent controls&lt;br /&gt;
	var evt = document.createEvent( &amp;quot;Event&amp;quot; );&lt;br /&gt;
	evt.initEvent( &#039;change&#039;, true, true );&lt;br /&gt;
	result.prodtype[0].dispatchEvent( evt );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.prod.callback.prodtypechanged = function(event) {&lt;br /&gt;
  //prepare frame for prod type dependant controls&lt;br /&gt;
	var field = new QuickForm.element( {&lt;br /&gt;
			type: &#039;field&#039;,&lt;br /&gt;
			label: &#039;Parameters&#039;,&lt;br /&gt;
			name: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	// create prod type dependant controls&lt;br /&gt;
	switch( event.target.values )&lt;br /&gt;
	{&lt;br /&gt;
		case &#039;prod&#039;:&lt;br /&gt;
			field.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Notify page creator if possible&#039;,&lt;br /&gt;
							value: &#039;notify&#039;,&lt;br /&gt;
							name: &#039;notify&#039;,&lt;br /&gt;
							tooltip: &amp;quot;A notification template will be placed on the creator&#039;s talk page if this is true.&amp;quot;,&lt;br /&gt;
							checked: true&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				}&lt;br /&gt;
			);&lt;br /&gt;
			field.append( {&lt;br /&gt;
					type: &#039;textarea&#039;,&lt;br /&gt;
					name: &#039;reason&#039;,&lt;br /&gt;
					label: &#039;Reason for proposed deletion:&#039;,&lt;br /&gt;
					value: Twinkle.prod.defaultReason&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case &#039;prodblp&#039;:&lt;br /&gt;
		  // first, remember the prod value that the user entered in the textarea, in case he wants to switch back. We can abuse the config field for that.&lt;br /&gt;
		  if (event.target.form.reason) {&lt;br /&gt;
				Twinkle.prod.defaultReason = event.target.form.reason.value;&lt;br /&gt;
			}&lt;br /&gt;
		&lt;br /&gt;
			field.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Notify page creator if possible&#039;,&lt;br /&gt;
							value: &#039;notify&#039;,&lt;br /&gt;
							name: &#039;notify&#039;,&lt;br /&gt;
							tooltip: &#039;Creator of article has to be notified.&#039;,&lt;br /&gt;
							checked: true,&lt;br /&gt;
							disabled: true&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				}&lt;br /&gt;
			);&lt;br /&gt;
			//temp warning, can be removed down the line once BLPPROD is more established. Amalthea, May 2010.&lt;br /&gt;
			var boldtext = document.createElement(&#039;b&#039;);&lt;br /&gt;
			boldtext.appendChild(document.createTextNode(&#039;Please note that only unsourced biographies of living persons are eligible for this tag, narrowly construed.&#039;));&lt;br /&gt;
			field.append({&lt;br /&gt;
				type: &#039;div&#039;,&lt;br /&gt;
				label: boldtext&lt;br /&gt;
			});&lt;br /&gt;
			if (mw.config.get(&#039;wgArticleId&#039;) &amp;lt; 26596183)&lt;br /&gt;
			{&lt;br /&gt;
				field.append({&lt;br /&gt;
					type: &#039;header&#039;,&lt;br /&gt;
					label: &#039;It appears that this article was created before March 18, 2010, and is thus ineligible for a BLP PROD. Please make sure that this is not the case, or use normal PROD instead.&#039;&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
			&lt;br /&gt;
		default:&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	event.target.form.replaceChild( field.render(), $(event.target.form).find(&#039;fieldset[name=&amp;quot;work_area&amp;quot;]&#039;)[0] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.prod.callbacks = {&lt;br /&gt;
	main: function(pageobj) {&lt;br /&gt;
		var statelem = pageobj.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
		if( !pageobj.exists() ) {&lt;br /&gt;
			statelem.error( &amp;quot;It seems that the page doesn&#039;t exist.  Perhaps it has already been deleted.&amp;quot; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var text = pageobj.getPageText();&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
		var tag_re = /(\{\{(?:db-?|delete|[aitcmrs]fd|md1)[^{}]*?\|?[^{}]*?\}\})/i;&lt;br /&gt;
		if( tag_re.test( text ) ) {&lt;br /&gt;
			statelem.warn( &#039;Page already tagged with a deletion template, aborting procedure&#039; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Remove tags that become superfluous with this action&lt;br /&gt;
		text = text.replace(/\{\{\s*(New unreviewed article|Userspace draft)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/ig, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		var prod_re = /\{\{\s*(?:dated prod|dated prod blp|Prod blp\/dated|Proposed deletion\/dated)\s*\|(?:\{\{[^\{\}]*\}\}|[^\}\{])*\}\}/i;&lt;br /&gt;
		var summaryText;&lt;br /&gt;
		if( !prod_re.test( text ) ) {&lt;br /&gt;
			// Notification to first contributor&lt;br /&gt;
			if( params.usertalk ) {&lt;br /&gt;
				var thispage = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
				thispage.setCallbackParameters(params);&lt;br /&gt;
				thispage.lookupCreator(Twinkle.prod.callbacks.userNotification);&lt;br /&gt;
			}&lt;br /&gt;
			// If not notifying, log this PROD&lt;br /&gt;
			else if( Twinkle.getPref(&#039;logProdPages&#039;) ) {&lt;br /&gt;
				Twinkle.prod.callbacks.addToLog(params, null);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			summaryText = &amp;quot;Proposing article for deletion per [[MP:&amp;quot; + (params.blp ? &amp;quot;BLP&amp;quot; : &amp;quot;&amp;quot;) + &amp;quot;PROD]].&amp;quot;;&lt;br /&gt;
			text = &amp;quot;{{subst:prod&amp;quot; + (params.blp ? &amp;quot; blp&amp;quot; : (&amp;quot;|1=&amp;quot; + params.reason)) + &amp;quot;}}\n&amp;quot; + text;&lt;br /&gt;
		}&lt;br /&gt;
		else {  // already tagged for PROD, so try endorsing it&lt;br /&gt;
			var prod2_re = /\{\{(?:Proposed deletion endorsed|prod-?2).*?\}\}/;&lt;br /&gt;
			if( prod2_re.test( text ) ) {&lt;br /&gt;
				statelem.warn( &#039;Page already tagged with {{prod}} and {{prod-2}} templates, aborting procedure&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			var confirmtext = &amp;quot;A {{prod}} tag was already found on this article. \nWould you like to add a {{prod-2}} (PROD endorsement) tag with your explanation?&amp;quot;;&lt;br /&gt;
			if (params.blp) {&lt;br /&gt;
				confirmtext = &amp;quot;A non-BLP {{prod}} tag was found on this article.  \nWould you like to add a {{prod-2}} (PROD endorsement) tag with explanation \&amp;quot;unsourced BLP\&amp;quot;?&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			if( !confirm( confirmtext ) ) {&lt;br /&gt;
				statelem.warn( &#039;Aborted per user request&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			summaryText = &amp;quot;Endorsing proposed deletion per [[MP:&amp;quot; + (params.blp ? &amp;quot;BLP&amp;quot; : &amp;quot;&amp;quot;) + &amp;quot;PROD]].&amp;quot;;&lt;br /&gt;
			text = text.replace( prod_re, text.match( prod_re ) + &amp;quot;\n{{prod-2|1=&amp;quot; + (params.blp ? &amp;quot;article is a [[MP:BLPPROD|biography of a living person with no sources]]&amp;quot; : params.reason) + &amp;quot;}}\n&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
			if( Twinkle.getPref(&#039;logProdPages&#039;) ) {&lt;br /&gt;
				params.logEndorsing = true;&lt;br /&gt;
				Twinkle.prod.callbacks.addToLog(params);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setEditSummary(summaryText + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
		pageobj.setWatchlist(Twinkle.getPref(&#039;watchProdPages&#039;));&lt;br /&gt;
		pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
		pageobj.save();&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	userNotification: function(pageobj) {&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
		var initialContrib = pageobj.getCreator();&lt;br /&gt;
		var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, &amp;quot;Notifying initial contributor (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
		var notifytext = &amp;quot;\n{{subst:prodwarning&amp;quot; + (params.blp ? &amp;quot;BLP&amp;quot; : &amp;quot;&amp;quot;) + &amp;quot;|1=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;|concern=&amp;quot; + params.reason + &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
		usertalkpage.setAppendText(notifytext);&lt;br /&gt;
		usertalkpage.setEditSummary(&amp;quot;Notification: proposed deletion of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
		usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
		usertalkpage.setFollowRedirect(true);&lt;br /&gt;
		usertalkpage.append();&lt;br /&gt;
		if (Twinkle.getPref(&#039;logProdPages&#039;)) {&lt;br /&gt;
			params.logInitialContrib = initialContrib;&lt;br /&gt;
			Twinkle.prod.callbacks.addToLog(params);&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	addToLog: function(params) {&lt;br /&gt;
		var wikipedia_page = new Wikipedia.page(&amp;quot;User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;/&amp;quot; + Twinkle.getPref(&#039;prodLogPageName&#039;), &amp;quot;Adding entry to userspace log&amp;quot;);&lt;br /&gt;
		wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
		wikipedia_page.load(Twinkle.prod.callbacks.saveLog);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	saveLog: function(pageobj) {&lt;br /&gt;
		var text = pageobj.getPageText();&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
		// add blurb if log page doesn&#039;t exist&lt;br /&gt;
		if (!pageobj.exists()) {&lt;br /&gt;
			text =&lt;br /&gt;
				&amp;quot;This is a log of all [[MP:PROD|proposed deletion]] tags applied or endorsed by this user using [[MP:TW|Twinkle]]&#039;s PROD module.\n\n&amp;quot; +&lt;br /&gt;
				&amp;quot;If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and &amp;quot; +&lt;br /&gt;
				&amp;quot;nominate this page for speedy deletion under [[MP:CSD#U1|CSD U1]].\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// create monthly header&lt;br /&gt;
		var date = new Date();&lt;br /&gt;
		var headerRe = new RegExp(&amp;quot;^==+\\s*&amp;quot; + date.getUTCMonthName() + &amp;quot;\\s+&amp;quot; + date.getUTCFullYear() + &amp;quot;\\s*==+&amp;quot;, &amp;quot;m&amp;quot;);&lt;br /&gt;
		if (!headerRe.exec(text)) {&lt;br /&gt;
			text += &amp;quot;\n\n=== &amp;quot; + date.getUTCMonthName() + &amp;quot; &amp;quot; + date.getUTCFullYear() + &amp;quot; ===&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var summarytext;&lt;br /&gt;
		if (params.logEndorsing) {&lt;br /&gt;
			text += &amp;quot;\n# [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]]: endorsed &amp;quot; + (params.blp ? &amp;quot;BLP &amp;quot; : &amp;quot;&amp;quot;) + &amp;quot;PROD. ~~~~~&amp;quot;;&lt;br /&gt;
			if (params.reason) {&lt;br /&gt;
				text += &amp;quot;\n#* &#039;&#039;&#039;Reason&#039;&#039;&#039;: &amp;quot; + params.reason + &amp;quot;\n&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			summarytext = &amp;quot;Logging endorsement of PROD nomination of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot;;&lt;br /&gt;
		} else {&lt;br /&gt;
			text += &amp;quot;\n# [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]]: &amp;quot; + (params.blp ? &amp;quot;BLP &amp;quot; : &amp;quot;&amp;quot;) + &amp;quot;PROD&amp;quot;;&lt;br /&gt;
			if (params.logInitialContrib) {&lt;br /&gt;
				text += &amp;quot;; notified {{user|&amp;quot; + params.logInitialContrib + &amp;quot;}}&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			text += &amp;quot; ~~~~~\n&amp;quot;;&lt;br /&gt;
			if (!params.blp) {&lt;br /&gt;
				text += &amp;quot;#* &#039;&#039;&#039;Reason&#039;&#039;&#039;: &amp;quot; + params.reason + &amp;quot;\n&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			summarytext = &amp;quot;Logging PROD nomination of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setEditSummary(summarytext + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
		pageobj.setCreateOption(&amp;quot;recreate&amp;quot;);&lt;br /&gt;
		pageobj.save();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.prod.callback.evaluate = function twinkleprodCallbackEvaluate(e) {&lt;br /&gt;
	mw.config.set(&#039;wgPageName&#039;, mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;));  // for queen/king/whatever and country!&lt;br /&gt;
	var form = e.target;&lt;br /&gt;
	var prodtype;&lt;br /&gt;
&lt;br /&gt;
	var prodtypes = form.prodtype;&lt;br /&gt;
	for( var i = 0; i &amp;lt; prodtypes.length; i++ )&lt;br /&gt;
	{&lt;br /&gt;
		if( !prodtypes[i].checked ) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		prodtype = prodtypes[i].values;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var params = {&lt;br /&gt;
		usertalk: form.notify.checked,&lt;br /&gt;
		blp: prodtype==&#039;prodblp&#039;,&lt;br /&gt;
		reason: prodtype==&#039;prodblp&#039; ? &#039;&#039; : form.reason.value  // using an empty string here as fallback will help with prod-2.&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( form );&lt;br /&gt;
&lt;br /&gt;
	if (prodtype === &#039;prodblp&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgArticleId&#039;) &amp;lt; 26596183)&lt;br /&gt;
	{&lt;br /&gt;
		if (!confirm( &amp;quot;It appears that this article was created before March 18, 2010, and is thus ineligible for a BLP PROD. Do you want to continue tagging it?&amp;quot; ))&lt;br /&gt;
		{&lt;br /&gt;
			Status.warn( &#039;Notice&#039;, &#039;Aborting per user input.&#039; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Tagging complete&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Tagging page&amp;quot;);&lt;br /&gt;
	wikipedia_page.setFollowRedirect(true);  // for NPP, and also because redirects are ineligible for PROD&lt;br /&gt;
	wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
	wikipedia_page.load(Twinkle.prod.callbacks.main);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinkleprotect.js: Protect/RPP module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;PP&amp;quot;/&amp;quot;RPP&amp;quot;)&lt;br /&gt;
 * Active on:              Non-special pages&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect = function twinkleprotect() {&lt;br /&gt;
	if ( mw.config.get(&#039;wgNamespaceNumber&#039;) &amp;lt; 0 ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( userIsInGroup( &#039;sysop&#039; ) ) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;PP&amp;quot;, &amp;quot;tw-rpp&amp;quot;, &amp;quot;Protect page&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.protect.callback);&lt;br /&gt;
	} else if (twinkleUserAuthorized) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;RPP&amp;quot;, &amp;quot;tw-rpp&amp;quot;, &amp;quot;Request page protection&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.protect.callback);&lt;br /&gt;
	} else {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &#039;RPP&#039;, &#039;tw-rpp&#039;, &#039;Request page protection&#039;, &#039;&#039;)).click(function() {&lt;br /&gt;
			alert(&amp;quot;Your account is too new to use Twinkle.&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.callback = function twinkleprotectCallback() {&lt;br /&gt;
	var Window = new SimpleWindow( 620, 530 );&lt;br /&gt;
	Window.setTitle( userIsInGroup( &#039;sysop&#039; ) ? &amp;quot;Apply, request or tag page protection&amp;quot; : &amp;quot;Request or tag page protection&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Protection templates&amp;quot;, &amp;quot;Template:Protection templates&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Protection policy&amp;quot;, &amp;quot;MP:PROT&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#protect&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.protect.callback.evaluate );&lt;br /&gt;
	var actionfield = form.append( {&lt;br /&gt;
			type: &#039;field&#039;,&lt;br /&gt;
			label: &#039;Type of action&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	if( userIsInGroup( &#039;sysop&#039; ) ) {&lt;br /&gt;
		actionfield.append( {&lt;br /&gt;
				type: &#039;radio&#039;,&lt;br /&gt;
				name: &#039;actiontype&#039;,&lt;br /&gt;
				event: Twinkle.protect.callback.changeAction,&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Protect page&#039;,&lt;br /&gt;
						value: &#039;protect&#039;,&lt;br /&gt;
						tooltip: &#039;Apply actual protection to the page.&#039;,&lt;br /&gt;
						checked: true&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			} );&lt;br /&gt;
	}&lt;br /&gt;
	actionfield.append( {&lt;br /&gt;
			type: &#039;radio&#039;,&lt;br /&gt;
			name: &#039;actiontype&#039;,&lt;br /&gt;
			event: Twinkle.protect.callback.changeAction,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Request page protection&#039;,&lt;br /&gt;
					value: &#039;request&#039;,&lt;br /&gt;
					tooltip: &#039;If you want to request protection via MP:RPP&#039; + (userIsInGroup(&#039;sysop&#039;) ? &#039; instead of doing the protection by yourself.&#039; : &#039;.&#039;),&lt;br /&gt;
					checked: !userIsInGroup(&#039;sysop&#039;)&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Tag page with protection template&#039;,&lt;br /&gt;
					value: &#039;tag&#039;,&lt;br /&gt;
					tooltip: &#039;If the protecting admin forgot to apply a protection template, or you have just protected the page without tagging, you can use this to apply the appropriate protection tag.&#039;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	form.append({ type: &#039;field&#039;, label: &#039;Preset&#039;, name: &#039;field_preset&#039; });&lt;br /&gt;
	form.append({ type: &#039;field&#039;, label: &#039;1&#039;, name: &#039;field1&#039; });&lt;br /&gt;
	form.append({ type: &#039;field&#039;, label: &#039;2&#039;, name: &#039;field2&#039; });&lt;br /&gt;
&lt;br /&gt;
	form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent( result );&lt;br /&gt;
	Window.display();&lt;br /&gt;
&lt;br /&gt;
	// We must init the controls&lt;br /&gt;
	var evt = document.createEvent( &amp;quot;Event&amp;quot; );&lt;br /&gt;
	evt.initEvent( &#039;change&#039;, true, true );&lt;br /&gt;
	result.actiontype[0].dispatchEvent( evt );&lt;br /&gt;
&lt;br /&gt;
	// reduce vertical height of dialog&lt;br /&gt;
	$(&#039;select[name=&amp;quot;editlevel&amp;quot;], select[name=&amp;quot;editexpiry&amp;quot;], select[name=&amp;quot;moveexpiry&amp;quot;], select[name=&amp;quot;movelevel&amp;quot;], select[name=&amp;quot;createexpiry&amp;quot;], select[name=&amp;quot;createlevel&amp;quot;]&#039;).&lt;br /&gt;
		parent().css({ display: &#039;inline-block&#039;, marginRight: &#039;0.5em&#039; });&lt;br /&gt;
&lt;br /&gt;
	// get current protection level asynchronously&lt;br /&gt;
	Wikipedia.actionCompleted.postfix = false;  // avoid Action: completed notice&lt;br /&gt;
	if (userIsInGroup(&#039;sysop&#039;)) {&lt;br /&gt;
		var query = {&lt;br /&gt;
			action: &#039;query&#039;,&lt;br /&gt;
			prop: &#039;info&#039;,&lt;br /&gt;
			inprop: &#039;protection&#039;,&lt;br /&gt;
			titles: mw.config.get(&#039;wgPageName&#039;)&lt;br /&gt;
		};&lt;br /&gt;
		Status.init($(&#039;div[name=&amp;quot;currentprot&amp;quot;] span&#039;).last()[0]);&lt;br /&gt;
		var statelem = new Status(&amp;quot;Current protection level&amp;quot;);&lt;br /&gt;
		var wpapi = new Wikipedia.api(&amp;quot;retrieving...&amp;quot;, query, Twinkle.protect.callback.protectionLevel, statelem);&lt;br /&gt;
		wpapi.post();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.protectionLevel = null;&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.callback.protectionLevel = function twinkleprotectCallbackProtectionLevel(apiobj) {&lt;br /&gt;
	var xml = apiobj.getXML();&lt;br /&gt;
	var result = [];&lt;br /&gt;
	$(xml).find(&#039;pr&#039;).each(function(index, pr) {&lt;br /&gt;
		var $pr = $(pr);&lt;br /&gt;
		var boldnode = document.createElement(&#039;b&#039;);&lt;br /&gt;
		boldnode.textContent = $pr.attr(&#039;type&#039;).toUpperCaseFirstChar() + &amp;quot;: &amp;quot; + $pr.attr(&#039;level&#039;);&lt;br /&gt;
		result.push(boldnode);&lt;br /&gt;
		if ($pr.attr(&#039;expiry&#039;) === &#039;infinity&#039;) {&lt;br /&gt;
			result.push(&amp;quot; (indefinite) &amp;quot;);&lt;br /&gt;
		} else {&lt;br /&gt;
			result.push(&amp;quot; (expires &amp;quot; + new Date($pr.attr(&#039;expiry&#039;)).toUTCString() + &amp;quot;) &amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if ($pr.attr(&#039;cascade&#039;) === &#039;&#039;) {&lt;br /&gt;
			result.push(&amp;quot;(cascading) &amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	if (!result.length) {&lt;br /&gt;
		var boldnode = document.createElement(&#039;b&#039;);&lt;br /&gt;
		boldnode.textContent = &amp;quot;no protection&amp;quot;;&lt;br /&gt;
		result.push(boldnode);&lt;br /&gt;
	}&lt;br /&gt;
	Twinkle.protect.protectionLevel = result;&lt;br /&gt;
	apiobj.statelem.info(result);&lt;br /&gt;
	window.setTimeout(function() { Wikipedia.actionCompleted.postfix = &amp;quot;completed&amp;quot;; }, 500);  // restore actionCompleted message&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.callback.changeAction = function twinkleprotectCallbackChangeAction(e) {&lt;br /&gt;
	var field_preset;&lt;br /&gt;
	var field1;&lt;br /&gt;
	var field2;&lt;br /&gt;
&lt;br /&gt;
	switch (e.target.values) {&lt;br /&gt;
		case &#039;protect&#039;:&lt;br /&gt;
			field_preset = new QuickForm.element({ type: &#039;field&#039;, label: &#039;Preset&#039;, name: &#039;field_preset&#039; });&lt;br /&gt;
			field_preset.append({&lt;br /&gt;
					type: &#039;select&#039;,&lt;br /&gt;
					name: &#039;category&#039;,&lt;br /&gt;
					label: &#039;Choose a preset:&#039;,&lt;br /&gt;
					event: Twinkle.protect.callback.changePreset,&lt;br /&gt;
					list: (mw.config.get(&#039;wgArticleId&#039;) ? Twinkle.protect.protectionTypes : Twinkle.protect.protectionTypesCreate)&lt;br /&gt;
				});&lt;br /&gt;
&lt;br /&gt;
			field2 = new QuickForm.element({ type: &#039;field&#039;, label: &#039;Protection options&#039;, name: &#039;field2&#039; });&lt;br /&gt;
			field2.append({ type: &#039;div&#039;, name: &#039;currentprot&#039;, label: &#039; &#039; });  // holds the current protection level, as filled out by the async callback&lt;br /&gt;
			// for existing pages&lt;br /&gt;
			if (mw.config.get(&#039;wgArticleId&#039;)) {&lt;br /&gt;
				field2.append({&lt;br /&gt;
						type: &#039;checkbox&#039;,&lt;br /&gt;
						name: &#039;editmodify&#039;,&lt;br /&gt;
						event: Twinkle.protect.formevents.editmodify,&lt;br /&gt;
						list: [&lt;br /&gt;
							{&lt;br /&gt;
								label: &#039;Modify edit protection&#039;,&lt;br /&gt;
								value: &#039;editmodify&#039;,&lt;br /&gt;
								tooltip: &#039;If this is turned off, the edit protection level, and expiry time, will be left as is.&#039;,&lt;br /&gt;
								checked: true&lt;br /&gt;
							}&lt;br /&gt;
						]&lt;br /&gt;
					});&lt;br /&gt;
				var editlevel = field2.append({&lt;br /&gt;
						type: &#039;select&#039;,&lt;br /&gt;
						name: &#039;editlevel&#039;,&lt;br /&gt;
						label: &#039;Edit protection:&#039;,&lt;br /&gt;
						event: Twinkle.protect.formevents.editlevel&lt;br /&gt;
					});&lt;br /&gt;
				editlevel.append({&lt;br /&gt;
						type: &#039;option&#039;,&lt;br /&gt;
						label: &#039;All&#039;,&lt;br /&gt;
						value: &#039;all&#039;&lt;br /&gt;
					});&lt;br /&gt;
				editlevel.append({&lt;br /&gt;
						type: &#039;option&#039;,&lt;br /&gt;
						label: &#039;Autoconfirmed&#039;,&lt;br /&gt;
						value: &#039;autoconfirmed&#039;&lt;br /&gt;
					});&lt;br /&gt;
				editlevel.append({&lt;br /&gt;
						type: &#039;option&#039;,&lt;br /&gt;
						label: &#039;Sysop&#039;,&lt;br /&gt;
						value: &#039;sysop&#039;,&lt;br /&gt;
						selected: true&lt;br /&gt;
					});&lt;br /&gt;
				field2.append({&lt;br /&gt;
						type: &#039;select&#039;,&lt;br /&gt;
						name: &#039;editexpiry&#039;,&lt;br /&gt;
						label: &#039;Expires:&#039;,&lt;br /&gt;
						event: function(e) {&lt;br /&gt;
							if (e.target.value === &#039;custom&#039;) {&lt;br /&gt;
								Twinkle.protect.doCustomExpiry(e.target);&lt;br /&gt;
							}&lt;br /&gt;
						},&lt;br /&gt;
						list: [&lt;br /&gt;
							{ label: &#039;1 hour&#039;, value: &#039;1 hour&#039; },&lt;br /&gt;
							{ label: &#039;2 hours&#039;, value: &#039;2 hours&#039; },&lt;br /&gt;
							{ label: &#039;3 hours&#039;, value: &#039;3 hours&#039; },&lt;br /&gt;
							{ label: &#039;6 hours&#039;, value: &#039;6 hours&#039; },&lt;br /&gt;
							{ label: &#039;12 hours&#039;, value: &#039;12 hours&#039; },&lt;br /&gt;
							{ label: &#039;1 day&#039;, value: &#039;1 day&#039; },&lt;br /&gt;
							{ label: &#039;2 days&#039;, selected: true, value: &#039;2 days&#039; },&lt;br /&gt;
							{ label: &#039;3 days&#039;, value: &#039;3 days&#039; },&lt;br /&gt;
							{ label: &#039;4 days&#039;, value: &#039;4 days&#039; },&lt;br /&gt;
							{ label: &#039;1 week&#039;, value: &#039;1 week&#039; },&lt;br /&gt;
							{ label: &#039;2 weeks&#039;, value: &#039;2 weeks&#039; },&lt;br /&gt;
							{ label: &#039;1 month&#039;, value: &#039;1 month&#039; },&lt;br /&gt;
							{ label: &#039;2 months&#039;, value: &#039;2 months&#039; },&lt;br /&gt;
							{ label: &#039;3 months&#039;, value: &#039;3 months&#039; },&lt;br /&gt;
							{ label: &#039;1 year&#039;, value: &#039;1 year&#039; },&lt;br /&gt;
							{ label: &#039;indefinite&#039;, value:&#039;indefinite&#039; },&lt;br /&gt;
							{ label: &#039;Custom...&#039;, value: &#039;custom&#039; }&lt;br /&gt;
						]&lt;br /&gt;
					});&lt;br /&gt;
				field2.append({&lt;br /&gt;
						type: &#039;checkbox&#039;,&lt;br /&gt;
						name: &#039;movemodify&#039;,&lt;br /&gt;
						event: Twinkle.protect.formevents.movemodify,&lt;br /&gt;
						list: [&lt;br /&gt;
							{&lt;br /&gt;
								label: &#039;Modify move protection&#039;,&lt;br /&gt;
								value: &#039;movemodify&#039;,&lt;br /&gt;
								tooltip: &#039;If this is turned off, the move protection level, and expiry time, will be left as is.&#039;,&lt;br /&gt;
								checked: true&lt;br /&gt;
							}&lt;br /&gt;
						]&lt;br /&gt;
					});&lt;br /&gt;
				var movelevel = field2.append({&lt;br /&gt;
						type: &#039;select&#039;,&lt;br /&gt;
						name: &#039;movelevel&#039;,&lt;br /&gt;
						label: &#039;Move protection:&#039;,&lt;br /&gt;
						event: Twinkle.protect.formevents.movelevel&lt;br /&gt;
					});&lt;br /&gt;
				movelevel.append({&lt;br /&gt;
						type: &#039;option&#039;,&lt;br /&gt;
						label: &#039;All&#039;,&lt;br /&gt;
						value: &#039;all&#039;&lt;br /&gt;
					});&lt;br /&gt;
				movelevel.append({&lt;br /&gt;
						type: &#039;option&#039;,&lt;br /&gt;
						label: &#039;Autoconfirmed&#039;,&lt;br /&gt;
						value: &#039;autoconfirmed&#039;&lt;br /&gt;
					});&lt;br /&gt;
				movelevel.append({&lt;br /&gt;
						type: &#039;option&#039;,&lt;br /&gt;
						label: &#039;Sysop&#039;,&lt;br /&gt;
						value: &#039;sysop&#039;,&lt;br /&gt;
						selected: true&lt;br /&gt;
					});&lt;br /&gt;
				field2.append({&lt;br /&gt;
						type: &#039;select&#039;,&lt;br /&gt;
						name: &#039;moveexpiry&#039;,&lt;br /&gt;
						label: &#039;Expires:&#039;,&lt;br /&gt;
						event: function(e) {&lt;br /&gt;
							if (e.target.value === &#039;custom&#039;) {&lt;br /&gt;
								Twinkle.protect.doCustomExpiry(e.target);&lt;br /&gt;
							}&lt;br /&gt;
						},&lt;br /&gt;
						list: [&lt;br /&gt;
							{ label: &#039;1 hour&#039;, value: &#039;1 hour&#039; },&lt;br /&gt;
							{ label: &#039;2 hours&#039;, value: &#039;2 hours&#039; },&lt;br /&gt;
							{ label: &#039;3 hours&#039;, value: &#039;3 hours&#039; },&lt;br /&gt;
							{ label: &#039;6 hours&#039;, value: &#039;6 hours&#039; },&lt;br /&gt;
							{ label: &#039;12 hours&#039;, value: &#039;12 hours&#039; },&lt;br /&gt;
							{ label: &#039;1 day&#039;, value: &#039;1 day&#039; },&lt;br /&gt;
							{ label: &#039;2 days&#039;, selected: true, value: &#039;2 days&#039; },&lt;br /&gt;
							{ label: &#039;3 days&#039;, value: &#039;3 days&#039; },&lt;br /&gt;
							{ label: &#039;4 days&#039;, value: &#039;4 days&#039; },&lt;br /&gt;
							{ label: &#039;1 week&#039;, value: &#039;1 week&#039; },&lt;br /&gt;
							{ label: &#039;2 weeks&#039;, value: &#039;2 weeks&#039; },&lt;br /&gt;
							{ label: &#039;1 month&#039;, value: &#039;1 month&#039; },&lt;br /&gt;
							{ label: &#039;2 months&#039;, value: &#039;2 months&#039; },&lt;br /&gt;
							{ label: &#039;3 months&#039;, value: &#039;3 months&#039; },&lt;br /&gt;
							{ label: &#039;1 year&#039;, value: &#039;1 year&#039; },&lt;br /&gt;
							{ label: &#039;indefinite&#039;, value:&#039;indefinite&#039; },&lt;br /&gt;
							{ label: &#039;Custom...&#039;, value: &#039;custom&#039; }&lt;br /&gt;
						]&lt;br /&gt;
					});&lt;br /&gt;
			} else {  // for non-existing pages&lt;br /&gt;
				var createlevel = field2.append({&lt;br /&gt;
						type: &#039;select&#039;,&lt;br /&gt;
						name: &#039;createlevel&#039;,&lt;br /&gt;
						label: &#039;Create protection:&#039;,&lt;br /&gt;
						event: Twinkle.protect.formevents.createlevel&lt;br /&gt;
					});&lt;br /&gt;
				createlevel.append({&lt;br /&gt;
						type: &#039;option&#039;,&lt;br /&gt;
						label: &#039;All (registered users)&#039;,&lt;br /&gt;
						value: &#039;all&#039;&lt;br /&gt;
					});&lt;br /&gt;
				createlevel.append({&lt;br /&gt;
						type: &#039;option&#039;,&lt;br /&gt;
						label: &#039;Autoconfirmed&#039;,&lt;br /&gt;
						value: &#039;autoconfirmed&#039;&lt;br /&gt;
					});&lt;br /&gt;
				createlevel.append({&lt;br /&gt;
						type: &#039;option&#039;,&lt;br /&gt;
						label: &#039;Sysop&#039;,&lt;br /&gt;
						value: &#039;sysop&#039;,&lt;br /&gt;
						selected: true&lt;br /&gt;
					});&lt;br /&gt;
				field2.append({&lt;br /&gt;
						type: &#039;select&#039;,&lt;br /&gt;
						name: &#039;createexpiry&#039;,&lt;br /&gt;
						label: &#039;Expires:&#039;,&lt;br /&gt;
						event: function(e) {&lt;br /&gt;
							if (e.target.value === &#039;custom&#039;) {&lt;br /&gt;
								Twinkle.protect.doCustomExpiry(e.target);&lt;br /&gt;
							}&lt;br /&gt;
						},&lt;br /&gt;
						list: [&lt;br /&gt;
							{ label: &#039;1 hour&#039;, value: &#039;1 hour&#039; },&lt;br /&gt;
							{ label: &#039;2 hours&#039;, value: &#039;2 hours&#039; },&lt;br /&gt;
							{ label: &#039;3 hours&#039;, value: &#039;3 hours&#039; },&lt;br /&gt;
							{ label: &#039;6 hours&#039;, value: &#039;6 hours&#039; },&lt;br /&gt;
							{ label: &#039;12 hours&#039;, value: &#039;12 hours&#039; },&lt;br /&gt;
							{ label: &#039;1 day&#039;, value: &#039;1 day&#039; },&lt;br /&gt;
							{ label: &#039;2 days&#039;, value: &#039;2 days&#039; },&lt;br /&gt;
							{ label: &#039;3 days&#039;, value: &#039;3 days&#039; },&lt;br /&gt;
							{ label: &#039;4 days&#039;, value: &#039;4 days&#039; },&lt;br /&gt;
							{ label: &#039;1 week&#039;, value: &#039;1 week&#039; },&lt;br /&gt;
							{ label: &#039;2 weeks&#039;, value: &#039;2 weeks&#039; },&lt;br /&gt;
							{ label: &#039;1 month&#039;, value: &#039;1 month&#039; },&lt;br /&gt;
							{ label: &#039;2 months&#039;, value: &#039;2 months&#039; },&lt;br /&gt;
							{ label: &#039;3 months&#039;, value: &#039;3 months&#039; },&lt;br /&gt;
							{ label: &#039;1 year&#039;, value: &#039;1 year&#039; },&lt;br /&gt;
							{ label: &#039;indefinite&#039;, selected: true, value: &#039;indefinite&#039; },&lt;br /&gt;
							{ label: &#039;Custom...&#039;, value: &#039;custom&#039; }&lt;br /&gt;
						]&lt;br /&gt;
					});&lt;br /&gt;
			}&lt;br /&gt;
			field2.append({&lt;br /&gt;
					type: &#039;textarea&#039;,&lt;br /&gt;
					name: &#039;reason&#039;,&lt;br /&gt;
					label: &#039;Protection reason (for log):&#039;&lt;br /&gt;
				});&lt;br /&gt;
			if (!mw.config.get(&#039;wgArticleId&#039;)) {  // tagging isn&#039;t relevant for non-existing pages&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
			/* falls through */&lt;br /&gt;
		case &#039;tag&#039;:&lt;br /&gt;
			field1 = new QuickForm.element({ type: &#039;field&#039;, label: &#039;Tagging options&#039;, name: &#039;field1&#039; });&lt;br /&gt;
			field1.append( {&lt;br /&gt;
					type: &#039;select&#039;,&lt;br /&gt;
					name: &#039;tagtype&#039;,&lt;br /&gt;
					label: &#039;Choose protection template:&#039;,&lt;br /&gt;
					list: Twinkle.protect.protectionTags,&lt;br /&gt;
					event: Twinkle.protect.formevents.tagtype&lt;br /&gt;
				} );&lt;br /&gt;
			field1.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{&lt;br /&gt;
							name: &#039;small&#039;,&lt;br /&gt;
							label: &#039;Iconify (small=yes)&#039;,&lt;br /&gt;
							tooltip: &#039;Will use the |small=yes feature of the template, and only render it as a keylock&#039;,&lt;br /&gt;
							checked: true&lt;br /&gt;
						},&lt;br /&gt;
						{&lt;br /&gt;
							name: &#039;noinclude&#039;,&lt;br /&gt;
							label: &#039;Wrap protection template with &amp;lt;noinclude&amp;gt;&#039;,&lt;br /&gt;
							tooltip: &#039;Will wrap the protection template in &amp;amp;lt;noinclude&amp;amp;gt; tags, so that it won\&#039;t transclude&#039;,&lt;br /&gt;
							checked: (mw.config.get(&#039;wgNamespaceNumber&#039;) === 10)&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
				} );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case &#039;request&#039;:&lt;br /&gt;
			field_preset = new QuickForm.element({ type: &#039;field&#039;, label: &#039;Type of protection&#039;, name: &#039;field_preset&#039; });&lt;br /&gt;
			field_preset.append({&lt;br /&gt;
					type: &#039;select&#039;,&lt;br /&gt;
					name: &#039;category&#039;,&lt;br /&gt;
					label: &#039;Type and reason:&#039;,&lt;br /&gt;
					event: Twinkle.protect.callback.changePreset,&lt;br /&gt;
					list: (mw.config.get(&#039;wgArticleId&#039;) ? Twinkle.protect.protectionTypes : Twinkle.protect.protectionTypesCreate)&lt;br /&gt;
				});&lt;br /&gt;
&lt;br /&gt;
			field1 = new QuickForm.element({ type: &#039;field&#039;, label: &#039;Options&#039;, name: &#039;field1&#039; });&lt;br /&gt;
			field1.append( {&lt;br /&gt;
					type: &#039;select&#039;,&lt;br /&gt;
					name: &#039;expiry&#039;,&lt;br /&gt;
					label: &#039;Duration: &#039;,&lt;br /&gt;
					list: [&lt;br /&gt;
						{ label: &#039;Temporary&#039;, value: &#039;temporary&#039; },&lt;br /&gt;
						{ label: &#039;Indefinite&#039;, value: &#039;indefinite&#039; },&lt;br /&gt;
						{ label: &#039;&#039;, selected: true, value: &#039;&#039; }&lt;br /&gt;
					]&lt;br /&gt;
				} );&lt;br /&gt;
			field1.append({&lt;br /&gt;
					type: &#039;textarea&#039;,&lt;br /&gt;
					name: &#039;reason&#039;,&lt;br /&gt;
					label: &#039;Reason: &#039;&lt;br /&gt;
				});&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			alert(&amp;quot;Something&#039;s afoot in twinkleprotect&amp;quot;);&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var oldfield;&lt;br /&gt;
	if (field_preset) {&lt;br /&gt;
		oldfield = $(e.target.form).find(&#039;fieldset[name=&amp;quot;field_preset&amp;quot;]&#039;)[0];&lt;br /&gt;
		oldfield.parentNode.replaceChild(field_preset.render(), oldfield);&lt;br /&gt;
	} else {&lt;br /&gt;
		$(e.target.form).find(&#039;fieldset[name=&amp;quot;field_preset&amp;quot;]&#039;).css(&#039;display&#039;, &#039;none&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	if (field1) {&lt;br /&gt;
		oldfield = $(e.target.form).find(&#039;fieldset[name=&amp;quot;field1&amp;quot;]&#039;)[0];&lt;br /&gt;
		oldfield.parentNode.replaceChild(field1.render(), oldfield);&lt;br /&gt;
	} else {&lt;br /&gt;
		$(e.target.form).find(&#039;fieldset[name=&amp;quot;field1&amp;quot;]&#039;).css(&#039;display&#039;, &#039;none&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	if (field2) {&lt;br /&gt;
		oldfield = $(e.target.form).find(&#039;fieldset[name=&amp;quot;field2&amp;quot;]&#039;)[0];&lt;br /&gt;
		oldfield.parentNode.replaceChild(field2.render(), oldfield);&lt;br /&gt;
	} else {&lt;br /&gt;
		$(e.target.form).find(&#039;fieldset[name=&amp;quot;field2&amp;quot;]&#039;).css(&#039;display&#039;, &#039;none&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// re-add protection level text, if it&#039;s available&lt;br /&gt;
	if (e.target.values === &#039;protect&#039; &amp;amp;&amp;amp; Twinkle.protect.protectionLevel) {&lt;br /&gt;
		Status.init($(&#039;div[name=&amp;quot;currentprot&amp;quot;] span&#039;).last()[0]);&lt;br /&gt;
		Status.info(&amp;quot;Current protection level&amp;quot;, Twinkle.protect.protectionLevel);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.formevents = {&lt;br /&gt;
	editmodify: function twinkleprotectFormEditmodifyEvent(e) {&lt;br /&gt;
		e.target.form.editlevel.disabled = !e.target.checked;&lt;br /&gt;
		e.target.form.editexpiry.disabled = !e.target.checked || (e.target.form.editlevel.value === &#039;all&#039;);&lt;br /&gt;
		e.target.form.editlevel.style.color = e.target.form.editexpiry.style.color = (e.target.checked ? &amp;quot;&amp;quot; : &amp;quot;transparent&amp;quot;);&lt;br /&gt;
	},&lt;br /&gt;
	editlevel: function twinkleprotectFormEditlevelEvent(e) {&lt;br /&gt;
		e.target.form.editexpiry.disabled = (e.target.value === &#039;all&#039;);&lt;br /&gt;
	},&lt;br /&gt;
	movemodify: function twinkleprotectFormMovemodifyEvent(e) {&lt;br /&gt;
		e.target.form.movelevel.disabled = !e.target.checked;&lt;br /&gt;
		e.target.form.moveexpiry.disabled = !e.target.checked || (e.target.form.movelevel.value === &#039;all&#039;);&lt;br /&gt;
		e.target.form.movelevel.style.color = e.target.form.moveexpiry.style.color = (e.target.checked ? &amp;quot;&amp;quot; : &amp;quot;transparent&amp;quot;);&lt;br /&gt;
	},&lt;br /&gt;
	movelevel: function twinkleprotectFormMovelevelEvent(e) {&lt;br /&gt;
		e.target.form.moveexpiry.disabled = (e.target.value === &#039;all&#039;);&lt;br /&gt;
	},&lt;br /&gt;
	createlevel: function twinkleprotectFormCreatelevelEvent(e) {&lt;br /&gt;
		e.target.form.createexpiry.disabled = (e.target.value === &#039;all&#039;);&lt;br /&gt;
	},&lt;br /&gt;
	tagtype: function twinkleprotectFormTagtypeEvent(e) {&lt;br /&gt;
		e.target.form.small.disabled = e.target.form.noinclude.disabled = (e.target.value === &#039;none&#039;) || (e.target.value === &#039;noop&#039;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.doCustomExpiry = function twinkleprotectDoCustomExpiry(target) {&lt;br /&gt;
	var custom = prompt(&#039;Enter a custom expiry time.  \nYou can use relative times, like &amp;quot;1 minute&amp;quot; or &amp;quot;19 days&amp;quot;, or absolute timestamps, &amp;quot;yyyymmddhhmm&amp;quot; (e.g. &amp;quot;200602011406&amp;quot; is Feb 1, 2006, at 14:06 UTC).&#039;, &#039;&#039;);&lt;br /&gt;
	if (custom) {&lt;br /&gt;
		var option = document.createElement(&#039;option&#039;);&lt;br /&gt;
		option.setAttribute(&#039;value&#039;, custom);&lt;br /&gt;
		option.textContent = custom;&lt;br /&gt;
		target.appendChild(option);&lt;br /&gt;
		target.value = custom;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.protectionTypes = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;Full protection&#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{ label: &#039;Generic (full)&#039;, value: &#039;pp-protected&#039; },&lt;br /&gt;
			{ label: &#039;Content dispute/edit warring (full)&#039;, selected: userIsInGroup(&#039;sysop&#039;), value: &#039;pp-dispute&#039; },&lt;br /&gt;
			{ label: &#039;Persistent vandalism (full)&#039;, value: &#039;pp-vandalism&#039; },&lt;br /&gt;
			{ label: &#039;Highly visible template (full)&#039;, value: &#039;pp-template&#039; },&lt;br /&gt;
			{ label: &#039;User talk of blocked user (full)&#039;, value: &#039;pp-usertalk&#039; }&lt;br /&gt;
		]&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;Semi-protection&#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{ label: &#039;Generic (semi)&#039;, value: &#039;pp-semi-protected&#039; },&lt;br /&gt;
			{ label: &#039;Persistent vandalism (semi)&#039;, selected: !userIsInGroup(&#039;sysop&#039;), value: &#039;pp-semi-vandalism&#039; },&lt;br /&gt;
			{ label: &#039;BLP policy violations (semi)&#039;, value: &#039;pp-semi-blp&#039; },&lt;br /&gt;
			{ label: &#039;Sockpuppetry (semi)&#039;, value: &#039;pp-semi-sock&#039; },&lt;br /&gt;
			{ label: &#039;Highly visible template (semi)&#039;, value: &#039;pp-semi-template&#039; },&lt;br /&gt;
			{ label: &#039;User talk of blocked user (semi)&#039;, value: &#039;pp-semi-usertalk&#039; }&lt;br /&gt;
		]&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;Move protection&#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{ label: &#039;Generic (move)&#039;, value: &#039;pp-move&#039; },&lt;br /&gt;
			{ label: &#039;Dispute/move warring (move)&#039;, value: &#039;pp-move-dispute&#039; },&lt;br /&gt;
			{ label: &#039;Page-move vandalism (move)&#039;, value: &#039;pp-move-vandalism&#039; },&lt;br /&gt;
			{ label: &#039;Highly visible page (move)&#039;, value: &#039;pp-move-indef&#039; }&lt;br /&gt;
		]&lt;br /&gt;
	},&lt;br /&gt;
	{ label: &#039;Unprotection&#039;, value: &#039;unprotect&#039; }&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.protectionTypesCreate = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;Create protection&#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{ label: &#039;Generic ({{pp-create}})&#039;, value: &#039;pp-create&#039; },&lt;br /&gt;
			{ label: &#039;Offensive name&#039;, value: &#039;pp-create-offensive&#039; },&lt;br /&gt;
			{ label: &#039;Repeatedly recreated&#039;, selected: true, value: &#039;pp-create-salt&#039; },&lt;br /&gt;
			{ label: &#039;Recently deleted BLP&#039;, value: &#039;pp-create-blp&#039; }&lt;br /&gt;
		]&lt;br /&gt;
	},&lt;br /&gt;
	{ label: &#039;Unprotection&#039;, value: &#039;unprotect&#039; }&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
// NOTICE: keep this synched with [[MediaWiki:Protect-dropdown]]&lt;br /&gt;
Twinkle.protect.protectionPresetsInfo = {&lt;br /&gt;
	&#039;pp-protected&#039;: {&lt;br /&gt;
		edit: &#039;sysop&#039;,&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: null&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-dispute&#039;: {&lt;br /&gt;
		edit: &#039;sysop&#039;,&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:PP#Content disputes|Edit warring / Content dispute]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-vandalism&#039;: {&lt;br /&gt;
		edit: &#039;sysop&#039;,&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;Persistent [[MP:Vandalism|vandalism]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-template&#039;: {&lt;br /&gt;
		edit: &#039;sysop&#039;,&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:High-risk templates|Highly visible template]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-usertalk&#039;: {&lt;br /&gt;
		edit: &#039;sysop&#039;,&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:PP#Talk-page protection|Inappropriate use of user talk page while blocked]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-semi-vandalism&#039;: {&lt;br /&gt;
		edit: &#039;autoconfirmed&#039;,&lt;br /&gt;
		reason: &#039;Persistent [[MP:Vandalism|vandalism]]&#039;,&lt;br /&gt;
		template: &#039;pp-vandalism&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-semi-blp&#039;: {&lt;br /&gt;
		edit: &#039;autoconfirmed&#039;,&lt;br /&gt;
		reason: &#039;Violations of the [[MP:Biographies of living persons|biographies of living persons policy]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-semi-usertalk&#039;: {&lt;br /&gt;
		edit: &#039;autoconfirmed&#039;,&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:PP#Talk-page protection|Inappropriate use of user talk page while blocked]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-semi-template&#039;: {&lt;br /&gt;
		edit: &#039;autoconfirmed&#039;,&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:High-risk templates|Highly visible template]]&#039;,&lt;br /&gt;
		template: &#039;pp-template&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-semi-sock&#039;: {&lt;br /&gt;
		edit: &#039;autoconfirmed&#039;,&lt;br /&gt;
		reason: &#039;Persistent [[MP:Sock puppetry|sock puppetry]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-semi-protected&#039;: {&lt;br /&gt;
		edit: &#039;autoconfirmed&#039;,&lt;br /&gt;
		reason: null,&lt;br /&gt;
		template: &#039;pp-protected&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-move&#039;: {&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: null&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-move-dispute&#039;: {&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:MOVP|Move warring]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-move-vandalism&#039;: {&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:MOVP|Page-move vandalism]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-move-indef&#039;: {&lt;br /&gt;
		move: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:MOVP|Highly visible page]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;unprotect&#039;: {&lt;br /&gt;
		edit: &#039;all&#039;,&lt;br /&gt;
		move: &#039;all&#039;,&lt;br /&gt;
		create: &#039;all&#039;,&lt;br /&gt;
		reason: null,&lt;br /&gt;
		template: &#039;none&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-create-offensive&#039;: {&lt;br /&gt;
		create: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:SALT|Offensive name]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-create-salt&#039;: {&lt;br /&gt;
		create: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:SALT|Repeatedly recreated]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-create-blp&#039;: {&lt;br /&gt;
		create: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;[[MP:BLPDEL|Recently deleted BLP]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&#039;pp-create&#039;: {&lt;br /&gt;
		create: &#039;sysop&#039;,&lt;br /&gt;
		reason: &#039;{{pp-create}}&#039;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.protectionTags = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;None (remove existing protection templates)&#039;,&lt;br /&gt;
		value: &#039;none&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;None (do not remove existing protection templates)&#039;,&lt;br /&gt;
		value: &#039;noop&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;Full protection templates&#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{ label: &#039;{{pp-dispute}}: dispute/edit war&#039;, value: &#039;pp-dispute&#039;, selected: true },&lt;br /&gt;
			{ label: &#039;{{pp-usertalk}}: blocked user talk&#039;, value: &#039;pp-usertalk&#039; }&lt;br /&gt;
		]&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;Full/semi-protection templates&#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{ label: &#039;{{pp-vandalism}}: vandalism&#039;, value: &#039;pp-vandalism&#039; },&lt;br /&gt;
			{ label: &#039;{{pp-template}}: high-risk template&#039;, value: &#039;pp-template&#039; },&lt;br /&gt;
			{ label: &#039;{{pp-protected}}: general protection&#039;, value: &#039;pp-protected&#039; }&lt;br /&gt;
		]&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;Semi-protection templates&#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{ label: &#039;{{pp-semi-usertalk}}: blocked user talk&#039;, value: &#039;pp-semi-usertalk&#039; },&lt;br /&gt;
			{ label: &#039;{{pp-semi-sock}}: sockpuppetry&#039;, value: &#039;pp-semi-sock&#039; },&lt;br /&gt;
			{ label: &#039;{{pp-semi-blp}}: BLP violations&#039;, value: &#039;pp-semi-blp&#039; },&lt;br /&gt;
			{ label: &#039;{{pp-semi-indef}}: general long-term&#039;, value: &#039;pp-semi-indef&#039; }&lt;br /&gt;
		]&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;Move protection templates&#039;,&lt;br /&gt;
		list: [&lt;br /&gt;
			{ label: &#039;{{pp-move-dispute}}: dispute/move war&#039;, value: &#039;pp-move-dispute&#039; },&lt;br /&gt;
			{ label: &#039;{{pp-move-vandalism}}: page-move vandalism&#039;, value: &#039;pp-move-vandalism&#039; },&lt;br /&gt;
			{ label: &#039;{{pp-move-indef}}: general long-term&#039;, value: &#039;pp-move-indef&#039; },&lt;br /&gt;
			{ label: &#039;{{pp-move}}: other&#039;, value: &#039;pp-move&#039; }&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.callback.changePreset = function twinkleprotectCallbackChangePreset(e) {&lt;br /&gt;
	var form = e.target.form;&lt;br /&gt;
&lt;br /&gt;
	var actiontypes = form.actiontype;&lt;br /&gt;
	var actiontype;&lt;br /&gt;
	for( var i = 0; i &amp;lt; actiontypes.length; i++ )&lt;br /&gt;
	{&lt;br /&gt;
		if( !actiontypes[i].checked ) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		actiontype = actiontypes[i].values;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (actiontype === &#039;protect&#039;) {  // actually protecting the page&lt;br /&gt;
		var item = Twinkle.protect.protectionPresetsInfo[form.category.value];&lt;br /&gt;
		if (mw.config.get(&#039;wgArticleId&#039;)) {&lt;br /&gt;
			if (item.edit) {&lt;br /&gt;
				form.editmodify.checked = true;&lt;br /&gt;
				Twinkle.protect.formevents.editmodify({ target: form.editmodify });&lt;br /&gt;
				form.editlevel.value = item.edit;&lt;br /&gt;
				Twinkle.protect.formevents.editlevel({ target: form.editlevel });&lt;br /&gt;
			} else {&lt;br /&gt;
				form.editmodify.checked = false;&lt;br /&gt;
				Twinkle.protect.formevents.editmodify({ target: form.editmodify });&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if (item.move) {&lt;br /&gt;
				form.movemodify.checked = true;&lt;br /&gt;
				Twinkle.protect.formevents.movemodify({ target: form.movemodify });&lt;br /&gt;
				form.movelevel.value = item.move;&lt;br /&gt;
				Twinkle.protect.formevents.movelevel({ target: form.movelevel });&lt;br /&gt;
			} else {&lt;br /&gt;
				form.movemodify.checked = false;&lt;br /&gt;
				Twinkle.protect.formevents.movemodify({ target: form.movemodify });&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			if (item.create) {&lt;br /&gt;
				form.createlevel.value = item.create;&lt;br /&gt;
				Twinkle.protect.formevents.createlevel({ target: form.createlevel });&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (item.reason) {&lt;br /&gt;
			form.reason.value = item.reason;&lt;br /&gt;
		} else {&lt;br /&gt;
			form.reason.value = &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// sort out tagging options&lt;br /&gt;
		if (mw.config.get(&#039;wgArticleId&#039;)) {&lt;br /&gt;
			if( form.category.value === &#039;unprotect&#039; ) {&lt;br /&gt;
				form.tagtype.value = &#039;none&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				form.tagtype.value = (item.template ? item.template : form.category.value);&lt;br /&gt;
			}&lt;br /&gt;
			Twinkle.protect.formevents.tagtype({ target: form.tagtype });&lt;br /&gt;
&lt;br /&gt;
			if( /template/.test( form.category.value ) ) {&lt;br /&gt;
				form.noinclude.checked = true;&lt;br /&gt;
				form.editexpiry.value = form.moveexpiry.value = &amp;quot;indefinite&amp;quot;;&lt;br /&gt;
			} else {&lt;br /&gt;
				form.noinclude.checked = false;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	} else {  // RPP request&lt;br /&gt;
		if( form.category.value === &#039;unprotect&#039; ) {&lt;br /&gt;
			form.expiry.value = &#039;&#039;;&lt;br /&gt;
			form.expiry.disabled = true;&lt;br /&gt;
		} else {&lt;br /&gt;
			form.expiry.disabled = false;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.callback.evaluate = function twinkleprotectCallbackEvaluate(e) {&lt;br /&gt;
	var form = e.target;&lt;br /&gt;
&lt;br /&gt;
	var actiontypes = form.actiontype;&lt;br /&gt;
	var actiontype;&lt;br /&gt;
	for( var i = 0; i &amp;lt; actiontypes.length; i++ )&lt;br /&gt;
	{&lt;br /&gt;
		if( !actiontypes[i].checked ) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		actiontype = actiontypes[i].values;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if( actiontype === &#039;tag&#039; || actiontype === &#039;protect&#039; ) {&lt;br /&gt;
		tagparams = {&lt;br /&gt;
			tag: form.tagtype.value,&lt;br /&gt;
			reason: ((form.tagtype.value === &#039;pp-protected&#039; || form.tagtype.value === &#039;pp-semi-protected&#039; || form.tagtype.value === &#039;pp-move&#039;) &amp;amp;&amp;amp; form.reason) ? form.reason.value : null,&lt;br /&gt;
			expiry: (actiontype === &#039;protect&#039;) ? (form.editmodify.checked ? form.editexpiry.value : (form.movemodify.checked ?&lt;br /&gt;
				form.moveexpiry.value : null)) : null,&lt;br /&gt;
				small: form.small.checked,&lt;br /&gt;
				noinclude: form.noinclude.checked&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	switch (actiontype) {&lt;br /&gt;
		case &#039;protect&#039;:&lt;br /&gt;
			// protect the page&lt;br /&gt;
			var thispage = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Protecting page&amp;quot;);&lt;br /&gt;
			if (mw.config.get(&#039;wgArticleId&#039;)) {&lt;br /&gt;
				if (form.editmodify.checked) {&lt;br /&gt;
					thispage.setEditProtection(form.editlevel.value, form.editexpiry.value);&lt;br /&gt;
				}&lt;br /&gt;
				if (form.movemodify.checked) {&lt;br /&gt;
					thispage.setMoveProtection(form.movelevel.value, form.moveexpiry.value);&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				thispage.setCreateProtection(form.createlevel.value, form.createexpiry.value);&lt;br /&gt;
			}&lt;br /&gt;
			if (form.reason.value) {&lt;br /&gt;
				thispage.setEditSummary(form.reason.value);&lt;br /&gt;
			} else {&lt;br /&gt;
				alert(&amp;quot;You must enter a protect reason, which will be inscribed into the protection log.&amp;quot;);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
			Status.init( form );&lt;br /&gt;
&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Protection complete&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			thispage.protect();&lt;br /&gt;
			/* falls through */&lt;br /&gt;
		case &#039;tag&#039;:&lt;br /&gt;
&lt;br /&gt;
			if (actiontype === &#039;tag&#039;) {&lt;br /&gt;
				SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
				Status.init( form );&lt;br /&gt;
				Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
				Wikipedia.actionCompleted.followRedirect = false;&lt;br /&gt;
				Wikipedia.actionCompleted.notice = &amp;quot;Tagging complete&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if (tagparams.tag === &#039;noop&#039;) {&lt;br /&gt;
				Status.info(&amp;quot;Applying protection template&amp;quot;, &amp;quot;nothing to do&amp;quot;);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var protectedPage = new Wikipedia.page( mw.config.get(&#039;wgPageName&#039;), &#039;Tagging page&#039;);&lt;br /&gt;
			protectedPage.setCallbackParameters( tagparams );&lt;br /&gt;
			protectedPage.load( Twinkle.protect.callbacks.taggingPage );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case &#039;request&#039;:&lt;br /&gt;
			// file request at RPP&lt;br /&gt;
			var typename, typereason;&lt;br /&gt;
			switch( form.category.value ) {&lt;br /&gt;
				case &#039;pp-dispute&#039;:&lt;br /&gt;
				case &#039;pp-vandalism&#039;:&lt;br /&gt;
				case &#039;pp-template&#039;:&lt;br /&gt;
				case &#039;pp-usertalk&#039;:&lt;br /&gt;
				case &#039;pp-protected&#039;:&lt;br /&gt;
					typename = &#039;full protection&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-semi-vandalism&#039;:&lt;br /&gt;
				case &#039;pp-semi-usertalk&#039;:&lt;br /&gt;
				case &#039;pp-semi-template&#039;:&lt;br /&gt;
				case &#039;pp-semi-sock&#039;:&lt;br /&gt;
				case &#039;pp-semi-blp&#039;:&lt;br /&gt;
				case &#039;pp-semi-protected&#039;:&lt;br /&gt;
					typename = &#039;semi-protection&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-move&#039;:&lt;br /&gt;
				case &#039;pp-move-dispute&#039;:&lt;br /&gt;
				case &#039;pp-move-indef&#039;:&lt;br /&gt;
				case &#039;pp-move-vandalism&#039;:&lt;br /&gt;
					typename = &#039;move protection&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-create&#039;:&lt;br /&gt;
				case &#039;pp-create-offensive&#039;:&lt;br /&gt;
				case &#039;pp-create-blp&#039;:&lt;br /&gt;
				case &#039;pp-create-salt&#039;:&lt;br /&gt;
					typename = &#039;create protection&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;unprotect&#039;:&lt;br /&gt;
					/* falls through */&lt;br /&gt;
				default:&lt;br /&gt;
					typename = &#039;unprotection&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			switch (form.category.value) {&lt;br /&gt;
				case &#039;pp-dispute&#039;:&lt;br /&gt;
					typereason = &#039;Content dispute/edit warring&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-vandalism&#039;:&lt;br /&gt;
				case &#039;pp-semi-vandalism&#039;:&lt;br /&gt;
					typereason = &#039;Persistent vandalism&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-template&#039;:&lt;br /&gt;
				case &#039;pp-semi-template&#039;:&lt;br /&gt;
					typereason = &#039;Highly visible template&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-usertalk&#039;:&lt;br /&gt;
				case &#039;pp-semi-usertalk&#039;:&lt;br /&gt;
					typereason = &#039;Inappropriate use of user talk page while blocked&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-semi-sock&#039;:&lt;br /&gt;
					typereason = &#039;Persistent sockpuppetry&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-semi-blp&#039;:&lt;br /&gt;
					typereason = &#039;[[MP:BLP|BLP]] policy violations&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-move-dispute&#039;:&lt;br /&gt;
					typereason = &#039;Page title dispute/move warring&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-move-vandalism&#039;:&lt;br /&gt;
					typereason = &#039;Page-move vandalism&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-move-indef&#039;:&lt;br /&gt;
					typereason = &#039;Highly visible page&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-create-offensive&#039;:&lt;br /&gt;
					typereason = &#039;Offensive name&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-create-blp&#039;:&lt;br /&gt;
					typereason = &#039;Recently deleted [[MP:BLP|BLP]]&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;pp-create-salt&#039;:&lt;br /&gt;
					typereason = &#039;Repeatedly recreated&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					typereason = &#039;&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var reason = typereason;&lt;br /&gt;
			if( form.reason.value !== &#039;&#039;) {&lt;br /&gt;
				if ( typereason !== &#039;&#039; ) {&lt;br /&gt;
					reason += &amp;quot;\u00A0\u2013 &amp;quot;;  // U+00A0 NO-BREAK SPACE; U+2013 EN RULE&lt;br /&gt;
				}&lt;br /&gt;
				reason += form.reason.value;&lt;br /&gt;
			}&lt;br /&gt;
			if( reason !== &#039;&#039; &amp;amp;&amp;amp; reason.charAt( reason.length - 1 ) !== &#039;.&#039; ) {&lt;br /&gt;
				reason += &#039;.&#039;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var rppparams = {&lt;br /&gt;
				reason: reason,&lt;br /&gt;
				typename: typename,&lt;br /&gt;
				//category: form.category.value,&lt;br /&gt;
				expiry: form.expiry.value&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
			Status.init( form );&lt;br /&gt;
&lt;br /&gt;
			rppName = &#039;Wikipedia:Requests for page protection&#039;;&lt;br /&gt;
&lt;br /&gt;
			// Updating data for the action completed event&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = rppName;&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Nomination completed, redirecting now to the discussion page&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			var rppPage = new Wikipedia.page( rppName, &#039;Requesting protection of page&#039;);&lt;br /&gt;
			rppPage.setFollowRedirect( true );&lt;br /&gt;
			rppPage.setCallbackParameters( rppparams );&lt;br /&gt;
			rppPage.load( Twinkle.protect.callbacks.fileRequest );&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			alert(&amp;quot;twinkleprotect: unknown kind of action&amp;quot;);&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.protect.callbacks = {&lt;br /&gt;
	taggingPage: function( protectedPage ) {&lt;br /&gt;
		var params = protectedPage.getCallbackParameters();&lt;br /&gt;
		var text = protectedPage.getPageText();&lt;br /&gt;
		var tag, summary;&lt;br /&gt;
&lt;br /&gt;
		var oldtag_re = /\s*(?:&amp;lt;noinclude&amp;gt;)?\s*\{\{\s*(pp-[^{}]*?|protected|(?:t|v|s|p-|usertalk-v|usertalk-s|sb|move)protected(?:2)?|protected template|privacy protection)\s*?\}\}\s*(?:&amp;lt;\/noinclude&amp;gt;)?\s*/gi;&lt;br /&gt;
&lt;br /&gt;
		text = text.replace( oldtag_re, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
		if ( params.tag !== &#039;none&#039; ) {&lt;br /&gt;
			tag = params.tag;&lt;br /&gt;
			if( params.reason ) {&lt;br /&gt;
				tag += &#039;|reason=&#039; + params.reason;&lt;br /&gt;
			}&lt;br /&gt;
			if( [&#039;indefinite&#039;, &#039;infinite&#039;, &#039;never&#039;, null].indexOf(params.expiry) === -1 ) {&lt;br /&gt;
				tag += &#039;|expiry={{subst:#time:F j, Y|&#039; + (/^\s*\d+\s*$/.exec(params.expiry) ? params.expiry : &#039;+&#039; + params.expiry) + &#039;}}&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			if( params.small ) {&lt;br /&gt;
				tag += &#039;|small=yes&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( params.tag === &#039;none&#039; ) {&lt;br /&gt;
			summary = &#039;Removing protection template&#039; + Twinkle.getPref(&#039;summaryAd&#039;);&lt;br /&gt;
		} else {&lt;br /&gt;
			if( params.noinclude ) {&lt;br /&gt;
				text = &amp;quot;&amp;lt;noinclude&amp;gt;{{&amp;quot; + tag + &amp;quot;}}&amp;lt;/noinclude&amp;gt;&amp;quot; + text;&lt;br /&gt;
			} else {&lt;br /&gt;
				text = &amp;quot;{{&amp;quot; + tag + &amp;quot;}}\n&amp;quot; + text;&lt;br /&gt;
			}&lt;br /&gt;
			summary = &amp;quot;Adding {{&amp;quot; + params.tag + &amp;quot;}}&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		protectedPage.setEditSummary( summary );&lt;br /&gt;
		protectedPage.setPageText( text );&lt;br /&gt;
		protectedPage.setCreateOption( &#039;nocreate&#039; );&lt;br /&gt;
		protectedPage.save();&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	fileRequest: function( rppPage ) {&lt;br /&gt;
&lt;br /&gt;
		var params = rppPage.getCallbackParameters();&lt;br /&gt;
		var text = rppPage.getPageText();&lt;br /&gt;
		var statusElement = rppPage.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
		var ns2tag = {&lt;br /&gt;
			&#039;0&#039;: &#039;la&#039;,&lt;br /&gt;
			&#039;1&#039;: &#039;lat&#039;,&lt;br /&gt;
			&#039;2&#039;: &#039;lu&#039;,&lt;br /&gt;
			&#039;3&#039;: &#039;lut&#039;,&lt;br /&gt;
			&#039;4&#039;: &#039;lw&#039;,&lt;br /&gt;
			&#039;5&#039;: &#039;lwt&#039;,&lt;br /&gt;
			&#039;6&#039;: &#039;lf&#039;,&lt;br /&gt;
			&#039;7&#039;: &#039;lft&#039;,&lt;br /&gt;
			&#039;8&#039;: &#039;lm&#039;,&lt;br /&gt;
			&#039;9&#039;: &#039;lmt&#039;,&lt;br /&gt;
			&#039;10&#039;: &#039;lt&#039;,&lt;br /&gt;
			&#039;11&#039;: &#039;ltt&#039;,&lt;br /&gt;
			&#039;12&#039;: &#039;lh&#039;,&lt;br /&gt;
			&#039;13&#039;: &#039;lht&#039;,&lt;br /&gt;
			&#039;14&#039;: &#039;lc&#039;,&lt;br /&gt;
			&#039;15&#039;: &#039;lct&#039;,&lt;br /&gt;
			&#039;100&#039;: &#039;lp&#039;,&lt;br /&gt;
			&#039;101&#039;: &#039;lpt&#039;,&lt;br /&gt;
			&#039;108&#039;: &#039;lb&#039;,&lt;br /&gt;
			&#039;109&#039;: &#039;lbt&#039;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		var rppRe = new RegExp( &#039;====\\s*\\{\\{\\s*&#039; + ns2tag[ mw.config.get(&#039;wgNamespaceNumber&#039;) ] + &#039;\\s*\\|\\s*&#039; + RegExp.escape( mw.config.get(&#039;wgTitle&#039;), true ) + &#039;\\s*\\}\\}\\s*====&#039;, &#039;m&#039; );&lt;br /&gt;
		var tag = rppRe.exec( text );&lt;br /&gt;
&lt;br /&gt;
		var rppLink = document.createElement(&#039;a&#039;);&lt;br /&gt;
		rppLink.setAttribute(&#039;href&#039;, mw.util.getUrl(rppPage.getPageName()) );&lt;br /&gt;
		rppLink.appendChild(document.createTextNode(rppPage.getPageName()));&lt;br /&gt;
&lt;br /&gt;
		if ( tag ) {&lt;br /&gt;
			statusElement.error( [ &#039;There is already a protection request for this page at &#039;, rppLink, &#039;, aborting.&#039; ] );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var newtag = &#039;==== {{&#039; + ns2tag[ mw.config.get(&#039;wgNamespaceNumber&#039;) ] + &#039;|&#039; + mw.config.get(&#039;wgTitle&#039;) +  &#039;}} ====&#039; + &amp;quot;\n&amp;quot;;&lt;br /&gt;
		if( ( new RegExp( &#039;^&#039; + RegExp.escape( newtag ).replace( /\s+/g, &#039;\\s*&#039; ), &#039;m&#039; ) ).test( text ) ) {&lt;br /&gt;
			statusElement.error( [ &#039;There is already a protection request for this page at &#039;, rppLink, &#039;, aborting.&#039; ] );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var words;&lt;br /&gt;
		switch( params.expiry ) {&lt;br /&gt;
		case &#039;temporary&#039;:&lt;br /&gt;
			words = &amp;quot;Temporary &amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;indefinite&#039;:&lt;br /&gt;
			words = &amp;quot;Indefinite &amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			words = &amp;quot;&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		words += params.typename;&lt;br /&gt;
&lt;br /&gt;
		newtag += &amp;quot;&#039;&#039;&#039;&amp;quot; + words.toUpperCaseFirstChar() + ( params.reason !== &#039;&#039; ? &amp;quot;:&#039;&#039;&#039; &amp;quot; + params.reason : &amp;quot;.&#039;&#039;&#039;&amp;quot; ) + &amp;quot; ~~~~&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		var reg;&lt;br /&gt;
		if ( params.category === &#039;unprotect&#039; ) {&lt;br /&gt;
			reg = /(\n==\s*Current requests for unprotection\s*==\s*\n\s*\{\{[^\}\}]+\}\}\s*\n)/;&lt;br /&gt;
		} else {&lt;br /&gt;
			reg = /(\n==\s*Current requests for protection\s*==\s*\n\s*\{\{[^\}\}]+\}\}\s*\n)/;&lt;br /&gt;
		}&lt;br /&gt;
		var originalTextLength = text.length;&lt;br /&gt;
		text = text.replace( reg, &amp;quot;$1&amp;quot; + newtag + &amp;quot;\n&amp;quot;);&lt;br /&gt;
		if (text.length === originalTextLength)&lt;br /&gt;
		{&lt;br /&gt;
			statusElement.error( &#039;Could not find relevant &amp;quot;current requests for ...&amp;quot; heading on MP:RFPP. Aborting.&#039; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		statusElement.status( &#039;Adding new request...&#039; );&lt;br /&gt;
		rppPage.setEditSummary( &amp;quot;Requesting &amp;quot; + params.typename + &#039; of [[&#039; + mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;) + &#039;]].&#039; + Twinkle.getPref(&#039;summaryAd&#039;) );&lt;br /&gt;
		rppPage.setPageText( text );&lt;br /&gt;
		rppPage.setCreateOption( &#039;recreate&#039; );&lt;br /&gt;
		rppPage.save();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklespeedy.js: CSD module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;CSD&amp;quot;)&lt;br /&gt;
 * Active on:              Non-special, existing pages&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 *&lt;br /&gt;
 * NOTE FOR DEVELOPERS:&lt;br /&gt;
 *   If adding a new criterion, check out the default values of the CSD preferences&lt;br /&gt;
 *   in twinkle.header.js, and add your new criterion to those if you think it would&lt;br /&gt;
 *   be good. &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy = function twinklespeedy() {&lt;br /&gt;
	// Disable on:&lt;br /&gt;
	// * special pages&lt;br /&gt;
	// * non-existent pages&lt;br /&gt;
	if (mw.config.get(&#039;wgNamespaceNumber&#039;) &amp;lt; 0 || !mw.config.get(&#039;wgArticleId&#039;)) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( userIsInGroup( &#039;sysop&#039; ) ) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;CSD&amp;quot;, &amp;quot;tw-csd&amp;quot;, &amp;quot;Delete page according to MP:CSD&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.speedy.callback);&lt;br /&gt;
	} else if (twinkleUserAuthorized) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;CSD&amp;quot;, &amp;quot;tw-csd&amp;quot;, &amp;quot;Request speedy deletion according to MP:CSD&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.speedy.callback);&lt;br /&gt;
	} else {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &#039;CSD&#039;, &#039;tw-csd&#039;, &#039;Request speedy deletion according to MP:CSD&#039;, &#039;&#039;)).click(function() {&lt;br /&gt;
			alert(&amp;quot;Your account is too new to use Twinkle.&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// This function is run when the CSD tab/header link is clicked&lt;br /&gt;
Twinkle.speedy.callback = function twinklespeedyCallback() {&lt;br /&gt;
	Twinkle.speedy.initDialog(userIsInGroup( &#039;sysop&#039; ) ? Twinkle.speedy.callback.evaluateSysop : Twinkle.speedy.callback.evaluateUser, true);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.dialog = null;&lt;br /&gt;
// Prepares the speedy deletion dialog and displays it&lt;br /&gt;
// Parameters:&lt;br /&gt;
//  - callbackfunc: the function to call when the dialog box is submitted&lt;br /&gt;
//  - firstTime: is this the first time? (false during a db-multiple run, true otherwise)&lt;br /&gt;
//  - content: (optional) a div element in which the form content should be rendered - allows&lt;br /&gt;
//    for placing content in an existing dialog box&lt;br /&gt;
Twinkle.speedy.initDialog = function twinklespeedyInitDialog(callbackfunc, firstTime, content) {&lt;br /&gt;
	var dialog;&lt;br /&gt;
	if (!content)&lt;br /&gt;
	{&lt;br /&gt;
		Twinkle.speedy.dialog = new SimpleWindow( Twinkle.getPref(&#039;speedyWindowWidth&#039;), Twinkle.getPref(&#039;speedyWindowHeight&#039;) );&lt;br /&gt;
		dialog = Twinkle.speedy.dialog;&lt;br /&gt;
		dialog.setTitle( &amp;quot;Choose criteria for speedy deletion&amp;quot; );&lt;br /&gt;
		dialog.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
		dialog.addFooterLink( &amp;quot;Speedy deletion policy&amp;quot;, &amp;quot;MP:CSD&amp;quot; );&lt;br /&gt;
		dialog.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#speedy&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( callbackfunc, &#039;change&#039; );&lt;br /&gt;
	if( firstTime &amp;amp;&amp;amp; userIsInGroup( &#039;sysop&#039; ) ) {&lt;br /&gt;
		form.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Tag page only, don\&#039;t delete&#039;,&lt;br /&gt;
						value: &#039;tag_only&#039;,&lt;br /&gt;
						name: &#039;tag_only&#039;,&lt;br /&gt;
						tooltip: &#039;If you just want to tag the page, instead of deleting it now&#039;,&lt;br /&gt;
						checked : Twinkle.getPref(&#039;deleteSysopDefaultToTag&#039;),&lt;br /&gt;
						event: function( event ) {&lt;br /&gt;
							// enable/disable notify checkbox&lt;br /&gt;
							event.target.form.notify.disabled = !event.target.checked;&lt;br /&gt;
							event.target.form.notify.checked = event.target.checked;&lt;br /&gt;
							// enable/disable talk page checkbox&lt;br /&gt;
							if (event.target.form.talkpage) {&lt;br /&gt;
								event.target.form.talkpage.disabled = event.target.checked;&lt;br /&gt;
								event.target.form.talkpage.checked = !event.target.checked &amp;amp;&amp;amp; Twinkle.getPref(&#039;deleteTalkPageOnDelete&#039;);&lt;br /&gt;
							}&lt;br /&gt;
							// enable/disable redirects checkbox&lt;br /&gt;
							event.target.form.redirects.disabled = event.target.checked;&lt;br /&gt;
							event.target.form.redirects.checked = !event.target.checked;&lt;br /&gt;
							// enable/disable multiple&lt;br /&gt;
							$(event.target.form).find(&#039;input[name=&amp;quot;csd&amp;quot;][value=&amp;quot;multiple&amp;quot;]&#039;)[0].disabled = !event.target.checked;&lt;br /&gt;
							event.stopPropagation();&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			} );&lt;br /&gt;
		form.append( { type: &#039;header&#039;, label: &#039;Delete-related options&#039; } );&lt;br /&gt;
		if (mw.config.get(&#039;wgNamespaceNumber&#039;) % 2 === 0 &amp;amp;&amp;amp; (mw.config.get(&#039;wgNamespaceNumber&#039;) !== 2 || (/\//).test(mw.config.get(&#039;wgTitle&#039;)))) {  // hide option for user pages, to avoid accidentally deleting user talk page&lt;br /&gt;
			form.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Also delete talk page&#039;,&lt;br /&gt;
						value: &#039;talkpage&#039;,&lt;br /&gt;
						name: &#039;talkpage&#039;,&lt;br /&gt;
						tooltip: &amp;quot;This option deletes the page&#039;s talk page in addition. If you choose the F8 (moved to Commons) criterion, this option is ignored and the talk page is *not* deleted.&amp;quot;,&lt;br /&gt;
						checked: Twinkle.getPref(&#039;deleteTalkPageOnDelete&#039;),&lt;br /&gt;
						disabled: Twinkle.getPref(&#039;deleteSysopDefaultToTag&#039;),&lt;br /&gt;
						event: function( event ) {&lt;br /&gt;
							event.stopPropagation();&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
		form.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Also delete all redirects&#039;,&lt;br /&gt;
						value: &#039;redirects&#039;,&lt;br /&gt;
						name: &#039;redirects&#039;,&lt;br /&gt;
						tooltip: &amp;quot;This option deletes all incoming redirects in addition. Avoid this option for procedural (e.g. move/merge) deletions.&amp;quot;,&lt;br /&gt;
						checked: true,&lt;br /&gt;
						disabled: Twinkle.getPref(&#039;deleteSysopDefaultToTag&#039;),&lt;br /&gt;
						event: function( event ) {&lt;br /&gt;
							event.stopPropagation();&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			} );&lt;br /&gt;
		form.append( { type: &#039;header&#039;, label: &#039;Tag-related options&#039; } );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// don&#039;t show this notification checkbox for db-multiple, as the value is ignored&lt;br /&gt;
	// XXX currently not possible to turn off notification when using db-multiple&lt;br /&gt;
	if (firstTime) {&lt;br /&gt;
		form.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Notify page creator if possible&#039;,&lt;br /&gt;
						value: &#039;notify&#039;,&lt;br /&gt;
						name: &#039;notify&#039;,&lt;br /&gt;
						tooltip: &amp;quot;A notification template will be placed on the talk page of the creator, IF you have a notification enabled in your Twinkle preferences &amp;quot; +&lt;br /&gt;
							&amp;quot;for the criterion you choose AND this box is checked. The creator may be welcomed as well.&amp;quot;,&lt;br /&gt;
						checked: !userIsInGroup( &#039;sysop&#039; ) || Twinkle.getPref(&#039;deleteSysopDefaultToTag&#039;),&lt;br /&gt;
						disabled: userIsInGroup( &#039;sysop&#039; ) &amp;amp;&amp;amp; !Twinkle.getPref(&#039;deleteSysopDefaultToTag&#039;),&lt;br /&gt;
						event: function( event ) {&lt;br /&gt;
							event.stopPropagation();&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			}&lt;br /&gt;
		);&lt;br /&gt;
	} else {&lt;br /&gt;
		form.append( { type:&#039;header&#039;, label: &#039;Tagging with {{db-multiple}}: Criterion &#039; + (Twinkle.speedy.dbmultipleCriteria.length + 1) } );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (firstTime) {&lt;br /&gt;
		form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Tag with multiple criteria&#039;,&lt;br /&gt;
					value: &#039;multiple&#039;,&lt;br /&gt;
					tooltip: &#039;Opens a series of further dialogs, allowing you to specify all the criteria you want to tag this page with.&#039;,&lt;br /&gt;
					disabled: userIsInGroup(&#039;sysop&#039;) &amp;amp;&amp;amp; !Twinkle.getPref(&#039;deleteSysopDefaultToTag&#039;)&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	} else if (Twinkle.speedy.dbmultipleCriteria.length &amp;gt; 0) {&lt;br /&gt;
		form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;No more criteria apply - finish tagging&#039;,&lt;br /&gt;
					value: &#039;multiple-finish&#039;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	switch (mw.config.get(&#039;wgNamespaceNumber&#039;)) {&lt;br /&gt;
		case 0:  // article&lt;br /&gt;
		case 1:  // talk&lt;br /&gt;
			form.append( { type: &#039;header&#039;, label: &#039;Articles&#039; } );&lt;br /&gt;
			form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;, list: Twinkle.speedy.getArticleList(!firstTime) } );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case 2:  // user&lt;br /&gt;
		case 3:  // user talk&lt;br /&gt;
			form.append( { type: &#039;header&#039;, label: &#039;User pages&#039; } );&lt;br /&gt;
			form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;, list: Twinkle.speedy.userList } );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case 6:  // file&lt;br /&gt;
		case 7:  // file talk&lt;br /&gt;
			form.append( { type: &#039;header&#039;, label: &#039;Files&#039; } );&lt;br /&gt;
			form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;, list: Twinkle.speedy.getFileList(!firstTime) } );&lt;br /&gt;
			form.append( { type: &#039;div&#039;, label: &#039;Tagging for CSD F4 (no license), F5 (orphaned fair use), F6 (no fair use rationale), and F11 (no permission) can be done using Twinkle\&#039;s &amp;quot;DI&amp;quot; tab.&#039; } );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case 10:  // template&lt;br /&gt;
		case 11:  // template talk&lt;br /&gt;
			form.append( { type: &#039;header&#039;, label: &#039;Templates&#039; } );&lt;br /&gt;
			form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;, list: Twinkle.speedy.getTemplateList(!firstTime) } );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case 14:  // category&lt;br /&gt;
		case 15:  // category talk&lt;br /&gt;
			form.append( { type: &#039;header&#039;, label: &#039;Categories&#039; } );&lt;br /&gt;
			form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;, list: Twinkle.speedy.categoryList } );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case 100:  // portal&lt;br /&gt;
		case 101:  // portal talk&lt;br /&gt;
			form.append( { type: &#039;header&#039;, label: &#039;Portals&#039; } );&lt;br /&gt;
			form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;, list: Twinkle.speedy.getPortalList(!firstTime) } );&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		default:&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	form.append( { type: &#039;header&#039;, label: &#039;General criteria&#039; } );&lt;br /&gt;
	form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;, list: Twinkle.speedy.getGeneralList(!firstTime) });&lt;br /&gt;
&lt;br /&gt;
	form.append( { type: &#039;header&#039;, label: &#039;Redirects&#039; } );&lt;br /&gt;
	form.append( { type: &#039;radio&#039;, name: &#039;csd&#039;, list: Twinkle.speedy.redirectList } );&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	if (dialog)&lt;br /&gt;
	{&lt;br /&gt;
		// render new dialog&lt;br /&gt;
		dialog.setContent( result );&lt;br /&gt;
		dialog.display();&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		// place the form content into the existing dialog box&lt;br /&gt;
		content.textContent = &#039;&#039;; // clear children&lt;br /&gt;
		content.appendChild(result);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// this is a function to allow for db-multiple filtering&lt;br /&gt;
Twinkle.speedy.getFileList = function twinklespeedyGetFileList(multiple) {&lt;br /&gt;
	var result = [];&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;F1: Redundant file&#039;,&lt;br /&gt;
		value: &#039;redundantimage&#039;,&lt;br /&gt;
		tooltip: &#039;Any file that is a redundant copy, in the same file format and same or lower resolution, of something else on Wikipedia. Likewise, other media that is a redundant copy, in the same format and of the same or lower quality. This does not apply to files duplicated on Wikimedia Commons, because of licence issues; these should be tagged with {{subst:ncd|Image:newname.ext}} or {{subst:ncd}} instead&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;F2: Corrupt or blank file&#039;,&lt;br /&gt;
		value: &#039;noimage&#039;,&lt;br /&gt;
		tooltip: &#039;Before deleting this type of file, verify that the MediaWiki engine cannot read it by previewing a resized thumbnail of it. This also includes empty (i.e., no content) file description pages for Commons files&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;F2: Unneeded file description page for a file on Commons&#039;,&lt;br /&gt;
			value: &#039;fpcfail&#039;,&lt;br /&gt;
			tooltip: &#039;An image, hosted on Commons, but with tags or information on its English Wikipedia description page that are no longer needed. (For example, a failed featured picture candidate.)&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;F3: Improper license&#039;,&lt;br /&gt;
		value: &#039;noncom&#039;,&lt;br /&gt;
		tooltip: &#039;Files licensed as &amp;quot;for non-commercial use only&amp;quot;, &amp;quot;non-derivative use&amp;quot; or &amp;quot;used with permission&amp;quot; that were uploaded on or after 2005-05-19, except where they have been shown to comply with the limited standards for the use of non-free content. This includes files licensed under a &amp;quot;Non-commercial Creative Commons License&amp;quot;. Such files uploaded before 2005-05-19 may also be speedily deleted if they are not used in any articles&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (userIsInGroup(&#039;sysop&#039;)) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;F4: Lack of licensing information&#039;,&lt;br /&gt;
			value: &#039;unksource&#039;,&lt;br /&gt;
			tooltip: &#039;Files in category &amp;quot;Files with unknown source&amp;quot;, &amp;quot;Files with unknown copyright status&amp;quot;, or &amp;quot;Files with no copyright tag&amp;quot; that have been tagged with a template that places them in the category for more than seven days, regardless of when uploaded. Note, users sometimes specify their source in the upload summary, so be sure to check the circumstances of the file.&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;F5: Unused unfree copyrighted files&#039;,&lt;br /&gt;
			value: &#039;unfree&#039;,&lt;br /&gt;
			tooltip: &#039;Files that are not under a free license or in the public domain that are not used in any article and that have been tagged with a template that places them in a dated subcategory of Category:Orphaned fairuse files for more than seven days. Reasonable exceptions may be made for file uploaded for an upcoming article. Use the &amp;quot;Orphaned fair use&amp;quot; option in Twinkle\&#039;s DI module to tag files for forthcoming deletion.&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;F6: Missing fair-use rationale&#039;,&lt;br /&gt;
			value: &#039;norat&#039;,&lt;br /&gt;
			tooltip: &#039;Any file without a fair use rationale may be deleted seven days after it is uploaded.  Boilerplate fair use templates do not constitute a fair use rationale.  Files uploaded before 2006-05-04 should not be deleted immediately; instead, the uploader should be notified that a fair-use rationale is needed.  Files uploaded after 2006-05-04 can be tagged using the &amp;quot;No fair use rationale&amp;quot; option in Twinkle\&#039;s DI module. Such files can be found in the dated subcategories of Category:Files with no fair use rationale.&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;F7: Invalid fair-use claim&#039;,&lt;br /&gt;
		value: &#039;badfairuse&#039;,&lt;br /&gt;
		tooltip: &#039;Any file with a clearly invalid fair-use tag (such as a {{logo}} tag on a photograph of a mascot) may be deleted at any time. Media that fail any part of the non-free content criteria and were uploaded after 2006-07-13 may be deleted forty-eight hours after notification of the uploader. For media uploaded before 2006-07-13 or tagged with the {{Replaceable fair use}} template, the uploader will be given seven days to comply with this policy after being notified&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;F8: Files available as identical or higher-resolution copies on Wikimedia Commons&#039;,&lt;br /&gt;
			value: &#039;nowcommons&#039;,&lt;br /&gt;
			tooltip: &#039;Provided the following conditions are met: 1: The file format of both images is the same. 2: The file\&#039;s license and source status is beyond reasonable doubt, and the license is undoubtedly accepted at Commons. 3: All information on the file description page is present on the Commons file description page. That includes the complete upload history with links to the uploader\&#039;s local user pages. 4: The file is not protected, and the file description page does not contain a request not to move it to Commons. 5: If the file is available on Commons under a different name than locally, all local references to the file must be updated to point to the title used at Commons. 6: For {{c-uploaded}} files: They may be speedily deleted as soon as they are off the Main Page&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;F9: Unambiguous copyright infringement&#039;,&lt;br /&gt;
		value: &#039;imgcopyvio&#039;,&lt;br /&gt;
		tooltip: &#039;The file was copied from a website or other source that does not have a license compatible with Wikipedia, and the uploader neither claims fair use nor makes a credible assertion of permission of free use. Sources that do not have a license compatible with Wikipedia include stock photo libraries such as Getty Images or Corbis. Non-blatant copyright infringements should be discussed at Wikipedia:Files for deletion&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;F10: Useless media file&#039;,&lt;br /&gt;
		value: &#039;badfiletype&#039;,&lt;br /&gt;
		tooltip: &#039;Files uploaded that are neither image, sound, nor video files (e.g. .doc, .pdf, or .xls files) which are not used in any article and have no foreseeable encyclopedic use&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (userIsInGroup(&#039;sysop&#039;)) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;F11: No evidence of permission&#039;,&lt;br /&gt;
			value: &#039;nopermission&#039;,&lt;br /&gt;
			tooltip: &#039;If an uploader has specified a license and has named a third party as the source/copyright holder without providing evidence that this third party has in fact agreed, the item may be deleted seven days after notification of the uploader&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G8: File description page with no corresponding file&#039;,&lt;br /&gt;
		value: &#039;imagepage&#039;,&lt;br /&gt;
		tooltip: &#039;This is only for use when the file doesn\&#039;t exist at all. Corrupt files, and local description pages for files on Commons, should use F2; implausible redirects should use R3; and broken Commons redirects should use G6.&#039;&lt;br /&gt;
	});&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.getArticleList = function twinklespeedyGetArticleList(multiple) {&lt;br /&gt;
	var result = [];&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;A1: No context. Articles lacking sufficient context to identify the subject of the article.&#039;,&lt;br /&gt;
		value: &#039;nocontext&#039;,&lt;br /&gt;
		tooltip: &#039;Example: &amp;quot;He is a funny man with a red car. He makes people laugh.&amp;quot; This applies only to very short articles. Context is different from content, treated in A3, below.&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;A2: Foreign language articles that exist on another Wikimedia project&#039;,&lt;br /&gt;
		value: &#039;foreign&#039;,&lt;br /&gt;
		tooltip: &#039;If the article in question does not exist on another project, the template {{notenglish}} should be used instead. All articles in a non-English language that do not meet this criteria (and do not meet any other criteria for speedy deletion) should be listed at Pages Needing Translation (PNT) for review and possible translation&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;A3: No content whatsoever&#039;,&lt;br /&gt;
		value: &#039;nocontent&#039;,&lt;br /&gt;
		tooltip: &#039;Any article consisting only of links elsewhere (including hyperlinks, category tags and &amp;quot;see also&amp;quot; sections), a rephrasing of the title, and/or attempts to correspond with the person or group named by its title. This does not include disambiguation pages&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;A5: Transwikied articles&#039;,&lt;br /&gt;
		value: &#039;transwiki&#039;,&lt;br /&gt;
		tooltip: &#039;Any article that has been discussed at Articles for Deletion (et al), where the outcome was to transwiki, and where the transwikification has been properly performed and the author information recorded. Alternately, any article that consists of only a dictionary definition, where the transwikification has been properly performed and the author information recorded&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;A7: Unremarkable people, groups, companies, web content, and individual animals&#039;,&lt;br /&gt;
		value: &#039;a7&#039;,&lt;br /&gt;
		tooltip: &#039;An article about a real person, group of people, band, club, company, web content, or individual animal that does not assert the importance or significance of its subject. If controversial, or if there has been a previous AfD that resulted in the article being kept, the article should be nominated for AfD instead&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;A7: Unremarkable person&#039;,&lt;br /&gt;
			value: &#039;person&#039;,&lt;br /&gt;
			tooltip: &#039;An article about a real person that does not assert the importance or significance of its subject. If controversial, or if there has been a previous AfD that resulted in the article being kept, the article should be nominated for AfD instead&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;A7: Unremarkable musician(s) or band&#039;,&lt;br /&gt;
			value: &#039;band&#039;,&lt;br /&gt;
			tooltip: &#039;Article about a band, singer, musician, or musical ensemble that does not assert the importance or significance of the subject&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;A7: Unremarkable club&#039;,&lt;br /&gt;
			value: &#039;club&#039;,&lt;br /&gt;
			tooltip: &#039;Article about a club that does not assert the importance or significance of the subject&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;A7: Unremarkable company or organization&#039;,&lt;br /&gt;
			value: &#039;corp&#039;,&lt;br /&gt;
			tooltip: &#039;Article about a company or organization that does not assert the importance or significance of the subject&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;A7: Unremarkable website or web content&#039;,&lt;br /&gt;
			value: &#039;web&#039;,&lt;br /&gt;
			tooltip: &#039;Article about a web site, blog, online forum, webcomic, podcast, or similar web content that does not assert the importance or significance of its subject&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;A7: Unremarkable individual animal&#039;,&lt;br /&gt;
			value: &#039;animal&#039;,&lt;br /&gt;
			tooltip: &#039;Article about an individual animal (e.g. pet) that does not assert the importance or significance of its subject&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;A9: Unremarkable musical recording where artist\&#039;s article doesn\&#039;t exist&#039;,&lt;br /&gt;
		value: &#039;a9&#039;,&lt;br /&gt;
		tooltip: &#039;An article about a musical recording which does not indicate why its subject is important or significant, and where the artist\&#039;s article has never existed or has been deleted&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;A10: Recently created article that duplicates an existing topic&#039;,&lt;br /&gt;
			value: &#039;a10&#039;,&lt;br /&gt;
			tooltip: &#039;A recently created article with no relevant page history that does not aim to expand upon, detail or improve information within any existing article(s) on the subject, and where the title is not a plausible redirect. This does not include content forks, split pages or any article that aims at expanding or detailing an existing one.&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.categoryList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;C1: Empty categories&#039;,&lt;br /&gt;
		value: &#039;catempty&#039;,&lt;br /&gt;
		tooltip: &#039;(no articles or subcategories for at least four days) whose only content has consisted of links to parent categories. This does not apply to categories being discussed on MP:CFD or MP:SFD, or disambiguation categories. If the category isn\&#039;t relatively new, it possibly contained articles earlier, and deeper investigation is needed&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;G8: Categories populated by a deleted or retargeted template&#039;,&lt;br /&gt;
		value: &#039;templatecat&#039;,&lt;br /&gt;
		tooltip: &#039;If a template which includes pages in a category has been deleted, the associated category can be deleted. This excludes categories that are still in use.&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.userList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;U1: User request&#039;,&lt;br /&gt;
		value: &#039;userreq&#039;,&lt;br /&gt;
		tooltip: &#039;Personal subpages, upon request by their user. In some rare cases there may be administrative need to retain the page. Also, sometimes, main user pages may be deleted as well. See Wikipedia:User page for full instructions and guidelines&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;U2: Nonexistent user&#039;,&lt;br /&gt;
		value: &#039;nouser&#039;,&lt;br /&gt;
		tooltip: &#039;User pages of users that do not exist (Check Special:Listusers)&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;U3: Non-free galleries&#039;,&lt;br /&gt;
		value: &#039;gallery&#039;,&lt;br /&gt;
		tooltip: &#039;Galleries in the userspace which consist mostly of &amp;quot;fair use&amp;quot; or non-free files. Wikipedia\&#039;s non-free content policy forbids users from displaying non-free files, even ones they have uploaded themselves, in userspace. It is acceptable to have free files, GFDL-files, Creative Commons and similar licenses along with public domain material, but not &amp;quot;fair use&amp;quot; files&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.getTemplateList = function twinklespeedyGetTemplateList(multiple) {&lt;br /&gt;
	var result = [];&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;T2: Templates that are blatant misrepresentations of established policy&#039;,&lt;br /&gt;
		value: &#039;policy&#039;,&lt;br /&gt;
		tooltip: &#039;This includes &amp;quot;speedy deletion&amp;quot; templates for issues that are not speedy deletion criteria and disclaimer templates intended to be used in articles&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;T3: Templates that are not employed in any useful fashion&#039;,&lt;br /&gt;
			value: &#039;t3&#039;,&lt;br /&gt;
			tooltip: &#039;Templates that are either substantial duplications of another template or hardcoded instances of another template where the same functionality could be provided by that other template&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.getPortalList = function twinklespeedyGetPortalList(multiple) {&lt;br /&gt;
	var result = [];&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;P1: Portal that would be subject to speedy deletion if it were an article&#039;,&lt;br /&gt;
			value: &#039;p1&#039;,&lt;br /&gt;
			tooltip: &#039;You must specify the article criterion that applies in this case (A1, A3, A7, or A10).&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;P2: Underpopulated portal&#039;,&lt;br /&gt;
		value: &#039;emptyportal&#039;,&lt;br /&gt;
		tooltip: &#039;Any Portal based on a topic for which there is not a non-stub header article, and at least three non-stub articles detailing subject matter that would be appropriate to discuss under the title of that Portal&#039;&lt;br /&gt;
	});&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.getGeneralList = function twinklespeedyGetGeneralList(multiple) {&lt;br /&gt;
	var result = [];&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;Custom rationale&#039; + (userIsInGroup(&#039;sysop&#039;) ? &#039; (custom deletion reason)&#039; : &#039; using {&#039;+&#039;{db}} template&#039;),&lt;br /&gt;
			value: &#039;reason&#039;,&lt;br /&gt;
			tooltip: &#039;{&#039;+&#039;{db}} is short for &amp;quot;delete because&amp;quot;. One of the other deletion criteria must still apply to the page, and you should (must?) make mention of this in your rationale. This is not a &amp;quot;catch-all&amp;quot; for when you can\&#039;t find the right criterion.&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G1: Patent nonsense. Pages consisting purely of incoherent text or gibberish with no meaningful content or history.&#039;,&lt;br /&gt;
		value: &#039;nonsense&#039;,&lt;br /&gt;
		tooltip: &#039;This does not include poor writing, partisan screeds, obscene remarks, vandalism, fictional material, material not in English, poorly translated material, implausible theories, or hoaxes&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G2: Test page&#039;,&lt;br /&gt;
		value: &#039;test&#039;,&lt;br /&gt;
		tooltip: &#039;e.g., &amp;quot;Can I really create a page here?&amp;quot;&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G3: Pure vandalism&#039;,&lt;br /&gt;
		value: &#039;vandalism&#039;,&lt;br /&gt;
		tooltip: &#039;Plain pure vandalism (including redirects left behind from pagemove vandalism)&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;G3: Blatant hoax&#039;,&lt;br /&gt;
			value: &#039;hoax&#039;,&lt;br /&gt;
			tooltip: &#039;Blatant and obvious hoax, to the point of vandalism&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G4: Recreation of deleted material&#039;,&lt;br /&gt;
		value: &#039;repost&#039;,&lt;br /&gt;
		tooltip: &#039;A copy, by any title, of a page that was deleted via an XfD process or Deletion review, provided that the copy is substantially identical to the deleted version and that any revisions made clearly do not address the reasons for which the page was deleted. This clause does not apply to content that has been &amp;quot;userfied&amp;quot;, to content undeleted as a result of Deletion review, or if the prior deletions were proposed or speedy deletions, although in this last case, the previous speedy criterion, or other speedy deletion criteria, may apply&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G5: Banned user&#039;,&lt;br /&gt;
		value: &#039;banned&#039;,&lt;br /&gt;
		tooltip: &#039;Pages created by banned users while they were banned&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;G6: History merge&#039;,&lt;br /&gt;
			value: &#039;histmerge&#039;,&lt;br /&gt;
			tooltip: &#039;Temporarily deleting a page in order to merge page histories&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;G6: Move&#039;,&lt;br /&gt;
			value: &#039;move&#039;,&lt;br /&gt;
			tooltip: &#039;Making way for a noncontroversial move like reversing a redirect&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;G6: XfD&#039;,&lt;br /&gt;
			value: &#039;xfd&#039;,&lt;br /&gt;
			tooltip: &#039;An admin has closed a deletion discussion (at AfD, FfD, RfD, TfD, CfD, SfD, or MfD) as &amp;quot;delete&amp;quot;, but they didn\&#039;t actually delete the page.&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;G6: Unnecessary disambiguation page&#039;,&lt;br /&gt;
			value: &#039;disambig&#039;,&lt;br /&gt;
			tooltip: &#039;This only applies for orphaned disambiguation pages which either: (1) disambiguate two or fewer existing Wikipedia pages and whose title ends in &amp;quot;(disambiguation)&amp;quot; (i.e., there is a primary topic); or (2) disambiguates no (zero) existing Wikipedia pages, regardless of its title.&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;G6: Redirect to malplaced disambiguation page&#039;,&lt;br /&gt;
			value: &#039;movedab&#039;,&lt;br /&gt;
			tooltip: &#039;This only applies for redirects to disambiguation pages ending in (disambiguation) where a primary topic does not exist.&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;G6: Copy-and-paste page move&#039;,&lt;br /&gt;
			value: &#039;copypaste&#039;,&lt;br /&gt;
			tooltip: &#039;This only applies for a copy-and-paste page move of another page that needs to be temporarily deleted to make room for a clean page move.&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G6: Housekeeping&#039;,&lt;br /&gt;
		value: &#039;g6&#039;,&lt;br /&gt;
		tooltip: &#039;Other non-controversial &amp;quot;housekeeping&amp;quot; tasks&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G7: Author requests deletion, or author blanked&#039;,&lt;br /&gt;
		value: &#039;author&#039;,&lt;br /&gt;
		tooltip: &#039;Any page for which deletion is requested by the original author in good faith, provided the page\&#039;s only substantial content was added by its author. If the author blanks the page, this can also be taken as a deletion request.&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G8: Pages dependent on a non-existent or deleted page&#039;,&lt;br /&gt;
		value: &#039;g8&#039;,&lt;br /&gt;
		tooltip: &#039;such as talk pages with no corresponding subject page; subpages with no parent page; file pages without a corresponding file; redirects to invalid targets, such as nonexistent targets, redirect loops, and bad titles; or categories populated by deleted or retargeted templates. This excludes any page that is useful to the project, and in particular: deletion discussions that are not logged elsewhere, user and user talk pages, talk page archives, plausible redirects that can be changed to valid targets, and file pages or talk pages for files that exist on Wikimedia Commons.&#039;&lt;br /&gt;
	});&lt;br /&gt;
	if (!multiple) {&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;G8: Talk pages with no corresponding subject page&#039;,&lt;br /&gt;
			value: &#039;talk&#039;,&lt;br /&gt;
			tooltip: &#039;This excludes any page that is useful to the project, and in particular: deletion discussions that are not logged elsewhere, user and user talk pages, talk page archives, plausible redirects that can be changed to valid targets, and file pages or talk pages for files that exist on Wikimedia Commons.&#039;&lt;br /&gt;
		});&lt;br /&gt;
		result.push({&lt;br /&gt;
			label: &#039;G8: Subpages with no parent page&#039;,&lt;br /&gt;
			value: &#039;subpage&#039;,&lt;br /&gt;
			tooltip: &#039;This excludes any page that is useful to the project, and in particular: deletion discussions that are not logged elsewhere, user and user talk pages, talk page archives, plausible redirects that can be changed to valid targets, and file pages or talk pages for files that exist on Wikimedia Commons.&#039;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G10: Attack page&#039;,&lt;br /&gt;
		value: &#039;attack&#039;,&lt;br /&gt;
		tooltip: &#039;Pages that serve no purpose but to disparage their subject or some other entity (e.g., &amp;quot;John Q. Doe is an imbecile&amp;quot;). This includes a biography of a living person that is negative in tone and unsourced, where there is no NPOV version in the history to revert to. Administrators deleting such pages should not quote the content of the page in the deletion summary!&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G11: Unambiguous advertising&#039;,&lt;br /&gt;
		value: &#039;spam&#039;,&lt;br /&gt;
		tooltip: &#039;Pages which exclusively promote a company, product, group, service, or person and which would need to be fundamentally rewritten in order to become encyclopedic. Note that simply having a company, product, group, service, or person as its subject does not qualify an article for this criterion; an article that is blatant advertising should have inappropriate content as well&#039;&lt;br /&gt;
	});&lt;br /&gt;
	result.push({&lt;br /&gt;
		label: &#039;G12: Unambiguous copyright infringement&#039;,&lt;br /&gt;
		value: &#039;copyvio&#039;,&lt;br /&gt;
		tooltip: &#039;Either: (1) Material was copied from another website that does not have a license compatible with Wikipedia, or is photography from a stock photo seller (such as Getty Images or Corbis) or other commercial content provider; (2) There is no non-infringing content in the page history worth saving; or (3) The infringement was introduced at once by a single person rather than created organically on wiki and then copied by another website such as one of the many Wikipedia mirrors&#039;&lt;br /&gt;
	});&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.redirectList = [&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;R2: Redirects from mainspace to any other namespace except the Category:, Template:, Wikipedia:, Help: and Portal: namespaces&#039;,&lt;br /&gt;
		value: &#039;rediruser&#039;,&lt;br /&gt;
		tooltip: &#039;(this does not include the Wikipedia shortcut pseudo-namespaces). If this was the result of a page move, consider waiting a day or two before deleting the redirect&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;R3: Redirects as a result of an implausible typo that were recently created&#039;,&lt;br /&gt;
		value: &#039;redirtypo&#039;,&lt;br /&gt;
		tooltip: &#039;However, redirects from common misspellings or misnomers are generally useful, as are redirects in other languages&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		label: &#039;G8: Redirects to invalid targets, such as nonexistent targets, redirect loops, and bad titles&#039;,&lt;br /&gt;
		value: &#039;redirnone&#039;,&lt;br /&gt;
		tooltip: &#039;This excludes any page that is useful to the project, and in particular: deletion discussions that are not logged elsewhere, user and user talk pages, talk page archives, plausible redirects that can be changed to valid targets, and file pages or talk pages for files that exist on Wikimedia Commons.&#039;&lt;br /&gt;
	}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.normalizeHash = {&lt;br /&gt;
	&#039;reason&#039;: &#039;db&#039;,&lt;br /&gt;
	&#039;multiple&#039;: &#039;multiple&#039;,&lt;br /&gt;
	&#039;multiple-finish&#039;: &#039;multiple-finish&#039;,&lt;br /&gt;
	&#039;nonsense&#039;: &#039;g1&#039;,&lt;br /&gt;
	&#039;test&#039;: &#039;g2&#039;,&lt;br /&gt;
	&#039;vandalism&#039;: &#039;g3&#039;,&lt;br /&gt;
	&#039;hoax&#039;: &#039;g3&#039;,&lt;br /&gt;
	&#039;repost&#039;: &#039;g4&#039;,&lt;br /&gt;
	&#039;banned&#039;: &#039;g5&#039;,&lt;br /&gt;
	&#039;histmerge&#039;: &#039;g6&#039;,&lt;br /&gt;
	&#039;move&#039;: &#039;g6&#039;,&lt;br /&gt;
	&#039;xfd&#039;: &#039;g6&#039;,&lt;br /&gt;
	&#039;disambig&#039;: &#039;g6&#039;,&lt;br /&gt;
	&#039;movedab&#039;: &#039;g6&#039;,&lt;br /&gt;
	&#039;copypaste&#039;: &#039;g6&#039;,&lt;br /&gt;
	&#039;g6&#039;: &#039;g6&#039;,&lt;br /&gt;
	&#039;author&#039;: &#039;g7&#039;,&lt;br /&gt;
	&#039;g8&#039;: &#039;g8&#039;,&lt;br /&gt;
	&#039;talk&#039;: &#039;g8&#039;,&lt;br /&gt;
	&#039;subpage&#039;: &#039;g8&#039;,&lt;br /&gt;
	&#039;redirnone&#039;: &#039;g8&#039;,&lt;br /&gt;
	&#039;templatecat&#039;: &#039;g8&#039;,&lt;br /&gt;
	&#039;attack&#039;: &#039;g10&#039;,&lt;br /&gt;
	&#039;spam&#039;: &#039;g11&#039;,&lt;br /&gt;
	&#039;copyvio&#039;: &#039;g12&#039;,&lt;br /&gt;
	&#039;nocontext&#039;: &#039;a1&#039;,&lt;br /&gt;
	&#039;foreign&#039;: &#039;a2&#039;,&lt;br /&gt;
	&#039;nocontent&#039;: &#039;a3&#039;,&lt;br /&gt;
	&#039;transwiki&#039;: &#039;a5&#039;,&lt;br /&gt;
	&#039;a7&#039;: &#039;a7&#039;,&lt;br /&gt;
	&#039;person&#039;: &#039;a7&#039;,&lt;br /&gt;
	&#039;corp&#039;: &#039;a7&#039;,&lt;br /&gt;
	&#039;web&#039;: &#039;a7&#039;,&lt;br /&gt;
	&#039;band&#039;: &#039;a7&#039;,&lt;br /&gt;
	&#039;club&#039;: &#039;a7&#039;,&lt;br /&gt;
	&#039;animal&#039;: &#039;a7&#039;,&lt;br /&gt;
	&#039;a9&#039;: &#039;a9&#039;,&lt;br /&gt;
	&#039;a10&#039;: &#039;a10&#039;,&lt;br /&gt;
	&#039;rediruser&#039;: &#039;r2&#039;,&lt;br /&gt;
	&#039;redirtypo&#039;: &#039;r3&#039;,&lt;br /&gt;
	&#039;redundantimage&#039;: &#039;f1&#039;,&lt;br /&gt;
	&#039;noimage&#039;: &#039;f2&#039;,&lt;br /&gt;
	&#039;fpcfail&#039;: &#039;f2&#039;,&lt;br /&gt;
	&#039;noncom&#039;: &#039;f3&#039;,&lt;br /&gt;
	&#039;unksource&#039;: &#039;f4&#039;,&lt;br /&gt;
	&#039;unfree&#039;: &#039;f5&#039;,&lt;br /&gt;
	&#039;norat&#039;: &#039;f6&#039;,&lt;br /&gt;
	&#039;badfairuse&#039;: &#039;f7&#039;,&lt;br /&gt;
	&#039;nowcommons&#039;: &#039;f8&#039;,&lt;br /&gt;
	&#039;imgcopyvio&#039;: &#039;f9&#039;,&lt;br /&gt;
	&#039;badfiletype&#039;: &#039;f10&#039;,&lt;br /&gt;
	&#039;nopermission&#039;: &#039;f11&#039;,&lt;br /&gt;
	&#039;catempty&#039;: &#039;c1&#039;,&lt;br /&gt;
	&#039;userreq&#039;: &#039;u1&#039;,&lt;br /&gt;
	&#039;nouser&#039;: &#039;u2&#039;,&lt;br /&gt;
	&#039;gallery&#039;: &#039;u3&#039;,&lt;br /&gt;
	&#039;policy&#039;:&#039;t2&#039;,&lt;br /&gt;
	&#039;t3&#039;:&#039;t3&#039;,&lt;br /&gt;
	&#039;p1&#039;:&#039;p1&#039;,&lt;br /&gt;
	&#039;emptyportal&#039;: &#039;p2&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// keep this synched with [[MediaWiki:Deletereason-dropdown]]&lt;br /&gt;
Twinkle.speedy.reasonHash = {&lt;br /&gt;
	&#039;reason&#039;: &#039;&#039;,&lt;br /&gt;
// General&lt;br /&gt;
	&#039;nonsense&#039;: &#039;[[MP:PN|Patent nonsense]], meaningless, or incomprehensible&#039;,&lt;br /&gt;
	&#039;test&#039;: &#039;Test page&#039;,&lt;br /&gt;
	&#039;vandalism&#039;: &#039;[[MP:Vandalism|Vandalism]]&#039;,&lt;br /&gt;
	&#039;hoax&#039;: &#039;Blatant [[MP:Do not create hoaxes|hoax]]&#039;,&lt;br /&gt;
	&#039;repost&#039;: &#039;Recreation of a page that was [[MP:DEL|deleted]] per a [[MP:XFD|deletion discussion]]&#039;,&lt;br /&gt;
	&#039;banned&#039;: &#039;Creation by a [[MP:BLOCK|blocked]] or [[MP:BAN|banned]] user in violation of block or ban&#039;,&lt;br /&gt;
	&#039;histmerge&#039;: &#039;Temporary deletion in order to merge page histories&#039;,&lt;br /&gt;
	&#039;move&#039;: &#039;Making way for a non-controversial move&#039;,&lt;br /&gt;
	&#039;xfd&#039;: &#039;Deleting page per result of [[MP:XfD|deletion discussion]]&#039;,&lt;br /&gt;
	&#039;disambig&#039;: &#039;Unnecessary disambiguation page&#039;,&lt;br /&gt;
	&#039;movedab&#039;: &#039;Redirect to [[MP:MALPLACED|malplaced disambiguation page]]&#039;,&lt;br /&gt;
	&#039;copypaste&#039;: &#039;[[MP:CPMV|Copy-and-paste]] page move&#039;,&lt;br /&gt;
	&#039;g6&#039;: &#039;Housekeeping and routine (non-controversial) cleanup&#039;,&lt;br /&gt;
	&#039;author&#039;: &#039;One author who has requested deletion or blanked the page&#039;,&lt;br /&gt;
	&#039;g8&#039;: &#039;Page dependent on a deleted or nonexistent page&#039;,&lt;br /&gt;
	&#039;talk&#039;: &#039;[[Help:Talk page|Talk page]] of a deleted or nonexistent page&#039;,&lt;br /&gt;
	&#039;subpage&#039;: &#039;[[MP:Subpages|Subpage]] of a deleted or nonexistent page&#039;,&lt;br /&gt;
	&#039;redirnone&#039;: &#039;[[Wikipedia:Redirect|redirect]] to a deleted or nonexistent page&#039;,&lt;br /&gt;
	&#039;templatecat&#039;: &#039;Populated by deleted or retargeted templates&#039;,&lt;br /&gt;
	&#039;attack&#039;: &#039;[[MP:ATP|Attack page]] or negative unsourced [[MP:BLP|BLP]]&#039;,&lt;br /&gt;
	&#039;spam&#039;: &#039;Unambiguous [[MP:ADS|advertising]] or promotion&#039;,&lt;br /&gt;
	&#039;copyvio&#039;: &#039;Unambiguous [[MP:C|copyright infringement]]&#039;,&lt;br /&gt;
// Articles&lt;br /&gt;
	&#039;nocontext&#039;: &#039;Not enough context to identify article\&#039;s subject&#039;,&lt;br /&gt;
	&#039;foreign&#039;: &#039;Article in a foreign language that exists on another project&#039;,&lt;br /&gt;
	&#039;nocontent&#039;: &#039;Article that has no meaningful, substantive content&#039;,&lt;br /&gt;
	&#039;transwiki&#039;: &#039;Article that has been transwikied to another project&#039;,&lt;br /&gt;
	&#039;a7&#039;: &#039;No explanation of the subject\&#039;s significance (real person, animal, organization, or web content)&#039;,&lt;br /&gt;
	&#039;person&#039; : &#039;No explanation of the subject\&#039;s significance (real person)&#039;,&lt;br /&gt;
	&#039;web&#039;: &#039;No explanation of the subject\&#039;s significance (web content)&#039;,&lt;br /&gt;
	&#039;corp&#039;: &#039;No explanation of the subject\&#039;s significance (organization)&#039;,&lt;br /&gt;
	&#039;club&#039;: &#039;No explanation of the subject\&#039;s significance (organization)&#039;,&lt;br /&gt;
	&#039;band&#039;: &#039;No explanation of the subject\&#039;s significance (band/musician)&#039;,&lt;br /&gt;
	&#039;animal&#039;: &#039;No explanation of the subject\&#039;s significance (individual animal)&#039;,&lt;br /&gt;
	&#039;a9&#039;: &#039;Music recording by redlinked artist and no indication of importance or significance&#039;,&lt;br /&gt;
	&#039;a10&#039;: &#039;Recently created article that duplicates an existing topic&#039;,&lt;br /&gt;
// Images and media&lt;br /&gt;
	&#039;redundantimage&#039;: &#039;File  redundant to another on Wikipedia&#039;,&lt;br /&gt;
	&#039;noimage&#039;: &#039;Corrupt or empty file, or a file description page for a file on Commons&#039;,&lt;br /&gt;
	&#039;noncom&#039;: &#039;File with improper license&#039;,&lt;br /&gt;
	&#039;unksource&#039;: &#039;Lack of licensing information&#039;,&lt;br /&gt;
	&#039;unfree&#039;: &#039;Unused non-free media&#039;,&lt;br /&gt;
	&#039;norat&#039;: &#039;Non-free file without [[MP:RAT|fair-use rationale]]&#039;,&lt;br /&gt;
	&#039;badfairuse&#039;: &#039;[[MP:NFCC|Invalid]] fair-use claim&#039;,&lt;br /&gt;
	&#039;nowcommons&#039;: &#039;Media file available on Commons&#039;,&lt;br /&gt;
	&#039;imgcopyvio&#039;: &#039;File [[MP:COPYVIO|copyright violation]]&#039;,&lt;br /&gt;
	&#039;badfiletype&#039;: &#039;Useless media file&#039;,&lt;br /&gt;
	&#039;nopermission&#039;: &#039;No evidence of permission&#039;,&lt;br /&gt;
// Categories&lt;br /&gt;
	&#039;catempty&#039;: &#039;Empty category&#039;,&lt;br /&gt;
// User pages&lt;br /&gt;
	&#039;userreq&#039;: &#039;User request to delete page in own userspace&#039;,&lt;br /&gt;
	&#039;nouser&#039;: &#039;Userpage or subpage of a nonexistent user&#039;,&lt;br /&gt;
	&#039;gallery&#039;: &#039;[[MP:NFC|Non-free]] [[Help:Gallery|gallery]]&#039;,&lt;br /&gt;
// Templates&lt;br /&gt;
	&#039;policy&#039;: &#039;Template that unambiguously misrepresents established policy&#039;,&lt;br /&gt;
	&#039;t3&#039;: &#039;Unused, redundant template&#039;,&lt;br /&gt;
// Portals&lt;br /&gt;
	&#039;p1&#039;: &#039;[[MP:P|Portal]] page that would be subject to speedy deletion as an article&#039;,&lt;br /&gt;
	&#039;emptyportal&#039;: &#039;[[MP:P|Portal]] without a substantial topic base&#039;,&lt;br /&gt;
// Redirects&lt;br /&gt;
	&#039;rediruser&#039;: &#039;Cross-[[MP:NS|namespace]] [[MP:R|redirect]] from mainspace&#039;,&lt;br /&gt;
	&#039;redirtypo&#039;: &#039;Recently created, implausible [[MP:R|redirect]]&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.callbacks = {&lt;br /&gt;
	sysop: {&lt;br /&gt;
		main: function( params ) {&lt;br /&gt;
			var thispage = new Wikipedia.page( mw.config.get(&#039;wgPageName&#039;), &amp;quot;Deleting page&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
			// delete page&lt;br /&gt;
			var reason;&lt;br /&gt;
			if (params.normalized === &#039;db&#039;) {&lt;br /&gt;
				reason = prompt(&amp;quot;Enter the deletion summary to use, which will be entered into the deletion log:&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
			} else {&lt;br /&gt;
				var presetReason = &amp;quot;[[MP:CSD#&amp;quot; + params.normalized.toUpperCase() + &amp;quot;|&amp;quot; + params.normalized.toUpperCase() + &amp;quot;]]: &amp;quot; + params.reason;&lt;br /&gt;
				if (Twinkle.getPref(&amp;quot;promptForSpeedyDeletionSummary&amp;quot;).indexOf(params.normalized) !== -1) {&lt;br /&gt;
					reason = prompt(&amp;quot;Enter the deletion summary to use, or press OK to accept the automatically generated one.&amp;quot;, presetReason);&lt;br /&gt;
				} else {&lt;br /&gt;
					reason = presetReason;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if (!reason || !reason.replace(/^\s*/, &amp;quot;&amp;quot;).replace(/\s*$/, &amp;quot;&amp;quot;)) {&lt;br /&gt;
				Status.error(&amp;quot;Asking for reason&amp;quot;, &amp;quot;you didn&#039;t give one.  I don&#039;t know... what with admins and their apathetic antics... I give up...&amp;quot;);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			thispage.setEditSummary( reason + Twinkle.getPref(&#039;deletionSummaryAd&#039;) );&lt;br /&gt;
			thispage.deletePage();&lt;br /&gt;
&lt;br /&gt;
			// delete talk page&lt;br /&gt;
			if (params.deleteTalkPage &amp;amp;&amp;amp;&lt;br /&gt;
			    params.normalized !== &#039;f8&#039; &amp;amp;&amp;amp;&lt;br /&gt;
			    document.getElementById( &#039;ca-talk&#039; ).className !== &#039;new&#039;) {&lt;br /&gt;
				var talkpage = new Wikipedia.page( Wikipedia.namespaces[ mw.config.get(&#039;wgNamespaceNumber&#039;) + 1 ] + &#039;:&#039; + mw.config.get(&#039;wgTitle&#039;), &amp;quot;Deleting talk page&amp;quot; );&lt;br /&gt;
				talkpage.setEditSummary(&#039;[[MP:CSD#G8|G8]]: Talk page of deleted page [[&#039; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]]. &amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
				talkpage.deletePage();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// promote Unlink tool&lt;br /&gt;
			var $link, $bigtext;&lt;br /&gt;
			if( mw.config.get(&#039;wgNamespaceNumber&#039;) === 6 &amp;amp;&amp;amp; params.normalized !== &#039;f8&#039; ) {&lt;br /&gt;
				$link = $(&#039;&amp;lt;a/&amp;gt;&#039;, {&lt;br /&gt;
					&#039;href&#039;: &#039;#&#039;,&lt;br /&gt;
					&#039;text&#039;: &#039;click here to go to the Unlink tool&#039;,&lt;br /&gt;
					&#039;css&#039;: { &#039;fontSize&#039;: &#039;130%&#039;, &#039;fontWeight&#039;: &#039;bold&#039; },&lt;br /&gt;
					&#039;click&#039;: function(){&lt;br /&gt;
						Wikipedia.actionCompleted.redirect = null;&lt;br /&gt;
						Twinkle.speedy.dialog.close();&lt;br /&gt;
						Twinkle.unlink.callback(&amp;quot;Removing usages of and/or links to deleted file &amp;quot; + mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
					}&lt;br /&gt;
				});&lt;br /&gt;
				$bigtext = $(&#039;&amp;lt;span/&amp;gt;&#039;, {&lt;br /&gt;
					&#039;text&#039;: &#039;To orphan backlinks and remove instances of file usage&#039;,&lt;br /&gt;
					&#039;css&#039;: { &#039;fontSize&#039;: &#039;130%&#039;, &#039;fontWeight&#039;: &#039;bold&#039; }&lt;br /&gt;
				});&lt;br /&gt;
				Status.info($bigtext[0], $link[0]);&lt;br /&gt;
			} else if (params.normalized !== &#039;f8&#039;) {&lt;br /&gt;
				$link = $(&#039;&amp;lt;a/&amp;gt;&#039;, {&lt;br /&gt;
					&#039;href&#039;: &#039;#&#039;,&lt;br /&gt;
					&#039;text&#039;: &#039;click here to go to the Unlink tool&#039;,&lt;br /&gt;
					&#039;css&#039;: { &#039;fontSize&#039;: &#039;130%&#039;, &#039;fontWeight&#039;: &#039;bold&#039; },&lt;br /&gt;
					&#039;click&#039;: function(){&lt;br /&gt;
						Wikipedia.actionCompleted.redirect = null;&lt;br /&gt;
						Twinkle.speedy.dialog.close();&lt;br /&gt;
						Twinkle.unlink.callback(&amp;quot;Removing links to deleted page &amp;quot; + mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
					}&lt;br /&gt;
				});&lt;br /&gt;
				$bigtext = $(&#039;&amp;lt;span/&amp;gt;&#039;, {&lt;br /&gt;
					&#039;text&#039;: &#039;To orphan backlinks&#039;,&lt;br /&gt;
					&#039;css&#039;: { &#039;fontSize&#039;: &#039;130%&#039;, &#039;fontWeight&#039;: &#039;bold&#039; }&lt;br /&gt;
				});&lt;br /&gt;
				Status.info($bigtext[0], $link[0]);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// open talk page of first contributor&lt;br /&gt;
			if( params.openusertalk ) {&lt;br /&gt;
				thispage = new Wikipedia.page( mw.config.get(&#039;wgPageName&#039;) );  // a necessary evil, in order to clear incorrect Status.text&lt;br /&gt;
				thispage.setCallbackParameters( params );&lt;br /&gt;
				thispage.lookupCreator( Twinkle.speedy.callbacks.sysop.openUserTalkPage );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// delete redirects&lt;br /&gt;
			if (params.deleteRedirects) {&lt;br /&gt;
				var query = {&lt;br /&gt;
					&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
					&#039;list&#039;: &#039;backlinks&#039;,&lt;br /&gt;
					&#039;blfilterredir&#039;: &#039;redirects&#039;,&lt;br /&gt;
					&#039;bltitle&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
					&#039;bllimit&#039;: 5000  // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
				};&lt;br /&gt;
				var wikipedia_api = new Wikipedia.api( &#039;getting list of redirects...&#039;, query, Twinkle.speedy.callbacks.sysop.deleteRedirectsMain,&lt;br /&gt;
					new Status( &#039;Deleting redirects&#039; ) );&lt;br /&gt;
				wikipedia_api.params = params;&lt;br /&gt;
				wikipedia_api.post();&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		openUserTalkPage: function( pageobj ) {&lt;br /&gt;
			pageobj.getStatusElement().unlink();  // don&#039;t need it anymore&lt;br /&gt;
			var user = pageobj.getCreator();&lt;br /&gt;
			var statusIndicator = new Status(&#039;Opening user talk page edit form for &#039; + user, &#039;opening...&#039;);&lt;br /&gt;
&lt;br /&gt;
			var query = {&lt;br /&gt;
				&#039;title&#039;: &#039;User talk:&#039; + user,&lt;br /&gt;
				&#039;action&#039;: &#039;edit&#039;,&lt;br /&gt;
				&#039;preview&#039;: &#039;yes&#039;,&lt;br /&gt;
				&#039;vanarticle&#039;: mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;)&lt;br /&gt;
			};&lt;br /&gt;
			switch( Twinkle.getPref(&#039;userTalkPageMode&#039;) ) {&lt;br /&gt;
			case &#039;tab&#039;:&lt;br /&gt;
				window.open( mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScriptPath&#039;) + &#039;/index.php?&#039; + QueryString.create( query ), &#039;_tab&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;blank&#039;:&lt;br /&gt;
				window.open( mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScriptPath&#039;) + &#039;/index.php?&#039; + QueryString.create( query ), &#039;_blank&#039;, &#039;location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;window&#039;:&lt;br /&gt;
				/* falls through */&lt;br /&gt;
				default :&lt;br /&gt;
				window.open( mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScriptPath&#039;) + &#039;/index.php?&#039; + QueryString.create( query ), &#039;twinklewarnwindow&#039;, &#039;location=no,toolbar=no,status=no,directories=no,scrollbars=yes,width=1200,height=800&#039; );&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			statusIndicator.info( &#039;complete&#039; );&lt;br /&gt;
		},&lt;br /&gt;
		deleteRedirectsMain: function( apiobj ) {&lt;br /&gt;
			var xmlDoc = apiobj.getXML();&lt;br /&gt;
			var $snapshot = $(xmlDoc).find(&#039;backlinks bl&#039;);&lt;br /&gt;
&lt;br /&gt;
			var total = $snapshot.length;&lt;br /&gt;
&lt;br /&gt;
			if( !total ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var statusIndicator = apiobj.statelem;&lt;br /&gt;
			statusIndicator.status(&amp;quot;0%&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			var onsuccess = function( apiobj ) {&lt;br /&gt;
				var obj = apiobj.params.obj;&lt;br /&gt;
				var total = apiobj.params.total;&lt;br /&gt;
				var now = parseInt( 100 * ++(apiobj.params.current)/total, 10 ) + &#039;%&#039;;&lt;br /&gt;
				obj.update( now );&lt;br /&gt;
				apiobj.statelem.unlink();&lt;br /&gt;
				if( apiobj.params.current &amp;gt;= total ) {&lt;br /&gt;
					obj.info( now + &#039; (completed)&#039; );&lt;br /&gt;
					Wikipedia.removeCheckpoint();&lt;br /&gt;
				}&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			Wikipedia.addCheckpoint();&lt;br /&gt;
&lt;br /&gt;
			var params = clone( apiobj.params );&lt;br /&gt;
			params.current = 0;&lt;br /&gt;
			params.total = total;&lt;br /&gt;
			params.obj = statusIndicator;&lt;br /&gt;
&lt;br /&gt;
			$snapshot.each(function(key, value) {&lt;br /&gt;
				var title = $(value).attr(&#039;title&#039;);&lt;br /&gt;
				var page = new Wikipedia.page(title, &#039;Deleting redirect &amp;quot;&#039; + title + &#039;&amp;quot;&#039;);&lt;br /&gt;
				page.setEditSummary(&#039;[[MP:CSD#G8|G8]]: Redirect to deleted page [[&#039; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;deletionSummaryAd&#039;));&lt;br /&gt;
				page.deletePage(onsuccess);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	user: {&lt;br /&gt;
		main: function(pageobj) {&lt;br /&gt;
			var statelem = pageobj.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
			if (!pageobj.exists()) {&lt;br /&gt;
				statelem.error( &amp;quot;It seems that the page doesn&#039;t exist; perhaps it has already been deleted&amp;quot; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			statelem.status( &#039;Checking for tags on the page...&#039; );&lt;br /&gt;
&lt;br /&gt;
			// check for existing deletion tags&lt;br /&gt;
			var tag = /(?:\{\{\s*(db|delete|db-.*?)(?:\s*\||\s*\}\}))/.exec( text );&lt;br /&gt;
			if( tag ) {&lt;br /&gt;
				statelem.error( [ htmlNode( &#039;strong&#039;, tag[1] ) , &amp;quot; is already placed on the page.&amp;quot; ] );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var xfd = /(?:\{\{([rsaiftcm]fd|md1)[^{}]*?\}\})/i.exec( text );&lt;br /&gt;
			if( xfd &amp;amp;&amp;amp; !confirm( &amp;quot;The deletion-related template {{&amp;quot; + xfd[1] + &amp;quot;}} was found on the page. Do you still want to add a CSD template?&amp;quot; ) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var code, parameters, i;&lt;br /&gt;
			if (params.normalized === &#039;multiple&#039;)&lt;br /&gt;
			{&lt;br /&gt;
				code = &amp;quot;{{db-multiple&amp;quot;;&lt;br /&gt;
				for (i in Twinkle.speedy.dbmultipleCriteria) {&lt;br /&gt;
					if (typeof Twinkle.speedy.dbmultipleCriteria[i] === &#039;string&#039;) {&lt;br /&gt;
						code += &amp;quot;|&amp;quot; + Twinkle.speedy.dbmultipleCriteria[i].toUpperCase();&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				for (i in Twinkle.speedy.dbmultipleParameters) {&lt;br /&gt;
					if (typeof Twinkle.speedy.dbmultipleParameters[i] === &#039;string&#039;) {&lt;br /&gt;
						code += &amp;quot;|&amp;quot; + i + &amp;quot;=&amp;quot; + Twinkle.speedy.dbmultipleParameters[i];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				code += &amp;quot;}}&amp;quot;;&lt;br /&gt;
				params.utparams = [];&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				parameters = Twinkle.speedy.getParameters(params.value, params.normalized, statelem);&lt;br /&gt;
				if (!parameters) {&lt;br /&gt;
					return;  // the user aborted&lt;br /&gt;
				}&lt;br /&gt;
				code = &amp;quot;{{db-&amp;quot; + params.value;&lt;br /&gt;
				for (i in parameters) {&lt;br /&gt;
					if (typeof parameters[i] === &#039;string&#039;) {&lt;br /&gt;
						code += &amp;quot;|&amp;quot; + i + &amp;quot;=&amp;quot; + parameters[i];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				code += &amp;quot;}}&amp;quot;;&lt;br /&gt;
				params.utparams = Twinkle.speedy.getUserTalkParameters(params.normalized, parameters);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var thispage = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
			// patrol the page, if reached from Special:NewPages&lt;br /&gt;
			if( Twinkle.getPref(&#039;markSpeedyPagesAsPatrolled&#039;) ) {&lt;br /&gt;
				thispage.patrol();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Notification to first contributor&lt;br /&gt;
			if (params.usertalk) {&lt;br /&gt;
				var callback = function(pageobj) {&lt;br /&gt;
					var initialContrib = pageobj.getCreator();&lt;br /&gt;
					var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, &amp;quot;Notifying initial contributor (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
					var nowelcome = Twinkle.getPref(&#039;welcomeUserOnSpeedyDeletionNotification&#039;).indexOf(params.normalized) === -1;&lt;br /&gt;
					var notifytext;&lt;br /&gt;
&lt;br /&gt;
					// specialcase &amp;quot;db&amp;quot; and &amp;quot;db-multiple&amp;quot;&lt;br /&gt;
					// XXX modify the &amp;quot;db-csd-notice-custom&amp;quot; template to cater for these special cases&lt;br /&gt;
					switch (params.normalized)&lt;br /&gt;
					{&lt;br /&gt;
						case &#039;db&#039;:&lt;br /&gt;
							notifytext = &amp;quot;\n\n{{subst:db-reason-notice|1=&amp;quot; + mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
							break;&lt;br /&gt;
						case &#039;multiple&#039;:&lt;br /&gt;
							notifytext = &amp;quot;\n\n{{subst:db-notice-multiple|1=&amp;quot; + mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
							break;&lt;br /&gt;
						default:&lt;br /&gt;
							notifytext = &amp;quot;\n\n{{subst:db-csd-notice-custom|1=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;|2=&amp;quot; + params.value;&lt;br /&gt;
							break;&lt;br /&gt;
					}&lt;br /&gt;
					for (var i in params.utparams) {&lt;br /&gt;
						if (typeof params.utparams[i] === &#039;string&#039;) {&lt;br /&gt;
							notifytext += &amp;quot;|&amp;quot; + i + &amp;quot;=&amp;quot; + params.utparams[i];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					notifytext += (nowelcome ? &amp;quot;|nowelcome=yes&amp;quot; : &amp;quot;&amp;quot;) + &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
					usertalkpage.setAppendText(notifytext);&lt;br /&gt;
					usertalkpage.setEditSummary(&amp;quot;Notification: speedy deletion nomination of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
					usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
					usertalkpage.setFollowRedirect(true);&lt;br /&gt;
					usertalkpage.append();&lt;br /&gt;
&lt;br /&gt;
					// add this nomination to the user&#039;s userspace log, if the user has enabled it&lt;br /&gt;
					if (params.lognomination) {&lt;br /&gt;
						Twinkle.speedy.callbacks.user.addToLog(params, initialContrib);&lt;br /&gt;
					}&lt;br /&gt;
				};&lt;br /&gt;
				thispage.lookupCreator(callback);&lt;br /&gt;
			}&lt;br /&gt;
			// or, if not notifying, add this nomination to the user&#039;s userspace log without the initial contributor&#039;s name&lt;br /&gt;
			else if (params.lognomination) {&lt;br /&gt;
				Twinkle.speedy.callbacks.user.addToLog(params, null);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Wrap SD template in noinclude tags if we are in template space.&lt;br /&gt;
			// Won&#039;t work with userboxes in userspace, or any other transcluded page outside template space&lt;br /&gt;
			if (mw.config.get(&#039;wgNamespaceNumber&#039;) === 10) {  // Template:&lt;br /&gt;
				code = &amp;quot;&amp;lt;noinclude&amp;gt;&amp;quot; + code + &amp;quot;&amp;lt;/noinclude&amp;gt;&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Remove tags that become superfluous with this action&lt;br /&gt;
			text = text.replace(/\{\{\s*(New unreviewed article|Userspace draft)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/ig, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			// Generate edit summary for edit&lt;br /&gt;
			var editsummary;&lt;br /&gt;
			switch (params.normalized)&lt;br /&gt;
			{&lt;br /&gt;
				case &#039;db&#039;:&lt;br /&gt;
					editsummary = &#039;Requesting [[MP:CSD|speedy deletion]] with rationale \&amp;quot;&#039; + parameters[&amp;quot;1&amp;quot;] + &#039;\&amp;quot;.&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;multiple&#039;:&lt;br /&gt;
					editsummary = &#039;Requesting speedy deletion (&#039;;&lt;br /&gt;
					for (i in Twinkle.speedy.dbmultipleCriteria) {&lt;br /&gt;
						if (typeof Twinkle.speedy.dbmultipleCriteria[i] === &#039;string&#039;) {&lt;br /&gt;
							editsummary += &#039;[[MP:CSD#&#039; + Twinkle.speedy.dbmultipleCriteria[i].toUpperCase() + &#039;|CSD &#039; + Twinkle.speedy.dbmultipleCriteria[i].toUpperCase() + &#039;]], &#039;;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					editsummary = editsummary.substr(0, editsummary.length - 2); // remove trailing comma&lt;br /&gt;
					editsummary += &#039;).&#039;;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;g6&#039;:&lt;br /&gt;
					if (params.value === &#039;histmerge&#039;) {&lt;br /&gt;
						editsummary = &amp;quot;Requesting history merge with [[&amp;quot; + parameters[&amp;quot;1&amp;quot;] + &amp;quot;]] ([[MP:CSD#G6|CSD G6]]).&amp;quot;;&lt;br /&gt;
						break;&lt;br /&gt;
					}&lt;br /&gt;
					/* falls through */&lt;br /&gt;
				default:&lt;br /&gt;
					editsummary = &amp;quot;Requesting speedy deletion ([[MP:CSD#&amp;quot; + params.normalized.toUpperCase() + &amp;quot;|CSD &amp;quot; + params.normalized.toUpperCase() + &amp;quot;]]).&amp;quot;;&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(code + ((params.normalized === &#039;g10&#039; || Twinkle.speedy.dbmultipleCriteria.indexOf(&#039;g10&#039;) !== -1) ?&lt;br /&gt;
					&#039;&#039; : (&amp;quot;\n&amp;quot; + text) )); // cause attack pages to be blanked&lt;br /&gt;
			pageobj.setEditSummary(editsummary + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			pageobj.setWatchlist(params.watch);&lt;br /&gt;
			pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// note: this code is also invoked from twinkleimage&lt;br /&gt;
		// the params used are:&lt;br /&gt;
		//   for all: params.normalized&lt;br /&gt;
		//   for CSD: params.value&lt;br /&gt;
		//   for DI: params.fromDI = true, params.type&lt;br /&gt;
		addToLog: function(params, initialContrib) {&lt;br /&gt;
			var wikipedia_page = new Wikipedia.page(&amp;quot;User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;/&amp;quot; + Twinkle.getPref(&#039;speedyLogPageName&#039;), &amp;quot;Adding entry to userspace log&amp;quot;);&lt;br /&gt;
			params.logInitialContrib = initialContrib;&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.speedy.callbacks.user.saveLog);&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		saveLog: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			// add blurb if log page doesn&#039;t exist&lt;br /&gt;
			if (!pageobj.exists()) {&lt;br /&gt;
				text =&lt;br /&gt;
					&amp;quot;This is a log of all [[MP:CSD|speedy deletion]] nominations made by this user using [[MP:TW|Twinkle]]&#039;s CSD module.\n\n&amp;quot; +&lt;br /&gt;
					&amp;quot;If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and &amp;quot; +&lt;br /&gt;
					&amp;quot;nominate this page for speedy deletion under [[MP:CSD#U1|CSD U1]].\n&amp;quot;;&lt;br /&gt;
				if (userIsInGroup(&amp;quot;sysop&amp;quot;)) {&lt;br /&gt;
					text += &amp;quot;\nThis log does not track outright speedy deletions made using Twinkle.\n&amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// create monthly header&lt;br /&gt;
			var date = new Date();&lt;br /&gt;
			var headerRe = new RegExp(&amp;quot;^==+\\s*&amp;quot; + date.getUTCMonthName() + &amp;quot;\\s+&amp;quot; + date.getUTCFullYear() + &amp;quot;\\s*==+&amp;quot;, &amp;quot;m&amp;quot;);&lt;br /&gt;
			if (!headerRe.exec(text)) {&lt;br /&gt;
				text += &amp;quot;\n\n=== &amp;quot; + date.getUTCMonthName() + &amp;quot; &amp;quot; + date.getUTCFullYear() + &amp;quot; ===&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			text += &amp;quot;\n# [[:&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]]: &amp;quot;;&lt;br /&gt;
			if (params.fromDI) {&lt;br /&gt;
				text += &amp;quot;DI [[MP:CSD#&amp;quot; + params.normalized.toUpperCase() + &amp;quot;|CSD &amp;quot; + params.normalized.toUpperCase() + &amp;quot;]] (&amp;quot; + params.type + &amp;quot;)&amp;quot;;&lt;br /&gt;
			} else {&lt;br /&gt;
				switch (params.normalized)&lt;br /&gt;
				{&lt;br /&gt;
					case &#039;db&#039;:&lt;br /&gt;
						text += &amp;quot;{{tl|db-reason}}&amp;quot;;&lt;br /&gt;
						break;&lt;br /&gt;
					case &#039;multiple&#039;:&lt;br /&gt;
						text += &amp;quot;multiple criteria (&amp;quot;;&lt;br /&gt;
						for (var i in Twinkle.speedy.dbmultipleCriteria) {&lt;br /&gt;
							if (typeof Twinkle.speedy.dbmultipleCriteria[i] === &#039;string&#039;) {&lt;br /&gt;
								text += &#039;[[MP:CSD#&#039; + Twinkle.speedy.dbmultipleCriteria[i].toUpperCase() + &#039;|&#039; + Twinkle.speedy.dbmultipleCriteria[i].toUpperCase() + &#039;]], &#039;;&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
						text = text.substr(0, text.length - 2);  // remove trailing comma&lt;br /&gt;
						text += &#039;)&#039;;&lt;br /&gt;
						break;&lt;br /&gt;
					default:&lt;br /&gt;
						text += &amp;quot;[[MP:CSD#&amp;quot; + params.normalized.toUpperCase() + &amp;quot;|CSD &amp;quot; + params.normalized.toUpperCase() + &amp;quot;]] ({{tl|db-&amp;quot; + params.value + &amp;quot;}})&amp;quot;;&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if (params.logInitialContrib) {&lt;br /&gt;
				text += &amp;quot;; notified {{user|&amp;quot; + params.logInitialContrib + &amp;quot;}}&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			text += &amp;quot; ~~~~~\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Logging speedy deletion nomination of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			pageobj.setCreateOption(&amp;quot;recreate&amp;quot;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// prompts user for parameters to be passed into the speedy deletion tag&lt;br /&gt;
Twinkle.speedy.getParameters = function twinklespeedyGetParameters(value, normalized, statelem)&lt;br /&gt;
{&lt;br /&gt;
	var parameters = [];&lt;br /&gt;
	switch( normalized ) {&lt;br /&gt;
		case &#039;db&#039;:&lt;br /&gt;
			var dbrationale = prompt(&#039;Please enter a mandatory rationale.   \n\&amp;quot;This page qualifies for speedy deletion because:\&amp;quot;&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
			if (!dbrationale || !dbrationale.replace(/^\s*/, &amp;quot;&amp;quot;).replace(/\s*$/, &amp;quot;&amp;quot;))&lt;br /&gt;
			{&lt;br /&gt;
				statelem.error( &#039;You must specify a rationale.  Aborted by user.&#039; );&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
			parameters[&amp;quot;1&amp;quot;] = dbrationale;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;u1&#039;:&lt;br /&gt;
			if (mw.config.get(&#039;wgNamespaceNumber&#039;) === 3 &amp;amp;&amp;amp; !((/\//).test(mw.config.get(&#039;wgTitle&#039;))))&lt;br /&gt;
			{&lt;br /&gt;
				var u1rationale = prompt(&#039;Please provide a mandatory rationale to explain why this user talk page should be deleted:&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
				if (!u1rationale || !u1rationale.replace(/^\s*/, &amp;quot;&amp;quot;).replace(/\s*$/, &amp;quot;&amp;quot;))&lt;br /&gt;
				{&lt;br /&gt;
					statelem.error( &#039;You must specify a rationale.  Aborted by user.&#039; );&lt;br /&gt;
					return null;&lt;br /&gt;
				}&lt;br /&gt;
				parameters.rationale = u1rationale;&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;f8&#039;:&lt;br /&gt;
			var pagenamespaces = mw.config.get(&#039;wgPageName&#039;).replace( &#039;_&#039;, &#039; &#039; );&lt;br /&gt;
			var filename = prompt( &#039;Please enter the name of the file on Commons:&#039;, pagenamespaces );&lt;br /&gt;
			if (filename === null)&lt;br /&gt;
			{&lt;br /&gt;
				statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
			if (filename !== &#039;&#039; &amp;amp;&amp;amp; filename !== pagenamespaces)&lt;br /&gt;
			{&lt;br /&gt;
				if (filename.indexOf(&amp;quot;Image:&amp;quot;) === 0 || filename.indexOf(&amp;quot;File:&amp;quot;) === 0)&lt;br /&gt;
				{&lt;br /&gt;
					parameters[&amp;quot;1&amp;quot;] = filename;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					statelem.error(&amp;quot;The File: prefix was missing from the image filename.  Aborted.&amp;quot;);&lt;br /&gt;
					return null;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			parameters.date = &amp;quot;~~~~~&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;g6&#039;:&lt;br /&gt;
			switch( value ) {&lt;br /&gt;
				case &#039;histmerge&#039;:&lt;br /&gt;
					var mergetitle = prompt( &#039;Please enter the title to merge into:&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
					if (mergetitle === null)&lt;br /&gt;
					{&lt;br /&gt;
						statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
						return null;&lt;br /&gt;
					}&lt;br /&gt;
					parameters[&amp;quot;1&amp;quot;] = mergetitle;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;move&#039;:&lt;br /&gt;
					var title = prompt( &#039;Please enter the title of the page to be moved here:&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
					if (title === null)&lt;br /&gt;
					{&lt;br /&gt;
						statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
						return null;&lt;br /&gt;
					}&lt;br /&gt;
					var reason = prompt( &#039;Please enter the reason for the page move:&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
					if (reason === null)&lt;br /&gt;
					{&lt;br /&gt;
						statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
						return null;&lt;br /&gt;
					}&lt;br /&gt;
					parameters[&amp;quot;1&amp;quot;] = title;&lt;br /&gt;
					parameters[&amp;quot;2&amp;quot;] = reason;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;copypaste&#039;:&lt;br /&gt;
					var copytitle = prompt( &#039;Please enter the title of the original page that was copy-pasted here:&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
					if (copytitle === null)&lt;br /&gt;
					{&lt;br /&gt;
						statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
						return null;&lt;br /&gt;
					}&lt;br /&gt;
					parameters[&amp;quot;1&amp;quot;] = copytitle;&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;g6&#039;:&lt;br /&gt;
					var g6rationale = prompt( &#039;Please provide an optional rationale (leave empty to skip):&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
					if (g6rationale === null)&lt;br /&gt;
					{&lt;br /&gt;
						statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
						return null;&lt;br /&gt;
					}&lt;br /&gt;
					if (g6rationale !== &#039;&#039;)&lt;br /&gt;
					{&lt;br /&gt;
						parameters.rationale = g6rationale;&lt;br /&gt;
					}&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;g7&#039;:&lt;br /&gt;
			if (Twinkle.getPref(&#039;speedyPromptOnG7&#039;))&lt;br /&gt;
			{&lt;br /&gt;
				var g7rationale = prompt(&#039;Please provide an optional rationale (perhaps linking to where the author requested this deletion - leave empty to skip):&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
				if (g7rationale === null)&lt;br /&gt;
				{&lt;br /&gt;
					statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
					return null;&lt;br /&gt;
				}&lt;br /&gt;
				if (g7rationale !== &#039;&#039;)&lt;br /&gt;
				{&lt;br /&gt;
					parameters.rationale = g7rationale;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;f9&#039;:&lt;br /&gt;
		case &#039;g12&#039;:&lt;br /&gt;
			var url = prompt( &#039;Please enter the URL if available, including the &amp;quot;http://&amp;quot;:&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
			if (url === null)&lt;br /&gt;
			{&lt;br /&gt;
				statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
			parameters.url = url;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;a2&#039;:&lt;br /&gt;
			var source = prompt(&#039;Enter an interwiki link to the article on the foreign-language wiki (for example, &amp;quot;fr:Bonjour&amp;quot;):&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
			if (source === null)&lt;br /&gt;
			{&lt;br /&gt;
				statelem.error(&#039;Aborted by user.&#039;);&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
			parameters.source = source;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;a10&#039;:&lt;br /&gt;
			var duptitle = prompt( &#039;Enter the article name that is duplicated:&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
			if (duptitle === null)&lt;br /&gt;
			{&lt;br /&gt;
				statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
			parameters.article = duptitle;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;f1&#039;:&lt;br /&gt;
			var img = prompt( &#039;Enter the file this is redundant to, excluding the &amp;quot;Image:&amp;quot; or &amp;quot;File:&amp;quot; prefix:&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
			if (img === null)&lt;br /&gt;
			{&lt;br /&gt;
				statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
			parameters.filename = img;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;t3&#039;:&lt;br /&gt;
			var template = prompt( &#039;Enter the template this is redundant to, excluding the &amp;quot;Template:&amp;quot; prefix:&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
			if (template === null)&lt;br /&gt;
			{&lt;br /&gt;
				statelem.error( &#039;Aborted by user.&#039; );&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
			parameters[&amp;quot;1&amp;quot;] = &amp;quot;~~~~~&amp;quot;;&lt;br /&gt;
			parameters[&amp;quot;2&amp;quot;] = template;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;g10&#039;:&lt;br /&gt;
			parameters.blanked = &#039;yes&#039;;&lt;br /&gt;
			// it is actually blanked elsewhere in code, but setting the flag here&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;p1&#039;:&lt;br /&gt;
			var criterion = prompt( &#039;Enter the code of the article CSD criterion which this portal falls under:   \n\n(A1 = no context, A3 = no content, A7 = non-notable, A10 = duplicate)&#039;, &amp;quot;&amp;quot; );&lt;br /&gt;
			if (!criterion || !criterion.replace(/^\s*/, &amp;quot;&amp;quot;).replace(/\s*$/, &amp;quot;&amp;quot;))&lt;br /&gt;
			{&lt;br /&gt;
				statelem.error( &#039;You must enter a criterion.  Aborted by user.&#039; );&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
			parameters[&amp;quot;1&amp;quot;] = criterion;&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
	return parameters;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// function for processing talk page notification template parameters&lt;br /&gt;
Twinkle.speedy.getUserTalkParameters = function twinklespeedyGetUserTalkParameters(normalized, parameters)&lt;br /&gt;
{&lt;br /&gt;
	var utparams = [];&lt;br /&gt;
	switch (normalized)&lt;br /&gt;
	{&lt;br /&gt;
		case &#039;db&#039;:&lt;br /&gt;
			utparams[&amp;quot;2&amp;quot;] = parameters[&amp;quot;1&amp;quot;];&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;a10&#039;:&lt;br /&gt;
			utparams.key1 = &amp;quot;article&amp;quot;;&lt;br /&gt;
			utparams.value1 = parameters.article;&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
	return utparams;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.callback.evaluateSysop = function twinklespeedyCallbackEvaluateSysop(e)&lt;br /&gt;
{&lt;br /&gt;
	mw.config.set(&#039;wgPageName&#039;, mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;)); // for queen/king/whatever and country!&lt;br /&gt;
&lt;br /&gt;
	var tag_only = e.target.form.tag_only;&lt;br /&gt;
	if( tag_only &amp;amp;&amp;amp; tag_only.checked ) {&lt;br /&gt;
		Twinkle.speedy.callback.evaluateUser(e);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var value = e.target.values;&lt;br /&gt;
	var normalized = Twinkle.speedy.normalizeHash[ value ];&lt;br /&gt;
&lt;br /&gt;
	var params = {&lt;br /&gt;
		value: value,&lt;br /&gt;
		normalized: normalized,&lt;br /&gt;
		watch: Twinkle.getPref(&#039;watchSpeedyPages&#039;).indexOf( normalized ) !== -1,&lt;br /&gt;
		reason: Twinkle.speedy.reasonHash[ value ],&lt;br /&gt;
		openusertalk: Twinkle.getPref(&#039;openUserTalkPageOnSpeedyDelete&#039;).indexOf( normalized ) !== -1,&lt;br /&gt;
		deleteTalkPage: e.target.form.talkpage &amp;amp;&amp;amp; e.target.form.talkpage.checked,&lt;br /&gt;
		deleteRedirects: e.target.form.redirects.checked&lt;br /&gt;
	};&lt;br /&gt;
	Status.init( e.target.form );&lt;br /&gt;
&lt;br /&gt;
	Twinkle.speedy.callbacks.sysop.main( params );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.callback.evaluateUser = function twinklespeedyCallbackEvaluateUser(e) {&lt;br /&gt;
	mw.config.set(&#039;wgPageName&#039;, mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;));  // for queen/king/whatever and country!&lt;br /&gt;
	var value = e.target.values;&lt;br /&gt;
&lt;br /&gt;
	if (value === &#039;multiple&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		e.target.form.style.display = &amp;quot;none&amp;quot;; // give the user a cue that the dialog is being changed&lt;br /&gt;
		setTimeout(function() {&lt;br /&gt;
			Twinkle.speedy.initDialog(Twinkle.speedy.callback.doMultiple, false, e.target.form.parentNode);&lt;br /&gt;
		}, 150);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (value === &#039;multiple-finish&#039;) {&lt;br /&gt;
		value = &#039;multiple&#039;;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		// clear these out, whatever the case, to avoid errors&lt;br /&gt;
		Twinkle.speedy.dbmultipleCriteria = [];&lt;br /&gt;
		Twinkle.speedy.dbmultipleParameters = [];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var normalized = Twinkle.speedy.normalizeHash[ value ];&lt;br /&gt;
&lt;br /&gt;
	// for sysops only&lt;br /&gt;
	if ([&#039;f4&#039;, &#039;f5&#039;, &#039;f6&#039;, &#039;f11&#039;].indexOf(normalized) !== -1) {&lt;br /&gt;
		alert(&amp;quot;Tagging with F4, F5, F6, and F11 is not possible using the CSD module.  Try using DI instead, or unchecking \&amp;quot;Tag page only\&amp;quot; if you meant to delete the page.&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var i;&lt;br /&gt;
&lt;br /&gt;
	// analyse each db-multiple criterion to determine whether to watch the page/notify the creator&lt;br /&gt;
	var watchPage = false;&lt;br /&gt;
	if (value === &#039;multiple&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		for (i in Twinkle.speedy.dbmultipleCriteria)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof Twinkle.speedy.dbmultipleCriteria[i] === &#039;string&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				Twinkle.getPref(&#039;watchSpeedyPages&#039;).indexOf(Twinkle.speedy.dbmultipleCriteria[i]) !== -1)&lt;br /&gt;
			{&lt;br /&gt;
				watchPage = true;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		watchPage = Twinkle.getPref(&#039;watchSpeedyPages&#039;).indexOf(normalized) !== -1;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var notifyuser = false;&lt;br /&gt;
	if (value === &#039;multiple&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		for (i in Twinkle.speedy.dbmultipleCriteria)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof Twinkle.speedy.dbmultipleCriteria[i] === &#039;string&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				Twinkle.getPref(&#039;notifyUserOnSpeedyDeletionNomination&#039;).indexOf(Twinkle.speedy.dbmultipleCriteria[i]) !== -1)&lt;br /&gt;
			{&lt;br /&gt;
				notifyuser = true;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		notifyuser = (Twinkle.getPref(&#039;notifyUserOnSpeedyDeletionNomination&#039;).indexOf(normalized) !== -1) &amp;amp;&amp;amp; e.target.form.notify.checked;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var csdlog = false;&lt;br /&gt;
	if (Twinkle.getPref(&#039;logSpeedyNominations&#039;) &amp;amp;&amp;amp; value === &#039;multiple&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		for (i in Twinkle.speedy.dbmultipleCriteria)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof Twinkle.speedy.dbmultipleCriteria[i] === &#039;string&#039; &amp;amp;&amp;amp;&lt;br /&gt;
				Twinkle.getPref(&#039;noLogOnSpeedyNomination&#039;).indexOf(Twinkle.speedy.dbmultipleCriteria[i]) === -1)&lt;br /&gt;
			{&lt;br /&gt;
				csdlog = true;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		csdlog = Twinkle.getPref(&#039;logSpeedyNominations&#039;) &amp;amp;&amp;amp; Twinkle.getPref(&#039;noLogOnSpeedyNomination&#039;).indexOf(normalized) === -1;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var params = {&lt;br /&gt;
		value: value,&lt;br /&gt;
		normalized: normalized,&lt;br /&gt;
		watch: watchPage,&lt;br /&gt;
		usertalk: notifyuser,&lt;br /&gt;
		lognomination: csdlog&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	Status.init( e.target.form );&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Tagging complete&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Tagging page&amp;quot;);&lt;br /&gt;
	wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
	wikipedia_page.load(Twinkle.speedy.callbacks.user.main);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.speedy.dbmultipleCriteria = [];&lt;br /&gt;
Twinkle.speedy.dbmultipleParameters = [];&lt;br /&gt;
Twinkle.speedy.callback.doMultiple = function twinklespeedyCallbackDoMultiple(e)&lt;br /&gt;
{&lt;br /&gt;
	var value = e.target.values;&lt;br /&gt;
	var normalized = Twinkle.speedy.normalizeHash[value];&lt;br /&gt;
	if (value !== &#039;multiple-finish&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		if (Twinkle.speedy.dbmultipleCriteria.indexOf(normalized) !== -1)&lt;br /&gt;
		{&lt;br /&gt;
			alert(&#039;You already selected that criterion. Please choose another.&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var parameters = Twinkle.speedy.getParameters(value, normalized, Status);&lt;br /&gt;
			if (parameters)&lt;br /&gt;
			{&lt;br /&gt;
				for (var i in parameters) {&lt;br /&gt;
					if (typeof parameters[i] === &#039;string&#039;) {&lt;br /&gt;
						Twinkle.speedy.dbmultipleParameters[i] = parameters[i];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				Twinkle.speedy.dbmultipleCriteria.push(normalized);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		e.target.form.style.display = &amp;quot;none&amp;quot;; // give the user a cue that the dialog is being changed&lt;br /&gt;
		setTimeout(function() {&lt;br /&gt;
			Twinkle.speedy.initDialog(Twinkle.speedy.callback.doMultiple, false, e.target.form.parentNode);&lt;br /&gt;
		}, 150);&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		Twinkle.speedy.callback.evaluateUser(e);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinkleunlink.js: Unlink module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;Unlink&amp;quot;)&lt;br /&gt;
 * Active on:              Non-special pages&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink = function twinkleunlink() {&lt;br /&gt;
	if( mw.config.get(&#039;wgNamespaceNumber&#039;) &amp;lt; 0 ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Unlink&amp;quot;, &amp;quot;tw-unlink&amp;quot;, &amp;quot;Unlink backlinks&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.unlink.callback);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink.getChecked2 = function twinkleunlinkGetChecked2( nodelist ) {&lt;br /&gt;
	if( !( nodelist instanceof NodeList ) &amp;amp;&amp;amp; !( nodelist instanceof HTMLCollection ) ) {&lt;br /&gt;
		return nodelist.checked ? [ nodelist.value ] : [];&lt;br /&gt;
	}&lt;br /&gt;
	var result = [];&lt;br /&gt;
	for(var i  = 0; i &amp;lt; nodelist.length; ++i ) {&lt;br /&gt;
		if( nodelist[i].checked ) {&lt;br /&gt;
			result.push( nodelist[i].value );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// the parameter is used when invoking unlink from admin speedy&lt;br /&gt;
Twinkle.unlink.callback = function twinkleunlinkCallback(presetReason) {&lt;br /&gt;
	var Window = new SimpleWindow( 800, 400 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Unlink backlinks&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#unlink&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.unlink.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
		type: &#039;textarea&#039;,&lt;br /&gt;
		name: &#039;reason&#039;,&lt;br /&gt;
		label: &#039;Reason: &#039;,&lt;br /&gt;
		value: (presetReason ? presetReason : &#039;&#039;)&lt;br /&gt;
	} );&lt;br /&gt;
&lt;br /&gt;
	var query;&lt;br /&gt;
	if(mw.config.get(&#039;wgNamespaceNumber&#039;) === Namespace.IMAGE) {&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;list&#039;: [ &#039;backlinks&#039;, &#039;imageusage&#039; ],&lt;br /&gt;
			&#039;bltitle&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
			&#039;iutitle&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
			&#039;bllimit&#039;: userIsInGroup( &#039;sysop&#039; ) ? 5000 : 500, // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			&#039;iulimit&#039;: userIsInGroup( &#039;sysop&#039; ) ? 5000 : 500, // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			&#039;blnamespace&#039;: Twinkle.getPref(&#039;unlinkNamespaces&#039;) // Main namespace and portal namespace only, keep on talk pages.&lt;br /&gt;
		};&lt;br /&gt;
	} else {&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;list&#039;: &#039;backlinks&#039;,&lt;br /&gt;
			&#039;bltitle&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
			&#039;blfilterredir&#039;: &#039;nonredirects&#039;,&lt;br /&gt;
			&#039;bllimit&#039;: userIsInGroup( &#039;sysop&#039; ) ? 5000 : 500, // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			&#039;blnamespace&#039;: Twinkle.getPref(&#039;unlinkNamespaces&#039;) // Main namespace and portal namespace only, keep on talk pages.&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	var wikipedia_api = new Wikipedia.api( &#039;Grabbing backlinks&#039;, query, Twinkle.unlink.callbacks.display.backlinks );&lt;br /&gt;
	wikipedia_api.params = { form: form, Window: Window, image: mw.config.get(&#039;wgNamespaceNumber&#039;) === Namespace.IMAGE };&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
&lt;br /&gt;
	var root = document.createElement( &#039;div&#039; );&lt;br /&gt;
	root.style.padding = &#039;15px&#039;;  // just so it doesn&#039;t look broken&lt;br /&gt;
	Status.init( root );&lt;br /&gt;
	wikipedia_api.statelem.status( &amp;quot;loading...&amp;quot; );&lt;br /&gt;
	Window.setContent( root );&lt;br /&gt;
	Window.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink.callback.evaluate = function twinkleunlinkCallbackEvaluate(event) {&lt;br /&gt;
	mw.config.set(&#039;wgPageName&#039;, mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;));  // for queen/king/whatever and country!&lt;br /&gt;
&lt;br /&gt;
	Twinkle.unlink.backlinksdone = 0;&lt;br /&gt;
	Twinkle.unlink.imageusagedone = 0;&lt;br /&gt;
&lt;br /&gt;
	function processunlink(pages, imageusage) {&lt;br /&gt;
		var statusIndicator = new Status((imageusage ? &#039;Unlinking instances of file usage&#039; : &#039;Unlinking backlinks&#039;), &#039;0%&#039;);&lt;br /&gt;
		var total = pages.length;  // removing doubling of this number - no apparent reason for it&lt;br /&gt;
&lt;br /&gt;
		Wikipedia.addCheckpoint();&lt;br /&gt;
&lt;br /&gt;
		if( !pages.length ) {&lt;br /&gt;
			statusIndicator.info( &#039;100% (completed)&#039; );&lt;br /&gt;
			Wikipedia.removeCheckpoint();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// get an edit token&lt;br /&gt;
		var params = { reason: reason, imageusage: imageusage, globalstatus: statusIndicator, current: 0, total: total };&lt;br /&gt;
		for (var i = 0; i &amp;lt; pages.length; ++i)&lt;br /&gt;
		{&lt;br /&gt;
			var myparams = clone(params);&lt;br /&gt;
			var articlepage = new Wikipedia.page(pages[i], &#039;Unlinking in article &amp;quot;&#039; + pages[i] + &#039;&amp;quot;&#039;);&lt;br /&gt;
			articlepage.setCallbackParameters(myparams);&lt;br /&gt;
			articlepage.load(imageusage ? Twinkle.unlink.callbacks.unlinkImageInstances : Twinkle.unlink.callbacks.unlinkBacklinks);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var reason = event.target.reason.value;&lt;br /&gt;
	var backlinks, imageusage;&lt;br /&gt;
	if( event.target.backlinks ) {&lt;br /&gt;
		backlinks = Twinkle.unlink.getChecked2(event.target.backlinks);&lt;br /&gt;
	}&lt;br /&gt;
	if( event.target.imageusage ) {&lt;br /&gt;
		imageusage = Twinkle.unlink.getChecked2(event.target.imageusage);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( event.target );&lt;br /&gt;
	Wikipedia.addCheckpoint();&lt;br /&gt;
	if (backlinks) {&lt;br /&gt;
		processunlink(backlinks, false);&lt;br /&gt;
	}&lt;br /&gt;
	if (imageusage) {&lt;br /&gt;
		processunlink(imageusage, true);&lt;br /&gt;
	}&lt;br /&gt;
	Wikipedia.removeCheckpoint();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink.backlinksdone = 0;&lt;br /&gt;
Twinkle.unlink.imageusagedone = 0;&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink.callbacks = {&lt;br /&gt;
	display: {&lt;br /&gt;
		backlinks: function twinkleunlinkCallbackDisplayBacklinks(apiobj) {&lt;br /&gt;
			var xmlDoc = apiobj.responseXML;&lt;br /&gt;
			var havecontent = false;&lt;br /&gt;
			var list, namespaces, i;&lt;br /&gt;
&lt;br /&gt;
			if( apiobj.params.image ) {&lt;br /&gt;
				var imageusage = $(xmlDoc).find(&#039;query imageusage iu&#039;);&lt;br /&gt;
				list = [];&lt;br /&gt;
				for ( i = 0; i &amp;lt; imageusage.length; ++i ) {&lt;br /&gt;
					var usagetitle = imageusage[i].getAttribute(&#039;title&#039;);&lt;br /&gt;
					list.push( { label: usagetitle, value: usagetitle, checked: true } );&lt;br /&gt;
				}&lt;br /&gt;
				if (!list.length)&lt;br /&gt;
				{&lt;br /&gt;
					apiobj.params.form.append( { type: &#039;div&#039;, label: &#039;No instances of file usage found.&#039; } );&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					apiobj.params.form.append( { type:&#039;header&#039;, label: &#039;File usage&#039; } );&lt;br /&gt;
					namespaces = [];&lt;br /&gt;
					$.each(Twinkle.getPref(&#039;unlinkNamespaces&#039;), function(k, v) {&lt;br /&gt;
						namespaces.push(Wikipedia.namespacesFriendly[v]);&lt;br /&gt;
					});&lt;br /&gt;
					apiobj.params.form.append( {&lt;br /&gt;
						type: &#039;div&#039;,&lt;br /&gt;
						label: &amp;quot;Selected namespaces: &amp;quot; + namespaces.join(&#039;, &#039;),&lt;br /&gt;
						tooltip: &amp;quot;You can change this with your Twinkle preferences, at [[MP:TWPREFS]]&amp;quot;&lt;br /&gt;
					});&lt;br /&gt;
					if ($(xmlDoc).find(&#039;query-continue&#039;).length) {&lt;br /&gt;
						apiobj.params.form.append( {&lt;br /&gt;
							type: &#039;div&#039;,&lt;br /&gt;
							label: &amp;quot;First &amp;quot; + list.length.toString() + &amp;quot; file usages shown.&amp;quot;&lt;br /&gt;
						});&lt;br /&gt;
					}&lt;br /&gt;
					apiobj.params.form.append( {&lt;br /&gt;
						type: &#039;checkbox&#039;,&lt;br /&gt;
						name: &#039;imageusage&#039;,&lt;br /&gt;
						list: list&lt;br /&gt;
					} );&lt;br /&gt;
					havecontent = true;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var backlinks = $(xmlDoc).find(&#039;query backlinks bl&#039;);&lt;br /&gt;
			if( backlinks.length &amp;gt; 0 ) {&lt;br /&gt;
				list = [];&lt;br /&gt;
				for ( i = 0; i &amp;lt; backlinks.length; ++i ) {&lt;br /&gt;
					var title = backlinks[i].getAttribute(&#039;title&#039;);&lt;br /&gt;
					list.push( { label: title, value: title, checked: true } );&lt;br /&gt;
				}&lt;br /&gt;
				apiobj.params.form.append( { type:&#039;header&#039;, label: &#039;Backlinks&#039; } );&lt;br /&gt;
				namespaces = [];&lt;br /&gt;
				$.each(Twinkle.getPref(&#039;unlinkNamespaces&#039;), function(k, v) {&lt;br /&gt;
					namespaces.push(Wikipedia.namespacesFriendly[v]);&lt;br /&gt;
				});&lt;br /&gt;
				apiobj.params.form.append( {&lt;br /&gt;
					type: &#039;div&#039;,&lt;br /&gt;
					label: &amp;quot;Selected namespaces: &amp;quot; + namespaces.join(&#039;, &#039;),&lt;br /&gt;
					tooltip: &amp;quot;You can change this with your Twinkle preferences, at [[MP:TWPREFS]]&amp;quot;&lt;br /&gt;
				});&lt;br /&gt;
				if ($(xmlDoc).find(&#039;query-continue&#039;).length) {&lt;br /&gt;
					apiobj.params.form.append( {&lt;br /&gt;
						type: &#039;div&#039;,&lt;br /&gt;
						label: &amp;quot;First &amp;quot; + list.length.toString() + &amp;quot; backlinks shown.&amp;quot;&lt;br /&gt;
					});&lt;br /&gt;
				}&lt;br /&gt;
				apiobj.params.form.append( {&lt;br /&gt;
					type: &#039;checkbox&#039;,&lt;br /&gt;
					name: &#039;backlinks&#039;,&lt;br /&gt;
					list: list&lt;br /&gt;
				});&lt;br /&gt;
				havecontent = true;&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				apiobj.params.form.append( { type: &#039;div&#039;, label: &#039;No backlinks found.&#039; } );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if (havecontent) {&lt;br /&gt;
				apiobj.params.form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var result = apiobj.params.form.render();&lt;br /&gt;
			apiobj.params.Window.setContent( result );&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	unlinkBacklinks: function twinkleunlinkCallbackUnlinkBacklinks(pageobj) {&lt;br /&gt;
		var text, oldtext;&lt;br /&gt;
		text = oldtext = pageobj.getPageText();&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
		var wikiPage = new Mediawiki.Page(text);&lt;br /&gt;
		wikiPage.removeLink(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
		text = wikiPage.getText();&lt;br /&gt;
		if (text === oldtext) {&lt;br /&gt;
			// Nothing to do, return&lt;br /&gt;
			Twinkle.unlink.callbacks.success(pageobj);&lt;br /&gt;
			Wikipedia.actionCompleted();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setEditSummary(&amp;quot;Removing link(s) to \&amp;quot;&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;\&amp;quot;: &amp;quot; + params.reason + &amp;quot;.&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
		pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
		pageobj.save(Twinkle.unlink.callbacks.success);&lt;br /&gt;
	},&lt;br /&gt;
	unlinkImageInstances: function twinkleunlinkCallbackUnlinkImageInstances(pageobj) {&lt;br /&gt;
		var text, oldtext;&lt;br /&gt;
		text = oldtext = pageobj.getPageText();&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
		var wikiPage = new Mediawiki.Page(text);&lt;br /&gt;
		wikiPage.commentOutImage(mw.config.get(&#039;wgTitle&#039;), &#039;Commented out&#039;);&lt;br /&gt;
		text = wikiPage.getText();&lt;br /&gt;
		if (text === oldtext) {&lt;br /&gt;
			// Nothing to do, return&lt;br /&gt;
			Twinkle.unlink.callbacks.success(pageobj);&lt;br /&gt;
			Wikipedia.actionCompleted();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setEditSummary(&amp;quot;Commenting out use(s) of file \&amp;quot;&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;\&amp;quot;: &amp;quot; + params.reason + &amp;quot;.&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
		pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
		pageobj.save(Twinkle.unlink.callbacks.success);&lt;br /&gt;
	},&lt;br /&gt;
	success: function twinkleunlinkCallbackSuccess(pageobj) {&lt;br /&gt;
		var statelem = pageobj.getStatusElement();&lt;br /&gt;
		statelem.info(&#039;done&#039;);&lt;br /&gt;
&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
		var total = params.total;&lt;br /&gt;
		var now = parseInt( 100 * (params.imageusage ? ++(Twinkle.unlink.imageusagedone) : ++(Twinkle.unlink.backlinksdone))/total, 10 ) + &#039;%&#039;;&lt;br /&gt;
		params.globalstatus.update( now );&lt;br /&gt;
		if((params.imageusage ? Twinkle.unlink.imageusagedone : Twinkle.unlink.backlinksdone) &amp;gt;= total) {&lt;br /&gt;
			params.globalstatus.info( now + &#039; (completed)&#039; );&lt;br /&gt;
			Wikipedia.removeCheckpoint();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklewarn.js: Warn module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;Warn&amp;quot;)&lt;br /&gt;
 * Active on:              User talk pages&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.warn = function twinklewarn() {&lt;br /&gt;
	if( mw.config.get(&#039;wgNamespaceNumber&#039;) === 3 ) {&lt;br /&gt;
		if(twinkleUserAuthorized) {&lt;br /&gt;
			$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Warn&amp;quot;, &amp;quot;tw-warn&amp;quot;, &amp;quot;Warn/notify user&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.warn.callback);&lt;br /&gt;
		} else {&lt;br /&gt;
			$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;Warn&amp;quot;, &amp;quot;tw-warn&amp;quot;, &amp;quot;Warn/notify user&amp;quot;, &amp;quot;&amp;quot;)).click(function() {&lt;br /&gt;
				alert(&amp;quot;Your account is too new to use Twinkle.&amp;quot;);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.warn.callback = function twinklewarnCallback() {&lt;br /&gt;
	var Window = new SimpleWindow( 600, 440 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Warn/notify user&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Choosing a warning level&amp;quot;, &amp;quot;MP:UWUL#Levels&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#warn&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.warn.callback.evaluate );&lt;br /&gt;
	var main_select = form.append( {&lt;br /&gt;
			type:&#039;field&#039;,&lt;br /&gt;
			label:&#039;Choose type of warning/notice to issue&#039;,&lt;br /&gt;
			tooltip:&#039;First choose a main warning group, then the specific warning to issue.&#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	var main_group = main_select.append( {&lt;br /&gt;
			type:&#039;select&#039;,&lt;br /&gt;
			name:&#039;main_group&#039;,&lt;br /&gt;
			event:Twinkle.warn.callback.change_category&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	var defaultGroup = parseInt(Twinkle.getPref(&#039;defaultWarningGroup&#039;), 10);&lt;br /&gt;
	main_group.append( { type:&#039;option&#039;, label:&#039;General note (1)&#039;, value:&#039;level1&#039;, selected: ( defaultGroup === 1 || defaultGroup &amp;lt; 1 || ( userIsInGroup( &#039;sysop&#039; ) ? defaultGroup &amp;gt; 8 : defaultGroup &amp;gt; 7 ) ) } );&lt;br /&gt;
	main_group.append( { type:&#039;option&#039;, label:&#039;Caution (2)&#039;, value:&#039;level2&#039;, selected: ( defaultGroup === 2 ) } );&lt;br /&gt;
	main_group.append( { type:&#039;option&#039;, label:&#039;Warning (3)&#039;, value:&#039;level3&#039;, selected: ( defaultGroup === 3 ) } );&lt;br /&gt;
	main_group.append( { type:&#039;option&#039;, label:&#039;Final warning (4)&#039;, value:&#039;level4&#039;, selected: ( defaultGroup === 4 ) } );&lt;br /&gt;
	main_group.append( { type:&#039;option&#039;, label:&#039;Only warning (4im)&#039;, value:&#039;level4im&#039;, selected: ( defaultGroup === 5 ) } );&lt;br /&gt;
	main_group.append( { type:&#039;option&#039;, label:&#039;Single issue notices&#039;, value:&#039;singlenotice&#039;, selected: ( defaultGroup === 6 ) } );&lt;br /&gt;
	main_group.append( { type:&#039;option&#039;, label:&#039;Single issue warnings&#039;, value:&#039;singlewarn&#039;, selected: ( defaultGroup === 7 ) } );&lt;br /&gt;
	if( userIsInGroup( &#039;sysop&#039; ) ) {&lt;br /&gt;
		main_group.append( { type:&#039;option&#039;, label:&#039;Blocking&#039;, value:&#039;block&#039;, selected: ( defaultGroup === 8 ) } );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	main_select.append( { type:&#039;select&#039;, name:&#039;sub_group&#039;, event:Twinkle.warn.callback.change_subcategory } ); //Will be empty to begin with.&lt;br /&gt;
&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type:&#039;input&#039;,&lt;br /&gt;
			name:&#039;article&#039;,&lt;br /&gt;
			label:&#039;Linked article&#039;,&lt;br /&gt;
			value:( QueryString.exists( &#039;vanarticle&#039; ) ? QueryString.get( &#039;vanarticle&#039; ) : &#039;&#039; ),&lt;br /&gt;
			tooltip:&#039;An article might be linked to the notice, either it was a revert to said article that dispatched this notice. Leave empty for no article to be linked&#039;&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	var more = form.append( { type:&#039;field&#039;, label:&#039;Fill in an optional reason and hit \&amp;quot;Submit\&amp;quot;&#039; } );&lt;br /&gt;
	more.append( { type:&#039;textarea&#039;, label:&#039;More:&#039;, name:&#039;reason&#039;, tooltip:&#039;Perhaps a reason, or that a more detailed notice must be appended&#039; } );&lt;br /&gt;
&lt;br /&gt;
	var previewlink = document.createElement( &#039;a&#039; );&lt;br /&gt;
	$(previewlink).click(function(){&lt;br /&gt;
		Twinkle.warn.callbacks.preview();&lt;br /&gt;
	});&lt;br /&gt;
	previewlink.textContent = &#039;Preview&#039;;&lt;br /&gt;
	more.append( { type: &#039;div&#039;, name: &#039;warningpreview&#039;, label: [ previewlink ] } );&lt;br /&gt;
&lt;br /&gt;
	more.append( { type:&#039;submit&#039;, label:&#039;Submit&#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.main_group.root = result;&lt;br /&gt;
&lt;br /&gt;
	// We must init the first choice (General Note);&lt;br /&gt;
	var evt = document.createEvent( &amp;quot;Event&amp;quot; );&lt;br /&gt;
	evt.initEvent( &#039;change&#039;, true, true );&lt;br /&gt;
	result.main_group.dispatchEvent( evt );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// This is all the messages that might be dispatched by the code&lt;br /&gt;
Twinkle.warn.messages = {&lt;br /&gt;
	level1: {&lt;br /&gt;
		&amp;quot;uw-vandalism1&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Vandalism&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;General note: Nonconstructive editing&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-test1&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Editing tests&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;General note: Editing tests&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-delete1&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Page blanking, removal of content&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;General note: Page blanking, removal of content&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-redirect1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating malicious redirects&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Creating malicious redirects&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tdel1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removal of maintenance templates&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Removal of maintenance templates&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-joke1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using improper humor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Using improper humor&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-create1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating inappropriate pages&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Creating inappropriate pages&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-upload1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading unencyclopedic images&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Uploading unencyclopedic images&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-image1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Image-related vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Image-related vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ics1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading files missing copyright status&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Uploading files missing copyright status&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-idt1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing file deletion tags&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Removing file deletion tags&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-spam1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding spam links&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Adding spam links&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-advert1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using Wikipedia for advertising or promotion&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Using Wikipedia for advertising or promotion&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npov1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not adhering to neutral point of view&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Not adhering to neutral point of view&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-unsourced1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Addition of unsourced or improperly cited material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Addition of unsourced or improperly cited material&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-error1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Introducing deliberate factual errors&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Introducing factual errors&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-nor1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding original research, including unpublished syntheses of sourced material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Adding original research, including unpublished syntheses of sourced material&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-biog1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding unreferenced controversial information about living persons&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Adding unreferenced controversial information about living persons&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-defam1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Defamation not specifically directed&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Defamation not specifically directed&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-uncen1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Censorship of material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Censorship of material&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-mos1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Manual of style&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Formatting, date, language, etc (Manual of style)&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-move1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Page moves against naming conventions or consensus&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Page moves against naming conventions or consensus&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-chat1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using talk page as forum&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Using talk page as forum&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tpv1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Refactoring others&#039; talk page comments&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Refactoring others&#039; talk page comments&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-afd1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{afd}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;General note: Removing {{afd}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-speedy1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{speedy deletion}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;General note: Removing {{speedy deletion}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-blpprod1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{blp prod}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;General note: Removing {{blp prod}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npa1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Personal attack directed at a specific editor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Personal attack directed at a specific editor&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-agf1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not assuming good faith&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Not assuming good faith&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-own1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Ownership of articles&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Ownership of articles&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tempabuse1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Improper use of warning or blocking template&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Improper use of warning or blocking template&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-genre1&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Frequent or mass changes to genres without consensus or references&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;General note: Frequent or mass changes to genres without consensus or references&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	level2: {&lt;br /&gt;
		&amp;quot;uw-vandalism2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-test2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Editing tests&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Editing tests&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-delete2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Page blanking, removal of content&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Page blanking, removal of content&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-redirect2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating malicious redirects&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Creating malicious redirects&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tdel2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removal of maintenance templates&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Removal of maintenance templates&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-joke2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using improper humor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Using improper humor&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-create2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating inappropriate pages&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Creating inappropriate pages&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-upload2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading unencyclopedic images&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Uploading unencyclopedic images&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-image2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Image-related vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Image-related vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ics2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading files missing copyright status&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Uploading files missing copyright status&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-idt2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing file deletion tags&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Removing file deletion tags&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-spam2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding spam links&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Adding spam links&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-advert2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using Wikipedia for advertising or promotion&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Using Wikipedia for advertising or promotion&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npov2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not adhering to neutral point of view&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Not adhering to neutral point of view&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-unsourced2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Addition of unsourced or improperly cited material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Addition of unsourced or improperly cited material&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-error2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Introducing deliberate factual errors&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Introducing factual errors&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-nor2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding original research, including unpublished syntheses of sourced material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Adding original research, including unpublished syntheses of sourced material&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-biog2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding unreferenced controversial information about living persons&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Adding unreferenced controversial information about living persons&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-defam2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Defamation not specifically directed&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Defamation not specifically directed&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-uncen2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Censorship of material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Censorship of material&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-mos2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Manual of style&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Formatting, date, language, etc (Manual of style)&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-move2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Page moves against naming conventions or consensus&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Page moves against naming conventions or consensus&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-chat2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using talk page as forum&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Using talk page as forum&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tpv2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Refactoring others&#039; talk page comments&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Refactoring others&#039; talk page comments&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-afd2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{afd}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Caution: Removing {{afd}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-speedy2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{speedy deletion}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Caution: Removing {{speedy deletion}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-blpprod2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{blp prod}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Caution: Removing {{blp prod}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npa2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Personal attack directed at a specific editor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Personal attack directed at a specific editor&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-agf2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not assuming good faith&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Not assuming good faith&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-own2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Ownership of articles&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Ownership of articles&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tempabuse2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Improper use of warning or blocking template&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Improper use of warning or blocking template&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-genre2&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Frequent or mass changes to genres without consensus or references&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Caution: Frequent or mass changes to genres without consensus or references&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	level3: {&lt;br /&gt;
		&amp;quot;uw-vandalism3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-test3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Editing tests&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Editing tests&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-delete3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Page blanking, removal of content&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Page blanking, removal of content&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-redirect3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating malicious redirects&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Creating malicious redirects&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tdel3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removal of maintenance templates&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Removal of maintenance templates&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-joke3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using improper humor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Using improper humor&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-create3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating inappropriate pages&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Creating inappropriate pages&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-upload3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading unencyclopedic images&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Uploading unencyclopedic images&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-image3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Image-related vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Image-related vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ics3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading files missing copyright status&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Uploading files missing copyright status&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-idt3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing file deletion tags&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Removing file deletion tags&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-spam3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding spam links&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Adding spam links&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-advert3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using Wikipedia for advertising or promotion&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Using Wikipedia for advertising or promotion&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npov3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not adhering to neutral point of view&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Not adhering to neutral point of view&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-unsourced3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Addition of unsourced or improperly cited material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Addition of unsourced or improperly cited material&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-error3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Introducing deliberate factual errors&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Introducing deliberate factual errors&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-nor3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding original research, including unpublished syntheses of sourced material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Adding original research, including unpublished syntheses of sourced material&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-biog3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding unreferenced controversial or defamatory information about living persons&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Adding unreferenced controversial information about living persons&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-defam3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Defamation not specifically directed&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Defamation not specifically directed&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-uncen3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Censorship of material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Censorship of material&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-mos3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Manual of style&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Formatting, date, language, etc (Manual of style)&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-move3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Page moves against naming conventions or consensus&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Page moves against naming conventions or consensus&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-chat3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using talk page as forum&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Using talk page as forum&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tpv3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Refactoring others&#039; talk page comments&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Refactoring others&#039; talk page comments&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-afd3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{afd}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Removing {{afd}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-speedy3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{speedy deletion}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Removing {{speedy deletion}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-blpprod3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{blpprod}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Removing {{blpprod}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npa3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Personal attack directed at a specific editor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Personal attack directed at a specific editor&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-agf3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not assuming good faith&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Not assuming good faith&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-own3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Ownership of articles&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Ownership of articles&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-genre3&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Frequent or mass changes to genres without consensus or reference&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Frequent or mass changes to genres without consensus or reference&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
	level4: {&lt;br /&gt;
		&amp;quot;uw-generic4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Generic warning (for template series missing level 4)&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning notice&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-vandalism4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-test4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Editing tests&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Editing tests&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-delete4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Page blanking, removal of content&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Page blanking, removal of content&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-redirect4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating malicious redirects&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Creating malicious redirects&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tdel4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removal of maintenance templates&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Removal of maintenance templates&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-joke4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using improper humor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Using improper humor&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-create4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating inappropriate pages&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Creating inappropriate pages&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-upload4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading unencyclopedic images&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Uploading unencyclopedic images&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-image4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Image-related vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Image-related vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ics4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading files missing copyright status&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Uploading files missing copyright status&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-idt4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing file deletion tags&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Removing file deletion tags&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-spam4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding spam links&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Adding spam links&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-advert4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using Wikipedia for advertising or promotion&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Using Wikipedia for advertising or promotion&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npov4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not adhering to neutral point of view&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Not adhering to neutral point of view&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-error4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Introducing deliberate factual errors&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final Warning: Introducing deliberate factual errors&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-nor4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding original research, including unpublished syntheses of sourced material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final Warning: Adding original research, including unpublished syntheses of sourced material&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-biog4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding unreferenced defamatory information about living persons&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Adding unreferenced controversial information about living persons&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-defam4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Defamation not specifically directed&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Defamation not specifically directed&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-uncen4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Censorship of material&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Censorship of material&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-mos4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Manual of style&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Formatting, date, language, etc (Manual of style)&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-move4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Page moves against naming conventions or consensus&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Page moves against naming conventions or consensus&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-chat4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using talk page as forum&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Using talk page as forum&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tpv4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Refactoring others&#039; talk page comments&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Refactoring others&#039; talk page comments&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-afd4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{afd}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Final warning: Removing {{afd}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-speedy4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{speedy deletion}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Final warning: Removing {{speedy deletion}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-blpprod4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing {{blpprod}} templates&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Final warning: Removing {{blpprod}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npa4&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Personal attack directed at a specific editor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Final warning: Personal attack directed at a specific editor&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
	level4im: {&lt;br /&gt;
		&amp;quot;uw-vandalism4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-delete4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Page blanking, removal of content&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Page blanking, removal of content&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-redirect4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating malicious redirects&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Creating malicious redirects&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-joke4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using improper humor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Using improper humor&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-create4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating inappropriate pages&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Creating inappropriate pages&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-upload4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading unencyclopedic images&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Uploading unencyclopedic images&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-image4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Image-related vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Image-related vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-spam4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding spam links&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Adding spam links&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-advert4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using Wikipedia for advertising or promotion&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Using Wikipedia for advertising or promotion&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-biog4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding unreferenced defamatory information about living persons&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Adding unreferenced controversial information about living persons&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-defam4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Defamation not specifically directed&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Defamation not specifically directed&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-move4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Page moves against naming conventions or consensus&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Page moves against naming conventions or consensus&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npa4im&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Personal attack directed at a specific editor&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Only warning: Personal attack directed at a specific editor&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	singlenotice: {&lt;br /&gt;
		&amp;quot;uw-2redirect&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating double redirects through bad page moves&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Creating double redirects through bad page moves&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-aiv&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Bad AIV report&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Bad AIV report&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-articlesig&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding signatures to article space&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Adding signatures to article space&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-autobiography&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating autobiographies&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Creating autobiographies&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-badcat&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Adding incorrect categories&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Adding incorrect categories&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-badlistentry&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Adding inappropriate entries to lists&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Adding inappropriate entries to lists&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-bite&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;\&amp;quot;Biting\&amp;quot; newcomers&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: \&amp;quot;Biting\&amp;quot; newcomers&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-coi&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Conflict of Interest&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Conflict of Interest&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-copying&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Copying text to another page&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Copying text to another page&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-crystal&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Adding speculative or unconfirmed information&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Adding speculative or unconfirmed information&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-csd&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Speedy deletion declined&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Speedy deletion declined&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-c&amp;amp;pmove&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Cut and paste moves&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Cut and paste moves&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-dab&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Incorrect edit to a disambiguation page&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Incorrect edit to a disambiguation page&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-date&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Unnecessarily changing date formats&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Unnecessarily changing date formats&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-deadlink&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Removing proper sources containing dead links&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Removing proper sources containing dead links&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-directcat&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Applying stub categories manually&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Applying stub categories manually&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-draftfirst&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Draft in userspace without the risk of speedy deletion&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Consider drafting your article in [[Help:Userspace draft|userspace]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-editsummary&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not using edit summary&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Not using edit summary&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-english&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not communicating in English&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Not communicating in English&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-fuir&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Fair use image has been removed from your userpage&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: A fair use image has been removed from your userpage&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-hangon&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;User forgets to place a hang-on reasoning to the talk page&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: User forgets to place a hang-on reasoning to the talk page&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-hasty&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Hasty addition of speedy deletion tags&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Allow creators time to improve their articles before tagging them for deletion&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-imageuse&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Incorrect image linking&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Incorrect image linking&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-incompleteAFD&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Incomplete AFD&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Incomplete AFD&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-italicize&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Italicize books, films, albums, magazines, TV series, etc within articles&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Italicize books, films, albums, magazines, TV series, etc within articles&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-lang&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Unnecessarily changing between British and American English&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Unnecessarily changing between British and American English&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-linking&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Excessive addition of redlinks or repeated blue links&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Excessive addition of redlinks or repeated blue links&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-minor&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Incorrect use of minor edits check box&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Incorrect use of minor edits check box&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-nonfree&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Uploading replaceable non-free images&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Uploading replaceable non-free images&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-notaiv&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Do not report complex abuse to AIV&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Do not report complex abuse to AIV&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-notenglish&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Creating non-English articles&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Creating non-English articles&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-notifysd&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Notify authors of speedy deletion tagged articles&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Please notify authors of articles tagged for speedy deletion&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-notvote&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;We use consensus, not voting&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: We use consensus, not voting&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-patrolled&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Mark newpages as patrolled when patrolling&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Mark newpages as patrolled when patrolling&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-plagiarism&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Copying from public domain sources without attribution&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Copying from public domain sources without attribution&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-preview&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Use preview button to avoid mistakes&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Use preview button to avoid mistakes&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-probation&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Article is on probation&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Article is on probation&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-refimprove&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Creating unverifiable articles&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Creating unverifiable articles&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-removevandalism&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Incorrect vandalism removal&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Incorrect vandalism removal&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-repost&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Recreating material previously deleted via XfD process&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Recreating previously deleted material&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-salt&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Recreating salted articles under a different title&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Recreating salted articles under a different title&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-samename&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Rename request impossible&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Rename request impossible&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-selfrevert&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Reverting self tests&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Reverting self tests&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-skype&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Skype interfering with editing&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Skype interfering with editing&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-socialnetwork&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Wikipedia is not a social network&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Wikipedia is not a social network&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-sofixit&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Be bold and fix things yourself&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: You can be bold and fix things yourself&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-spoiler&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Adding spoiler alerts or removing supposed spoilers from appropriate sections&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Don&#039;t delete or flag potential &#039;spoilers&#039; in Wikipedia articles&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-subst&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Remember to subst: templates&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Remember to subst: templates&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-talkinarticle&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Talk in article&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Talk in article&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-tilde&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Not signing posts&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Not signing posts&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-toppost&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Posting at the top of talk pages&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Posting at the top of talk pages&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-uaa&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Reporting of username to MP:UAA not accepted&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: Reporting of username to MP:UAA not accepted&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-userspacenoindex&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;User page/subpage isn&#039;t appropriate for search engine indexing&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: User (sub)page isn&#039;t appropriate for search engine indexing&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-vgscope&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Adding video game walkthroughs, cheats or instructions&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Notice: Adding video game walkthroughs, cheats or instructions&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-warn&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Place user warning templates when reverting vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Notice: You can use user warning templates when reverting vandalism&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	singlewarn: {&lt;br /&gt;
		&amp;quot;uw-3rr&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Violating the three-revert rule; see also uw-ew&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Violating the three-revert rule&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-affiliate&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Affiliate marketing&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Affiliate marketing&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-agf-sock&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Use of multiple accounts (assuming good faith)&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Using multiple accounts&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-attack&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Creating attack pages&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Creating attack pages&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-attempt&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Triggering the edit filter&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Triggering the edit filter&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-bizlist&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Business promotion&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Promoting a business&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-botun&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Bot username&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Bot username&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-canvass&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Canvassing&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Canvassing&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-copyright&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Copyright violation&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Copyright violation&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-copyright-link&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Linking to copyrighted works violation&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Linking to copyrighted works violation&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-copyright-remove&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Removing {{copyvio}} template from articles&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Removing {{copyvio}} templates&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-efsummary&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Edit summary triggering the edit filter&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Edit summary triggering the edit filter&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ew&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Edit warring; see also uw-3rr&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Edit warring&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-hoax&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Creating hoaxes&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Creating hoaxes&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-legal&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Making legal threats&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Making legal threats&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-longterm&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Long term pattern of vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Long term pattern of vandalism&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-multipleIPs&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Usage of multiple IPs&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Usage of multiple IPs&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-pinfo&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Personal info&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Personal info&amp;quot; &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-socksuspect&amp;quot;: {&lt;br /&gt;
			label:&amp;quot;Sockpuppetry&amp;quot;,&lt;br /&gt;
			summary:&amp;quot;Warning: Sockpuppetry&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-upv&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Userpage vandalism&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Userpage vandalism&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-username&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Username is against policy&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Your username might be against policy&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-coi-username&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Username is against policy, and conflict of interest&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Username and conflict of interest policy&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-userpage&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Userpage or subpage is against policy&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Userpage or subpage is against policy&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-wrongsummary&amp;quot;: { &lt;br /&gt;
			label:&amp;quot;Using inaccurate or inappropriate edit summaries&amp;quot;, &lt;br /&gt;
			summary:&amp;quot;Warning: Using inaccurate or inappropriate edit summaries&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	block: {&lt;br /&gt;
		&amp;quot;uw-block&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-blocknotalk&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Block (talk page disabled)&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing and your user talk page has been disabled&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-blockindef&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Block (indefinite)&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ablock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Anonymous block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;Your IP address has been blocked from editing&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-aeblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Arbitration enforcement block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for violating an [[MP:Arbitration|arbitration decision]] with your edits&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-adblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Advertising block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for [[MP:SOAP|advertising or self-promotion]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-sblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Spam block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for continuing to add [[MP:SPAM|spam links]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-soablock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Spam/advertising-only account block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your account is being used only for [[MP:SPAM|spam, advertising, or promotion]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-vblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Vandalism block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for persistent [[MP:VAND|vandalism]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-voablock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Vandalism-only account block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your account is being [[MP:VOA|used only for vandalism]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-bioblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;BLP violations&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for violations of Wikipedia&#039;s [[MP:BLP|biographies of living persons policy]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-npblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Creating nonsense pages block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for creating [[MP:PN|nonsense pages]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-myblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Social networking block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for using user and/or article pages as a [[MP:NOTMYSPACE|blog, web host, social networking site or forum]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-copyrightblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Copyright violation block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for continued [[MP:COPYVIO|copyright infringement]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-dblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Deletion/removal of content block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for continued [[MP:VAND|removal of material]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-efblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Edit filter-related block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for making disruptive edits that repeatedly triggered the [[MP:EF|edit filter]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ewblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Edit warring block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing to prevent further [[MP:DE|disruption]] caused by your engagement in an [[MP:EW|edit war]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-3block&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Three-revert rule violation block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for your [[MP:DE|disruption]] caused by [[MP:EW|edit warring]] and violation of the [[MP:3RR|three-revert rule]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-botblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Unapproved bot block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing because it appears you are running a [[MP:BOT|bot script]] without [[MP:BRFA|approval]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ublock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Username soft block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your username is a violation of the [[MP:U|username policy]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-uhblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Username hard block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your username is a blatant violation of the [[MP:U|username policy]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-softerblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Promotional username soft block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your [[MP:U|username]] gives the impression that the account represents a group, organization or website&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-causeblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Promotional username soft block, for charitable causes and social service organizations&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your [[MP:U|username]] gives the impression that the account represents a group, organization or website&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-botublock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Bot username soft block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your [[MP:U|username]] indicates this is a [[MP:BOT|bot]] account, which is currently not approved&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-memorialblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Memorial username soft block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your [[MP:U|username]] indicates this account may be used as a memorial or tribute to someone&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ublock-famous&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Famous username soft block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your [[MP:U|username]] matches the name of a well-known living individual&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-ublock-double&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Similar username soft block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your [[MP:U|username]] is too similar to the username of another Wikipedia user&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-uhblock-double&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Username impersonation hard block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your [[MP:U|username]] appears to impersonate another Wikipedia user&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-vaublock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Vandalism-only account and username hard block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your account is being [[MP:VOA|used only for vandalism]] and your username is a blatant violation of the [[MP:U|username policy]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-spamublock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Spam/advertising-only account and promotional username hard block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your account is being used only for [[MP:SPAM|spam or advertising]] and your username is a violation of the [[MP:U|username policy]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-compblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Possible compromised account block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because it is believed that your [[MP:SECURE|account has been compromised]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-lblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Legal threat block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for making [[MP:NLT|legal threats or taking legal action]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-hblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Harassment block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for attempting to [[MP:HARASS|harass]] other users&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-pinfoblock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Personal information exposure block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been blocked from editing for [[MP:OUTING|posting personal information]] of another editor&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-deoablock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Disruption/trolling only account block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your account is being used only for [[MP:DE|trolling, disruption or harassment]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-block-onlyfor&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Bad-faith single purpose account&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your account is a [[MP:SPA|single purpose account]] being [[MP:DE|used only for disruptive editing]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uw-spoablock&amp;quot;: {&lt;br /&gt;
			&#039;label&#039;:&amp;quot;Sockpuppet account block&amp;quot;,&lt;br /&gt;
			&#039;summary&#039;:&amp;quot;You have been indefinitely blocked from editing because your account is being used only for [[MP:SOCK|sock puppetry or meat puppetry]]&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Set to true if the template is always for an indef block&lt;br /&gt;
Twinkle.warn.indefBlockHash = {&lt;br /&gt;
	&#039;uw-block&#039;: false,&lt;br /&gt;
	&#039;uw-3block&#039;: false,&lt;br /&gt;
	&#039;uw-ablock&#039;: false,&lt;br /&gt;
	&#039;uw-adblock&#039;: false,&lt;br /&gt;
	&#039;uw-aeblock&#039;: false,&lt;br /&gt;
	&#039;uw-bioblock&#039;: false,&lt;br /&gt;
	&#039;uw-blocknotalk&#039;: false,&lt;br /&gt;
	&#039;uw-botblock&#039;: false,&lt;br /&gt;
	&#039;uw-copyrightblock&#039;: false,&lt;br /&gt;
	&#039;uw-dblock&#039;: false,&lt;br /&gt;
	&#039;uw-efblock&#039;: false,&lt;br /&gt;
	&#039;uw-ewblock&#039;: false,&lt;br /&gt;
	&#039;uw-hblock&#039;: false,&lt;br /&gt;
	&#039;uw-myblock&#039;: false,&lt;br /&gt;
	&#039;uw-npblock&#039;: false,&lt;br /&gt;
	&#039;uw-pinfoblock&#039;: false,&lt;br /&gt;
	&#039;uw-sblock&#039;: false,&lt;br /&gt;
	&#039;uw-pblock&#039;: false,&lt;br /&gt;
	&#039;uw-blockindef&#039;: true,&lt;br /&gt;
	&#039;uw-block-onlyfor&#039;: true,&lt;br /&gt;
	&#039;uw-botublock&#039;: true,&lt;br /&gt;
	&#039;uw-causeblock&#039;: true,&lt;br /&gt;
	&#039;uw-compblock&#039;: true,&lt;br /&gt;
	&#039;uw-deoablock&#039;: true,&lt;br /&gt;
	&#039;uw-lblock&#039;: true,&lt;br /&gt;
	&#039;uw-memorialblock&#039;: true,&lt;br /&gt;
	&#039;uw-soablock&#039;: true,&lt;br /&gt;
	&#039;uw-softerblock&#039;: true,&lt;br /&gt;
	&#039;uw-spamublock&#039;: true,&lt;br /&gt;
	&#039;uw-spoablock&#039;: true,&lt;br /&gt;
	&#039;uw-ublock&#039;: true,&lt;br /&gt;
	&#039;uw-ublock-famous&#039;: true,&lt;br /&gt;
	&#039;uw-uhblock&#039;: true,&lt;br /&gt;
	&#039;uw-uhblock-double&#039;: true,&lt;br /&gt;
	&#039;uw-ublock-double&#039;: true,&lt;br /&gt;
	&#039;uw-vaublock&#039;: true,&lt;br /&gt;
	&#039;uw-voablock&#039;: true&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Set to true if the template supports the page parameter&lt;br /&gt;
Twinkle.warn.pageHash = {&lt;br /&gt;
	&#039;uw-block&#039;: true,&lt;br /&gt;
	&#039;uw-3block&#039;: true,&lt;br /&gt;
	&#039;uw-ablock&#039;: true,&lt;br /&gt;
	&#039;uw-adblock&#039;: true,&lt;br /&gt;
	&#039;uw-aeblock&#039;: true,&lt;br /&gt;
	&#039;uw-bioblock&#039;: true,&lt;br /&gt;
	&#039;uw-blocknotalk&#039;: true,&lt;br /&gt;
	&#039;uw-botblock&#039;: true,&lt;br /&gt;
	&#039;uw-copyrightblock&#039;: true,&lt;br /&gt;
	&#039;uw-dblock&#039;: true,&lt;br /&gt;
	&#039;uw-efblock&#039;: true,&lt;br /&gt;
	&#039;uw-ewblock&#039;: true,&lt;br /&gt;
	&#039;uw-hblock&#039;: true,&lt;br /&gt;
	&#039;uw-myblock&#039;: true,&lt;br /&gt;
	&#039;uw-npblock&#039;: true,&lt;br /&gt;
	&#039;uw-pinfoblock&#039;: true,&lt;br /&gt;
	&#039;uw-sblock&#039;: true,&lt;br /&gt;
	&#039;uw-vblock&#039;: true,&lt;br /&gt;
	&#039;uw-blockindef&#039;: true,&lt;br /&gt;
	&#039;uw-block-onlyfor&#039;: true,&lt;br /&gt;
	&#039;uw-botublock&#039;: false,&lt;br /&gt;
	&#039;uw-causeblock&#039;: false,&lt;br /&gt;
	&#039;uw-compblock&#039;: true,&lt;br /&gt;
	&#039;uw-deoablock&#039;: true,&lt;br /&gt;
	&#039;uw-lblock&#039;: true,&lt;br /&gt;
	&#039;uw-memorialblock&#039;: false,&lt;br /&gt;
	&#039;uw-soablock&#039;: true,&lt;br /&gt;
	&#039;uw-softerblock&#039;: false,&lt;br /&gt;
	&#039;uw-spamublock&#039;: false,&lt;br /&gt;
	&#039;uw-spoablock&#039;: true,&lt;br /&gt;
	&#039;uw-ublock&#039;: false,&lt;br /&gt;
	&#039;uw-ublock-famous&#039;: false,&lt;br /&gt;
	&#039;uw-uhblock&#039;: false,&lt;br /&gt;
	&#039;uw-uhblock-double&#039;: false,&lt;br /&gt;
	&#039;uw-ublock-double&#039;: false,&lt;br /&gt;
	&#039;uw-vaublock&#039;: true,&lt;br /&gt;
	&#039;uw-voablock&#039;: true&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Set to true if the template supports the reason parameter and isn&#039;t the same as its super-template when a reason is provided&lt;br /&gt;
Twinkle.warn.reasonHash = {&lt;br /&gt;
	&#039;uw-block&#039;: true,&lt;br /&gt;
	&#039;uw-3block&#039;: false,&lt;br /&gt;
	&#039;uw-ablock&#039;: true,&lt;br /&gt;
	&#039;uw-adblock&#039;: false,&lt;br /&gt;
	&#039;uw-aeblock&#039;: true,&lt;br /&gt;
	&#039;uw-bioblock&#039;: false,&lt;br /&gt;
	&#039;uw-blocknotalk&#039;: true,&lt;br /&gt;
	&#039;uw-botblock&#039;: false,&lt;br /&gt;
	&#039;uw-copyrightblock&#039;: false,&lt;br /&gt;
	&#039;uw-dblock&#039;: false,&lt;br /&gt;
	&#039;uw-efblock&#039;: false,&lt;br /&gt;
	&#039;uw-ewblock&#039;: false,&lt;br /&gt;
	&#039;uw-hblock&#039;: false,&lt;br /&gt;
	&#039;uw-myblock&#039;: false,&lt;br /&gt;
	&#039;uw-npblock&#039;: false,&lt;br /&gt;
	&#039;uw-pinfoblock&#039;: true,&lt;br /&gt;
	&#039;uw-sblock&#039;: false,&lt;br /&gt;
	&#039;uw-vblock&#039;: false,&lt;br /&gt;
	&#039;uw-blockindef&#039;: true,&lt;br /&gt;
	&#039;uw-block-onlyfor&#039;: true,&lt;br /&gt;
	&#039;uw-botublock&#039;: true,&lt;br /&gt;
	&#039;uw-causeblock&#039;: false,&lt;br /&gt;
	&#039;uw-compblock&#039;: false,&lt;br /&gt;
	&#039;uw-deoablock&#039;: false,&lt;br /&gt;
	&#039;uw-lblock&#039;: false,&lt;br /&gt;
	&#039;uw-memorialblock&#039;: false,&lt;br /&gt;
	&#039;uw-soablock&#039;: false,&lt;br /&gt;
	&#039;uw-softerblock&#039;: false,&lt;br /&gt;
	&#039;uw-spamublock&#039;: false,&lt;br /&gt;
	&#039;uw-spoablock&#039;: false,&lt;br /&gt;
	&#039;uw-ublock&#039;: true,&lt;br /&gt;
	&#039;uw-ublock-famous&#039;: false,&lt;br /&gt;
	&#039;uw-uhblock&#039;: true,&lt;br /&gt;
	&#039;uw-uhblock-double&#039;: false,&lt;br /&gt;
	&#039;uw-ublock-double&#039;: false,&lt;br /&gt;
	&#039;uw-vaublock&#039;: false,&lt;br /&gt;
	&#039;uw-voablock&#039;: false&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.warn.prev_block_timer = null;&lt;br /&gt;
Twinkle.warn.prev_article = null;&lt;br /&gt;
Twinkle.warn.prev_reason = null;&lt;br /&gt;
&lt;br /&gt;
Twinkle.warn.callback.change_category = function twinklewarnCallbackChangeCategory(e) {&lt;br /&gt;
	var value = e.target.value;&lt;br /&gt;
	var sub_group = e.target.root.sub_group;&lt;br /&gt;
	var messages = Twinkle.warn.messages[ value ];&lt;br /&gt;
	sub_group.main_group = value;&lt;br /&gt;
	var old_subvalue = sub_group.value;&lt;br /&gt;
	var old_subvalue_re;&lt;br /&gt;
	if( old_subvalue ) {&lt;br /&gt;
		old_subvalue = old_subvalue.replace(/\d*(im)?$/, &#039;&#039; );&lt;br /&gt;
		old_subvalue_re = new RegExp( RegExp.escape( old_subvalue ) + &amp;quot;(\\d*(?:im)?)$&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	while( sub_group.hasChildNodes() ){&lt;br /&gt;
		sub_group.removeChild( sub_group.firstChild );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for( var i in messages ) {&lt;br /&gt;
		var selected = false;&lt;br /&gt;
		if( old_subvalue &amp;amp;&amp;amp; old_subvalue_re.test( i ) ) {&lt;br /&gt;
			selected = true;&lt;br /&gt;
		}&lt;br /&gt;
		var elem = new QuickForm.element( { type:&#039;option&#039;, label:&amp;quot;[&amp;quot; + i + &amp;quot;]: &amp;quot; + messages[i].label, value:i, selected: selected } );&lt;br /&gt;
		&lt;br /&gt;
		sub_group.appendChild( elem.render() );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if( value === &#039;block&#039; ) {&lt;br /&gt;
		var more = new QuickForm.element( {&lt;br /&gt;
				type: &#039;input&#039;,&lt;br /&gt;
				name: &#039;block_timer&#039;,&lt;br /&gt;
				label: &#039;Period of blocking: &#039;,&lt;br /&gt;
				tooltip: &#039;The period the blocking is due for, for example 24 hours, 2 weeks, indefinite etc...&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		e.target.root.insertBefore( more.render(), e.target.root.lastChild );&lt;br /&gt;
		if(Twinkle.warn.prev_block_timer !== null) {&lt;br /&gt;
			e.target.root.block_timer.value = Twinkle.warn.prev_block_timer;&lt;br /&gt;
			Twinkle.warn.prev_block_timer = null;&lt;br /&gt;
		}		&lt;br /&gt;
		if(Twinkle.warn.prev_article === null) {&lt;br /&gt;
			Twinkle.warn.prev_article = e.target.root.article.value;&lt;br /&gt;
		}&lt;br /&gt;
		e.target.root.article.disabled = true;&lt;br /&gt;
		e.target.root.article.value = &#039;&#039;;&lt;br /&gt;
	} else if( e.target.root.block_timer ) {&lt;br /&gt;
		if(!e.target.root.block_timer.disabled &amp;amp;&amp;amp; Twinkle.warn.prev_block_timer === null) {&lt;br /&gt;
			Twinkle.warn.prev_block_timer = e.target.root.block_timer.value;&lt;br /&gt;
		}&lt;br /&gt;
		e.target.root.removeChild( e.target.root.block_timer.parentNode );&lt;br /&gt;
		if(e.target.root.article.disabled &amp;amp;&amp;amp; Twinkle.warn.prev_article !== null) {&lt;br /&gt;
			e.target.root.article.value = Twinkle.warn.prev_article;&lt;br /&gt;
			Twinkle.warn.prev_article = null;&lt;br /&gt;
		}&lt;br /&gt;
		e.target.root.article.disabled = false;&lt;br /&gt;
		if(e.target.root.reason.disabled &amp;amp;&amp;amp; Twinkle.warn.prev_reason !== null) {&lt;br /&gt;
			e.target.root.reason.value = Twinkle.warn.prev_reason;&lt;br /&gt;
			Twinkle.warn.prev_reason = null;&lt;br /&gt;
		}&lt;br /&gt;
		e.target.root.reason.disabled = false;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.warn.callback.change_subcategory = function twinklewarnCallbackChangeSubcategory(e) {&lt;br /&gt;
	var main_group = e.target.main_group;&lt;br /&gt;
	var value = e.target.value;&lt;br /&gt;
&lt;br /&gt;
	if( main_group === &#039;singlewarn&#039; ) {&lt;br /&gt;
		if( value === &#039;uw-username&#039; ) {&lt;br /&gt;
			if(Twinkle.warn.prev_article === null) {&lt;br /&gt;
				Twinkle.warn.prev_article = e.target.form.article.value;&lt;br /&gt;
			}&lt;br /&gt;
			e.target.form.article.disabled = true;&lt;br /&gt;
			e.target.form.article.value = &#039;&#039;;&lt;br /&gt;
		} else if( e.target.form.article.disabled ) {&lt;br /&gt;
			if(Twinkle.warn.prev_article !== null) {&lt;br /&gt;
				e.target.form.article.value = Twinkle.warn.prev_article;&lt;br /&gt;
				Twinkle.warn.prev_article = null;&lt;br /&gt;
			}&lt;br /&gt;
			e.target.form.article.disabled = false;&lt;br /&gt;
		}&lt;br /&gt;
	} else if( main_group === &#039;block&#039; ) {&lt;br /&gt;
		if( Twinkle.warn.indefBlockHash[ value ] ) {&lt;br /&gt;
			if(Twinkle.warn.prev_block_timer === null) {&lt;br /&gt;
				Twinkle.warn.prev_block_timer = e.target.form.block_timer.value;&lt;br /&gt;
			}&lt;br /&gt;
			e.target.form.block_timer.disabled = true;&lt;br /&gt;
			e.target.form.block_timer.value = &#039;indef&#039;;&lt;br /&gt;
		} else if( e.target.form.block_timer.disabled ) {&lt;br /&gt;
			if(Twinkle.warn.prev_block_timer !== null) {&lt;br /&gt;
				e.target.form.block_timer.value = Twinkle.warn.prev_block_timer;&lt;br /&gt;
				Twinkle.warn.prev_block_timer = null;&lt;br /&gt;
			}&lt;br /&gt;
			e.target.form.block_timer.disabled = false;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( Twinkle.warn.pageHash[ value ] ) {&lt;br /&gt;
			if(Twinkle.warn.prev_article !== null) {&lt;br /&gt;
				e.target.form.article.value = Twinkle.warn.prev_article;&lt;br /&gt;
				Twinkle.warn.prev_article = null;&lt;br /&gt;
			}&lt;br /&gt;
			e.target.form.article.disabled = false;&lt;br /&gt;
		} else if( !e.target.form.article.disabled ) {&lt;br /&gt;
			if(Twinkle.warn.prev_article === null) {&lt;br /&gt;
				Twinkle.warn.prev_article = e.target.form.article.value;&lt;br /&gt;
			}&lt;br /&gt;
			e.target.form.article.disabled = true;&lt;br /&gt;
			e.target.form.article.value = &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( Twinkle.warn.reasonHash[ value ] ) {&lt;br /&gt;
			if(Twinkle.warn.prev_reason !== null) {&lt;br /&gt;
				e.target.form.reason.value = Twinkle.warn.prev_reason;&lt;br /&gt;
				Twinkle.warn.prev_reason = null;&lt;br /&gt;
			}&lt;br /&gt;
			e.target.form.reason.disabled = false;&lt;br /&gt;
		} else if( !e.target.form.reason.disabled ) {&lt;br /&gt;
			if(Twinkle.warn.prev_reason === null) {&lt;br /&gt;
				Twinkle.warn.prev_reason = e.target.form.reason.value;&lt;br /&gt;
			}&lt;br /&gt;
			e.target.form.reason.disabled = true;&lt;br /&gt;
			e.target.form.reason.value = &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.warn.callbacks = {&lt;br /&gt;
	preview: function() {&lt;br /&gt;
		// XXX cannot preview block templates as yet...&lt;br /&gt;
		var templatename = $(&#039;select[name=&amp;quot;sub_group&amp;quot;]:visible&#039;).last()[0].value;&lt;br /&gt;
		if (templatename in Twinkle.warn.messages.block) {&lt;br /&gt;
			alert(&amp;quot;Cannot preview block templates at the moment, unfortunately&amp;quot;);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var previewdiv = $(&#039;div[name=&amp;quot;warningpreview&amp;quot;]:visible&#039;).last();&lt;br /&gt;
		if (!previewdiv.length) {&lt;br /&gt;
			return;  // just give up&lt;br /&gt;
		}&lt;br /&gt;
		previewdiv = previewdiv[0];&lt;br /&gt;
&lt;br /&gt;
		var previewbox = $(&#039;div#twinklewarn-previewbox:visible&#039;).last();&lt;br /&gt;
		if (!previewbox.length) {&lt;br /&gt;
			previewbox = document.createElement(&#039;div&#039;);&lt;br /&gt;
			previewbox.style.background = &amp;quot;white&amp;quot;;&lt;br /&gt;
			previewbox.style.border = &amp;quot;2px inset&amp;quot;;&lt;br /&gt;
			previewbox.style.marginTop = &amp;quot;0.4em&amp;quot;;&lt;br /&gt;
			previewbox.style.padding = &amp;quot;0.2em 0.4em&amp;quot;;&lt;br /&gt;
			previewbox.setAttribute(&#039;id&#039;, &#039;twinklewarn-previewbox&#039;);&lt;br /&gt;
			previewdiv.parentNode.appendChild(previewbox);&lt;br /&gt;
		} else {&lt;br /&gt;
			previewbox = previewbox[0];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var statusspan = document.createElement(&#039;span&#039;);&lt;br /&gt;
		previewbox.appendChild(statusspan);&lt;br /&gt;
		Status.init(statusspan);&lt;br /&gt;
		var templatetext = &#039;{{subst:&#039; + templatename;&lt;br /&gt;
		var linkedarticle = $(&#039;input[name=&amp;quot;article&amp;quot;]:visible&#039;).last();&lt;br /&gt;
		if (linkedarticle.length) {&lt;br /&gt;
			templatetext += &#039;|1=&#039; + linkedarticle[0].value;&lt;br /&gt;
		}&lt;br /&gt;
		templatetext += &#039;}}&#039;;&lt;br /&gt;
		var reason = $(&#039;textarea[name=&amp;quot;reason&amp;quot;]:visible&#039;).last();&lt;br /&gt;
		if (reason.length &amp;amp;&amp;amp; reason[0].value) {&lt;br /&gt;
			templatetext += &amp;quot; &#039;&#039;&amp;quot; + reason[0].value + &amp;quot;&#039;&#039;&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		var query = {&lt;br /&gt;
			action: &#039;parse&#039;,&lt;br /&gt;
			prop: &#039;text&#039;,&lt;br /&gt;
			pst: &#039;true&#039;,  // PST = pre-save transform; this makes substitution work properly&lt;br /&gt;
			text: templatetext,&lt;br /&gt;
			title: mw.config.get(&#039;wgPageName&#039;)&lt;br /&gt;
		};&lt;br /&gt;
		var wikipedia_api = new Wikipedia.api(&amp;quot;loading...&amp;quot;, query, Twinkle.warn.callbacks.previewRender, new Status(&amp;quot;Preview&amp;quot;));&lt;br /&gt;
		wikipedia_api.params = { previewbox: previewbox };&lt;br /&gt;
		wikipedia_api.post();&lt;br /&gt;
	},&lt;br /&gt;
	previewRender: function( apiobj ) {&lt;br /&gt;
		var params = apiobj.params;&lt;br /&gt;
		var xml = apiobj.getXML();&lt;br /&gt;
		var html = $(xml).find(&#039;text&#039;).text();&lt;br /&gt;
		if (!html) {&lt;br /&gt;
			apiobj.statelem.error(&amp;quot;failed to retrieve preview, or warning template was blanked&amp;quot;);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		params.previewbox.innerHTML = html;&lt;br /&gt;
		// fix vertical alignment&lt;br /&gt;
		$(params.previewbox).find(&#039;:not(img)&#039;).css(&#039;vertical-align&#039;, &#039;baseline&#039;);&lt;br /&gt;
	},&lt;br /&gt;
	main: function( pageobj ) {&lt;br /&gt;
		var text = pageobj.getPageText();&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
		var history_re = /&amp;lt;!-- Template:(uw-.*?) --&amp;gt;.*?(\d{1,2}:\d{1,2}, \d{1,2} \w+ \d{4}) \(UTC\)/g;&lt;br /&gt;
		var history = {};&lt;br /&gt;
		var latest = { date:new Date( 0 ), type:&#039;&#039; };&lt;br /&gt;
		var current;&lt;br /&gt;
&lt;br /&gt;
		while( ( current = history_re.exec( text ) ) ) {&lt;br /&gt;
			var current_date = new Date( current[2] + &#039; UTC&#039; );&lt;br /&gt;
			if( !( current[1] in history ) ||  history[ current[1] ] &amp;lt; current_date ) {&lt;br /&gt;
				history[ current[1] ] = current_date;&lt;br /&gt;
			}&lt;br /&gt;
			if( current_date &amp;gt; latest.date ) {&lt;br /&gt;
				latest.date = current_date;&lt;br /&gt;
				latest.type = current[1];&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var date = new Date();&lt;br /&gt;
&lt;br /&gt;
		if( params.sub_group in history ) {&lt;br /&gt;
			var temp_time = new Date( history[ params.sub_group ] );&lt;br /&gt;
			temp_time.setUTCHours( temp_time.getUTCHours() + 24 );&lt;br /&gt;
&lt;br /&gt;
			if( temp_time &amp;gt; date ) {&lt;br /&gt;
				if( !confirm( &amp;quot;An identical &amp;quot; + params.sub_group + &amp;quot; has been issued in the last 24 hours.  \nWould you still like to add this warning/notice?&amp;quot; ) ) {&lt;br /&gt;
					pageobj.statelem.info( &#039;aborted per user request&#039; );&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		latest.date.setUTCMinutes( latest.date.getUTCMinutes() + 1 ); // after long debate, one minute is max&lt;br /&gt;
&lt;br /&gt;
		if( latest.date &amp;gt; date ) {&lt;br /&gt;
			if( !confirm( &amp;quot;A &amp;quot; + latest.type + &amp;quot; has been issued in the last minute.  \nWould you still like to add this warning/notice?&amp;quot; ) ) {&lt;br /&gt;
				pageobj.statelem.info( &#039;aborted per user request&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var mainheaderRe = new RegExp(&amp;quot;==+\\s*Warnings\\s*==+&amp;quot;);&lt;br /&gt;
		var headerRe = new RegExp( &amp;quot;^==+\\s*(?:&amp;quot; + date.getUTCMonthName() + &#039;|&#039; + date.getUTCMonthNameAbbrev() +  &amp;quot;)\\s+&amp;quot; + date.getUTCFullYear() + &amp;quot;\\s*==+&amp;quot;, &#039;m&#039; );&lt;br /&gt;
&lt;br /&gt;
		if( text.length &amp;gt; 0 ) {&lt;br /&gt;
			text += &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( params.main_group === &#039;block&#039; ) {&lt;br /&gt;
			var article = &#039;&#039;, reason = &#039;&#039;, time = null;&lt;br /&gt;
			&lt;br /&gt;
			if( Twinkle.getPref(&#039;blankTalkpageOnIndefBlock&#039;) &amp;amp;&amp;amp; params.sub_group !== &#039;uw-lblock&#039; &amp;amp;&amp;amp; ( Twinkle.warn.indefBlockHash[ params.sub_group ] || (/indef|\*|max/).exec( params.block_timer ) ) ) {&lt;br /&gt;
				Status.info( &#039;Info&#039;, &#039;Blanking talk page per preferences and creating a new level 2 heading for the date&#039; );&lt;br /&gt;
				text = &amp;quot;== &amp;quot; + date.getUTCMonthName() + &amp;quot; &amp;quot; + date.getUTCFullYear() + &amp;quot; ==\n&amp;quot;;&lt;br /&gt;
			} else if( !headerRe.exec( text ) ) {&lt;br /&gt;
				Status.info( &#039;Info&#039;, &#039;Will create a new level 2 heading for the date, as none was found for this month&#039; );&lt;br /&gt;
				text += &amp;quot;== &amp;quot; + date.getUTCMonthName() + &amp;quot; &amp;quot; + date.getUTCFullYear() + &amp;quot; ==\n&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if( params.article &amp;amp;&amp;amp; Twinkle.warn.pageHash[ params.sub_group ] ) {&lt;br /&gt;
				article = &#039;|page=&#039; + params.article;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if( params.reason &amp;amp;&amp;amp; Twinkle.warn.reasonHash[ params.sub_group ] ) {&lt;br /&gt;
				reason = &#039;|reason=&#039; + params.reason;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			if( /te?mp|^\s*$|min/.exec( params.block_timer ) || Twinkle.warn.indefBlockHash[ params.sub_group ] ) {&lt;br /&gt;
				time = &#039;&#039;;&lt;br /&gt;
			} else if( /indef|\*|max/.exec( params.block_timer ) ) {&lt;br /&gt;
				time = &#039;|indef=yes&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				time = &#039;|time=&#039; + params.block_timer;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			text += &amp;quot;{{subst:&amp;quot; + params.sub_group + article + time + reason + &amp;quot;|sig=true|subst=subst:}}&amp;quot;;&lt;br /&gt;
		} else {&lt;br /&gt;
			if( !headerRe.exec( text ) ) {&lt;br /&gt;
				Status.info( &#039;Info&#039;, &#039;Will create a new level 2 heading for the date, as none was found for this month&#039; );&lt;br /&gt;
				text += &amp;quot;== &amp;quot; + date.getUTCMonthName() + &amp;quot; &amp;quot; + date.getUTCFullYear() + &amp;quot; ==\n&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if( params.sub_group === &#039;uw-username&#039; ) {&lt;br /&gt;
				text += &amp;quot;{{subst:&amp;quot; + params.sub_group + ( params.reason ? &#039;|1=&#039; + params.reason : &#039;&#039; ) + &amp;quot;|subst=subst:}} ~~~~&amp;quot;;&lt;br /&gt;
			} else {&lt;br /&gt;
				text += &amp;quot;{{subst:&amp;quot; + params.sub_group + ( params.article ? &#039;|1=&#039; + params.article : &#039;&#039; ) + &amp;quot;|subst=subst:}}&amp;quot; + (params.reason ? &amp;quot; &#039;&#039;&amp;quot; + params.reason + &amp;quot;&#039;&#039; &amp;quot;: &#039; &#039; ) + &amp;quot;~~~~&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ( Twinkle.getPref(&#039;showSharedIPNotice&#039;) &amp;amp;&amp;amp; isIPAddress( mw.config.get(&#039;wgTitle&#039;) ) ) {&lt;br /&gt;
			Status.info( &#039;Info&#039;, &#039;Adding a shared ip notice&#039; );&lt;br /&gt;
			if( QueryString.get( &#039;type&#039; ) === &#039;vand&#039; ) {&lt;br /&gt;
				text +=  &amp;quot;\n:&#039;&#039;If this is a shared [[IP address]], and you didn&#039;t make any [[Wikipedia:vandalism|unconstructive]] edits, consider [[Wikipedia:Why create an account?|creating an account]] for yourself so you can avoid further irrelevant warnings.&#039;&#039; &amp;quot;;&lt;br /&gt;
			} else {&lt;br /&gt;
				text +=  &amp;quot;\n:&#039;&#039;If this is a shared [[IP address]], and you didn&#039;t make the edit, consider [[Wikipedia:Why create an account?|creating an account]] for yourself so you can avoid further irrelevant notices.&#039;&#039; &amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		pageobj.setPageText( text );&lt;br /&gt;
		pageobj.setEditSummary( Twinkle.warn.messages[params.main_group][params.sub_group].summary + ( params.article ? &#039; on [[&#039; + params.article + &#039;]]&#039;  : &#039;&#039; ) + &#039;.&#039; + Twinkle.getPref(&#039;summaryAd&#039;) );&lt;br /&gt;
		pageobj.setWatchlist( Twinkle.getPref(&#039;watchWarnings&#039;) );&lt;br /&gt;
		pageobj.save();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.warn.callback.evaluate = function twinklewarnCallbackEvaluate(e) {&lt;br /&gt;
&lt;br /&gt;
	// First, check to make sure a reason was filled in if uw-username was selected&lt;br /&gt;
	&lt;br /&gt;
	if(e.target.sub_group.value === &#039;uw-username&#039; &amp;amp;&amp;amp; e.target.reason.value.trim() === &#039;&#039;) {&lt;br /&gt;
		alert(&amp;quot;You must supply a reason for the {{uw-username}} template.&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Then, grab all the values provided by the form&lt;br /&gt;
	&lt;br /&gt;
	var params = {&lt;br /&gt;
		reason: e.target.reason.value,&lt;br /&gt;
		main_group: e.target.main_group.value,&lt;br /&gt;
		sub_group: e.target.sub_group.value,&lt;br /&gt;
		article: e.target.article.value.replace( /^(Image|Category):/i, &#039;:$1:&#039; ),&lt;br /&gt;
		block_timer: e.target.block_timer ? e.target.block_timer.value : null&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( e.target );&lt;br /&gt;
&lt;br /&gt;
	Wikipedia.actionCompleted.redirect = mw.config.get(&#039;wgPageName&#039;);&lt;br /&gt;
	Wikipedia.actionCompleted.notice = &amp;quot;Warning complete, reloading talk page in a few seconds&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var wikipedia_page = new Wikipedia.page( mw.config.get(&#039;wgPageName&#039;), &#039;User talk page modification&#039; );&lt;br /&gt;
	wikipedia_page.setCallbackParameters( params );&lt;br /&gt;
	wikipedia_page.setFollowRedirect( true );&lt;br /&gt;
	wikipedia_page.load( Twinkle.warn.callbacks.main );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinklexfd.js: XFD module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;XFD&amp;quot;)&lt;br /&gt;
 * Active on:              Existing, non-special pages, except for file pages with no local (non-Commons) file which are not redirects&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.xfd = function twinklexfd() {&lt;br /&gt;
	// Disable on:&lt;br /&gt;
	// * special pages&lt;br /&gt;
	// * non-existent pages&lt;br /&gt;
	// * files on Commons, whether there is a local page or not (unneeded local pages of files on Commons are eligible for CSD F2)&lt;br /&gt;
	// * file pages without actual files (these are eligible for CSD G8)&lt;br /&gt;
	if ( mw.config.get(&#039;wgNamespaceNumber&#039;) &amp;lt; 0 || !mw.config.get(&#039;wgArticleId&#039;) || (mw.config.get(&#039;wgNamespaceNumber&#039;) === 6 &amp;amp;&amp;amp; (document.getElementById(&#039;mw-sharedupload&#039;) || (!document.getElementById(&#039;mw-imagepage-section-filehistory&#039;) &amp;amp;&amp;amp; !document.getElementsByClassName(&#039;redirectText&#039;).length))) ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if (twinkleUserAuthorized) {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &amp;quot;XFD&amp;quot;, &amp;quot;tw-xfd&amp;quot;, &amp;quot;Nominate for deletion&amp;quot;, &amp;quot;&amp;quot;)).click(Twinkle.xfd.callback);&lt;br /&gt;
	} else {&lt;br /&gt;
		$(twAddPortletLink(&amp;quot;#&amp;quot;, &#039;XFD&#039;, &#039;tw-xfd&#039;, &#039;Nominate for deletion&#039;, &#039;&#039;)).click(function() {&lt;br /&gt;
			alert(&amp;quot;Your account is too new to use Twinkle.&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.xfd.num2order = function twinklexfdNum2order( num ) {&lt;br /&gt;
	switch( num ) {&lt;br /&gt;
	case 1: return &#039;&#039;;&lt;br /&gt;
	case 2: return &#039;2nd&#039;;&lt;br /&gt;
	case 3: return &#039;3rd&#039;;&lt;br /&gt;
	default: return num + &#039;th&#039;;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.xfd.callback = function twinklexfdCallback() {&lt;br /&gt;
	var Window = new SimpleWindow( 600, 350 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Nominate for deletion (XfD)&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;About deletion discussions&amp;quot;, &amp;quot;MP:XFD&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;MP:TW/DOC#xfd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new QuickForm( Twinkle.xfd.callback.evaluate );&lt;br /&gt;
	var categories = form.append( {&lt;br /&gt;
			type: &#039;select&#039;,&lt;br /&gt;
			name: &#039;category&#039;,&lt;br /&gt;
			label: &#039;Deletion discussion venue:&#039;,&lt;br /&gt;
			tooltip: &#039;When activated, a default choice is made, based on what namespace you are in. This default should be the most appropriate&#039;,&lt;br /&gt;
			event: Twinkle.xfd.callback.change_category&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;AfD (Articles for deletion)&#039;,&lt;br /&gt;
			selected: mw.config.get(&#039;wgNamespaceNumber&#039;) === Namespace.MAIN,&lt;br /&gt;
			value: &#039;afd&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;TfD (Templates for discussion)&#039;,&lt;br /&gt;
			selected: mw.config.get(&#039;wgNamespaceNumber&#039;) === Namespace.TEMPLATE,&lt;br /&gt;
			value: &#039;tfd&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;FfD (Files for deletion)/PUF (Possibly unfree files)&#039;,&lt;br /&gt;
			selected: mw.config.get(&#039;wgNamespaceNumber&#039;) === Namespace.IMAGE,&lt;br /&gt;
			value: &#039;ffd&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;CfD (Categories for discussion)&#039;,&lt;br /&gt;
			selected: mw.config.get(&#039;wgNamespaceNumber&#039;) === Namespace.CATEGORY,&lt;br /&gt;
			value: &#039;cfd&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;MfD (Miscellany for deletion)&#039;,&lt;br /&gt;
			selected: [ Namespace.IMAGE, Namespace.MAIN, Namespace.TEMPLATE, Namespace.CATEGORY ].indexOf( mw.config.get(&#039;wgNamespaceNumber&#039;) ) === -1 ,&lt;br /&gt;
			value: &#039;mfd&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	categories.append( {&lt;br /&gt;
			type: &#039;option&#039;,&lt;br /&gt;
			label: &#039;RfD (Redirects for discussion)&#039;,&lt;br /&gt;
			selected: QueryString.equals(&#039;redirect&#039;, &#039;no&#039;) &amp;amp;&amp;amp; ($(&amp;quot;span.redirectText&amp;quot;).length &amp;gt; 0),&lt;br /&gt;
			value: &#039;rfd&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	//categories.append( {&lt;br /&gt;
	//		type: &#039;option&#039;,&lt;br /&gt;
	//		label: &#039;SfD (Stub types for deletion)&#039;,&lt;br /&gt;
	//		disabled: true,&lt;br /&gt;
	//		value: &#039;sfd&#039;&lt;br /&gt;
	//	} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;checkbox&#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &#039;Notify page creator if possible&#039;,&lt;br /&gt;
					value: &#039;notify&#039;,&lt;br /&gt;
					name: &#039;notify&#039;,&lt;br /&gt;
					tooltip: &amp;quot;A notification template will be placed on the creator&#039;s talk page if this is true.&amp;quot;,&lt;br /&gt;
					checked: true&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	);&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &#039;field&#039;,&lt;br /&gt;
			label:&#039;Work area&#039;,&lt;br /&gt;
			name: &#039;work_area&#039;&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( { type:&#039;submit&#039; } );&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent( result );&lt;br /&gt;
	Window.display();&lt;br /&gt;
&lt;br /&gt;
	// We must init the controls&lt;br /&gt;
	var evt = document.createEvent( &amp;quot;Event&amp;quot; );&lt;br /&gt;
	evt.initEvent( &#039;change&#039;, true, true );&lt;br /&gt;
	result.category.dispatchEvent( evt );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.xfd.callback.change_category = function twinklexfdCallbackChangeCategory(e) {&lt;br /&gt;
	var value = e.target.value;&lt;br /&gt;
	var root = e.target.form;&lt;br /&gt;
	var old_area;&lt;br /&gt;
	var childNodes = root.childNodes;&lt;br /&gt;
	for( var i = 0; i &amp;lt; childNodes.length; ++i ) {&lt;br /&gt;
		var node = childNodes[i];&lt;br /&gt;
		if (node instanceof Element &amp;amp;&amp;amp;&lt;br /&gt;
		    node.getAttribute( &#039;name&#039; ) === &#039;work_area&#039;) {&lt;br /&gt;
			old_area = node;&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	var work_area = null;&lt;br /&gt;
&lt;br /&gt;
	var oldreasontextbox = e.target.form.getElementsByTagName(&#039;textarea&#039;)[0];&lt;br /&gt;
	var oldreason = (oldreasontextbox ? oldreasontextbox.value : &#039;&#039;);&lt;br /&gt;
&lt;br /&gt;
	switch( value ) {&lt;br /&gt;
	case &#039;afd&#039;:&lt;br /&gt;
		work_area = new QuickForm.element( {&lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Articles for deletion&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Wrap deletion tag with &amp;lt;noinclude&amp;gt;&#039;,&lt;br /&gt;
							value: &#039;noinclude&#039;,&lt;br /&gt;
							name: &#039;noinclude&#039;,&lt;br /&gt;
							tooltip: &#039;Will wrap the deletion tag in &amp;amp;lt;noinclude&amp;amp;gt; tags, so that it won\&#039;t transclude. This option is not normally required.&#039;&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
		} );&lt;br /&gt;
		var afd_category = work_area.append( {&lt;br /&gt;
				type:&#039;select&#039;,&lt;br /&gt;
				name:&#039;xfdcat&#039;,&lt;br /&gt;
				label:&#039;Choose what category this nomination belongs in:&#039;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Unknown&#039;, value:&#039;?&#039;, selected:true } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Media and music&#039;, value:&#039;M&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Organisation, corporation, or product&#039;, value:&#039;O&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Biographical&#039;, value:&#039;B&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Society topics&#039;, value:&#039;S&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Web or internet&#039;, value:&#039;W&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Games or sports&#039;, value:&#039;G&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Science and technology&#039;, value:&#039;T&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Fiction and the arts&#039;, value:&#039;F&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Places and transportation&#039;, value:&#039;P&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Indiscernible or unclassifiable topic&#039;, value:&#039;I&#039; } );&lt;br /&gt;
		afd_category.append( { type:&#039;option&#039;, label:&#039;Debate not yet sorted&#039;, value:&#039;U&#039; } );&lt;br /&gt;
&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				name: &#039;xfdreason&#039;,&lt;br /&gt;
				label: &#039;Reason: &#039;,&lt;br /&gt;
				value: oldreason&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	case &#039;tfd&#039;:&lt;br /&gt;
		work_area = new QuickForm.element( {&lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Templates for discussion&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		var linknode = document.createElement(&#039;a&#039;);&lt;br /&gt;
		linknode.setAttribute(&amp;quot;href&amp;quot;, mw.util.getUrl(&amp;quot;MP:SFD&amp;quot;) );&lt;br /&gt;
		linknode.appendChild(document.createTextNode(&#039;MP:SFD&#039;));&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;div&#039;,&lt;br /&gt;
				label: [ &#039;Stub types and userboxes are not eligible for TfD. Stub types go to &#039;, linknode, &#039;, and userboxes go to MfD.&#039; ]&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Inline deletion tag&#039;,&lt;br /&gt;
							value: &#039;tfdinline&#039;,&lt;br /&gt;
							name: &#039;tfdinline&#039;,&lt;br /&gt;
							tooltip: &#039;Use {{tfd|type=inline}} to tag the page instead of {{tfd}}. Good for inline templates (those that appear amongst the words of text).&#039;,&lt;br /&gt;
							checked: false&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
		} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				name: &#039;xfdreason&#039;,&lt;br /&gt;
				label: &#039;Reason: &#039;,&lt;br /&gt;
				value: oldreason&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	case &#039;mfd&#039;:&lt;br /&gt;
		work_area = new QuickForm.element( {&lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Miscellany for deletion&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Wrap deletion tag with &amp;lt;noinclude&amp;gt;&#039;,&lt;br /&gt;
							value: &#039;noinclude&#039;,&lt;br /&gt;
							name: &#039;noinclude&#039;,&lt;br /&gt;
							tooltip: &#039;Will wrap the deletion tag in &amp;amp;lt;noinclude&amp;amp;gt; tags, so that it won\&#039;t transclude. Select this option for userboxes.&#039;&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
		} );&lt;br /&gt;
		if (mw.config.get(&#039;wgNamespaceNumber&#039;) === Namespace.USER || mw.config.get(&#039;wgNamespaceNumber&#039;) === Namespace.USER_TALK) {&lt;br /&gt;
			work_area.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
						{&lt;br /&gt;
							label: &#039;Also notify owner of userspace if they are not the page creator&#039;,&lt;br /&gt;
							value: &#039;notifyuserspace&#039;,&lt;br /&gt;
							name: &#039;notifyuserspace&#039;,&lt;br /&gt;
							tooltip: &#039;If the user in whose userspace this page is located, is not the page creator (for example, the page is a rescued article stored as a userspace draft), notify the userspace owner as well.&#039;,&lt;br /&gt;
							checked: true&lt;br /&gt;
						}&lt;br /&gt;
					]&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				name: &#039;xfdreason&#039;,&lt;br /&gt;
				label: &#039;Reason: &#039;,&lt;br /&gt;
				value: oldreason&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	case &#039;ffd&#039;:&lt;br /&gt;
		work_area = new QuickForm.element( {&lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Files for deletion&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;checkbox&#039;,&lt;br /&gt;
				name: &#039;puf&#039;,&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: &#039;Possibly unfree file&#039;,&lt;br /&gt;
						value: &#039;puf&#039;,&lt;br /&gt;
						tooltip: &#039;File has disputed source or licensing information&#039;&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				name: &#039;xfdreason&#039;,&lt;br /&gt;
				label: &#039;Reason: &#039;,&lt;br /&gt;
				value: oldreason&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	case &#039;cfd&#039;:&lt;br /&gt;
		work_area = new QuickForm.element( {&lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Categories for discussion&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		var cfd_category = work_area.append( {&lt;br /&gt;
				type: &#039;select&#039;,&lt;br /&gt;
				label: &#039;Choose type of action wanted: &#039;,&lt;br /&gt;
				name: &#039;xfdcat&#039;,&lt;br /&gt;
				event: function(e) {&lt;br /&gt;
					var value = e.target.value;&lt;br /&gt;
					var target = e.target.form.xfdtarget;&lt;br /&gt;
					if( value === &#039;cfd&#039; ) {&lt;br /&gt;
						target.disabled = true;&lt;br /&gt;
					} else {&lt;br /&gt;
						target.disabled = false;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			} );&lt;br /&gt;
		cfd_category.append( { type: &#039;option&#039;, label: &#039;Deletion&#039;, value: &#039;cfd&#039;, selected: true } );&lt;br /&gt;
		cfd_category.append( { type: &#039;option&#039;, label: &#039;Merge&#039;, value: &#039;cfm&#039; } );&lt;br /&gt;
		cfd_category.append( { type: &#039;option&#039;, label: &#039;Renaming&#039;, value: &#039;cfr&#039; } );&lt;br /&gt;
		cfd_category.append( { type: &#039;option&#039;, label: &#039;Convert into article&#039;, value: &#039;cfc&#039; } );&lt;br /&gt;
&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;input&#039;,&lt;br /&gt;
				name: &#039;xfdtarget&#039;,&lt;br /&gt;
				label: &#039;Target page: &#039;,&lt;br /&gt;
				disabled: true,&lt;br /&gt;
				value: &#039;&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				name: &#039;xfdreason&#039;,&lt;br /&gt;
				label: &#039;Reason: &#039;,&lt;br /&gt;
				value: oldreason&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	case &#039;rfd&#039;:&lt;br /&gt;
		work_area = new QuickForm.element( {&lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Redirects for discussion&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area.append( {&lt;br /&gt;
				type: &#039;textarea&#039;,&lt;br /&gt;
				name: &#039;xfdreason&#039;,&lt;br /&gt;
				label: &#039;Reason: &#039;,&lt;br /&gt;
				value: oldreason&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	default:&lt;br /&gt;
		work_area = new QuickForm.element( {&lt;br /&gt;
				type: &#039;field&#039;,&lt;br /&gt;
				label: &#039;Nothing for anything&#039;,&lt;br /&gt;
				name: &#039;work_area&#039;&lt;br /&gt;
			} );&lt;br /&gt;
		work_area = work_area.render();&lt;br /&gt;
		old_area.parentNode.replaceChild( work_area, old_area );&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.xfd.callbacks = {&lt;br /&gt;
	afd: {&lt;br /&gt;
		main: function(apiobj) {&lt;br /&gt;
			var xmlDoc = apiobj.responseXML;&lt;br /&gt;
			var titles = $(xmlDoc).find(&#039;allpages p&#039;);&lt;br /&gt;
&lt;br /&gt;
			// There has been no earlier entries with this prefix, just go on.&lt;br /&gt;
			if( titles.length &amp;lt;= 0 ) {&lt;br /&gt;
				apiobj.params.numbering = apiobj.params.number = &#039;&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				var number = 0;&lt;br /&gt;
				for( var i = 0; i &amp;lt; titles.length; ++i ) {&lt;br /&gt;
					var title = titles[i].getAttribute(&#039;title&#039;);&lt;br /&gt;
&lt;br /&gt;
					// First, simple test, is there an instance with this exact name?&lt;br /&gt;
					if( title === &#039;Wikipedia:Articles for deletion/&#039; + mw.config.get(&#039;wgPageName&#039;) ) {&lt;br /&gt;
						number = Math.max( number, 1 );&lt;br /&gt;
						continue;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					var order_re = new RegExp( &#039;^&#039; +&lt;br /&gt;
						RegExp.escape( &#039;Wikipedia:Articles for deletion/&#039; + mw.config.get(&#039;wgPageName&#039;), true ) +&lt;br /&gt;
						&#039;\\s*\\(\\s*(\\d+)(?:(?:th|nd|rd|st) nom(?:ination)?)?\\s*\\)\\s*$&#039;);&lt;br /&gt;
					var match = order_re.exec( title );&lt;br /&gt;
&lt;br /&gt;
					// No match; A non-good value&lt;br /&gt;
					if( !match ) {&lt;br /&gt;
						continue;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					// A match, set number to the max of current&lt;br /&gt;
					number = Math.max( number, Number(match[1]) );&lt;br /&gt;
				}&lt;br /&gt;
				apiobj.params.number = Twinkle.xfd.num2order( parseInt( number, 10 ) + 1);&lt;br /&gt;
				apiobj.params.numbering = number &amp;gt; 0 ? &#039; (&#039; + apiobj.params.number + &#039; nomination)&#039; : &#039;&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			apiobj.params.discussionpage = &#039;Wikipedia:Articles for deletion/&#039; + mw.config.get(&#039;wgPageName&#039;) + apiobj.params.numbering;&lt;br /&gt;
&lt;br /&gt;
			Status.info( &amp;quot;Next discussion page&amp;quot;, &amp;quot;[[&amp;quot; + apiobj.params.discussionpage + &amp;quot;]]&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
			// Updating data for the action completed event&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = apiobj.params.discussionpage;&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Nomination completed, now redirecting to the discussion page&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			// Tagging article&lt;br /&gt;
			var wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Adding deletion tag to article&amp;quot;);&lt;br /&gt;
			wikipedia_page.setFollowRedirect(true);  // should never be needed, but if the article is moved, we would want to follow the redirect&lt;br /&gt;
			wikipedia_page.setCallbackParameters(apiobj.params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.afd.taggingArticle);&lt;br /&gt;
		},&lt;br /&gt;
		// Tagging needs to happen before everything else: this means we can check if there is an AfD tag already on the page&lt;br /&gt;
		taggingArticle: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var statelem = pageobj.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
			// Check for existing AfD tag, for the benefit of new page patrollers&lt;br /&gt;
			var textNoAfd = text.replace(/\{\{\s*(Article for deletion\/dated|AfDM)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/g, &amp;quot;&amp;quot;);&lt;br /&gt;
			if (text !== textNoAfd) {&lt;br /&gt;
				if (confirm(&amp;quot;An AfD tag was found on this article. Maybe someone beat you to it.  \nClick OK to replace the current AfD tag (not recommended), or Cancel to abandon your nomination.&amp;quot;)) {&lt;br /&gt;
					text = textNoAfd;&lt;br /&gt;
				} else {&lt;br /&gt;
					statelem.error(&amp;quot;Article already tagged with AfD tag, and you chose to abort&amp;quot;);&lt;br /&gt;
					window.location.reload();&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Now we know we want to go ahead with it, trigger the other AJAX requests&lt;br /&gt;
&lt;br /&gt;
			// Starting discussion page&lt;br /&gt;
			var wikipedia_page = new Wikipedia.page(params.discussionpage, &amp;quot;Creating article deletion discussion page&amp;quot;);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.afd.discussionPage);&lt;br /&gt;
&lt;br /&gt;
			// Today&#039;s list&lt;br /&gt;
			var date = new Date();&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(&#039;Wikipedia:Articles for deletion/Log/&#039; + date.getUTCFullYear() + &#039; &#039; +&lt;br /&gt;
				date.getUTCMonthName() + &#039; &#039; + date.getUTCDate(), &amp;quot;Adding discussion to today&#039;s list&amp;quot;);&lt;br /&gt;
			wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.afd.todaysList);&lt;br /&gt;
&lt;br /&gt;
			// Notification to first contributor&lt;br /&gt;
			if (params.usertalk) {&lt;br /&gt;
				var thispage = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
				thispage.setCallbackParameters(params);&lt;br /&gt;
				thispage.lookupCreator(Twinkle.xfd.callbacks.afd.userNotification);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Remove some tags that should always be removed on AfD.&lt;br /&gt;
			text = text.replace(/\{\{\s*(dated prod|dated prod blp|Prod blp\/dated|Proposed deletion\/dated|prod2|Proposed deletion endorsed|New unreviewed article|Userspace draft)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/ig, &amp;quot;&amp;quot;);&lt;br /&gt;
			// Then, test if there are speedy deletion-related templates on the article.&lt;br /&gt;
			var textNoSd = text.replace(/\{\{\s*(db(-\w*)?|delete|(?:hang|hold)[\- ]?on)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/ig, &amp;quot;&amp;quot;);&lt;br /&gt;
			if (text !== textNoSd &amp;amp;&amp;amp; confirm(&amp;quot;A speedy deletion tag was found on this page. Should it be removed?&amp;quot;)) {&lt;br /&gt;
				text = textNoSd;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText((params.noinclude ? &amp;quot;&amp;lt;noinclude&amp;gt;{{&amp;quot; : &amp;quot;{{&amp;quot;) + (params.number === &#039;&#039; ? &amp;quot;subst:afd|help=off&amp;quot; : (&#039;subst:afdx|&#039; +&lt;br /&gt;
				params.number + &amp;quot;|help=off&amp;quot;)) + (params.noinclude ? &amp;quot;}}&amp;lt;/noinclude&amp;gt;\n&amp;quot; : &amp;quot;}}\n&amp;quot;) + text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Nominated for deletion; see [[&amp;quot; + params.discussionpage + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchPage&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		discussionPage: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(&amp;quot;{{subst:afd2|pg=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;|cat=&amp;quot; + params.xfdcat + &amp;quot;|text=&amp;quot; + params.reason + &amp;quot; ~~~~}}\n&amp;quot;);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Creating deletion discussion page for [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchDiscussion&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;createonly&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		todaysList: function(pageobj) {&lt;br /&gt;
			var old_text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var statelem = pageobj.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
			var text = old_text.replace( /(&amp;lt;\!-- Add new entries to the TOP of the following list --&amp;gt;\n+)/, &amp;quot;$1{{subst:afd3|pg=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + params.numbering + &amp;quot;}}\n&amp;quot;);&lt;br /&gt;
			if( text === old_text ) {&lt;br /&gt;
				statelem.error( &#039;failed to find target spot for the discussion&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setPageText(text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Adding [[&amp;quot; + params.discussionpage + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchList&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		userNotification: function(pageobj) {&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var initialContrib = pageobj.getCreator();&lt;br /&gt;
			var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, &amp;quot;Notifying initial contributor (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
			var notifytext = &amp;quot;\n{{subst:AFDWarning|1=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + ( params.numbering !== &#039;&#039; ? &#039;|order=&amp;amp;#32;&#039; + params.numbering : &#039;&#039; ) + &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
			usertalkpage.setAppendText(notifytext);&lt;br /&gt;
			usertalkpage.setEditSummary(&amp;quot;Notification: listing at [[MP:AFD|articles for deletion]] of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchUser&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					usertalkpage.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			usertalkpage.setFollowRedirect(true);&lt;br /&gt;
			usertalkpage.append();&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	tfd: {&lt;br /&gt;
		taggingTemplate: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(&amp;quot;{{tfd&amp;quot; + (params.tfdinline ? &amp;quot;|type=inline&amp;quot; : &amp;quot;&amp;quot;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;}}\n&amp;quot; + text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Nominated for deletion; see [[&amp;quot; + params.logpage + &amp;quot;#&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchPage&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		todaysList: function(pageobj) {&lt;br /&gt;
			var old_text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var statelem = pageobj.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
			var text = old_text.replace( &#039;--&amp;gt;&#039;, &amp;quot;--&amp;gt;\n{{subst:tfd2|&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;|text=&amp;quot; + params.reason + &amp;quot; ~~~~}}&amp;quot;);&lt;br /&gt;
			if( text === old_text ) {&lt;br /&gt;
				statelem.error( &#039;failed to find target spot for the discussion&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setPageText(text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Adding [[Template:&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchDiscussion&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		userNotification: function(pageobj) {&lt;br /&gt;
			var initialContrib = pageobj.getCreator();&lt;br /&gt;
			var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, &amp;quot;Notifying initial contributor (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
			var notifytext = &amp;quot;\n{{subst:tfdnotice|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
			usertalkpage.setAppendText(notifytext);&lt;br /&gt;
			usertalkpage.setEditSummary(&amp;quot;Notification: nomination at [[MP:TFD|templates for discussion]] of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchUser&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					usertalkpage.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			usertalkpage.setFollowRedirect(true);&lt;br /&gt;
			usertalkpage.append();&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	mfd: {&lt;br /&gt;
		main: function(apiobj) {&lt;br /&gt;
			var xmlDoc = apiobj.responseXML;&lt;br /&gt;
			var titles = $(xmlDoc).find(&#039;allpages p&#039;);&lt;br /&gt;
&lt;br /&gt;
			// There has been no earlier entries with this prefix, just go on.&lt;br /&gt;
			if( titles.length &amp;lt;= 0 ) {&lt;br /&gt;
				apiobj.params.numbering = apiobj.params.number = &#039;&#039;;&lt;br /&gt;
				numbering = number = &#039;&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				var number = 0;&lt;br /&gt;
				for( var i = 0; i &amp;lt; titles.length; ++i ) {&lt;br /&gt;
					var title = titles[i].getAttribute(&#039;title&#039;);&lt;br /&gt;
&lt;br /&gt;
					// First, simple test, is there an instance with this exact name?&lt;br /&gt;
					if( title === &#039;Wikipedia:Miscellany for deletion/&#039; + mw.config.get(&#039;wgPageName&#039;) ) {&lt;br /&gt;
						number = Math.max( number, 1 );&lt;br /&gt;
						continue;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					var order_re = new RegExp( &#039;^&#039; +&lt;br /&gt;
							RegExp.escape( &#039;Wikipedia:Miscellany for deletion/&#039; + mw.config.get(&#039;wgPageName&#039;), true ) +&lt;br /&gt;
							&#039;\\s*\\(\\s*(\\d+)(?:(?:th|nd|rd|st) nom(?:ination)?)?\\s*\\)\\s*$&#039; );&lt;br /&gt;
					var match = order_re.exec( title );&lt;br /&gt;
&lt;br /&gt;
					// No match; A non-good value&lt;br /&gt;
					if( !match ) {&lt;br /&gt;
						continue;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					// A match, set number to the max of current&lt;br /&gt;
					number = Math.max( number, Number(match[1]) );&lt;br /&gt;
				}&lt;br /&gt;
				apiobj.params.number = Twinkle.xfd.num2order( parseInt( number, 10 ) + 1);&lt;br /&gt;
				apiobj.params.numbering = number &amp;gt; 0 ? &#039; (&#039; + apiobj.params.number + &#039; nomination)&#039; : &#039;&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			apiobj.params.discussionpage = &amp;quot;Wikipedia:Miscellany for deletion/&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + apiobj.params.numbering;&lt;br /&gt;
&lt;br /&gt;
			apiobj.statelem.info( &amp;quot;next in order is [[&amp;quot; + apiobj.params.discussionpage + &#039;]]&#039;);&lt;br /&gt;
&lt;br /&gt;
			// Tagging page&lt;br /&gt;
			var wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Tagging page with deletion tag&amp;quot;);&lt;br /&gt;
			wikipedia_page.setFollowRedirect(true);  // should never be needed, but if the page is moved, we would want to follow the redirect&lt;br /&gt;
			wikipedia_page.setCallbackParameters(apiobj.params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.mfd.taggingPage);&lt;br /&gt;
&lt;br /&gt;
			// Updating data for the action completed event&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = apiobj.params.discussionpage;&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Nomination completed, now redirecting to the discussion page&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			// Discussion page&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(apiobj.params.discussionpage, &amp;quot;Creating deletion discussion page&amp;quot;);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(apiobj.params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.mfd.discussionPage);&lt;br /&gt;
&lt;br /&gt;
			// Today&#039;s list&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(&amp;quot;Wikipedia:Miscellany for deletion&amp;quot;, &amp;quot;Adding discussion to today&#039;s list&amp;quot;);&lt;br /&gt;
			//wikipedia_page.setPageSection(2);&lt;br /&gt;
				// pageSection has been disabled - the API seems to throw up with nonexistent edit conflicts&lt;br /&gt;
				// it can be turned on again once the problem is fixed, to save bandwidth&lt;br /&gt;
			//wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(apiobj.params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.mfd.todaysList);&lt;br /&gt;
&lt;br /&gt;
			// Notification to first contributor, and notification to owner of userspace (if applicable and required)&lt;br /&gt;
			if (apiobj.params.usertalk) {&lt;br /&gt;
				var thispage = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
				thispage.setCallbackParameters(apiobj.params);&lt;br /&gt;
				thispage.lookupCreator(Twinkle.xfd.callbacks.mfd.userNotification);&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		taggingPage: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText((params.noinclude ? &amp;quot;&amp;lt;noinclude&amp;gt;&amp;quot; : &amp;quot;&amp;quot;) + &amp;quot;{{&amp;quot; + ((params.number === &#039;&#039;) ? &amp;quot;mfd}}\n&amp;quot; : (&#039;mfdx|&#039; + params.number + &amp;quot;}}\n&amp;quot;)) +&lt;br /&gt;
				(params.noinclude ? &amp;quot;&amp;lt;/noinclude&amp;gt;&amp;quot; : &amp;quot;&amp;quot;) + text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Nominated for deletion; see [[&amp;quot; + params.discussionpage + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchPage&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		discussionPage: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(&amp;quot;{{subst:mfd2|pg=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;|text=&amp;quot; + params.reason + &amp;quot; ~~~~}}\n&amp;quot;);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Creating deletion discussion page for [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchDiscussion&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;createonly&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		todaysList: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var statelem = pageobj.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
			var date = new Date();&lt;br /&gt;
			var date_header = &amp;quot;===&amp;quot; + date.getUTCMonthName() + &#039; &#039; + date.getUTCDate() + &#039;, &#039; + date.getUTCFullYear() + &amp;quot;===&amp;quot;;&lt;br /&gt;
			var date_header_regex = new RegExp( &amp;quot;(===\\s*&amp;quot; + date.getUTCMonthName() + &#039;\\s+&#039; + date.getUTCDate() + &#039;,\\s+&#039; + date.getUTCFullYear() + &amp;quot;\\s*===)&amp;quot; );&lt;br /&gt;
			var new_data = &amp;quot;{{subst:mfd3|pg=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + params.numbering + &amp;quot;}}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			if( date_header_regex.test( text ) ) { // we have a section already&lt;br /&gt;
				statelem.info( &#039;Found today\&#039;s section, proceeding to add new entry&#039; );&lt;br /&gt;
				text = text.replace( date_header_regex, &amp;quot;$1\n&amp;quot; + new_data );&lt;br /&gt;
			} else { // we need to create a new section&lt;br /&gt;
				statelem.info( &#039;No section for today found, proceeding to create one&#039; );&lt;br /&gt;
				text = text.replace(&amp;quot;===&amp;quot;, date_header + new_data + &amp;quot;\n\n===&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Adding [[&amp;quot; + params.discussionpage + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchList&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		userNotification: function(pageobj) {&lt;br /&gt;
			var initialContrib = pageobj.getCreator();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			// Really notify the creator&lt;br /&gt;
			Twinkle.xfd.callbacks.mfd.userNotificationMain(params, initialContrib, &amp;quot;Notifying initial contributor&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			// Also notify the user who owns the subpage if they are not the creator&lt;br /&gt;
			if (params.notifyuserspace) {&lt;br /&gt;
				var userspaceOwner = ((mw.config.get(&#039;wgTitle&#039;).indexOf(&#039;/&#039;) === -1) ? mw.config.get(&#039;wgTitle&#039;) : mw.config.get(&#039;wgTitle&#039;).substring(0, mw.config.get(&#039;wgTitle&#039;).indexOf(&#039;/&#039;)));&lt;br /&gt;
				if (userspaceOwner !== initialContrib) {&lt;br /&gt;
					Twinkle.xfd.callbacks.mfd.userNotificationMain(params, userspaceOwner, &amp;quot;Notifying owner of userspace&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		userNotificationMain: function(params, initialContrib, actionName)&lt;br /&gt;
		{&lt;br /&gt;
			var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, actionName + &amp;quot; (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
			var notifytext = &amp;quot;\n{{subst:MFDWarning|1=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + ( params.numbering !== &#039;&#039; ? &#039;|order=&amp;amp;#32;&#039; + params.numbering : &#039;&#039; ) + &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
			usertalkpage.setAppendText(notifytext);&lt;br /&gt;
			usertalkpage.setEditSummary(&amp;quot;Notification: listing at [[MP:MFD|miscellany for deletion]] of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchUser&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					usertalkpage.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			usertalkpage.setFollowRedirect(true);&lt;br /&gt;
			usertalkpage.append();&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	ffd: {&lt;br /&gt;
		main: function(pageobj) {&lt;br /&gt;
			// this is coming in from lookupCreator...!&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var initialContrib = pageobj.getCreator();&lt;br /&gt;
			params.uploader = initialContrib;&lt;br /&gt;
&lt;br /&gt;
			// Adding discussion&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(params.logpage, &amp;quot;Adding discussion to today&#039;s list&amp;quot;);&lt;br /&gt;
			wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.ffd.todaysList);&lt;br /&gt;
&lt;br /&gt;
			// Notification to first contributor&lt;br /&gt;
			if(params.usertalk) {&lt;br /&gt;
				var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, &amp;quot;Notifying initial contributor (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
				var notifytext = &amp;quot;\n{{subst:idw|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;}}&amp;quot;;&lt;br /&gt;
				usertalkpage.setAppendText(notifytext);&lt;br /&gt;
				usertalkpage.setEditSummary(&amp;quot;Notification: listing at [[MP:FFD|files for deletion]] of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
				usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
				switch (Twinkle.getPref(&#039;xfdWatchUser&#039;)) {&lt;br /&gt;
					case &#039;yes&#039;:&lt;br /&gt;
						usertalkpage.setWatchlist(true);&lt;br /&gt;
						break;&lt;br /&gt;
					case &#039;no&#039;:&lt;br /&gt;
						usertalkpage.setWatchlistFromPreferences(false);&lt;br /&gt;
						break;&lt;br /&gt;
					default:&lt;br /&gt;
						usertalkpage.setWatchlistFromPreferences(true);&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
				usertalkpage.setFollowRedirect(true);&lt;br /&gt;
				usertalkpage.append();&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		taggingImage: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(&amp;quot;{{ffd|log=&amp;quot; + params.date + &amp;quot;}}\n&amp;quot; + text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Nominated for deletion at [[&amp;quot; + params.logpage + &amp;quot;#&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchPage&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);  // it might be possible for a file to exist without a description page&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		todaysList: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			// add date header if the log is found to be empty (a bot should do this automatically, but it sometimes breaks down)&lt;br /&gt;
			if (!pageobj.exists()) {&lt;br /&gt;
				text = &amp;quot;{{subst:Ffd log}}&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(text + &amp;quot;\n{{subst:ffd2|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;|Uploader=&amp;quot; + params.uploader + &amp;quot;|Reason=&amp;quot; + params.reason + &amp;quot;}} ~~~~&amp;quot;);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Adding [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchDiscussion&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	puf: {&lt;br /&gt;
		taggingImage: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(&amp;quot;{{puf|help=off|log=&amp;quot; + params.date + &amp;quot;}}\n&amp;quot; + text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Listed at [[MP:PUF|possibly unfree files]]: [[&amp;quot; + params.logpage + &amp;quot;#&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchPage&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);  // it might be possible for a file to exist without a description page&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		todaysList: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(text + &amp;quot;\n{{subst:puf2|image=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;|reason=&amp;quot; + params.reason + &amp;quot;}} ~~~~&amp;quot;);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Adding [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchDiscussion&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		userNotification: function(pageobj) {&lt;br /&gt;
			var initialContrib = pageobj.getCreator();&lt;br /&gt;
			var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, &amp;quot;Notifying initial contributor (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
			var notifytext = &amp;quot;\n{{subst:idw-puf|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
			usertalkpage.setAppendText(notifytext);&lt;br /&gt;
			usertalkpage.setEditSummary(&amp;quot;Notification: listing at [[MP:PUF|possibly unfree files]] of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchUser&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					usertalkpage.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			usertalkpage.setFollowRedirect(true);&lt;br /&gt;
			usertalkpage.append();&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	cfd: {&lt;br /&gt;
		taggingCategory: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			var added_data = &amp;quot;&amp;quot;;&lt;br /&gt;
			var editsummary = &amp;quot;&amp;quot;;&lt;br /&gt;
			switch( params.xfdcat ) {&lt;br /&gt;
			case &#039;cfd&#039;:&lt;br /&gt;
				added_data = &amp;quot;{{subst:cfd}}&amp;quot;;&lt;br /&gt;
				editsummary = &amp;quot;Category being considered for deletion in accordance with [[MP:CDP|CDP]].&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;cfm&#039;:&lt;br /&gt;
				added_data = &amp;quot;{{subst:cfm|&amp;quot; + params.target.replace(&#039;Category:&#039;,&#039;&#039;) + &amp;quot;}}&amp;quot;;&lt;br /&gt;
				editsummary = &amp;quot;Category being considered for merging in accordance with [[MP:CDP|CDP]].&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;cfr&#039;:&lt;br /&gt;
				added_data = &amp;quot;{{subst:cfr|&amp;quot; + params.target.replace(&#039;Category:&#039;,&#039;&#039;) + &amp;quot;}}&amp;quot;;&lt;br /&gt;
				editsummary = &amp;quot;Category being considered for renaming in accordance with [[MP:CDP|CDP]].&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;cfc&#039;:&lt;br /&gt;
				added_data = &amp;quot;{{subst:cfc|&amp;quot; + params.target + &amp;quot;}}&amp;quot;;&lt;br /&gt;
				editsummary = &amp;quot;Category being considered for conversion to an article in accordance with [[MP:CDP|CDP]].&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				alert(&amp;quot;twinklexfd in taggingCategory(): unknown CFD action&amp;quot;);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(added_data + &amp;quot;\n&amp;quot; + text);&lt;br /&gt;
			pageobj.setEditSummary(editsummary + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchPage&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);  // since categories can be populated without an actual page at that title&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		todaysList: function(pageobj) {&lt;br /&gt;
			var old_text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var statelem = pageobj.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
			var added_data = &amp;quot;&amp;quot;;&lt;br /&gt;
			var editsummary = &amp;quot;&amp;quot;;&lt;br /&gt;
			switch( params.xfdcat ) {&lt;br /&gt;
			case &#039;cfd&#039;:&lt;br /&gt;
				added_data = &amp;quot;{{subst:cfd2|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;|text=&amp;quot; + params.reason + &amp;quot; ~~~~}}&amp;quot;;&lt;br /&gt;
				editsummary = &amp;quot;Added delete nomination of [[:&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;cfm&#039;:&lt;br /&gt;
				added_data = &amp;quot;{{subst:cfm2|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;|2=&amp;quot; + params.target + &amp;quot;|text=&amp;quot; + params.reason + &amp;quot; ~~~~}}&amp;quot;;&lt;br /&gt;
				editsummary = &amp;quot;Added merge nomination of [[:&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;cfr&#039;:&lt;br /&gt;
				added_data = &amp;quot;{{subst:cfr2|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;|2=&amp;quot; + params.target + &amp;quot;|text=&amp;quot; + params.reason + &amp;quot; ~~~~}}&amp;quot;;&lt;br /&gt;
				editsummary = &amp;quot;Added rename nomination of [[:&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;cfc&#039;:&lt;br /&gt;
				added_data = &amp;quot;{{subst:cfc2|1=&amp;quot; + mw.config.get(&#039;wgTitle&#039;) + &amp;quot;|2=&amp;quot; + params.target + &amp;quot;|text=&amp;quot; + params.reason + &amp;quot; ~~~~}}&amp;quot;;&lt;br /&gt;
				editsummary = &amp;quot;Added convert nomination of [[:&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				alert(&amp;quot;twinklexfd in todaysList: unknown CFD action&amp;quot;);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			text = old_text.replace( &#039;below this line --&amp;gt;&#039;, &amp;quot;below this line --&amp;gt;\n&amp;quot; + added_data );&lt;br /&gt;
			if( text === old_text ) {&lt;br /&gt;
				statelem.error( &#039;failed to find target spot for the discussion&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(text);&lt;br /&gt;
			pageobj.setEditSummary(editsummary + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchDiscussion&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		userNotification: function(pageobj) {&lt;br /&gt;
			var initialContrib = pageobj.getCreator();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, &amp;quot;Notifying initial contributor (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
			var notifytext = &amp;quot;\n{{subst:CFDNote|1=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
			usertalkpage.setAppendText(notifytext);&lt;br /&gt;
			usertalkpage.setEditSummary(&amp;quot;Notification: listing at [[MP:CFD|categories for discussion]] of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchUser&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					usertalkpage.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			usertalkpage.setFollowRedirect(true);&lt;br /&gt;
			usertalkpage.append();&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	rfd: {&lt;br /&gt;
		// This is a callback from an API request, which gets the target of the redirect&lt;br /&gt;
		main: function(apiobj) {&lt;br /&gt;
			var xmlDoc = apiobj.responseXML;&lt;br /&gt;
			var target = $(xmlDoc).find(&#039;redirects r&#039;).first().attr(&#039;to&#039;);&lt;br /&gt;
			if( !target ) {&lt;br /&gt;
				apiobj.statelem.error( &amp;quot;This page is currently not a redirect, aborting&amp;quot; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			apiobj.params.target = target;&lt;br /&gt;
&lt;br /&gt;
			var date = new Date();&lt;br /&gt;
			apiobj.params.logpage = &#039;Wikipedia:Redirects for discussion/Log/&#039; + date.getUTCFullYear() + &#039; &#039; + date.getUTCMonthName() + &#039; &#039; + date.getUTCDate();&lt;br /&gt;
&lt;br /&gt;
			// Tagging redirect&lt;br /&gt;
			var wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Adding deletion tag to redirect&amp;quot;);&lt;br /&gt;
			wikipedia_page.setFollowRedirect(false);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(apiobj.params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.rfd.taggingRedirect);&lt;br /&gt;
&lt;br /&gt;
			// Updating data for the action completed event&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = apiobj.params.logpage;&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Nomination completed, now redirecting to today&#039;s log&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			// Adding discussion&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(apiobj.params.logpage, &amp;quot;Adding discussion to today&#039;s log&amp;quot;);&lt;br /&gt;
			wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(apiobj.params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.rfd.todaysList);&lt;br /&gt;
&lt;br /&gt;
			// Notifying initial contributor&lt;br /&gt;
			if (apiobj.params.usertalk) {&lt;br /&gt;
				var thispage = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
				thispage.setCallbackParameters(apiobj.params);&lt;br /&gt;
				thispage.lookupCreator(Twinkle.xfd.callbacks.rfd.userNotification);&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		taggingRedirect: function(pageobj) {&lt;br /&gt;
			var text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(&amp;quot;{{rfd}}\n&amp;quot; + text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Listed for discussion at [[&amp;quot; + params.logpage + &amp;quot;#&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchPage&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;nocreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		todaysList: function(pageobj) {&lt;br /&gt;
			var old_text = pageobj.getPageText();&lt;br /&gt;
			var params = pageobj.getCallbackParameters();&lt;br /&gt;
			var statelem = pageobj.getStatusElement();&lt;br /&gt;
&lt;br /&gt;
			var text = old_text.replace( /(&amp;lt;\!-- Add new entries directly below this line --&amp;gt;)/, &amp;quot;$1\n{{subst:rfd2|redirect=&amp;quot;+ mw.config.get(&#039;wgPageName&#039;) + &amp;quot;|target=&amp;quot; +&lt;br /&gt;
				params.target + &amp;quot;|text=&amp;quot; + params.reason.toUpperCaseFirstChar() +&amp;quot;}} ~~~~\n&amp;quot; );&lt;br /&gt;
			if( text === old_text ) {&lt;br /&gt;
				statelem.error( &#039;failed to find target spot for the discussion&#039; );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(text);&lt;br /&gt;
			pageobj.setEditSummary(&amp;quot;Adding [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchDiscussion&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					pageobj.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			pageobj.save();&lt;br /&gt;
		},&lt;br /&gt;
		userNotification: function(pageobj) {&lt;br /&gt;
			var initialContrib = pageobj.getCreator();&lt;br /&gt;
			var usertalkpage = new Wikipedia.page(&#039;User talk:&#039; + initialContrib, &amp;quot;Notifying initial contributor (&amp;quot; + initialContrib + &amp;quot;)&amp;quot;);&lt;br /&gt;
			var notifytext = &amp;quot;\n{{subst:RFDNote|1=&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;}} ~~~~&amp;quot;;&lt;br /&gt;
			usertalkpage.setAppendText(notifytext);&lt;br /&gt;
			usertalkpage.setEditSummary(&amp;quot;Notification: listing at [[MP:RFD|redirects for discussion]] of [[&amp;quot; + mw.config.get(&#039;wgPageName&#039;) + &amp;quot;]].&amp;quot; + Twinkle.getPref(&#039;summaryAd&#039;));&lt;br /&gt;
			usertalkpage.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			switch (Twinkle.getPref(&#039;xfdWatchUser&#039;)) {&lt;br /&gt;
				case &#039;yes&#039;:&lt;br /&gt;
					usertalkpage.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case &#039;no&#039;:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			usertalkpage.setFollowRedirect(true);&lt;br /&gt;
			usertalkpage.append();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.xfd.callback.evaluate = function(e) {&lt;br /&gt;
	mw.config.set(&#039;wgPageName&#039;, mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;));  // for queen/king/whatever and country!&lt;br /&gt;
&lt;br /&gt;
	var type =  e.target.category.value;&lt;br /&gt;
	var usertalk = e.target.notify.checked;&lt;br /&gt;
	var reason = e.target.xfdreason.value;&lt;br /&gt;
	var xfdcat, puf, noinclude, tfdinline, notifyuserspace;&lt;br /&gt;
	if( type in {&#039;afd&#039;:&#039;&#039;,&#039;cfd&#039;:&#039;&#039;} ) {&lt;br /&gt;
		xfdcat = e.target.xfdcat.value;&lt;br /&gt;
	}&lt;br /&gt;
	if( type === &#039;ffd&#039; ) {&lt;br /&gt;
		puf = e.target.puf.checked;&lt;br /&gt;
	}&lt;br /&gt;
	if( type in {&#039;afd&#039;:&#039;&#039;,&#039;mfd&#039;:&#039;&#039;} ) {&lt;br /&gt;
		noinclude = e.target.noinclude.checked;&lt;br /&gt;
	}&lt;br /&gt;
	if( type === &#039;tfd&#039; ) {&lt;br /&gt;
		tfdinline = e.target.tfdinline.checked;&lt;br /&gt;
	}&lt;br /&gt;
	if( type === &#039;mfd&#039; ) {&lt;br /&gt;
		notifyuserspace = e.target.notifyuserspace &amp;amp;&amp;amp; e.target.notifyuserspace.checked;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	SimpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Status.init( e.target );&lt;br /&gt;
&lt;br /&gt;
	if( !type ) {&lt;br /&gt;
		Status.error( &#039;Error&#039;, &#039;no action given&#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var query, wikipedia_page, wikipedia_api, logpage, params;&lt;br /&gt;
	var date = new Date();&lt;br /&gt;
	switch( type ) {&lt;br /&gt;
&lt;br /&gt;
	case &#039;afd&#039;: // AFD&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;list&#039;: &#039;allpages&#039;,&lt;br /&gt;
			&#039;apprefix&#039;: &#039;Articles for deletion/&#039; + mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
			&#039;apnamespace&#039;: 4,&lt;br /&gt;
			&#039;apfilterredir&#039;: &#039;nonredirects&#039;,&lt;br /&gt;
			&#039;aplimit&#039;: userIsInGroup( &#039;sysop&#039; ) ? 5000 : 500&lt;br /&gt;
		};&lt;br /&gt;
		wikipedia_api = new Wikipedia.api( &#039;Tagging article with deletion tag&#039;, query, Twinkle.xfd.callbacks.afd.main );&lt;br /&gt;
		wikipedia_api.params = { usertalk:usertalk, reason:reason, noinclude:noinclude, xfdcat:xfdcat };&lt;br /&gt;
		wikipedia_api.post();&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
	case &#039;tfd&#039;: // TFD&lt;br /&gt;
		Wikipedia.addCheckpoint();&lt;br /&gt;
&lt;br /&gt;
		logpage = &#039;Wikipedia:Templates for discussion/Log/&#039; + date.getUTCFullYear() + &#039; &#039; + date.getUTCMonthName() + &#039; &#039; + date.getUTCDate();&lt;br /&gt;
&lt;br /&gt;
		// Tagging template&lt;br /&gt;
		wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Tagging template with deletion tag&amp;quot;);&lt;br /&gt;
		wikipedia_page.setFollowRedirect(true);  // should never be needed, but if the page is moved, we would want to follow the redirect&lt;br /&gt;
		wikipedia_page.setCallbackParameters({ tfdinline: tfdinline, logpage: logpage });&lt;br /&gt;
		wikipedia_page.load(Twinkle.xfd.callbacks.tfd.taggingTemplate);&lt;br /&gt;
&lt;br /&gt;
		// Updating data for the action completed event&lt;br /&gt;
		Wikipedia.actionCompleted.redirect = logpage;&lt;br /&gt;
		Wikipedia.actionCompleted.notice = &amp;quot;Nomination completed, now redirecting to today&#039;s log&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		// Adding discussion&lt;br /&gt;
		wikipedia_page = new Wikipedia.page(logpage, &amp;quot;Adding discussion to today&#039;s log&amp;quot;);&lt;br /&gt;
		wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
		wikipedia_page.setCallbackParameters({ reason: reason });&lt;br /&gt;
		wikipedia_page.load(Twinkle.xfd.callbacks.tfd.todaysList);&lt;br /&gt;
&lt;br /&gt;
		// Notification to first contributor&lt;br /&gt;
		if (usertalk) {&lt;br /&gt;
			var thispage = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
			thispage.lookupCreator(Twinkle.xfd.callbacks.tfd.userNotification);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		Wikipedia.removeCheckpoint();&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
	case &#039;mfd&#039;: // MFD&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;list&#039;: &#039;allpages&#039;,&lt;br /&gt;
			&#039;apprefix&#039;: &#039;Miscellany for deletion/&#039; + mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
			&#039;apnamespace&#039;: 4,&lt;br /&gt;
			&#039;apfilterredir&#039;: &#039;nonredirects&#039;,&lt;br /&gt;
			&#039;aplimit&#039;: userIsInGroup( &#039;sysop&#039; ) ? 5000 : 500&lt;br /&gt;
		};&lt;br /&gt;
		wikipedia_api = new Wikipedia.api( &amp;quot;Looking for prior nominations of this page&amp;quot;, query, Twinkle.xfd.callbacks.mfd.main );&lt;br /&gt;
		wikipedia_api.params = { usertalk: usertalk, notifyuserspace: notifyuserspace, reason: reason, noinclude: noinclude, xfdcat: xfdcat };&lt;br /&gt;
		wikipedia_api.post();&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
	case &#039;ffd&#039;: // FFD&lt;br /&gt;
		var dateString = date.getUTCFullYear() + &#039; &#039; + date.getUTCMonthName() + &#039; &#039; + date.getUTCDate();&lt;br /&gt;
		logpage = &#039;Wikipedia:Files for deletion/&#039; + dateString;&lt;br /&gt;
		params = { usertalk: usertalk, reason: reason, date: dateString, logpage: logpage };&lt;br /&gt;
&lt;br /&gt;
		Wikipedia.addCheckpoint();&lt;br /&gt;
		if( puf ) {&lt;br /&gt;
			params.logpage = logpage = &#039;Wikipedia:Possibly unfree files/&#039; + dateString;&lt;br /&gt;
&lt;br /&gt;
			// Updating data for the action completed event&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = logpage;&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Nomination completed, now redirecting to today&#039;s list&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			// Tagging file&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Tagging file with PUF tag&amp;quot;);&lt;br /&gt;
			wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.puf.taggingImage);&lt;br /&gt;
&lt;br /&gt;
			// Adding discussion&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(params.logpage, &amp;quot;Adding discussion to today&#039;s list&amp;quot;);&lt;br /&gt;
			wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.puf.todaysList);&lt;br /&gt;
&lt;br /&gt;
			// Notification to first contributor&lt;br /&gt;
			if (usertalk) {&lt;br /&gt;
				wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
				wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
				wikipedia_page.lookupCreator(Twinkle.xfd.callbacks.puf.userNotification);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			Wikipedia.removeCheckpoint();&lt;br /&gt;
&lt;br /&gt;
		} else {&lt;br /&gt;
			// Updating data for the action completed event&lt;br /&gt;
			Wikipedia.actionCompleted.redirect = logpage;&lt;br /&gt;
			Wikipedia.actionCompleted.notice = &amp;quot;Nomination completed, now redirecting to the discussion page&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			// Tagging file&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Adding deletion tag to file page&amp;quot;);&lt;br /&gt;
			wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.xfd.callbacks.ffd.taggingImage);&lt;br /&gt;
&lt;br /&gt;
			// Contributor specific edits&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.lookupCreator(Twinkle.xfd.callbacks.ffd.main);&lt;br /&gt;
		}&lt;br /&gt;
		Wikipedia.removeCheckpoint();&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
	case &#039;cfd&#039;:&lt;br /&gt;
		Wikipedia.addCheckpoint();&lt;br /&gt;
&lt;br /&gt;
		var target;&lt;br /&gt;
		if( e.target.xfdtarget ) {&lt;br /&gt;
			target = e.target.xfdtarget.value.replace( /^\:?Category\:/, &#039;&#039; );&lt;br /&gt;
		} else {&lt;br /&gt;
			target = &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		logpage = &#039;Wikipedia:Categories for discussion/Log/&#039; + date.getUTCFullYear() + &#039; &#039; + date.getUTCMonthName() + &#039; &#039; + date.getUTCDate();&lt;br /&gt;
&lt;br /&gt;
		params = { reason: reason, xfdcat: xfdcat, target: target, logpage: logpage };&lt;br /&gt;
&lt;br /&gt;
		// Updating data for the action completed event&lt;br /&gt;
		Wikipedia.actionCompleted.redirect = logpage;&lt;br /&gt;
		Wikipedia.actionCompleted.notice = &amp;quot;Nomination completed, now redirecting to today&#039;s log&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		// Tagging category&lt;br /&gt;
		wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;), &amp;quot;Tagging category with deletion tag&amp;quot;);&lt;br /&gt;
		wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
		wikipedia_page.load(Twinkle.xfd.callbacks.cfd.taggingCategory);&lt;br /&gt;
&lt;br /&gt;
		// Adding discussion to list&lt;br /&gt;
		wikipedia_page = new Wikipedia.page(logpage, &amp;quot;Adding discussion to today&#039;s list&amp;quot;);&lt;br /&gt;
		//wikipedia_page.setPageSection(2);&lt;br /&gt;
			// pageSection has been disabled - the API seems to throw up with nonexistent edit conflicts&lt;br /&gt;
			// it can be turned on again once the problem is fixed, to save bandwidth&lt;br /&gt;
		//wikipedia_page.setFollowRedirect(true);&lt;br /&gt;
		wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
		wikipedia_page.load(Twinkle.xfd.callbacks.cfd.todaysList);&lt;br /&gt;
&lt;br /&gt;
		// Notification to first contributor&lt;br /&gt;
		if (usertalk) {&lt;br /&gt;
			wikipedia_page = new Wikipedia.page(mw.config.get(&#039;wgPageName&#039;));&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.lookupCreator(Twinkle.xfd.callbacks.cfd.userNotification);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		Wikipedia.removeCheckpoint();&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
	case &#039;rfd&#039;:&lt;br /&gt;
		// Find current target of redirect&lt;br /&gt;
		query = {&lt;br /&gt;
			&#039;action&#039;: &#039;query&#039;,&lt;br /&gt;
			&#039;titles&#039;: mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
			&#039;redirects&#039;: true&lt;br /&gt;
		};&lt;br /&gt;
		wikipedia_api = new Wikipedia.api( &amp;quot;Finding target of redirect&amp;quot;, query, Twinkle.xfd.callbacks.rfd.main );&lt;br /&gt;
		wikipedia_api.params = { usertalk: usertalk, reason: reason };&lt;br /&gt;
		wikipedia_api.post();&lt;br /&gt;
		break;&lt;br /&gt;
	default:&lt;br /&gt;
		alert(&amp;quot;twinklexfd: unknown XFD discussion venue&amp;quot;);&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * General initialization code&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
var scriptpathbefore = mw.config.get(&#039;wgServer&#039;) + mw.config.get(&#039;wgScript&#039;) + &amp;quot;?title=&amp;quot;;&lt;br /&gt;
var scriptpathafter = &amp;quot;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;happy=yes&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// retrieve the user&#039;s Twinkle preferences&lt;br /&gt;
$.ajax({&lt;br /&gt;
	url: scriptpathbefore + &amp;quot;User:&amp;quot; + encodeURIComponent(mw.config.get(&#039;wgUserName&#039;)) + &amp;quot;/twinkleoptions.js&amp;quot; + scriptpathafter,&lt;br /&gt;
	dataType: &#039;text&#039;,&lt;br /&gt;
	error: function(){ mw.notify(&amp;quot;Could not load twinkleoptions.js&amp;quot;); },&lt;br /&gt;
	success: function(optionsText){&lt;br /&gt;
&lt;br /&gt;
		//quick pass if user has no options&lt;br /&gt;
		if ( optionsText === &amp;quot;/* Empty */&amp;quot; ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//twinkle options are basically a JSON object with some comments. Strip those:&lt;br /&gt;
		optionsText = optionsText.replace(/(?:^(?:\/\/[^\n]*\n)*\n*|(?:\/\/[^\n]*(?:\n|$))*$)/g, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		//first version of options had some boilerplate code to make it eval-able -- strip that too. This part may become obsolete down the line.&lt;br /&gt;
		if (optionsText.lastIndexOf(&amp;quot;window.Twinkle.prefs = &amp;quot;, 0) === 0) {&lt;br /&gt;
			optionsText = optionsText.replace(/(?:^window.Twinkle.prefs = |;\n*$)/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			var options = JSON.parse(optionsText);&lt;br /&gt;
&lt;br /&gt;
			// Assuming that our options evolve, we will want to transform older versions:&lt;br /&gt;
			//if (options.optionsVersion === undefined) {&lt;br /&gt;
			// ...&lt;br /&gt;
			// options.optionsVersion = 1;&lt;br /&gt;
			//}&lt;br /&gt;
			//if (options.optionsVersion === 1) {&lt;br /&gt;
			// ...&lt;br /&gt;
			// options.optionsVersion = 2;&lt;br /&gt;
			//}&lt;br /&gt;
			// At the same time, twinkleconfig.js needs to be adapted to write a higher version number into the options.&lt;br /&gt;
&lt;br /&gt;
			Twinkle.prefs = options;&lt;br /&gt;
		}&lt;br /&gt;
		catch (e) {&lt;br /&gt;
			mw.notify(&amp;quot;Could not parse twinkleoptions.js&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	complete: function(){&lt;br /&gt;
		$(document).ready(Twinkle.load);&lt;br /&gt;
	}&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Developers: you can import custom Twinkle modules here&lt;br /&gt;
// for example, mw.loader.load(scriptpathbefore + &amp;quot;User:UncleDouggie/morebits-test.js&amp;quot; + scriptpathafter);&lt;br /&gt;
&lt;br /&gt;
Twinkle.load = function(){&lt;br /&gt;
	// Don&#039;t activate on special pages other than &amp;quot;Contributions&amp;quot; so that they load faster, especially the watchlist.&lt;br /&gt;
	// Also, Twinkle is incompatible with Internet Explorer versions 8 or lower, so don&#039;t load there either.&lt;br /&gt;
	if ( (mw.config.get(&#039;wgNamespaceNumber&#039;) === -1 &amp;amp;&amp;amp; mw.config.get(&#039;wgTitle&#039;) !== &amp;quot;Contributions&amp;quot;) || &lt;br /&gt;
		($.client.profile().name === &#039;msie&#039; &amp;amp;&amp;amp; $.client.profile().versionBase &amp;lt; 9) ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// load the modules in the order that the tabs should appears&lt;br /&gt;
	// user/user talk-related&lt;br /&gt;
	Twinkle.arv();&lt;br /&gt;
	Twinkle.warn();&lt;br /&gt;
	Twinkle.welcome();&lt;br /&gt;
	Twinkle.shared();&lt;br /&gt;
	Twinkle.talkback();&lt;br /&gt;
	// deletion&lt;br /&gt;
	Twinkle.speedy();&lt;br /&gt;
	Twinkle.prod();&lt;br /&gt;
	Twinkle.xfd();&lt;br /&gt;
	Twinkle.image();&lt;br /&gt;
	// maintenance&lt;br /&gt;
	Twinkle.protect();&lt;br /&gt;
	Twinkle.tag();&lt;br /&gt;
	// misc. ones last&lt;br /&gt;
	Twinkle.diff();&lt;br /&gt;
	Twinkle.unlink();&lt;br /&gt;
	Twinkle.config.init();&lt;br /&gt;
	Twinkle.fluff.init();&lt;br /&gt;
	if (userIsInGroup(&#039;sysop&#039;)) {&lt;br /&gt;
		//Twinkle.closer();  -- disabled for the moment, as it is disliked among Twinkle users -- TTO 2011-05-30&lt;br /&gt;
		Twinkle.delimages();&lt;br /&gt;
		Twinkle.deprod();&lt;br /&gt;
		Twinkle.batchdelete();&lt;br /&gt;
		Twinkle.batchprotect();&lt;br /&gt;
		Twinkle.imagetraverse();&lt;br /&gt;
		Twinkle.batchundelete();&lt;br /&gt;
	}&lt;br /&gt;
	// run the initialization callbacks for any custom modules&lt;br /&gt;
	$(Twinkle.initCallbacks).each(function(k, v) { v(); });&lt;br /&gt;
	Twinkle.addInitCallback = function(func) { func(); };&lt;br /&gt;
&lt;br /&gt;
	// increates text size in Twinkle dialogs bigger, if so configured&lt;br /&gt;
	if (Twinkle.getPref(&amp;quot;dialogLargeFont&amp;quot;)) {&lt;br /&gt;
		mw.util.addCSS(&amp;quot;.morebits-dialog-content, .morebits-dialog-footerlinks { font-size: 100% !important; } &amp;quot; +&lt;br /&gt;
			&amp;quot;.morebits-dialog input, .morebits-dialog select, .morebits-dialog-content button { font-size: inherit !important; }&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E4%BD%BF%E7%94%A8%E8%80%85%E8%A8%8E%E8%AB%96:Li_Jiahao&amp;diff=29141</id>
		<title>使用者討論:Li Jiahao</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E4%BD%BF%E7%94%A8%E8%80%85%E8%A8%8E%E8%AB%96:Li_Jiahao&amp;diff=29141"/>
		<updated>2024-08-04T17:03:50Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2024年7月 ==&lt;br /&gt;
&lt;br /&gt;
請勿移除快速刪除模板，若您對快速刪除請求有任何意見，請依照模板上給予之指引操作。 [[使用者:LarryChou|LarryChou]]（[[使用者討論:LarryChou|留言]]） 2024年7月31日 (三) 17:28 (CST)&lt;br /&gt;
&lt;br /&gt;
:敬告使用者@[[使用者:LarryChou|LarryChou]]，對於你在我大卡爾帝國維基內容之行為，我方表示嚴正喝斥，如對我維基內容有任何意見，請直接完整說明你的問題。 [[使用者:Li Jiahao|Li Jiahao]]（[[使用者討論:Li Jiahao|留言]]） 2024年7月31日 (三) 21:43 (CST)&lt;br /&gt;
::您的編輯編輯條目無實質內容，依規可提報快速刪除，如對此要求有疑義，請使用&amp;lt;nowiki&amp;gt;{{hang on}}&amp;lt;/nowiki&amp;gt;表示意見，而非刪除。請注意，微國家百科並非不經篩選的資訊蒐集地，也不是您的雲端硬碟，請勿將微國家百科做為您儲存決議之地點。 [[使用者:LarryChou|LarryChou]]（[[使用者討論:LarryChou|留言]]） 2024年8月1日 (四) 12:25 (CST)&lt;br /&gt;
:::還有我想模板標示得很清楚&lt;br /&gt;
:::「請勿移除本模板」應該是淺顯易懂的中文。&lt;br /&gt;
:::所以請勿再移除模板，否則我將向管理員通報您的行徑，並且您有可能遭受封禁處理。 [[使用者:LarryChou|LarryChou]]（[[使用者討論:LarryChou|留言]]） 2024年8月1日 (四) 12:27 (CST)&lt;br /&gt;
::還有請注意，您並不擁有您所編輯的任何條目之所有權，所有條目之所有權歸於微國家百科營運方，並且您的百科內容也必須符合[[MP:5|五大觀念]]之規定。您的嚴正喝斥並無任何意義，請依據百科規則修正您的條目，否則任何一位編者都有權利修改、甚至提報刪除您編輯的條目的權利。 [[使用者:LarryChou|LarryChou]]（[[使用者討論:LarryChou|留言]]） 2024年8月1日 (四) 12:30 (CST)&lt;br /&gt;
&lt;br /&gt;
==[[:大卡爾帝國立法院歷史決議]]頁面存廢討論通知==&lt;br /&gt;
[[File:Icono_aviso_borrar.svg|left|40px|link=]]您好，您先前創建或編輯的頁面「[[:大卡爾帝國立法院歷史決議]]」已被提出[[微國家百科:頁面存廢討論|存廢討論]]，&#039;&#039;&#039;[[微國家百科:頁面存廢討論/記錄/2024/08/01#大卡爾帝國立法院歷史決議|正在討論該頁面的存廢]]&#039;&#039;&#039;。&amp;lt;br/&amp;gt;微國家百科非常歡迎您的編輯，但請先看看[[Help:編輯頁面|編輯幫助]]和[[微國家百科不是什麼]]，以免犯了[[微國家百科:避免常見錯誤|常見的錯誤]]。&amp;lt;br/&amp;gt;&#039;&#039;&#039;請不要自行移除頁面存廢模板&#039;&#039;&#039;，討論是因为有編者認為頁面不適合微國家百科。請至[[微國家百科:頁面存廢討論/記錄/2024/08/01#大卡爾帝國立法院歷史決議|参與頁面存廢討論]]，您亦可以與提刪的百科人進行溝通。在討論期間歡迎繼續完善原先的頁面，多謝合作！&amp;lt;br/&amp;gt;&amp;lt;small&amp;gt;幫助：[[微國家百科:互助客棧|互助客棧]]、[[微國家百科:刪除指導|刪除指導]]、[[微國家百科:存廢覆核請求|存廢覆核請求]]、&amp;lt;/small&amp;gt; [[使用者:LarryChou|LarryChou]]（[[使用者討論:LarryChou|留言]]） 2024年8月1日 (四) 18:41 (CST)&lt;br /&gt;
&lt;br /&gt;
:您到底有何高見？您可以說明清楚頁面到底有什麼問題，不要只會說頁面不符合，到底哪裡不符合，說清楚講明白。 [[使用者:Li Jiahao|Li Jiahao]]（[[使用者討論:Li Jiahao|留言]]） 2024年8月1日 (四) 19:01 (CST)&lt;br /&gt;
::已於[[微國家百科:頁面存廢討論/記錄/2024/08/01|存廢討論]]中說明。 [[使用者:LarryChou|LarryChou]]（[[使用者討論:LarryChou|留言]]） 2024年8月1日 (四) 19:13 (CST)&lt;br /&gt;
&lt;br /&gt;
== 管理員：請勿刪除快速刪除模板 ==&lt;br /&gt;
&lt;br /&gt;
敬告閣下：&amp;lt;br&amp;gt;&lt;br /&gt;
快速刪除模板為由使用者提出，供管理員審核指定頁面是否不符合本百科之[[微國家百科:五大觀念|五大觀念]]及符合[[微國家百科:快速刪除|快速刪除]]方針所要求，供管理員刪除頁面的理由。是以請配合百科工作，勿妨礙百科日常運作。&amp;lt;br&amp;gt;&lt;br /&gt;
[[使用者:Admin|Admin]]（[[使用者討論:Admin|留言]]） 2024年8月1日 (四) 18:47 (CST)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut&amp;diff=29140</id>
		<title>模組:Shortcut</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut&amp;diff=29140"/>
		<updated>2024-08-04T17:01:40Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{shortcut}}.&lt;br /&gt;
&lt;br /&gt;
-- Set constants&lt;br /&gt;
local CONFIG_MODULE = &#039;Module:Shortcut/config&#039;&lt;br /&gt;
&lt;br /&gt;
-- Load required modules&lt;br /&gt;
local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p._getshortname(frame)&lt;br /&gt;
	return frame:expandTemplate{title = &amp;quot;Lan&amp;quot;,args = {[&amp;quot;zh-hans&amp;quot;]=&amp;quot;快捷方式&amp;quot;,[&amp;quot;zh-hant&amp;quot;]=&amp;quot;捷徑&amp;quot;}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getshortlink(frame)&lt;br /&gt;
	return &amp;quot;[[Wikipedia:捷徑|&amp;quot; .. p._getshortname(frame) .. &amp;quot;]]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getshortlink_policy(frame)&lt;br /&gt;
	return &amp;quot;[[Wikipedia:捷徑|方針&amp;quot; .. p._getshortname(frame) .. &amp;quot;]]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function message(msg, ...)&lt;br /&gt;
	return mw.message.newRawMessage(msg, ...):plain()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat)&lt;br /&gt;
	return string.format(&#039;[[%s:%s]]&#039;, mw.site.namespaces[14].name, cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local isCategorized = yesno(options.category) ~= false&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		listItems[i] = frame:expandTemplate{&lt;br /&gt;
			title = &#039;No redirect&#039;,&lt;br /&gt;
			args = {shortcut}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, options.msg)&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;Shortcut/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			shortcutHeading = message(p.getshortlink(frame), nShortcuts)&lt;br /&gt;
			shortcutHeading = frame:preprocess(shortcutHeading)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(options.policy) then&lt;br /&gt;
	    shortcutHeading = p.getshortlink_policy(frame)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutboxplain plainlist noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if options.float == &#039;left&#039; then&lt;br /&gt;
		shortcutList:addClass(&#039;module-shortcutboxplain-left&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&#039;ul&#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&#039;li&#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Shortcut&#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._main(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._ombx(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local isCategorized = yesno(options.category) ~= false&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		listItems[i] = frame:expandTemplate{&lt;br /&gt;
			title = &#039;No redirect&#039;,&lt;br /&gt;
			args = {shortcut}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, options.msg)&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;Shortcut/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			shortcutHeading = message(p.getshortlink(frame), nShortcuts)&lt;br /&gt;
			shortcutHeading = frame:preprocess(shortcutHeading)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-omboxshortcutplain plainlist noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&#039;ul&#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&#039;li&#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ombox(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Shortcut&#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._ombx(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._template(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local isCategorized = yesno(options.category) ~= false&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		listItems[i] = &#039;&amp;amp;#123;&amp;amp;#123;&#039;&lt;br /&gt;
	    	    .. frame:expandTemplate{&lt;br /&gt;
		    	title = &#039;Template_shortcut/link&#039;,&lt;br /&gt;
		    	args = {shortcut}&lt;br /&gt;
		    	}..&#039;&amp;amp;#125;&amp;amp;#125;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, options.msg)&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;Shortcut/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, &#039;Template:&#039;..anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			shortcutHeading = message(cfg[&#039;shortcut-heading&#039;], nShortcuts)&lt;br /&gt;
			shortcutHeading = shortcutHeading&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutboxplain plainlist noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if options.float == &#039;left&#039; then&lt;br /&gt;
		shortcutList:addClass(&#039;module-shortcutboxplain-left&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&#039;ul&#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&#039;li&#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.template(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Shortcut&#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._template(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._ombx_template(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local isCategorized = yesno(options.category) ~= false&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		listItems[i] = &#039;&amp;amp;#123;&amp;amp;#123;&#039;&lt;br /&gt;
	    	    .. frame:expandTemplate{&lt;br /&gt;
		    	title = &#039;Template_shortcut/link&#039;,&lt;br /&gt;
		    	args = {shortcut}&lt;br /&gt;
		    	}..&#039;&amp;amp;#125;&amp;amp;#125;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, options.msg)&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;Shortcut/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, &#039;Template:&#039;..anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			shortcutHeading = message(p.getshortlink(frame), nShortcuts)&lt;br /&gt;
			shortcutHeading = frame:preprocess(shortcutHeading)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-omboxshortcutplain plainlist noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&#039;ul&#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&#039;li&#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ombox_template(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Shortcut&#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._ombx_template(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut/config&amp;diff=29139</id>
		<title>模組:Shortcut/config</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut/config&amp;diff=29139"/>
		<updated>2024-08-04T16:57:35Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module holds configuration data for [[Module:Shortcut]].&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
&lt;br /&gt;
-- The heading at the top of the shortcut box. It accepts the following parameter:&lt;br /&gt;
-- $1 - the total number of shortcuts. (required)&lt;br /&gt;
[&#039;shortcut-heading&#039;] = &#039;捷徑&#039;,&lt;br /&gt;
&lt;br /&gt;
-- The error message to display when a shortcut is invalid (is not a string, or&lt;br /&gt;
-- is the blank string). It accepts the following parameter:&lt;br /&gt;
-- $1 - the number of the shortcut in the argument list. (required)&lt;br /&gt;
[&#039;invalid-shortcut-error&#039;] = &#039;捷徑「#$1」無效（捷徑必須為&#039; ..&lt;br /&gt;
	&#039;字串且長度至少為1個字元)[[Category:需要修正微國家百科捷徑框參數的頁面|{{PAGENAME}}]]&#039;,&lt;br /&gt;
&lt;br /&gt;
-- The error message to display when no shortcuts or other displayable content&lt;br /&gt;
-- were specified. (required)&lt;br /&gt;
[&#039;no-content-error&#039;] = &#039;錯誤：沒有指定捷徑名稱並且參數&amp;lt;code&amp;gt;msg&amp;lt;/code&amp;gt;沒有定義。[[Category:需要修正微國家百科捷徑框參數的頁面|{{PAGENAME}}]]&#039;,&lt;br /&gt;
&lt;br /&gt;
-- A category to add when the no-content-error message is displayed. (optional)&lt;br /&gt;
--[[&lt;br /&gt;
我們並沒有個分類&lt;br /&gt;
[&#039;no-content-error-category&#039;] = &#039;Shortcut 模板中缺乏參數&#039;,&lt;br /&gt;
]]--&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut/styles.css&amp;diff=29138</id>
		<title>模組:Shortcut/styles.css</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut/styles.css&amp;diff=29138"/>
		<updated>2024-08-04T16:56:11Z</updated>

		<summary type="html">&lt;p&gt;Admin：​建立內容為「.module-shortcutboxplain { 	float: right; 	margin: 0 0 0 1em; 	border: 1px solid #aaa; 	background: #fff; 	padding: 0.3em 0.6em 0.2em 0.6em; 	text-align: center; 	font-size: 85%; }  .module-shortcutboxleft { 	float: left; 	margin: 0 1em 0 0; }  .module-shortcutlist { 	display: inline-block; 	border-bottom: 1px solid #aaa; 	margin-bottom: 0.2em; }  .module-shortcutboxplain ul { 	font-weight: bold; }  .module-shortcutanchordiv { 	position: relative; 	top: -3em…」的新頁面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.module-shortcutboxplain {&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin: 0 0 0 1em;&lt;br /&gt;
	border: 1px solid #aaa;&lt;br /&gt;
	background: #fff;&lt;br /&gt;
	padding: 0.3em 0.6em 0.2em 0.6em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	font-size: 85%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxleft {&lt;br /&gt;
	float: left;&lt;br /&gt;
	margin: 0 1em 0 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutlist {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	border-bottom: 1px solid #aaa;&lt;br /&gt;
	margin-bottom: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain ul {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutanchordiv {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	top: -3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
li .module-shortcutanchordiv {&lt;br /&gt;
	float: right; /* IE/Edge in list items */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-imageright .module-shortcutboxplain {&lt;br /&gt;
	padding: 0.4em 1em 0.4em 1em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut&amp;diff=29137</id>
		<title>模組:Shortcut</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Shortcut&amp;diff=29137"/>
		<updated>2024-08-04T16:54:55Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{shortcut}}.&lt;br /&gt;
&lt;br /&gt;
-- Set constants&lt;br /&gt;
local CONFIG_MODULE = &#039;Module:Shortcut/config&#039;&lt;br /&gt;
&lt;br /&gt;
-- Load required modules&lt;br /&gt;
local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function message(msg, ...)&lt;br /&gt;
	return mw.message.newRawMessage(msg, ...):plain()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat)&lt;br /&gt;
	return string.format(&#039;[[%s:%s]]&#039;, mw.site.namespaces[14].name, cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local templateMode = options.template and yesno(options.template)&lt;br /&gt;
	local redirectMode = options.redirect and yesno(options.redirect)&lt;br /&gt;
	local isCategorized = not options.category or yesno(options.category) ~= false&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local templatePath, prefix&lt;br /&gt;
		if templateMode then&lt;br /&gt;
			-- Namespace detection&lt;br /&gt;
			local titleObj = mw.title.new(shortcut, 10)&lt;br /&gt;
			if titleObj.namespace == 10 then&lt;br /&gt;
				templatePath = titleObj.fullText&lt;br /&gt;
			else&lt;br /&gt;
				templatePath = shortcut&lt;br /&gt;
			end&lt;br /&gt;
			prefix = options[&#039;pre&#039; .. i] or options.pre or &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if options.target and yesno(options.target) then&lt;br /&gt;
			listItems[i] = templateMode&lt;br /&gt;
				and string.format(&amp;quot;&amp;amp;#123;&amp;amp;#123;%s[[%s|%s]]&amp;amp;#125;&amp;amp;#125;&amp;quot;, prefix, templatePath, shortcut)&lt;br /&gt;
				or string.format(&amp;quot;[[%s]]&amp;quot;, shortcut)&lt;br /&gt;
		else&lt;br /&gt;
			listItems[i] = frame:expandTemplate{&lt;br /&gt;
				title = &#039;No redirect&#039;,&lt;br /&gt;
				args = templateMode and {templatePath, shortcut} or {shortcut, shortcut}&lt;br /&gt;
			}&lt;br /&gt;
			if templateMode then&lt;br /&gt;
				listItems[i] = string.format(&amp;quot;&amp;amp;#123;&amp;amp;#123;%s%s&amp;amp;#125;&amp;amp;#125;&amp;quot;, prefix, listItems[i])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, options.msg)&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;Module:Shortcut/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			local headingMsg = options[&#039;shortcut-heading&#039;] or&lt;br /&gt;
				redirectMode and cfg[&#039;redirect-heading&#039;] or&lt;br /&gt;
				cfg[&#039;shortcut-heading&#039;]&lt;br /&gt;
			shortcutHeading = message(headingMsg, nShortcuts)&lt;br /&gt;
			shortcutHeading = frame:preprocess(shortcutHeading)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutboxplain noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if options.float and options.float:lower() == &#039;left&#039; then&lt;br /&gt;
		shortcutList:addClass(&#039;module-shortcutboxleft&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if options.clear and options.clear ~= &#039;&#039; then&lt;br /&gt;
		shortcutList:css(&#039;clear&#039;, options.clear)&lt;br /&gt;
	end&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local ubl = require(&#039;Module:List&#039;).unbulleted(listItems)&lt;br /&gt;
	shortcutList:wikitext(ubl)&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._main(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29136</id>
		<title>模板:Shortcut/styles.css</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29136"/>
		<updated>2024-08-04T16:49:03Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.module-shortcutboxplain {&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin: 0 0 0 1em;&lt;br /&gt;
	border: 1px solid #aaa;&lt;br /&gt;
	background: #fff;&lt;br /&gt;
	padding: 0.3em 0.6em 0.2em 0.6em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	font-size: 85%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxleft {&lt;br /&gt;
	float: left;&lt;br /&gt;
	margin: 0 1em 0 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutlist {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	border-bottom: 1px solid #aaa;&lt;br /&gt;
	margin-bottom: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain ul {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutanchordiv {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	top: -3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
li .module-shortcutanchordiv {&lt;br /&gt;
	float: right; /* IE/Edge in list items */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-imageright .module-shortcutboxplain {&lt;br /&gt;
	padding: 0.4em 1em 0.4em 1em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29134</id>
		<title>模板:Shortcut/styles.css</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29134"/>
		<updated>2024-08-04T16:44:52Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.shortcutbox {&lt;br /&gt;
	float:right;&lt;br /&gt;
	border:1px solid #aaa;&lt;br /&gt;
	background:#fff;&lt;br /&gt;
	margin:0 0 0 1em;&lt;br /&gt;
	padding:.3em 0 .2em .3em;&lt;br /&gt;
	text-align:center;&lt;br /&gt;
	font-size:85%;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutbox-left {&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutbox-ombox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	border-left: 1px solid #aaa;&lt;br /&gt;
	padding: .4em 0em .4em 1em;&lt;br /&gt;
	text-align: center; &lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: smaller;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutlist {&lt;br /&gt;
	display:inline-block;&lt;br /&gt;
	border-bottom:1px solid #aaa;&lt;br /&gt;
	margin-bottom:.2em;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcut-anchordiv {&lt;br /&gt;
	position:relative;&lt;br /&gt;
	top:-3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain {&lt;br /&gt;
	float:right;&lt;br /&gt;
	border:1px solid #aaa;&lt;br /&gt;
	background:#fff;&lt;br /&gt;
	margin:0 0 0 1em;&lt;br /&gt;
	padding:.3em 0 .2em .6em;&lt;br /&gt;
	text-align:center;&lt;br /&gt;
	font-size:85%;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain-left {&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-omboxshortcutplain {&lt;br /&gt;
	float: right;&lt;br /&gt;
	border-left: 1px solid #aaa;&lt;br /&gt;
	padding: .4em 0em .4em 1em;&lt;br /&gt;
	text-align: center; &lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: smaller;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutlist {&lt;br /&gt;
	display:inline-block;&lt;br /&gt;
	border-bottom:1px solid #aaa;&lt;br /&gt;
	margin-bottom:.2em;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutanchordiv {&lt;br /&gt;
	position:relative;&lt;br /&gt;
	top:-3em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29133</id>
		<title>模板:Shortcut/styles.css</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29133"/>
		<updated>2024-08-04T16:43:46Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.shortcutbox {&lt;br /&gt;
	float:right;&lt;br /&gt;
	border:1px solid #aaa;&lt;br /&gt;
	background:#fff;&lt;br /&gt;
	margin:0 0 0 1em;&lt;br /&gt;
	padding:.3em 0 .2em .3em;&lt;br /&gt;
	text-align:center;&lt;br /&gt;
	font-size:85%;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutbox-left {&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutbox-ombox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	border-left: 1px solid #aaa;&lt;br /&gt;
	padding: .4em 0em .4em 1em;&lt;br /&gt;
	text-align: center; &lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: smaller;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutlist {&lt;br /&gt;
	display:inline-block;&lt;br /&gt;
	border-bottom:1px solid #aaa;&lt;br /&gt;
	margin-bottom:.2em;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcut-anchordiv {&lt;br /&gt;
	position:relative;&lt;br /&gt;
	top:-3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain {&lt;br /&gt;
	float:right;&lt;br /&gt;
	border:1px solid #aaa;&lt;br /&gt;
	background:#fff;&lt;br /&gt;
	margin:0 0 0 1em;&lt;br /&gt;
	padding:.3em .6em .2em .6em;&lt;br /&gt;
	text-align:center;&lt;br /&gt;
	font-size:85%;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain-left {&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-omboxshortcutplain {&lt;br /&gt;
	float: right;&lt;br /&gt;
	border-left: 1px solid #aaa;&lt;br /&gt;
	padding: .4em 0em .4em 1em;&lt;br /&gt;
	text-align: center; &lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: smaller;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutlist {&lt;br /&gt;
	display:inline-block;&lt;br /&gt;
	border-bottom:1px solid #aaa;&lt;br /&gt;
	margin-bottom:.2em;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutanchordiv {&lt;br /&gt;
	position:relative;&lt;br /&gt;
	top:-3em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=MP:SDEL&amp;diff=29132</id>
		<title>MP:SDEL</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=MP:SDEL&amp;diff=29132"/>
		<updated>2024-08-04T16:43:36Z</updated>

		<summary type="html">&lt;p&gt;Admin：​Admin已移動頁面WP:SDEL至MP:SDEL，不留重新導向：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[微國家百科:快速刪除方針]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E5%90%88%E4%BD%B5%E8%AB%8B%E6%B1%82/header&amp;diff=29131</id>
		<title>微國家百科:合併請求/header</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E5%90%88%E4%BD%B5%E8%AB%8B%E6%B1%82/header&amp;diff=29131"/>
		<updated>2024-08-04T16:43:28Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{布告板連結}}&lt;br /&gt;
{{shortcut|MP:PM|MP:MERGE}}&lt;br /&gt;
{{for|因[[MP:HM|剪貼移動]]等原因而須合併編輯歷史的請求|微國家百科:移動請求}}&lt;br /&gt;
{{微國家百科整理系列}}&lt;br /&gt;
{{TOCright|limit=2}}&lt;br /&gt;
這是一个&#039;&#039;&#039;需要合併的条目&#039;&#039;&#039;的列表，包括以下几种情况：&lt;br /&gt;
&lt;br /&gt;
#叙述完全相同的主题的条目。&lt;br /&gt;
#叙述相关主题的条目，且有很大重叠。比如「可燃」与「不可燃」都可以在条目「可燃性」中解释。&lt;br /&gt;
#难以扩充、不符合[[wp:n|關注度]]的条目，可以考虑合併到另一个更广泛的条目。比如，某个名人的父母或子女知名度不足，则一般在该名人条目的一个章节中作介绍。&lt;br /&gt;
#内容短小，且需要一个更广泛的条目中的内容来理解。比如，小说中的次要角色通常在“某某小说的角色列表”作介绍。&lt;br /&gt;
&lt;br /&gt;
無論如何，兩個重複的條目會随着时间的推移，它们之间的差距可能会不断扩大，这时我们需要进行手工操作以合併两个文章条目的内容，合併方法請參看[[微國家百科:合併和移动页面]]。&lt;br /&gt;
&lt;br /&gt;
所有被標示[[微國家百科:模板消息/清理#合併與分割|合併模板]]的條目均會列於[[:Category:需要合併的条目]]中。&lt;br /&gt;
&lt;br /&gt;
另外，若[[MP:翻译守则|翻译外语百科]]仍可扩充成条目的小作品&#039;&#039;&#039;请勿骤然提出合併请求&#039;&#039;&#039;，而[[MP:翻译守则#建議|应先翻译或扩充内容]]。&lt;br /&gt;
{| style=&amp;quot;margin: 0em auto 0em auto;&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&lt;br /&gt;
&amp;lt;span class=&amp;quot;mw-ui-button-group&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;{{Clickable button 2|url={{fullurl:Wikipedia:合并请求#{{CURRENTYEAR}}年{{#time:M}}}}|跳至當月}}{{Clickable button 2|url={{fullurl:Wikipedia:合并请求|action=edit&amp;amp;section=new&amp;amp;preload=Wikipedia:合并请求/preload&amp;amp;summary=提出合併請求}}|提出合併請求|class=mw-ui-progressive}}&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==說明==&lt;br /&gt;
===如何請求合併===&lt;br /&gt;
如果您发现一对条目看来需要合併，您可以先在該條目的討論頁提出建議，在取得共識後即可直接把它们合併！&lt;br /&gt;
&lt;br /&gt;
如果您因為無法取得共識，或是對此主題不熟悉，因而不能自行完成合併；請您将以下模板放入欲合併条目的顶端，並將請求列於此，由於此處不會以“[[:Category:需要合併的条目]]”一样自动產生，因此請您自行於此頁面添加請求內容，將請求置於頁面的最下方，並簡單說明理由：&lt;br /&gt;
&lt;br /&gt;
{| border=0 style=&amp;quot;background-color:transparent;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|{{quote|&lt;br /&gt;
{{tls|merge/auto|另外的条目}}&lt;br /&gt;
}}&lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;br /&amp;gt;&#039;&#039;&#039;或&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
:如果您可以确定哪一条目应该是留下的条目，&amp;lt;br /&amp;gt;&lt;br /&gt;
:可直接在它上面添加这样文字：&lt;br /&gt;
{{quote|&lt;br /&gt;
{{tls|mergefrom/auto|另外的条目}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:并且在应该合併走的条目加入如下文字：&lt;br /&gt;
{{quote|&lt;br /&gt;
{{tls|mergeto/auto|另外的条目}}&lt;br /&gt;
}}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
為方便管理，如果未加上本月的標題，請在&#039;&#039;&#039;{{NewEditSection|微國家百科:合并请求|這裡}}&#039;&#039;&#039;加上；現在是&#039;&#039;&#039;{{CURRENTYEAR}}年{{CURRENTMONTHNAME}}&#039;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
如果是同時對一批頁面作合併請求，請參考以下格式：&lt;br /&gt;
&lt;br /&gt;
{{quote|&lt;br /&gt;
:&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;請&amp;lt;nowiki&amp;gt;求原因（[[Talk:留下的&amp;lt;/nowiki&amp;gt;条&amp;lt;nowiki&amp;gt;目|&amp;lt;/nowiki&amp;gt;討論&amp;lt;nowiki&amp;gt;]]）--~~~~&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;**[[合&amp;lt;/nowiki&amp;gt;併&amp;lt;nowiki&amp;gt;走的&amp;lt;/nowiki&amp;gt;条&amp;lt;nowiki&amp;gt;目1]] → [[留下的&amp;lt;/nowiki&amp;gt;条&amp;lt;nowiki&amp;gt;目]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;**[[合&amp;lt;/nowiki&amp;gt;併&amp;lt;nowiki&amp;gt;走的&amp;lt;/nowiki&amp;gt;条&amp;lt;nowiki&amp;gt;目2]] → [[留下的&amp;lt;/nowiki&amp;gt;条&amp;lt;nowiki&amp;gt;目]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;**[[合&amp;lt;/nowiki&amp;gt;併&amp;lt;nowiki&amp;gt;走的&amp;lt;/nowiki&amp;gt;条&amp;lt;nowiki&amp;gt;目3]] → [[留下的&amp;lt;/nowiki&amp;gt;条&amp;lt;nowiki&amp;gt;目]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;**......&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 提出請求後 ===&lt;br /&gt;
提出請求後，&#039;&#039;&#039;請記得至該條目之討論頁發起合併建議，勿在此頁面發起任何討論。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
如果在條目討論頁面取得共識，或是一段時間都無其他意見，您或是任何有意願的維基人，都可以參考[[微國家百科:合併和移动页面]]直接將重複條目合併；同時，在合併的編輯過程中，建議應在[[Help:编辑摘要|編輯摘要]]明確說明，以讓其他人了解。此外，亦可至[[微國家百科:互助客栈/条目探讨]]請求協助。&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Category:微國家百科合并|*]]&lt;br /&gt;
[[Category:微國家百科布告板]]&lt;br /&gt;
[[Category:微國家百科請求]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;{{TOCright|limit=2}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E7%AE%A1%E7%90%86%E5%93%A1/%E7%AE%A1%E7%90%86%E5%93%A1%E7%9A%84%E4%B8%80%E5%A4%A9&amp;diff=29130</id>
		<title>微國家百科:管理員/管理員的一天</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E7%AE%A1%E7%90%86%E5%93%A1/%E7%AE%A1%E7%90%86%E5%93%A1%E7%9A%84%E4%B8%80%E5%A4%A9&amp;diff=29130"/>
		<updated>2024-08-04T16:43:12Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Sysop}}&lt;br /&gt;
{{捷徑|MP:ADW}}&lt;br /&gt;
&#039;&#039;&#039;管理員的一天&#039;&#039;&#039;是一個讓[[微國家百科]][[微國家百科:管理員|管理員]]傳承管理知識的頁面，也讓普通用戶（或有志於擔任管理員的用戶）了解管理員工作運行的概況。這個頁面主要著重在交流管理員每天要做的工作，我們盡力列出每項工作的每個步驟（包括要修改哪些模版、要注意哪些細節，當然也歡迎管理員們提供快捷方法），這樣我們可以讓新進的管理員快速上手；當然，有許多工作是臨時發生而必須處理的，這些就必須靠日常的觀察了。&lt;br /&gt;
&lt;br /&gt;
這個頁面亦提供一些對管理員的溫馨提示，保持他／她們的健康。&lt;br /&gt;
&lt;br /&gt;
==工作==&lt;br /&gt;
===刪除===&lt;br /&gt;
刪除權限是管理員與一般使用者在使用權限最顯著的差異之一。目前刪除的類型有3種，第一種快速刪除是要隨時做的；後兩種一天只要做一次就可以。&lt;br /&gt;
====快速刪除====&lt;br /&gt;
&amp;lt;templatestyles src=&amp;quot;User DOS/style.css&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;NavHead&amp;quot; style=&amp;quot;background: #F8EA66; text-align: center;&amp;quot;&amp;gt; {{ #ifexpr: {{#expr: {{PAGESINCATEGORY:快速刪除候選}}}} | [[File:MarkePunktRot.svg|15px]] | [[File:MarkePunktGruen.svg|15px]] }} 現未被清理之快速刪除候選條目數量為&#039;&#039;&#039;[[:分類:快速刪除候選|{{#expr: {{PAGESINCATEGORY:快速刪除候選}}}}條]]&#039;&#039;&#039;，{{ #ifexpr: {{#expr: {{PAGESINCATEGORY:快速刪除候選}}}}  | &amp;lt;span class=&amp;quot;blink&amp;quot;&amp;gt;&#039;&#039;&#039;[[:分類:快速刪除候選|請前往處理]]&#039;&#039;&#039;&amp;lt;/span&amp;gt;|&#039;&#039;&#039;多謝關注&#039;&#039;&#039;}} &amp;lt;/div&amp;gt;&lt;br /&gt;
*這項工作是在一天中的任何時間都可以做的。&lt;br /&gt;
*請看[[微國家百科:快速刪除的標準|快速刪除的標準]]。&lt;br /&gt;
*任何人（包括管理員在內）看到一個條目符合以上標準，就應該在條目內容中加上{{tl|delete}}。&lt;br /&gt;
*請注意，雖然身為管理員可以把符合以上標準的條目直接刪掉，但是為了確認不要誤刪，因此在看到delete標籤之前，請不要直接刪除。如果沒有delete標籤，請你把它標上去，然後把條目留給下一位看到的管理員來刪。&lt;br /&gt;
*&#039;&#039;&#039;[[:Category:快速刪除候選]]&#039;&#039;&#039;裡面有其他人認為是符合快速刪除條件的條目，你隨時都可以來看看。你只要再次確認，就可以直接把條目刪掉了。&lt;br /&gt;
*在刪除條目的同時，請注意一下它有沒有討論頁。如果有對話頁的話，以孤立頁面為由提報快速刪除。&lt;br /&gt;
&lt;br /&gt;
====刪除侵權文章====&lt;br /&gt;
*目前的規則是：請求提出滿一週後，根據大家的意見，決定刪除或保留。侵害著作權的條目會被貼上&amp;lt;nowiki&amp;gt;{{copyvio}}&amp;lt;/nowiki&amp;gt;標籤。&lt;br /&gt;
*你可以在&#039;&#039;&#039;[[微國家百科:頁面存廢討論/疑似侵權]]&#039;&#039;&#039;看到大家提交侵權的條目。&lt;br /&gt;
*現在常常都是在每天凌晨（時區UTC+8）過後就開始進行刪除動作，反正只要任何一個時區達到7天，就可以進行刪除。&lt;br /&gt;
*如果沒有草稿頁（即Draft:條目名稱）：時間一到，你就可以直接將條目刪掉。&lt;br /&gt;
*如果有改寫好且不侵權的草稿頁（Draft:頁面），你需要採取以下步驟：&lt;br /&gt;
*#打開草稿頁&lt;br /&gt;
*#刪除原頁面&lt;br /&gt;
*#將草稿頁移往原頁面，移動時設為不保留重定向（surpressredirect）&lt;br /&gt;
*在刪除頁面時，要注意有沒有討論頁，如果有討論頁且有臨時頁面，則保留討論頁；如果有討論頁且無臨時頁面，則以孤立頁面為由提報快速刪除。&lt;br /&gt;
&lt;br /&gt;
====[[微國家百科:頁面存廢討論|頁面存廢討論]]及[[微國家百科:檔案存廢討論|檔案存廢討論]]====&lt;br /&gt;
:請求提出滿一週後，根據大家的意見，決定刪除或保留。&lt;br /&gt;
&lt;br /&gt;
===其他===&lt;br /&gt;
*[[微國家百科:管理員告示版/3RR|回退不過三原則告示版]]&lt;br /&gt;
*[[微國家百科:管理員通告板/其他]]&lt;br /&gt;
*[[微國家百科:當前的破壞]]&lt;br /&gt;
*[[微國家百科:請求保護頁面]]&lt;br /&gt;
*[[微國家百科:移動請求]]&lt;br /&gt;
*[[微國家百科:重複條目]]&lt;br /&gt;
*[[微國家百科:頁面恢復請求]]&lt;br /&gt;
*[[微國家百科:權限申請]]&lt;br /&gt;
*[[微國家百科:申請解除權限]]&lt;br /&gt;
*[[:Category:封禁及禁制申訴]]&lt;br /&gt;
*[[:Category:微國家百科編輯被保護頁面請求]]&lt;br /&gt;
*[[微國家百科:防濫用過濾器/過濾器請求]]&lt;br /&gt;
*[[微國家百科:修訂版本刪除请求]]&lt;br /&gt;
*[https://www.micropedia.uk/wiki/%E7%89%B9%E6%AE%8A:%E8%BF%91%E6%9C%9F%E8%AE%8A%E5%8B%95?hidebots=1&amp;amp;hideWikibase=1&amp;amp;namespace=4&amp;amp;limit=500&amp;amp;days=30&amp;amp;enhanced=1&amp;amp;urlversion=2 所有對項目頁面的更改]&lt;br /&gt;
&lt;br /&gt;
== 如何避免使用微國家百科成癮與影響健康 ==&lt;br /&gt;
* 不要睡覺前看百科，不然考起古來，很容易會拖延就寢時間，你各位明天還要上班上學呢。&lt;br /&gt;
* 需要電腦工作時，打開電腦前先明確任務、時限。&amp;lt;br /&amp;gt;做完工作后不要再手癢癢去點百科的書籤，應該馬上果斷地關掉電腦。&lt;br /&gt;
* 這世界總不完善，所以不要想着一下子就改變它，慢慢來；也不要瘋狂催管理員/行政員們進行編輯和改動，他們也有正事要做的。&lt;br /&gt;
* 經常使用電腦的人士一般都會有不同程度的乾眼症。&amp;lt;br /&amp;gt;所以強烈建議各位長時間編輯後，去洗個臉、滴眼藥水或人工淚液、做眼保健操等以緩解雙眼疲勞。&amp;lt;br /&amp;gt;還有最簡單的一招：多眨眼！&lt;br /&gt;
&lt;br /&gt;
[[Category:微國家百科管理員工作]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:HideH/doc&amp;diff=29129</id>
		<title>模板:HideH/doc</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:HideH/doc&amp;diff=29129"/>
		<updated>2024-08-04T16:43:00Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{template doc page viewed directly}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{High-use}}&lt;br /&gt;
&lt;br /&gt;
==用法==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
{{HideH|标题}}&lt;br /&gt;
欲折叠隐藏的内容&lt;br /&gt;
{{HideF}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
或者&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
{{HideH&lt;br /&gt;
|Head         = 标题&lt;br /&gt;
|FrameStyle   = 整个框架的格式&lt;br /&gt;
|HeadStyle    = 标题的格式&lt;br /&gt;
|ContentStyle = 内容的格式&lt;br /&gt;
}}&lt;br /&gt;
欲隐藏的内容&lt;br /&gt;
{{HideF}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== 举例 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
{{HideH&lt;br /&gt;
|Head         = abc&lt;br /&gt;
|FrameStyle   = border:solid 1px; background:#FF4D00; width:50%;&lt;br /&gt;
|HeadStyle    = text-align:left;background:transparent;&lt;br /&gt;
|ContentStyle = background: #FFFFE0;&lt;br /&gt;
}}&lt;br /&gt;
* def&lt;br /&gt;
* ghi&lt;br /&gt;
{{HideF}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
得到：&lt;br /&gt;
&lt;br /&gt;
{{HideH&lt;br /&gt;
|Head         = abc&lt;br /&gt;
|FrameStyle   = border:solid 1px; background:#FF4D00; width:50%;&lt;br /&gt;
|HeadStyle    = text-align:left;background:transparent;&lt;br /&gt;
|ContentStyle = background: #FFFFE0;&lt;br /&gt;
}}&lt;br /&gt;
* def&lt;br /&gt;
* ghi&lt;br /&gt;
{{HideF}}&lt;br /&gt;
&lt;br /&gt;
== 注意事项 ==&lt;br /&gt;
*本模板不得用於不應隱藏的內容，如雜項堆積或劇情內容。&lt;br /&gt;
*若不希望浏览器在加载javascript前模板处于默认的展开状态而炸屏，使用ContentStyle = display: none;&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
*{{tl|hideh_wno}}，本模版的改型，加入新的折叠样式，并能与旧样式相互切换。&lt;br /&gt;
* {{tl|Hidden}}，功能相似，参数有所不同。&lt;br /&gt;
*{{tl|hidden_begin}}，和{{tl|hidden}}样式一样，不过用法和本模版一样。&lt;br /&gt;
* [[Help:摺疊顯示]]&lt;br /&gt;
* [[MP:隱藏元素]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Category:摺疊模板|{{PAGENAME}}]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Citation_needed/auto&amp;diff=29128</id>
		<title>模板:Citation needed/auto</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Citation_needed/auto&amp;diff=29128"/>
		<updated>2024-08-04T16:42:53Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if: {{{1|&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;}}}|&amp;lt;mark class=&amp;quot;template-facttext&amp;quot; title=&amp;quot;需要提供文献来源&amp;quot;&amp;gt;{{{1|&amp;lt;noinclude&amp;gt;没有来源的文字&amp;lt;/noinclude&amp;gt;}}}&amp;lt;/mark&amp;gt;}}&amp;lt;sup class=&amp;quot;noprint Template-Fact&amp;quot;&amp;gt;[[微國家百科:列明来源|&amp;lt;span style=&amp;quot;white-space: nowrap;&amp;quot; title=&amp;quot;来源请求{{#if:{{{time|}}}|开始于{{#time:Y年Fj日|{{{time|&amp;lt;noinclude&amp;gt;{{#time:c}}&amp;lt;/noinclude&amp;gt;}}}}}}}。&amp;quot;&amp;gt;&amp;amp;#91;來源請求&amp;amp;#93;&amp;lt;/span&amp;gt;]]&amp;lt;includeonly&amp;gt;{{namespace||[[Category:{{#if:{{{time|}}}|自{{#time:Y年F|{{{time}}}}}}}有未列明来源语句的条目|{{#switch:{{#if:{{{time|}}}|{{#time:j|{{{time}}}}}}}|1=㏠|2=㏡|3=㏢|4=㏣|5=㏤|6=㏥|7=㏦|8=㏧|9=㏨|10=㏩|11=㏪|12=㏫|13=㏬|14=㏭|15=㏮|16=㏯|17=㏰|18=㏱|19=㏲|20=㏳|21=㏴|22=㏵|23=㏶|24=㏷|25=㏸|26=㏹|27=㏺|28=㏻|29=㏼|30=㏽|31=㏾}}{{#if:{{{date|}}}|旧}}{{#if:{{{time|}}}||无}}{{PAGENAME}}]]}}&amp;lt;/includeonly&amp;gt;&amp;lt;/sup&amp;gt;{{ {{{|safesubst:}}}ifsubst|{{Error|模板使用方法錯誤，請勿[[MP:替換引用]]}}|}}&amp;lt;noinclude&amp;gt;{{模板文档}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Who&amp;diff=29127</id>
		<title>模板:Who</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Who&amp;diff=29127"/>
		<updated>2024-08-04T16:42:20Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if: {{{1|&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;}}}|&amp;lt;mark class=&amp;quot;template-facttext&amp;quot;&amp;gt;&amp;lt;span title=&amp;quot;非常模稜兩可或十分空泛的語句&amp;quot;&amp;gt;{{{1|&amp;lt;noinclude&amp;gt;缺少主詞或主詞不夠具體的語句&amp;lt;/noinclude&amp;gt;}}}&amp;lt;/span&amp;gt;&amp;lt;/mark&amp;gt;}}&amp;lt;sup class=&amp;quot;noprint&amp;quot;&amp;gt;[[微國家百科:格式手冊/不要模稜兩可|&amp;lt;span title=缺少主詞或主詞不夠具體的語句修正請求{{#if:{{{time|}}}|開始於{{#time:Y年Fj日|{{{time}}}}}。|}}&amp;gt;&amp;lt;span style=&amp;quot;white-space: nowrap;&amp;quot;&amp;gt;&amp;amp;#91;誰{{{post-text|}}}？&amp;amp;#93;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;]]&amp;lt;/sup&amp;gt;&amp;lt;includeonly&amp;gt;{{namespace||[[Category:{{#if:{{{time|}}}|自{{#time:Y年F|{{{time}}}}}}}缺少主詞或主詞不夠具體的語句|{{#switch:{{#if:{{{time|}}}|{{#time:j|{{{time}}}}}}}|1=㏠|2=㏡|3=㏢|4=㏣|5=㏤|6=㏥|7=㏦|8=㏧|9=㏨|10=㏩|11=㏪|12=㏫|13=㏬|14=㏭|15=㏮|16=㏯|17=㏰|18=㏱|19=㏲|20=㏳|21=㏴|22=㏵|23=㏶|24=㏷|25=㏸|26=㏹|27=㏺|28=㏻|29=㏼|30=㏽|31=㏾}}{{#if:{{{date|}}}|旧}}{{PAGENAME}}]]}}&amp;lt;/includeonly&amp;gt;{{ {{{|safesubst:}}}ifsubst|{{Error|模板使用方法錯誤，請勿[[MP:替換引用]]}}|}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD THIS TEMPLATE&#039;S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=MP:FIVE&amp;diff=29126</id>
		<title>MP:FIVE</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=MP:FIVE&amp;diff=29126"/>
		<updated>2024-08-04T16:42:12Z</updated>

		<summary type="html">&lt;p&gt;Admin：​Admin已移動頁面WP:FIVE至MP:FIVE，不留重新導向：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[微國家百科:五大觀念]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E9%A0%81%E9%9D%A2%E5%AD%98%E5%BB%A2%E8%A8%8E%E8%AB%96&amp;diff=29124</id>
		<title>微國家百科:頁面存廢討論</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E9%A0%81%E9%9D%A2%E5%AD%98%E5%BB%A2%E8%A8%8E%E8%AB%96&amp;diff=29124"/>
		<updated>2024-08-04T16:41:28Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOINDEX__&lt;br /&gt;
{{noedit0}}&lt;br /&gt;
{{Deletion_debates}}&lt;br /&gt;
{{nutshell|頁面存廢討論是社群討論决定&#039;&#039;&#039;部分頁面&#039;&#039;&#039;去留問題的平台，條目可能會保留、刪除、合併。}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;歡迎光臨頁面存廢討論！&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 參與討論及提出請求前請完全了解[[微國家百科:刪除方針|刪除方針]]及[[#指南|討論方式]]，並確保已無其他更可行的方法改善和保留有益的條目。&lt;br /&gt;
* 請勇於解決及拯救有問題的條目。&lt;br /&gt;
* [[微國家百科:投票不能代替討論|投票不能代替討論]]，微國家百科主要是講求共識。&lt;br /&gt;
* 請不要應朋友或網站的要求來參與討論，不要做別人的傀儡。&lt;br /&gt;
* [[微國家百科:修訂版本刪除請求|頁面修訂版本刪除]]{{`}}[[#提報過程|提報指引]]{{`}}[[微國家百科:存廢覆核請求|存廢覆核請求]]&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin:1em auto 1em auto;&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-ui-button-group plainlinks&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;margin-right:5px;&amp;quot;&amp;gt;{{NewAfdLink|1={{CLB|提交新的頁面存廢討論|color=blue}}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;margin-right:5px;&amp;quot;&amp;gt;[[微國家百科:頁面存廢討論/記錄|{{CLB|最近七天的頁面存廢討論}}]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;margin-right:5px;&amp;quot;&amp;gt;[[微國家百科:頁面存廢討論/疑似侵權|{{CLB|疑似侵權驗證}}]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;margin-right:5px;&amp;quot;&amp;gt;[[微國家百科:檔案存廢討論|{{CLB|檔案存廢討論}}]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
prefix=微國家百科:頁面存廢討論/記錄/&lt;br /&gt;
width=30&lt;br /&gt;
break=no&lt;br /&gt;
searchbuttonlabel=搜尋頁面存廢討論&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== 頁面存廢討論存檔 ==&lt;br /&gt;
&amp;lt;p class=&#039;notice metadata&#039; id=&#039;spoiler&#039; style=&#039;font-size:small&#039;&amp;gt;管理員現在可處理 {{#time:Y年Mj日 (D) H:i|-7 days}} (UTC) 前發起且已有共識的討論。&amp;lt;/p&amp;gt;&lt;br /&gt;
{{AfdCalendar|nohash=1}}&lt;br /&gt;
&lt;br /&gt;
==指南==&lt;br /&gt;
&lt;br /&gt;
===給提報者的前言===&lt;br /&gt;
&lt;br /&gt;
您肯定除了刪除這個頁面以外沒有其他方法嗎？如果您可以改善條目，請不要猶豫。同時，你可以選擇：重定向、重新命名、與其他條目合併、回退、或索性加入[[微國家百科:清理|清理]]、[[微國家百科:小小作品|小小作品限期改善]]模版。請勇敢行動，那就能夠拯救條目免被刪除。&lt;br /&gt;
&lt;br /&gt;
除合乎快速刪除標準的頁面外，自動確認用戶可將要刪除的頁面提報至此。&lt;br /&gt;
&lt;br /&gt;
=== 特别情况 ===&lt;br /&gt;
&lt;br /&gt;
# 若頁面&#039;&#039;&#039;疑似侵犯版權&#039;&#039;&#039;，請移步到&#039;&#039;&#039;[[MP:CV|此處]]&#039;&#039;&#039;提報。&lt;br /&gt;
# 當發現可以被[[微國家百科:快速刪除|快速刪除]]的頁面，儘管您可以在本頁提出，但仍建議您直接根據[[微國家百科:快速刪除的標準]]，在頁面中懸掛&amp;lt;code&amp;gt;{{tl|D}}&amp;lt;/code&amp;gt;模板提请刪除。&lt;br /&gt;
#: 如果把這些頁面列在本頁，頁面也很可能將在討論未滿7天即被刪除。&lt;br /&gt;
# 要提刪檔案，&#039;&#039;&#039;請到[[微國家百科:檔案存廢討論]]&#039;&#039;&#039;，除非您提删的是[[Help:圖像描述頁|檔案描述頁]]而不是檔案本身。&lt;br /&gt;
# 如果條目只是个别的修訂版本需要刪除，请到&#039;&#039;&#039;[[微國家百科:修訂版本刪除請求]]&#039;&#039;&#039;提出。&lt;br /&gt;
&lt;br /&gt;
===提報過程===&lt;br /&gt;
&lt;br /&gt;
當您認為某個頁面不適宜保留，但不符[[MP:快速刪除方针#準則|快速刪除的標準]]，：&lt;br /&gt;
{{/提報過程}}&lt;br /&gt;
&lt;br /&gt;
===參與討論===&lt;br /&gt;
{{/參與討論}}&lt;br /&gt;
&lt;br /&gt;
===結束討論===&lt;br /&gt;
&lt;br /&gt;
根據[[微國家百科:刪除方針|刪除方針]]，在這裡被列出的頁面討論會在七天後根据共識作出處理，如無共識，將會延長討論。在目标頁面被處理後，請用户根據[[微國家百科:關閉存廢討論指引]]的指示關閉討論。&lt;br /&gt;
&lt;br /&gt;
對於討論結果為不刪除的頁面（不含用戶頁），請在相應對話頁使用「&amp;lt;code&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;{{Old vfd multi|被提報的日期|結果}}&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;」來標明（請參閱&amp;lt;code&amp;gt;{{tl|Old vfd multi}}&amp;lt;/code&amp;gt;，日期格式為&amp;lt;code&amp;gt;YYYY/MM/DD&amp;lt;/code&amp;gt;，如：&amp;lt;code&amp;gt;{{#time:Y/m/d}}&amp;lt;/code&amp;gt;）。如果条目因[[MP:FAILN|关注度不足]]需要合併或重定向，请在重定向頁面中放入&amp;lt;code&amp;gt;{{tl|關注度重定向}}&amp;lt;/code&amp;gt;以提醒其他用户。&lt;br /&gt;
&lt;br /&gt;
關閉討論時請使用{{tl|delh}}及{{tl|delf}}，完整代碼如下範例：&lt;br /&gt;
;單筆提刪&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;== [[頁面名稱]] ==&lt;br /&gt;
{{delh|關閉代碼}}&lt;br /&gt;
{{刪除}}理據：...&lt;br /&gt;
: 提交的維基人及時間：...&lt;br /&gt;
* 討論內容...&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
: 關閉結果 ~~~~&lt;br /&gt;
{{delf}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;批量提刪&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;== 批量提刪 ==&lt;br /&gt;
=== [[頁面名稱A]] ===&lt;br /&gt;
{{delh|關閉代碼}}&lt;br /&gt;
* 討論內容...&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
: 關閉結果 ~~~~&lt;br /&gt;
{{delf}}&lt;br /&gt;
&lt;br /&gt;
=== [[頁面名稱B]] ===&lt;br /&gt;
{{delh|關閉代碼}}&lt;br /&gt;
* 討論內容...&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
: 關閉結果 ~~~~&lt;br /&gt;
{{delf}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
有三級標題時，請將關閉標籤放在三級標題下，勿放在二級標題。&lt;br /&gt;
&lt;br /&gt;
{{HideH|錯誤範例}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;== 批量提刪 ==&lt;br /&gt;
{{delh|關閉代碼}}&lt;br /&gt;
=== [[頁面名稱A]] ===&lt;br /&gt;
* 討論內容...&lt;br /&gt;
&lt;br /&gt;
=== [[頁面名稱B]] ===&lt;br /&gt;
* 討論內容...&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
: 關閉結果 ~~~~&lt;br /&gt;
{{delf}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{HideF}}&lt;br /&gt;
&lt;br /&gt;
[[Category:存廢討論]]&lt;br /&gt;
[[Category:微國家百科刪除]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=MP:5&amp;diff=29123</id>
		<title>MP:5</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=MP:5&amp;diff=29123"/>
		<updated>2024-08-04T16:41:28Z</updated>

		<summary type="html">&lt;p&gt;Admin：​Admin已移動頁面WP:5至MP:5，不留重新導向：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[微國家百科:五大觀念]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Citation/CS1/Date_validation&amp;diff=29122</id>
		<title>模組:Citation/CS1/Date validation</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Citation/CS1/Date_validation&amp;diff=29122"/>
		<updated>2024-08-04T16:41:16Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ V A L I D _ A C C E S S D A T E &amp;gt;----------------------------------------&lt;br /&gt;
&lt;br /&gt;
returns true if:&lt;br /&gt;
	Wikipedia start date &amp;lt;= accessdate &amp;lt; today + 2 days&lt;br /&gt;
&lt;br /&gt;
Wikipedia start date is 2001-01-15T00:00:00 UTC which is 979516800 seconds after 1970-01-01T00:00:00 UTC (the start of Unix time)&lt;br /&gt;
accessdate is the date provided in |accessdate= at time 00:00:00 UTC&lt;br /&gt;
today is the current date at time 00:00:00 UTC plus 48 hours&lt;br /&gt;
	if today is 2015-01-01T00:00:00 then&lt;br /&gt;
		adding 24 hours gives 2015-01-02T00:00:00 – one second more than today&lt;br /&gt;
		adding 24 hours gives 2015-01-03T00:00:00 – one second more than tomorrow&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_valid_accessdate (accessdate)&lt;br /&gt;
	local lang = mw.getContentLanguage();&lt;br /&gt;
	local good1, good2;&lt;br /&gt;
	local access_ts, tomorrow_ts;												-- to hold unix time stamps representing the dates&lt;br /&gt;
		&lt;br /&gt;
	good1, access_ts = pcall( lang.formatDate, lang, &#039;U&#039;, accessdate );			-- convert accessdate value to unix timesatmp &lt;br /&gt;
	good2, tomorrow_ts = pcall( lang.formatDate, lang, &#039;U&#039;, &#039;today + 2 days&#039; );	-- today midnight + 2 days is one second more than all day tomorrow&lt;br /&gt;
	&lt;br /&gt;
	if good1 and good2 then&lt;br /&gt;
		access_ts = tonumber (access_ts);										-- convert to numbers for the comparison&lt;br /&gt;
		tomorrow_ts = tonumber (tomorrow_ts);&lt;br /&gt;
	else&lt;br /&gt;
		return false;															-- one or both failed to convert to unix time stamp&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if 979516800 &amp;lt;= access_ts and access_ts &amp;lt; tomorrow_ts then					-- Wikipedia start date &amp;lt;= accessdate &amp;lt; tomorrow&#039;s date&lt;br /&gt;
		return true;&lt;br /&gt;
	else&lt;br /&gt;
		return false;															-- accessdate out of range&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; G E T _ M O N T H _ N U M B E R &amp;gt;----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
returns a number according to the month in a date: 1 for January, etc.  Capitalization and spelling must be correct. If not a valid month, returns 0&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function get_month_number (month)&lt;br /&gt;
local long_months = {[&#039;January&#039;]=1, [&#039;February&#039;]=2, [&#039;March&#039;]=3, [&#039;April&#039;]=4, [&#039;May&#039;]=5, [&#039;June&#039;]=6, [&#039;July&#039;]=7, [&#039;August&#039;]=8, [&#039;September&#039;]=9, [&#039;October&#039;]=10, [&#039;November&#039;]=11, [&#039;December&#039;]=12};&lt;br /&gt;
local short_months = {[&#039;Jan&#039;]=1, [&#039;Feb&#039;]=2, [&#039;Mar&#039;]=3, [&#039;Apr&#039;]=4, [&#039;May&#039;]=5, [&#039;Jun&#039;]=6, [&#039;Jul&#039;]=7, [&#039;Aug&#039;]=8, [&#039;Sep&#039;]=9, [&#039;Oct&#039;]=10, [&#039;Nov&#039;]=11, [&#039;Dec&#039;]=12};&lt;br /&gt;
local temp;&lt;br /&gt;
	temp=long_months[month];&lt;br /&gt;
	if temp then return temp; end				-- if month is the long-form name&lt;br /&gt;
	temp=short_months[month];&lt;br /&gt;
	if temp then return temp; end				-- if month is the short-form name&lt;br /&gt;
	return 0;									-- misspelled, improper case, or not a month name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; G E T _ S E A S O N _ N U M B E R &amp;gt;--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
returns a number according to the sequence of seasons in a year: 1 for Winter, etc.  Capitalization and spelling must be correct. If not a valid season, returns 0&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function get_season_number (season)&lt;br /&gt;
local season_list = {[&#039;Winter&#039;]=1, [&#039;Spring&#039;]=2, [&#039;Summer&#039;]=3, [&#039;Fall&#039;]=4, [&#039;Autumn&#039;]=4}&lt;br /&gt;
local temp;&lt;br /&gt;
	temp=season_list[season];&lt;br /&gt;
	if temp then return temp; end				-- if season is a valid name return its number&lt;br /&gt;
	return 0;									-- misspelled, improper case, or not a season name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ P R O P E R _ N A M E &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
returns a non-zero number if date contains a recognized proper name.  Capitalization and spelling must be correct.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_proper_name (name)&lt;br /&gt;
local name_list = {[&#039;Christmas&#039;]=1}&lt;br /&gt;
local temp;&lt;br /&gt;
	temp=name_list[name];&lt;br /&gt;
	if temp then return temp; end				-- if name is a valid name return its number&lt;br /&gt;
	return 0;									-- misspelled, improper case, or not a proper name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ V A L I D _ M O N T H _ O R _ S E A S O N &amp;gt;------------------------------&lt;br /&gt;
&lt;br /&gt;
--returns true if month or season is valid (properly spelled, capitalized, abbreviated)&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_valid_month_or_season (month_season)&lt;br /&gt;
	if 0 == get_month_number (month_season) then		-- if month text isn&#039;t one of the twelve months, might be a season&lt;br /&gt;
		if 0 == get_season_number (month_season) then	-- not a month, is it a season?&lt;br /&gt;
			return false;								-- return false not a month or one of the five seasons&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ V A L I D _ Y E A R &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Function gets current year from the server and compares it to year from a citation parameter.  Years more than one year in the future are not acceptable.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_valid_year(year)&lt;br /&gt;
	if not is_set(year_limit) then&lt;br /&gt;
		year_limit = tonumber(os.date(&amp;quot;%Y&amp;quot;))+1;			-- global variable so we only have to fetch it once&lt;br /&gt;
	end&lt;br /&gt;
	return tonumber(year) &amp;lt;= year_limit;				-- false if year is in the future more than one year&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Returns true if day is less than or equal to the number of days in month and year is no farther into the future than next year; else returns false.&lt;br /&gt;
&lt;br /&gt;
Assumes Julian calendar prior to year 1582 and Gregorian calendar thereafter. Accounts for Julian calendar leap years before 1582 and Gregorian leap years after 1582.&lt;br /&gt;
Where the two calendars overlap (1582 to approximately 1923) dates are assumed to be Gregorian.&lt;br /&gt;
]]&lt;br /&gt;
local function is_valid_date (year, month, day)&lt;br /&gt;
local days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};&lt;br /&gt;
local month_length;&lt;br /&gt;
	if not is_valid_year(year) then	-- no farther into the future than next year&lt;br /&gt;
		return false;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (2==month) then							-- if February&lt;br /&gt;
		month_length = 28;						-- then 28 days unless&lt;br /&gt;
		if 1582 &amp;gt; tonumber(year) then			-- Julian calendar&lt;br /&gt;
			if 0==(year%4) then&lt;br /&gt;
				month_length = 29;&lt;br /&gt;
			end&lt;br /&gt;
		else									-- Gregorian calendar&lt;br /&gt;
			if (0==(year%4) and (0~=(year%100) or 0==(year%400))) then	-- is a leap year?&lt;br /&gt;
				month_length = 29;				-- if leap year then 29 days in February&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		month_length=days_in_month[month];&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if tonumber (day) &amp;gt; month_length then&lt;br /&gt;
		return false;&lt;br /&gt;
	end&lt;br /&gt;
	return true;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ V A L I D _ M O N T H _ R A N G E _ S T Y L E &amp;gt;--------------------------&lt;br /&gt;
&lt;br /&gt;
Months in a range are expected to have the same style: Jan–Mar or October–December but not February–Mar or Jul–August. &lt;br /&gt;
There is a special test for May because it can be either short or long form.&lt;br /&gt;
&lt;br /&gt;
Returns true when style for both months is the same&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_valid_month_range_style (month1, month2)&lt;br /&gt;
local len1 = month1:len();&lt;br /&gt;
local len2 = month2:len();&lt;br /&gt;
	if len1 == len2 then&lt;br /&gt;
		return true;															-- both months are short form so return true&lt;br /&gt;
	elseif &#039;May&#039; == month1 or &#039;May&#039;== month2 then&lt;br /&gt;
		return true;															-- both months are long form so return true&lt;br /&gt;
	elseif 3 == len1 or 3 == len2 then&lt;br /&gt;
		return false;															-- months are mixed form so return false&lt;br /&gt;
	else&lt;br /&gt;
		return true;															-- both months are long form so return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ V A L I D _ M O N T H _ S E A S O N _ R A N G E &amp;gt;------------------------&lt;br /&gt;
&lt;br /&gt;
Check a pair of months or seasons to see if both are valid members of a month or season pair.&lt;br /&gt;
&lt;br /&gt;
Month pairs are expected to be left to right, earliest to latest in time.&lt;br /&gt;
&lt;br /&gt;
Similarly, seasons are also left to right, earliest to latest in time.  There is an oddity with seasons: winter is assigned a value of 1, spring 2, ...,&lt;br /&gt;
fall and autumn 4.  Because winter can follow fall/autumn at the end of a calender year, a special test is made to see if |date=Fall-Winter yyyy (4-1) is the date.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_valid_month_season_range(range_start, range_end)&lt;br /&gt;
	local range_start_number = get_month_number (range_start);&lt;br /&gt;
	&lt;br /&gt;
	if 0 == range_start_number then								-- is this a month range?&lt;br /&gt;
		local range_start_number = get_season_number (range_start);		-- not a month; is it a season? get start season number&lt;br /&gt;
		local range_end_number = get_season_number (range_end);			-- get end season number&lt;br /&gt;
&lt;br /&gt;
		if 0 ~= range_start_number then							-- is start of range a season?&lt;br /&gt;
			if range_start_number &amp;lt; range_end_number then		-- range_start is a season&lt;br /&gt;
				return true;									-- return true when range_end is also a season and follows start season; else false&lt;br /&gt;
			end&lt;br /&gt;
			if 4 == range_start_number and 1 == range_end_number then	-- special case when range is Fall-Winter or Autumn-Winter&lt;br /&gt;
				return true;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false;		-- range_start is not a month or a season; or range_start is a season and range_end is not; or improper season sequence&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local range_end_number = get_month_number (range_end);		-- get end month number&lt;br /&gt;
	if range_start_number &amp;lt; range_end_number then				-- range_start is a month; does range_start precede range_end?&lt;br /&gt;
		if is_valid_month_range_style (range_start, range_end) then				-- do months have the same style?&lt;br /&gt;
			return true;														-- proper order and same style&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false;												-- range_start month number is greater than or equal to range end number; or range end isn&#039;t a month&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; C H E C K _ D A T E &amp;gt;----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Check date format to see that it is one of the formats approved by MP:DATESNO or MP:DATERANGE. Exception: only allowed range separator is endash.&lt;br /&gt;
Additionally, check the date to see that it is a real date: no 31 in 30-day months; no 29 February when not a leap year.  Months, both long-form and three&lt;br /&gt;
character abbreviations, and seasons must be spelled correctly. Future years beyond next year are not allowed.&lt;br /&gt;
&lt;br /&gt;
If the date fails the format tests, this function returns false and does not return values for anchor_year and COinS_date.  When this happens, the date parameter is&lt;br /&gt;
used in the COinS metadata and the CITEREF identifier gets its year from the year parameter if present otherwise CITEREF does not get a date value.&lt;br /&gt;
&lt;br /&gt;
Inputs:&lt;br /&gt;
	date_string - date string from date-holding parameters (date, year, accessdate, embargo, archivedate, etc.)&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
	false if date string is not a real date; else&lt;br /&gt;
	true, anchor_year, COinS_date&lt;br /&gt;
		anchor_year can be used in CITEREF anchors&lt;br /&gt;
		COinS_date is date_string without anchor_year disambiguator if any&lt;br /&gt;
]]&lt;br /&gt;
local function check_date (date_string)&lt;br /&gt;
	local year;			-- assume that year2, months, and days are not used;&lt;br /&gt;
	local year2=0;		-- second year in a year range&lt;br /&gt;
	local month=0;&lt;br /&gt;
	local month2=0;		-- second month in a month range&lt;br /&gt;
	local day=0;&lt;br /&gt;
	local day2=0;		-- second day in a day range&lt;br /&gt;
	local anchor_year;&lt;br /&gt;
	local coins_date;&lt;br /&gt;
&lt;br /&gt;
	if date_string:match(&amp;quot;^%d%d%d%d%-%d%d%-%d%d$&amp;quot;) then										-- year-initial numerical year month day format&lt;br /&gt;
		year, month, day=string.match(date_string, &amp;quot;(%d%d%d%d)%-(%d%d)%-(%d%d)&amp;quot;);&lt;br /&gt;
		month=tonumber(month);&lt;br /&gt;
		if 12 &amp;lt; month or 1 &amp;gt; month or 1583 &amp;gt; tonumber(year) then return false; end			-- month number not valid or not Gregorian calendar&lt;br /&gt;
		anchor_year = year;&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d?, +[1-9]%d%d%d%a?$&amp;quot;) then						-- month-initial: month day, year&lt;br /&gt;
		month, day, anchor_year, year=string.match(date_string, &amp;quot;(%a+)%s*(%d%d?),%s*((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		if 0 == month then return false; end												-- return false if month text isn&#039;t one of the twelve months&lt;br /&gt;
				&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d?–[1-9]%d?, +[1-9]%d%d%d%a?$&amp;quot;) then				-- month-initial day range: month day–day, year; days are separated by endash&lt;br /&gt;
		month, day, day2, anchor_year, year=string.match(date_string, &amp;quot;(%a+) +(%d%d?)–(%d%d?), +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if tonumber(day) &amp;gt;= tonumber(day2) then return false; end							-- date range order is left to right: earlier to later; dates may not be the same;&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		if 0 == month then return false; end												-- return false if month text isn&#039;t one of the twelve months&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d? +%a+ +[1-9]%d%d%d%a?$&amp;quot;) then						-- day-initial: day month year&lt;br /&gt;
		day, month, anchor_year, year=string.match(date_string, &amp;quot;(%d%d*)%s*(%a+)%s*((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		if 0 == month then return false; end												-- return false if month text isn&#039;t one of the twelve months&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d?–[1-9]%d? +%a+ +[1-9]%d%d%d%a?$&amp;quot;) then				-- day-range-initial: day–day month year; days are separated by endash&lt;br /&gt;
		day, day2, month, anchor_year, year=string.match(date_string, &amp;quot;(%d%d?)–(%d%d?) +(%a+) +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if tonumber(day) &amp;gt;= tonumber(day2) then return false; end							-- date range order is left to right: earlier to later; dates may not be the same;&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		if 0 == month then return false; end												-- return false if month text isn&#039;t one of the twelve months&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d? +%a+ – [1-9]%d? +%a+ +[1-9]%d%d%d%a?$&amp;quot;) then		-- day initial month-day-range: day month - day month year; uses spaced endash&lt;br /&gt;
		day, month, day2, month2, anchor_year, year=date_string:match(&amp;quot;(%d%d?) +(%a+) – (%d%d?) +(%a+) +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if (not is_valid_month_season_range(month, month2)) or not is_valid_year(year) then return false; end	-- date range order is left to right: earlier to later;&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		month2 = get_month_number (month2);&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d? – %a+ +[1-9]%d?, +[1-9]%d%d%d?%a?$&amp;quot;) then		-- month initial month-day-range: month day – month day, year;  uses spaced endash&lt;br /&gt;
		month, day, month2, day2, anchor_year, year=date_string:match(&amp;quot;(%a+) +(%d%d?) – (%a+) +(%d%d?), +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if (not is_valid_month_season_range(month, month2)) or not is_valid_year(year) then return false; end&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		month2 = get_month_number (month2);&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d? +%a+ +[1-9]%d%d%d – [1-9]%d? +%a+ +[1-9]%d%d%d%a?$&amp;quot;) then		-- day initial month-day-year-range: day month year - day month year; uses spaced endash&lt;br /&gt;
		day, month, year, day2, month2, anchor_year, year2=date_string:match(&amp;quot;(%d%d?) +(%a+) +(%d%d%d%d?) – (%d%d?) +(%a+) +((%d%d%d%d?)%a?)&amp;quot;);&lt;br /&gt;
		if tonumber(year2) &amp;lt;= tonumber(year) then return false; end							-- must be sequential years, left to right, earlier to later&lt;br /&gt;
		if not is_valid_year(year2) or not is_valid_month_range_style(month, month2) then return false; end		-- year2 no more than one year in the future; months same style&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		month2 = get_month_number (month2);&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d?, +[1-9]%d%d%d – %a+ +[1-9]%d?, +[1-9]%d%d%d%a?$&amp;quot;) then		-- month initial month-day-year-range: month day, year – month day, year;  uses spaced endash&lt;br /&gt;
		month, day, year, month2, day2, anchor_year, year2=date_string:match(&amp;quot;(%a+) +(%d%d?), +(%d%d%d%d) – (%a+) +(%d%d?), +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if tonumber(year2) &amp;lt;= tonumber(year) then return false; end							-- must be sequential years, left to right, earlier to later&lt;br /&gt;
		if not is_valid_year(year2) or not is_valid_month_range_style(month, month2) then return false; end		-- year2 no more than one year in the future; months same style&lt;br /&gt;
		month = get_month_number (month);&lt;br /&gt;
		month2 = get_month_number (month2);&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d%d%d–%d%d%a?$&amp;quot;) then								-- special case Winter/Summer year-year (YYYY-YY); year separated with unspaced endash&lt;br /&gt;
		if nil == date_string:match(&amp;quot;^Winter&amp;quot;) and nil == date_string:match(&amp;quot;^Summer&amp;quot;) then return false end;	-- &#039;month&#039; can only be Winter or Summer&lt;br /&gt;
		local century;&lt;br /&gt;
		year, century, anchor_year, year2=date_string:match(&amp;quot;%a+ +((%d%d)%d%d)–((%d%d)%a?)&amp;quot;);&lt;br /&gt;
		anchor_year=year..&#039;–&#039;..anchor_year;													-- assemble anchor_year from both years&lt;br /&gt;
		year2 = century..year2;																-- add the century to year2 for comparisons&lt;br /&gt;
		if 1 ~= tonumber(year2) - tonumber(year) then return false; end						-- must be sequential years, left to right, earlier to later&lt;br /&gt;
		if not is_valid_year(year2) then return false; end									-- no year farther in the future than next year&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d%d%d–[1-9]%d%d%d%a?$&amp;quot;) then						-- special case Winter/Summer year-year; year separated with unspaced endash&lt;br /&gt;
		if nil == date_string:match(&amp;quot;^Winter&amp;quot;) and nil == date_string:match(&amp;quot;^Summer&amp;quot;) then return false end;	-- &#039;month&#039; can only be Winter or Summer&lt;br /&gt;
		year, anchor_year, year2=date_string:match(&amp;quot;%a+ +(%d%d%d%d)–((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		anchor_year=year..&#039;–&#039;..anchor_year;													-- assemble anchor_year from both years&lt;br /&gt;
		if 1 ~= tonumber(year2) - tonumber(year) then return false; end						-- must be sequential years, left to right, earlier to later&lt;br /&gt;
		if not is_valid_year(year2) then return false; end									-- no year farther in the future than next year&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +[1-9]%d%d%d% – %a+ +[1-9]%d%d%d%a?$&amp;quot;) then				-- month/season year - month/season year; separated by spaced endash&lt;br /&gt;
		month, year, month2, anchor_year, year2=date_string:match(&amp;quot;(%a+) +(%d%d%d%d) – (%a+) +((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		anchor_year=year..&#039;–&#039;..anchor_year;													-- assemble anchor_year from both years&lt;br /&gt;
		if tonumber(year) &amp;gt;= tonumber(year2) then return false; end							-- left to right, earlier to later, not the same&lt;br /&gt;
		if not is_valid_year(year2) then return false; end									-- no year farther in the future than next year&lt;br /&gt;
		if not((0 ~= get_month_number(month) and 0 ~= get_month_number(month2) and is_valid_month_range_style(month, month2)) or 	-- both must be month year, same month style&lt;br /&gt;
			(0 ~= get_season_number(month) and 0 ~= get_season_number(month2))) then return false; end								-- or season year, not mixed&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match (&amp;quot;^%a+–%a+ +[1-9]%d%d%d%a?$&amp;quot;) then								-- month/season range year; months separated by endash &lt;br /&gt;
		month, month2, anchor_year, year=date_string:match (&amp;quot;(%a+)–(%a+)%s*((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if (not is_valid_month_season_range(month, month2)) or (not is_valid_year(year)) then&lt;br /&gt;
			return false;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	elseif date_string:match(&amp;quot;^%a+ +%d%d%d%d%a?$&amp;quot;) then							-- month/season year or proper-name year&lt;br /&gt;
		month, anchor_year, year=date_string:match(&amp;quot;(%a+)%s*((%d%d%d%d)%a?)&amp;quot;);&lt;br /&gt;
		if not is_valid_year(year) then return false; end&lt;br /&gt;
		if not is_valid_month_or_season (month) and 0 == is_proper_name (month) then return false; end&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d%d%d?–[1-9]%d%d%d?%a?$&amp;quot;) then				-- Year range: YYY-YYY or YYY-YYYY or YYYY–YYYY; separated by unspaced endash; 100-9999&lt;br /&gt;
		year, anchor_year, year2=date_string:match(&amp;quot;(%d%d%d%d?)–((%d%d%d%d?)%a?)&amp;quot;);&lt;br /&gt;
		anchor_year=year..&#039;–&#039;..anchor_year;										-- assemble anchor year from both years&lt;br /&gt;
		if tonumber(year) &amp;gt;= tonumber(year2) then return false; end				-- left to right, earlier to later, not the same&lt;br /&gt;
		if not is_valid_year(year2) then return false; end						-- no year farther in the future than next year&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d%d%d–%d%d%a?$&amp;quot;) then						-- Year range: YYYY–YY; separated by unspaced endash&lt;br /&gt;
		local century;&lt;br /&gt;
		year, century, anchor_year, year2=date_string:match(&amp;quot;((%d%d)%d%d)–((%d%d)%a?)&amp;quot;);&lt;br /&gt;
		anchor_year=year..&#039;–&#039;..anchor_year;										-- assemble anchor year from both years&lt;br /&gt;
		if 13 &amp;gt; tonumber(year2) then return false; end							-- don&#039;t allow 2003-05 which might be May 2003&lt;br /&gt;
		year2 = century..year2;													-- add the century to year2 for comparisons&lt;br /&gt;
		if tonumber(year) &amp;gt;= tonumber(year2) then return false; end				-- left to right, earlier to later, not the same&lt;br /&gt;
		if not is_valid_year(year2) then return false; end						-- no year farther in the future than next year&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match(&amp;quot;^[1-9]%d%d%d?%a?$&amp;quot;) then							-- year; here accept either YYY or YYYY&lt;br /&gt;
		anchor_year, year=date_string:match(&amp;quot;((%d%d%d%d?)%a?)&amp;quot;);&lt;br /&gt;
		if false == is_valid_year(year) then&lt;br /&gt;
			return false;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		return false;											-- date format not one of the MOS:DATE approved formats&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result=true;											-- check whole dates for validity; assume true because not all dates will go through this test&lt;br /&gt;
	if 0 ~= year and 0 ~= month and 0 ~= day and 0 == year2 and 0 == month2 and 0 == day2 then		-- YMD (simple whole date)&lt;br /&gt;
		result=is_valid_date(year,month,day);&lt;br /&gt;
&lt;br /&gt;
	elseif 0 ~= year and 0 ~= month and 0 ~= day and 0 == year2 and 0 == month2 and 0 ~= day2 then	-- YMD-d (day range)&lt;br /&gt;
		result=is_valid_date(year,month,day);&lt;br /&gt;
		result=result and is_valid_date(year,month,day2);&lt;br /&gt;
&lt;br /&gt;
	elseif 0 ~= year and 0 ~= month and 0 ~= day and 0 == year2 and 0 ~= month2 and 0 ~= day2 then	-- YMD-md (day month range)&lt;br /&gt;
		result=is_valid_date(year,month,day);&lt;br /&gt;
		result=result and is_valid_date(year,month2,day2);&lt;br /&gt;
&lt;br /&gt;
	elseif 0 ~= year and 0 ~= month and 0 ~= day and 0 ~= year2 and 0 ~= month2 and 0 ~= day2 then	-- YMD-ymd (day month year range)&lt;br /&gt;
		result=is_valid_date(year,month,day);&lt;br /&gt;
		result=result and is_valid_date(year2,month2,day2);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if false == result then return false; end&lt;br /&gt;
																-- if here, then date_string is valid; get coins_date from date_string (leave CITEREF disambiguator) ...&lt;br /&gt;
	coins_date=date_string:match(&amp;quot;^(.+%d)%a?$&amp;quot;);				-- last character of valid disambiguatable date is always a digit&lt;br /&gt;
	coins_date= mw.ustring.gsub(coins_date, &amp;quot;–&amp;quot;, &amp;quot;-&amp;quot; );			-- ... and replace any ndash with a hyphen&lt;br /&gt;
	&lt;br /&gt;
	return true, anchor_year, coins_date;						-- format is good and date string represents a real date&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; D A T E S &amp;gt;--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cycle the date-holding parameters in passed table date_parameters_list through check_date() to check compliance with MOS:DATE. For all valid dates, check_date() returns&lt;br /&gt;
true. The |date= parameter test is unique, it is the only date holding parameter from which values for anchor_year (used in CITEREF identifiers) and COinS_date (used in&lt;br /&gt;
the COinS metadata) are derived.  The |date= parameter is the only date-holding parameter that is allowed to contain the no-date keywords &amp;quot;n.d.&amp;quot; or &amp;quot;nd&amp;quot; (without quotes).&lt;br /&gt;
&lt;br /&gt;
Unlike most error messages created in this module, only one error message is created by this function. Because all of the date holding parameters are processed serially,&lt;br /&gt;
a single error message is created as the dates are tested.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
--function p.dates(date_parameters_list)&lt;br /&gt;
local function dates(date_parameters_list)&lt;br /&gt;
	local anchor_year;		-- will return as nil if the date being tested is not |date=&lt;br /&gt;
	local COinS_date;		-- will return as nil if the date being tested is not |date=&lt;br /&gt;
	local error_message = &amp;quot;&amp;quot;;&lt;br /&gt;
	local mismatch = 0;&lt;br /&gt;
	local good_date = false;&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(date_parameters_list) do										-- for each date-holding parameter in the list&lt;br /&gt;
		if is_set(v) then															-- if the parameter has a value&lt;br /&gt;
			if v:match(&amp;quot;^c%. [1-9]%d%d%d?%a?$&amp;quot;) then								-- special case for c. year or with or without CITEREF disambiguator - only |date= and |year=&lt;br /&gt;
				local year = v:match(&amp;quot;c%. ([1-9]%d%d%d?)%a?&amp;quot;);						-- get the year portion so it can be tested&lt;br /&gt;
				if &#039;date&#039;==k then&lt;br /&gt;
					anchor_year, COinS_date = v:match(&amp;quot;((c%. [1-9]%d%d%d?)%a?)&amp;quot;);	-- anchor year and COinS_date only from |date= parameter&lt;br /&gt;
					good_date = is_valid_year(year);&lt;br /&gt;
				elseif &#039;year&#039;==k then&lt;br /&gt;
					good_date = is_valid_year(year);&lt;br /&gt;
				end&lt;br /&gt;
			elseif &#039;date&#039;==k then													-- if the parameter is |date=&lt;br /&gt;
				if v:match(&amp;quot;^n%.d%.%a?&amp;quot;) then										-- if |date=n.d. with or without a CITEREF disambiguator&lt;br /&gt;
					good_date, anchor_year, COinS_date = true, v:match(&amp;quot;((n%.d%.)%a?)&amp;quot;);	--&amp;quot;n.d.&amp;quot;; no error when date parameter is set to no date&lt;br /&gt;
				elseif v:match(&amp;quot;^nd%a?$&amp;quot;) then										-- if |date=nd with or without a CITEREF disambiguator&lt;br /&gt;
					good_date, anchor_year, COinS_date = true, v:match(&amp;quot;((nd)%a?)&amp;quot;);	--&amp;quot;nd&amp;quot;;	no error when date parameter is set to no date&lt;br /&gt;
				else&lt;br /&gt;
					good_date, anchor_year, COinS_date = check_date (v);			-- go test the date&lt;br /&gt;
				end&lt;br /&gt;
			elseif &#039;access-date&#039;==k then												-- if the parameter is |date=&lt;br /&gt;
				good_date = check_date (v);											-- go test the date&lt;br /&gt;
				if true == good_date then											-- if the date is a valid date&lt;br /&gt;
					good_date = is_valid_accessdate (v);							-- is Wikipedia start date &amp;lt; accessdate &amp;lt; tomorrow&#039;s date?&lt;br /&gt;
				end&lt;br /&gt;
			else																	-- any other date-holding parameter&lt;br /&gt;
				good_date = check_date (v);											-- go test the date&lt;br /&gt;
			end&lt;br /&gt;
			if false==good_date then												-- assemble one error message so we don&#039;t add the tracking category multiple times&lt;br /&gt;
				if is_set(error_message) then										-- once we&#039;ve added the first portion of the error message ...&lt;br /&gt;
					error_message=error_message .. &amp;quot;, &amp;quot;;							-- ... add a comma space separator&lt;br /&gt;
				end&lt;br /&gt;
				error_message=error_message .. &amp;quot;&amp;amp;#124;&amp;quot; .. k .. &amp;quot;=&amp;quot;;				-- add the failed parameter&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return anchor_year, COinS_date, error_message, mismatch;					-- and done&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; Y E A R _ D A T E _ C H E C K &amp;gt;------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Compare the value provided in |year= with the year value(s) provided in |date=.  This function returns a numeric value:&lt;br /&gt;
	0 - year value does not match the year value in date&lt;br /&gt;
	1 - (default) year value matches the year value in date or one of the year values when date contains two years&lt;br /&gt;
	2 - year value matches the year value in date when date is in the form YYYY-MM-DD and year is disambiguated (|year=YYYYx)&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function year_date_check (year_string, date_string)&lt;br /&gt;
	local year;&lt;br /&gt;
	local date1;&lt;br /&gt;
	local date2;&lt;br /&gt;
	local result = 1;															-- result of the test; assume that the test passes&lt;br /&gt;
	&lt;br /&gt;
	year = year_string:match (&#039;(%d%d%d%d?)&#039;);&lt;br /&gt;
&lt;br /&gt;
	if date_string:match (&#039;%d%d%d%d%-%d%d%-%d%d&#039;) and year_string:match (&#039;%d%d%d%d%a&#039;) then	--special case where date and year required YYYY-MM-DD and YYYYx&lt;br /&gt;
		date1 = date_string:match (&#039;(%d%d%d%d)&#039;);&lt;br /&gt;
		year = year_string:match (&#039;(%d%d%d%d)&#039;);&lt;br /&gt;
		if year ~= date1 then&lt;br /&gt;
			result = 0;															-- years don&#039;t match&lt;br /&gt;
		else&lt;br /&gt;
			result = 2;															-- years match; but because disambiguated, don&#039;t add to maint cat&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	elseif date_string:match (&amp;quot;%d%d%d%d?.-%d%d%d%d?&amp;quot;) then						-- any of the standard formats of date with two three- or four-digit years&lt;br /&gt;
		date1, date2 = date_string:match (&amp;quot;(%d%d%d%d?).-(%d%d%d%d?)&amp;quot;);&lt;br /&gt;
		if year ~= date1 and year ~= date2 then&lt;br /&gt;
			result = 0;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match (&amp;quot;%d%d%d%d[%s%-–]+%d%d&amp;quot;) then						-- YYYY-YY date ranges&lt;br /&gt;
		local century;&lt;br /&gt;
		date1, century, date2 = date_string:match (&amp;quot;((%d%d)%d%d)[%s%-–]+(%d%d)&amp;quot;);&lt;br /&gt;
		date2 = century..date2;													-- convert YY to YYYY&lt;br /&gt;
		if year ~= date1 and year ~= date2 then&lt;br /&gt;
			result = 0;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif date_string:match (&amp;quot;%d%d%d%d?&amp;quot;) then									-- any of the standard formats of date with one year&lt;br /&gt;
		date1 = date_string:match (&amp;quot;(%d%d%d%d?)&amp;quot;);&lt;br /&gt;
		if year ~= date1 then&lt;br /&gt;
			result = 0;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {dates = dates, year_date_check = year_date_check}						-- return exported functions&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Template:Delete/data&amp;diff=29121</id>
		<title>模組:Template:Delete/data</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E7%B5%84:Template:Delete/data&amp;diff=29121"/>
		<updated>2024-08-04T16:41:12Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;function reqns(nslist)&lt;br /&gt;
    return function(title)&lt;br /&gt;
        if type(nslist) ~= &#039;table&#039; then&lt;br /&gt;
            nslist = {nslist}&lt;br /&gt;
        end&lt;br /&gt;
        text = {}&lt;br /&gt;
        for i, ns in ipairs(nslist) do&lt;br /&gt;
            if title:inNamespace(ns) then&lt;br /&gt;
                return nil&lt;br /&gt;
            end&lt;br /&gt;
            if mw.site.namespaces[ns].id ~= 0 then&lt;br /&gt;
                table.insert(text, mw.site.namespaces[ns].name)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(text, mw.site.namespaces[ns].displayName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if #text then&lt;br /&gt;
            return &#039;僅適用於&#039; .. mw.text.listToText(text, &#039;、&#039;, &#039;或&#039;) .. &#039;[[MP:命名空間|命名空間]]&#039;&lt;br /&gt;
        end&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G1&#039;,&lt;br /&gt;
        aliases = {&#039;empty&#039;},&lt;br /&gt;
        criteria = &#039;沒有實際內容的頁面&#039;,&lt;br /&gt;
        description = &#039;如“adfasddd”。參見微國家百科:胡言亂語。但注意：圖片也算是內容。對於條目：建議使用A1。對於用戶頁：如果它是其他用戶建立的，請提交頁面存廢討論。用戶本人建立的，請不要管它。對於用戶討論頁：請加入{{subst:welcome}}。對於其他頁面（沙盒頁面除外）：如果內容為空或符合微國家百科:胡言亂語，請使用{{d|G1}}。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G2&#039;,&lt;br /&gt;
        aliases = {&#039;test&#039;},&lt;br /&gt;
        criteria = &#039;測試頁面&#039;,&lt;br /&gt;
        description = &#039;例如：「這是一個測試。」對於用戶頁：如果它是其他用戶建立的，請提交頁面存廢討論。用戶本人建立的，請不要管它。對於用戶討論頁：請加入{{subst:welcome}}。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G3&#039;,&lt;br /&gt;
        aliases = {&#039;r4&#039;, &#039;attack&#039;, &#039;van&#039;, &#039;g6&#039;},&lt;br /&gt;
        criteria = &#039;純粹[[MP:VAN|破壞]]，包括但不限於明顯的[[MP:HOAX|惡作劇]]、錯誤訊息、[[MP:PA|人身攻擊]]等。&#039;,&lt;br /&gt;
        description = &#039;包括明顯的錯誤資訊、明顯的惡作劇、資訊明顯錯誤的圖片，以及清理移動破壞時留下的重新導向。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G5&#039;,&lt;br /&gt;
        aliases = {&#039;rep&#039;},&lt;br /&gt;
        criteria = &amp;quot;曾經根據[[MP:AFD|頁面存廢討論]]、[[MP:CV|侵權審核]]或[[MP:FFD|檔案存廢討論]]結果刪除後又重新建立的內容，而有關內容與已刪除版本相同或非常相似，無論標題是否相同。&amp;quot;,&lt;br /&gt;
        deletereason = &#039;曾經根據[[MP:AFD|頁面存廢討論]]、[[MP:CV|侵權審核]]或[[MP:FFD|檔案存廢討論]]結果刪除後又重新建立的內容&#039;,&lt;br /&gt;
        description = &#039;該內容之前必須是經存廢討論刪除，其中：1. 之前經頁面存廢討論、檔案存廢討論刪除的，提請速刪者須在速刪模板標註原存廢討論頁面的位置；2. 之前經侵權稽核刪除的或所提報頁面目前疑似侵犯版權的，提請速刪者應一併加掛疑似侵權模板（使用Twinkle的編輯應先提掛侵權模板再提掛速刪模板，以免速刪模板被誤移除），並提供足以查證的相關刪除資訊（例如，頁面之前被刪除日期、相關刪除日誌、原存廢討論頁面的位置等）。如該內容之前屬於快速刪除，請以相同理由重新提送快速刪除。該內容如與被刪除的版本明顯不同，而提刪者認為需要刪除，請交到存廢討論，如果提刪者對此不肯定，請先聯絡上次執行刪除的管理人員。不適用於根據存廢覆核結果被恢復的內容。在某些情況下，重新建立的條目有機會發展，那麼不應提交快速刪除，而應該提交存廢覆核或存廢討論重新評核。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G8&#039;,&lt;br /&gt;
        aliases = {&#039;rm&#039;},&lt;br /&gt;
        criteria = &#039;因技術原因刪除頁面&#039;,&lt;br /&gt;
        description = &#039;包括解封使用者後刪除使用者頁面、因使用者奪取而刪除、刪除無用的MediaWiki頁面、因移動請求而刪除頁面、以覆寫刪除重新導向。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G10&#039;,&lt;br /&gt;
        aliases = {&#039;author&#039;, &#039;ad&#039;},&lt;br /&gt;
        criteria = &#039;原作者清空頁面或提出刪除，且實際貢獻者只有一人&#039;,&lt;br /&gt;
        description = &#039;提請須出於善意，並附有合理原因。移動產生的重新導向頁面，移動前的建立者視為原作者。被匯入的頁面，匯入者視為原作者。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G11&#039;,&lt;br /&gt;
        aliases = {&#039;spam&#039;},&lt;br /&gt;
        criteria = &#039;明顯的[[MP:SOAP|廣告宣傳]]頁面，或只有相關人物或團體的聯繫方法的頁面&#039;,&lt;br /&gt;
        description = &#039;頁面只收宣傳之用，並須完全重寫才能貼合百科全書要求。須注意，僅僅以某公司或產品為主題的條目，並不直接導致其自然滿足此速刪標準。即便該頁面具有宣傳情況，除非您可以非常確定該頁面建立僅為廣告宣傳而建，否則應以關注度提報或提刪替代。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G12&#039;,&lt;br /&gt;
        aliases = {&#039;bio&#039;},&lt;br /&gt;
        criteria = &amp;quot;未列明來源且語調負面的[[MP:BLP|生者傳記]]。&amp;quot;,&lt;br /&gt;
        deletereason = &amp;quot;未列明來源且語調負面的[[MP:BLP|生者傳記]]。&amp;quot;,&lt;br /&gt;
        description = &#039;注意是未列明來源且語調負面，必須2項均符合。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G13&#039;,&lt;br /&gt;
        aliases = {&#039;mt&#039;},&lt;br /&gt;
        criteria = &#039;翻譯拙劣&#039;,&lt;br /&gt;
        description = &#039;不適用於所有的討論命名空間、草稿命名空間和用戶命名空間。&#039;,&lt;br /&gt;
        check = function(title)&lt;br /&gt;
            if title.isTalkPage or title:inNamespaces(&#039;Draft&#039;, &#039;User&#039;) then&lt;br /&gt;
                return &#039;不適用於所有的討論命名空間、草稿命名空間和用戶命名空間。&#039;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G14&#039;,&lt;br /&gt;
        aliases = {&#039;nc&#039;},&lt;br /&gt;
        criteria = &#039;逾14天沒有翻譯的非正體中文頁。&#039;,&lt;br /&gt;
        description = &#039;包括所有未翻譯的外語、漢語方言以及文言文。此項僅適用於條目、專案、使用說明和主題命名空間。可使用{{subst:NotMandarin/auto}}取代快速刪除，並將頁面列於翻譯請求，使其有機會被校閱和翻譯。&#039;,&lt;br /&gt;
        check = reqns({0, &#039;Project&#039;, &#039;WikiProject&#039;, &#039;Help&#039;, &#039;Portal&#039;})&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G15&#039;,&lt;br /&gt;
        aliases = {&#039;orphan&#039;, &#039;r1&#039;, &#039;o2&#039;},&lt;br /&gt;
        criteria = &#039;孤立頁面，例如沒有主頁面的[[MP:TALK|討論頁]]、指向空白頁的[[MP:R|重定向]]等&#039;,&lt;br /&gt;
        deletereason = &#039;孤立頁面&#039;,&lt;br /&gt;
        description = &#039;包括以下幾種類型：1. 沒有對應檔案的檔案頁面；2. 沒有對應母頁面的子頁面，用戶頁子頁面除外；3. 指向不存在頁面的重新導向；4. 沒有對應內容頁面的討論頁，討論頁存檔和用戶討論頁除外；5. 不存在註冊用戶的用戶頁及用戶頁子頁面，localhost對應IP用戶的用戶頁和隨用戶更名產生的用戶頁重新導向除外。請在刪除時注意有無將內容移至他處的必要。不包括在主頁面掛有{{CSD Placeholder}}模板的討論頁。&#039;,&lt;br /&gt;
        check = function(title)&lt;br /&gt;
            if title.rootText == &#039;Liangent~zhwiki&#039; and title:inNamespaces(&#039;User&#039;, &#039;User talk&#039;) then&lt;br /&gt;
                return &#039;不要刪除此頁面。&#039;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;G16&#039;,&lt;br /&gt;
        aliases = {&#039;temp&#039;},&lt;br /&gt;
        criteria = &#039;頁面與介紹相同事物的原始頁面同樣[[MP:侵權|侵權]]&#039;,&lt;br /&gt;
        description = &#039;此條所適用的頁面包括但不限於草稿頁面、主命名空間（條目空間）頁面、用戶空間頁面等介紹相同事物，且在原頁面被提報侵權後建立的頁面。相關頁面不一定要掛上{{Draft Copyvio}}模板。提報時需同時附上已提報侵犯版權頁面的名稱，除非一眼能看出已提報侵犯版權頁面。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
       code = &#039;G17&#039;,&lt;br /&gt;
       aliases = {&#039;wrongdab&#039;, &#039;wd&#039;},&lt;br /&gt;
       criteria = &#039;位於不恰當的命名空間的消歧義頁面&#039;,&lt;br /&gt;
       description = &#039;此項不適用於條目、用戶、專案與草稿命名空間。在提請快速刪除前，請務必先檢查並清理相關消歧義頁面的連入。此項不論頁面是否引用消歧義模板或消歧義訊息模板均適用，惟對消歧義模板及消歧義訊息模板本身不適用。&#039;,&lt;br /&gt;
       check = function(title)&lt;br /&gt;
           if title:inNamespaces(0, &#039;User&#039;, &#039;Wikipedia&#039;, &#039;Draft&#039;) then&lt;br /&gt;
               return &#039;此項不適用於條目、用戶、專案與草稿命名空間。&#039;&lt;br /&gt;
           end&lt;br /&gt;
       end&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;A1&#039;,&lt;br /&gt;
        aliases = {&#039;context&#039;, &#039;g4&#039;},&lt;br /&gt;
        criteria = &#039;内容空泛（包括但不限於沒有定義）&#039;,&lt;br /&gt;
        description = &#039;條目的內容籠統，或甚至根本沒有提及條目主體，使條目不能用以區分其他事物。例如：「他是一個很有趣的人，他建立了工廠和莊園。並且，順便提一下，他的妻子也很好。」「內容空泛」與「沒有實際內容」的分別在於：後者乃是與主題完全無關，或是不知所云；前者可以與主題有一定關係，但沒有明確描述主題（包括但不限於沒有對主題作基本定義）；前者同時包含後者。&#039;,&lt;br /&gt;
        check = reqns(0)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;A2&#039;,&lt;br /&gt;
        aliases = {&#039;text&#039;},&lt;br /&gt;
        criteria = &#039;內容只包括外部链接、参见、图书参考、分类、模板、跨语言链接的条目（[[MP:D|消歧義頁]]、[[MP:R|重定向]]、[[MP:SRD|軟重定向]]除外）&#039;,&lt;br /&gt;
        deletereason = &#039;內容只包括外部链接、参见、图书参考、分类、模板、跨语言链接的条目&#039;,&lt;br /&gt;
        description = &#039;請注意：有些維基人建立條目時會分開多次儲存，請避免刪除有人正在編輯的頁面。帶有{{inuse}}模板的不適用。&#039;,&lt;br /&gt;
        check = reqns(0)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;A3&#039;,&lt;br /&gt;
        aliases = {&#039;g7&#039;},&lt;br /&gt;
        criteria = &#039;複製自其他[[T:Wikimedia project|中文维基项目]]，或是與其他中文维基项目內容相同的文章&#039;,&lt;br /&gt;
        description = &#039;其他「維基專案」指的是：維基詞典、維基教科書、維基語錄、維基文庫、維基物種、維基新聞、維基孵育場、維基學院等，但並不包括與中文維基百科其他條目內容重複之狀況。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;A5&#039;,&lt;br /&gt;
        aliases = {},&lt;br /&gt;
        criteria = &amp;quot;條目建立時之內容即與其他現有條目內容完全相同或非常相似，且名稱不適合作為其他條目之[[MP:R|重定向]]（不包括拆分、合併、重組後產生之條目，或是引用相關資料之條目）&amp;quot;,&lt;br /&gt;
        deletereason = &amp;quot;條目建立時之內容即與其他現有條目內容完全相同或非常相似，且名稱不適合作為其他條目之[[MP:R|重定向]]&amp;quot;,&lt;br /&gt;
        description = &#039;條目被建立時，第一個版本的內容與當時其他現存條目或其歷史版本的全部或部分內容完全相同或非常相似，且這個條目的名稱不適合改為重新導向，就可以提送快速刪除。如果名稱可以作為重新導向，就應直接改重新導向，不要提送快速刪除。如果是多個條目合併產生的新條目，不適用。如果是從主條目拆分產生的條目，不適用；如有疑慮，應提送存廢討論處理。&#039;,&lt;br /&gt;
        check = reqns(0)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;A6&#039;,&lt;br /&gt;
        aliases = {&#039;foreign&#039;},&lt;br /&gt;
        criteria = &#039;复制自其他维基百科语言版本，且完全没有翻译&#039;,&lt;br /&gt;
        description = &#039;如果並不是複製於任何其他的維基百科語言版本，請換用{{notmandarin}}。帶有{{inuse}}和{{translating}}模板的不適用。&#039;,&lt;br /&gt;
        check = reqns(0)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
       code = &#039;R2&#039;,&lt;br /&gt;
       aliases = {&#039;interwk&#039;, &#039;g9&#039;},&lt;br /&gt;
       criteria = &#039;跨[[MP:NS|命名空间]]的[[MP:R|重定向]]&#039;,&lt;br /&gt;
       description = &#039;适用于条目命名空间和草稿命名空间。社群同意設立的[[Wikipedia:捷徑#偽命名空間|偽命名空間]]不适用。草稿重定向速删前，请确保草稿已经完成其作用，且其历史已移动到相应的正式页面。&#039;,&lt;br /&gt;
       check = reqns({0, &#039;Draft&#039;})&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;R3&#039;,&lt;br /&gt;
        aliases = {&#039;wr&#039;},&lt;br /&gt;
        criteria = &#039;格式錯誤，或明显笔误的[[MP:R|重定向]]&#039;,&lt;br /&gt;
        description = &#039;包括標題繁簡混用、消歧義使用的括弧或空格錯誤、間隔號使用錯誤、標題中使用非常見的錯別字。非一眼能看出的拼寫錯誤和翻譯或標題用字的爭議應交由存廢討論處理。將常見的拼寫錯誤名稱重新導向至正確名稱頁面，可使百科用戶縱使在查找文章時拼寫錯誤，也能夠找到尋求的文章。可參閱MP:重新導向#何時用重新導向？。如重新導向名稱與導向目標名稱（或其相關名稱）僅存在合理的大小寫差異及／或重新導向名稱為導向目標名稱（或其相關名稱）的ASCII字母表述的形式（例如Kurt Godel重新導向至Kurt Gödel），不視為存在任何拼寫錯誤。如有對相關大小寫差異是否合理的爭議，應交由存廢討論處理。因類推簡化字未收錄至《通用規範漢字表》導致的繁簡混雜情形，或系統無法自動進行繁簡處理的情形，則不適用。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;R5&#039;,&lt;br /&gt;
        aliases = {&#039;br&#039;},&lt;br /&gt;
        criteria = &#039;指向本身或循环的[[MP:R|重定向]]&#039;,&lt;br /&gt;
        description = &#039;如A→B→C→……→A或A→A。繁簡重新導向不適用此項，請用{{d|R3}}。&#039;,&lt;br /&gt;
        check = function(title)&lt;br /&gt;
            if (title.rootText == &#039;Liangent&#039; or title.rootText == &#039;Liangent~zhwiki&#039;) and title:inNamespaces(&#039;User&#039;, &#039;User talk&#039;) then&lt;br /&gt;
                return &#039;不要删除此页面，见[[phab:T95408]]。&#039;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;R6&#039;,&lt;br /&gt;
        aliases = {},&lt;br /&gt;
        criteria = &#039;移動檔案而產生的[[MP:R|重定向]]，且頁面標題不符合[[MP:FNC|檔案名稱指引]]&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;R7&#039;,&lt;br /&gt;
        aliases = {},&lt;br /&gt;
        criteria = &#039;明顯與導向目標所涵蓋的主題無關或比導向目標所涵蓋的主題更廣泛的[[MP:R|重定向]]&#039;,&lt;br /&gt;
        description = &#039;掛有{{關注度重新導向}}或{{合併重新導向}}模板的頁面不適用，請改為提出存廢討論。如有用戶對標題用字存在未解決的爭議，則應交由存廢討論處理。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
       code = &#039;R8&#039;,&lt;br /&gt;
       aliases = {&#039;dabr&#039;, &#039;dr&#039;},&lt;br /&gt;
       criteria = &#039;帶有「(消歧義)」字樣的重定向&#039;,&lt;br /&gt;
       description = &#039;包括以下幾種類型：1. 無連入的重新導向。（若重新導向頁與導向目標頁同樣帶有「(消歧義)」字樣，且兩者的標題僅存在繁簡／地區詞差異，則不適用。）2. 並非指向消歧義頁面的重新導向。在提請快速刪除前，請務必先檢查並清理（如適用）相關重新導向的連入。如有用戶對應否使用消歧義及消歧義的方式存在未解決的爭議，則應交由存廢討論處理。&#039;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;F1&#039;,&lt;br /&gt;
        aliases = {&#039;i1&#039;, &#039;reppic&#039;},&lt;br /&gt;
        criteria = &#039;重复的檔案（完全相同或缩小），而且不再被條目使用&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;F3&#039;,&lt;br /&gt;
        aliases = {},&lt;br /&gt;
        criteria = &#039;所有在提報後超過5天仍[[:CAT:來源不明檔案|來源不明的檔案]]&#039;,&lt;br /&gt;
        deletereason = &#039;[[:CAT:來源不明檔案|來源不明的檔案]]&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;F4&#039;,&lt;br /&gt;
        aliases = {},&lt;br /&gt;
        criteria = &#039;所有在提報後超過5天仍[[:CAT:未知版权的档案|未知版權或版權無法被查證的檔案]]&#039;,&lt;br /&gt;
        deletereason = &#039;[[:CAT:未知版权的档案|未知版權或版權無法被查證的檔案]]&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;F5&#039;,&lt;br /&gt;
        aliases = {&#039;i5&#039;, &#039;betterpic&#039;},&lt;br /&gt;
        criteria = &#039;被高解析度或[[SVG]]檔案取代的圖片&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;F6&#039;,&lt;br /&gt;
        aliases = {&#039;i6&#039;, &#039;ui&#039;},&lt;br /&gt;
        criteria = &#039;沒有被條目使用的[[MP:合理使用|非自由版权]]檔案会在提交5日后刪除&#039;,&lt;br /&gt;
        deletereason = &#039;沒有被條目使用的[[MP:合理使用|非自由版权]]檔案&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;F7&#039;,&lt;br /&gt;
        aliases = {&#039;i7&#039;, &#039;nowcommons&#039;},&lt;br /&gt;
        criteria = &#039;与[[維基共享資源]]檔案重复的檔案&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;F8&#039;,&lt;br /&gt;
        aliases = {},&lt;br /&gt;
        criteria = &#039;明顯侵權之檔案會在提報5日後刪除&#039;,&lt;br /&gt;
        deletereason = &#039;明顯侵權之檔案&#039;,&lt;br /&gt;
        description = &#039;包括以下兩種情況：1. 上載者宣稱擁有，而在其他來源找到的檔案。2. 檔案宣稱由某作者依據某自由版權協定發佈，但找不到該自由協定的聲明。&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;F9&#039;,&lt;br /&gt;
        aliases = {},&lt;br /&gt;
        criteria = &#039;沒有填寫任何合理使用依據的非自由版權檔案會在提交5日後刪除&#039;,&lt;br /&gt;
        deletereason = &#039;沒有填寫任何合理使用依據的非自由版權檔案&#039;,&lt;br /&gt;
        description = &#039;空白的合理使用依據模板（如{{Non-free use rationale}}）並不視為有效的合理使用依據，另外本方針也不適用於有爭議但完整的合理使用依據。如果非自由版權檔案只有部分條目的使用依據，但同時被使用於未提供合理使用依據的條目，則本方針也不適用，並應將後者使用中的檔案移除。&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;F10&#039;,&lt;br /&gt;
        aliases = {},&lt;br /&gt;
        criteria = &#039;可被替代的非自由版权文件會在提交5日後刪除&#039;,&lt;br /&gt;
        deletereason = &#039;可被替代的非自由版权文件&#039;,&lt;br /&gt;
        description = &#039;檔案僅用於描述、辨識或評論檔案中展示的事物，或僅用作插圖（沒有和檔案內容相關的評論），且滿足以下四個條件之一：有其他自由版權檔案展示相同的事物。檔案描述的是在世或假定在世人物、仍然存在的建築、室外雕塑或仍然在售的商品，且預計自行拍攝的相片不受他人版權保護。檔案為可自行繪製的地圖或圖表。檔案來自商業圖片機構（如Getty）。如果給出了其他合理使用依據（如用於評論檔案本身），不適用本條。如對檔案的可替代性存在爭議，應交檔案存廢討論處理。本條也不適用於正在或曾經由檔案存廢討論處理過的檔案。&#039;,&lt;br /&gt;
        check = reqns(&#039;File&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;O1&#039;,&lt;br /&gt;
        aliases = {&#039;aup&#039;, &#039;o6&#039;},&lt;br /&gt;
        criteria = &#039;用户请求删除自己的[[H:用户页|用户页]]或其子页面&#039;,&lt;br /&gt;
        description = &#039;除了自己的用戶頁，只要是移動而來的頁面，皆須附有合理原因。&#039;,&lt;br /&gt;
        check = reqns(&#039;User&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;O3&#039;,&lt;br /&gt;
        aliases = {&#039;ip&#039;},&lt;br /&gt;
        criteria = &#039;已超過一個月未有編輯動作的匿名（IP）用户的用户[[MP:TALK|讨论页]]，且已完成存檔&#039;,&lt;br /&gt;
        description = &#039;避免給使用同一IP位址的用戶帶來混淆。不適用於用戶討論頁的存檔頁面。&#039;,&lt;br /&gt;
        check = reqns(&#039;User talk&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;O4&#039;,&lt;br /&gt;
        aliases = {&#039;o5&#039;, &#039;uc&#039;},&lt;br /&gt;
        criteria = &#039;空分类&#039;,&lt;br /&gt;
        description = &#039;該分類無收錄任何頁面或子分類。不適用於Category:不要刪除的分類中的空分類。&#039;,&lt;br /&gt;
        check = reqns(&#039;Category&#039;)&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
       code = &#039;O7&#039;,&lt;br /&gt;
       aliases = {},&lt;br /&gt;
       criteria = &#039;廢棄草稿&#039;,&lt;br /&gt;
       description = &#039;任何六個月內無編輯的草稿。「草稿」指：1. 所有位於草稿命名空間的頁面；及2. 所有位於用戶命名空間且含{{AFC submission}}的頁面。若相關編輯為機械人編輯或屬維護性操作，相關編輯應視同不存在。如果編者有意重新繼續編寫，可[[Wikipedia:存廢覆核請求|向管理員請求恢復相關草稿]]。&#039;,&lt;br /&gt;
       check = reqns({&#039;Draft&#039;, &#039;User&#039;})&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        code = &#039;O8&#039;,&lt;br /&gt;
        aliases = {},&lt;br /&gt;
        criteria = &#039;在[[Wikipedia:捷徑#偽命名空間|偽命名空間]]中建立的非[[MP:R|重新導向]]頁面&#039;,&lt;br /&gt;
        description = &#039;偽命名空間僅能用於重新導向。如可以移動到合適的名稱，請將頁面移動到合適的名稱，否則請使用此款快速刪除。若頁面明顯是一個條目，則不適用此款快速刪除。&#039;,&lt;br /&gt;
        check = reqns(0)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%A7%BB%E5%8B%95%E5%88%B0%E8%8D%89%E7%A8%BF&amp;diff=29120</id>
		<title>模板:移動到草稿</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%A7%BB%E5%8B%95%E5%88%B0%E8%8D%89%E7%A8%BF&amp;diff=29120"/>
		<updated>2024-08-04T16:41:08Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{移動}}到[[MP:草稿命名空间|草稿]]&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:投票模板]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Citation_needed&amp;diff=29119</id>
		<title>模板:Citation needed</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Citation_needed&amp;diff=29119"/>
		<updated>2024-08-04T16:41:04Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if: {{{1|&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;}}}|&amp;lt;mark class=&amp;quot;template-facttext&amp;quot; title=&amp;quot;需要提供文献来源&amp;quot;&amp;gt;{{{1|&amp;lt;noinclude&amp;gt;没有来源的文字&amp;lt;/noinclude&amp;gt;}}}&amp;lt;/mark&amp;gt;}}&amp;lt;sup class=&amp;quot;noprint Template-Fact&amp;quot;&amp;gt;[[Micronations:列明来源|&amp;lt;span style=&amp;quot;white-space: nowrap;&amp;quot; title=&amp;quot;来源请求{{#if:{{{time|}}}|开始于{{#time:Y年Fj日|{{{time|&amp;lt;noinclude&amp;gt;{{#time:c}}&amp;lt;/noinclude&amp;gt;}}}}}}}。&amp;quot;&amp;gt;&amp;amp;#91;來源請求&amp;amp;#93;&amp;lt;/span&amp;gt;]]&amp;lt;includeonly&amp;gt;{{namespace||[[Category:{{#if:{{{time|}}}|自{{#time:Y年F|{{{time}}}}}}}有未列明来源语句的条目|{{#switch:{{#if:{{{time|}}}|{{#time:j|{{{time}}}}}}}|1=㏠|2=㏡|3=㏢|4=㏣|5=㏤|6=㏥|7=㏦|8=㏧|9=㏨|10=㏩|11=㏪|12=㏫|13=㏬|14=㏭|15=㏮|16=㏯|17=㏰|18=㏱|19=㏲|20=㏳|21=㏴|22=㏵|23=㏶|24=㏷|25=㏸|26=㏹|27=㏺|28=㏻|29=㏼|30=㏽|31=㏾}}{{#if:{{{date|}}}|旧}}{{#if:{{{time|}}}||无}}{{PAGENAME}}]]}}&amp;lt;/includeonly&amp;gt;&amp;lt;/sup&amp;gt;{{ {{{|safesubst:}}}ifsubst|{{Error|模板使用方法錯誤，請勿[[MP:替換引用]]}}|}}&amp;lt;noinclude&amp;gt;{{模板文档}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29118</id>
		<title>模板:Shortcut/styles.css</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29118"/>
		<updated>2024-08-04T16:41:02Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.shortcutbox {&lt;br /&gt;
	float:right;&lt;br /&gt;
	border:1px solid #aaa;&lt;br /&gt;
	background:#fff;&lt;br /&gt;
	margin:0 0 0 1em;&lt;br /&gt;
	padding:.3em .6em .2em .3em;&lt;br /&gt;
	text-align:center;&lt;br /&gt;
	font-size:85%;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutbox-left {&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutbox-ombox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	border-left: 1px solid #aaa;&lt;br /&gt;
	padding: .4em 0em .4em 1em;&lt;br /&gt;
	text-align: center; &lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: smaller;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutlist {&lt;br /&gt;
	display:inline-block;&lt;br /&gt;
	border-bottom:1px solid #aaa;&lt;br /&gt;
	margin-bottom:.2em;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcut-anchordiv {&lt;br /&gt;
	position:relative;&lt;br /&gt;
	top:-3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain {&lt;br /&gt;
	float:right;&lt;br /&gt;
	border:1px solid #aaa;&lt;br /&gt;
	background:#fff;&lt;br /&gt;
	margin:0 0 0 1em;&lt;br /&gt;
	padding:.3em .6em .2em .6em;&lt;br /&gt;
	text-align:center;&lt;br /&gt;
	font-size:85%;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain-left {&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-omboxshortcutplain {&lt;br /&gt;
	float: right;&lt;br /&gt;
	border-left: 1px solid #aaa;&lt;br /&gt;
	padding: .4em 0em .4em 1em;&lt;br /&gt;
	text-align: center; &lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: smaller;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutlist {&lt;br /&gt;
	display:inline-block;&lt;br /&gt;
	border-bottom:1px solid #aaa;&lt;br /&gt;
	margin-bottom:.2em;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutanchordiv {&lt;br /&gt;
	position:relative;&lt;br /&gt;
	top:-3em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Draft_article/doc&amp;diff=29117</id>
		<title>模板:Draft article/doc</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Draft_article/doc&amp;diff=29117"/>
		<updated>2024-08-04T16:40:51Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;草稿&#039;&#039;&#039;用來儲存尚未準備正式公開的未來條目，或存放可能暫不滿足微國家百科[[MP:關注度|關注度指引]]的條目。這些條目一般創於[[微國家百科:草稿命名空間|草稿命名空間]]，以免一般讀者不經意地看到它們。在草稿條目頂部貼上&amp;lt;code&amp;gt;{&amp;amp;#123;[[Template:Draft article|{{lcfirst:Draft article}}]]&amp;amp;#125;}&amp;lt;/code&amp;gt;能進一步明示這&amp;lt;u&amp;gt;是&amp;lt;/ u&amp;gt;草稿。掛有此範本的項目會歸類於[[:Category:草稿條目]]。&lt;br /&gt;
&lt;br /&gt;
欲對既存頁面大幅修訂而撰寫草稿，可以使用[[Template:Draft]]模板（不限條目頁面）。&lt;br /&gt;
&lt;br /&gt;
== 範例 ==&lt;br /&gt;
{|&lt;br /&gt;
! 程式碼 !! 效果&lt;br /&gt;
|-&lt;br /&gt;
| nowrap=&amp;quot;nowrap&amp;quot;|{{tlx|Draft article}}&lt;br /&gt;
| {{Delcat|{{msg:Draft article}}}}&lt;br /&gt;
|-&lt;br /&gt;
| nowrap=&amp;quot;nowrap&amp;quot;|{{tlx|Draft article|老人與海}}&lt;br /&gt;
| {{Delcat|{{msg:Draft article|老人與海}}}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;br /&gt;
* {{tlx|Draft Copyvio}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- CATEGORIES AND INTERWIKIS HERE, THANKS --&amp;gt;&lt;br /&gt;
[[Category:微國家百科維護模板|{{PAGENAME}}]]&lt;br /&gt;
[[Category:草稿頁模板|{{PAGENAME}}]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Template_shortcut&amp;diff=29116</id>
		<title>模板:Template shortcut</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Template_shortcut&amp;diff=29116"/>
		<updated>2024-08-04T16:40:49Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;shortcutbox shortcutbox-left plainlist plainlinks noprint&amp;quot; style=&amp;quot;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#switch:{{{clear|}}} |true=clear:{{{float|right}}}; |left|right|both=clear:{{{clear|}}}; |#default=}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;float: {{#ifeq:{{{float|}}}|left|left|right}};&amp;lt;!--&lt;br /&gt;
--&amp;gt;margin: {{{top|0em}}} {{#ifeq:{{{float|}}}|left|1em 0em 0em|0em 0em 1em}};&amp;lt;!--&lt;br /&gt;
--&amp;gt;border: 1px solid var(--border-color-base,#aaa); background: var(--background-color-base,#fff); padding: 0.3em 0.6em 0.2em 0.6em; text-align: center; font-size: 85%; font-weight: bold;color: inherit;&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Adding the shortcut links:&lt;br /&gt;
--&amp;gt;&amp;lt;div style=&amp;quot;display: inline-block; border-bottom: 1px solid #aaa; line-height: 1.5em; font-weight: normal; margin-bottom: .2em;&amp;quot;&amp;gt;{{#if:{{{redirect|}}} |重定向 |[[MP:捷徑|捷徑]]}}&amp;lt;/div&amp;gt; {{bulleted list&lt;br /&gt;
    | {{#if: {{{1|&amp;lt;noinclude&amp;gt;{{PAGENAME}}&amp;lt;/noinclude&amp;gt;}}} | &amp;amp;#123;&amp;amp;#123;{{{pre|}}}{{#ifexist:Template:{{{1}}}  |[{{fullurl:Template:{{{1}}}|redirect=no}} {{#if:true|{{{1}}}}}]  |[[Template:{{{1|&amp;lt;noinclude&amp;gt;{{PAGENAME}}&amp;lt;/noinclude&amp;gt;}}}|{{#if:true|{{{1|&amp;lt;noinclude&amp;gt;{{PAGENAME}}&amp;lt;/noinclude&amp;gt;}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; | {{#if:{{{2|}}} | &amp;amp;#123;&amp;amp;#123;{{{pre2|}}}{{#ifexist:Template:{{{2}}} |[{{fullurl:Template:{{{2}}}|redirect=no}} {{#if:true|{{{2}}}}}]  |[[Template:{{{2}}}|{{#if:true|{{{2}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; | {{#if:{{{3|}}} | &amp;amp;#123;&amp;amp;#123;{{{pre3|}}}{{#ifexist:Template:{{{3}}} |[{{fullurl:Template:{{{3}}}|redirect=no}} {{#if:true|{{{3}}}}}]  |[[Template:{{{3}}}|{{#if:true|{{{3}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; | {{#if:{{{4|}}} | &amp;amp;#123;&amp;amp;#123;{{{pre4|}}}{{#ifexist:Template:{{{4}}} |[{{fullurl:Template:{{{4}}}|redirect=no}} {{#if:true|{{{4}}}}}]  |[[Template:{{{4}}}|{{#if:true|{{{4}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; | {{#if:{{{5|}}} | &amp;amp;#123;&amp;amp;#123;{{{pre5|}}}{{#ifexist:Template:{{{5}}} |[{{fullurl:Template:{{{5}}}|redirect=no}} {{#if:true|{{{5}}}}}]  |[[Template:{{{5}}}|{{#if:true|{{{5}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; | {{#if:{{{6|}}} | &amp;amp;#123;&amp;amp;#123;{{{pre6|}}}{{#ifexist:Template:{{{6}}} |[{{fullurl:Template:{{{6}}}|redirect=no}} {{#if:true|{{{6}}}}}]  |[[Template:{{{6}}}|{{#if:true|{{{6}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; | {{#if:{{{7|}}} | &amp;amp;#123;&amp;amp;#123;{{{pre7|}}}{{#ifexist:Template:{{{7}}} |[{{fullurl:Template:{{{7}}}|redirect=no}} {{#if:true|{{{7}}}}}]  |[[Template:{{{7}}}|{{#if:true|{{{7}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; | {{#if:{{{8|}}} | &amp;amp;#123;&amp;amp;#123;{{{pre8|}}}{{#ifexist:Template:{{{8}}} |[{{fullurl:Template:{{{8}}}|redirect=no}} {{#if:true|{{{8}}}}}]  |[[Template:{{{8}}}|{{#if:true|{{{8}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; | {{#if:{{{9|}}} | &amp;amp;#123;&amp;amp;#123;{{{pre9|}}}{{#ifexist:Template:{{{9}}} |[{{fullurl:Template:{{{9}}}|redirect=no}} {{#if:true|{{{9}}}}}]  |[[Template:{{{9}}}|{{#if:true|{{{9}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; | {{#if:{{{10|}}} | &amp;amp;#123;&amp;amp;#123;{{{pre10|}}}{{#ifexist:Template:{{{10}}} |[{{fullurl:Template:{{{10}}}|redirect=no}} {{#if:true|{{{10}}}}}]  |[[Template:{{{10}}}|{{#if:true|{{{10}}}}}]]}}&amp;amp;#125;&amp;amp;#125; }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E6%96%B9%E9%87%9D%E8%88%87%E6%8C%87%E5%BC%95&amp;diff=29115</id>
		<title>微國家百科:方針與指引</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E6%96%B9%E9%87%9D%E8%88%87%E6%8C%87%E5%BC%95&amp;diff=29115"/>
		<updated>2024-08-04T16:40:37Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Policy|=Procedural|MP:PG|MP:RULES|MP:POL|MP:規則}}&lt;br /&gt;
{{Nutshell|微國家百科的方針與指引是用于描述社群所認為的最佳實踐的頁面。本頁面描述了如何完善及維護微國家百科的方針與指引。}}&lt;br /&gt;
{{方針列表}}&lt;br /&gt;
{{指引列表}}&lt;br /&gt;
微國家百科的方針與指引均由社群訂立，志於列出最佳做法、闡明原則及解決紛爭，以求最終成就自由而可靠的百科全書。雖然如此，用戶編輯前毋須事先閱讀方針或指引頁面。而微國家百科[[微國家百科:五大觀念|五大觀念]]作為本站基石，就歸納了各項重要原則及概念。&lt;br /&gt;
&lt;br /&gt;
一般而言，微國家百科方針指引[[微國家百科:微國家百科不是什么#微國家百科不是官僚體系|並非硬性規定]]，方針與指引僅列出了各項原則及社群認可的最佳做法。方針所列規範，為編者所應通常遵守；而指引則用以列出各個具體情況下標準做法為何，以資遵守方針所列規範。在援引或執行方針指引時，應始終保持理性及符合[[微國家百科:何謂忽略所有規則#使用常識|常識]]。&lt;br /&gt;
&lt;br /&gt;
== 管理委員會 ==&lt;br /&gt;
通常而言，微國家百科由社群自我管理、自我運營。方針與指引反映了社群的[[微國家百科:共識|共識]]；然因微國家百科由[[微國家百科管理委員會]]營運，故管理委員會仍保留其部分法律權利。&lt;br /&gt;
&lt;br /&gt;
== 種類 ==&lt;br /&gt;
{{Further|微國家百科:方針、指引和論述間的差別}}&lt;br /&gt;
{{Anchor|Policies|policies|方針|方針}}&#039;&#039;&#039;方針&#039;&#039;&#039;在編輯者社群獲廣泛接受，描述所有使用者&#039;&#039;&#039;通常應該遵守&#039;&#039;&#039;的標準。方針頁面可在[[模板:微國家百科 policies and guidelines|相關模板]]及[[:分類:微國家百科方針與指引|分類]]中找到。&lt;br /&gt;
&lt;br /&gt;
{{Anchor|Guidelines|guides|guide|指引}}&#039;&#039;&#039;指引&#039;&#039;&#039;是共識所支持的最佳做法。編輯者應&#039;&#039;&#039;嘗試遵守&#039;&#039;&#039;指引，但最好仍要以常識判斷是否合適，因為不排除會有例外情况。指引頁面可在[[模板:微國家百科 policies and guidelines]]及[[:分類:微國家百科方針與指引|分類:微國家百科方針與指引]]、[[模板:指引列表]]中找到。請於增減指引時一併修改。&lt;br /&gt;
&lt;br /&gt;
{{Anchor|Essays|論述|論述}}&#039;&#039;&#039;[[微國家百科:論述|論述]]&#039;&#039;&#039;是一個或一群編輯者的意見或建議，但&#039;&#039;&#039;尚未達到普遍共識&#039;&#039;&#039;。論述不能代表整個社群，可以不經過批准而創造及編寫。論述頁面可以在[[:分類:微國家百科論述]]中找到。&lt;br /&gt;
&lt;br /&gt;
其他在微國家百科命名空間的頁面包括：&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;流程頁&#039;&#039;&#039;：用於執行方針與指引的輔助頁面（如[[微國家百科:頁面存廢討論]]）；&lt;br /&gt;
* &#039;&#039;&#039;幫助頁&#039;&#039;&#039;：（也可在幫助命名空間中找到）主要提供技術操作資訊；&lt;br /&gt;
* &#039;&#039;&#039;資訊頁&#039;&#039;&#039;：通常用於提供事實資訊；&lt;br /&gt;
* &#039;&#039;&#039;方針指引補充說明頁&#039;&#039;&#039;：補充說明方針指引，並詳细解釋相關建議；&lt;br /&gt;
* &#039;&#039;&#039;社群討論頁和編輯者公告板&#039;&#039;&#039;：供編輯者交流；&lt;br /&gt;
* &#039;&#039;&#039;歷史頁面&#039;&#039;&#039;：已經過時或失效，保留以供參考的頁面。&lt;br /&gt;
&lt;br /&gt;
上述頁面各有其價值，但皆非方針或指引。&lt;br /&gt;
&lt;br /&gt;
== 基本 ==&lt;br /&gt;
{{Further|微國家百科:五大觀念}}&lt;br /&gt;
參與微國家百科前，您不需要了解微國家百科的所有方針和指引，但以下方針對微國家百科來說非常重要，建議您儘早了解它們：&lt;br /&gt;
#&#039;&#039;&#039;避免偏頗&#039;&#039;&#039;：所有條目請以[[微國家百科:中立的觀點|中立觀點]]撰寫，公正表述該主题的不同觀點。&lt;br /&gt;
#&#039;&#039;&#039;不侵犯著作權&#039;&#039;&#039;：微國家百科是在&#039;&#039;&#039;創用CC 姓名標示-相同方式分享 4.0協議&#039;&#039;&#039;和&#039;&#039;&#039;GNU自由文档许可证&#039;&#039;&#039;下發布的自由百科全書。向微國家百科提交侵犯著作權的作品將威脅我們構建一部可由任何人編輯的真正自由百科全書的目標，並可能引起法律問題。請參閱[[微國家百科:版權資訊|微國家百科著作權]]了解更多資訊。&lt;br /&gt;
#&#039;&#039;&#039;微國家百科是百科全書&#039;&#039;&#039;：我們專注於百科全書的編寫，且僅此而已。請參閱《[[微國家百科:微國家百科不是什麼|微國家百科不是什麼]]》了解更多資訊。&lt;br /&gt;
#&#039;&#039;&#039;尊重其他參與者&#039;&#039;&#039;：微國家百科的參與者来自許多不同的國家、地區與文化背景，並有廣為不同的立場及觀點。尊重他人是我們有效協作築建一部百科全書的關鍵。請參閱《[[微國家百科:禮儀|禮儀]]》、《[[微國家百科:在任何時候保持冷靜|在任何時候保持冷靜]]》和《[[微國家百科:文明|文明]]》等相關指引。&lt;br /&gt;
&lt;br /&gt;
== 程序事項 ==&lt;br /&gt;
=== 確立方針及指引 ===&lt;br /&gt;
{{Anchor|proposal}}&lt;br /&gt;
{{Shortcut|MP:PROPOSAL}}&lt;br /&gt;
微國家百科中方針及指引主要經由[[微國家百科:共識|共識]]制定。這些共識可以透過对對複雜難題的公開辯論或簡單地從既有慣例發展出來。在大多數情况，被人們接受的標準並不會立即正式寫下来。因此，本頁及其他頁面上有關微國家百科方針及指引的敘述，是用來描述那些經長期發展而成的既有社群準則。&lt;br /&gt;
&lt;br /&gt;
對各項方針及指引的討論集中在[[微國家百科:互助客棧|互助客棧]]以及專門的[[微國家百科:討論|討論]]子頁面。各項提議中的方針和指引則集中在[[:分類:微國家百科提議]]。方針及指引的問題也可在各討論頁形成並討論。但是請記住，若要正規化一項方針或指引，就必須在微國家百科本身得到大家同意。如果一項方針提案可能引起爭議，就必須在正式采納前先行討論。请參考論述《[[微國家百科:修改和創建方針|修改和創建方針]]》。有的時候，[[微國家百科:投票|投票]]是有用的，但投票必須建立在先前討論的基礎上，並旨在達成一致共識。&lt;br /&gt;
&lt;br /&gt;
總體來講，有三種方式去制訂某項方針或指引：&lt;br /&gt;
* 由[[微國家百科管理委員會]]制定及頒布。&lt;br /&gt;
* 一項提案經討論取得共識後獲正式採用。&lt;br /&gt;
* 逐漸演化出的常規或慣例。將方針正式化的觀點已在互助客棧以及相關的條目對話頁上公示，持續一段合理時間，並且所有的反對意見都已經妥善處理。&lt;br /&gt;
&lt;br /&gt;
由既有慣例產生的傳統有時難以鑑别。如果某項慣例没有受到反對，可能會難以將社群的注意維持足夠長时间，以完成採納方針的正式程序。在這種情况，最好的解決辦法可能是把現有慣例記載於適當的頁面。這樣提供一個討論該項慣例及可能修改方針或指引的地點，並讓人們在需要時能引證有關方針或指引的出處。&lt;br /&gt;
&lt;br /&gt;
=== 修訂方針指引要注意的事情 ===&lt;br /&gt;
{{Shortcut|MP:RULESEDIT|MP:提案要說明問題}}&lt;br /&gt;
維基方針或指引並非不能改，而且在實踐的過程中，可能會遇到一些問題，而這問題又可能令社羣難於依從，這時修改方針或指引就有必要。修改方針或指引時應先仔細閱讀相關方針或指引，也應看看之前的修訂討論，這樣才能更深入瞭解方針或指引背後的精神。使用者在提案修改方針或指引時，應先清楚說明「現在的問題」、「使用者的解決方案」。互助客棧頁面說明有按鈕「立即發表新議題」，按下去就能看到修改方針或指引的提案框架，提案人也可以參考那個提案框架。&lt;br /&gt;
&lt;br /&gt;
=== 方針及指引頁面的命名規則 ===&lt;br /&gt;
為保證方針頁面名稱指代清晰明確，在命名微國家百科命名空間的方針頁面時，可依據情况選擇性的使用「方針」詞綴。&lt;br /&gt;
* 若選擇使用「方針」詞缀，則名稱格式為{{red|「微國家百科:」+「（内容描述）」+「方針」}}，不得使用其他詞彙替代「方針」詞綴，也不得修飾「方針」詞缀，如不要命名为“○○正式方針”。&lt;br /&gt;
* 若不選擇使用「方針」詞缀，則名稱格式為{{red|「微國家百科:」+「（内容描述）」}}，不得以其他詞會再現“方針”含意，如不要命名为“○○指南”、“○○守則”。&lt;br /&gt;
* 非微國家百科命名空間的頁面不得使用“方針”詞綴。&lt;br /&gt;
* 命名微國家百科命名空間的指引頁面名時以此類推。&lt;br /&gt;
不過，《[[微國家百科:命名常規|命名常規]]》和《[[微國家百科:格式手冊|格式手冊]]》頁面维持原名，不依以上規則修正。&lt;br /&gt;
&lt;br /&gt;
=== 方針及指引的用詞 ===&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
!{{nowrap|建議用詞}}!!等義用詞!!說明&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|必須&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|須、務必&lt;br /&gt;
|表達強制滿足的條件，操作不滿足條件須被撤銷。&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|不得&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|{{nowrap|不可以、不可}}&lt;br /&gt;
|表達絕對禁止的條件，操作符合禁止的條件須被撤銷。&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|應該&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|應、應當&lt;br /&gt;
|表達強烈推薦但非強制滿足的條件，操作不滿足條件需要解釋、其他人可提醒，但不是必須撤銷。&amp;lt;div style=&amp;quot;font-size:smaller;&amp;quot;&amp;gt;註：方針非法律，此類用詞不用在強制的情況。&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|不應該&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|不應&lt;br /&gt;
|表達做法強烈不推薦的條件，若操作符合不推薦的條件應改掉。&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|建議&lt;br /&gt;
|{{n/a}}&lt;br /&gt;
|表達推薦但沒達到不需要解釋的條件，但可作提醒。&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|可以&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot;|可&lt;br /&gt;
|表達獲允許、有權做的條件。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 執行方針及指引 ===&lt;br /&gt;
&#039;&#039;&#039;您&#039;&#039;&#039;就是一名微國家百科編輯。&#039;&#039;&#039;微國家百科没有「總編」&#039;&#039;&#039;，也没有一个自上而下的中央機制來監視並批准微國家百科的日常進展。與此相反，活躍的參與者修訂或改正他們發現的内容及格式問題。微國家百科的[[微國家百科:百科人|參與者]]既是作者又是編輯。&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
{{See also|微國家百科:方針指引總覽}}&lt;br /&gt;
* [[微國家百科:方針列表|微國家百科方針列表]]（[[:Category:微國家百科方針|分類]]）&lt;br /&gt;
* [[微國家百科:指引列表|微國家百科指引列表]]（[[:Category:微國家百科指引|分類]]）&lt;br /&gt;
* [[微國家百科:修改和創建方針|如何修改和創建方針]]&lt;br /&gt;
* [[:Category:微國家百科提議|微國家百科提議]]：可能成為新方針的觀點提案。&lt;br /&gt;
* [[:Category:微國家百科退回提議|微國家百科退回提議]]：已拒絕或放棄的方針觀點。&lt;br /&gt;
* 檢查最近對[[Special:RecentChangesLinked/Category:微國家百科方針|方針]]和[[Special:RecentChangesLinked/Category:微國家百科指引|指引]]的修改。&lt;br /&gt;
{{微國家百科 policies and guidelines}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=MP:%E6%A0%BC%E5%BC%8F&amp;diff=29114</id>
		<title>MP:格式</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=MP:%E6%A0%BC%E5%BC%8F&amp;diff=29114"/>
		<updated>2024-08-04T16:40:35Z</updated>

		<summary type="html">&lt;p&gt;Admin：​Admin已移動頁面WP:格式至MP:格式，不留重新導向：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[微國家百科:格式手冊]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29113</id>
		<title>模板:Shortcut/styles.css</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Shortcut/styles.css&amp;diff=29113"/>
		<updated>2024-08-04T16:40:28Z</updated>

		<summary type="html">&lt;p&gt;Admin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.shortcutbox {&lt;br /&gt;
	float:right;&lt;br /&gt;
	border:1px solid #aaa;&lt;br /&gt;
	background:#fff;&lt;br /&gt;
	margin:0 0 0 1em;&lt;br /&gt;
	padding:.3em .6em .2em .78em;&lt;br /&gt;
	text-align:center;&lt;br /&gt;
	font-size:85%;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutbox-left {&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutbox-ombox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	border-left: 1px solid #aaa;&lt;br /&gt;
	padding: .4em 0em .4em 1em;&lt;br /&gt;
	text-align: center; &lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: smaller;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcutlist {&lt;br /&gt;
	display:inline-block;&lt;br /&gt;
	border-bottom:1px solid #aaa;&lt;br /&gt;
	margin-bottom:.2em;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.shortcut-anchordiv {&lt;br /&gt;
	position:relative;&lt;br /&gt;
	top:-3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain {&lt;br /&gt;
	float:right;&lt;br /&gt;
	border:1px solid #aaa;&lt;br /&gt;
	background:#fff;&lt;br /&gt;
	margin:0 0 0 1em;&lt;br /&gt;
	padding:.3em .6em .2em .6em;&lt;br /&gt;
	text-align:center;&lt;br /&gt;
	font-size:85%;&lt;br /&gt;
	font-weight:bold;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutboxplain-left {&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-omboxshortcutplain {&lt;br /&gt;
	float: right;&lt;br /&gt;
	border-left: 1px solid #aaa;&lt;br /&gt;
	padding: .4em 0em .4em 1em;&lt;br /&gt;
	text-align: center; &lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: smaller;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutlist {&lt;br /&gt;
	display:inline-block;&lt;br /&gt;
	border-bottom:1px solid #aaa;&lt;br /&gt;
	margin-bottom:.2em;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.module-shortcutanchordiv {&lt;br /&gt;
	position:relative;&lt;br /&gt;
	top:-3em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Central_conception&amp;diff=29112</id>
		<title>模板:Central conception</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E6%A8%A1%E6%9D%BF:Central_conception&amp;diff=29112"/>
		<updated>2024-08-04T16:40:16Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ombox&lt;br /&gt;
| type       = notice&lt;br /&gt;
| image      = [[File:Dialog-information_red.svg|40px|link=|alt=]]&lt;br /&gt;
| imageright = {{{shortcutoverride|{{#if:{{{1&amp;lt;includeonly&amp;gt;|&amp;lt;/includeonly&amp;gt;}}} | {{Ombox/Shortcut|{{{1|&amp;lt;noinclude&amp;gt;MP:SHORT&amp;lt;/noinclude&amp;gt;}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}} }} }}}}}&lt;br /&gt;
| text       = &#039;&#039;&#039;本觀念對微國家百科十分重要&#039;&#039;&#039;，是微國家百科運作的[[微國家百科:五大觀念|基石]]，具有悠久的歷史及深遠的意義。}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;[[Category:微國家百科重要觀念]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=MP:SHORT&amp;diff=29111</id>
		<title>MP:SHORT</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=MP:SHORT&amp;diff=29111"/>
		<updated>2024-08-04T16:39:58Z</updated>

		<summary type="html">&lt;p&gt;Admin：​Admin已移動頁面WP:SHORT至MP:SHORT，不留重新導向：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[微國家百科:捷徑]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=MP:SD&amp;diff=29110</id>
		<title>MP:SD</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=MP:SD&amp;diff=29110"/>
		<updated>2024-08-04T16:39:48Z</updated>

		<summary type="html">&lt;p&gt;Admin：​Admin已移動頁面WP:SD至MP:SD，不留重新導向：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[微國家百科:快速刪除方針]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E4%BA%94%E5%A4%A7%E8%A7%80%E5%BF%B5&amp;diff=29109</id>
		<title>微國家百科:五大觀念</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=%E5%BE%AE%E5%9C%8B%E5%AE%B6%E7%99%BE%E7%A7%91:%E4%BA%94%E5%A4%A7%E8%A7%80%E5%BF%B5&amp;diff=29109"/>
		<updated>2024-08-04T16:39:44Z</updated>

		<summary type="html">&lt;p&gt;Admin：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{重要觀念|MP:5|MP:5P|MP:FIVE|MP:PILLARS}}&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:左; cellpadding=1;&amp;quot; border=0px;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;padding-bottom: 1em&amp;quot; | 微國家百科的基礎準則可以總結為&#039;&#039;&#039;五大觀念&#039;&#039;&#039;：&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; font-size:60px; padding-right: 16px; padding-left: 16px;&amp;quot; | &#039;&#039;&#039;①&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;line-height:20px;&amp;quot; | {{Anchor|1|Blue|Encyclopedia}}&amp;lt;big&amp;gt;&#039;&#039;&#039;微國家百科是微國家的百科全書&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-bottom: 1em;&amp;quot;| 這意味百科裏出現的是準確、客觀且經整理後重要的資訊，而非原創研究、發表個人意見、觀點及討論，和未經整理或過於零碎的資料的地方，更不是您的夢想工房 — 畢意大英百科全書內也不會有一些未經證實的瑣碎資料吧。&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;center&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; font-size:60px; padding-right: 16px; padding-left: 16px;&amp;quot; | &#039;&#039;&#039;②&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;line-height:20px; padding-top:.7em;&amp;quot; | {{Anchor|2|Green|NPOV}}&amp;lt;big&amp;gt;&#039;&#039;&#039;微國家百科建基於中立觀點&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-bottom: 1em&amp;quot;| 這代表我們必須按中立、準確及平等的立場撰寫條目，並準確地表達各方向觀點，而不可將其中一部分觀點標榜或演繹為「最優選觀點」甚或「真理」。因此，在撰寫時應盡量引用可供查證的資料，保障條目內容的中立性和可靠性。而當條目的中立性有爭議之時，管理員可為條目掛上爭議性模板及設立冷靜期，並在這期間盡量尋找可供引用且查證的資料，及透過條目的討論頁或各社交媒體解決條目之中立性問題。&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;center&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; font-size:60px; padding-right: 16px; padding-left: 16px;&amp;quot; | &#039;&#039;&#039;③&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;line-height:20px; padding-top:.7em;&amp;quot; | {{Anchor|Mercilessly|3|Yellow|Free}}&amp;lt;big&amp;gt;&#039;&#039;&#039;微國家百科內容可供分享&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-bottom: 1em&amp;quot;| 微國家百科所做的貢獻會依據 Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) 授權條款開放，而所有人均可自由地分享及修改本百科內的內容，但需標示內容出自本百科，亦不得將本百科的內容用於商業性用途，或對所分享的用戶增加額外限制。基於這個原則，您所貢獻的所有內容均會開放給社群內所有用戶編輯和發布。所以在未經授權的情況下，請不要提交有版權的作品，否則您的帳戶可能會被遭到封禁。&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; font-size:60px; padding-right: 16px; padding-left: 16px;&amp;quot; | &#039;&#039;&#039;④&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;line-height:20px; padding-top:.7em;&amp;quot; | {{Anchor|4|Orange|Code of conduct|Etiquette}}&amp;lt;big&amp;gt;&#039;&#039;&#039;微國家百科用戶相互尊重&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-bottom: 1em&amp;quot;| 各位百科用戶相信都是有禮貌的人，所以就算不同意其他用戶的觀點，也請尊重他們，以和平討論和達成共識，替代人身攻擊及無差別的概括言論攻擊，同時也以保持開放、好客、包容和積極的心態參與討論，並在討論白熱化時保持冷靜，避免罵戰及編輯戰的出現。也請不要為闡釋觀點而擾亂百科，並請假定其他用戶是善意的。如被封禁，您可以進行封禁申訴，但請不要使用傀儡繞過封禁繼續編輯，甚至繼續進行破壞。&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;center&amp;quot;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; font-size:60px; padding-right: 16px; padding-left: 16px;&amp;quot; | &#039;&#039;&#039;⑤&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;line-height:20px; padding-top:.7em;&amp;quot; | {{Anchor|5|Red|IAR}}&amp;lt;big&amp;gt;&#039;&#039;&#039;微國家百科不墨守成規&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-bottom: 1em&amp;quot; | 微國家作為一個新建的百科，其方針及指引制定未必很完善，但也並非板上釘釘不可更改，而是可以藉由用戶反映逐漸發展完善。因此，方針和指引所藴含的原則和精神比現今字面上的措辭更為重要，同時允許例外狀況的出現，因此最重要的是要大膽而慎重地創建和編輯百科每一項條目，記錄下自己國家的重要事件。&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.micropedia.site/index.php?title=MP:G2&amp;diff=29108</id>
		<title>MP:G2</title>
		<link rel="alternate" type="text/html" href="https://www.micropedia.site/index.php?title=MP:G2&amp;diff=29108"/>
		<updated>2024-08-04T16:39:20Z</updated>

		<summary type="html">&lt;p&gt;Admin：​Admin已移動頁面WP:G2至MP:G2，不留重新導向：​文字取代 - &amp;quot;WP:&amp;quot; 取代為 &amp;quot;MP:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[微國家百科:快速刪除方針#G2]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>