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 1: Line 1:
/* Any JavaScript here will be loaded for users using the MonoBook skin */
/* Any JavaScript here will be loaded for users using the MonoBook skin */
mw.loader.using('mediawiki.util', function (){
mw.loader.using(['mediawiki.util','mediawiki.legacy.wikibits'], function (){


/* MONOBOOK SIDEBAR v2.3 */
/* MONOBOOK SIDEBAR v2.3 */
Line 297: Line 297:
/* Calling this code to initialize */
/* Calling this code to initialize */
jQuery( MonobookSidebar.init );
jQuery( MonobookSidebar.init );
});
});

Revision as of 23:23, 8 July 2016

/* Any JavaScript here will be loaded for users using the MonoBook skin */
mw.loader.using(['mediawiki.util','mediawiki.legacy.wikibits'], function (){

/* 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:Stubs|Stubs',
	'KHWiki:Sandbox|Sandbox',
];

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 III|Kingdom Hearts III',
	{'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 Unchained χ|Unchained χ[chi]',
                'Kingdom Hearts HD 2.8 Final Chapter Prologue|HD 2.8 Final Chapter Prologue',
		'Kingdom Hearts Mobile|Mobile',
	]},
];

wgSidebar['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:Characters|Antagonists': [
		'Xehanort|Xehanort',
		'Vanitas|Vanitas',
		'Ansem, Seeker of Darkness|Ansem',
		'Organization XIII|Organization XIII',
		'Maleficent|Maleficent',
		'Pete|Pete',
	]},
	'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': [
			'Simulated Twilight Town|Simulated Twilight Town',
			'Mysterious Tower|Mysterious Tower',
			'Radiant Garden|Radiant Garden',
			'The Land of Dragons|The Land of Dragons',
			'Beast’s Castle|Beast’s Castle',
			'Underworld|Underworld',
			'Timeless River|Timeless River',
			'Port Royal|Port Royal',
			'Christmas Town|Christmas Town',
			'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': [
			'The Land of Departure|The 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',
		]},

	]},
];

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

wgSidebar['Literature and music'] = [
	'Kingdom Hearts series (manga)|Manga',
	'Kingdom Hearts novels|Novels',
	'Kingdom Hearts Another Report|Another Report',
	{'Kingdom Hearts Official Strategy Guide|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',
	]},
	{'Category:Music|Music': [
		'Kingdom Hearts Original Soundtrack',
		'Kingdom Hearts II Original Soundtrack',
		'Kingdom Hearts Original Soundtrack Complete',
		'Piano Collections Kingdom Hearts',
		'Piano Collections Kingdom Hearts Field & Battle',
		'Kingdom Hearts Birth by Sleep & 358/2 Days Original Soundtrack',
		'Kingdom Hearts 3D: Dream Drop Distance Original Soundtrack',
	]},
];

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 li = document.createElement( 'li' );
			if ( typeof arr[i] == 'string' ) {
				var 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 )
			.bind( 'mouseover', MonobookSidebar.mouseover )
			.bind( '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 > 7 && article.substr( 0, 7 ) == '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 */
jQuery( MonobookSidebar.init );

});