User:Spacebirdy/grmpf.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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
// from http://en.wikipedia.org/wiki/User:Jsimlo/shortcuts.js by [[w:en:User:Jsimlo]]

/**********************************************************************
*                                                                    *
*             Changes to this file affect other users.               *
*           Please discuss on the talk page before editing.          *
*                                                                    *
**********************************************************************/
var shortcutsVersion      = "1.1.2"; // updated 2015-03-23 for latest MediaWiki changes
var shortcutsReleaseDate  = "2009-07-26";


/***********************************************************
* INTERFACE
***********************************************************/
/**
* Starts a new section of links. Function for external use.
*/
function shortcutsStartSection(name) {
	shortcutsLinks[shortcutsLinks.length] = { 'name': name, 'links': [] };
}

/**
* Adds new link into the current section of links. Function for external use.
*/
function shortcutsAddLink(name, article) {
	var links = shortcutsLinks[shortcutsLinks.length - 1].links;
	links[links.length] = { 'name': name, 'article': article };
}

/***********************************************************
* IMPLEMENTATION
***********************************************************/
/**
* Link maker.
* Creates and returns an li element with the desired link.
*/
function shortcutsMakeLink(name, url) {
	var ntxt = document.createTextNode(name);
	var na   = document.createElement('a');
	var nli  = document.createElement('li');
	
	na.setAttribute('href', '/wiki/' + url);
	nli.setAttribute('class', 'n-shortcut');
	
	na.appendChild(ntxt);
	nli.appendChild(na);
	
	return nli;
}

/**
* Portlet maker.
* Creates and returns a portlet populated by list of links.
*/
function shortcutsMakePortlet(name, links) {
	var nportlet = document.createElement('div');
	var nh5 = document.createElement('h5');
	var ntit = document.createTextNode(name);
	var nbody = document.createElement('div');
	var nul = document.createElement('ul');
	
	if (mw.config.get('skin') == 'vector') {
		nportlet.setAttribute('id', 'p-'+name);
		nportlet.setAttribute('class', 'portal');
		nh5.setAttribute('xml:lang', 'en');
		nh5.setAttribute('lang', 'en');
		nbody.setAttribute('class', 'body');
	}
	else {
		nportlet.setAttribute('id', 'p-'+name);
		nportlet.setAttribute('class', 'portlet');
		nbody.setAttribute('class', 'pBody');
		nul.setAttribute('id', 'p-'+name);
	}
	
	for (var i = 0; i < links.length; i++)
		nul.appendChild(shortcutsMakeLink(links[i].name, links[i].article));
	
	nh5.appendChild(ntit);
	nportlet.appendChild(nh5);
	nbody.appendChild(nul);
	nportlet.appendChild(nbody);
	
	return nportlet;
}

/**
* Main function.
* Enumerates all non-empty sections, and adds new portlets beneath the old ones.
*/
function shortcutsMain() {
	var sidecol = mw.config.get('skin') == 'vector' ? document.getElementById('mw-panel') : document.getElementById('column-one');
	
	for (var i = 0; i < shortcutsLinks.length; i++) {
		if (shortcutsLinks[i].links.length > 0)
			sidecol.appendChild(shortcutsMakePortlet(shortcutsLinks[i].name, shortcutsLinks[i].links));
	}
}

/**
* Initializes the onload events.
*/
function shortcutsInitialize() {
	//shortcutsInit();
	shortcutsMain();
}

/***********************************************************
* INITIALIZATION
***********************************************************/
var shortcutsLinks = [];
shortcutsStartSection(mw.config.get('wgUserName') || 'shortcuts');

$(shortcutsInitialize);