User:Enterprisey/ContribsTabVector.js

/* This script adds Contributions and Statistics tabs to User and User talk pages. For Vector skin.

This script was originally written by User:Equazcion and rewritten mostly from scratch by User:HueSatLum. User:Enterprisey then added the ability to assign access keys to the tabs.

To use this script, place the following line in your vector.js page:

importScript('User:Equazcion/ContribsTabVector.js'); // Backlink: User:Equazcion/ContribsTabVector.js

Add any or all of these lines after the importScript line above to set various options (the default values are shown):

var contribsTab = true;                   // Turns the Contributions tab on or off (set to false; for off) var contribsTabStats = true;              // Turns the Statistics tab on or off (set to false; for off) var contribsTabNumber = 50;               // Number of contributions to display in the Contributions tab. Can be 1 to 5000. var contribsTabName = "Contributions";    // Custom name for Contributions tab. Replace quoted text with your desired name. var contribsTabStatsName = "Statistics";  // Custom name for Statistics tab. Replace quoted text with your desired name. var contribsTabKey = null;                // Access key for Contributions tab. See WP:K for more information. var contribsTabStatsKey = null;           // Access key for Statistics tab. See WP:K for more information.

-- End of documentation -- */

mw.loader.using( ['mediawiki.util', 'mediawiki.Uri'], function {	"use strict";	var username, firstTab, contribsTabUrl, contribsTabStatsUrl, contribsTabKey, contribsTabStatsKey;

// Set default options for any that haven't been set function setDefault( option, val ) { if ( window[option] === undefined ) { window[option] = val; }	}	setDefault( 'contribsTabName', 'Contributions' ); setDefault( 'contribsTabNumber', 50 ); setDefault( 'contribsTabStats', true ); setDefault( 'contribsTab', true ); setDefault( 'contribsTabStatsName', 'Statistics' ); setDefault( 'contribsTabKey', null ); setDefault( 'contribsTabStatsKey', null );

username = mw.config.get( 'wgRelevantUserName' ); if ( !username ) { return; // Don't do anything if we're not on a page with a relevant username (i.e. User or User talk) }

firstTab = $( '#p-views ul li' ).eq( 0 ); // Tab to put the new tabs before (usually "Read")

// Release the current target of the given access key, if any function releaseAccessKey( key ) { if( !key ) return; var existingKeyLink = document.querySelector( "*[accesskey=" + key + "]" ); if( existingKeyLink ) { existingKeyLink.setAttribute( "accesskey", "" ); existingKeyLink.accesskey = existingKeyLink.accessKey = ""; existingKeyLink.title = existingKeyLink.title.replace( / \^\+?\]$/, "" ); }	}

if ( window.contribsTab ) { // Construct the contribs tab, if it's not turned off // Construct contribs URL contribsTabUrl = mw.util.getUrl( 'Special:Contributions', {			target: username,			limit: window.contribsTabNumber		} );

releaseAccessKey( window.contribsTabKey ); mw.util.addPortletLink(			'p-views',			contribsTabUrl,			window.contribsTabName,			'ca-contributions',			'Show this user\'s contributions',			window.contribsTabKey,			firstTab		); }

if ( window.contribsTabStats ) { // Construct the stats tab, if it's not turned off // Construct stats URL contribsTabStatsUrl = new mw.Uri( '//tools.wmflabs.org/xtools-ec/' ) .extend( {				user: username,				project: mw.config.get( 'wgDBname' )			} ) .toString;

releaseAccessKey( window.contribsTabStatsKey ); mw.util.addPortletLink(			'p-views',			contribsTabStatsUrl,			window.contribsTabStatsName,			'ca-statistics',			'Show this user\'s editing statistics',			window.contribsTabStatsKey,			firstTab		); } } );