MediaWiki:Gadget-SpecialPages.js/Autopromote.js

( function ( mw, $ ) {   // Get a complete list of users, edit counts, account ages, and current groups.  var promotionCandidates = {};  var ecVIP = 100;// DDO:Ddowikivip: "The general consensus seems to be that any user with a triple digit edit count (C:100 edit users) is qualified for this group."  var ecSU = 250;// DDO:Superuser: "Users that are up to at least C:250 edit users should be in this group."  var aufrom = '';// start at the beginning  while( aufrom !== '#' ) {    $.ajax( {//* REALLY DON'T LIKE THIS!!! *//*     url: 'http://ddowiki.com/api.php?action=query&format=json&aulimit=max&list=allusers&auexcludegroup=sysop|bureaucrat|steward&auprop=groups|blockinfo|editcount|registration&auwitheditsonly=1&aufrom=' + aufrom, dataType: 'json', async: false,//* REALLY DON'T LIKE THIS!!! IT WILL FAIL IN THE FUTURE!!! *//*     success: function( successData ) { var resultObject = successData.query.allusers; $.each( resultObject, function {         var isBlocked = ( $( this )[ 0 ].blockedby !== undefined ? true : false );         var editCount = $( this )[ 0 ].editcount;// Get the edit count from the API (doesn't include deleted edits)          var isSU = ( $.inArray( 'superuser', $( this )[ 0 ].groups ) !== -1 ? true : false );// Is the user a superuser         var isVIP = ( $.inArray( 'ddowikivip', $( this )[ 0 ].groups ) !== -1 ? true : false );// Is the user a ddowikivip         // If the user is not blocked, and should be a VIP or SU but isn't, then...          if ( !isBlocked && ( ( !isVIP && editCount >= ecVIP ) || ( !isSU && editCount >= ecSU ) ) ) {            promotionCandidates[ $( this )[ 0 ].name ] = {};// Create an object with the user name            promotionCandidates[ $( this )[ 0 ].name ].editcount = editCount;// Put edit count in user's object            var currDate = new Date;// Define a new date constructor            var currDateInMonths = currDate.getFullYear * 12 + currDate.getMonth;// Calculate the current number of months since Jan 2000            var regSince = ( $( this )[ 0 ].registration === '' ? new Date( 1999, 11, 30 ) : new Date( $( this )[ 0 ].registration ) );// Date object for registration date           var age = ( currDateInMonths - ( ( regSince.getFullYear * 12 ) + regSince.getMonth ) );// Calculate age in months            promotionCandidates[ $( this )[ 0 ].name ].age = age;// Put the age in the user's object            promotionCandidates[ $( this )[ 0 ].name ].isSU = isSU;// Toggle the superuser object element            promotionCandidates[ $( this )[ 0 ].name ].isVIP = isVIP;// Toggle the ddowikivip object element          }        } ); if ( successData[ 'query-continue' ] !== undefined ) { aufrom = successData[ 'query-continue' ].allusers.aufrom;// More users to process } else { aufrom = '#';// Last page - User: can not exits and returns "Bad title" if you try. Seems like a fitting way to end the while loop }     },      fail: function( failureData ) { alert( 'Sorry, failed to retrieve information from API.\nPlease check the console for more details if available.' ); console.error( '%O', failureData ); }   } );  }  $( 'a[title="Special:UserRights"]' ).parent( 'li' ).after( 'Semi-auto-promote (' + Object.keys(promotionCandidates).length.toLocaleString + ')' ); } )( mediaWiki, jQuery );