<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://meta.wikioasis.org/wiki/User:DarkMatterMan4500/cuStaleness.js?action=history&amp;feed=atom</id>
	<title>User:DarkMatterMan4500/cuStaleness.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://meta.wikioasis.org/wiki/User:DarkMatterMan4500/cuStaleness.js?action=history&amp;feed=atom"/>
	<link rel="alternate" type="text/html" href="https://meta.wikioasis.org/wiki/User:DarkMatterMan4500/cuStaleness.js?action=history"/>
	<updated>2026-05-24T16:56:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://meta.wikioasis.org/wiki/User:DarkMatterMan4500/cuStaleness.js?diff=4448&amp;oldid=prev</id>
		<title>DarkMatterMan4500: Created page with &quot;//&lt;nowiki&gt; /**  * @brief Checkuser staleness checker.  * @desc Checks contribs, deleted contribs, and user creation date, and determines whether the account has activity past the 90-day checkuser staleness mark.  * @author Originally written by Writ Keeper. Modified by User:mdaniels5757 for Commons.  * @license CC-BY-SA-3.0  * @copyright (c) 2017-2020 by the Authors */  if(typeof maxUsersCUStaleness !== &quot;number&quot; || maxUsersCUStaleness &lt; 1) {     maxUsersCUStaleness = 50;...&quot;</title>
		<link rel="alternate" type="text/html" href="https://meta.wikioasis.org/wiki/User:DarkMatterMan4500/cuStaleness.js?diff=4448&amp;oldid=prev"/>
		<updated>2026-05-03T12:56:38Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;//&amp;lt;nowiki&amp;gt; &lt;span class=&quot;autocomment&quot;&gt;*  * @brief Checkuser staleness checker.  * @desc Checks contribs, deleted contribs, and user creation date, and determines whether the account has activity past the 90-day checkuser staleness mark.  * @author Originally written by Writ Keeper. Modified by User:mdaniels5757 for Commons.  * @license CC-BY-SA-3.0  * @copyright (c) 2017-2020 by the Authors: &lt;/span&gt;  if(typeof maxUsersCUStaleness !== &amp;quot;number&amp;quot; || maxUsersCUStaleness &amp;lt; 1) {     maxUsersCUStaleness = 50;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;//&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @brief Checkuser staleness checker.&lt;br /&gt;
 * @desc Checks contribs, deleted contribs, and user creation date, and determines whether the account has activity past the 90-day checkuser staleness mark.&lt;br /&gt;
 * @author Originally written by Writ Keeper. Modified by User:mdaniels5757 for Commons.&lt;br /&gt;
 * @license CC-BY-SA-3.0&lt;br /&gt;
 * @copyright (c) 2017-2020 by the Authors&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
if(typeof maxUsersCUStaleness !== &amp;quot;number&amp;quot; || maxUsersCUStaleness &amp;lt; 1)&lt;br /&gt;
{&lt;br /&gt;
    maxUsersCUStaleness = 50;&lt;br /&gt;
}&lt;br /&gt;
cuStaleNewestCreate = null;&lt;br /&gt;
cuStaleNewestCreateID = null;&lt;br /&gt;
cuStaleOldestCreate = null;&lt;br /&gt;
cuStaleOldestCreateID = null;&lt;br /&gt;
cuStaleNewestContrib = null;&lt;br /&gt;
cuStaleNewestContribID = null;&lt;br /&gt;
cuStaleOldestContrib = null;&lt;br /&gt;
cuStaleOldestContribID = null;&lt;br /&gt;
cuStaleRunCount = 0;&lt;br /&gt;
&lt;br /&gt;
if(typeof lazyCheckCUStaleness !== &amp;quot;boolean&amp;quot; || !(lazyCheckCUStaleness === false))&lt;br /&gt;
{&lt;br /&gt;
    lazyCheckCUStaleness = true;&lt;br /&gt;
}&lt;br /&gt;
function insertStalenessIndicator(siblingNode, message, color, finished)&lt;br /&gt;
{&lt;br /&gt;
	var newNode = &amp;quot;&amp;lt;span style=&amp;#039;color:&amp;quot; + color + &amp;quot;;&amp;#039;&amp;gt; -- &amp;quot; + message + &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;;&lt;br /&gt;
	$(siblingNode).after(newNode);&lt;br /&gt;
	$(siblingNode).parent(&amp;quot;span.cuStaleChecking&amp;quot;).removeClass(&amp;quot;cuStaleChecking&amp;quot;);&lt;br /&gt;
	finished.resolve();&lt;br /&gt;
}&lt;br /&gt;
function performStalenessCheck()&lt;br /&gt;
{&lt;br /&gt;
	cuStaleRunCount++;&lt;br /&gt;
	//initialize some variables&lt;br /&gt;
	var currentTimestamp = new Date().getTime();&lt;br /&gt;
	var canViewDeleted = true; //assume this is true, update if the first call fails&lt;br /&gt;
	var timestampDifference = 90 * 24 * 60 * 60 * 1000; //90 days in milliseconds&lt;br /&gt;
	var notStaleColor = &amp;quot;#339900&amp;quot;;&lt;br /&gt;
	var problemColor = &amp;quot;red&amp;quot;;&lt;br /&gt;
	var maybeStaleColor = &amp;quot;#e6ac00&amp;quot;;&lt;br /&gt;
	var promises = [];&lt;br /&gt;
	//for each cu entry (as defined by use of the {{checkuser}} template)...&lt;br /&gt;
	var cuEntries =  $($(&amp;quot;span.cuStaleChecking&amp;quot;).get().reverse());&lt;br /&gt;
	if(cuStaleNewestCreateID != null)&lt;br /&gt;
	{&lt;br /&gt;
		$(&amp;quot;#Create&amp;quot; + cuStaleNewestCreateID).css(&amp;quot;font-style&amp;quot;,&amp;quot;normal&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	if(cuStaleNewestContribID != null)&lt;br /&gt;
	{&lt;br /&gt;
		$(&amp;quot;#Contrib&amp;quot; + cuStaleNewestContribID).css(&amp;quot;font-style&amp;quot;,&amp;quot;normal&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	if(cuStaleOldestCreateID != null)&lt;br /&gt;
	{&lt;br /&gt;
		$(&amp;quot;#Create&amp;quot; + cuStaleOldestCreateID).css(&amp;quot;font-weight&amp;quot;,&amp;quot;normal&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	if(cuStaleOldestContribID != null)&lt;br /&gt;
	{&lt;br /&gt;
		$(&amp;quot;#Contrib&amp;quot; + cuStaleOldestContribID).css(&amp;quot;font-weight&amp;quot;,&amp;quot;normal&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	cuEntries.each(function (index)&lt;br /&gt;
	{&lt;br /&gt;
		//first, retrieve the current iteration&amp;#039;s user name from the text of the template&lt;br /&gt;
		var contribsData =&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;query&amp;quot;,&lt;br /&gt;
			&amp;quot;list&amp;quot;: &amp;quot;usercontribs&amp;quot;,&lt;br /&gt;
			&amp;quot;ucprop&amp;quot;: &amp;quot;timestamp&amp;quot;,&lt;br /&gt;
			&amp;quot;ucuser&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;quot;uclimit&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
			&amp;quot;ucdir&amp;quot;: &amp;quot;older&amp;quot;,&lt;br /&gt;
			&amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;&lt;br /&gt;
		};&lt;br /&gt;
		var deletedData =&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;query&amp;quot;,&lt;br /&gt;
			&amp;quot;list&amp;quot;: &amp;quot;alldeletedrevisions&amp;quot;,&lt;br /&gt;
			&amp;quot;adrprop&amp;quot;: &amp;quot;timestamp&amp;quot;,&lt;br /&gt;
			&amp;quot;adruser&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;quot;adrlimit&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
			&amp;quot;adrdir&amp;quot;: &amp;quot;older&amp;quot;,&lt;br /&gt;
			&amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;&lt;br /&gt;
		};&lt;br /&gt;
		var createdData =&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;query&amp;quot;,&lt;br /&gt;
			&amp;quot;list&amp;quot;: &amp;quot;users&amp;quot;,&lt;br /&gt;
			&amp;quot;ususers&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;quot;usprop&amp;quot;: &amp;quot;registration&amp;quot;,&lt;br /&gt;
			&amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		var sockName = $(this).children(&amp;quot;:first&amp;quot;).text();&lt;br /&gt;
		var cuLogLinks = $(this).children(&amp;quot;span.cuLink&amp;quot;);&lt;br /&gt;
		var message = &amp;quot;&amp;quot;;&lt;br /&gt;
		//insert it into the API data packages&lt;br /&gt;
		contribsData.ucuser = sockName;&lt;br /&gt;
		deletedData.adruser = sockName;&lt;br /&gt;
		createdData.ususers = sockName;&lt;br /&gt;
		//initialize values&lt;br /&gt;
		var lastWasDeleted = false;&lt;br /&gt;
		var notStale = false;&lt;br /&gt;
		//first search and display creation date&lt;br /&gt;
		if (index &amp;lt; maxUsersCUStaleness)&lt;br /&gt;
		{&lt;br /&gt;
			var finished = $.Deferred();&lt;br /&gt;
			promises.push(finished.promise());&lt;br /&gt;
			var indexString = cuStaleRunCount + &amp;quot;-&amp;quot; + index;&lt;br /&gt;
			$.post(&amp;quot;/w/api.php&amp;quot;, createdData, function (response)&lt;br /&gt;
			{&lt;br /&gt;
				//if this, the account doesn&amp;#039;t exist; don&amp;#039;t bother to run any more queries&lt;br /&gt;
				if (typeof response.query.users[0].missing !== &amp;quot;undefined&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					insertStalenessIndicator(cuLogLinks, &amp;quot;account does not exist&amp;quot;, problemColor, finished);&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					//check registration date, if it exists.&lt;br /&gt;
					if (typeof response.query.users[0].registration !== &amp;quot;undefined&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						//API-accessible user creation logs started on December 22, 2005; anything before that would display the epoch date without special handling&lt;br /&gt;
						if (response.query.users[0].registration === null)&lt;br /&gt;
						{&lt;br /&gt;
							message = &amp;quot;created &amp;lt;span style=&amp;#039;font-weight:bold;&amp;#039;&amp;gt;on or before 2005-12-22&amp;lt;/span&amp;gt;, &amp;quot;;&lt;br /&gt;
							cuStaleOldestCreate = new Date(0);&lt;br /&gt;
							cuStaleOldestCreateID = null;&lt;br /&gt;
						}&lt;br /&gt;
						else&lt;br /&gt;
						{&lt;br /&gt;
							var regTime = new Date(response.query.users[0].registration);&lt;br /&gt;
							if(cuStaleOldestCreate == null || regTime &amp;lt; cuStaleOldestCreate)&lt;br /&gt;
							{&lt;br /&gt;
								cuStaleOldestCreate = regTime;&lt;br /&gt;
								cuStaleOldestCreateID = &amp;quot;&amp;quot; + indexString;&lt;br /&gt;
							}&lt;br /&gt;
							if(cuStaleNewestCreate == null || regTime &amp;gt; cuStaleNewestCreate)&lt;br /&gt;
							{&lt;br /&gt;
								cuStaleNewestCreate = regTime;&lt;br /&gt;
								cuStaleNewestCreateID = &amp;quot;&amp;quot; + indexString;&lt;br /&gt;
							}&lt;br /&gt;
							//if the account itself is newer than 90 days, and we&amp;#039;re being lazy, we don&amp;#039;t have to check anything else, we already know it&amp;#039;s not stale&lt;br /&gt;
							var formattedDatestamp = dateFormatter(regTime.getUTCFullYear() + &amp;quot;-&amp;quot; + (regTime.getUTCMonth() + 1) + &amp;quot;-&amp;quot; + regTime.getUTCDate(), indexString, &amp;quot;Create&amp;quot;);&lt;br /&gt;
							if (currentTimestamp - regTime.getTime() &amp;lt; timestampDifference)&lt;br /&gt;
							{&lt;br /&gt;
								if(lazyCheckCUStaleness)&lt;br /&gt;
								{&lt;br /&gt;
									message = &amp;quot;created &amp;quot;+ formattedDatestamp + &amp;quot;, not stale&amp;quot;;									&lt;br /&gt;
									insertStalenessIndicator(cuLogLinks, message, notStaleColor, finished);&lt;br /&gt;
									return;&lt;br /&gt;
								}&lt;br /&gt;
								else&lt;br /&gt;
								{&lt;br /&gt;
									notStale = true;&lt;br /&gt;
								}&lt;br /&gt;
							}&lt;br /&gt;
							message = &amp;quot;created &amp;quot; + formattedDatestamp + &amp;quot;, &amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					else //it&amp;#039;s an IP, make note of the fact and move on&lt;br /&gt;
					{&lt;br /&gt;
						message = &amp;quot;IP address, &amp;quot;;&lt;br /&gt;
					}&lt;br /&gt;
					//look up contribs&lt;br /&gt;
&lt;br /&gt;
					$.post(&amp;quot;/w/api.php&amp;quot;, contribsData, function (response)&lt;br /&gt;
					{&lt;br /&gt;
						if(typeof response.error !== &amp;quot;undefined&amp;quot;)&lt;br /&gt;
						{&lt;br /&gt;
							insertStalenessIndicator(cuLogLinks, &amp;quot;Error retrieving contribs details; might be an IP address range&amp;quot;, problemColor, finished);&lt;br /&gt;
						}&lt;br /&gt;
						else if (typeof response.query !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; response.query.usercontribs.length &amp;gt; 0)&lt;br /&gt;
						{&lt;br /&gt;
							//retrieve the current stamp&lt;br /&gt;
							var lastTimestamp = new Date(response.query.usercontribs[0].timestamp);&lt;br /&gt;
							if(cuStaleOldestContrib == null || lastTimestamp &amp;lt; cuStaleOldestContrib)&lt;br /&gt;
							{&lt;br /&gt;
								cuStaleOldestContrib = lastTimestamp;&lt;br /&gt;
								cuStaleOldestContribID = &amp;quot;&amp;quot; + indexString;&lt;br /&gt;
							}&lt;br /&gt;
							if(cuStaleNewestContrib == null || lastTimestamp &amp;gt; cuStaleNewestContrib)&lt;br /&gt;
							{&lt;br /&gt;
								cuStaleNewestContrib = lastTimestamp;&lt;br /&gt;
								cuStaleNewestContribID = &amp;quot;&amp;quot; + indexString;&lt;br /&gt;
							}&lt;br /&gt;
							var formattedDate = dateFormatter(lastTimestamp.getUTCFullYear() + &amp;quot;-&amp;quot; + (lastTimestamp.getUTCMonth() + 1) + &amp;quot;-&amp;quot; + lastTimestamp.getUTCDate(), &amp;quot;&amp;quot; + indexString, &amp;quot;Contrib&amp;quot;);&lt;br /&gt;
							//a contrib more recent than 90 days, so it&amp;#039;s not stale; no need to check the deleted contribs if we&amp;#039;re lazy&lt;br /&gt;
							if (currentTimestamp - lastTimestamp.getTime() &amp;lt; timestampDifference)&lt;br /&gt;
							{&lt;br /&gt;
								if(lazyCheckCUStaleness)&lt;br /&gt;
								{&lt;br /&gt;
									insertStalenessIndicator(cuLogLinks, message + &amp;quot;last edit &amp;quot; + formattedDate + &amp;quot;, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
									return;&lt;br /&gt;
								}&lt;br /&gt;
								else&lt;br /&gt;
								{&lt;br /&gt;
									notStale = true;&lt;br /&gt;
								}&lt;br /&gt;
							}&lt;br /&gt;
							//normal contribs were all stale, so now try deleted (if we can)&lt;br /&gt;
							if (canViewDeleted)&lt;br /&gt;
							{&lt;br /&gt;
								$.post(&amp;quot;/w/api.php&amp;quot;, deletedData, function (response)&lt;br /&gt;
								{&lt;br /&gt;
									//if we can&amp;#039;t see deleted edits due to not being an admin, flag as possibly stale based on the normal contribs and flip the bit so that we don&amp;#039;t waste time on deleted contribs in the future&lt;br /&gt;
									if (typeof response.error !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; response.error.code == &amp;quot;permissiondenied&amp;quot;)&lt;br /&gt;
									{&lt;br /&gt;
										canViewDeleted = false;&lt;br /&gt;
										if(notStale)&lt;br /&gt;
										{&lt;br /&gt;
											insertStalenessIndicator(cuLogLinks, message + &amp;quot;last edit &amp;quot; + formattedDate + &amp;quot;, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
										}&lt;br /&gt;
										else&lt;br /&gt;
										{&lt;br /&gt;
											insertStalenessIndicator(cuLogLinks, message + &amp;quot;last edit &amp;quot; + formattedDate + &amp;quot;, possibly stale&amp;quot;, maybeStaleColor, finished);&lt;br /&gt;
										}&lt;br /&gt;
										return;&lt;br /&gt;
									}&lt;br /&gt;
									//otherwise, check the to see if there are any&lt;br /&gt;
									else if (response.query.alldeletedrevisions.length &amp;gt; 0)&lt;br /&gt;
									{&lt;br /&gt;
										var deletedTimestamp = new Date(response.query.alldeletedrevisions[0].revisions[0].timestamp);&lt;br /&gt;
										//there are deleted contribs, so compare the timestamp to see if they&amp;#039;re more recent than the normal contrib&lt;br /&gt;
										if (deletedTimestamp &amp;gt; lastTimestamp)&lt;br /&gt;
										{&lt;br /&gt;
											//deleted contrib is newer, so display it and use it to decide whether the account is possibly stale or not&lt;br /&gt;
											if(cuStaleOldestContrib == null || deletedTimestamp &amp;lt; cuStaleOldestContrib)&lt;br /&gt;
											{&lt;br /&gt;
												cuStaleOldestContrib = deletedTimestamp;&lt;br /&gt;
												cuStaleOldestContribID = &amp;quot;&amp;quot; + indexString;&lt;br /&gt;
											}&lt;br /&gt;
											if(cuStaleNewestContrib == null || deletedTimestamp &amp;gt; cuStaleNewestContrib)&lt;br /&gt;
											{&lt;br /&gt;
												cuStaleNewestContrib = deletedTimestamp;&lt;br /&gt;
												cuStaleNewestContribID = &amp;quot;&amp;quot; + indexString;&lt;br /&gt;
											}&lt;br /&gt;
											formattedDate = dateFormatter(deletedTimestamp.getUTCFullYear() + &amp;quot;-&amp;quot; + (deletedTimestamp.getUTCMonth() + 1) + &amp;quot;-&amp;quot; + deletedTimestamp.getUTCDate(), &amp;quot;&amp;quot; + indexString, &amp;quot;Contrib&amp;quot;);&lt;br /&gt;
											if (currentTimestamp - deletedTimestamp.getTime() &amp;lt; timestampDifference)&lt;br /&gt;
											{&lt;br /&gt;
												insertStalenessIndicator(cuLogLinks, message + &amp;quot;last (deleted) edit &amp;quot; + formattedDate + &amp;quot;, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
												return;&lt;br /&gt;
											}&lt;br /&gt;
											else&lt;br /&gt;
											{&lt;br /&gt;
												insertStalenessIndicator(cuLogLinks, message + &amp;quot;last (deleted) edit &amp;quot; + formattedDate + &amp;quot;, probably stale&amp;quot;, maybeStaleColor, finished);&lt;br /&gt;
												return;&lt;br /&gt;
											}&lt;br /&gt;
										}&lt;br /&gt;
										else //the deleted contribs existed but aren&amp;#039;t any newer than the normal contribs, so report the normal contribs and flag as probably stale&lt;br /&gt;
										{&lt;br /&gt;
											if(notStale)&lt;br /&gt;
											{&lt;br /&gt;
												insertStalenessIndicator(cuLogLinks, message + &amp;quot;last edit &amp;quot; + formattedDate + &amp;quot;, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
											}&lt;br /&gt;
											else&lt;br /&gt;
											{&lt;br /&gt;
												insertStalenessIndicator(cuLogLinks, message + &amp;quot;last edit &amp;quot; + formattedDate + &amp;quot;, probably stale&amp;quot;, maybeStaleColor, finished);&lt;br /&gt;
											}&lt;br /&gt;
											return;&lt;br /&gt;
										}&lt;br /&gt;
									}&lt;br /&gt;
									else //no deleted contribs, so report the normal contribs and flag as probably stale&lt;br /&gt;
									{&lt;br /&gt;
										if(notStale)&lt;br /&gt;
										{&lt;br /&gt;
											insertStalenessIndicator(cuLogLinks, message + &amp;quot;last edit &amp;quot; + formattedDate + &amp;quot;, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
										}&lt;br /&gt;
										else&lt;br /&gt;
										{&lt;br /&gt;
											insertStalenessIndicator(cuLogLinks, message + &amp;quot;last edit &amp;quot; + formattedDate + &amp;quot;, probably stale&amp;quot;, maybeStaleColor, finished);&lt;br /&gt;
										}&lt;br /&gt;
										return;&lt;br /&gt;
									}&lt;br /&gt;
								}&lt;br /&gt;
								);&lt;br /&gt;
							}&lt;br /&gt;
							else //we already know we can&amp;#039;t see deleted contribs, so just settle for possibly stale from the normal contribs&lt;br /&gt;
							{&lt;br /&gt;
								if(notStale)&lt;br /&gt;
								{&lt;br /&gt;
									insertStalenessIndicator(cuLogLinks, message + &amp;quot;last edit &amp;quot; + formattedDate + &amp;quot;, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
								}&lt;br /&gt;
								else&lt;br /&gt;
								{&lt;br /&gt;
									insertStalenessIndicator(cuLogLinks, message + &amp;quot;last edit &amp;quot; + formattedDate + &amp;quot;, possibly stale&amp;quot;, maybeStaleColor, finished);&lt;br /&gt;
								}&lt;br /&gt;
								return;&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
						else //no normal contribs, so check deleted contribs if we can&lt;br /&gt;
						{&lt;br /&gt;
							if (canViewDeleted)&lt;br /&gt;
							{&lt;br /&gt;
								$.post(&amp;quot;/w/api.php&amp;quot;, deletedData, function (response)&lt;br /&gt;
								{&lt;br /&gt;
									//if we can&amp;#039;t see deleted edits due to not being an admin, flag as possibly stale based on the normal contribs and flip the bit so that we don&amp;#039;t waste time on deleted contribs in the future&lt;br /&gt;
									if (typeof response.error !== &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; response.error.code == &amp;quot;permissiondenied&amp;quot;)&lt;br /&gt;
									{&lt;br /&gt;
										canViewDeleted = false;&lt;br /&gt;
										if(notStale)&lt;br /&gt;
										{&lt;br /&gt;
											insertStalenessIndicator(cuLogLinks, message + &amp;quot;no visible contribs, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
										}&lt;br /&gt;
										else&lt;br /&gt;
										{&lt;br /&gt;
											insertStalenessIndicator(cuLogLinks, message + &amp;quot;no visible contribs, possibly stale&amp;quot;, maybeStaleColor, finished);&lt;br /&gt;
										}&lt;br /&gt;
										return;&lt;br /&gt;
									}&lt;br /&gt;
									//otherwise, check the to see if there are any&lt;br /&gt;
									else if (response.query.alldeletedrevisions.length &amp;gt; 0)&lt;br /&gt;
									{&lt;br /&gt;
										var deletedTimestamp = new Date(response.query.alldeletedrevisions[0].revisions[0].timestamp);&lt;br /&gt;
										if(cuStaleOldestContrib == null || deletedTimestamp &amp;lt; cuStaleOldestContrib)&lt;br /&gt;
										{&lt;br /&gt;
											cuStaleOldestContrib = deletedTimestamp;&lt;br /&gt;
											cuStaleOldestContribID = &amp;quot;&amp;quot; + indexString;&lt;br /&gt;
										}&lt;br /&gt;
										if(cuStaleNewestContrib == null || deletedTimestamp &amp;gt; cuStaleNewestContrib)&lt;br /&gt;
										{&lt;br /&gt;
											cuStaleNewestContrib = deletedTimestamp;&lt;br /&gt;
											cuStaleNewestContribID = &amp;quot;&amp;quot; + indexString;&lt;br /&gt;
										}&lt;br /&gt;
										formattedDate = dateFormatter(deletedTimestamp.getUTCFullYear() + &amp;quot;-&amp;quot; + (deletedTimestamp.getUTCMonth() + 1) + &amp;quot;-&amp;quot; + deletedTimestamp.getUTCDate(), &amp;quot;&amp;quot; + indexString, &amp;quot;Contrib&amp;quot;);&lt;br /&gt;
										if (currentTimestamp - deletedTimestamp.getTime() &amp;lt; timestampDifference)&lt;br /&gt;
										{&lt;br /&gt;
											insertStalenessIndicator(cuLogLinks, message + &amp;quot;last (deleted) edit &amp;quot; + formattedDate + &amp;quot;, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
											return;&lt;br /&gt;
										}&lt;br /&gt;
										else&lt;br /&gt;
										{&lt;br /&gt;
											if(notStale)&lt;br /&gt;
											{&lt;br /&gt;
												insertStalenessIndicator(cuLogLinks, message + &amp;quot;last (deleted) edit &amp;quot; + formattedDate + &amp;quot;, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
											}&lt;br /&gt;
											else&lt;br /&gt;
											{&lt;br /&gt;
												insertStalenessIndicator(cuLogLinks, message + &amp;quot;last (deleted) edit &amp;quot; + formattedDate + &amp;quot;, probably stale&amp;quot;, maybeStaleColor, finished);&lt;br /&gt;
											}&lt;br /&gt;
											return;&lt;br /&gt;
										}&lt;br /&gt;
									}&lt;br /&gt;
									else //no deleted contribs, so report the normal contribs and flag as probably stale&lt;br /&gt;
									{&lt;br /&gt;
										if(notStale)&lt;br /&gt;
										{&lt;br /&gt;
											insertStalenessIndicator(cuLogLinks, message + &amp;quot;no contribs, not stale&amp;quot;, notStaleColor, finished);&lt;br /&gt;
										}&lt;br /&gt;
										else&lt;br /&gt;
										{&lt;br /&gt;
											insertStalenessIndicator(cuLogLinks, message + &amp;quot;no contribs, probably stale&amp;quot;, maybeStaleColor, finished);&lt;br /&gt;
										}&lt;br /&gt;
										return;&lt;br /&gt;
									}&lt;br /&gt;
								}&lt;br /&gt;
								);&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var newNode = &amp;quot;&amp;lt;a class=&amp;#039;cuStalenessContinue&amp;#039; style=&amp;#039;color:&amp;quot; + problemColor + &amp;quot;;&amp;#039;&amp;gt; -- too many users to process at once; this user not checked. click to continue...&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
			$(cuLogLinks).after(newNode);&lt;br /&gt;
			$(&amp;quot;.cuStalenessContinue&amp;quot;).click(resumeStalenessCheck);&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	);&lt;br /&gt;
	$.when.apply($, promises).then(function()&lt;br /&gt;
	{&lt;br /&gt;
		if(cuStaleNewestCreateID != null)&lt;br /&gt;
		{&lt;br /&gt;
			$(&amp;quot;#Create&amp;quot; + &amp;quot;&amp;quot; + cuStaleNewestCreateID).css(&amp;quot;font-style&amp;quot;,&amp;quot;italic&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(cuStaleNewestContribID != null)&lt;br /&gt;
		{&lt;br /&gt;
			$(&amp;quot;#Contrib&amp;quot; + &amp;quot;&amp;quot; + cuStaleNewestContribID).css(&amp;quot;font-style&amp;quot;,&amp;quot;italic&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(cuStaleOldestCreateID != null)&lt;br /&gt;
		{&lt;br /&gt;
			$(&amp;quot;#Create&amp;quot; + &amp;quot;&amp;quot; + cuStaleOldestCreateID).css(&amp;quot;font-weight&amp;quot;,&amp;quot;bold&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(cuStaleOldestContribID != null)&lt;br /&gt;
		{&lt;br /&gt;
			$(&amp;quot;#Contrib&amp;quot; + &amp;quot;&amp;quot; + cuStaleOldestContribID).css(&amp;quot;font-weight&amp;quot;,&amp;quot;bold&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
function dateFormatter(dateString, index, type)&lt;br /&gt;
{&lt;br /&gt;
	var message = &amp;quot;&amp;lt;span id=&amp;#039;&amp;quot; + type + index + &amp;quot;&amp;#039;&amp;gt;&amp;quot; + dateString + &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;;&lt;br /&gt;
	return message;&lt;br /&gt;
}&lt;br /&gt;
function resolvePromise(promise)&lt;br /&gt;
{&lt;br /&gt;
	return function(){promise.resolve()};&lt;br /&gt;
}&lt;br /&gt;
function resumeStalenessCheck()&lt;br /&gt;
{&lt;br /&gt;
	$(&amp;quot;.cuStalenessContinue&amp;quot;).remove();&lt;br /&gt;
	performStalenessCheck();&lt;br /&gt;
}&lt;br /&gt;
mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function ()&lt;br /&gt;
{&lt;br /&gt;
	var titleRegex = /Commons:Requests_for_checkuser/;&lt;br /&gt;
	var sandboxRegex = /User:.+\/[Ss]andbox/;&lt;br /&gt;
	//only use on a RFCU page (or a sandbox page for testing)&lt;br /&gt;
	if (titleRegex.test(mw.config.get(&amp;quot;wgPageName&amp;quot;)) || sandboxRegex.test(mw.config.get(&amp;quot;wgPageName&amp;quot;)))&lt;br /&gt;
	{&lt;br /&gt;
		$(&amp;quot;span.cuEntry&amp;quot;).addClass(&amp;quot;cuStaleChecking&amp;quot;);&lt;br /&gt;
		performStalenessCheck();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
//&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>DarkMatterMan4500</name></author>
	</entry>
</feed>