<?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-core.js</id>
	<title>MediaWiki:Gadget-BharatMitra-core.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-core.js"/>
	<link rel="alternate" type="text/html" href="https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-core.js&amp;action=history"/>
	<updated>2026-11-07T10:11:26Z</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-core.js&amp;diff=739620&amp;oldid=prev</id>
		<title>Bharatwiki Socrates at 06:51, 7 November 2026</title>
		<link rel="alternate" type="text/html" href="https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-core.js&amp;diff=739620&amp;oldid=prev"/>
		<updated>2026-11-07T06:51: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;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:21, 7 November 2026&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-l145&quot;&gt;Line 145:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 145:&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;		return getApi().postWithToken( &amp;#039;edit&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;		return getApi().postWithToken( &amp;#039;edit&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;			action: &amp;#039;edit&amp;#039;, title: CONFIG_PAGE, text: JSON.stringify( configCache, null, 2 ),&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;			action: &amp;#039;edit&amp;#039;, title: CONFIG_PAGE, text: JSON.stringify( configCache, null, 2 ),&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;			summary: &#039;Bharat Mitra&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;: settings saved&lt;/del&gt;&#039;, contentmodel: &#039;json&#039;, format: &#039;json&#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;			summary: &#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Settings saved (using [[Bharatpedia:Bharat Mitra|&lt;/ins&gt;Bharat Mitra&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]])&lt;/ins&gt;&#039;, contentmodel: &#039;json&#039;, format: &#039;json&#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;		} ).then( function ( r ) {&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;		} ).then( function ( r ) {&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;			if ( r &amp;amp;&amp;amp; r.edit &amp;amp;&amp;amp; r.edit.result === &amp;#039;Success&amp;#039; ) { return r; }&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;			if ( r &amp;amp;&amp;amp; r.edit &amp;amp;&amp;amp; r.edit.result === &amp;#039;Success&amp;#039; ) { return r; }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key bharatpedia-enwiki:diff:1.41:old-738625:rev-739620:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Bharatwiki Socrates</name></author>
	</entry>
	<entry>
		<id>https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-core.js&amp;diff=738625&amp;oldid=prev</id>
		<title>Bharatwiki Socrates: Bharat Mitra: notify the creator even when the creator is the nominator (self-notification on)</title>
		<link rel="alternate" type="text/html" href="https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-core.js&amp;diff=738625&amp;oldid=prev"/>
		<updated>2026-11-01T06:15:04Z</updated>

		<summary type="html">&lt;p&gt;Bharat Mitra: notify the creator even when the creator is the nominator (self-notification on)&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;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:45, 1 November 2026&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-l98&quot;&gt;Line 98:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 98:&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;	}&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;	}&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;	/* Best-effort creator notification. Always resolves with a status string&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;	/* Best-effort creator notification. Always resolves with a status string&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;	   (&#039;sent&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;, &#039;self&lt;/del&gt;&#039;, &#039;none&#039;, &#039;skipped&#039;, &#039;failed&#039;) and never rejects, so a&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;	   (&#039;sent&#039;, &#039;none&#039;, &#039;skipped&#039;, &#039;failed&#039;) and never rejects, so a&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;	   notice problem can no longer stall or fail the main action.&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;	   notice problem can no longer stall or fail the main action.&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;	   Imported pages often have a first editor like &amp;quot;imported&amp;gt;Example&amp;quot; or&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;	   Imported pages often have a first editor like &amp;quot;imported&amp;gt;Example&amp;quot; or&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;	   &amp;quot;-&amp;gt;Example&amp;quot;: not a local account, and &amp;quot;&amp;gt;&amp;quot; is not allowed in a page&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;	   &amp;quot;-&amp;gt;Example&amp;quot;: not a local account, and &amp;quot;&amp;gt;&amp;quot; is not allowed in a page&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;	   title, so there is no user talk page to write to (&#039;skipped&#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;	   title, so there is no user talk page to write to (&#039;skipped&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	   The creator is notified even when the creator is the current user&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	   (self-notification enabled at the user&#039;s request, 1 Nov 2026&lt;/ins&gt;). */&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;	function notifyCreator( pageTitle, block, summary ) {&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;	function notifyCreator( pageTitle, block, summary ) {&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;		function failed() { return &amp;#039;failed&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;		function failed() { return &amp;#039;failed&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;		return firstEditor( pageTitle ).then( function ( creator ) {&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;		return firstEditor( pageTitle ).then( function ( creator ) {&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;			if ( !creator ) { return &amp;#039;none&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;			if ( !creator ) { return &amp;#039;none&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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			if ( creator === mw.config.get( &#039;wgUserName&#039; ) ) { return &#039;self&#039;; }&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&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;			if ( /^(imported&amp;gt;|-&amp;gt;)/.test( creator ) || /[&amp;lt;&amp;gt;[\]{}|#]/.test( creator ) ) { return &amp;#039;skipped&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;			if ( /^(imported&amp;gt;|-&amp;gt;)/.test( creator ) || /[&amp;lt;&amp;gt;[\]{}|#]/.test( creator ) ) { return &amp;#039;skipped&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;			return getApi().get( {&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;			return getApi().get( {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bharatwiki Socrates</name></author>
	</entry>
	<entry>
		<id>https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-core.js&amp;diff=738594&amp;oldid=prev</id>
		<title>Bharatwiki Socrates: Bharat Mitra: make creator notification best-effort so it cannot stall a nomination</title>
		<link rel="alternate" type="text/html" href="https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-core.js&amp;diff=738594&amp;oldid=prev"/>
		<updated>2026-11-01T05:34:40Z</updated>

		<summary type="html">&lt;p&gt;Bharat Mitra: make creator notification best-effort so it cannot stall a nomination&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;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:04, 1 November 2026&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-l31&quot;&gt;Line 31:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&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;		} ).then( function ( r ) {&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;		} ).then( function ( r ) {&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;			var p = r.query.pages[ 0 ];&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;			var p = r.query.pages[ 0 ];&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;			if ( !p || p.missing ) { return { exists: false, content: &#039;&#039;, revid: 0 }; }&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;			if ( !p || p.missing &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|| p.invalid &lt;/ins&gt;) { return { exists: false, content: &#039;&#039;, revid: 0 }; }&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;			var rev = p.revisions[ 0 ];&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;			var rev = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;p.revisions &amp;amp;&amp;amp; &lt;/ins&gt;p.revisions[ 0 ];&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			if ( !rev || !rev.slots || !rev.slots.main ) { return { exists: false, content: &#039;&#039;, revid: 0 }; }&lt;/ins&gt;&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;			return { exists: true, content: rev.slots.main.content, revid: rev.revid };&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;			return { exists: true, content: rev.slots.main.content, revid: rev.revid };&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;		} );&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;		} );&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-l95&quot;&gt;Line 95:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 96:&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;			return null;&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;			return null;&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;		} );&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;		} );&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	/* Best-effort creator notification. Always resolves with a status string&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	   (&#039;sent&#039;, &#039;self&#039;, &#039;none&#039;, &#039;skipped&#039;, &#039;failed&#039;) and never rejects, so a&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	   notice problem can no longer stall or fail the main action.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	   Imported pages often have a first editor like &quot;imported&amp;gt;Example&quot; or&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	   &quot;-&amp;gt;Example&quot;: not a local account, and &quot;&amp;gt;&quot; is not allowed in a page&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	   title, so there is no user talk page to write to (&#039;skipped&#039;). */&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	function notifyCreator( pageTitle, block, summary ) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		function failed() { return &#039;failed&#039;; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		return firstEditor( pageTitle ).then( function ( creator ) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			if ( !creator ) { return &#039;none&#039;; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			if ( creator === mw.config.get( &#039;wgUserName&#039; ) ) { return &#039;self&#039;; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			if ( /^(imported&amp;gt;|-&amp;gt;)/.test( creator ) || /[&amp;lt;&amp;gt;[\]{}|#]/.test( creator ) ) { return &#039;skipped&#039;; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			return getApi().get( {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				action: &#039;query&#039;, list: &#039;users&#039;, ususers: creator, formatversion: 2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			} ).then( function ( r ) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				var u = r.query &amp;amp;&amp;amp; r.query.users &amp;amp;&amp;amp; r.query.users[ 0 ];&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				if ( !u || u.invalid || u.missing || !u.userid ) { return &#039;skipped&#039;; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				return appendUnderMonth( &#039;User talk:&#039; + creator, block, summary ).then(&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;					function () { return &#039;sent&#039;; }, failed );&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			}, failed );&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		}, failed );&lt;/ins&gt;&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;	}&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;	}&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 colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l273&quot;&gt;Line 273:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 296:&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;		getPage: getPage, savePage: savePage, appendToPage: appendToPage,&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;		getPage: getPage, savePage: savePage, appendToPage: appendToPage,&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;		appendUnderMonth: appendUnderMonth, addSection: addSection,&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;		appendUnderMonth: appendUnderMonth, addSection: addSection,&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;		parse: parse, firstEditor: firstEditor, dialog: dialog,&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;		parse: parse, firstEditor: firstEditor&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, notifyCreator: notifyCreator&lt;/ins&gt;, dialog: dialog,&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;		getConfig: getConfig, saveConfig: saveConfig, currentConfig: currentConfig&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;		getConfig: getConfig, saveConfig: saveConfig, currentConfig: currentConfig&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;	};&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;	};&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bharatwiki Socrates</name></author>
	</entry>
	<entry>
		<id>https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-BharatMitra-core.js&amp;diff=738531&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-core.js&amp;diff=738531&amp;oldid=prev"/>
		<updated>2026-11-01T04:15:47Z</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: core library (dialogs, API helpers) */&lt;br /&gt;
( function () {&lt;br /&gt;
	&amp;#039;use strict&amp;#039;;&lt;br /&gt;
	if ( window.BharatMitra &amp;amp;&amp;amp; window.BharatMitra.core ) { return; }&lt;br /&gt;
	var BM = window.BharatMitra = window.BharatMitra || { modules: {}, loaded: {} };&lt;br /&gt;
	var api = null;&lt;br /&gt;
	var MONTHS = [ &amp;#039;January&amp;#039;, &amp;#039;February&amp;#039;, &amp;#039;March&amp;#039;, &amp;#039;April&amp;#039;, &amp;#039;May&amp;#039;, &amp;#039;June&amp;#039;, &amp;#039;July&amp;#039;, &amp;#039;August&amp;#039;, &amp;#039;September&amp;#039;, &amp;#039;October&amp;#039;, &amp;#039;November&amp;#039;, &amp;#039;December&amp;#039; ];&lt;br /&gt;
	var SIG = &amp;#039;~~&amp;#039; + &amp;#039;~~&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	function getApi() {&lt;br /&gt;
		if ( !api ) { api = new mw.Api(); }&lt;br /&gt;
		return api;&lt;br /&gt;
	}&lt;br /&gt;
	function esc( s ) {&lt;br /&gt;
		return String( s === null || s === undefined ? &amp;#039;&amp;#039; : s ).replace( /[&amp;amp;&amp;lt;&amp;gt;&amp;quot;&amp;#039;]/g, function ( c ) {&lt;br /&gt;
			return { &amp;#039;&amp;amp;&amp;#039;: &amp;#039;&amp;amp;amp;&amp;#039;, &amp;#039;&amp;lt;&amp;#039;: &amp;#039;&amp;amp;lt;&amp;#039;, &amp;#039;&amp;gt;&amp;#039;: &amp;#039;&amp;amp;gt;&amp;#039;, &amp;#039;&amp;quot;&amp;#039;: &amp;#039;&amp;amp;quot;&amp;#039;, &amp;quot;&amp;#039;&amp;quot;: &amp;#039;&amp;amp;#39;&amp;#039; }[ c ];&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
	function cleanParam( s ) {&lt;br /&gt;
		return String( s || &amp;#039;&amp;#039; ).replace( /\s*\|\s*/g, &amp;#039; &amp;#039; ).replace( /[\r\n]+/g, &amp;#039; &amp;#039; ).replace( /\s+/g, &amp;#039; &amp;#039; ).trim();&lt;br /&gt;
	}&lt;br /&gt;
	function monthHeading( d ) {&lt;br /&gt;
		d = d || new Date();&lt;br /&gt;
		return MONTHS[ d.getMonth() ] + &amp;#039; &amp;#039; + d.getFullYear();&lt;br /&gt;
	}&lt;br /&gt;
	function getPage( title ) {&lt;br /&gt;
		return getApi().get( {&lt;br /&gt;
			action: &amp;#039;query&amp;#039;, prop: &amp;#039;revisions&amp;#039;, titles: title,&lt;br /&gt;
			rvprop: &amp;#039;content|ids&amp;#039;, rvslots: &amp;#039;main&amp;#039;, rvlimit: 1, formatversion: 2&lt;br /&gt;
		} ).then( function ( r ) {&lt;br /&gt;
			var p = r.query.pages[ 0 ];&lt;br /&gt;
			if ( !p || p.missing ) { return { exists: false, content: &amp;#039;&amp;#039;, revid: 0 }; }&lt;br /&gt;
			var rev = p.revisions[ 0 ];&lt;br /&gt;
			return { exists: true, content: rev.slots.main.content, revid: rev.revid };&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
	function savePage( title, text, summary, baserevid ) {&lt;br /&gt;
		var params = { action: &amp;#039;edit&amp;#039;, title: title, text: text, summary: summary, format: &amp;#039;json&amp;#039; };&lt;br /&gt;
		if ( baserevid ) { params.baserevid = baserevid; }&lt;br /&gt;
		return getApi().postWithToken( &amp;#039;edit&amp;#039;, params ).then( function ( r ) {&lt;br /&gt;
			if ( r &amp;amp;&amp;amp; r.edit &amp;amp;&amp;amp; r.edit.result === &amp;#039;Success&amp;#039; ) { return r; }&lt;br /&gt;
			throw new Error( &amp;#039;Could not be saved.&amp;#039; );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
	function appendToPage( title, block, summary ) {&lt;br /&gt;
		return getPage( title ).then( function ( p ) {&lt;br /&gt;
			var text = p.exists ? p.content.replace( /\s+$/, &amp;#039;&amp;#039; ) + &amp;#039;\n&amp;#039; + block + &amp;#039;\n&amp;#039; : block + &amp;#039;\n&amp;#039;;&lt;br /&gt;
			return savePage( title, text, summary, p.revid );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
	function appendUnderMonth( title, block, summary ) {&lt;br /&gt;
		return getPage( title ).then( function ( p ) {&lt;br /&gt;
			var content = p.content || &amp;#039;&amp;#039;;&lt;br /&gt;
			var heading = &amp;#039;== &amp;#039; + monthHeading() + &amp;#039; ==&amp;#039;;&lt;br /&gt;
			var cleanBlock = String( block ).replace( /\s+$/, &amp;#039;&amp;#039; );&lt;br /&gt;
			var idx = content.indexOf( heading );&lt;br /&gt;
			var out;&lt;br /&gt;
			if ( idx === -1 ) {&lt;br /&gt;
				out = content.replace( /\s+$/, &amp;#039;&amp;#039; ) + ( content ? &amp;#039;\n\n&amp;#039; : &amp;#039;&amp;#039; ) + heading + &amp;#039;\n&amp;#039; + cleanBlock + &amp;#039;\n&amp;#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				var next = content.indexOf( &amp;#039;\n== &amp;#039;, idx + heading.length );&lt;br /&gt;
				if ( next === -1 ) {&lt;br /&gt;
					out = content.replace( /\s+$/, &amp;#039;&amp;#039; ) + &amp;#039;\n&amp;#039; + cleanBlock + &amp;#039;\n&amp;#039;;&lt;br /&gt;
				} else {&lt;br /&gt;
					out = content.slice( 0, next ).replace( /\s+$/, &amp;#039;&amp;#039; ) + &amp;#039;\n&amp;#039; + cleanBlock + &amp;#039;\n&amp;#039; + content.slice( next );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return savePage( title, out, summary, p.revid );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
	function addSection( title, heading, body, summary ) {&lt;br /&gt;
		return getApi().postWithToken( &amp;#039;edit&amp;#039;, {&lt;br /&gt;
			action: &amp;#039;edit&amp;#039;, title: title, section: &amp;#039;new&amp;#039;, sectiontitle: heading,&lt;br /&gt;
			text: body, summary: summary, format: &amp;#039;json&amp;#039;&lt;br /&gt;
		} ).then( function ( r ) {&lt;br /&gt;
			if ( r &amp;amp;&amp;amp; r.edit &amp;amp;&amp;amp; r.edit.result === &amp;#039;Success&amp;#039; ) { return r; }&lt;br /&gt;
			throw new Error( &amp;#039;The section could not be added.&amp;#039; );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
	function parse( text, title ) {&lt;br /&gt;
		var previewText = String( text ).replace( /\{\{subst:/g, &amp;#039;{{&amp;#039; ).replace( /~{4}/g, &amp;#039;(signature)&amp;#039; );&lt;br /&gt;
		return getApi().post( {&lt;br /&gt;
			action: &amp;#039;parse&amp;#039;, text: previewText, title: title || mw.config.get( &amp;#039;wgPageName&amp;#039; ),&lt;br /&gt;
			prop: &amp;#039;text&amp;#039;, disableeditsection: true, contentmodel: &amp;#039;wikitext&amp;#039;, format: &amp;#039;json&amp;#039;&lt;br /&gt;
		} ).then( function ( r ) { return r.parse.text[ &amp;#039;*&amp;#039; ]; } );&lt;br /&gt;
	}&lt;br /&gt;
	function firstEditor( title ) {&lt;br /&gt;
		return getApi().get( {&lt;br /&gt;
			action: &amp;#039;query&amp;#039;, prop: &amp;#039;revisions&amp;#039;, titles: title,&lt;br /&gt;
			rvprop: &amp;#039;user&amp;#039;, rvdir: &amp;#039;newer&amp;#039;, rvlimit: 1, formatversion: 2&lt;br /&gt;
		} ).then( function ( r ) {&lt;br /&gt;
			var p = r.query.pages[ 0 ];&lt;br /&gt;
			if ( p &amp;amp;&amp;amp; p.revisions &amp;amp;&amp;amp; p.revisions[ 0 ] ) { return p.revisions[ 0 ].user; }&lt;br /&gt;
			return null;&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var CONFIG_PAGE = &amp;#039;User:&amp;#039; + ( mw.config.get( &amp;#039;wgUserName&amp;#039; ) || &amp;#039;&amp;#039; ) + &amp;#039;/BharatMitra-config.json&amp;#039;;&lt;br /&gt;
	var configCache = null;&lt;br /&gt;
	var CONFIG_DEFAULTS = { warnLevel: &amp;#039;auto&amp;#039;, speedyNotify: true, alwaysPreview: true };&lt;br /&gt;
	function currentConfig() { return configCache || CONFIG_DEFAULTS; }&lt;br /&gt;
	function getConfig() {&lt;br /&gt;
		if ( configCache ) { return $.Deferred().resolve( configCache ).promise(); }&lt;br /&gt;
		return getPage( CONFIG_PAGE ).then( function ( p ) {&lt;br /&gt;
			if ( p.exists ) {&lt;br /&gt;
				try {&lt;br /&gt;
					configCache = $.extend( {}, CONFIG_DEFAULTS, JSON.parse( p.content ) );&lt;br /&gt;
					return configCache;&lt;br /&gt;
				} catch ( e ) { /* use the defaults */ }&lt;br /&gt;
			}&lt;br /&gt;
			configCache = $.extend( {}, CONFIG_DEFAULTS );&lt;br /&gt;
			return configCache;&lt;br /&gt;
		} ).catch( function () {&lt;br /&gt;
			configCache = $.extend( {}, CONFIG_DEFAULTS );&lt;br /&gt;
			return configCache;&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
	function saveConfig( cfg ) {&lt;br /&gt;
		configCache = $.extend( {}, CONFIG_DEFAULTS, cfg );&lt;br /&gt;
		return getApi().postWithToken( &amp;#039;edit&amp;#039;, {&lt;br /&gt;
			action: &amp;#039;edit&amp;#039;, title: CONFIG_PAGE, text: JSON.stringify( configCache, null, 2 ),&lt;br /&gt;
			summary: &amp;#039;Bharat Mitra: settings saved&amp;#039;, contentmodel: &amp;#039;json&amp;#039;, format: &amp;#039;json&amp;#039;&lt;br /&gt;
		} ).then( function ( r ) {&lt;br /&gt;
			if ( r &amp;amp;&amp;amp; r.edit &amp;amp;&amp;amp; r.edit.result === &amp;#039;Success&amp;#039; ) { return r; }&lt;br /&gt;
			throw new Error( &amp;#039;Settings could not be saved.&amp;#039; );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function dialog( opts ) {&lt;br /&gt;
		$( &amp;#039;.bm-overlay&amp;#039; ).remove();&lt;br /&gt;
		var confirmed = false;&lt;br /&gt;
		var usePreview = ( opts.preview &amp;amp;&amp;amp; currentConfig().alwaysPreview !== false ) ? opts.preview : null;&lt;br /&gt;
		var overlay = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-overlay&amp;#039; );&lt;br /&gt;
		var panel = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-dialog&amp;#039; ).attr( &amp;#039;role&amp;#039;, &amp;#039;dialog&amp;#039; );&lt;br /&gt;
		var head = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-dialog-head&amp;#039; );&lt;br /&gt;
		head.append( $( &amp;#039;&amp;lt;span&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-dialog-title&amp;#039; ).text( opts.title || &amp;#039;Bharat Mitra&amp;#039; ) );&lt;br /&gt;
		var closeBtn = $( &amp;#039;&amp;lt;button&amp;gt;&amp;#039; ).attr( &amp;#039;type&amp;#039;, &amp;#039;button&amp;#039; ).addClass( &amp;#039;bm-x&amp;#039; ).text( &amp;#039;×&amp;#039; );&lt;br /&gt;
		head.append( closeBtn );&lt;br /&gt;
		panel.append( head );&lt;br /&gt;
		if ( opts.help ) { panel.append( $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-help&amp;#039; ).text( opts.help ) ); }&lt;br /&gt;
		if ( opts.info ) { panel.append( $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-info&amp;#039; ).text( opts.info ) ); }&lt;br /&gt;
		var form = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-form&amp;#039; );&lt;br /&gt;
		var inputs = {};&lt;br /&gt;
		( opts.fields || [] ).forEach( function ( f ) {&lt;br /&gt;
			var row = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-row&amp;#039; );&lt;br /&gt;
			var input;&lt;br /&gt;
			if ( f.type === &amp;#039;select&amp;#039; ) {&lt;br /&gt;
				input = $( &amp;#039;&amp;lt;select&amp;gt;&amp;#039; );&lt;br /&gt;
				( f.options || [] ).forEach( function ( o ) {&lt;br /&gt;
					if ( o.group ) {&lt;br /&gt;
						var og = $( &amp;#039;&amp;lt;optgroup&amp;gt;&amp;#039; ).attr( &amp;#039;label&amp;#039;, o.group );&lt;br /&gt;
						o.options.forEach( function ( oo ) {&lt;br /&gt;
							og.append( $( &amp;#039;&amp;lt;option&amp;gt;&amp;#039; ).attr( &amp;#039;value&amp;#039;, oo[ 0 ] ).text( oo[ 1 ] ) );&lt;br /&gt;
						} );&lt;br /&gt;
						input.append( og );&lt;br /&gt;
					} else {&lt;br /&gt;
						input.append( $( &amp;#039;&amp;lt;option&amp;gt;&amp;#039; ).attr( &amp;#039;value&amp;#039;, o[ 0 ] ).text( o[ 1 ] ) );&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
				if ( f.value ) { input.val( f.value ); }&lt;br /&gt;
			} else if ( f.type === &amp;#039;textarea&amp;#039; ) {&lt;br /&gt;
				input = $( &amp;#039;&amp;lt;textarea&amp;gt;&amp;#039; ).attr( &amp;#039;rows&amp;#039;, f.rows || 3 );&lt;br /&gt;
				if ( f.value ) { input.val( f.value ); }&lt;br /&gt;
			} else if ( f.type === &amp;#039;checkbox&amp;#039; ) {&lt;br /&gt;
				input = $( &amp;#039;&amp;lt;input&amp;gt;&amp;#039; ).attr( &amp;#039;type&amp;#039;, &amp;#039;checkbox&amp;#039; );&lt;br /&gt;
				if ( f.value ) { input.prop( &amp;#039;checked&amp;#039;, true ); }&lt;br /&gt;
			} else {&lt;br /&gt;
				input = $( &amp;#039;&amp;lt;input&amp;gt;&amp;#039; ).attr( &amp;#039;type&amp;#039;, &amp;#039;text&amp;#039; );&lt;br /&gt;
				if ( f.value ) { input.val( f.value ); }&lt;br /&gt;
				if ( f.placeholder ) { input.attr( &amp;#039;placeholder&amp;#039;, f.placeholder ); }&lt;br /&gt;
			}&lt;br /&gt;
			input.addClass( &amp;#039;bm-input&amp;#039; ).attr( &amp;#039;data-bm-field&amp;#039;, f.name );&lt;br /&gt;
			inputs[ f.name ] = { def: f, el: input };&lt;br /&gt;
			row.append( $( &amp;#039;&amp;lt;label&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-label&amp;#039; ).text( f.label ) );&lt;br /&gt;
			row.append( input );&lt;br /&gt;
			form.append( row );&lt;br /&gt;
		} );&lt;br /&gt;
		panel.append( form );&lt;br /&gt;
		var previewBox = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-preview&amp;#039; ).hide();&lt;br /&gt;
		panel.append( previewBox );&lt;br /&gt;
		var status = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-status&amp;#039; );&lt;br /&gt;
		panel.append( status );&lt;br /&gt;
		var foot = $( &amp;#039;&amp;lt;div&amp;gt;&amp;#039; ).addClass( &amp;#039;bm-foot&amp;#039; );&lt;br /&gt;
		var cancelBtn = $( &amp;#039;&amp;lt;button&amp;gt;&amp;#039; ).attr( &amp;#039;type&amp;#039;, &amp;#039;button&amp;#039; ).addClass( &amp;#039;bm-btn&amp;#039; ).text( &amp;#039;Cancel&amp;#039; );&lt;br /&gt;
		var submitBtn = $( &amp;#039;&amp;lt;button&amp;gt;&amp;#039; ).attr( &amp;#039;type&amp;#039;, &amp;#039;button&amp;#039; ).addClass( &amp;#039;bm-btn bm-primary&amp;#039; )&lt;br /&gt;
			.text( usePreview ? &amp;#039;Show preview&amp;#039; : ( opts.submitLabel || &amp;#039;Submit&amp;#039; ) );&lt;br /&gt;
		foot.append( cancelBtn, submitBtn );&lt;br /&gt;
		panel.append( foot );&lt;br /&gt;
		overlay.append( panel );&lt;br /&gt;
		$( document.body ).append( overlay );&lt;br /&gt;
&lt;br /&gt;
		function values() {&lt;br /&gt;
			var v = {};&lt;br /&gt;
			Object.keys( inputs ).forEach( function ( k ) {&lt;br /&gt;
				var it = inputs[ k ];&lt;br /&gt;
				v[ k ] = it.def.type === &amp;#039;checkbox&amp;#039; ? it.el.prop( &amp;#039;checked&amp;#039; ) : it.el.val();&lt;br /&gt;
			} );&lt;br /&gt;
			return v;&lt;br /&gt;
		}&lt;br /&gt;
		function close() { overlay.remove(); }&lt;br /&gt;
		function setBusy( b ) {&lt;br /&gt;
			submitBtn.prop( &amp;#039;disabled&amp;#039;, b );&lt;br /&gt;
			cancelBtn.prop( &amp;#039;disabled&amp;#039;, b &amp;amp;&amp;amp; !opts.stoppable );&lt;br /&gt;
		}&lt;br /&gt;
		form.on( &amp;#039;input change&amp;#039;, function () {&lt;br /&gt;
			if ( confirmed ) {&lt;br /&gt;
				confirmed = false;&lt;br /&gt;
				previewBox.hide();&lt;br /&gt;
				submitBtn.text( &amp;#039;Show preview&amp;#039; );&lt;br /&gt;
				status.text( &amp;#039;&amp;#039; );&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
		closeBtn.on( &amp;#039;click&amp;#039;, close );&lt;br /&gt;
		cancelBtn.on( &amp;#039;click&amp;#039;, function () {&lt;br /&gt;
			if ( submitBtn.prop( &amp;#039;disabled&amp;#039; ) &amp;amp;&amp;amp; opts.stoppable &amp;amp;&amp;amp; opts.onStop ) { opts.onStop(); return; }&lt;br /&gt;
			close();&lt;br /&gt;
		} );&lt;br /&gt;
		overlay.on( &amp;#039;click&amp;#039;, function ( e ) { if ( e.target === overlay[ 0 ] ) { close(); } } );&lt;br /&gt;
		submitBtn.on( &amp;#039;click&amp;#039;, function () {&lt;br /&gt;
			var v = values();&lt;br /&gt;
			var missing = ( opts.fields || [] ).filter( function ( f ) {&lt;br /&gt;
				return f.required &amp;amp;&amp;amp; f.type !== &amp;#039;checkbox&amp;#039; &amp;amp;&amp;amp; !String( v[ f.name ] || &amp;#039;&amp;#039; ).trim();&lt;br /&gt;
			} );&lt;br /&gt;
			if ( missing.length ) {&lt;br /&gt;
				status.text( &amp;#039;Please fill in the required information: &amp;#039; + missing.map( function ( f ) { return f.label; } ).join( &amp;#039;, &amp;#039; ) );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			if ( usePreview &amp;amp;&amp;amp; !confirmed ) {&lt;br /&gt;
				setBusy( true );&lt;br /&gt;
				status.text( &amp;#039;Preparing the preview…&amp;#039; );&lt;br /&gt;
				var wt;&lt;br /&gt;
				try { wt = usePreview( v ); } catch ( e ) { setBusy( false ); status.text( e.message ); return; }&lt;br /&gt;
				var ptitle = opts.previewTitle ? opts.previewTitle( v ) : null;&lt;br /&gt;
				parse( wt, ptitle ).then( function ( html ) {&lt;br /&gt;
					previewBox.html( html ).show();&lt;br /&gt;
					confirmed = true;&lt;br /&gt;
					submitBtn.text( opts.submitLabel ? &amp;#039;Confirm: &amp;#039; + opts.submitLabel : &amp;#039;Confirm and submit&amp;#039; );&lt;br /&gt;
					status.text( &amp;#039;Check the preview and confirm.&amp;#039; );&lt;br /&gt;
					setBusy( false );&lt;br /&gt;
				} ).catch( function () {&lt;br /&gt;
					setBusy( false );&lt;br /&gt;
					status.text( &amp;#039;The preview could not be created. Please try again.&amp;#039; );&lt;br /&gt;
				} );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			setBusy( true );&lt;br /&gt;
			status.text( &amp;#039;Sending…&amp;#039; );&lt;br /&gt;
			Promise.resolve()&lt;br /&gt;
				.then( function () { return opts.onSubmit( v ); } )&lt;br /&gt;
				.then( function () {&lt;br /&gt;
					close();&lt;br /&gt;
					mw.notify( opts.success || &amp;#039;Done.&amp;#039;, { type: &amp;#039;success&amp;#039; } );&lt;br /&gt;
					if ( opts.reload ) { location.reload(); }&lt;br /&gt;
				} )&lt;br /&gt;
				.catch( function ( e ) {&lt;br /&gt;
					setBusy( false );&lt;br /&gt;
					var emsg = &amp;#039;Something went wrong.&amp;#039;;&lt;br /&gt;
					if ( e &amp;amp;&amp;amp; e.message ) { emsg = e.message; }&lt;br /&gt;
					else if ( typeof e === &amp;#039;string&amp;#039; &amp;amp;&amp;amp; e ) { emsg = e; }&lt;br /&gt;
					status.text( &amp;#039;Error: &amp;#039; + emsg );&lt;br /&gt;
				} );&lt;br /&gt;
		} );&lt;br /&gt;
		var first = panel.find( &amp;#039;.bm-input&amp;#039; ).first();&lt;br /&gt;
		if ( first.length ) { first.focus(); }&lt;br /&gt;
		return { close: close };&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	BM.register = function ( name, def ) { BM.modules[ name ] = def; };&lt;br /&gt;
	BM.SIG = SIG;&lt;br /&gt;
	BM.core = {&lt;br /&gt;
		api: getApi, esc: esc, cleanParam: cleanParam, monthHeading: monthHeading,&lt;br /&gt;
		getPage: getPage, savePage: savePage, appendToPage: appendToPage,&lt;br /&gt;
		appendUnderMonth: appendUnderMonth, addSection: addSection,&lt;br /&gt;
		parse: parse, firstEditor: firstEditor, dialog: dialog,&lt;br /&gt;
		getConfig: getConfig, saveConfig: saveConfig, currentConfig: currentConfig&lt;br /&gt;
	};&lt;br /&gt;
	BM.targetUser = function () {&lt;br /&gt;
		var u = mw.config.get( &amp;#039;wgRelevantUserName&amp;#039; );&lt;br /&gt;
		if ( u ) { return u; }&lt;br /&gt;
		var ns = mw.config.get( &amp;#039;wgNamespaceNumber&amp;#039; );&lt;br /&gt;
		if ( ns === 2 || ns === 3 ) {&lt;br /&gt;
			return mw.config.get( &amp;#039;wgTitle&amp;#039; ).split( &amp;#039;/&amp;#039; )[ 0 ];&lt;br /&gt;
		}&lt;br /&gt;
		return null;&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>