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 ); } } } );