<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://tnfshwiki.tfcis.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinklebatchdelete.js</id>
	<title>MediaWiki:Gadget-twinklebatchdelete.js - 修訂歷史</title>
	<link rel="self" type="application/atom+xml" href="https://tnfshwiki.tfcis.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinklebatchdelete.js"/>
	<link rel="alternate" type="text/html" href="https://tnfshwiki.tfcis.org/index.php?title=MediaWiki:Gadget-twinklebatchdelete.js&amp;action=history"/>
	<updated>2026-04-08T12:22:26Z</updated>
	<subtitle>本 Wiki 上此頁面的修訂歷史</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://tnfshwiki.tfcis.org/index.php?title=MediaWiki:Gadget-twinklebatchdelete.js&amp;diff=4363&amp;oldid=prev</id>
		<title>Xiplus：​繁簡轉換</title>
		<link rel="alternate" type="text/html" href="https://tnfshwiki.tfcis.org/index.php?title=MediaWiki:Gadget-twinklebatchdelete.js&amp;diff=4363&amp;oldid=prev"/>
		<updated>2016-04-10T07:04:38Z</updated>

		<summary type="html">&lt;p&gt;繁簡轉換&lt;/p&gt;
&lt;a href=&quot;https://tnfshwiki.tfcis.org/index.php?title=MediaWiki:Gadget-twinklebatchdelete.js&amp;amp;diff=4363&amp;amp;oldid=3895&quot;&gt;顯示變更&lt;/a&gt;</summary>
		<author><name>Xiplus</name></author>
	</entry>
	<entry>
		<id>https://tnfshwiki.tfcis.org/index.php?title=MediaWiki:Gadget-twinklebatchdelete.js&amp;diff=3895&amp;oldid=prev</id>
		<title>Xiplus：​已匯入 1 筆修訂：Twinkle</title>
		<link rel="alternate" type="text/html" href="https://tnfshwiki.tfcis.org/index.php?title=MediaWiki:Gadget-twinklebatchdelete.js&amp;diff=3895&amp;oldid=prev"/>
		<updated>2016-03-25T06:03:17Z</updated>

		<summary type="html">&lt;p&gt;已匯入 1 筆修訂：Twinkle&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-Hant-TW&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;於 2016年3月25日 (五) 14:03 的修訂&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key tnfshwiki-tnfshwiki_:diff:wikidiff2:1.12:old-3894:rev-3895:1.13.0 --&gt;
&lt;/table&gt;</summary>
		<author><name>Xiplus</name></author>
	</entry>
	<entry>
		<id>https://tnfshwiki.tfcis.org/index.php?title=MediaWiki:Gadget-twinklebatchdelete.js&amp;diff=3894&amp;oldid=prev</id>
		<title>zhwiki&gt;Jimmy Xu：​v2.0-1033-g265ec81-dirty</title>
		<link rel="alternate" type="text/html" href="https://tnfshwiki.tfcis.org/index.php?title=MediaWiki:Gadget-twinklebatchdelete.js&amp;diff=3894&amp;oldid=prev"/>
		<updated>2015-06-30T10:53:44Z</updated>

		<summary type="html">&lt;p&gt;v2.0-1033-g265ec81-dirty&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;//&amp;lt;nowiki&amp;gt;&lt;br /&gt;
// vim: set noet sts=0 sw=8:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(function($){&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 non-articles, and Special:PrefixIndex&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchdelete = function twinklebatchdelete() {&lt;br /&gt;
	if(&lt;br /&gt;
		Morebits.userIsInGroup( &amp;#039;sysop&amp;#039; ) &amp;amp;&amp;amp; (&lt;br /&gt;
			( mw.config.get( &amp;#039;wgCurRevisionId&amp;#039; ) &amp;amp;&amp;amp; mw.config.get( &amp;#039;wgNamespaceNumber&amp;#039; ) &amp;gt; 0 ) ||&lt;br /&gt;
			mw.config.get( &amp;#039;wgCanonicalSpecialPageName&amp;#039; ) === &amp;#039;Prefixindex&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	) {&lt;br /&gt;
		Twinkle.addPortletLink( Twinkle.batchdelete.callback, &amp;quot;批删&amp;quot;, &amp;quot;tw-batch&amp;quot;, &amp;quot;删除此分类或页面中的所有链接&amp;quot; );&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 Morebits.simpleWindow( 600, 400 );&lt;br /&gt;
	Window.setTitle( &amp;quot;批量删除&amp;quot; );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle帮助&amp;quot;, &amp;quot;WP:TW/DOC#batchdelete&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new Morebits.quickForm( Twinkle.batchdelete.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &amp;#039;checkbox&amp;#039;,&lt;br /&gt;
			list: [&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;#039;删除页面&amp;#039;,&lt;br /&gt;
					name: &amp;#039;delete_page&amp;#039;,&lt;br /&gt;
					value: &amp;#039;delete&amp;#039;,&lt;br /&gt;
					checked: true,&lt;br /&gt;
					subgroup: {&lt;br /&gt;
						type: &amp;#039;checkbox&amp;#039;,&lt;br /&gt;
						list: [&lt;br /&gt;
							{&lt;br /&gt;
								label: &amp;#039;删除关联的讨论页（用户对话页除外）&amp;#039;,&lt;br /&gt;
								name: &amp;#039;delete_talk&amp;#039;,&lt;br /&gt;
								value: &amp;#039;delete_talk&amp;#039;,&lt;br /&gt;
								checked: true&lt;br /&gt;
							},&lt;br /&gt;
							{&lt;br /&gt;
								label: &amp;#039;删除重定向&amp;#039;,&lt;br /&gt;
								name: &amp;#039;delete_redirects&amp;#039;,&lt;br /&gt;
								value: &amp;#039;delete_redirects&amp;#039;,&lt;br /&gt;
								checked: true&lt;br /&gt;
							}&lt;br /&gt;
						]&lt;br /&gt;
					}&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;#039;取消链入（仅处理条目及Portal名字空间）&amp;#039;,&lt;br /&gt;
					name: &amp;#039;unlink_page&amp;#039;,&lt;br /&gt;
					value: &amp;#039;unlink&amp;#039;,&lt;br /&gt;
					checked: false&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					label: &amp;#039;移除文件使用（所有名字空间）&amp;#039;,&lt;br /&gt;
					name: &amp;#039;unlink_file&amp;#039;,&lt;br /&gt;
					value: &amp;#039;unlink_file&amp;#039;,&lt;br /&gt;
					checked: true&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		} );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: &amp;#039;input&amp;#039;,&lt;br /&gt;
			name: &amp;#039;reason&amp;#039;,&lt;br /&gt;
			label: &amp;#039;理由：&amp;#039;,&lt;br /&gt;
			size: 60&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	var query = {&lt;br /&gt;
		&amp;#039;action&amp;#039;: &amp;#039;query&amp;#039;,&lt;br /&gt;
		&amp;#039;prop&amp;#039;: &amp;#039;revisions|info|imageinfo&amp;#039;,&lt;br /&gt;
		&amp;#039;inprop&amp;#039;: &amp;#039;protection&amp;#039;,&lt;br /&gt;
		&amp;#039;rvprop&amp;#039;: &amp;#039;size|user&amp;#039;&lt;br /&gt;
	};&lt;br /&gt;
	if( mw.config.get( &amp;#039;wgNamespaceNumber&amp;#039; ) === 14 ) {  // Category:&lt;br /&gt;
		query.generator = &amp;#039;categorymembers&amp;#039;;&lt;br /&gt;
		query.gcmtitle = mw.config.get(&amp;#039;wgPageName&amp;#039;);&lt;br /&gt;
		query.gcmlimit = Twinkle.getPref(&amp;#039;batchMax&amp;#039;); // the max for sysops&lt;br /&gt;
	} else if( mw.config.get( &amp;#039;wgCanonicalSpecialPageName&amp;#039; ) === &amp;#039;Prefixindex&amp;#039; ) {&lt;br /&gt;
&lt;br /&gt;
		query.generator = &amp;#039;allpages&amp;#039;;&lt;br /&gt;
		query.gaplimit = Twinkle.getPref(&amp;#039;batchMax&amp;#039;); // the max for sysops&lt;br /&gt;
		if(Morebits.queryString.exists( &amp;#039;prefix&amp;#039; ) )&lt;br /&gt;
		{&lt;br /&gt;
			query.gapnamespace = Morebits.queryString.get( &amp;#039;namespace&amp;#039; );&lt;br /&gt;
			query.gapprefix = Morebits.string.toUpperCaseFirstChar( Morebits.queryString.get( &amp;#039;prefix&amp;#039; ) );&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var pathSplit = decodeURIComponent(location.pathname).split(&amp;#039;/&amp;#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(&amp;#039;:&amp;#039;);&lt;br /&gt;
			query.gapnamespace = mw.config.get(&amp;quot;wgNamespaceIds&amp;quot;)[titleSplit[0].toLowerCase()];&lt;br /&gt;
			if ( titleSplit.length &amp;lt; 2 || typeof query.gapnamespace === &amp;#039;undefined&amp;#039; )&lt;br /&gt;
			{&lt;br /&gt;
				query.gapnamespace = 0;  // article namespace&lt;br /&gt;
				query.gapprefix = pathSplit.splice(3).join(&amp;#039;/&amp;#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(&amp;#039;:&amp;#039;));&lt;br /&gt;
				query.gapprefix = pathSplit.join(&amp;#039;/&amp;#039;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		query.generator = &amp;#039;links&amp;#039;;&lt;br /&gt;
		query.titles = mw.config.get(&amp;#039;wgPageName&amp;#039;);&lt;br /&gt;
		query.gpllimit = Twinkle.getPref(&amp;#039;batchMax&amp;#039;); // the max for sysops&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var statusdiv = document.createElement( &amp;#039;div&amp;#039; );&lt;br /&gt;
	statusdiv.style.padding = &amp;#039;15px&amp;#039;;  // just so it doesn&amp;#039;t look broken&lt;br /&gt;
	Window.setContent(statusdiv);&lt;br /&gt;
	Morebits.status.init(statusdiv);&lt;br /&gt;
	Window.display();&lt;br /&gt;
&lt;br /&gt;
	var statelem = new Morebits.status(&amp;quot;抓取页面列表&amp;quot;);&lt;br /&gt;
	var wikipedia_api = new Morebits.wiki.api( &amp;#039;载入中…&amp;#039;, query, function( apiobj ) {&lt;br /&gt;
			var xml = apiobj.responseXML;&lt;br /&gt;
			var $pages = $(xml).find(&amp;#039;page&amp;#039;).filter(&amp;#039;:not([missing])&amp;#039;);  // :not([imagerepository=&amp;quot;shared&amp;quot;])&lt;br /&gt;
			var list = [];&lt;br /&gt;
			$pages.each(function(index, page) {&lt;br /&gt;
				var $page = $(page);&lt;br /&gt;
				var ns = $page.attr(&amp;#039;ns&amp;#039;);&lt;br /&gt;
				var title = $page.attr(&amp;#039;title&amp;#039;);&lt;br /&gt;
				var isRedir = $page.attr(&amp;#039;redirect&amp;#039;) === &amp;quot;&amp;quot;;&lt;br /&gt;
				var $editprot = $page.find(&amp;#039;pr[type=&amp;quot;edit&amp;quot;][level=&amp;quot;sysop&amp;quot;]&amp;#039;);&lt;br /&gt;
				var isProtected = $editprot.length &amp;gt; 0;&lt;br /&gt;
				var size = $page.find(&amp;#039;rev&amp;#039;).attr(&amp;#039;size&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
				var metadata = [];&lt;br /&gt;
				if (isRedir) {&lt;br /&gt;
					metadata.push(&amp;quot;重定向&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				if (isProtected) {&lt;br /&gt;
					metadata.push(&amp;quot;全保护，&amp;quot; +&lt;br /&gt;
						($editprot.attr(&amp;#039;expiry&amp;#039;) === &amp;#039;infinity&amp;#039; ? &amp;#039;无限期&amp;#039; : (&amp;#039;过期时间&amp;#039; + $editprot.attr(&amp;#039;expiry&amp;#039;))));&lt;br /&gt;
				}&lt;br /&gt;
				if (ns === &amp;quot;6&amp;quot;) {  // mimic what delimages used to show for files&lt;br /&gt;
					metadata.push(&amp;quot;上传者：&amp;quot; + $page.find(&amp;#039;ii&amp;#039;).attr(&amp;#039;user&amp;#039;));&lt;br /&gt;
					metadata.push(&amp;quot;最后编辑：&amp;quot; + $page.find(&amp;#039;rev&amp;#039;).attr(&amp;#039;user&amp;#039;));&lt;br /&gt;
				} else {&lt;br /&gt;
					metadata.push(size + &amp;quot;字节&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				list.push({&lt;br /&gt;
					label: title + (metadata.length ? (&amp;#039;（&amp;#039; + metadata.join(&amp;#039;，&amp;#039;) + &amp;#039;）&amp;#039;) : &amp;#039;&amp;#039;),&lt;br /&gt;
					value: title,&lt;br /&gt;
					checked: true,&lt;br /&gt;
					style: (isProtected ? &amp;#039;color:red&amp;#039; : &amp;#039;&amp;#039;)&lt;br /&gt;
				});&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			apiobj.params.form.append({ type: &amp;#039;header&amp;#039;, label: &amp;#039;待删除页面&amp;#039; });&lt;br /&gt;
			apiobj.params.form.append({&lt;br /&gt;
					type: &amp;#039;button&amp;#039;,&lt;br /&gt;
					label: &amp;quot;全选&amp;quot;,&lt;br /&gt;
					event: function(e) {&lt;br /&gt;
						$(Morebits.quickForm.getElements(e.target.form, &amp;quot;pages&amp;quot;)).prop(&amp;#039;checked&amp;#039;, true);&lt;br /&gt;
					}&lt;br /&gt;
				});&lt;br /&gt;
			apiobj.params.form.append({&lt;br /&gt;
					type: &amp;#039;button&amp;#039;,&lt;br /&gt;
					label: &amp;quot;全不选&amp;quot;,&lt;br /&gt;
					event: function(e) {&lt;br /&gt;
						$(Morebits.quickForm.getElements(e.target.form, &amp;quot;pages&amp;quot;)).prop(&amp;#039;checked&amp;#039;, false);&lt;br /&gt;
					}&lt;br /&gt;
				});&lt;br /&gt;
			apiobj.params.form.append( {&lt;br /&gt;
					type: &amp;#039;checkbox&amp;#039;,&lt;br /&gt;
					name: &amp;#039;pages&amp;#039;,&lt;br /&gt;
					list: list&lt;br /&gt;
				} );&lt;br /&gt;
			apiobj.params.form.append( { type:&amp;#039;submit&amp;#039; } );&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;
			Morebits.checkboxShiftClickSupport(Morebits.quickForm.getElements(result, &amp;#039;pages&amp;#039;));&lt;br /&gt;
		}, statelem );&lt;br /&gt;
&lt;br /&gt;
	wikipedia_api.params = { form:form, Window:Window };&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchdelete.callback.evaluate = function twinklebatchdeleteCallbackEvaluate(event) {&lt;br /&gt;
	Morebits.wiki.actionCompleted.notice = &amp;#039;状态&amp;#039;;&lt;br /&gt;
	Morebits.wiki.actionCompleted.postfix = &amp;#039;批量删除已完成&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	var numProtected = $(Morebits.quickForm.getElements(event.target, &amp;#039;pages&amp;#039;)).filter(function(index, element) {&lt;br /&gt;
		return element.checked &amp;amp;&amp;amp; element.nextElementSibling.style.color === &amp;#039;red&amp;#039;;&lt;br /&gt;
	}).length;&lt;br /&gt;
	if (numProtected &amp;gt; 0 &amp;amp;&amp;amp; !confirm(&amp;quot;您即将删除&amp;quot; + numProtected + &amp;quot;个全保护页面，确定？&amp;quot;)) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var pages = event.target.getChecked( &amp;#039;pages&amp;#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 delete_talk = event.target.delete_talk &amp;amp;&amp;amp; event.target.delete_talk.checked;&lt;br /&gt;
	var delete_redirects = event.target.delete_redirects &amp;amp;&amp;amp; event.target.delete_redirects.checked;&lt;br /&gt;
	var unlink_page = event.target.unlink_page.checked;&lt;br /&gt;
	var unlink_file = event.target.unlink_file.checked;&lt;br /&gt;
	if( ! reason ) {&lt;br /&gt;
		alert(&amp;quot;您需要给出理由！&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	Morebits.simpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Morebits.status.init( event.target );&lt;br /&gt;
	if( !pages ) {&lt;br /&gt;
		Morebits.status.error( &amp;#039;错误&amp;#039;, &amp;#039;没什么要删的，取消操作&amp;#039; );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var pageDeleter = new Morebits.batchOperation(delete_page ? &amp;quot;正在删除页面&amp;quot; : &amp;quot;初始化作业请求&amp;quot;);&lt;br /&gt;
	pageDeleter.setOption(&amp;quot;chunkSize&amp;quot;, Twinkle.getPref(&amp;#039;batchdeleteChunks&amp;#039;));&lt;br /&gt;
	// we only need the initial status lines if we&amp;#039;re deleting the pages in the pages array&lt;br /&gt;
	pageDeleter.setOption(&amp;quot;preserveIndividualStatusLines&amp;quot;, delete_page);&lt;br /&gt;
	pageDeleter.setPageList(pages);&lt;br /&gt;
	pageDeleter.run(function(pageName) {&lt;br /&gt;
		var params = {&lt;br /&gt;
			page: pageName,&lt;br /&gt;
			delete_page: delete_page,&lt;br /&gt;
			delete_talk: delete_talk,&lt;br /&gt;
			delete_redirects: delete_redirects,&lt;br /&gt;
			unlink_page: unlink_page,&lt;br /&gt;
			unlink_file: unlink_file &amp;amp;&amp;amp; /^(File|Image)\:/i.test(pageName),&lt;br /&gt;
			reason: reason,&lt;br /&gt;
			pageDeleter: pageDeleter&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		var wikipedia_page = new Morebits.wiki.page( pageName, &amp;#039;删除页面&amp;#039; + pageName );&lt;br /&gt;
		wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
		if( delete_page ) {&lt;br /&gt;
			wikipedia_page.setEditSummary(reason + Twinkle.getPref(&amp;#039;deletionSummaryAd&amp;#039;));&lt;br /&gt;
			wikipedia_page.suppressProtectWarning();&lt;br /&gt;
			wikipedia_page.deletePage(Twinkle.batchdelete.callbacks.doExtras, pageDeleter.workerFailure);&lt;br /&gt;
		} else {&lt;br /&gt;
			Twinkle.batchdelete.callbacks.doExtras(wikipedia_page);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchdelete.callbacks = {&lt;br /&gt;
	// this stupid parameter name is a temporary thing until I implement an overhaul&lt;br /&gt;
	// of Morebits.wiki.* callback parameters&lt;br /&gt;
	doExtras: function( thingWithParameters ) {&lt;br /&gt;
		var params = thingWithParameters.parent ? thingWithParameters.parent.getCallbackParameters() :&lt;br /&gt;
			thingWithParameters.getCallbackParameters();&lt;br /&gt;
		// the initial batch operation&amp;#039;s job is to delete the page, and that has&lt;br /&gt;
		// succeeded by now&lt;br /&gt;
		params.pageDeleter.workerSuccess(thingWithParameters);&lt;br /&gt;
&lt;br /&gt;
		var query, wikipedia_api;&lt;br /&gt;
&lt;br /&gt;
		if( params.unlink_page ) {&lt;br /&gt;
			Twinkle.batchdelete.unlinkCache = {};&lt;br /&gt;
			query = {&lt;br /&gt;
				&amp;#039;action&amp;#039;: &amp;#039;query&amp;#039;,&lt;br /&gt;
				&amp;#039;list&amp;#039;: &amp;#039;backlinks&amp;#039;,&lt;br /&gt;
				&amp;#039;blfilterredir&amp;#039;: &amp;#039;nonredirects&amp;#039;,&lt;br /&gt;
				&amp;#039;blnamespace&amp;#039;: [0, 100], // main space and portal space only&lt;br /&gt;
				&amp;#039;bltitle&amp;#039;: params.page,&lt;br /&gt;
				&amp;#039;bllimit&amp;#039;: 5000  // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			};&lt;br /&gt;
			wikipedia_api = new Morebits.wiki.api( &amp;#039;抓取链入&amp;#039;, query, Twinkle.batchdelete.callbacks.unlinkBacklinksMain );&lt;br /&gt;
			wikipedia_api.params = params;&lt;br /&gt;
			wikipedia_api.post();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( params.unlink_file ) {&lt;br /&gt;
			query = {&lt;br /&gt;
				&amp;#039;action&amp;#039;: &amp;#039;query&amp;#039;,&lt;br /&gt;
				&amp;#039;list&amp;#039;: &amp;#039;imageusage&amp;#039;,&lt;br /&gt;
				&amp;#039;iutitle&amp;#039;: params.page,&lt;br /&gt;
				&amp;#039;iulimit&amp;#039;: 5000  // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			};&lt;br /&gt;
			wikipedia_api = new Morebits.wiki.api( &amp;#039;抓取文件链接&amp;#039;, query, Twinkle.batchdelete.callbacks.unlinkImageInstancesMain );&lt;br /&gt;
			wikipedia_api.params = params;&lt;br /&gt;
			wikipedia_api.post();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( params.delete_page ) {&lt;br /&gt;
			if ( params.delete_redirects ) {&lt;br /&gt;
				query = {&lt;br /&gt;
					&amp;#039;action&amp;#039;: &amp;#039;query&amp;#039;,&lt;br /&gt;
					&amp;#039;list&amp;#039;: &amp;#039;backlinks&amp;#039;,&lt;br /&gt;
					&amp;#039;blfilterredir&amp;#039;: &amp;#039;redirects&amp;#039;,&lt;br /&gt;
					&amp;#039;bltitle&amp;#039;: params.page,&lt;br /&gt;
					&amp;#039;bllimit&amp;#039;: 5000  // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
				};&lt;br /&gt;
				wikipedia_api = new Morebits.wiki.api( &amp;#039;抓取重定向&amp;#039;, query, Twinkle.batchdelete.callbacks.deleteRedirectsMain );&lt;br /&gt;
				wikipedia_api.params = params;&lt;br /&gt;
				wikipedia_api.post();&lt;br /&gt;
			}&lt;br /&gt;
			if ( params.delete_talk ) {&lt;br /&gt;
				var pageTitle = mw.Title.newFromText(params.page);&lt;br /&gt;
				if (pageTitle &amp;amp;&amp;amp; pageTitle.namespace % 2 === 0 &amp;amp;&amp;amp; pageTitle.namespace !== 2) {&lt;br /&gt;
					pageTitle.namespace++;  // now pageTitle is the talk page title!&lt;br /&gt;
					query = {&lt;br /&gt;
						&amp;#039;action&amp;#039;: &amp;#039;query&amp;#039;,&lt;br /&gt;
						&amp;#039;titles&amp;#039;: pageTitle.toText()&lt;br /&gt;
					};&lt;br /&gt;
					wikipedia_api = new Morebits.wiki.api( &amp;#039;检查讨论页是否存在&amp;#039;, query, Twinkle.batchdelete.callbacks.deleteTalk );&lt;br /&gt;
					wikipedia_api.params = params;&lt;br /&gt;
					wikipedia_api.params.talkPage = pageTitle.toText();&lt;br /&gt;
					wikipedia_api.post();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	deleteRedirectsMain: function( apiobj ) {&lt;br /&gt;
		var xml = apiobj.responseXML;&lt;br /&gt;
		var pages = $(xml).find(&amp;#039;bl&amp;#039;).map(function() { return $(this).attr(&amp;#039;title&amp;#039;); }).get();&lt;br /&gt;
		if (!pages.length) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var redirectDeleter = new Morebits.batchOperation(&amp;quot;删除到&amp;quot; + apiobj.params.page + &amp;quot;的重定向&amp;quot;);&lt;br /&gt;
		redirectDeleter.setOption(&amp;quot;chunkSize&amp;quot;, Twinkle.getPref(&amp;#039;batchdeleteChunks&amp;#039;));&lt;br /&gt;
		redirectDeleter.setPageList(pages);&lt;br /&gt;
		redirectDeleter.run(function(pageName) {&lt;br /&gt;
			var wikipedia_page = new Morebits.wiki.page(pageName, &amp;quot;删除&amp;quot; + pageName);&lt;br /&gt;
			wikipedia_page.setEditSummary(&amp;#039;[[WP:CSD#G15|G15]]: 孤立页面: 重定向到已删除页面“&amp;#039; + apiobj.params.page + &amp;#039;”&amp;#039; + Twinkle.getPref(&amp;#039;deletionSummaryAd&amp;#039;));&lt;br /&gt;
			wikipedia_page.deletePage(redirectDeleter.workerSuccess, redirectDeleter.workerFailure);&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
	deleteTalk: function( apiobj ) {&lt;br /&gt;
		var xml = apiobj.responseXML;&lt;br /&gt;
		var exists = $(xml).find(&amp;#039;page:not([missing])&amp;#039;).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
		if( !exists ) {&lt;br /&gt;
			// no talk page; forget about it&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var page = new Morebits.wiki.page(apiobj.params.talkPage, &amp;quot;删除条目&amp;quot; + apiobj.params.page + &amp;quot;的讨论页&amp;quot;);&lt;br /&gt;
		page.setEditSummary(&amp;#039;[[WP:CSD#G15|G15]]: 孤立页面: 已删除页面“&amp;#039; + apiobj.params.page + &amp;#039;”的讨论页&amp;#039; + Twinkle.getPref(&amp;#039;deletionSummaryAd&amp;#039;));&lt;br /&gt;
		page.deletePage();&lt;br /&gt;
	},&lt;br /&gt;
	unlinkBacklinksMain: function( apiobj ) {&lt;br /&gt;
		var xml = apiobj.responseXML;&lt;br /&gt;
		var pages = $(xml).find(&amp;#039;bl&amp;#039;).map(function() { return $(this).attr(&amp;#039;title&amp;#039;); }).get();&lt;br /&gt;
		if (!pages.length) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var unlinker = new Morebits.batchOperation(&amp;quot;取消到&amp;quot; + apiobj.params.page + &amp;quot;的链入&amp;quot;);&lt;br /&gt;
		unlinker.setOption(&amp;quot;chunkSize&amp;quot;, Twinkle.getPref(&amp;#039;batchdeleteChunks&amp;#039;));&lt;br /&gt;
		unlinker.setPageList(pages);&lt;br /&gt;
		unlinker.run(function(pageName) {&lt;br /&gt;
			var wikipedia_page = new Morebits.wiki.page(pageName, &amp;quot;取消链入于&amp;quot; + pageName);&lt;br /&gt;
			var params = $.extend({}, apiobj.params);&lt;br /&gt;
			params.title = pageName;&lt;br /&gt;
			params.unlinker = unlinker;&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.unlinker.workerSuccess(pageobj);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var text;&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 Morebits.wikitext.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.unlinker.workerSuccess(pageobj);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		pageobj.setEditSummary(&amp;#039;取消到页面“&amp;#039; + params.page + &amp;#039;”的链接&amp;#039; + Twinkle.getPref(&amp;#039;deletionSummaryAd&amp;#039;));&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setCreateOption(&amp;#039;nocreate&amp;#039;);&lt;br /&gt;
		pageobj.setMaxConflictRetries(10);&lt;br /&gt;
		pageobj.save(params.unlinker.workerSuccess, params.unlinker.workerFailure);&lt;br /&gt;
	},&lt;br /&gt;
	unlinkImageInstancesMain: function( apiobj ) {&lt;br /&gt;
		var xml = apiobj.responseXML;&lt;br /&gt;
		var pages = $(xml).find(&amp;#039;iu&amp;#039;).map(function() { return $(this).attr(&amp;#039;title&amp;#039;); }).get();&lt;br /&gt;
		if (!pages.length) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var unlinker = new Morebits.batchOperation(&amp;quot;取消到&amp;quot; + apiobj.params.page + &amp;quot;的链入&amp;quot;);&lt;br /&gt;
		unlinker.setOption(&amp;quot;chunkSize&amp;quot;, Twinkle.getPref(&amp;#039;batchdeleteChunks&amp;#039;));&lt;br /&gt;
		unlinker.setPageList(pages);&lt;br /&gt;
		unlinker.run(function(pageName) {&lt;br /&gt;
			var wikipedia_page = new Morebits.wiki.page(pageName, &amp;quot;移除文件使用于&amp;quot; + pageName);&lt;br /&gt;
			var params = $.extend({}, apiobj.params);&lt;br /&gt;
			params.title = pageName;&lt;br /&gt;
			params.unlinker = unlinker;&lt;br /&gt;
			wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
			wikipedia_page.load(Twinkle.batchdelete.callbacks.unlinkImageInstances);&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
	unlinkImageInstances: 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.unlinker.workerSuccess(pageobj);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var image = params.image.replace( /^(?:Image|File):/, &amp;#039;&amp;#039; );&lt;br /&gt;
		var text;&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 Morebits.wikitext.page( text );&lt;br /&gt;
		wikiPage.commentOutImage( image , &amp;#039;注释出文件，因其已被删除&amp;#039; );&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;
			pageobj.getStatusElement().error( &amp;#039;未能取消文件&amp;#039; + image + &amp;#039;在&amp;#039; + pageobj.getPageName() + &amp;#039;的使用&amp;#039; );&lt;br /&gt;
			params.unlinker.workerFailure(pageobj);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		pageobj.setEditSummary(&amp;#039;移除对文件&amp;#039; + image + &amp;quot;的使用（&amp;quot; + params.reason + &amp;quot;）&amp;quot; + Twinkle.getPref(&amp;#039;deletionSummaryAd&amp;#039;));&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setCreateOption(&amp;#039;nocreate&amp;#039;);&lt;br /&gt;
		pageobj.setMaxConflictRetries(10);&lt;br /&gt;
		pageobj.save(params.unlinker.workerSuccess, params.unlinker.workerFailure);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>zhwiki&gt;Jimmy Xu</name></author>
	</entry>
</feed>