MediaWiki:Monobook.js

Revision as of 08:55, July 30, 2021 by Porplemontage (talk | contribs)

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.
/* Any JavaScript here will be loaded for users using the MonoBook skin */

/* MONOBOOK SIDEBAR v2.3 */
window.wgSidebar = ( window.wgSidebar || {} );

wgSidebar['Navigation'] = [
	'Special:RecentChanges|Recent changes',
	'Special:Random|Random page',
];

wgSidebar['Games'] = [
	{'Category:Video games|Original trilogy': [
		'Halo: Combat Evolved|Halo: Combat Evolved',
		'Halo: Combat Evolved Anniversary|Halo: Combat Evolved Anniversary',
		'Halo 2|Halo 2',
		'Halo 2: Anniversary|Halo 2: Anniversary',
		'Halo 3|Halo 3',
	]},
	{'Category:Video games|Mainline 343i games': [
		'Halo 4|Halo 4',
		'Halo 5: Guardians|Halo 5: Guardians',
		'Halo Infinite|Halo Infinite',
	]},
	{'Category:Video games|Halo: Spartan series': [
		'Halo: Spartan Assault|Halo: Spartan Assault',
		'Halo: Spartan Strike|Halo: Spartan Strike',
	]},
	{'Category:Video games|Halo Wars series': [
		'Halo Wars|Halo Wars',
		'Halo Wars 2|Halo Wars 2',
	]},
	{'Category:Video games|Other games': [
		'Halo 3: ODST|Halo 3: ODST',
		'Halo: Reach|Halo: Reach',
		'Halo: Fireteam Raven|Halo: Fireteam Raven',
	]},
	{'Category:Video games|Ports and expansions': [
		'Halo: Combat Evolved (PC port)|Halo PC',
		'Halo Custom Edition',
		'Halo 2 Multiplayer Map Pack|Halo 2 Multiplayer Map Pack',
		'Halo 2 (Windows Vista)|Halo 2 Vista',
		'Halo 3 Mythic|Halo 3 Mythic',
		'Halo: The Master Chief Collection|The Master Chief Collection',
		'Halo 5: Forge|Halo 5: Forge',
	]},
	{'Category:Applications|Applications': [
		'Halo Waypoint|Halo Waypoint',
		'Halo 4: King of the Hill Fueled by Mountain Dew|Halo 4: King of the Hill',
		'Halo Channel|Halo Channel',
		'Halo (Windows 10 app)|Halo App',
		'Halo Stickers|Halo Stickers',
		'Halo Recruit|Halo Recruit',
	]},
	{'Category:Tabletop games|Table top': [
		{'Category:Tabletop games|Spartan Games': [
			'Halo: Fleet Battles|Halo: Fleet Battles',
			'Halo: Ground Command|Halo: Ground Command',
		]},
		'Halo 4: King of the Hill Fueled by Mountain Dew|Halo 4: King of the Hill',
		'Halo Interactive Strategy Game|Halo Interactive Strategy Game',
		'Risk|Halo Risk',
		'Monopoly: Halo Collector\'s Edition|Halo Monopoly',
	]},
	{'Category:Deleted material|Canceled projects': [
		'Halo: Chronicles|Halo: Chronicles',
		'Titan (canceled game)|Titan',
		'Haggar|Haggar',
		'Halo Online|Halo Online',
	]},
];

wgSidebar['Other media'] = [
	{'Category:Novels|Novels': [
		{'The Forerunner Saga|The Forerunner Saga': [
			'Halo: Cryptum|Cryptum',
			'Halo: Primordium|Primordium',
			'Halo: Silentium|Silentium',
		]},
		{'Kilo-Five Trilogy|Kilo-Five Trilogy': [
			'Halo: Glasslands|Glasslands',
			'Halo: The Thursday War|The Thursday War',
			'Halo: Mortal Dictata|Mortal Dictata',
		]},
		{'A Master Chief Story|A Master Chief Story': [
			'Halo: Silent Storm|Silent Storm',
			'Halo: Oblivion|Oblivion',
			'Halo: Shadows of Reach|Shadows of Reach',
		]},
		{'Battle Born: A Halo Young Adult Novel Series|Battle Born': [
			'Halo: Battle Born|Battle Born',
			'Halo: Meridian Divide|Meridian Divide',
		]},
		'Halo: The Fall of Reach|The Fall of Reach',
		'Halo: The Flood|The Flood',
		'Halo: First Strike|First Strike',
		'Halo: Ghosts of Onyx|Ghosts of Onyx',
		'Halo: Contact Harvest|Contact Harvest',
		'Halo: The Cole Protocol|The Cole Protocol',
		'Halo: Evolutions|Evolutions',
		'Halo: Broken Circle|Broken Circle',
		'Halo: New Blood|New Blood',
		'Halo: Hunters in the Dark|Hunters in the Dark',
		'Halo: Saint\'s Testimony|Saint\'s Testimony',
		'Halo: Last Light|Last Light',
		'Halo: Shadow of Intent|Shadow of Intent',
		'Halo: Fractures|Fractures',
		'Halo: Smoke and Shadow|Smoke and Shadow',
		'Halo: Envoy|Envoy',
		'Halo: Retribution|Retribution',
		'Halo: Legacy of Onyx|Legacy of Onyx',
		'Halo: Bad Blood|Bad Blood',
		'Halo: Renegades|Renegades',
	]},
	{'Category:Comics|Comics': [
		'Halo Graphic Novel|Graphic Novel',
		'Halo 3: The Cradle of Life|The Cradle of Life',
		'Halo: Uprising|Uprising',
		'Halo: Helljumper|Helljumper',
		'Halo: Blood Line|Blood Line',
		'Halo: Fall of Reach|Fall of Reach',
		'Halo Wars: Genesis|Genesis',
		'Halo: Initiation|Initiation',
		'Halo: Escalation|Escalation',
		'Halo: Tales from Slipspace|Tales from Slipspace',
		'Halo: Rise of Atriox|Rise of Atriox',
		'Halo: Collateral Damage|Collateral Damage',
		'Halo: Lone Wolf|Lone Wolf',
	]},
	{'Category:Art books|Art books': [
		'The Art of Halo: Creating a Virtual World|The Art of Halo',
		'The Art of Halo 3|The Art of Halo 3',
		'Halo: The Great Journey - The Art of Building Worlds|Halo: The Great Journey',
		'Awakening: The Art of Halo 4|The Art of Halo 4',
		'The Art of Halo 5: Guardians|The Art of Halo 5: Guardians',
		'The Art of Halo Infinite|The Art of Halo Infinite',
	]},
	{'Category:Reference books|Reference': [
		'Halo Encyclopedia: The Definitive Guide to the Halo Universe|Halo Encyclopedia  ',
		'Halo: The Essential Visual Guide|Halo: The Essential Visual Guide',
		'Halo 4: The Essential Visual Guide|Halo 4: The Essential Visual Guide',
		'Halo Mythos: A Guide to the Story of Halo‎|Halo Mythos',
		'Halo: Warfleet – An Illustrated Guide to the Spacecraft of Halo|Halo: Warfleet',
		'Halo: Official Spartan Field Manual|Halo: Official Spartan Field Manual',
	]},
	{'Category:Strategy guides|Strategy guides': [
		'Halo: Combat Evolved: Sybex Official Strategies & Secrets|Halo: Combat Evolved',
		'Halo 2: The Official Strategy Guide|Halo 2',
		'Halo 3: The Official Strategy Guide|Halo 3',
		'Halo Wars: Official Strategy Guide|Halo Wars',
		'Halo 3: ODST Official Strategy Guide|Halo 3: ODST',
		'Halo: Reach Official Strategy Guide|Halo: Reach',
		'Halo 4: Official Game Guide|Halo 4',
		'Halo 5: Guardians Official Game Guide|Halo 5: Guardians',
	]},
	{'Category:Animated films|Animation': [
		'Halo Legends|Halo Legends',
		'Halo: The Fall of Reach - The Animated Series|Halo: The Fall of Reach',
	]},
	{'Category:Live action|Live action': [
		'Halo: Landfall|Landfall',
		'The Life|The Life',
		'Birth of a Spartan|Birth of a Spartan',
		'Remember Reach|Remember Reach',
		'Halo 4: Forward Unto Dawn|Halo 4: Forward Unto Dawn',
		'Halo film|Halo movie',
		'Halo: Nightfall|Nightfall',
		'Halo: The Television Series|The Television Series',
	]},
];

wgSidebar['Gameplay'] = [
	'Halo Waypoint|Waypoint',
	'Equipment|Equipment',
	'Weapons|Weapons',
	'Category:Vehicles|Vehicles',
	'Armor customizations|Armor customizations',
	'Category:Levels|Walkthroughs',
	'Multiplayer|Multiplayer',
];

wgSidebar['The universe'] = [
	{'Category:Characters|Characters': [
		{'Blue Team': [
			'John-117',
			'Linda-058',
			'Kelly-087',
			'Frederic-104',
		]},
		{'Red Team': [
			'Jerome-092',
			'Douglas-042',
			'Alice-130',
		]},
		{'Alpha-Nine': [
			'Rookie',
			'Michael Crespo|Michael "Mickey" Crespo',
			'Taylor Miles|Taylor "Dutch" Miles',
			'Kojo Agu|Kojo "Romeo" Agu',
		]},
		{'NOBLE Team': [
			'SPARTAN-B312',
			'Carter-A259',
			'Jun-A266',
			'Emile-A239',
			'Kat-B320',
			'Jorge-052',
		]},
		{'Fireteam Osiris': [
			'Jameson Locke',
			'Edward Buck',
			'Olympia Vale',
			'Holly Tanaka',
		]},
		'Catherine Halsey',
		'Jacob Keyes',
		'Cortana',
		'Avery Johnson',
		'343 Guilty Spark',
		'Thel \'Vadam',
		'Terrence Hood',
		'Miranda Keyes',
		'Rtas \'Vadum',
		'Gravemind',
		'James Cutter',
		'John Forge',
		'Ellen Anders',
		'Librarian',
		'IsoDidact',
		'Ur-Didact',
		'Jul \'Mdama',
		'Thomas Lasky',
		'Sarah Palmer',
		'Roland',
		'Atriox',
		'Isabel',
	]},
	{'Category:Places|Locations': [
		'Earth',
		'Reach',
		'Harvest',
		'Sanghelios',
		'High Charity',
		'Mombasa',
		'Installation 04|Alpha Halo',
		'Installation 05|Delta Halo',
		'Installation 00|The Ark',
		'Requiem',
		'Maethrillian',
	]},
	{'Category:Sapient species|Species': [
		'Human',
		'San\'Shyuum',
		'Sangheili',
		'Kig-Yar',
		'Jiralhanae',
		'Huragok',
		'Lekgolo',
		'Yanme\'e',
		'Unggoy',
		'Forerunner',
		'Flood',
	]},
	{'Category:Factions|Factions': [
		{'United Nations Space Command|United Nations Space Command': [
			'UNSC Army',
			'UNSC Air Force',
			'UNSC Marine Corps',
			'Orbital Drop Shock Troopers',
			'UNSC Navy',
			'Office of Naval Intelligence',
			'Spartan|SPARTAN programs',
		]},
		{'Covenant|Covenant': [
			'Covenant military',
			'Covenant Honor Guard',
			'High Council',
		]},
		{'Insurrectionist|Insurrectionists': [
			'United Rebel Front',
			'New Colonial Alliance',
		]},
		'Unified Earth Government',
		'Swords of Sanghelios',
		'Jul \'Mdama\'s Covenant',
		'Ecumene|Forerunner ecumene',
		'Ancient humanity',
		'Precursor|Precursors',
	]},
	{'Category:Technology|Technology': [
		'Technological Achievement Tiers',
		'Active camouflage',
		'Artificial intelligence',
		'Biological augmentation',
		'Cryonics',
		'Energy shielding',
		'Holography',
		'Slipstream space',
		'Powered exoskeleton',
		'Category:Propulsion|Propulsion',
		'Category:Communications technology|Communications',
		'Category:Medicine|Medicine',
		'Category:Vehicles|Vehicles',
		'Category:Weapons|Weapons',
	]},
	{'Category:Ships|Ships': [
		'UNSC Pillar of Autumn',
		'Truth and Reconciliation',
		'UNSC In Amber Clad',
		'UNSC Forward Unto Dawn',
		'Shadow of Intent',
		'UNSC Spirit of Fire',
		'UNSC Infinity',
		'Mantle\'s Approach',
		'Enduring Conviction',
	]},
	{'Category:Society and culture|Society and culture': [
		'Category:Languages|Languages',
		'Religion',
		'Mantle',
		'List of food and drinks|Food and drink',
		'Category:Terms and phrases|Terms and phrases',
	]},
	{'Halopedia:Projects/Timeline/Eras|Timeline': [
		'Human-Forerunner wars',
		'Forerunner-Flood war',
		'Great Purification|The Halos\' firing',
		'War of Beginnings',
		'Interplanetary War',
		'Insurrection',
		'Human-Covenant War',
		'Post-Covenant War conflicts',
	]},
];

wgSidebar['Halopedia Archive'] = [
	'Archive:Text archives|Text archives',
	'Archive:Website archives|Website archives',
	'https://www.youtube.com/channel/UCMeCf0KFYzOHw2lp2GRtgWA|Video archives',
];

wgSidebar['Halopedia'] = [
	{'Halopedia:Social media|Social media': [
		'https://twitter.com/Halopedia|Twitter',
		'https://www.facebook.com/HalopediaWiki|Facebook',
	]},
	'Halopedia:Discord server|Discord server',
	'Special:WikiForum|Halopedia forums',
	'News:Main|Halo News Network',
	'Halopedia:Staff|Halopedia staff',
];

wgSidebar['Wiki help'] = [
	{'Category:Policies|Policies': [
		'Halopedia:General disclaimer|General disclaimer',
		'Halopedia:What Halopedia is|What Halopedia is',
		'Halopedia:Manual of Style|Manual of Style',
		'Halopedia:Blocking policy|Blocking policy',
		'Halopedia:Canon policy|Canon policy',
		'Halopedia:Layout guide|Layout guide',
		'Halopedia:Media policy|Media policy',
		'Halopedia:Notability policy|Notability policy',
		'Halopedia:Personal Image policy|Personal Image policy',
		'Halopedia:Protected Page policy|Protected Page policy',
		'Halopedia:Signature policy|Signature policy',
		'Halopedia:Spoiler policy|Spoiler policy',
		'Halopedia:Voting policy|Voting policy',
	]},
	{'Category:Help|Guidelines': [
		'Help:Disambiguation|Disambiguation',
		'Help:Editing|Editing',
		'Help:Images|Images',
		'Help:Links|Links',
		'Help:References|References',
		'Help:Signatures|Signatures',
		'Help:Tables|Tables',
		'Help:Templates|Templates',
		'Help:Videos|Videos',
		'Help:Walkthroughs|Walkthroughs',
	]},
	'Halopedia:Projects/Improvement|Article improvement',
	'Halopedia:Featured/Article|Featured articles',
];

wgSidebar['Related sites'] = [
	{'Halopedia:Related sites and affiliates|Affiliates': [
		'destinypedia:|Destinypedia',
		'https://www.youtube.com/user/HaloCanon|Halo Canon',
		'https://niwanetwork.org|NIWA',
	]},
	{'Halopedia:Related sites and affiliates|Community': [
		'https://halo.bungie.org|halo.bungie.org',
		'https://www.readyuplive.com|Ready Up Live',
		'http://www.forwarduntodawn.com|Forward Unto Dawn',
		'https://www.reddit.com/r/halo|/r/halo',
		'https://www.reddit.com/r/HaloStory|/r/HaloStory',
		'https://www.forgehub.com|ForgeHub',
		'http://haloterms.bungie.org|Terminal Hub',
		'https://roosterteeth.com|Rooster Teeth',
		'https://405th.com|405th',
	]},
	{'Halopedia:Related sites and affiliates|Podcasts': [
		'https://www.podtacular.com|Podtacular',
		'https://www.halopodcastevolved.com/podcast-evolved|Podcast Evolved',
	]},
	{'Halopedia:Related sites and affiliates|Wikis': [
		{'Halopedia:Related sites and affiliates|International': [
			'de:|Deutsch (German)',
			'el:|Ελληνικά (Greek)',
			'it:|Italiano (Italian)',
			'ja:|日本語 (Japanese)',
			'ko:|한국어 (Korean)',
			'pl:|Polski (Polish)',
			'ru:|Русские (Russian)',
			'es:|Español (Spanish)',
		]},
		'halofanon:|Halo Fanon',
		'unhalo:|Gruntipedia',
		'halomachinima:|Halo Machinima',
		'wikihalo:|Halo.fr',
		'rvb:|Red vs. Blue',
	]},
];

/**
 * MonobookSidebar: Sets sidebar submenus for elements of MonoBook, adding special
 * classes to pass the pointer over to allow the effect on all browsers.
 *
 * Date: 15 October 2010
 * Copyright © 2010 Jesús Martínez Novo ([[User:Ciencia Al Poder]])
 *
 * This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version
 */
MonobookSidebar = {
	re_s: / /g,
	re_p: /%/g,
	loadedMenus: [],
	init: function() {
		if ( !window.wgSidebar ) {
			return;
		}
		for ( var menu in wgSidebar ) {
			var item = document.getElementById( MonobookSidebar.getId( menu ) );
			if ( !item ) {
				continue;
			}
			var menuId = jQuery( item ).parents().get( 2 ).id;
			// Check it's a valid portlet item
			if ( !menuId || menuId === '' ) {
				continue;
			}
			// Generate menu hierarchy
			MonobookSidebar.buildSubmenu( item, wgSidebar[menu] );
			// Set events
			MonobookSidebar.setEvents( menuId );
		}
	},
	buildSubmenu: function( el, arr ) {
		var ul = document.createElement( 'ul' );
		ul.className = 'sub-menu';
		for ( var i = 0; i < arr.length; i++ ) {
			var a;
			var li = document.createElement( 'li' );
			if ( typeof arr[i] == 'string' ) {
				a = MonobookSidebar.linkFromText( arr[i] );
				li.appendChild( a );
			} else {
				for ( var menukey in arr[i] ) {
					a = MonobookSidebar.linkFromText( menukey );
					li.appendChild( a );
					MonobookSidebar.buildSubmenu( li, arr[i][menukey] );
				}
			}
			ul.appendChild( li );
		}
		el.appendChild( ul );
		el.className = 'with-sub-menu';
		var em = document.createElement( 'em' );
		em.appendChild( document.createTextNode( '\u203A' ) );
		el.firstChild.appendChild( em );
	},
	setEvents: function( menuId ) {
		for ( var i = 0; i < MonobookSidebar.loadedMenus; i++ ) {
			if ( MonobookSidebar.loadedMenus[i] == menuId ) {
				return;
			}
		}
		jQuery( '#' + menuId ).children().eq( 1 ).children().eq( 0 )
			.on( 'mouseover', MonobookSidebar.mouseover )
			.on( 'mouseout', MonobookSidebar.mouseout );
		MonobookSidebar.loadedMenus.push( menuId );
	},
	mouseover: function( e ) {
		var target = e.target;
		while ( target.tagName.toLowerCase() != 'div' ) {
			if ( target.tagName.toLowerCase() == 'a' ) {
				target = target.parentNode;
			}
			if ( target.tagName.toLowerCase() == 'li' ) {
				jQuery( target ).addClass( 'hover' );
			}
			target = target.parentNode;
		}
	},
	mouseout: function( e ) {
		var target = e.target;
		while ( target.tagName.toLowerCase() != 'div' ) {
			if ( target.tagName.toLowerCase() == 'a' ) {
				target = target.parentNode;
			}
			if ( target.tagName.toLowerCase() == 'li' ) {
				jQuery( target ).removeClass( 'hover' );
			}
			target = target.parentNode;
		}
	},
	linkFromText: function( txt ) {
		var article = '', caption = '', sepPos = txt.indexOf( '|' );
		if ( sepPos > 0 ) {
			article = txt.substr( 0, sepPos );
			caption = txt.substr( sepPos + 1 );
		} else {
			article = caption = txt;
		}
		article = article.replace( MonobookSidebar.re_s, '_' );
		var a = document.createElement( 'a' );
		if ( article.length > 4 && article.substr( 0, 4 ) == 'http' ) {
			a.setAttribute( 'href', article );
		} else {
			article = article.replace( MonobookSidebar.re_s, '_' );
			// Replace encoded colons with normal colons
			article = article.replace( '%3A', ':' );
			a.setAttribute( 'href', mw.config.get( 'wgArticlePath' ).replace( '$1', article ) );
		}
		a.appendChild( document.createTextNode( caption ) );
		return a;
	},
	getId: function( name ) {
		return 'n-' + name.replace( MonobookSidebar.re_s, '-' ).replace( MonobookSidebar.re_p, '.' );
	}
};

/* Calling this code to initialize */
$( MonobookSidebar.init );