<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-PatrollingEnhancements.js</id>
	<title>MediaWiki:Gadget-PatrollingEnhancements.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-PatrollingEnhancements.js"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;action=history"/>
	<updated>2026-04-11T20:51:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;diff=475069&amp;oldid=prev</id>
		<title>Sware: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;diff=475069&amp;oldid=prev"/>
		<updated>2025-11-04T17:52:55Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&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: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:52, 4 November 2025&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>Sware</name></author>
	</entry>
	<entry>
		<id>https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;diff=475068&amp;oldid=prev</id>
		<title>wikt&gt;Ioaxxere: Polyfill deprecated function newNode</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;diff=475068&amp;oldid=prev"/>
		<updated>2025-09-17T01:04:55Z</updated>

		<summary type="html">&lt;p&gt;Polyfill deprecated function newNode&lt;/p&gt;
&lt;a href=&quot;https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;amp;diff=475068&amp;amp;oldid=470880&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>wikt&gt;Ioaxxere</name></author>
	</entry>
	<entry>
		<id>https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;diff=470880&amp;oldid=prev</id>
		<title>Sware at 18:57, 16 September 2025</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;diff=470880&amp;oldid=prev"/>
		<updated>2025-09-16T18:57:06Z</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 18:57, 16 September 2025&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-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&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;/* eslint-env es6, browser, jquery */&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;/* eslint semi: &quot;error&quot; */&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;/* jshint esversion: 6, eqeqeq: true */&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;/* globals $, mw */&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;/* requires mw.cookie, mw.storage */&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;&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;&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;var GPE = {};&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 GPE = {};&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;&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;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/* &amp;lt;/pre&amp;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;/* &amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
	<entry>
		<id>https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;diff=14736&amp;oldid=prev</id>
		<title>Chrysophylax: Created page with &quot;var GPE = {};  /* &lt;/pre&gt; ==Configuration options== &lt;pre&gt; */  // The initial value to put in the &quot;deletion reason&quot; text-field; you can // override this in your common.js (or ve...&quot;</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-PatrollingEnhancements.js&amp;diff=14736&amp;oldid=prev"/>
		<updated>2013-11-17T11:07:32Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;var GPE = {};  &lt;span class=&quot;autocomment&quot;&gt;&amp;lt;/pre&amp;gt; ==Configuration options== &amp;lt;pre&amp;gt;: &lt;/span&gt;  // The initial value to put in the &amp;quot;deletion reason&amp;quot; text-field; you can // override this in your common.js (or ve...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;var GPE = {};&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/pre&amp;gt;&lt;br /&gt;
==Configuration options==&lt;br /&gt;
&amp;lt;pre&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
// The initial value to put in the &amp;quot;deletion reason&amp;quot; text-field; you can&lt;br /&gt;
// override this in your common.js (or vector.js or whatnot).&lt;br /&gt;
GPE.initialDeleteReason = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// The value to use as a deletion reason if you leave the text-field blank; you&lt;br /&gt;
// can override it in your common.js (or vector.js or whatnot). If you *don&amp;#039;t*&lt;br /&gt;
// override this, then MediaWiki will generate an automatic deletion reason that&lt;br /&gt;
// indicates the entry&amp;#039;s last editor and the beginning of its content.&lt;br /&gt;
GPE.deleteReasonIfBlank = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// By DCDuring&amp;#039;s request. If you set this to true, then Special:Watchlist will&lt;br /&gt;
// show the deletion-reason text-input, but *not* the deletion-reason dropdown,&lt;br /&gt;
// when there&amp;#039;s an unpatrolled new-page-creation.&lt;br /&gt;
GPE.hideDeleteReasonDropdownOnWatchlist = false;&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/pre&amp;gt;&lt;br /&gt;
==Automated patrolling (whitelisting)==&lt;br /&gt;
&amp;lt;pre&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
// set GPE.currMonth and GPE.lastMonth (in the form of, e.g., &amp;#039;2013/February&amp;#039;)&lt;br /&gt;
(&lt;br /&gt;
  function ()&lt;br /&gt;
  {&lt;br /&gt;
    var monthNames = [ &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;,&lt;br /&gt;
                       &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;,&lt;br /&gt;
                       &amp;#039;December&amp;#039; ];&lt;br /&gt;
&lt;br /&gt;
    var now = new Date();&lt;br /&gt;
&lt;br /&gt;
    var currYear = now.getFullYear();&lt;br /&gt;
    var currMonthNum = now.getMonth();&lt;br /&gt;
&lt;br /&gt;
    GPE.currMonth = currYear + &amp;#039;/&amp;#039; + monthNames[currMonthNum];&lt;br /&gt;
&lt;br /&gt;
    var lastYear = (currMonthNum == 0 ? currYear - 1 : currYear);&lt;br /&gt;
    var lastMonthNum = (currMonthNum == 0 ? 11 : currMonthNum - 1);&lt;br /&gt;
&lt;br /&gt;
    GPE.lastMonth = lastYear + &amp;#039;/&amp;#039; + monthNames[lastMonthNum];&lt;br /&gt;
  }&lt;br /&gt;
)();&lt;br /&gt;
&lt;br /&gt;
GPE.individualWhiteListedPages =&lt;br /&gt;
{&lt;br /&gt;
/*&lt;br /&gt;
  &amp;quot;Wiktionary:Requests for cleanup&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Requests for verification&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Requests for deletion&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Requests for deletion/Others&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Requests for moves, mergers and splits&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Information desk&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Tea room&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Etymology scriptorium&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Requested entries (English)&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Requested entries (Spanish)&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:List of protologisms&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Translation requests&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Feedback&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Sandbox&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary talk:Sandbox&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Tutorial (Editing)/sandbox&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Featured word candidates&amp;quot;: true,&lt;br /&gt;
  &amp;quot;Wiktionary:Word of the day/Nominations&amp;quot;: true&lt;br /&gt;
*/&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
GPE.individualWhiteListedPages[&amp;quot;Wiktionary:Beer parlour/&amp;quot; + GPE.currMonth] =&lt;br /&gt;
  GPE.individualWhiteListedPages[&amp;quot;Wiktionary:Beer parlour/&amp;quot; + GPE.lastMonth] =&lt;br /&gt;
  GPE.individualWhiteListedPages[&amp;quot;Wiktionary:Grease pit/&amp;quot; + GPE.currMonth] =&lt;br /&gt;
  GPE.individualWhiteListedPages[&amp;quot;Wiktionary:Grease pit/&amp;quot; + GPE.lastMonth] =&lt;br /&gt;
  true;&lt;br /&gt;
*/&lt;br /&gt;
// per-user white-listed sub-pages (for example, edits by user Foo&lt;br /&gt;
// to User:Foo/vector.js should be autopatrolled):&lt;br /&gt;
GPE.perUserWhiteListedSubPages =&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;/Sandbox&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/sandbox&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/chick.js&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/chick.css&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/standard.js&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/standard.css&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/cologneblue.js&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/cologneblue.css&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/modern.js&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/modern.css&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/myskin.js&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/myskin.css&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/nostalgia.js&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/nostalgia.css&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/simple.js&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/simple.css&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/vector.js&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/vector.css&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/common.js&amp;quot;: true,&lt;br /&gt;
  &amp;quot;/common.css&amp;quot;: true&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GPE.individualWhiteListedContributors =&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GPE.shouldAutoPatrol = function(link)&lt;br /&gt;
{&lt;br /&gt;
  var pagename = link.title;&lt;br /&gt;
  if(pagename.indexOf(&amp;#039;User talk:&amp;#039;) == 0)&lt;br /&gt;
    return true;&lt;br /&gt;
  if(pagename in GPE.individualWhiteListedPages)&lt;br /&gt;
    return true;&lt;br /&gt;
&lt;br /&gt;
  var contributor;&lt;br /&gt;
  if(mediaWiki.config.get(&amp;#039;wgCanonicalSpecialPageName&amp;#039;) === &amp;#039;Contributions&amp;#039;)&lt;br /&gt;
  {&lt;br /&gt;
    contributor =&lt;br /&gt;
      document.getElementById(&amp;#039;t-contributions&amp;#039;)&lt;br /&gt;
              .getElementsByTagName(&amp;#039;a&amp;#039;)[0].href.replace(/.*\//, &amp;#039;&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    var li = link.parentNode;&lt;br /&gt;
    if(li.tagName.toUpperCase() == &amp;#039;SPAN&amp;#039;)&lt;br /&gt;
      li = li.parentNode;&lt;br /&gt;
    var links = li.getElementsByTagName(&amp;#039;a&amp;#039;);&lt;br /&gt;
    for(var i = 0; i &amp;lt; links.length; ++i)&lt;br /&gt;
      if(links[i].title.indexOf(&amp;#039;Special:Contributions/&amp;#039;) == 0)&lt;br /&gt;
      {&lt;br /&gt;
        contributor = links[i].title.substr(&amp;#039;Special:Contributions/&amp;#039;.length);&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  if(pagename.indexOf(&amp;#039;User:&amp;#039; + contributor + &amp;#039;/&amp;#039;) == 0)&lt;br /&gt;
    if(pagename.substr(contributor.length + 5) in GPE.perUserWhiteListedSubPages)&lt;br /&gt;
      return true;&lt;br /&gt;
  if(contributor in GPE.individualWhiteListedContributors)&lt;br /&gt;
    return true;&lt;br /&gt;
&lt;br /&gt;
  return false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Utility functions==&lt;br /&gt;
&amp;lt;pre&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
GPE.newButton = function(text, color, hoverText)&lt;br /&gt;
{&lt;br /&gt;
  var button = newNode(&amp;#039;button&amp;#039;, text);&lt;br /&gt;
  button.style.background = color;&lt;br /&gt;
  button.style.color = &amp;#039;#FFF&amp;#039;;&lt;br /&gt;
  button.style.border = &amp;#039;0&amp;#039;;&lt;br /&gt;
  button.style.padding = &amp;#039;0&amp;#039;;&lt;br /&gt;
  button.style.cursor = &amp;#039;pointer&amp;#039;;&lt;br /&gt;
  button.title = hoverText;&lt;br /&gt;
  return button;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GPE.disableButton = function(button, text, hoverText)&lt;br /&gt;
{&lt;br /&gt;
  button.onclick = null;&lt;br /&gt;
  button.title = (hoverText || &amp;#039;&amp;#039;);&lt;br /&gt;
  button.innerHTML = text;&lt;br /&gt;
  // clear out explicit styling and disable, so we can get appropriate&lt;br /&gt;
  // disabled-button styles:&lt;br /&gt;
  button.style.background = &amp;#039;&amp;#039;;&lt;br /&gt;
  button.style.color = &amp;#039;&amp;#039;;&lt;br /&gt;
  button.style.cursor = &amp;#039;&amp;#039;;&lt;br /&gt;
  button.disabled = &amp;#039;disabled&amp;#039;;&lt;br /&gt;
  // explicitly style like a disabled button:&lt;br /&gt;
  var computedStyle = window.getComputedStyle(button);&lt;br /&gt;
  button.style.background = computedStyle.backgroundColor;&lt;br /&gt;
  button.style.color = computedStyle.color;&lt;br /&gt;
  button.style.cursor = computedStyle.cursor;&lt;br /&gt;
  // re-enable, so the title will show up as hover-text in Firefox&lt;br /&gt;
  // (see https://bugzilla.mozilla.org/show_bug.cgi?id=274626):&lt;br /&gt;
  button.disabled = &amp;#039;&amp;#039;;&lt;br /&gt;
  // technically the button is &amp;quot;enabled&amp;quot; now, but it *looks* disabled, and it&lt;br /&gt;
  // doesn&amp;#039;t have an onclick event, so it&amp;#039;s disabled for all normal purposes&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GPE.anErrorOccurred = function(shortMsg, debugInfo)&lt;br /&gt;
{&lt;br /&gt;
  var msg, link;&lt;br /&gt;
  if(debugInfo)&lt;br /&gt;
  {&lt;br /&gt;
    link = newNode(&amp;#039;a&amp;#039;, {href:&amp;#039;#&amp;#039;}, &amp;#039;here&amp;#039;);&lt;br /&gt;
    msg =&lt;br /&gt;
      newNode&lt;br /&gt;
      (&lt;br /&gt;
        &amp;#039;p&amp;#039;,&lt;br /&gt;
        &amp;#039;An error occurred in MediaWiki:Gadget-PatrollingEnhancements.js: &amp;#039;,&lt;br /&gt;
        newNode(&amp;#039;tt&amp;#039;, shortMsg),&lt;br /&gt;
        &amp;#039; \u2014 click &amp;#039;,&lt;br /&gt;
        link,&lt;br /&gt;
        &amp;#039; for debugging information.&amp;#039;&lt;br /&gt;
      );&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    msg =&lt;br /&gt;
      newNode&lt;br /&gt;
      (&lt;br /&gt;
        &amp;#039;p&amp;#039;,&lt;br /&gt;
        &amp;#039;An error occurred in MediaWiki:Gadget-PatrollingEnhancements.js: &amp;#039;,&lt;br /&gt;
        newNode(&amp;#039;tt&amp;#039;, shortMsg)&lt;br /&gt;
      );&lt;br /&gt;
  var bodyContent = $(&amp;#039;div#bodyContent&amp;#039;);&lt;br /&gt;
  bodyContent.insertBefore(msg, bodyContent.firstChild);&lt;br /&gt;
  if(link)&lt;br /&gt;
    link.onclick = function () { alert(debugInfo); };&lt;br /&gt;
  if(mediaWiki.config.get(&amp;#039;wgUserName&amp;#039;) == &amp;#039;Ruakh&amp;#039;)&lt;br /&gt;
    alert(shortMsg + &amp;#039;\n&amp;#039; + debugInfo);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/pre&amp;gt;&lt;br /&gt;
==Individual patrol-buttons==&lt;br /&gt;
&amp;lt;pre&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
GPE.addPatrolButton = function(link, rcid)&lt;br /&gt;
{&lt;br /&gt;
  if(link.className.search(/(?:^|\s)gpe-hasPatrolButton(?:\s|$)/) &amp;gt; -1)&lt;br /&gt;
    return;&lt;br /&gt;
  link.className = (link.className + &amp;#039; gpe-hasPatrolButton&amp;#039;).trim();&lt;br /&gt;
&lt;br /&gt;
  var button = GPE.newButton(&amp;#039;M&amp;#039;, &amp;#039;#009&amp;#039;, &amp;#039;click to mark as patrolled&amp;#039;);&lt;br /&gt;
  link.parentNode.insertBefore(button, link.nextSibling);&lt;br /&gt;
  link.parentNode.insertBefore(document.createTextNode(&amp;#039; · &amp;#039;), button);&lt;br /&gt;
  button.onclick =&lt;br /&gt;
    function ()&lt;br /&gt;
    {&lt;br /&gt;
      var token = mediaWiki.user.tokens.get(&amp;#039;patrolToken&amp;#039;);&lt;br /&gt;
      $.post&lt;br /&gt;
      (&lt;br /&gt;
        &amp;#039;/w/api.php?format=json&amp;amp;action=patrol&amp;#039;,&lt;br /&gt;
        { token: token, rcid: rcid },&lt;br /&gt;
        function (data)&lt;br /&gt;
        {&lt;br /&gt;
          if(data.patrol)&lt;br /&gt;
            GPE.disableButton(button, &amp;#039;m&amp;#039;, &amp;#039;marked as patrolled&amp;#039;);&lt;br /&gt;
          else if(data.error)&lt;br /&gt;
          {&lt;br /&gt;
            var msg = data.error.code + &amp;#039;: &amp;#039; + data.error.info;&lt;br /&gt;
            if(data.error.code == &amp;#039;badtoken&amp;#039;)&lt;br /&gt;
              msg += &amp;#039;: &amp;quot;&amp;#039; + token + &amp;#039;&amp;quot;&amp;#039;;&lt;br /&gt;
            alert(msg);&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;#039;json&amp;#039;&lt;br /&gt;
      );&lt;br /&gt;
    };&lt;br /&gt;
  if(GPE.shouldAutoPatrol(link))&lt;br /&gt;
    button.click();&lt;br /&gt;
&lt;br /&gt;
  // remove the exclamation point:&lt;br /&gt;
  var tmp = link;&lt;br /&gt;
  while(tmp &amp;amp;&amp;amp; tmp.nodeName.toUpperCase() !== &amp;#039;LI&amp;#039;)&lt;br /&gt;
    tmp = tmp.parentNode;&lt;br /&gt;
  if(tmp)&lt;br /&gt;
    tmp = tmp.getElementsByClassName(&amp;#039;unpatrolled&amp;#039;)[0];&lt;br /&gt;
  if(tmp)&lt;br /&gt;
    tmp.parentNode.removeChild(tmp);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/pre&amp;gt;&lt;br /&gt;
==Individual delete-buttons==&lt;br /&gt;
&amp;lt;pre&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
GPE.addDeleteButton = function(link, title)&lt;br /&gt;
{&lt;br /&gt;
  if(link.className.search(/(?:^|\s)gpe-hasDeleteButton(?:\s|$)/) &amp;gt; -1)&lt;br /&gt;
    return;&lt;br /&gt;
  link.className = (link.className + &amp;#039; gpe-hasDeleteButton&amp;#039;).trim();&lt;br /&gt;
&lt;br /&gt;
  var button = GPE.newButton(&amp;#039;D&amp;#039;, &amp;#039;#900&amp;#039;, &amp;#039;click to delete&amp;#039;);&lt;br /&gt;
  link.parentNode.insertBefore(button, link.nextSibling);&lt;br /&gt;
  link.parentNode.insertBefore(document.createTextNode(&amp;#039; · &amp;#039;), button);&lt;br /&gt;
  button.onclick =&lt;br /&gt;
    function ()&lt;br /&gt;
    {&lt;br /&gt;
      var dropdownReason =&lt;br /&gt;
        document.getElementById(&amp;#039;deleteReasonsDropdown&amp;#039;)&lt;br /&gt;
          ? document.getElementById(&amp;#039;deleteReasonsDropdown&amp;#039;).value&lt;br /&gt;
          : &amp;#039;&amp;#039;;&lt;br /&gt;
      if(dropdownReason == &amp;#039;other&amp;#039;)&lt;br /&gt;
        dropdownReason = &amp;#039;&amp;#039;;&lt;br /&gt;
      var textInputReason =&lt;br /&gt;
        document.getElementById(&amp;#039;deleteReasonTextInput&amp;#039;).value;&lt;br /&gt;
      var reason;&lt;br /&gt;
      if(dropdownReason.length &amp;amp;&amp;amp; textInputReason.length)&lt;br /&gt;
        reason = dropdownReason + &amp;#039;: &amp;#039; + textInputReason;&lt;br /&gt;
      else if(dropdownReason.length || textInputReason.length)&lt;br /&gt;
        reason = dropdownReason + textInputReason;&lt;br /&gt;
      else&lt;br /&gt;
        reason = GPE.deleteReasonIfBlank;&lt;br /&gt;
      var token = mediaWiki.user.tokens.get(&amp;#039;deleteToken&amp;#039;);&lt;br /&gt;
      $.post&lt;br /&gt;
      (&lt;br /&gt;
        &amp;#039;/w/api.php?format=json&amp;amp;action=delete&amp;#039;,&lt;br /&gt;
        { title: title, token: token, reason: reason },&lt;br /&gt;
        function (data)&lt;br /&gt;
        {&lt;br /&gt;
          if(data[&amp;#039;delete&amp;#039;])&lt;br /&gt;
            GPE.disableButton(button, &amp;#039;d&amp;#039;, &amp;#039;deleted&amp;#039;);&lt;br /&gt;
          else if(data.error)&lt;br /&gt;
          {&lt;br /&gt;
            var msg = data.error.code + &amp;#039;: &amp;#039; + data.error.info;&lt;br /&gt;
            if(data.error.code == &amp;#039;badtoken&amp;#039;)&lt;br /&gt;
              msg += &amp;#039;: &amp;quot;&amp;#039; + token + &amp;#039;&amp;quot;&amp;#039;;&lt;br /&gt;
            alert(msg);&lt;br /&gt;
          }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;#039;json&amp;#039;&lt;br /&gt;
      );&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/pre&amp;gt;&lt;br /&gt;
==Delete-reasons==&lt;br /&gt;
&amp;lt;pre&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
GPE.addDeleteReasonInput = function ()&lt;br /&gt;
{ var deleteReasonDiv =&lt;br /&gt;
    ( newNode&lt;br /&gt;
      ( &amp;#039;div&amp;#039;,&lt;br /&gt;
        { style:&lt;br /&gt;
            &amp;#039;background:#900; color:#FFF; &amp;#039; +&lt;br /&gt;
            &amp;#039;position:fixed; bottom:0; right:0; margin-bottom:0&amp;#039;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;#039;\u00A0Deletion reason:\u00A0&amp;#039;&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
  deleteReasonDiv.title =&lt;br /&gt;
    &amp;#039;the deletion reason (message/summary) to use when you click &amp;quot;D&amp;quot;&amp;#039;;&lt;br /&gt;
  var deleteReasonTextInput =&lt;br /&gt;
  ( newNode&lt;br /&gt;
    ( &amp;#039;input&amp;#039;,&lt;br /&gt;
      { type: &amp;#039;text&amp;#039;,&lt;br /&gt;
        size: 80,&lt;br /&gt;
        id: &amp;#039;deleteReasonTextInput&amp;#039;,&lt;br /&gt;
        value: GPE.initialDeleteReason,&lt;br /&gt;
        style: &amp;#039;position:fixed; right:0; margin-bottom:0&amp;#039;&lt;br /&gt;
      }&lt;br /&gt;
    )&lt;br /&gt;
  );&lt;br /&gt;
  deleteReasonDiv.appendChild(deleteReasonTextInput);&lt;br /&gt;
  document.getElementById(&amp;#039;bodyContent&amp;#039;).appendChild(deleteReasonDiv);&lt;br /&gt;
&lt;br /&gt;
  if(GPE.hideDeleteReasonDropdownOnWatchlist)&lt;br /&gt;
    if(mediaWiki.config.get(&amp;#039;wgPageName&amp;#039;) == &amp;#039;Special:Watchlist&amp;#039;)&lt;br /&gt;
      return;&lt;br /&gt;
&lt;br /&gt;
  // get canned messages from [[MediaWiki:Deletereason-dropdown]]:&lt;br /&gt;
  $.getJSON&lt;br /&gt;
  ( &amp;#039;/w/api.php?format=json&amp;amp;action=query&amp;amp;meta=allmessages&amp;amp;ammessages=Deletereason-dropdown&amp;#039;,&lt;br /&gt;
    function (data)&lt;br /&gt;
    { var rawDeleteReasons = data.query.allmessages[0][&amp;#039;*&amp;#039;];&lt;br /&gt;
      var deleteReasonsDropdown =&lt;br /&gt;
        newNode(&amp;#039;select&amp;#039;,&lt;br /&gt;
          { id: &amp;#039;deleteReasonsDropdown&amp;#039;, style: &amp;#039;vertical-align: bottom&amp;#039; });&lt;br /&gt;
      deleteReasonsDropdown.appendChild&lt;br /&gt;
        (newNode(&amp;#039;option&amp;#039;, { value: &amp;#039;other&amp;#039; }, &amp;#039;Other reason&amp;#039;));&lt;br /&gt;
      var optGroup = deleteReasonsDropdown;&lt;br /&gt;
      rawDeleteReasons.replace&lt;br /&gt;
      ( /^(\*\*?) *(.+)$/gm,&lt;br /&gt;
        function (s, asterisks, text)&lt;br /&gt;
        { if(asterisks == &amp;#039;*&amp;#039;)&lt;br /&gt;
            deleteReasonsDropdown.appendChild&lt;br /&gt;
              (optGroup = newNode(&amp;#039;optgroup&amp;#039;, { label: text }));&lt;br /&gt;
          else // &amp;#039;**&amp;#039;&lt;br /&gt;
            optGroup.appendChild(newNode(&amp;#039;option&amp;#039;, { value: text }, text));&lt;br /&gt;
        }&lt;br /&gt;
      );&lt;br /&gt;
      deleteReasonDiv.insertBefore(deleteReasonsDropdown, deleteReasonTextInput);&lt;br /&gt;
      deleteReasonDiv.insertBefore(newNode(&amp;#039;br&amp;#039;), deleteReasonTextInput);&lt;br /&gt;
      deleteReasonDiv.insertBefore(document.createTextNode(&amp;#039;\u00A0&amp;#039;), deleteReasonTextInput);&lt;br /&gt;
    }&lt;br /&gt;
  );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/pre&amp;gt;&lt;br /&gt;
==Namespaces==&lt;br /&gt;
&amp;lt;pre&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
GPE.computeNamespaces = function&lt;br /&gt;
  (selected, includeAssociated, invertSelection)&lt;br /&gt;
{&lt;br /&gt;
  var associated = Number(selected) + (selected % 2 === 0 ? 1 : -1);&lt;br /&gt;
  if(invertSelection)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = document.getElementById(&amp;#039;namespace&amp;#039;);&lt;br /&gt;
    if(! selector)&lt;br /&gt;
      return [];&lt;br /&gt;
    var ret = [];&lt;br /&gt;
    for(var option = selector.firstChild; option; option = option.nextSibling)&lt;br /&gt;
      if(option.nodeName.toUpperCase() === &amp;#039;OPTION&amp;#039; &amp;amp;&amp;amp; option.value)&lt;br /&gt;
        if(option.value != selected)&lt;br /&gt;
          if(! includeAssociated || option.value != associated)&lt;br /&gt;
            ret.push(option.value);&lt;br /&gt;
    return ret;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    if(includeAssociated)&lt;br /&gt;
      return [selected, associated];&lt;br /&gt;
    else&lt;br /&gt;
      return [selected];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GPE.generateRcnamespace = function ()&lt;br /&gt;
{&lt;br /&gt;
  var currUrl = document.location.href;&lt;br /&gt;
  if(! /[?&amp;amp;]namespace=\d+(?:&amp;amp;|$)/.test(currUrl))&lt;br /&gt;
    return;&lt;br /&gt;
  var selected = /[?&amp;amp;]namespace=(\d+)(?:&amp;amp;|$)/.exec(currUrl)[1];&lt;br /&gt;
  var includeAssociated =&lt;br /&gt;
    mediaWiki.config.get(&amp;#039;wgPageName&amp;#039;) !== &amp;#039;Special:NewPages&amp;#039;&lt;br /&gt;
    &amp;amp;&amp;amp; /[?&amp;amp;]associated=(?!0?&amp;amp;|0?$)/.test(currUrl);&lt;br /&gt;
  var invertSelection = /[?&amp;amp;]invert=(?!0?&amp;amp;|0?$)/.test(currUrl);&lt;br /&gt;
  var namespaces =&lt;br /&gt;
    GPE.computeNamespaces(selected, includeAssociated, invertSelection);&lt;br /&gt;
  if(namespaces.length &amp;gt; 0)&lt;br /&gt;
    return namespaces.join(&amp;#039;|&amp;#039;);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/pre&amp;gt;&lt;br /&gt;
==Find and handle links==&lt;br /&gt;
&amp;lt;pre&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
GPE.handleUnpatrolledEdits = function (rcidsByRevid)&lt;br /&gt;
{&lt;br /&gt;
  var links =&lt;br /&gt;
    document.getElementById(&amp;#039;bodyContent&amp;#039;).getElementsByTagName(&amp;#039;a&amp;#039;);&lt;br /&gt;
  for(var i = links.length - 1; i &amp;gt;= 0; --i)&lt;br /&gt;
  {&lt;br /&gt;
    var mapKey = /&amp;amp;diff=(prev&amp;amp;oldid=)?(\d+)(&amp;amp;|$)/.exec(links[i].href);&lt;br /&gt;
    if(mapKey &amp;amp;&amp;amp; rcidsByRevid.hasOwnProperty(mapKey[2]))&lt;br /&gt;
      GPE.addPatrolButton(links[i], rcidsByRevid[mapKey[2]]);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GPE.findLinksToUnpatrolledNewPages = function (rcidsByTitle)&lt;br /&gt;
{&lt;br /&gt;
  if(mediaWiki.config.get(&amp;#039;wgPageName&amp;#039;) === &amp;#039;Special:NewPages&amp;#039;)&lt;br /&gt;
  {&lt;br /&gt;
    var ret = [];&lt;br /&gt;
    $(&amp;#039;li.not-patrolled a.mw-newpages-pagename&amp;#039;).each(function () { ret.push(this) });&lt;br /&gt;
    return ret;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    var ret = [];&lt;br /&gt;
    var abbrs =&lt;br /&gt;
      document.getElementById(&amp;#039;bodyContent&amp;#039;).getElementsByTagName(&amp;#039;abbr&amp;#039;);&lt;br /&gt;
    for(var i = abbrs.length - 1; i &amp;gt;= 0; --i)&lt;br /&gt;
    {&lt;br /&gt;
      if(abbrs[i].className != &amp;#039;newpage&amp;#039;)&lt;br /&gt;
        continue;&lt;br /&gt;
      var link = abbrs[i];&lt;br /&gt;
      while(link &amp;amp;&amp;amp; link.nodeName.toUpperCase() != &amp;#039;A&amp;#039;)&lt;br /&gt;
        if(link.nodeName.toUpperCase() === &amp;#039;SPAN&amp;#039; &amp;amp;&amp;amp; link.className === &amp;#039;mw-title&amp;#039;)&lt;br /&gt;
          link = link.firstChild;&lt;br /&gt;
        else&lt;br /&gt;
          link = link.nextSibling;&lt;br /&gt;
      if(link &amp;amp;&amp;amp; link.title &amp;amp;&amp;amp; rcidsByTitle.hasOwnProperty(link.title))&lt;br /&gt;
        ret.push(link);&lt;br /&gt;
    }&lt;br /&gt;
    return ret;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GPE.handleUnpatrolledNewPages = function (rcidsByTitle)&lt;br /&gt;
{&lt;br /&gt;
  var userIsSysop =&lt;br /&gt;
    mediaWiki.config.get(&amp;#039;wgUserGroups&amp;#039;).indexOf(&amp;#039;sysop&amp;#039;) &amp;gt; -1;&lt;br /&gt;
  var links = GPE.findLinksToUnpatrolledNewPages(rcidsByTitle);&lt;br /&gt;
  for(var i = links.length - 1; i &amp;gt;= 0; --i)&lt;br /&gt;
  {&lt;br /&gt;
    var link = links[i];&lt;br /&gt;
    if(userIsSysop)&lt;br /&gt;
      GPE.addDeleteButton(link, link.title);&lt;br /&gt;
    GPE.addPatrolButton(link, rcidsByTitle[link.title]);&lt;br /&gt;
  }&lt;br /&gt;
  if(userIsSysop &amp;amp;&amp;amp; links.length &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
    GPE.getAndStoreDeleteToken();&lt;br /&gt;
    GPE.addDeleteReasonInput();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GPE.getAndStoreDeleteToken = function ()&lt;br /&gt;
{&lt;br /&gt;
  $.getJSON&lt;br /&gt;
  (&lt;br /&gt;
    &amp;#039;/w/api.php?format=json&amp;amp;action=tokens&amp;amp;type=delete&amp;#039;,&lt;br /&gt;
    function (data)&lt;br /&gt;
    {&lt;br /&gt;
      var token = data.tokens.deletetoken;&lt;br /&gt;
      if(! token || token.search(/^[0-9a-f]{32}\+\\$/) != 0)&lt;br /&gt;
        return;&lt;br /&gt;
      mediaWiki.user.tokens.set(&amp;#039;deleteToken&amp;#039;, token);&lt;br /&gt;
    }&lt;br /&gt;
  );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GPE.main = function (params)&lt;br /&gt;
{&lt;br /&gt;
  var url =&lt;br /&gt;
    &amp;#039;/w/api.php?format=json&amp;amp;action=query&amp;amp;list=recentchanges&amp;#039; +&lt;br /&gt;
    &amp;#039;&amp;amp;rcprop=ids|title&amp;#039; +&lt;br /&gt;
    &amp;#039;&amp;amp;rcshow=!patrolled&amp;#039; + (params.hasOwnProperty(&amp;#039;rcshow&amp;#039;) ? &amp;#039;|&amp;#039; + params.rcshow : &amp;#039;&amp;#039;) +&lt;br /&gt;
    &amp;#039;&amp;amp;rclimit=&amp;#039; + (params.hasOwnProperty(&amp;#039;rclimit&amp;#039;) ? params.rclimit : 500) +&lt;br /&gt;
    &amp;#039;&amp;amp;rctype=&amp;#039; + (params.hasOwnProperty(&amp;#039;rctype&amp;#039;) ? params.rctype : &amp;#039;edit|new&amp;#039;) +&lt;br /&gt;
    (params.hasOwnProperty(&amp;#039;rcnamespace&amp;#039;) ? &amp;#039;&amp;amp;rcnamespace=&amp;#039; + params.rcnamespace : &amp;#039;&amp;#039;);&lt;br /&gt;
  if(params.hasOwnProperty(&amp;#039;rcuser&amp;#039;))&lt;br /&gt;
    url = url + &amp;#039;&amp;amp;rcuser=&amp;#039; + params.rcuser;&lt;br /&gt;
  $.getJSON&lt;br /&gt;
  (&lt;br /&gt;
    url,&lt;br /&gt;
    function (data)&lt;br /&gt;
    {&lt;br /&gt;
      data = data.query.recentchanges;&lt;br /&gt;
      var rcidsByRevid = {}; // for unpatrolled edits&lt;br /&gt;
      var rcidsByTitle = {}; // for unpatrolled new pages&lt;br /&gt;
      for(var i = 0; i &amp;lt; data.length; ++i)&lt;br /&gt;
        if(data[i].type == &amp;#039;edit&amp;#039;)&lt;br /&gt;
          rcidsByRevid[data[i].revid] = data[i].rcid;&lt;br /&gt;
        else&lt;br /&gt;
          rcidsByTitle[data[i].title] = data[i].rcid;&lt;br /&gt;
&lt;br /&gt;
      GPE.handleUnpatrolledEdits(rcidsByRevid);&lt;br /&gt;
      GPE.handleUnpatrolledNewPages(rcidsByTitle);&lt;br /&gt;
    }&lt;br /&gt;
  );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/pre&amp;gt;&lt;br /&gt;
==Onload-hooks==&lt;br /&gt;
&amp;lt;pre&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
$( document ).ready&lt;br /&gt;
( function ()&lt;br /&gt;
  {&lt;br /&gt;
    if(mediaWiki.config.get(&amp;#039;wgPageName&amp;#039;) === &amp;#039;Special:RecentChanges&amp;#039;) {&lt;br /&gt;
      var currUrl = document.location.href;&lt;br /&gt;
      var params = {};&lt;br /&gt;
      var rcshow = [];&lt;br /&gt;
      if(currUrl.search(/[?&amp;amp;]hideliu=(?!0?$|0?&amp;amp;)/) &amp;gt; -1)&lt;br /&gt;
        rcshow.push(&amp;#039;anon&amp;#039;);&lt;br /&gt;
      else if(currUrl.search(/[?&amp;amp;]hideanons=(?!0?$|0?&amp;amp;)/) &amp;gt; -1)&lt;br /&gt;
        rcshow.push(&amp;#039;!anon&amp;#039;);&lt;br /&gt;
      if(document.getElementsByClassName(&amp;#039;minoredit&amp;#039;).length === 0)&lt;br /&gt;
        rcshow.push(&amp;#039;!minor&amp;#039;);&lt;br /&gt;
      if(rcshow.length &amp;gt; 0)&lt;br /&gt;
        params.rcshow = rcshow.join(&amp;#039;|&amp;#039;);&lt;br /&gt;
      var rcnamespace = GPE.generateRcnamespace();&lt;br /&gt;
      if(rcnamespace)&lt;br /&gt;
        params.rcnamespace = rcnamespace;&lt;br /&gt;
      GPE.main(params);&lt;br /&gt;
    } else if(mediaWiki.config.get(&amp;#039;wgPageName&amp;#039;) === &amp;#039;Special:NewPages&amp;#039;) {&lt;br /&gt;
      var currUrl = document.location.href;&lt;br /&gt;
      var params = { rctype: &amp;#039;new&amp;#039; };&lt;br /&gt;
      var rcshow = [];&lt;br /&gt;
      if(currUrl.search(/[?&amp;amp;]hideliu=(?!0?$|0?&amp;amp;)/) &amp;gt; -1)&lt;br /&gt;
        rcshow.push(&amp;#039;anon&amp;#039;);&lt;br /&gt;
      if(currUrl.search(/[?&amp;amp;]hideredirs=0?(?:$|&amp;amp;)/) === -1)&lt;br /&gt;
        rcshow.push(&amp;#039;!redirect&amp;#039;);&lt;br /&gt;
      if(rcshow.length &amp;gt; 0)&lt;br /&gt;
        params.rcshow = rcshow.join(&amp;#039;|&amp;#039;);&lt;br /&gt;
      var rcnamespace = GPE.generateRcnamespace();&lt;br /&gt;
      if(rcnamespace)&lt;br /&gt;
        params.rcnamespace = rcnamespace;&lt;br /&gt;
      GPE.main(params);&lt;br /&gt;
    } else if(mediaWiki.config.get(&amp;#039;wgPageName&amp;#039;) === &amp;#039;Special:Watchlist&amp;#039;) {&lt;br /&gt;
      var params = {};&lt;br /&gt;
      var rcnamespace = GPE.generateRcnamespace();&lt;br /&gt;
      if(rcnamespace)&lt;br /&gt;
        params.rcnamespace = rcnamespace;&lt;br /&gt;
      // TODO is this the best way to find what we need for the watchlist?&lt;br /&gt;
      GPE.main(params);&lt;br /&gt;
    } else if(mediaWiki.config.get(&amp;#039;wgPageName&amp;#039;).search(/^Special:Contributions(\/|$)/) === 0)&lt;br /&gt;
      GPE.main({ rcuser: document.getElementById(&amp;#039;t-contributions&amp;#039;).firstChild.href.replace(/^.*?\/Special:Contributions\//, &amp;#039;&amp;#039;) });&lt;br /&gt;
    else if(mediaWiki.config.get(&amp;#039;wgAction&amp;#039;) === &amp;#039;markpatrolled&amp;#039;&lt;br /&gt;
        || mediaWiki.config.get(&amp;#039;wgAction&amp;#039;) === &amp;#039;delete&amp;#039;&lt;br /&gt;
        || mediaWiki.config.get(&amp;#039;wgAction&amp;#039;) === &amp;#039;rollback&amp;#039;)&lt;br /&gt;
      GPE.main({ rclimit: 15 });&lt;br /&gt;
  }&lt;br /&gt;
);&lt;/div&gt;</summary>
		<author><name>Chrysophylax</name></author>
	</entry>
</feed>