MediaWiki:Monobook.js: Difference between revisions

From the Kingdom Hearts Wiki, the Kingdom Hearts encyclopedia
Jump to navigationJump to search
No edit summary
No edit summary
Line 8: Line 8:
'Help:Contents|Help pages',
'Help:Contents|Help pages',
'KHWiki:Manual of Style|Manual of Style',
'KHWiki:Manual of Style|Manual of Style',
'Category:Policies|Policies',
'KHWiki:Sandbox|Sandbox',
'Category:Stubs|Stubs',
'Category:Stubs|Stubs',
'KHWiki:Sandbox|Sandbox',
];
];



Revision as of 17:41, 31 July 2021

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

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

wgSidebar['Help'] = [
	'KHWiki:About|About',
	'Help:Contents|Help pages',
	'KHWiki:Manual of Style|Manual of Style',
	'Category:Policies|Policies',
	'KHWiki:Sandbox|Sandbox',
	'Category:Stubs|Stubs',
];

wgSidebar['Games'] = [
	'Kingdom Hearts (game)|Kingdom Hearts',
	'Kingdom Hearts Chain of Memories|Chain of Memories',
	'Kingdom Hearts II|Kingdom Hearts II',
	'Kingdom Hearts 358/2 Days|358/2 Days',
	'Kingdom Hearts Birth by Sleep|Birth by Sleep',
	'Kingdom Hearts coded|coded',
	'Kingdom Hearts 3D: Dream Drop Distance|Dream Drop Distance',
        'Kingdom Hearts χ|χ[chi]',
        'Kingdom Hearts 0.2 Birth by Sleep -A fragmentary passage-|Kingdom Hearts 0.2',
	'Kingdom Hearts III|Kingdom Hearts III',
        'Kingdom Hearts Dark Road|Dark Road',
        'Kingdom Hearts Melody of Memory|Melody of Memory',
	{'Category:Games|Other titles': [
		'Kingdom Hearts Final Mix|Kingdom Hearts Final Mix',
		'Kingdom Hearts Re:Chain of Memories|Re:Chain of Memories',
		'Kingdom Hearts II Final Mix|Kingdom Hearts II Final Mix',
		'Kingdom Hearts Birth by Sleep Final Mix|Birth by Sleep Final Mix',
		'Kingdom Hearts Re:coded|Re:coded',
                'Kingdom Hearts HD 1.5 ReMIX|HD 1.5 ReMIX',
                'Kingdom Hearts HD 2.5 ReMIX|HD 2.5 ReMIX',
                'Kingdom Hearts Union χ|Union χ[Cross]',
                'Kingdom Hearts HD 2.8 Final Chapter Prologue|HD 2.8 Final Chapter Prologue',
                'Kingdom Hearts III Re Mind|Kingdom Hearts III Re Mind',
		'Kingdom Hearts Mobile|Mobile',
	]},
];

wgSidebar['The universe'] = [
	{'Category:Characters|Protagonists': [
		'Sora|Sora',
		'Riku|Riku',
		'Kairi|Kairi',
		'Mickey Mouse|Mickey Mouse',
		'Donald Duck|Donald Duck',
		'Goofy|Goofy',
		'Naminé|Naminé',
		'Roxas|Roxas',
		'Xion|Xion',
		'Terra|Terra',
		'Ventus|Ventus',
		'Aqua|Aqua',
		'Lea|Lea',
	]},
	{'Category:Antagonists|Antagonists': [
		'Xehanort|Xehanort',
		'Young Xehanort|Young Xehanort',
		'Vanitas|Vanitas',
		'Ansem, Seeker of Darkness|Ansem',
		'Organization XIII|Organization XIII',
		'Real Organization XIII|Real Organization XIII',
		'Maleficent|Maleficent',
		'Pete|Pete',
		'Villains|Villains',
	]},
	'Heartless|Heartless',
	'Nobody|Nobodies',
	'Unversed|Unversed',
	'Dream Eater|Dream Eaters',
	{'Category:Worlds|Worlds introduced in...': [
		{'Category:Kingdom Hearts worlds|Kingdom Hearts': [
			'Dive to the Heart|Dive to the Heart',
			'Destiny Islands|Destiny Islands',
			'Disney Castle|Disney Castle',
			'Traverse Town|Traverse Town',
			'Wonderland|Wonderland',
			'Olympus Coliseum|Olympus Coliseum',
			'Deep Jungle|Deep Jungle',
			'Agrabah|Agrabah',
			'Halloween Town|Halloween Town',
			'Monstro|Monstro',
			'Atlantica|Atlantica',
			'Neverland|Neverland',
			'Hollow Bastion|Hollow Bastion',
			'100 Acre Wood|100 Acre Wood',
			'End of the World|End of the World',
			'Kingdom Hearts|Kingdom Hearts',
			'Realm of Darkness|Realm of Darkness',
		]},
		{'Category:Kingdom Hearts: Chain of Memories worlds|Chain of Memories': [
			'Castle Oblivion|Castle Oblivion',
			'Twilight Town|Twilight Town',
		]},
		{'Category:Kingdom Hearts II worlds|Kingdom Hearts II': [
			'Mysterious Tower|Mysterious Tower',
			'Radiant Garden|Radiant Garden',
			'The Land of Dragons|The Land of Dragons',
			'Beast’s Castle|Beast’s Castle',
			'Timeless River|Timeless River',
			'Port Royal|Port Royal',
			'Pride Lands|Pride Lands',
			'Space Paranoids|Space Paranoids',
			'The World That Never Was|The World That Never Was',
			'Keyblade Graveyard|Keyblade Graveyard',
		]},
		{'Category:Kingdom Hearts Birth by Sleep worlds|Birth by Sleep': [
			'Land of Departure|Land of Departure',
			'Dwarf Woodlands|Dwarf Woodlands',
			'Enchanted Dominion|Enchanted Dominion',
			'Castle of Dreams|Castle of Dreams',
			'Mirage Arena|Mirage Arena',
			'Disney Town|Disney Town',
			'Deep Space|Deep Space',
		]},
		{'Category:Kingdom Hearts coded worlds|coded': [
			'Datascape|Datascape',
		]},
                {'Category:Kingdom Hearts 3D: Dream Drop Distance worlds|Dream Drop Distance': [
			'La Cité des Cloches|La Cité des Cloches',
			'Prankster\'s Paradise|Prankster\'s Paradise',
			'The Grid|The Grid',
			'Country of the Musketeers|Country of the Musketeers',
			'Symphony of Sorcery|Symphony of Sorcery',
		]},
                {'Category:Kingdom Hearts χ worlds|Kingdom Hearts χ': [
			'Daybreak Town|Daybreak Town',
		]},
                {'Category:Kingdom Hearts Union χ worlds|Kingdom Hearts Union χ': [
			'Game Central Station|Game Central Station',
			'Niceland|Niceland',
			'Cy-Bug Sector|Cy-Bug Sector',
			'Candy Kingdom|Candy Kingdom',
		]},
                {'Category:Kingdom Hearts III worlds|Kingdom Hearts III': [
			'Olympus|Olympus',
			'Toy Box|Toy Box',
			'Kingdom of Corona|Kingdom of Corona',
			'Monstropolis|Monstropolis',
			'Arendelle|Arendelle',
			'The Caribbean|The Caribbean',
			'San Fransokyo|San Fransokyo',
			'The Final World|The Final World',
			'Secret Forest|Secret Forest',
			'Shibuya|Shibuya',
		]},

	]},
];

wgSidebar['Game elements'] = [
	'Category:Items|Items',
	'Weapons',
	'Magic',
	'Summon|Summons',
	'Ability|Abilities',
	'Drive Form|Drive Forms',
	'Cards',
	'Gummi Ship',
	'Mini-games',
];

wgSidebar['Literature & music'] = [
	'Kingdom Hearts series (manga)|Manga',
	'Kingdom Hearts novels|Novels',
	'Kingdom Hearts Another Report|Another Report',
	'Kingdom Hearts Ultimania|Ultimania',
	{'Category:Strategy guides|Strategy guides': [
		'Kingdom Hearts Official Strategy Guide|Kingdom Hearts',
		'Kingdom Hearts Chain of Memories Official Strategy Guide|Chain of Memories',
		'Kingdom Hearts II Official Strategy Guide|Kingdom Hearts II',
		'Kingdom Hearts 358/2 Days Signature Series Strategy Guide|358/2 Days',
		'Kingdom Hearts Birth by Sleep Signature Series Strategy Guide|Birth by Sleep',
                'Kingdom Hearts 3D: Dream Drop Distance Signature Series Guide|Dream Drop Distance',
                'Kingdom Hearts HD 1.5 ReMIX Game Guide|HD 1.5 ReMIX',
	]},
	{'Category:Music|Music': [
		{'Category:Soundtracks|Soundtracks': [
			'Kingdom Hearts Original Soundtrack',
			'Kingdom Hearts II Original Soundtrack',
			'Kingdom Hearts Original Soundtrack Complete',
			'Kingdom Hearts Birth by Sleep & 358/2 Days Original Soundtrack',
			'Kingdom Hearts 3D: Dream Drop Distance Original Soundtrack',
			'Kingdom Hearts HD 1.5 ReMIX Original Soundtrack',
			'Kingdom Hearts HD 2.5 ReMIX Original Soundtrack',
			'Kingdom Hearts - III, II.8, Unchained χ & Union χ [Cross] - Original Soundtrack',
		]},
		{'Category:Compilation albums|Compilations': [
			'Piano Collections Kingdom Hearts',
			'Piano Collections Kingdom Hearts Field & Battle',
		]},
		{'Category:Concerts|Concerts': [
			'Kingdom Hearts Concert -First Breath-',
			'Kingdom Hearts Orchestra -World Tour-',
			'Kingdom Hearts Orchestra -World of Tres-',
		]},
	]},
];

wgSidebar['Merchandise'] = [
		{'Category:Merchandise|Figures': [
			'Play Arts Figures',
			'Formation Arts Figures',
			'Static Arts Figures',
		]},
		'Hot Topic Merchandise|Hot Topic',
		'Kingdom Hearts Trading Card Game|TCG',
		'Card:Main Page|TCG Wiki',
];

/**
 * 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 );