Jump to content

User:DannyS712/GlobalUserDashboard.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)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// <nowiki>
/**
 * Quick script to create a global dashboard at Special:BlankPage/GlobalUserDashboard
 *
 * There will be a link to it on the side bar when you are looking at
 * Special:GlobalWatchlist, or when you are looking at your user page or
 * a subpage of that.
 *
 * If you don't want to use the same links as me (DannyS712), set the global
 * variable window.GlobalUserDashboardLinks to an array with what you want to
 * use, in the same format as GlobalUserDashboard.links below. Otherwise you
 * will see the links I want to use.
 *
 * @author DannyS712
 */
$(() => {
const GlobalUserDashboard = {};
window.GlobalUserDashboard = GlobalUserDashboard;

GlobalUserDashboard.config = {
	name: '[[User:DannyS712/GlobalUserDashboard.js]]',
	version: 1.0
};

GlobalUserDashboard.init = function () {
	window.document.title = 'GlobalUserDashboard';
	var $wrapper = $( '<div>' )
		.attr( 'id', 'globaluserdashboard-wrapper' )
		.css( 'column-count', 3 );
	
	$( '#firstHeading' ).remove();
	$( '#contentSub' ).remove();
	$( '#contentSub2' ).remove();
	$( '#mw-content-text' ).empty().append( $wrapper );
	
	if ( window.GlobalUserDashboardLinks ) {
		// Allow other users to reuse this script too - set this
		// in your common.js to whatever you want your link array to
		// be, in the same format as the default GlobalUserDashboard.links
		GlobalUserDashboard.links = window.GlobalUserDashboardLinks;
	}
	
	GlobalUserDashboard.links.forEach( function ( group ) {
		var $div = $( '<div>' );
		$div.css( 'break-inside', 'avoid' );
		$div.append(
			$( '<h3>' )
				.text( group.label )
		);
		var $ul = $( '<ul>' );
		group.links.forEach( function ( linkInfo ) {
			$ul.append(
				$( '<li>' ).append(
					$( '<a>' )
						.attr( 'target', '_blank' )
						.attr( 'href', ( group.linkPrefix || '' ) + linkInfo.link )
						.text( linkInfo.text )
				)
			);
		} );
		
		$div.append( $ul );
		$wrapper.append( $div );
	} );
};

// These are the links and groups that I (DannyS712) want to use - if someone else is using this
// script, you can override these by setting `window.GlobalUserDashboardLinks` to what you want
// to use, and that will overwrite these
GlobalUserDashboard.links = [
	{
		label: 'Global',
		linkPrefix: 'https://meta.wikimedia.org/wiki/',
		links: [
			{ text: 'GlobalWatchlist', link: 'Special:GlobalWatchlist' },
			{ text: 'CentralAuth', link: 'Special:CentralAuth/DannyS712' },
			{ text: 'Global sysops/Requests', link: 'Global_sysops/Requests' },
			{ text: 'Steward requests/Miscellaneous', link: 'Steward_requests/Miscellaneous' },
			{ text: 'Dashboard configuration', link: 'User:DannyS712/GlobalUserDashboard.js' },
		]
	},
	{
		label: 'VRT',
		links: [
			{ text: 'VRT-wiki watchlist', link: 'https://vrt-wiki.wikimedia.org/wiki/Special:Watchlist' },
			{ text: 'Ticket interface', link: 'https://ticket.wikimedia.org/' },
		]
	},
	{
		label: 'English Wikipedia',
		linkPrefix: 'https://en.wikipedia.org/wiki/',
		links: [
			{ text: 'Edit requests (bot report)', link: 'User:AnomieBOT/PERTableHeader' },
			{ text: 'Wikipedia:Requested moves', link: 'Wikipedia:Requested_moves' },
			{ text: 'Wikipedia:Requested moves/Technical requests', link: 'Wikipedia:Requested_moves/Technical_requests' },
			{ text: 'Special:PendingChanges', link: 'Special:PendingChanges' },
			{ text: 'Wikipedia:Edit filter/False positives/Reports', link: 'Wikipedia:Edit_filter/False_positives/Reports' },
		]
	},
	{
		label: 'Wikidata',
		linkPrefix: 'https://www.wikidata.org/wiki/',
		links: [
			{ text: 'Wikidata:Requests for deletions', link: 'Wikidata:Requests_for_deletions' },
			{ text: 'Wikidata:Administrators\' noticeboard', link: 'Wikidata:Administrators%27_noticeboard' },
			{ text: 'Wikidata:Bureaucrats\' noticeboard', link: 'Wikidata:Bureaucrats%27_noticeboard' },
			{ text: 'Wikidata:Requests for permissions/Other rights', link: 'Wikidata:Requests_for_permissions/Other_rights' },
			{ text: 'Wikidata:Property proposal/Overview', link: 'Wikidata:Property_proposal/Overview' },
			{ text: 'SortedPropertiesUpdater', link: 'Special:BlankPage/SortedPropertiesUpdater' },
		]
	},
	{
		label: 'Commons',
		links: [
			{ text: 'Category:Media requiring renaming', link: 'https://commons.wikimedia.org/wiki/Category:Media_requiring_renaming' },
		]
	},
	{
		label: 'Meta',
		linkPrefix: 'https://meta.wikimedia.org/wiki/',
		links: [
			{ text: 'Meta:Requests for help from a sysop or bureaucrat', link: 'Meta:Requests_for_help_from_a_sysop_or_bureaucrat' },
			{ text: 'Talk:Spam blacklist', link: 'Talk:Spam_blacklist' },
			{ text: 'Category:Deleteme', link: 'Category:Deleteme' },
			{ text: 'Category:Meta protected edit requests', link: 'Category:Meta_protected_edit_requests' },
		]
	},
	{
		label: 'MediaWiki',
		linkPrefix: 'https://www.mediawiki.org/wiki/',
		links: [
			{ text: 'Project:Requests for permissions', link: 'Project:Requests_for_permissions' },
			{ text: 'Project:Administrators\' noticeboard', link: 'Project:Administrators%27_noticeboard' },
			{ text: 'Category:Candidates for speedy deletion', link: 'Category:Candidates_for_speedy_deletion' },
			{ text: 'Category:Candidates for deletion', link: 'Category:Candidates_for_deletion' },
		]
	},
	{
		label: 'Simple English Wikipedia',
		linkPrefix: 'https://simple.wikipedia.org/wiki/',
		links: [
			{ text: 'Category:Quick deletion requests', link: 'Category:Quick_deletion_requests' },
			{ text: 'Permissions - Rollback', link: 'Wikipedia:Requests_for_permissions/Rollback' },
			{ text: 'Permissions - Patroller', link: 'Wikipedia:Requests_for_permissions/Patroller' },
			{ text: 'Vandalism in progress', link: 'Wikipedia:Vandalism_in_progress' },
		]
	},
	{
		label: 'English Wikiversity',
		linkPrefix: 'https://en.wikiversity.org/wiki/',
		links: [
			{ text: 'Category:Wikiversity deletion', link: 'Category:Wikiversity_deletion' },
			{ text: 'Wikiversity:Request custodian action', link: 'Wikiversity:Request_custodian_action' },
			{ text: 'Wikiversity:Colloquium', link: 'Wikiversity:Colloquium' },
		]
	},
	{
		label: 'English Wikiquote',
		linkPrefix: 'https://en.wikiquote.org/wiki/',
		links: [
			{ text: 'Category:Candidates for speedy deletion', link: 'Category:Candidates_for_speedy_deletion' },
			{ text: 'Wikiquote:Vandalism in progress', link: 'Wikiquote:Vandalism_in_progress' },
		]
	},
	{
		label: 'English Wikivoyage',
		linkPrefix: 'https://en.wikivoyage.org/wiki/',
		links: [
			{ text: 'Category:Speedy deletion candidates', link: 'Category:Speedy_deletion_candidates' },
			{ text: 'Wikivoyage:Vandalism in progress', link: 'Wikivoyage:Vandalism_in_progress' },
			{ text: 'Wikivoyage:Travellers\' pub', link: 'Wikivoyage:Travellers%27_pub' },
		]
	},
	{
		label: 'Wikimania Wiki',
		links: [
			{ text: 'Category:Candidates for speedy deletion', link: 'https://wikimania.wikimedia.org/wiki/Category:Candidates_for_speedy_deletion' },
		]
	},
	{
		label: 'Wikispecies',
		linkPrefix: 'https://species.wikimedia.org/wiki/',
		links: [
			{ text: 'Category:Candidates for speedy deletion', link: 'Category:Candidates_for_speedy_deletion' },
			{ text: 'Wikispecies:Administrators\' Noticeboard', link: 'Wikispecies:Administrators%27_Noticeboard' },
			{ text: 'Wikispecies:Translation Administrators\' Noticeboard', link: 'Wikispecies:Translation_Administrators%27_Noticeboard' },
		]
	},
	{
		label: 'Wikifunctions',
		linkPrefix: 'https://www.wikifunctions.org/wiki/',
		links: [
			{ text: 'Wikifunctions:Requests for deletions', link: 'Wikifunctions:Requests_for_deletions' },
			{ text: 'Wikifunctions:Report vandalism', link: 'Wikifunctions:Report_vandalism' },
			{ text: 'Wikifunctions:Requests for user groups', link: 'Wikifunctions:Requests_for_user_groups' }
		]
	},
	{
		label: 'Special:PageTranslation',
		links: [
			{ text: 'Wikidata', link: 'https://www.wikidata.org/wiki/Special:PageTranslation?autohide=1' },
			{ text: 'Species', link: 'https://species.wikimedia.org/wiki/Special:PageTranslation?autohide=1' },
			{ text: 'Commons', link: 'https://commons.wikimedia.org/wiki/Special:PageTranslation?autohide=1' },
			{ text: 'Meta', link: 'https://meta.wikimedia.org/wiki/Special:PageTranslation?autohide=1' },
			{ text: 'MediaWiki', link: 'https://www.mediawiki.org/wiki/Special:PageTranslation?autohide=1' },
			{ text: 'Outreach', link: 'https://outreach.wikimedia.org/wiki/Special:PageTranslation?autohide=1' },
			{ text: 'Wikimania', link: 'https://wikimania.wikimedia.org/wiki/Special:PageTranslation?autohide=1' },
			{ text: 'Beta wikiversity', link: 'https://beta.wikiversity.org/wiki/Special:PageTranslation?autohide=1' },
			{ text: 'Wikifunctions', link: 'https://www.wikifunctions.org/wiki/Special:PageTranslation?autohide=1' },
		]
	}
];

});

$(document).ready(() => {
	if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Blankpage' ) {
		const page = mw.config.get( 'wgTitle' ).split( '/' );
		if ( page[1] && page[1] === 'GlobalUserDashboard' ) {
			window.GlobalUserDashboard.init();
		}
	} else if (
		mw.config.get( 'wgCanonicalSpecialPageName' ) === 'GlobalWatchlist' ||
		(
			mw.config.get( 'wgNamespaceNumber') === 2
			&& mw.config.get( 'wgRelevantUserName' ) === mw.config.get( 'wgUserName' )
		)
	) {
		mw.loader.using(
			'mediawiki.util',
			function () {
				mw.util.addPortletLink( 'p-tb', '/wiki/Special:BlankPage/GlobalUserDashboard', 'Global dashboard' );	
			}
		);
	}
});

// </nowiki>