<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.bharatpedia.org/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-BharatMitra-batch.js</id>
	<title>MediaWiki:Gadget-BharatMitra-batch.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://en.bharatpedia.org/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-BharatMitra-batch.js"/>
	<link rel="alternate" type="text/html" href="https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-batch.js&amp;action=history"/>
	<updated>2026-11-07T10:11:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-batch.js&amp;diff=738541&amp;oldid=prev</id>
		<title>Bharatwiki Socrates: Create Bharat Mitra gadget page (English port)</title>
		<link rel="alternate" type="text/html" href="https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-batch.js&amp;diff=738541&amp;oldid=prev"/>
		<updated>2026-11-01T04:16:52Z</updated>

		<summary type="html">&lt;p&gt;Create Bharat Mitra gadget page (English port)&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;
/* Bharat Mitra: batch delete module (administrators only) */&lt;br /&gt;
( function () {&lt;br /&gt;
	&amp;#039;use strict&amp;#039;;&lt;br /&gt;
	var BM = window.BharatMitra;&lt;br /&gt;
	function parseList( text ) {&lt;br /&gt;
		var seen = {};&lt;br /&gt;
		var out = [];&lt;br /&gt;
		String( text || &amp;#039;&amp;#039; ).split( &amp;#039;\n&amp;#039; ).forEach( function ( line ) {&lt;br /&gt;
			var t = line.trim().replace( /^\[\[:?/, &amp;#039;&amp;#039; ).replace( /\]\]$/, &amp;#039;&amp;#039; ).trim();&lt;br /&gt;
			if ( t &amp;amp;&amp;amp; !seen[ t ] ) { seen[ t ] = 1; out.push( t ); }&lt;br /&gt;
		} );&lt;br /&gt;
		return out;&lt;br /&gt;
	}&lt;br /&gt;
	BM.register( &amp;#039;batch&amp;#039;, {&lt;br /&gt;
		open: function () {&lt;br /&gt;
			var stopped = false;&lt;br /&gt;
			BM.core.dialog( {&lt;br /&gt;
				title: &amp;#039;Batch delete&amp;#039;,&lt;br /&gt;
				help: &amp;#039;Write one page name per line. Deletion happens one page at a time, slowly. To stop in between, press &amp;quot;Cancel&amp;quot;.&amp;#039;,&lt;br /&gt;
				stoppable: true,&lt;br /&gt;
				onStop: function () { stopped = true; },&lt;br /&gt;
				fields: [&lt;br /&gt;
					{ name: &amp;#039;pages&amp;#039;, label: &amp;#039;List of pages (one per line)&amp;#039;, type: &amp;#039;textarea&amp;#039;, rows: 8, required: true },&lt;br /&gt;
					{ name: &amp;#039;reason&amp;#039;, label: &amp;#039;Reason for deletion&amp;#039;, type: &amp;#039;text&amp;#039;, required: true }&lt;br /&gt;
				],&lt;br /&gt;
				preview: function ( v ) {&lt;br /&gt;
					var list = parseList( v.pages );&lt;br /&gt;
					if ( !list.length ) { throw new Error( &amp;#039;Write at least one page.&amp;#039; ); }&lt;br /&gt;
					return &amp;#039;\&amp;#039;\&amp;#039;\&amp;#039;Pages to be deleted (&amp;#039; + list.length + &amp;#039;):\&amp;#039;\&amp;#039;\&amp;#039;\n&amp;#039; + list.map( function ( t ) {&lt;br /&gt;
						return &amp;#039;* [[:&amp;#039; + t + &amp;#039;]]&amp;#039;;&lt;br /&gt;
					} ).join( &amp;#039;\n&amp;#039; );&lt;br /&gt;
				},&lt;br /&gt;
				submitLabel: &amp;#039;Delete all&amp;#039;,&lt;br /&gt;
				success: &amp;#039;The batch deletion process has finished.&amp;#039;,&lt;br /&gt;
				onSubmit: function ( v ) {&lt;br /&gt;
					var list = parseList( v.pages );&lt;br /&gt;
					var reason = BM.core.cleanParam( v.reason );&lt;br /&gt;
					var done = 0;&lt;br /&gt;
					var failed = [];&lt;br /&gt;
					var chain = $.Deferred().resolve().promise();&lt;br /&gt;
					list.forEach( function ( t ) {&lt;br /&gt;
						chain = chain.then( function () {&lt;br /&gt;
							if ( stopped ) { return null; }&lt;br /&gt;
							return BM.core.api().postWithToken( &amp;#039;delete&amp;#039;, {&lt;br /&gt;
								action: &amp;#039;delete&amp;#039;, title: t, reason: reason, format: &amp;#039;json&amp;#039;&lt;br /&gt;
							} ).then( function () {&lt;br /&gt;
								done++;&lt;br /&gt;
								mw.notify( &amp;#039;Deleted (&amp;#039; + done + &amp;#039;/&amp;#039; + list.length + &amp;#039;): &amp;#039; + t );&lt;br /&gt;
							} ).catch( function () {&lt;br /&gt;
								failed.push( t );&lt;br /&gt;
							} ).then( function () {&lt;br /&gt;
								return new $.Deferred( function ( d ) { setTimeout( d.resolve, 700 ); } ).promise();&lt;br /&gt;
							} );&lt;br /&gt;
						} );&lt;br /&gt;
					} );&lt;br /&gt;
					return chain.then( function () {&lt;br /&gt;
						var msg = &amp;#039;Deleted: &amp;#039; + done + &amp;#039;/&amp;#039; + list.length;&lt;br /&gt;
						if ( failed.length ) { msg += &amp;#039;. Failed: &amp;#039; + failed.join( &amp;#039;, &amp;#039; ); }&lt;br /&gt;
						if ( stopped ) { msg += &amp;#039;. Process stopped.&amp;#039;; }&lt;br /&gt;
						mw.notify( msg, { type: failed.length ? &amp;#039;warn&amp;#039; : &amp;#039;success&amp;#039; } );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
}() );&lt;br /&gt;
/* &amp;lt;/nowiki&amp;gt; */&lt;/div&gt;</summary>
		<author><name>Bharatwiki Socrates</name></author>
	</entry>
</feed>