<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://ml.sayahna.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinklebatchundelete.js</id>
	<title>MediaWiki:Gadget-twinklebatchundelete.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://ml.sayahna.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinklebatchundelete.js"/>
	<link rel="alternate" type="text/html" href="http://ml.sayahna.org/index.php?title=MediaWiki:Gadget-twinklebatchundelete.js&amp;action=history"/>
	<updated>2026-04-30T21:15:05Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.5</generator>
	<entry>
		<id>http://ml.sayahna.org/index.php?title=MediaWiki:Gadget-twinklebatchundelete.js&amp;diff=8129&amp;oldid=prev</id>
		<title>Cvr: 1 revision</title>
		<link rel="alternate" type="text/html" href="http://ml.sayahna.org/index.php?title=MediaWiki:Gadget-twinklebatchundelete.js&amp;diff=8129&amp;oldid=prev"/>
		<updated>2014-05-03T06:14:33Z</updated>

		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 06:14, 3 May 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Cvr</name></author>
		
	</entry>
	<entry>
		<id>http://ml.sayahna.org/index.php?title=MediaWiki:Gadget-twinklebatchundelete.js&amp;diff=8128&amp;oldid=prev</id>
		<title>Amalthea: v2.0-682-ge4735d6: Linting</title>
		<link rel="alternate" type="text/html" href="http://ml.sayahna.org/index.php?title=MediaWiki:Gadget-twinklebatchundelete.js&amp;diff=8128&amp;oldid=prev"/>
		<updated>2014-01-07T11:38:40Z</updated>

		<summary type="html">&lt;p&gt;v2.0-682-ge4735d6: Linting&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;//&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(function($){&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 user pages&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( mw.config.get(&amp;quot;wgNamespaceNumber&amp;quot;) !== mw.config.get(&amp;quot;wgNamespaceIds&amp;quot;).user || &lt;br /&gt;
		!mw.config.get(&amp;quot;wgArticleId&amp;quot;) ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if( Morebits.userIsInGroup( 'sysop' ) ) {&lt;br /&gt;
		Twinkle.addPortletLink( Twinkle.batchundelete.callback, &amp;quot;Und-batch&amp;quot;, &amp;quot;tw-batch-undel&amp;quot;, &amp;quot;Undelete 'em all&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.batchundelete.callback = function twinklebatchundeleteCallback() {&lt;br /&gt;
	var Window = new Morebits.simpleWindow( 800, 400 );&lt;br /&gt;
	Window.setScriptName(&amp;quot;Twinkle&amp;quot;);&lt;br /&gt;
	Window.setTitle(&amp;quot;Batch undelete&amp;quot;);&lt;br /&gt;
	var form = new Morebits.quickForm( Twinkle.batchundelete.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
			type: 'textarea',&lt;br /&gt;
			name: 'reason',&lt;br /&gt;
			label: 'Reason: '&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
	var query = {&lt;br /&gt;
		'action': 'query',&lt;br /&gt;
		'generator': 'links',&lt;br /&gt;
		'titles': mw.config.get(&amp;quot;wgPageName&amp;quot;),&lt;br /&gt;
		'gpllimit' : Twinkle.getPref('batchMax') // the max for sysops&lt;br /&gt;
	};&lt;br /&gt;
	var wikipedia_api = new Morebits.wiki.api( 'Grabbing pages', query, function( self ) {&lt;br /&gt;
			var xmlDoc = self.responseXML;&lt;br /&gt;
			var snapshot = xmlDoc.evaluate('//page[@missing]', 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( '@title', 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: 'checkbox',&lt;br /&gt;
					name: 'pages',&lt;br /&gt;
					list: list&lt;br /&gt;
				}&lt;br /&gt;
			);&lt;br /&gt;
			self.params.form.append( { type:'submit' } );&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( 'div' );&lt;br /&gt;
	Morebits.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;
	Morebits.wiki.actionCompleted.notice = 'Status';&lt;br /&gt;
	Morebits.wiki.actionCompleted.postfix = 'batch undeletion is now completed';&lt;br /&gt;
&lt;br /&gt;
	var pages = event.target.getChecked( 'pages' );&lt;br /&gt;
	var reason = event.target.reason.value;&lt;br /&gt;
	if( ! reason ) {&lt;br /&gt;
		alert(&amp;quot;You need to give a reason, you cabal crony!&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;
&lt;br /&gt;
	if( !pages ) {&lt;br /&gt;
		Morebits.status.error( 'Error', 'nothing to undelete, aborting' );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var work = Morebits.array.chunk( pages, Twinkle.getPref('batchUndeleteChunks') );&lt;br /&gt;
	Morebits.wiki.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;
			Morebits.status.info( 'work done' );&lt;br /&gt;
			window.clearInterval( Twinkle.batchundelete.currentundeletor );&lt;br /&gt;
			Morebits.wiki.removeCheckpoint();&lt;br /&gt;
			return;&lt;br /&gt;
		} else if( work.length !== 0 &amp;amp;&amp;amp; Twinkle.batchundelete.currentUndeleteCounter &amp;lt;= Twinkle.getPref('batchUndeleteMinCutOff') ) {&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;
					'token': mw.user.tokens.get().editToken,&lt;br /&gt;
					'title': title,&lt;br /&gt;
					'action': 'undelete',&lt;br /&gt;
					'reason': reason + Twinkle.getPref('deletionSummaryAd')&lt;br /&gt;
				};&lt;br /&gt;
				var wikipedia_api = new Morebits.wiki.api( &amp;quot;Undeleting &amp;quot; + title, query, function( self ) { &lt;br /&gt;
						--Twinkle.batchundelete.currentUndeleteCounter;&lt;br /&gt;
						var link = document.createElement( 'a' );&lt;br /&gt;
						link.setAttribute( 'href', mw.util.getUrl(self.itsTitle) );&lt;br /&gt;
						link.setAttribute( 'title', self.itsTitle );&lt;br /&gt;
						link.appendChild( document.createTextNode(self.itsTitle) );&lt;br /&gt;
						self.statelem.info( ['completed (',link,')'] );&lt;br /&gt;
&lt;br /&gt;
					});&lt;br /&gt;
				wikipedia_api.itsTitle = title;&lt;br /&gt;
				wikipedia_api.post();&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
		}&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>Amalthea</name></author>
		
	</entry>
</feed>