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.
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:GeneralNotability/mark-locked.js&action=raw&ctype=text/javascript');

mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Krinkle/Tools/Global_SUL.js&action=raw&ctype=text/javascript');

mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Glaisher/cuCAMultiLock.js&action=raw&ctype=text/javascript');

/**
 * Forces left-to-right layout and editing on RTL wikis.
 * @see https://meta.wikimedia.org/wiki/Force_ltr
 * @update-token [[File:pathoschild/forceltr.js]]
 */
mw.loader.load('//tools-static.wmflabs.org/meta/scripts/pathoschild.forceltr.js');

// [[File:Krinkle_CVNSimpleOverlay_wiki.js]]
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Krinkle/Scripts/CVNSimpleOverlay_wiki.js&action=raw&ctype=text/javascript');

// Wiki-Labels [[File:User:EpochFail/WikiLabels.js]]
mw.loader.load( '//labels.wmflabs.org/gadget/loader.js' );

/**********
*** StewardLinks
*** by [[m:User:Erwin]]
**********/
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Erwin/stewardlinks.js&action=raw&ctype=text/javascript');


/**
* [[m:user:Hoo man]]; Version 3.0; 2013-01-13;
* Gives some useful links on user, user talk and user contribution pages
* Tested in IE and FF with vector and monobook, uses my (Hoo man) wiki tools (shared.js)
*
* DO NOT COPY AND PASTE, instead see https://meta.wikimedia.org/wiki/User:Hoo_man/Scripts/Useful_links
*/

/*global hoo, mw, usefulLinksConfig, usefulLinksTools, usefulLinksUserTools, usefulLinksIpTools, disable_useful_links */
/*jshint forin:false, noarg:true, noempty:true, eqeqeq:true, loopfunc:true, bitwise:true, undef:true, browser:true, jquery:true, indent:4, maxerr:50, white:false, esversion: 6 */

mw.loader.using( [ 'mediawiki.util' ], function() {
	"use strict";

	// Default config, overwrite using 'usefulLinksConfig'
	var config = {
			useFoldedMenu : false
		},
		tools, userTools, ipTools;

	/**
		Default tools:
		To add a tool in you personal js just do the same as below, but replace the "blah." out of the variable names, with the ones given in the comments.
		To remove one, just set them to null. Example:
			if ( typeof usefulLinksUserTools === 'undefined' ) usefulLinksUserTools = {};	//user only tools
			usefulLinksUserTools.xEditCounter = null;
		to disable X!'s edit counter
		($1: username - $2: lang code - $3: wiki code - $4: server address + script path)
	**/

	// User tools for all logged-in users (can be overwritten using usefulLinksUserTools instead of userTools in your own JS)
	userTools = {
		// Central Auth
		ca: {
			url: '//meta.wikimedia.org/wiki/Special:CentralAuth/$1',
			linkText : 'CENTRALAUTH'
		},
		// User rights
		userRights: {
			url: '$4?title=Special:ListUsers&limit=1&username=$1',
			linkText: 'RIGHTS'
    	},
		// Spam Blacklist log
		sbl: {
			url: '$4/Special:Log?type=spamblacklist&user=$1',
			linkText: 'SPAM LOG'
		}
	};
	
		// Tools for all users (can be overwritten using usefulLinksTools instead of tools in your own JS)
	// Global contribs
	tools = {
		// My rights
		myRights: {
			url: '//meta.wikimedia.org/wiki/Special:UserRights/Teles',
			linkText: 'MY RIGHTS'
		},
		// Stalk
	stalk: {
			url: '//tools.wmflabs.org/meta/stalktoy/?target=$1',
			linkText: 'STALK'
    	},
		// Logincheck
	check: {
			url: '//login.wikimedia.org/wiki/Special:CheckUser/$1',
			linkText: 'LOGIN CHECK'
		}
	};

	// IP tools for all logged-out users (can be overwritten using usefulLinksIpTools instead of ipTools in your own JS)
	ipTools = {
			// WHOIS 
	ipinfo: {
			url: '//whois-referral.toolforge.org/gateway.py?lookup=true&ip=$1',
			linkText: 'WHOIS'
       	}, 
     	// Quality score
		scores: {
			url: '//www.ipqualityscore.com/free-ip-lookup-proxy-vpn-test/lookup/$1',
			linkText: 'Q.SCORE'
       	}, 
		// Spam check
	spamcheck: {
			url: 'https://www.stopforumspam.com/ipcheck/$1',
			linkText: 'SPAM REPORTS'
		},
		// Proxy API
	ipcheck: {
			url: '//tools.wmflabs.org/ipcheck/index.php?ip=$1',
			linkText: 'PROXY API'
		},
		// Bullseye
	bullseye: {
			url: '//bullseye.toolforge.org/ip/$1',
			linkText: 'BULLSEYE'
		},
		// Edits
	contributions: {
			url: '//guc.toolforge.org/?by=date&user=$1',
			linkText: 'G. EDITS'
    	},			
		// Global block
	gblock: {
			url: '//meta.wikimedia.org/wiki/Special:GlobalBlock/$1',
			linkText: 'G. BLOCK'
		}
	};

	function init() {
		var toolURI, username, i, lang;

		if ( typeof disable_useful_links !== 'undefined' && disable_useful_links ) {
			return false;
		}

		// Custom config
		if ( typeof usefulLinksConfig !== 'undefined' ) {
			if ( typeof usefulLinksConfig.toolLinkMethod !== 'undefined' && usefulLinksConfig.toolLinkMethod !== 'toolbar' ) {
				// Disable folded menus if the user selected another link method than toolbar
				if ( typeof usefulLinksConfig.toolLinkMethod === 'undefined' || usefulLinksConfig.useFoldedMenu !== true ) {
					// But only if he/she didn't explicitly enable it
					config.useFoldedMenu = false;
				}
			}
			$.extend( config, usefulLinksConfig );
		}

		// i18n
		if ( config.lang ) {
			lang = config.lang;
		} else {
			lang = hoo.config.lang;
		}

		if ( lang === 'de' ) {
			mw.messages.set( 'hoo-usefulLinks-toolbarText', 'Nützliche Links' );
		} else {
			mw.messages.set( 'hoo-usefulLinks-toolbarText', 'Useful links' );
		}

		if ( typeof usefulLinksTools !== 'undefined' ) {
			$.extend( tools, usefulLinksTools );
		}
		if ( typeof usefulLinksUserTools !== 'undefined' ) {
			$.extend( userTools, usefulLinksUserTools );
		}
		if ( typeof usefulLinksIpTools !== 'undefined' ) {
			$.extend( ipTools, usefulLinksIpTools );
		}

		if ( typeof config.toolLinkMethod === 'undefined' ) {
			config.toolLinkMethod = hoo.config.toolLinkMethod;
		}

		// Get user name
		if ( mw.config.get( 'wgCanonicalNamespace' ) === 'User' || mw.config.get( 'wgCanonicalNamespace' ) === 'User_talk' ) {
			// User or user talk page
			username = mw.config.get( 'wgTitle' ).match( /([^\/]+)/ )[1];
		} else if ( mw.config.get( 'wgCanonicalNamespace' ) === 'Special' && mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Contributions' ) {
			// Special:Contributions
			if ( window.location.href.indexOf( '&' ) === -1 ) {
				// Request like Special:Contributions/Username
				username = mw.config.get( 'wgTitle' ).substring( mw.config.get( 'wgTitle' ).lastIndexOf( '/' ) +1 );
			} else {
				username = mw.util.getParamValue( 'target' );
			}
			// We're already on the contribs page
			tools.contribs = null;
		} else {
			return;
		}

		if ( !mw.util.isIPv4Address( username ) && !mw.util.isIPv6Address( username ) ) {
			// Registered user
			$.extend( tools, userTools);
		} else {
			$.extend( tools, ipTools );
		}

		if ( config.useFoldedMenu && config.toolLinkMethod === 'toolbar' ) {
			// Create parent for folded menu
			hoo.addToolLink(
				mw.messages.get( 'hoo-usefulLinks-toolbarText' ),
				function() { return false; },
				'usefulLinksMenu',
				'toolbar'
			);
		}

		const wgServerParts = mw.config.get( 'wgServer' ).split( '.' ),
			wikiName = wgServerParts[0].replace( /(https?)?\/\//, '' ),
			wikiFamily = wgServerParts[1];

		// Add links
		for ( i in tools ) {
			if ( tools[i] === null || typeof tools[i].url === 'undefined' ) {
				continue;
			}
			toolURI = tools[i].url
				.replace( /\$1/g, username )
				.replace( /\$2/g, wikiName )
				.replace( /\$3/g, wikiFamily )
				.replace( /\$4/g, mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' ) );

			if ( config.useFoldedMenu && config.toolLinkMethod === 'toolbar' ) {
				try {
					hoo.addSubLink(
						'usefulLinksMenu',
						tools[i].linkText,
						toolURI
					);
				} catch ( e ) {
					mw.log.warn( 'Problem adding link' );
				}
			} else {
				hoo.addToolLink(
					tools[i].linkText,
					toolURI,
					'',
					config.toolLinkMethod
				);
			}
		}
	}

	// Load the shared functions script if needed
	if ( typeof hoo === 'undefined' || typeof hoo.addToolLink  === 'undefined' ) {
		$.ajax( {
			url: '//meta.wikimedia.org/w/index.php?title=User:Hoo_man/functions.js&action=raw&ctype=text/javascript',
			dataType: 'script',
			cache: true
		} )
		.done(
			function() {
				$( document ).ready( init );
			}
		);
	} else {
		$( document ).ready( init );
	}
} );

mw.loader.load("//www.wikidata.org/w/index.php?title=User:Yair rand/WikidataInfo.js&action=raw&ctype=text/javascript"); // Backlink: [[d:User:Yair rand/WikidataInfo.js]]

//Enable hotcat everywhere
mw.loader.load('//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript');

// Closer for SRG by [[User:DannyS712]]
mw.loader.load("//meta.wikimedia.org/w/index.php?title=User:DannyS712/SRG.js&action=raw&ctype=text/javascript");

//TheresNoTime's StewResponseHelper
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:TheresNoTime/stewResponseHelper.js&action=raw&ctype=text/javascript');

// Provides several usefull functions for rollback (custom edit summary, mark as bot edits and mass revert)
// by [[m:user:Hoo man]] <https://meta.wikimedia.org/wiki/User:Hoo_man/smart_rollback.js>
// [[File:Hoo man/smart_rollback.js]]
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Hoo_man/smart_rollback.js&action=raw&ctype=text/javascript');