User:Enterprisey/mark-join-date.js

$( function() {

if( mw.config.get( "wgPageName" ).indexOf( "Wikipedia:Sockpuppet_investigations/" ) >= 0 ) {

mw.loader.using( [ 'mediawiki.api' ] ).then( function () {

var allLinks = Array.from( document.querySelectorAll( "a[href^='https://en.wikipedia.org/wiki/User:'].external" ) );

var CHUNK_SIZE = 10;

for( var i = 0; i < allLinks.length; i += CHUNK_SIZE ) {

fetchAndDisplayDates( allLinks.slice( i, i + CHUNK_SIZE ) );

}

// Make an API call to fetch all registration dates for users in this chunk

function fetchAndDisplayDates( links ) {

// Make the "ususers" parameter for the query;

// must be pipe-separated URL-encoded usernames

var users = links.map( function ( link ) {

return usernameFromUrl( link.href ); } );

var usersParam = users.map( encodeURIComponent ).join( "|" );

// Perform query

( new mw.Api() ).get( {

"list": "users",

"ususers": usersParam,

"usprop": "registration"

} ).done( function ( res ) {

if( res && res.query && res.query.users ) {

// `identicalLinks` is necessary because `users` might have duplicates

var dateSpan, dateText, identicalLinks;

for( var j = 0; j < res.query.users.length; j++ ) {

currUser = res.query.users[j].name;

try { dateText = res.query.users[j].registration.replace( /T.*/, "" ); } catch (e) { continue; }

identicalLinks = links.filter( function ( link ) { return usernameFromUrl( link.href ) === currUser; } );

for( var k = 0; k < identicalLinks.length; k++ ) {

dateSpan = document.createElement( "span" );

dateSpan.style.fontSize = "80%";

dateSpan.style.paddingLeft = "0.2em";

dateSpan.textContent = dateText;

identicalLinks[k].parentNode.insertBefore( dateSpan, identicalLinks[k].nextSibling );

}

}

} else {

console.log( "bad data", res );

}

} );

}

} ); // end mw.loader.using callback

// Turns "//en.wikipedia.org/wiki/User:Example" into "Example"

function usernameFromUrl( url ) { return url.substr( 35 ); }

}

} );