User:DannyS712/ContribsTools.js

From Meta, a Wikimedia project coordination wiki

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/**
 * Misc tools for Special:Contributions (and Special:Userrights)
 *
 * @author DannyS712
 */
// <nowiki>
$(() => {
const ContribsTools = {};
window.ContribsTools = ContribsTools;

ContribsTools.run = function () {
	var username = mw.config.get( 'wgRelevantUserName' );
	if ( username === null ) {
		username = mw.config.get( 'wgPageName' ).replace( /^Special:Contributions\//, '' );
	}
	if ( mw.util.isIPAddress( username ) ) {
		ContribsTools.addIpLinks( username );
	} else {
		ContribsTools.addUserLinks( username );
	}
	
	if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Contributions' ) {
		ContribsTools.countDeletedEdits( username );
	}
	if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Userrights' ) {
		ContribsTools.countAFhits( username );
	}
};

ContribsTools.addIpLinks = function ( ipAddress ) {
	mw.util.addPortletLink(
		'p-views',
		'https://tools.wmflabs.org/guc/?src=rc&by=date&user=' + ipAddress,
		'GUC',
		'views-global',
		'View global contributions'
	);
	mw.util.addPortletLink(
		'p-views',
		'https://ipcheck.toolforge.org/index.php?ip=' + ipAddress,
		'IPCheck',
		'views-global',
		'Check if the IP is an open proxy'
	);
	
	var $links = $('#contentSub .mw-contributions-user-tools > .mw-changeslist-links');
	$links.append(
		$( '<span>' ).append(
			$( '<a>' )
				.attr( 'href', '/wiki/m:Special:Log/gblblock?page=User:' + ipAddress  )
				.text( 'global block log' )
		)
	);
};
ContribsTools.addUserLinks = function ( username ) {
	username = encodeURIComponent( username );
	mw.util.addPortletLink(
		'p-views',
		'https://meta.wikimedia.org/wiki/Special:CentralAuth/' + username,
		'CentralAuth',
		'views-global',
		'View CentralAuth on Meta'
	);
	if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Userrights' ) {
		mw.util.addPortletLink(
			'p-cactions',
			'//meta.wikimedia.org/wiki/Special:Log?page=User:' + username + '@' + mw.config.get( 'wgDBname' ),
			'Interwiki rights',
			'',
			'View rights changes made from meta'
		);	
	}
};

ContribsTools.countAFhits = function ( username ) {
	new mw.Api().get( {
		action: 'query',
		list: 'abuselog',
		afluser: username,
		aflprop: 'ids',
		afllimit: 100,
		formatversion: 2
	} ).then(
		function ( response ) {
			console.log( response );
			if ( response && response.query && response.query.abuselog ) {
				var hitCount = response.query.abuselog.length;
				if ( response.continue ) {
					hitCount = hitCount + '+';
				}
				var abuseLogLink;
				// Handle non-English sites having a link with the local name
				if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Contributions' ) {
					abuseLogLink = $( 'span.mw-changeslist-links a[href*="AbuseLog"]' )[0];
					if ( abuseLogLink === undefined ) {
						abuseLogLink = $( 'span.mw-changeslist-links a:contains("abuse log")' )[0];
					}
				} else {
					abuseLogLink = $( '#contentSub a[href*="AbuseLog"]' )[0];
					if ( abuseLogLink === undefined ) {
						abuseLogLink = $( '#contentSub a:contains("abuse log")' )[0];
					}
				}
				if ( abuseLogLink === undefined ) {
					console.log( 'ContribsTools: No abuse log link found, hit count: ' + hitCount );
				} else {
					$( abuseLogLink ).text( $( abuseLogLink ).text() + ' (' + hitCount + ')' );
				}
			}
		},
		function ( problem ) {
			console.log( problem );
		}
	);
};

ContribsTools.countDeletedEdits = function ( username ) {
	new mw.Api().get( {
		action: 'query',
		list: 'alldeletedrevisions',
		adruser: username,
		adrprop: 'ids',
		adrlimit: 100,
		formatversion: 2
	} ).then(
		function ( response ) {
			console.log( response );
			if ( response && response.query && response.query.alldeletedrevisions ) {
				var delCount = 0;
				response.query.alldeletedrevisions.forEach(
					function ( pageInfo ) {
						delCount += pageInfo.revisions.length;
					}
				);
				if ( response.continue ) {
					delCount = delCount + '+';
				}
				
				// Handle non-English sites having a link with the local name
				var delContribsLink = $( 'span.mw-changeslist-links a[href*="DeletedContributions"]' )[0];
				if ( delContribsLink === undefined ) {
					delContribsLink = $( 'span.mw-changeslist-links a:contains("deleted user contributions")' )[0];
				}
				if ( delContribsLink === undefined ) {
					console.log( 'ContribsTools: No deleted contributions link found, count: ' + delCount );
				} else {
					$( delContribsLink ).text( $( delContribsLink ).text() + ' (' + delCount + ')' );
				}
			}
		},
		function ( problem ) {
			console.log( problem );
		}
	);
};

});

$( document ).ready(
	function () {
		if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Contributions'
			|| mw.config.get( 'wgCanonicalSpecialPageName' ) === 'DeletedContributions'
			|| mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Userrights'
		) {
			mw.loader.using(
				[ 'mediawiki.util', 'mediawiki.api' ],
				window.ContribsTools.run
			);
		}
	}
);
// </nowiki>