Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//Find username
var uservar= mw.config.get( 'wgRelevantUserName' );
var userparam='';
  if (uservar) { userparam='name='+ encodeURIComponent(uservar) +'&'; }

var userIP=false;
  if (uservar && uservar.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)) { userIP=true; }

//IP ranges
var range24 = '0.0.0.0/24';
var range16 = '0.0.0.0/16';

if (userIP === true) {
  var base24 = uservar.substring(0,uservar.lastIndexOf('.'));
  var base16 = base24.substring(0,base24.lastIndexOf('.'));
  range24 = base24 + '.0/24';
  range16 = base16 + '.0.0/16';
}

//Date formatting

var hitDate = new Date();
var hitMonth = hitDate.getMonth()+1;  //Date() counts months from zero;
var hitDay = hitDate.getDate();
var MonthLeading0 = '';
if (hitMonth < 10) {MonthLeading0 = '0';}
else {MonthLeading0 = '';}
var DayLeading0 = '';
if (hitDay < 10) {DayLeading0 = '0';}
else {DayLeading0 = '';}

var YearMonth = hitDate.getFullYear() + MonthLeading0 + hitMonth;
var Year_Month_Day = hitDate.getFullYear() + '-' + MonthLeading0 + hitMonth + '-' + DayLeading0 + hitDay;

hitDate.setDate(hitDate.getDate() - 30); //form dates for prev month;
var hitMonth = hitDate.getMonth()+1;  //Date() counts months from zero;
var hitDay = hitDate.getDate();
var MonthLeading0 = '';
if (hitMonth < 10) {MonthLeading0 = '0';}
else {MonthLeading0 = '';}
var DayLeading0 = '';
if (hitDay < 10) {DayLeading0 = '0';}
else {DayLeading0 = '';}

var Year_PrevMonth_Day = hitDate.getFullYear() + '-' + MonthLeading0 + hitMonth + '-' + DayLeading0 + hitDay;

// utility function

//Add sidebar menu function ('User:Anakin101/addPortlet.js')
function addPortlet(id, title, before) {
	var copy = document.getElementById('p-tb');
	var div = document.createElement('div');
	div.setAttribute('id', id);
	div.setAttribute('class', copy.getAttribute('class'));
	div.innerHTML = '<h3>' + title + '</h3>';
	var pBody = document.createElement('div');
	pBody.setAttribute('class', copy.getElementsByTagName('div')[0].getAttribute('class'));
	pBody.appendChild(document.createElement('ul'));
	div.appendChild(pBody);
	if (before && (before = document.getElementById(before))) {
		copy.parentNode.insertBefore(div, before);
	} else {
		copy.parentNode.appendChild(div);
	}
	return pBody;
}
//end sidebar menu function


//navigation menu

$.when( mw.loader.using( [ 'mediawiki.util'] ), $.ready ).done( function () {
 //Work in progress
  mw.util.addPortletLink('p-navigation', 'http://en.wikipedia.org/wiki/User:Spinningspark/Work_in_progress', 'Work in progress', 'n-wip', 'Work in progress page', '', '');
  //Maintenance templates
  mw.util.addPortletLink('p-navigation', 'http://en.wikipedia.org/wiki/Wikipedia:Template_messages', 'Maintenance templates', 'n-usertemp', 'Maintenance templates', '', '');
  mw.util.addPortletLink('p-navigation', 'http://en.wikipedia.org/wiki/User:Spinningspark/Useful_templates', 'My useful templates', 'n-mytemp', 'My useful templates', '', '');
  mw.util.addPortletLink('p-navigation', 'http://en.wikipedia.org/wiki/Template:HD', 'Helpdesk templates', 'n-hd', 'Helpdesk templates', '', '');
});

//end navigation menu

//personal menu

//Coding and formatting
$.when( mw.loader.using( [ 'mediawiki.util'] ), $.ready ).done( function () {
  mw.util.addPortletLink('p-personal', 'http://en.wikipedia.org/wiki/User:Spinningspark/Coding_and_formatting', 'Coding help', 'pt-coding', 'Go to Coding and formatting page', '', document.getElementById('pt-logout'));
});

//end personal menu

//content action tabs

 //Is X an admin?
if( uservar) {
	$.when( mw.loader.using( [ 'mediawiki.util'] ), $.ready ).done( function () {
	    mw.util.addPortletLink('p-cactions', 'http://en.wikipedia.org/w/index.php?title=Special:ListUsers&limit=1&username='+ encodeURIComponent( uservar), 'Admin?', 'ca-admin', 'Determine if user is an admin', '', '');
	    });
}

//end content action tabs

//interaction menu
//The name of this portlet is 'p-interaction' if user addition required in future
//end interaction menu


//toolbox additional tools

$.when( mw.loader.using( [ 'mediawiki.util'] ), $.ready ).done( function() {
  
  mw.util.addPortletLink('p-tb', 'http://en.wikipedia.org/wiki/Special:Upload', 'Upload form', 't-upload_form', 'Go direct to upload form', '', document.getElementById('t-upload'));

  mw.util.addPortletLink('p-tb', 'https://en.wikipedia.org/wiki/User:Spinningspark/Useful_tools', 'More tools', 't-more', 'Other useful tools', '', '');

});

//end toolbox additional tools

//Toolbox 2 Administration tools
$.when( mw.loader.using( [ 'mediawiki.util'] ), $.ready ).done( function() {
  addPortlet('p-tb2', 'Admin tools', 'p-coll-print_export');

  //Block user
  if ( mw.config.get( 'wgNamespaceNumber' ) === 3 || mw.config.get( 'wgNamespaceNumber' ) === 2 ) {
    mw.util.addPortletLink('p-tb2', '/wiki/Special:Block/'+uservar, 'Block user', 't-block', 'Block user', '', '');
  } 

  //Wikiblame
  mw.util.addPortletLink('p-tb2', 'http://wikipedia.ramselehof.de/wikiblame.php?article='+ encodeURIComponent(mw.config.get( 'wgPageName')), 'Wikiblame', 't-wikiblame', 'Go to Wikiblame tool', '', '');

  //User contribution search
  mw.util.addPortletLink('p-tb2', 'http://tools.wmflabs.org/usersearch/usersearch.py?name=Spinningspark&page='+encodeURIComponent(mw.config.get( 'wgPageName'))+'&server=enwiki&max=500', 'Contribs search', 't-contribsearch', 'Find user contributions on this page', '', '');

  //Watchers
  mw.util.addPortletLink('p-tb2', 'https://en.wikipedia.org/w/index.php?title='+encodeURIComponent(mw.config.get( 'wgPageName'))+'&action=info#mw-pageinfo-watchers', 'Watchers', 't-watchers', 'Numbers watching this page', '', '');

  //Active watchers
  mw.util.addPortletLink('p-tb2', 'http://toolserver.org/~dispenser/cgi-bin/watcher.py?page='+encodeURIComponent(mw.config.get( 'wgPageName')), 'Active watchers', 't-awatchers', 'Numbers watching this page', '', '');

  //Unified login information
  if(uservar){
	  mw.util.addPortletLink('p-tb2', 'http://toolserver.org/~quentinv57/sulinfo/'+ uservar, 'Unified login', 't-unified_login', 'Unified login statistics', '', '');

	  //User autoblock search
	  mw.util.addPortletLink('p-tb2', 'http://tools.wmflabs.org/xtools/autoblock/?u='+ encodeURIComponent(uservar), 'Autoblock search', 't-autoblock_search', 'User autoblock search', '', '');
  }

  //CIDR range contributions
  mw.util.addPortletLink('p-tb2', 'https://tools.wmflabs.org/xtools/rangecontribs/?project=en.wikipedia.org&text='+range16 + '&limit=50&begin=' + Year_PrevMonth_Day, 'CIDR (X!tools)', 't-CIDR_range', 'CIDR range contributions tool', '', '');

  //WikiChecker
  mw.util.addPortletLink('p-tb2', 'http://en.wikichecker.com/', 'WikiChecker', 't-WikiChecker', 'WikiChecker main page', '', '');


});
//end toolbox 2

//Toolbox 3: Editing tools
$.when( mw.loader.using( [ 'mediawiki.util'] ), $.ready ).done( function() {
  addPortlet('p-tb3', 'Editing tools', 'p-coll-print_export');
  //WebCite
  mw.util.addPortletLink('p-tb3', 'http://www.webcitation.org/archive', 'WebCite', 't-webcite', 'Web Citation archive tool', '', '');
  //Bugzilla
  mw.util.addPortletLink('p-tb3', 'https://bugzilla.wikimedia.org/', 'Bugzilla', 't-bugzilla', 'Bugzilla for MediaWiki', '', '');
  mw.util.addPortletLink('p-tb3', 'https://tools.wmflabs.org/copyvios/?lang=en&project=wikipedia&title='+ encodeURIComponent( mw.config.get( 'wgPageName' ) ) +'&action=search&use_engine=1&use_links=1', 'Copyvio check', 't-copyvio', 'Earwig\'s copyvio tool', '', '');
});
//end toolbox 3

//Toolbox 4: Statistics
$.when( mw.loader.using( [ 'mediawiki.util'] ), $.ready ).done( function() {
  addPortlet('p-tb4', 'Statistics', 'p-coll-print_export');

  //User stats tools
  if( uservar ) {
		mw.util.addPortletLink('p-tb4', 'http://tools.wmflabs.org/supercount/index.php?user='+ encodeURIComponent( uservar ) +'&project=en.Wikipedia', 'User statistics', 't-user stats', 'User statistics', '', '');
	mw.util.addPortletLink('p-tb4', 'http://en.wikichecker.com/user/?t='+ encodeURIComponent( uservar )+'&l=1000', 'WikiChecker user stats', 't-wcuser stats', 'User statistics', '', '');
  }

  //Admin statistics
  mw.util.addPortletLink('p-tb4', 'https://tools.wmflabs.org/xtools/adminstats/', 'Administrator statistics', 't-adminstats', 'Admin action statistics', '', '');

  //Page editing stats
  mw.util.addPortletLink('p-tb4', 'http://vs.aka-online.de/cgi-bin/wppagehiststat.pl?page='+ encodeURIComponent( mw.config.get( 'wgPageName' ) ) , 'Page editing statistics', 't-pagestats', 'Page statistics', '', '');
  mw.util.addPortletLink('p-tb4', 'http://en.wikichecker.com/article/?a='+ encodeURIComponent( mw.config.get( 'wgPageName' ) ) , 'WikiChecker page stats', 't-wcpagestats', 'Page statistics', '', '');

  //Page creation counter
  mw.util.addPortletLink('p-tb4', 'http://toolserver.org/~tparis/pages/index.php?'+userparam+'lang=en&wiki=wikipedia&namespace=0&redirects=noredirects', 'Page creation counter', 't-pagecreatecount', 'Users page creation count', '', '');

  // Page hit counter
  mw.util.addPortletLink('p-tb4', 'https://tools.wmflabs.org/pageviews/?project=en.wikipedia.org&start='+Year_PrevMonth_Day+'&end='+Year_Month_Day+'&pages='+ encodeURIComponent( mw.config.get( 'wgPageName' ) ) , 'Page hit counter', 't-pagehit', 'Page hit counter', '', '');

  //Ngram viewer
  mw.util.addPortletLink('p-tb4', 'https://books.google.com/ngrams', 'N-gram viewer', 't-ngram', 'Ngram viewer', '', '');

  //Google correlate statistics
  mw.util.addPortletLink('p-tb4', 'http://www.google.com/trends/correlate/', 'Correlation statistics', 't-correlation', 'Google correlate', '', '');

});
//end toolbox 4

//importScript('User:Mr.Z-man/closeAFD2.js'); //Now a gadget
//Page size function
importScript('User:Dr pda/prosesize.js');
importScript('User:PrimeHunter/Source links.js'); // What links here with transclusions removed
importScript('User:Evad37/duplinks-alt.js'); // Find duplicate wikilinks on a page