<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Twinkle.js</id>
	<title>MediaWiki:Gadget-Twinkle.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Twinkle.js"/>
	<link rel="alternate" type="text/html" href="https://zybkcn.com/w/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;action=history"/>
	<updated>2026-05-04T09:01:22Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://zybkcn.com/w/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;diff=26450&amp;oldid=prev</id>
		<title>2022年12月8日 (四) 08:25 入我相思门</title>
		<link rel="alternate" type="text/html" href="https://zybkcn.com/w/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;diff=26450&amp;oldid=prev"/>
		<updated>2022-12-08T08:25:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2022年12月8日 (四) 16:25的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l144&quot;&gt;第144行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第144行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	FwdCsdToXfd: Morebits.userIsSysop,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	FwdCsdToXfd: Morebits.userIsSysop,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afdDefaultCategory: &amp;#039;delete&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afdDefaultCategory: &amp;#039;delete&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afdFameDefaultReason: &#039;沒有足夠的可靠資料來源能夠讓這個條目符合[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia&lt;/del&gt;:關注度]]中的標準&#039;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afdFameDefaultReason: &#039;沒有足夠的可靠資料來源能夠讓這個條目符合[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;中医百科&lt;/ins&gt;:關注度]]中的標準&#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afdSubstubDefaultReason: &amp;#039;過期小小作品&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	afdSubstubDefaultReason: &amp;#039;過期小小作品&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	XfdClose: Morebits.userIsSysop ? &amp;#039;all&amp;#039; : &amp;#039;hide&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	XfdClose: Morebits.userIsSysop ? &amp;#039;all&amp;#039; : &amp;#039;hide&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l158&quot;&gt;第158行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第158行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	batchMax: 5000,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	batchMax: 5000,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	batchChunks: 50,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	batchChunks: 50,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	configPage: &#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia&lt;/del&gt;:Twinkle/参数设置&#039;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	configPage: &#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;中医百科&lt;/ins&gt;:Twinkle/参数设置&#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	projectNamespaceName: mw.config.get(&amp;#039;wgFormattedNamespaces&amp;#039;)[4],&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	projectNamespaceName: mw.config.get(&amp;#039;wgFormattedNamespaces&amp;#039;)[4],&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	sandboxPage: &#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wikipedia&lt;/del&gt;:沙盒&#039;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	sandboxPage: &#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;中医百科&lt;/ins&gt;:沙盒&#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	// Deprecated options, as a fallback for add-on scripts/modules&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	// Deprecated options, as a fallback for add-on scripts/modules&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>入我相思门</name></author>
	</entry>
	<entry>
		<id>https://zybkcn.com/w/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;diff=26343&amp;oldid=prev</id>
		<title>鹿野耕云：​创建页面，内容为“/**  * vim: set noet sts=0 sw=8:  * +-------------------------------------------------------------------------+  * |                       === 警告：全局小工具文件 ===                        |  * |                      对此文件的修改会影响许多用户。                        |  * |                           修改前请联系维护者。                            |  * +----------------------------------------------------------------------…”</title>
		<link rel="alternate" type="text/html" href="https://zybkcn.com/w/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;diff=26343&amp;oldid=prev"/>
		<updated>2022-12-06T12:13:01Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“/**  * vim: set noet sts=0 sw=8:  * +-------------------------------------------------------------------------+  * |                       === 警告：全局小工具文件 ===                        |  * |                      对此文件的修改会影响许多用户。                        |  * |                           修改前请联系维护者。                            |  * +----------------------------------------------------------------------…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * vim: set noet sts=0 sw=8:&lt;br /&gt;
 * +-------------------------------------------------------------------------+&lt;br /&gt;
 * |                       === 警告：全局小工具文件 ===                        |&lt;br /&gt;
 * |                      对此文件的修改会影响许多用户。                        |&lt;br /&gt;
 * |                           修改前请联系维护者。                            |&lt;br /&gt;
 * +-------------------------------------------------------------------------+&lt;br /&gt;
 *&lt;br /&gt;
 * 从Github导入 [https://github.com/Xi-Plus/twinkle]&lt;br /&gt;
 * 所有修改都應該在儲存庫中進行，否則將在下次更新時遺失。&lt;br /&gt;
 *&lt;br /&gt;
 * ----------&lt;br /&gt;
 *&lt;br /&gt;
 * 这是Xiplus版本的Twinkle，是新手、管理员及他们之间的用户的&lt;br /&gt;
 * 好帮手。请参见[[WP:TW]]以获取更多信息。&lt;br /&gt;
 */&lt;br /&gt;
// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* global Morebits */&lt;br /&gt;
&lt;br /&gt;
(function (window, document, $) { // Wrap with anonymous function&lt;br /&gt;
&lt;br /&gt;
// Check if account is experienced enough to use Twinkle&lt;br /&gt;
if (!Morebits.userIsInGroup(&amp;#039;autoconfirmed&amp;#039;) &amp;amp;&amp;amp; !Morebits.userIsInGroup(&amp;#039;confirmed&amp;#039;)) {&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var Twinkle = {};&lt;br /&gt;
window.Twinkle = Twinkle;  // allow global access&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Twinkle-specific data shared by multiple modules&lt;br /&gt;
 * Likely customized per installation&lt;br /&gt;
 */&lt;br /&gt;
// Custom change tag(s) to be applied to all Twinkle actions, create at Special:Tags&lt;br /&gt;
Twinkle.changeTags = &amp;#039;Twinkle&amp;#039;;&lt;br /&gt;
// Available for actions that don&amp;#039;t (yet) support tags&lt;br /&gt;
// currently: FlaggedRevs and PageTriage&lt;br /&gt;
Twinkle.summaryAd = &amp;#039; ([[WP:TW|TW]])&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// Various hatnote templates, used when tagging (csd/xfd/tag/prod/protect) to ensure [[w:en:MOS:ORDER]]&lt;br /&gt;
Twinkle.hatnoteRegex = &amp;#039;(?:Short[ _]description)|(?:Rellink|Hatnote|HAT)|(?:Main|细节|細節|Main[ _]articles|主条目|主條目|Hurricane[ _]main|条目|條目|主|頁面|页面|主頁面|主页面|主頁|主页|主題目|主题目|Main[ _]article|AP)|(?:Wrongtitle|Correct[ _]title)|(?:主条目消歧义|主條目消歧義|消歧义链接|消歧義鏈接|消歧義連結|消连|消連|消歧义连结|DisambLink|Noteref|Dablink)|(?:Distinguish|不是|Not|提示|混淆|分別|分别|區別|区别|本条目的主题不是|本條目的主題不是|本条目主题不是|本條目主題不是|条目主题不是|條目主題不是|主题不是|主題不是|Confused|区分|區分|Confusion|Confuse|RedirectNOT|Misspelling)|(?:Distinguish2|SelfDistinguish|Not2|不是2)|(?:For)|(?:Details|Further|See|另见|另見|More|相關條目|相关条目|Detail|见|見|更多资料|更多資料|Further[ _]information|更多资讯|更多資訊|More[ _]information|更多信息)|(?:Selfref)|(?:About|Otheruses4|关于|關於)|(?:Other[ _]uses|Otheruse|条目消歧义|條目消歧義|他用|Otheruses)|(?:Other[ _]uses list|Otheruselist|主條目消歧義列表|主条目消歧义列表|Otheruseslist|Aboutlist|About[ _]list|Otheruses[ _]list)|(?:Redirect|重定向至此|Redirects[ _]here|Redirect[ _]to)|(?:Redirect2|主條目消歧義2|主条目消歧义2|Redir|重定向至此2)|(?:Redirect3)|(?:Redirect4)|(?:Redirect-distinguish)|(?:Redirect-synonym)|(?:Redirect-multi)|(?:See[ _]Wiktionary|Seewikt)|(?:Seealso|参看|參看|See[ _]also|参见|參見|Also)|(?:See[ _]also2|Seealso2|不轉換參見|不转换参见)|(?:Other[ _]places)|(?:Contrast|對比|对比)&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Twinkle.initCallbacks = [];&lt;br /&gt;
/**&lt;br /&gt;
 * Adds a callback to execute when Twinkle has loaded.&lt;br /&gt;
 * @param {function} func&lt;br /&gt;
 * @param {string} [name] - name of module used to check if is disabled.&lt;br /&gt;
 * If name is not given, module is loaded unconditionally.&lt;br /&gt;
 */&lt;br /&gt;
Twinkle.addInitCallback = function twinkleAddInitCallback(func, name) {&lt;br /&gt;
	Twinkle.initCallbacks.push({ func: func, name: name });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.defaultConfig = {};&lt;br /&gt;
/**&lt;br /&gt;
 * This holds the default set of preferences used by Twinkle.&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;
 * Formerly Twinkle.defaultConfig.twinkle and Twinkle.defaultConfig.friendly&lt;br /&gt;
 */&lt;br /&gt;
Twinkle.defaultConfig = {&lt;br /&gt;
	// General&lt;br /&gt;
	userTalkPageMode: &amp;#039;tab&amp;#039;,&lt;br /&gt;
	dialogLargeFont: false,&lt;br /&gt;
	disabledModules: Morebits.userIsSysop ? [] : [&amp;#039;block&amp;#039;], // default to disable block for non-sysop, if enable manually, they can only use it to tag userpage&lt;br /&gt;
	disabledSysopModules: [],&lt;br /&gt;
&lt;br /&gt;
	// ARV&lt;br /&gt;
	spiWatchReport: &amp;#039;yes&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	// Block&lt;br /&gt;
	defaultToBlock64: false,&lt;br /&gt;
	defaultToPartialBlocks: false,&lt;br /&gt;
	blankTalkpageOnIndefBlock: false,&lt;br /&gt;
	customBlockReasonList: [],&lt;br /&gt;
&lt;br /&gt;
	// Fluff (revert and rollback)&lt;br /&gt;
	openTalkPage: [ ],&lt;br /&gt;
	openTalkPageOnAutoRevert: false,&lt;br /&gt;
	rollbackInPlace: false,&lt;br /&gt;
	markRevertedPagesAsMinor: [ &amp;#039;vand&amp;#039; ],&lt;br /&gt;
	watchRevertedPages: [ &amp;#039;agf&amp;#039;, &amp;#039;norm&amp;#039;, &amp;#039;vand&amp;#039;, &amp;#039;torev&amp;#039; ],&lt;br /&gt;
	watchRevertedExpiry: &amp;#039;yes&amp;#039;,&lt;br /&gt;
	offerReasonOnNormalRevert: true,&lt;br /&gt;
	confirmOnFluff: false,&lt;br /&gt;
	confirmOnMobileFluff: true,&lt;br /&gt;
	showRollbackLinks: [ &amp;#039;diff&amp;#039;, &amp;#039;others&amp;#039; ],&lt;br /&gt;
	customRevertSummary: [],&lt;br /&gt;
&lt;br /&gt;
	// DI (twinkleimage)&lt;br /&gt;
	notifyUserOnDeli: true,&lt;br /&gt;
	deliWatchPage: &amp;#039;default&amp;#039;,&lt;br /&gt;
	deliWatchUser: &amp;#039;default&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	// Protect&lt;br /&gt;
	watchRequestedPages: &amp;#039;yes&amp;#039;,&lt;br /&gt;
	watchPPTaggedPages: &amp;#039;default&amp;#039;,&lt;br /&gt;
	watchProtectedPages: &amp;#039;default&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	// CSD&lt;br /&gt;
	speedySelectionStyle: &amp;#039;buttonClick&amp;#039;,&lt;br /&gt;
	watchSpeedyPages: [ ],&lt;br /&gt;
	watchSpeedyExpiry: &amp;#039;yes&amp;#039;,&lt;br /&gt;
	markSpeedyPagesAsPatrolled: true,&lt;br /&gt;
&lt;br /&gt;
	// these next two should probably be identical by default&lt;br /&gt;
	notifyUserOnSpeedyDeletionNomination: [ &amp;#039;db&amp;#039;, &amp;#039;g1&amp;#039;, &amp;#039;g2&amp;#039;, &amp;#039;g3&amp;#039;, &amp;#039;g5&amp;#039;, &amp;#039;g11&amp;#039;, &amp;#039;g12&amp;#039;, &amp;#039;g13&amp;#039;, &amp;#039;g16&amp;#039;, &amp;#039;a1&amp;#039;, &amp;#039;a2&amp;#039;, &amp;#039;a5&amp;#039;, &amp;#039;a6&amp;#039;, &amp;#039;o7&amp;#039;, &amp;#039;o8&amp;#039;, &amp;#039;f6&amp;#039;, &amp;#039;r2&amp;#039;, &amp;#039;r3&amp;#039;, &amp;#039;r7&amp;#039; ],&lt;br /&gt;
	welcomeUserOnSpeedyDeletionNotification: [ &amp;#039;db&amp;#039;, &amp;#039;g1&amp;#039;, &amp;#039;g2&amp;#039;, &amp;#039;g3&amp;#039;, &amp;#039;g5&amp;#039;, &amp;#039;g11&amp;#039;, &amp;#039;g12&amp;#039;, &amp;#039;g13&amp;#039;, &amp;#039;g16&amp;#039;, &amp;#039;a1&amp;#039;, &amp;#039;a2&amp;#039;, &amp;#039;a5&amp;#039;, &amp;#039;a6&amp;#039;, &amp;#039;o7&amp;#039;, &amp;#039;o8&amp;#039;, &amp;#039;f6&amp;#039;, &amp;#039;r2&amp;#039;, &amp;#039;r3&amp;#039;, &amp;#039;r7&amp;#039; ],&lt;br /&gt;
	promptForSpeedyDeletionSummary: [],&lt;br /&gt;
	openUserTalkPageOnSpeedyDelete: [ ],&lt;br /&gt;
	deleteTalkPageOnDelete: true,&lt;br /&gt;
	deleteRedirectsOnDelete: true,&lt;br /&gt;
	deleteSysopDefaultToDelete: false,&lt;br /&gt;
	speedyWindowHeight: 500,&lt;br /&gt;
	speedyWindowWidth: 800,&lt;br /&gt;
	logSpeedyNominations: false,&lt;br /&gt;
	speedyLogPageName: &amp;#039;CSD日志&amp;#039;,&lt;br /&gt;
	noLogOnSpeedyNomination: [ &amp;#039;o1&amp;#039; ],&lt;br /&gt;
	enlargeG11Input: false,&lt;br /&gt;
&lt;br /&gt;
	// Unlink&lt;br /&gt;
	unlinkNamespaces: [ &amp;#039;0&amp;#039;, &amp;#039;10&amp;#039;, &amp;#039;100&amp;#039;, &amp;#039;102&amp;#039;, &amp;#039;118&amp;#039; ],&lt;br /&gt;
&lt;br /&gt;
	// Warn&lt;br /&gt;
	defaultWarningGroup: &amp;#039;1&amp;#039;,&lt;br /&gt;
	combinedSingletMenus: false,&lt;br /&gt;
	showSharedIPNotice: true,&lt;br /&gt;
	watchWarnings: &amp;#039;yes&amp;#039;,&lt;br /&gt;
	oldSelect: false,&lt;br /&gt;
	customWarningList: [],&lt;br /&gt;
	autoMenuAfterRollback: false,&lt;br /&gt;
&lt;br /&gt;
	// XfD&lt;br /&gt;
	logXfdNominations: false,&lt;br /&gt;
	xfdLogPageName: &amp;#039;AFD日志&amp;#039;,&lt;br /&gt;
	noLogOnXfdNomination: [],&lt;br /&gt;
	xfdWatchDiscussion: &amp;#039;default&amp;#039;,&lt;br /&gt;
	xfdWatchPage: &amp;#039;default&amp;#039;,&lt;br /&gt;
	xfdWatchUser: &amp;#039;default&amp;#039;,&lt;br /&gt;
	markXfdPagesAsPatrolled: true,&lt;br /&gt;
	FwdCsdToXfd: Morebits.userIsSysop,&lt;br /&gt;
	afdDefaultCategory: &amp;#039;delete&amp;#039;,&lt;br /&gt;
	afdFameDefaultReason: &amp;#039;沒有足夠的可靠資料來源能夠讓這個條目符合[[Wikipedia:關注度]]中的標準&amp;#039;,&lt;br /&gt;
	afdSubstubDefaultReason: &amp;#039;過期小小作品&amp;#039;,&lt;br /&gt;
	XfdClose: Morebits.userIsSysop ? &amp;#039;all&amp;#039; : &amp;#039;hide&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	// Copyvio&lt;br /&gt;
	copyvioWatchPage: &amp;#039;yes&amp;#039;,&lt;br /&gt;
	copyvioWatchUser: &amp;#039;yes&amp;#039;,&lt;br /&gt;
	markCopyvioPagesAsPatrolled: true,&lt;br /&gt;
&lt;br /&gt;
	// Hidden preferences&lt;br /&gt;
	autolevelStaleDays: 3,&lt;br /&gt;
	revertMaxRevisions: 50, // intentionally limited&lt;br /&gt;
	batchMax: 5000,&lt;br /&gt;
	batchChunks: 50,&lt;br /&gt;
	configPage: &amp;#039;Wikipedia:Twinkle/参数设置&amp;#039;,&lt;br /&gt;
	projectNamespaceName: mw.config.get(&amp;#039;wgFormattedNamespaces&amp;#039;)[4],&lt;br /&gt;
	sandboxPage: &amp;#039;Wikipedia:沙盒&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	// Deprecated options, as a fallback for add-on scripts/modules&lt;br /&gt;
	summaryAd: &amp;#039; ([[WP:TW|TW]])&amp;#039;,&lt;br /&gt;
	deletionSummaryAd: &amp;#039; ([[WP:TW|TW]])&amp;#039;,&lt;br /&gt;
	protectionSummaryAd: &amp;#039; ([[WP:TW|TW]])&amp;#039;,&lt;br /&gt;
	blockSummaryAd: &amp;#039; ([[WP:TW|TW]])&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	// Formerly defaultConfig.friendly:&lt;br /&gt;
	// Tag&lt;br /&gt;
	groupByDefault: true,&lt;br /&gt;
	watchTaggedPages: &amp;#039;yes&amp;#039;,&lt;br /&gt;
	watchMergeDiscussions: &amp;#039;yes&amp;#039;,&lt;br /&gt;
	markTaggedPagesAsMinor: false,&lt;br /&gt;
	markTaggedPagesAsPatrolled: true,&lt;br /&gt;
	tagArticleSortOrder: &amp;#039;cat&amp;#039;,&lt;br /&gt;
	customTagList: [],&lt;br /&gt;
	customFileTagList: [],&lt;br /&gt;
	customRedirectTagList: [],&lt;br /&gt;
&lt;br /&gt;
	// Stub&lt;br /&gt;
	watchStubbedPages: false,&lt;br /&gt;
	markStubbedPagesAsMinor: false,&lt;br /&gt;
	markStubbedPagesAsPatrolled: true,&lt;br /&gt;
	stubArticleSortOrder: &amp;#039;cat&amp;#039;,&lt;br /&gt;
	customStubList: [],&lt;br /&gt;
&lt;br /&gt;
	// Welcome&lt;br /&gt;
	topWelcomes: false,&lt;br /&gt;
	watchWelcomes: &amp;#039;yes&amp;#039;,&lt;br /&gt;
	welcomeHeading: wgULS(&amp;#039;欢迎&amp;#039;, &amp;#039;歡迎&amp;#039;),&lt;br /&gt;
	insertHeadings: true,&lt;br /&gt;
	insertUsername: true,&lt;br /&gt;
	insertSignature: true,  // sign welcome templates, where appropriate&lt;br /&gt;
	quickWelcomeMode: &amp;#039;norm&amp;#039;,&lt;br /&gt;
	quickWelcomeTemplate: &amp;#039;Welcome&amp;#039;,&lt;br /&gt;
	customWelcomeList: [],&lt;br /&gt;
	customWelcomeSignature: true,&lt;br /&gt;
&lt;br /&gt;
	// Talkback&lt;br /&gt;
	markTalkbackAsMinor: true,&lt;br /&gt;
	insertTalkbackSignature: true,  // always sign talkback templates&lt;br /&gt;
	talkbackHeading: wgULS(&amp;#039;回复通告&amp;#039;, &amp;#039;回覆通告&amp;#039;),&lt;br /&gt;
	mailHeading: wgULS(&amp;#039;您有新邮件！&amp;#039;, &amp;#039;您有新郵件！&amp;#039;),&lt;br /&gt;
&lt;br /&gt;
	// Shared&lt;br /&gt;
	markSharedIPAsMinor: true&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// now some skin dependent config.&lt;br /&gt;
switch (mw.config.get(&amp;#039;skin&amp;#039;)) {&lt;br /&gt;
	case &amp;#039;vector&amp;#039;:&lt;br /&gt;
	case &amp;#039;vector-2022&amp;#039;:&lt;br /&gt;
		Twinkle.defaultConfig.portletArea = &amp;#039;right-navigation&amp;#039;;&lt;br /&gt;
		Twinkle.defaultConfig.portletId = &amp;#039;p-twinkle&amp;#039;;&lt;br /&gt;
		Twinkle.defaultConfig.portletName = &amp;#039;TW&amp;#039;;&lt;br /&gt;
		Twinkle.defaultConfig.portletType = &amp;#039;menu&amp;#039;;&lt;br /&gt;
		Twinkle.defaultConfig.portletNext = &amp;#039;p-search&amp;#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	case &amp;#039;timeless&amp;#039;:&lt;br /&gt;
		Twinkle.defaultConfig.portletArea = &amp;#039;#page-tools .sidebar-inner&amp;#039;;&lt;br /&gt;
		Twinkle.defaultConfig.portletId = &amp;#039;p-twinkle&amp;#039;;&lt;br /&gt;
		Twinkle.defaultConfig.portletName = &amp;#039;Twinkle&amp;#039;;&lt;br /&gt;
		Twinkle.defaultConfig.portletType = null;&lt;br /&gt;
		Twinkle.defaultConfig.portletNext = &amp;#039;p-userpagetools&amp;#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	default:&lt;br /&gt;
		Twinkle.defaultConfig.portletArea = null;&lt;br /&gt;
		Twinkle.defaultConfig.portletId = &amp;#039;p-cactions&amp;#039;;&lt;br /&gt;
		Twinkle.defaultConfig.portletName = null;&lt;br /&gt;
		Twinkle.defaultConfig.portletType = null;&lt;br /&gt;
		Twinkle.defaultConfig.portletNext = null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Twinkle.getPref = function twinkleGetPref(name) {&lt;br /&gt;
	if (typeof Twinkle.prefs === &amp;#039;object&amp;#039; &amp;amp;&amp;amp; Twinkle.prefs[name] !== undefined) {&lt;br /&gt;
		return Twinkle.prefs[name];&lt;br /&gt;
	}&lt;br /&gt;
	// Old preferences format, used before twinkleoptions.js was a thing&lt;br /&gt;
	if (typeof window.TwinkleConfig === &amp;#039;object&amp;#039; &amp;amp;&amp;amp; window.TwinkleConfig[name] !== undefined) {&lt;br /&gt;
		return window.TwinkleConfig[name];&lt;br /&gt;
	}&lt;br /&gt;
	if (typeof window.FriendlyConfig === &amp;#039;object&amp;#039; &amp;amp;&amp;amp; window.FriendlyConfig[name] !== undefined) {&lt;br /&gt;
		return window.FriendlyConfig[name];&lt;br /&gt;
	}&lt;br /&gt;
	return Twinkle.defaultConfig[name];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * **************** Twinkle.addPortlet() ****************&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;
 * Vector:&lt;br /&gt;
 *  For each option, the outer nav class contains &amp;quot;vector-menu&amp;quot;, the inner div class is &amp;quot;vector-menu-content&amp;quot;, and the ul is &amp;quot;vector-menu-content-list&amp;quot;&lt;br /&gt;
 *  &amp;quot;mw-panel&amp;quot;, outer nav class contains &amp;quot;vector-menu-portal&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 nav class contains &amp;quot;vector-menu-tabs&amp;quot; or &amp;quot;vector-menu-dropdown&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 nav class contains &amp;quot;vector-menu-tabs&amp;quot; or &amp;quot;vector-menu-dropdown&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;
 * Monobook:&lt;br /&gt;
 *  &amp;quot;column-one&amp;quot;, outer nav 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;
 * Modern:&lt;br /&gt;
 *  &amp;quot;mw_contentwrapper&amp;quot; (top nav), outer nav 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 nav 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;
Twinkle.addPortlet = function(navigation, id, text, type, nextnodeid) {&lt;br /&gt;
	// sanity checks, and get required DOM nodes&lt;br /&gt;
	var root = document.getElementById(navigation) || document.querySelector(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;
	var skin = mw.config.get(&amp;#039;skin&amp;#039;);&lt;br /&gt;
	if ((skin !== &amp;#039;vector&amp;#039; &amp;amp;&amp;amp; skin !== &amp;#039;vector-2022&amp;#039;) || (navigation !== &amp;#039;left-navigation&amp;#039; &amp;amp;&amp;amp; navigation !== &amp;#039;right-navigation&amp;#039;)) {&lt;br /&gt;
		type = null; // menu supported only in vector&amp;#039;s #left-navigation &amp;amp; #right-navigation&lt;br /&gt;
	}&lt;br /&gt;
	var outerNavClass, innerDivClass;&lt;br /&gt;
	switch (skin) {&lt;br /&gt;
		case &amp;#039;vector&amp;#039;:&lt;br /&gt;
		case &amp;#039;vector-2022&amp;#039;:&lt;br /&gt;
			// XXX: portal doesn&amp;#039;t work&lt;br /&gt;
			if (navigation !== &amp;#039;portal&amp;#039; &amp;amp;&amp;amp; navigation !== &amp;#039;left-navigation&amp;#039; &amp;amp;&amp;amp; navigation !== &amp;#039;right-navigation&amp;#039;) {&lt;br /&gt;
				navigation = &amp;#039;mw-panel&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
			outerNavClass = &amp;#039;mw-portlet vector-menu vector-menu-&amp;#039; + (navigation === &amp;#039;mw-panel&amp;#039; ? &amp;#039;portal&amp;#039; : type === &amp;#039;menu&amp;#039; ? &amp;#039;dropdown vector-menu-dropdown-noicon&amp;#039; : &amp;#039;tabs&amp;#039;);&lt;br /&gt;
			innerDivClass = &amp;#039;vector-menu-content&amp;#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;#039;modern&amp;#039;:&lt;br /&gt;
			if (navigation !== &amp;#039;mw_portlets&amp;#039; &amp;amp;&amp;amp; navigation !== &amp;#039;mw_contentwrapper&amp;#039;) {&lt;br /&gt;
				navigation = &amp;#039;mw_portlets&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
			outerNavClass = &amp;#039;portlet&amp;#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;#039;timeless&amp;#039;:&lt;br /&gt;
			outerNavClass = &amp;#039;mw-portlet&amp;#039;;&lt;br /&gt;
			innerDivClass = &amp;#039;mw-portlet-body&amp;#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			navigation = &amp;#039;column-one&amp;#039;;&lt;br /&gt;
			outerNavClass = &amp;#039;portlet&amp;#039;;&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Build the DOM elements.&lt;br /&gt;
	var outerNav, heading;&lt;br /&gt;
	if (skin === &amp;#039;vector-2022&amp;#039;) {&lt;br /&gt;
		outerNav = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
		heading = document.createElement(&amp;#039;label&amp;#039;);&lt;br /&gt;
	} else {&lt;br /&gt;
		outerNav = document.createElement(&amp;#039;nav&amp;#039;);&lt;br /&gt;
		heading = document.createElement(&amp;#039;h3&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	outerNav.setAttribute(&amp;#039;aria-labelledby&amp;#039;, id + &amp;#039;-label&amp;#039;);&lt;br /&gt;
	// Vector getting vector-menu-empty FIXME TODO&lt;br /&gt;
	outerNav.className = outerNavClass + &amp;#039; emptyPortlet&amp;#039;;&lt;br /&gt;
	outerNav.id = id;&lt;br /&gt;
	if (nextnode &amp;amp;&amp;amp; nextnode.parentNode === root) {&lt;br /&gt;
		root.insertBefore(outerNav, nextnode);&lt;br /&gt;
	} else {&lt;br /&gt;
		root.appendChild(outerNav);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	heading.id = id + &amp;#039;-label&amp;#039;;&lt;br /&gt;
	var ul = document.createElement(&amp;#039;ul&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	if (skin === &amp;#039;vector&amp;#039; || skin === &amp;#039;vector-2022&amp;#039;) {&lt;br /&gt;
		ul.className = &amp;#039;vector-menu-content-list&amp;#039;;&lt;br /&gt;
		heading.className = &amp;#039;vector-menu-heading&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		// add invisible checkbox to keep menu open when clicked&lt;br /&gt;
		// similar to the p-cactions (&amp;quot;More&amp;quot;) menu&lt;br /&gt;
		if (outerNavClass.indexOf(&amp;#039;vector-menu-dropdown&amp;#039;) !== -1) {&lt;br /&gt;
			var chkbox = document.createElement(&amp;#039;input&amp;#039;);&lt;br /&gt;
			chkbox.className = &amp;#039;vector-menu-checkbox&amp;#039;;&lt;br /&gt;
			chkbox.setAttribute(&amp;#039;type&amp;#039;, &amp;#039;checkbox&amp;#039;);&lt;br /&gt;
			chkbox.setAttribute(&amp;#039;aria-labelledby&amp;#039;, id + &amp;#039;-label&amp;#039;);&lt;br /&gt;
			outerNav.appendChild(chkbox);&lt;br /&gt;
&lt;br /&gt;
			// Vector gets its title in a span; all others except&lt;br /&gt;
			// timeless have no title, and it has no span&lt;br /&gt;
			var span = document.createElement(&amp;#039;span&amp;#039;);&lt;br /&gt;
			span.appendChild(document.createTextNode(text));&lt;br /&gt;
			heading.appendChild(span);&lt;br /&gt;
&lt;br /&gt;
			var a = document.createElement(&amp;#039;a&amp;#039;);&lt;br /&gt;
			a.href = &amp;#039;#&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
			$(a).click(function(e) {&lt;br /&gt;
				e.preventDefault();&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			heading.appendChild(a);&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		// Basically just Timeless&lt;br /&gt;
		heading.appendChild(document.createTextNode(text));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	outerNav.appendChild(heading);&lt;br /&gt;
&lt;br /&gt;
	if (innerDivClass) {&lt;br /&gt;
		var innerDiv = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
		innerDiv.className = innerDivClass;&lt;br /&gt;
		innerDiv.appendChild(ul);&lt;br /&gt;
		outerNav.appendChild(innerDiv);&lt;br /&gt;
	} else {&lt;br /&gt;
		outerNav.appendChild(ul);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return outerNav;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * **************** Twinkle.addPortletLink() ****************&lt;br /&gt;
 * Builds a portlet menu if it doesn&amp;#039;t exist yet, and add the portlet link.&lt;br /&gt;
 * @param task: Either a URL for the portlet link or a function to execute.&lt;br /&gt;
 */&lt;br /&gt;
Twinkle.addPortletLink = function(task, text, id, tooltip) {&lt;br /&gt;
	if (Twinkle.getPref(&amp;#039;portletArea&amp;#039;) !== null) {&lt;br /&gt;
		Twinkle.addPortlet(Twinkle.getPref(&amp;#039;portletArea&amp;#039;), Twinkle.getPref(&amp;#039;portletId&amp;#039;), Twinkle.getPref(&amp;#039;portletName&amp;#039;), Twinkle.getPref(&amp;#039;portletType&amp;#039;), Twinkle.getPref(&amp;#039;portletNext&amp;#039;));&lt;br /&gt;
	}&lt;br /&gt;
	var link = mw.util.addPortletLink(Twinkle.getPref(&amp;#039;portletId&amp;#039;), typeof task === &amp;#039;string&amp;#039; ? task : &amp;#039;#&amp;#039;, text, id, tooltip);&lt;br /&gt;
	$(&amp;#039;.client-js .skin-vector #p-cactions&amp;#039;).css(&amp;#039;margin-right&amp;#039;, &amp;#039;initial&amp;#039;);&lt;br /&gt;
	if (typeof task === &amp;#039;function&amp;#039;) {&lt;br /&gt;
		$(link).find(&amp;#039;a&amp;#039;).on(&amp;#039;click&amp;#039;, function (ev) {&lt;br /&gt;
			task();&lt;br /&gt;
			ev.preventDefault();&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	if ($.collapsibleTabs) {&lt;br /&gt;
		$.collapsibleTabs.handleResize();&lt;br /&gt;
	}&lt;br /&gt;
	return link;&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.util.wikiScript(&amp;#039;index&amp;#039;) + &amp;#039;?title=&amp;#039;,&lt;br /&gt;
	scriptpathafter = &amp;#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;happy=yes&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// Retrieve the user&amp;#039;s Twinkle preferences&lt;br /&gt;
$.ajax({&lt;br /&gt;
	url: scriptpathbefore + &amp;#039;User:&amp;#039; + encodeURIComponent(mw.config.get(&amp;#039;wgUserName&amp;#039;)) + &amp;#039;/twinkleoptions.js&amp;#039; + scriptpathafter,&lt;br /&gt;
	dataType: &amp;#039;text&amp;#039;&lt;br /&gt;
})&lt;br /&gt;
	.fail(function () {&lt;br /&gt;
		mw.notify(wgULS(&amp;#039;未能加载您的Twinkle参数设置&amp;#039;, &amp;#039;未能載入您的Twinkle偏好設定&amp;#039;), {type: &amp;#039;error&amp;#039;});&lt;br /&gt;
	})&lt;br /&gt;
	.done(function (optionsText) {&lt;br /&gt;
&lt;br /&gt;
		// Quick pass if user has no options&lt;br /&gt;
		if (optionsText === &amp;#039;&amp;#039;) {&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;#039;&amp;#039;);&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;#039;window.Twinkle.prefs = &amp;#039;, 0) === 0) {&lt;br /&gt;
			optionsText = optionsText.replace(/(?:^window.Twinkle.prefs = |;\n*$)/g, &amp;#039;&amp;#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			var options = JSON.parse(optionsText);&lt;br /&gt;
			if (options) {&lt;br /&gt;
				if (options.twinkle || options.friendly) { // Old preferences format&lt;br /&gt;
					Twinkle.prefs = $.extend(options.twinkle, options.friendly);&lt;br /&gt;
				} else {&lt;br /&gt;
					Twinkle.prefs = options;&lt;br /&gt;
				}&lt;br /&gt;
				// v2 established after unification of Twinkle/Friendly objects&lt;br /&gt;
				Twinkle.prefs.optionsVersion = Twinkle.prefs.optionsVersion || 1;&lt;br /&gt;
			}&lt;br /&gt;
		} catch (e) {&lt;br /&gt;
			mw.notify(wgULS(&amp;#039;未能解析您的Twinkle参数设置&amp;#039;, &amp;#039;未能解析您的Twinkle偏好設定&amp;#039;), {type: &amp;#039;error&amp;#039;});&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
	.always(function () {&lt;br /&gt;
		$(Twinkle.load);&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&amp;#039;t activate on special pages other than those listed here, so&lt;br /&gt;
	// that others load faster, especially the watchlist.&lt;br /&gt;
	var activeSpecialPageList = [ &amp;#039;Block&amp;#039;, &amp;#039;Contributions&amp;#039;, &amp;#039;AbuseLog&amp;#039;, &amp;#039;Recentchanges&amp;#039;, &amp;#039;Recentchangeslinked&amp;#039; ]; // wgRelevantUserName defined for non-sysops on Special:Block&lt;br /&gt;
	if (Morebits.userIsSysop) {&lt;br /&gt;
		activeSpecialPageList = activeSpecialPageList.concat([ &amp;#039;DeletedContributions&amp;#039;, &amp;#039;Prefixindex&amp;#039;, &amp;#039;BrokenRedirects&amp;#039; ]);&lt;br /&gt;
	}&lt;br /&gt;
	if (mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) === -1 &amp;amp;&amp;amp;&lt;br /&gt;
		activeSpecialPageList.indexOf(mw.config.get(&amp;#039;wgCanonicalSpecialPageName&amp;#039;)) === -1) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Prevent clickjacking&lt;br /&gt;
	if (window.top !== window.self) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Set custom Api-User-Agent header, for server-side logging purposes&lt;br /&gt;
	Morebits.wiki.api.setApiUserAgent(&amp;#039;Twinkle~zh (&amp;#039; + mw.config.get(&amp;#039;wgWikiID&amp;#039;) + &amp;#039;)&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	Twinkle.disabledModules = Twinkle.getPref(&amp;#039;disabledModules&amp;#039;).concat(Twinkle.getPref(&amp;#039;disabledSysopModules&amp;#039;));&lt;br /&gt;
&lt;br /&gt;
	// Redefine addInitCallback so that any modules being loaded now on are directly&lt;br /&gt;
	// initialised rather than added to initCallbacks array&lt;br /&gt;
	Twinkle.addInitCallback = function(func, name) {&lt;br /&gt;
		if (!name || Twinkle.disabledModules.indexOf(name) === -1) {&lt;br /&gt;
			func();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	// Initialise modules that were saved in initCallbacks array&lt;br /&gt;
	Twinkle.initCallbacks.forEach(function(module) {&lt;br /&gt;
		Twinkle.addInitCallback(module.func, module.name);&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	// Increases text size in Twinkle dialogs, if so configured&lt;br /&gt;
	if (Twinkle.getPref(&amp;#039;dialogLargeFont&amp;#039;)) {&lt;br /&gt;
		mw.util.addCSS(&amp;#039;.morebits-dialog-content, .morebits-dialog-footerlinks { font-size: 100% !important; } &amp;#039; +&lt;br /&gt;
			&amp;#039;.morebits-dialog input, .morebits-dialog select, .morebits-dialog-content button { font-size: inherit !important; }&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Hide the lingering space if the TW menu is empty&lt;br /&gt;
	var isVector = mw.config.get(&amp;#039;skin&amp;#039;) === &amp;#039;vector&amp;#039; || mw.config.get(&amp;#039;skin&amp;#039;) === &amp;#039;vector-2022&amp;#039;;&lt;br /&gt;
	if (isVector &amp;amp;&amp;amp; Twinkle.getPref(&amp;#039;portletType&amp;#039;) === &amp;#039;menu&amp;#039; &amp;amp;&amp;amp; $(&amp;#039;#p-twinkle&amp;#039;).length === 0) {&lt;br /&gt;
		$(&amp;#039;#p-cactions&amp;#039;).css(&amp;#039;margin-right&amp;#039;, &amp;#039;initial&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/** Twinkle-specific utility functions shared by multiple modules */&lt;br /&gt;
// Used in batch, unlink, and deprod to sort pages by namespace, as&lt;br /&gt;
// json formatversion=2 sorts by pageid instead (#1251)&lt;br /&gt;
Twinkle.sortByNamespace = function(first, second) {&lt;br /&gt;
	return first.ns - second.ns || (first.title &amp;gt; second.title ? 1 : -1);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Used in deprod and unlink listings to link the page title&lt;br /&gt;
Twinkle.generateBatchPageLinks = function (checkbox) {&lt;br /&gt;
	var $checkbox = $(checkbox);&lt;br /&gt;
	var link = Morebits.htmlNode(&amp;#039;a&amp;#039;, $checkbox.val());&lt;br /&gt;
	link.setAttribute(&amp;#039;class&amp;#039;, &amp;#039;tw-batchpage-link&amp;#039;);&lt;br /&gt;
	link.setAttribute(&amp;#039;href&amp;#039;, mw.util.getUrl($checkbox.val()));&lt;br /&gt;
	link.setAttribute(&amp;#039;target&amp;#039;, &amp;#039;_blank&amp;#039;);&lt;br /&gt;
	$checkbox.next().prepend([link, &amp;#039; &amp;#039;]);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
}(window, document, jQuery)); // End wrap with anonymous function&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>鹿野耕云</name></author>
	</entry>
</feed>