MediaWiki:Monobook.js: Difference between revisions

From Halopedia, the Halo wiki

No edit summary
(swap deprecated .bind() to its non-deprecated modern equivalent, .on(), plus one spacing tweak)
Line 361: Line 361:
}
}
jQuery( '#' + menuId ).children().eq( 1 ).children().eq( 0 )
jQuery( '#' + menuId ).children().eq( 1 ).children().eq( 0 )
.bind( 'mouseover', MonobookSidebar.mouseover )
.on( 'mouseover', MonobookSidebar.mouseover )
.bind( 'mouseout', MonobookSidebar.mouseout );
.on( 'mouseout', MonobookSidebar.mouseout );
MonobookSidebar.loadedMenus.push( menuId );
MonobookSidebar.loadedMenus.push( menuId );
},
},
Line 405: Line 405:
// Replace encoded colons with normal colons -- added this. --Jack Phoenix
// Replace encoded colons with normal colons -- added this. --Jack Phoenix
article = article.replace( '%3A', ':' ); // added code ends here
article = article.replace( '%3A', ':' ); // added code ends here
a.setAttribute( 'href', mw.config.get('wgArticlePath').replace( '$1', article ) );
a.setAttribute( 'href', mw.config.get( 'wgArticlePath' ).replace( '$1', article ) );
}
}
a.appendChild( document.createTextNode( caption ) );
a.appendChild( document.createTextNode( caption ) );

Revision as of 15:51, January 12, 2021

/* Any JavaScript here will be loaded for users using the MonoBook skin */

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

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

wgSidebar['Games'] = [
	{'Category: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',
	]},
	{'Reclaimer Saga|Reclaimer Saga': [
		'Halo 4|Halo 4',
		'Halo 5: Guardians|Halo 5: Guardians',
		'Halo Infinite|Halo Infinite',
	]},
	{'Category:Games|Halo: Spartan series': [
		'Halo: Spartan Assault|Halo: Spartan Assault',
		'Halo: Spartan Strike|Halo: Spartan Strike',
	]},
	{'Category:Games|Halo Wars series': [
		'Halo Wars|Halo Wars',
		'Halo Wars 2|Halo Wars 2',
	]},
	{'Category:Games|Other games': [
		'Halo 3: ODST|Halo 3: ODST',
		'Halo: Reach|Halo: Reach',
		'Halo: Fireteam Raven|Halo: Fireteam Raven',
	]},
	{'Category:Games|Ports and expansions': [
		'Halo PC|Halo PC',
		'Halo Custom Edition',
		'Halo 2 Multiplayer Map Pack|Halo 2 Multiplayer Map Pack',
		'Halo 2 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:Deleted Material|Canceled projects': [
		'Halo: Chronicles|Halo: Chronicles',
		'Titan (canceled game)|Titan',
		'Haggar|Haggar',
		'Halo Online|Halo Online',
	]},
];

wgSidebar['Books & media'] = [
	{'Category:Books|Novels': [
		{'Forerunner Saga|Forerunner Trilogy': [
			'Halo: Cryptum|Halo: Cryptum',
			'Halo: Primordium|Halo: Primordium',
			'Halo: Silentium|Halo: Silentium',
		]},
		{'Kilo-Five Trilogy|Kilo-Five Trilogy': [
			'Halo: Glasslands|Halo: Glasslands',
			'Halo: The Thursday War|Halo: The Thursday War',
			'Halo: Mortal Dictata|Halo: 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:Books|Comics': [
		'Halo: Uprising|Uprising',
		'Halo: Helljumper|Helljumper',
		'Halo: Blood Line|Blood Line',
		'Halo: Fall of Reach|Fall of Reach',
		'Halo Wars: Genesis|Genesis',
		'Halo Graphic Novel|Graphic Novel',
		'Halo: Escalation|Escalation',
		'Halo: Initiation|Initiation',
		'Halo 3: The Cradle of Life|The Cradle of Life',
	]},
	{'Category:Film|Animation': [
		'Halo Legends|Halo Legends',
		'Halo: The Fall of Reach - The Animated Series|Halo: The Fall of Reach',
	]},
	{'Category:Film|Live action': [
		'Halo: Landfall|Halo: Landfall',
		'Remember Reach|Remember Reach',
		'Deliver Hope|Deliver Hope',
		'Birth of a Spartan|Birth of a Spartan',
		'The Life|The Life',
		'Halo (Film)|Halo movie',
		'Halo 4: Forward Unto Dawn|Halo 4: Forward Unto Dawn',
		'Halo: The Television Series|The Television Series',
		'Halo: Nightfall|Nightfall',
	]},
	{'Category:Books|Reference': [
		'Art of Halo|Art of Halo',
		'Art of Halo 3|Art of Halo 3',
		'Halo Encyclopedia|Halo Encyclopedia',
		'Halo: The Essential Visual Guide|The Essential Visual Guide',
		'Halo: The Great Journey: The Art of Building Worlds|The Art of Building Worlds',
		'Awakening: The Art of Halo 4|The Art of Halo 4',
		'Halo 4: The Essential Visual Guide',
		'The Art of Halo 5: Guardians',
		'Halo Mythos: A Guide to the Story of Halo|Halo Mythos',
	]},
	{'Category:Books|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',
	]},
];

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

wgSidebar['The universe'] = [
	{'Category:Characters|Game characters': [
		'John-117|John-117',
		'Cortana|Cortana',
		'Thel \'Vadam|Thel \'Vadamee',
		'Avery Johnson|Avery Johnson',
		'Prophet of Truth|Prophet of Truth',
		'Gravemind|Gravemind',
		'343 Guilty Spark|343 Guilty Spark',
		'James Cutter|James Cutter',
		'Serina|Serina',
		'John Forge|John Forge',
		'Ellen Anders|Ellen Anders',
		'Ripa \'Moramee|Ripa \'Moramee',
		'Prophet of Regret|Prophet of Regret',
		'Rookie|The Rookie',
		'Superintendent|Superintendent',
		'Buck\'s squad|Buck\'s squad',
		'NOBLE Team|Noble Team',
		'Librarian|Librarian',
		'Ur-Didact|Ur-Didact',
	]},
	{'Category:Characters|Book characters': [
		'Kurt Ambrose|Kurt Ambrose',
		'Rtas \'Vadum|Rtas \'Vadumee',
		'Catherine Halsey|Catherine Halsey',
		'James Ackerson|James Ackerson',
		'Adriana-111|Adriana-111',
		'Jai-006|Jai-006',
		'Mike-120|Mike-120',
		'Ignatio Delgado|Ignatio Delgado',
		'Connor Brien|Connor Brien',
		'Michael Baird|Michael Baird',
		'Gage Yevgenny|Gage Yevgenny',
		'Jonah|Jonah',
		'Roland (SPARTAN-III)|Roland',
		'Unidentified Sangheili Shipmaster (Righteous Vigilance)|Shipmaster (The Return)',
		'Preston Cole|Preston Cole',
		'IsoDidact|IsoDidact',
	]},
	{'Category:Characters|Comic characters': [
		'Ruwan Ackerson|Ruwan Ackerson',
		'Myras Tyla|Myras Tyla',
		'Team Black|Team Black',
		'686 Ebullient Prism|686 Ebullient Prism',
		'Thon \'Talamee|Thon \'Talamee',
		'Reff \'Talamee|Reff \'Talamee',
	]},
	'United Nations Space Command|UNSC',
	'Covenant|Covenant',
	'Forerunner|Forerunner',
	'Flood|Flood',
];

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

wgSidebar['Community'] = [
	{'Halopedia:Administrators|Administrators': [
		'User:BaconShelf|BaconShelf',
		'User:CIA391|CIA391',
		'User:Dab1001|Dab1001',
		'User:Dragonclaws|Dragonclaws',
		'User:Jack Phoenix|Jack Phoenix',
		'User:NightHammer|NightHammer',
		'User:Porplemontage|Porplemontage',
		'User:Rusty-112|Rusty-112',
		'User:Sith Venator|Sith Venator',
		'User:Tacitus|Tacitus',
	]},
	'Special:WikiForum|Halopedia forums',
	'Halopedia:Discord Server|Discord server',
	'Halopedia:Featured/Article|Featured articles',
	'Special:TopUsers|Distinguished users',
];

wgSidebar['Help'] = [
	{'Category:Halopedia Policy|Policies': [
		'Halopedia:General Disclaimer|General Disclaimer',
		'Halopedia:What Halopedia is not|What Halopedia is not',
		'Halopedia:Blocking Policy|Blocking Policy',
		'Halopedia:Bots|Bot Policy',
		'Halopedia:Canon Policy|Canon Policy',
		'Halopedia:Copyright|Copyright Policy',
		'Halopedia:Media Policy|Media Policy',
		'Halopedia:Layout Guide|Layout Guide',
		'Halopedia:Manual of Style|Manual of Style',
		'Halopedia:Notability Policy|Notability Policy',
		'Halopedia:Protected Page Policy|Protected Page Policy',
		'Halopedia:Signature Policy|Signature Policy',
		'Halopedia:Spoilers Policy|Spoilers Policy',
		'Halopedia:Voting Policy|Voting Policy',
	]},
	{'Help:Contents|Guidelines': [
		'Help:Signatures|Custom signatures',
		'Help:Disambiguation|Disambiguation',
		'Help:Editing|Editing',
		'Help:Images|Images',
		'Help:Level Walkthroughs|Level walkthroughs',
		'Help:Links|Links',
		'Help:References|References',
		'Help:Tables|Tables',
		'Help:Templates|Templates',
		'Help:Videos|Videos',
	]},
];

wgSidebar['Related sites'] = [
	{'Halopedia:Related Sites|Community': [
		'http://bungie.net|Bungie.net',
		'https://www.halowaypoint.com/en-us|Halo Waypoint',
		'http://halowars.com|Halo Wars',
		'http://halo.bungie.org|Halo.Bungie.Org',
		'http://blog.ascendantjustice.com|Ascendant Justice',
		'http://www.forgehub.com/|Forge Hub',
		'http://haloterms.bungie.org|Terminal Hub',
	]},
	{'Halopedia:Related Sites|Wikis': [
		'http://halofanon.wikia.com/|Halo Fanon',
		'http://unhalo.wikia.com/|Gruntipedia',
		'http://halomachinima.wikia.com/|Halo Machinima',
		'http://halomods.wikia.com/|Halo Mods',
		'http://wiki.halo.fr/index.php/Accueil|Halo.fr',
		'http://rvb.wikia.com/|Red vs. Blue',
		'http://bungie.wikia.com/|Bungiepedia',
	]},
	{'Halopedia:Project Userbox/Babel|International': [
		'http://de.halo.wikia.com/|Deutsch (German)',
		'http://el.halo.wikia.com/|Ελληνικά (Greek)',
		'http://it.halo.wikia.com/|Italiano (Italian)',
		'http://ko.halo.wikia.com/|(Korean)',
		'http://ja.halo.wikia.com/|日本語 (Japanese)',
		'http://pl.halo.wikia.com/|Polski (Polish)',
		'http://ru.halo.wikia.com/|Русские (Russian)',
		'http://es.halo.wikia.com/|Español (Spanish)',
	]},
];

/**
 * 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, '_' ); // removed encodeURIComponent(), it was messing things up --Jack Phoenix
		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, '_' ); // removed encodeURIComponent(), it was messing things up --Jack Phoenix
			// Replace encoded colons with normal colons -- added this. --Jack Phoenix
			article = article.replace( '%3A', ':' ); // added code ends here
			a.setAttribute( 'href', mw.config.get( 'wgArticlePath' ).replace( '$1', article ) );
		}
		a.appendChild( document.createTextNode( caption ) );
		return a;
	},
	getId: function( name ) {
		return 'n-' + encodeURIComponent( name.replace( MonobookSidebar.re_s, '-' ) ).replace( MonobookSidebar.re_p, '.' );
	}
};

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