<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://meta.wikioasis.org/wiki/User:DarkMatterMan4500/sockStaleness.js?action=history&amp;feed=atom</id>
	<title>User:DarkMatterMan4500/sockStaleness.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://meta.wikioasis.org/wiki/User:DarkMatterMan4500/sockStaleness.js?action=history&amp;feed=atom"/>
	<link rel="alternate" type="text/html" href="https://meta.wikioasis.org/wiki/User:DarkMatterMan4500/sockStaleness.js?action=history"/>
	<updated>2026-05-24T13:55:24Z</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/sockStaleness.js?diff=4449&amp;oldid=prev</id>
		<title>DarkMatterMan4500: Created page with &quot;//&lt;nowiki&gt; /* Checkuser staleness checker, written by Writ Keeper. Checks contribs, deleted contribs, and user creation date, and determines whether the account has activity past the 90-day checkuser staleness mark.  */ if(typeof maxUsersCUStaleness !== &quot;number&quot; || maxUsersCUStaleness &lt; 1) {     maxUsersCUStaleness = 10; } if(typeof lazyCheckCatStaleness !== &quot;boolean&quot; || !(lazyCheckCatStaleness === false)) {     lazyCheckCatStaleness = true; } sockStaleDates = {}; sockSt...&quot;</title>
		<link rel="alternate" type="text/html" href="https://meta.wikioasis.org/wiki/User:DarkMatterMan4500/sockStaleness.js?diff=4449&amp;oldid=prev"/>
		<updated>2026-05-03T12:57:44Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;//&amp;lt;nowiki&amp;gt; &lt;span class=&quot;autocomment&quot;&gt;Checkuser staleness checker, written by Writ Keeper. Checks contribs, deleted contribs, and user creation date, and determines whether the account has activity past the 90-day checkuser staleness mark.: &lt;/span&gt; if(typeof maxUsersCUStaleness !== &amp;quot;number&amp;quot; || maxUsersCUStaleness &amp;lt; 1) {     maxUsersCUStaleness = 10; } if(typeof lazyCheckCatStaleness !== &amp;quot;boolean&amp;quot; || !(lazyCheckCatStaleness === false)) {     lazyCheckCatStaleness = true; } sockStaleDates = {}; sockSt...&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;
Checkuser staleness checker, written by Writ Keeper. 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;
 */&lt;br /&gt;
if(typeof maxUsersCUStaleness !== &amp;quot;number&amp;quot; || maxUsersCUStaleness &amp;lt; 1)&lt;br /&gt;
{&lt;br /&gt;
    maxUsersCUStaleness = 10;&lt;br /&gt;
}&lt;br /&gt;
if(typeof lazyCheckCatStaleness !== &amp;quot;boolean&amp;quot; || !(lazyCheckCatStaleness === false))&lt;br /&gt;
{&lt;br /&gt;
    lazyCheckCatStaleness = true;&lt;br /&gt;
}&lt;br /&gt;
sockStaleDates = {};&lt;br /&gt;
sockStaleDates.newestCreate = null;&lt;br /&gt;
sockStaleDates.newestCreateID = null;&lt;br /&gt;
sockStaleDates.oldestCreate = null;&lt;br /&gt;
sockStaleDates.oldestCreateID = null;&lt;br /&gt;
sockStaleDates.newestContrib = null;&lt;br /&gt;
sockStaleDates.newestContribID = null;&lt;br /&gt;
sockStaleDates.oldestContrib = null;&lt;br /&gt;
sockStaleDates.oldestContribID = null;&lt;br /&gt;
sockStaleDates.CREATE = 1;&lt;br /&gt;
sockStaleDates.CONTRIB = 0;&lt;br /&gt;
sockStaleRunCount = 0;&lt;br /&gt;
&lt;br /&gt;
function insertCatStalenessIndicator(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).addClass(&amp;quot;cuProcessed&amp;quot;);&lt;br /&gt;
	finished.resolve();&lt;br /&gt;
}&lt;br /&gt;
function updateDatesRefs(inputDate, refDateType, index)&lt;br /&gt;
{&lt;br /&gt;
	if(refDateType == sockStaleDates.CREATE)&lt;br /&gt;
	{&lt;br /&gt;
		if(sockStaleDates.oldestCreate == null || inputDate &amp;lt; sockStaleDates.oldestCreate)&lt;br /&gt;
		{&lt;br /&gt;
			sockStaleDates.oldestCreate = inputDate;&lt;br /&gt;
			sockStaleDates.oldestCreateID = &amp;quot;&amp;quot; + index;&lt;br /&gt;
		}&lt;br /&gt;
		if(sockStaleDates.newestCreate == null || inputDate &amp;gt; sockStaleDates.newestCreate)&lt;br /&gt;
		{&lt;br /&gt;
			sockStaleDates.newestCreate = inputDate;&lt;br /&gt;
			sockStaleDates.newestCreateID = &amp;quot;&amp;quot; + index;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		if(sockStaleDates.oldestContrib == null || inputDate &amp;lt; sockStaleDates.oldestContrib)&lt;br /&gt;
		{&lt;br /&gt;
			sockStaleDates.oldestContrib = inputDate;&lt;br /&gt;
			sockStaleDates.oldestContribID = &amp;quot;&amp;quot; + index;&lt;br /&gt;
		}&lt;br /&gt;
		if(sockStaleDates.newestContrib == null || inputDate &amp;gt; sockStaleDates.newestContrib)&lt;br /&gt;
		{&lt;br /&gt;
			sockStaleDates.newestContrib = inputDate;&lt;br /&gt;
			sockStaleDates.newestContribID = &amp;quot;&amp;quot; + index;&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 performCatStalenessCheck()&lt;br /&gt;
{&lt;br /&gt;
	sockStaleRunCount++;&lt;br /&gt;
&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 index = 0;&lt;br /&gt;
	var promises = [];&lt;br /&gt;
	if(sockStaleDates.newestCreateID != null)&lt;br /&gt;
	{&lt;br /&gt;
		$(&amp;quot;#Create&amp;quot; + sockStaleDates.newestCreateID).css(&amp;quot;font-style&amp;quot;,&amp;quot;normal&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	if(sockStaleDates.newestContribID != null)&lt;br /&gt;
	{&lt;br /&gt;
		$(&amp;quot;#Contrib&amp;quot; + sockStaleDates.newestContribID).css(&amp;quot;font-style&amp;quot;,&amp;quot;normal&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	if(sockStaleDates.oldestCreateID != null)&lt;br /&gt;
	{&lt;br /&gt;
		$(&amp;quot;#Create&amp;quot; + sockStaleDates.oldestCreateID).css(&amp;quot;font-weight&amp;quot;,&amp;quot;normal&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	if(sockStaleDates.oldestContribID != null)&lt;br /&gt;
	{&lt;br /&gt;
		$(&amp;quot;#Contrib&amp;quot; + sockStaleDates.oldestContribID).css(&amp;quot;font-weight&amp;quot;,&amp;quot;normal&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	//for each cu entry (as defined by use of the {{checkuser}} template)...&lt;br /&gt;
	$(&amp;quot;div.mw-content-ltr ul a&amp;quot;).not(&amp;quot;[class~=&amp;#039;cuProcessed&amp;#039;]&amp;quot;).each(function ()&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;
		if(!(/User([ _]talk)?:([^\/]+)/.test($(this).text())))&lt;br /&gt;
		{&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
		index += 1;&lt;br /&gt;
		var sockName = /User([ _]talk)?:([^\/]+)/.exec($(this).text())[2];&lt;br /&gt;
		var cuLogLinks = $(this);&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 = &amp;quot;&amp;quot; + sockStaleRunCount + &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;
					insertCatStalenessIndicator(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;
&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;
							updateDatesRefs(regTime, sockStaleDates.CREATE, indexString);&lt;br /&gt;
							var formattedDate = 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 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;
							if (currentTimestamp - regTime.getTime() &amp;lt; timestampDifference)&lt;br /&gt;
							{&lt;br /&gt;
								if(lazyCheckCatStaleness)&lt;br /&gt;
								{&lt;br /&gt;
									insertCatStalenessIndicator(cuLogLinks, &amp;quot;created &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;
							message = &amp;quot;created &amp;quot; + formattedDate + &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.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;
							updateDatesRefs(lastTimestamp, sockStaleDates.CONTRIB, indexString);&lt;br /&gt;
							var formattedDate = dateFormatter(lastTimestamp.getUTCFullYear() + &amp;quot;-&amp;quot; + (lastTimestamp.getUTCMonth() + 1) + &amp;quot;-&amp;quot; + lastTimestamp.getUTCDate(), 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(lazyCheckCatStaleness)&lt;br /&gt;
								{&lt;br /&gt;
									insertCatStalenessIndicator(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;
&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;
											insertCatStalenessIndicator(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;
											insertCatStalenessIndicator(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.getTime() &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;
											updateDatesRefs(deletedTimestamp, sockStaleDates.CONTRIB, indexString);&lt;br /&gt;
											formattedDate = dateFormatter(deletedTimestamp.getUTCFullYear() + &amp;quot;-&amp;quot; + (deletedTimestamp.getUTCMonth() + 1) + &amp;quot;-&amp;quot; + deletedTimestamp.getUTCDate(), indexString, &amp;quot;Contrib&amp;quot;);&lt;br /&gt;
											if (currentTimestamp - deletedTimestamp.getTime() &amp;lt; timestampDifference)&lt;br /&gt;
											{&lt;br /&gt;
												insertCatStalenessIndicator(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;
												insertCatStalenessIndicator(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;
												insertCatStalenessIndicator(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;
												insertCatStalenessIndicator(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;
											insertCatStalenessIndicator(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;
											insertCatStalenessIndicator(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;
									insertCatStalenessIndicator(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;
									insertCatStalenessIndicator(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;
&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;
											insertCatStalenessIndicator(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;
											insertCatStalenessIndicator(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;
										updateDatesRefs(deletedTimestamp, sockStaleDates.CONTRIB, indexString);&lt;br /&gt;
										var formattedDate = dateFormatter(deletedTimestamp.getUTCFullYear() + &amp;quot;-&amp;quot; + (deletedTimestamp.getUTCMonth() + 1) + &amp;quot;-&amp;quot; + deletedTimestamp.getUTCDate(), indexString, &amp;quot;Contrib&amp;quot;);&lt;br /&gt;
										if (currentTimestamp - deletedTimestamp.getTime() &amp;lt; timestampDifference)&lt;br /&gt;
										{&lt;br /&gt;
											insertCatStalenessIndicator(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;
												insertCatStalenessIndicator(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;
												insertCatStalenessIndicator(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;
											insertCatStalenessIndicator(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;
											insertCatStalenessIndicator(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(resumeCatStalenessCheck);&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(sockStaleDates.newestCreateID != null)&lt;br /&gt;
		{&lt;br /&gt;
			$(&amp;quot;#Create&amp;quot; + sockStaleDates.newestCreateID).css(&amp;quot;font-style&amp;quot;,&amp;quot;italic&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(sockStaleDates.newestContribID != null)&lt;br /&gt;
		{&lt;br /&gt;
			$(&amp;quot;#Contrib&amp;quot; + sockStaleDates.newestContribID).css(&amp;quot;font-style&amp;quot;,&amp;quot;italic&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(sockStaleDates.oldestCreateID != null)&lt;br /&gt;
		{&lt;br /&gt;
			$(&amp;quot;#Create&amp;quot; + sockStaleDates.oldestCreateID).css(&amp;quot;font-weight&amp;quot;,&amp;quot;bold&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(sockStaleDates.oldestContribID != null)&lt;br /&gt;
		{&lt;br /&gt;
			$(&amp;quot;#Contrib&amp;quot; + sockStaleDates.oldestContribID).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 resumeCatStalenessCheck()&lt;br /&gt;
{&lt;br /&gt;
	$(&amp;quot;.cuStalenessContinue&amp;quot;).remove();&lt;br /&gt;
	performCatStalenessCheck();&lt;br /&gt;
}&lt;br /&gt;
$(document).ready(function ()&lt;br /&gt;
{&lt;br /&gt;
	var titleRegex = /Category:(Suspected_)?Wikipedia_sockpuppets_of/;&lt;br /&gt;
	//only use on a sock category&lt;br /&gt;
	if (titleRegex.test(mw.config.get(&amp;quot;wgPageName&amp;quot;)))&lt;br /&gt;
	{&lt;br /&gt;
		performCatStalenessCheck();&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>