User:PrimeHunter/shortcuts.js

/**********************************************************************

* *

* Changes to this file affect other users. *

* Please discuss on the talk page before editing. *

* *

**********************************************************************/

var shortcutsVersion = '1.1.2';

var shortcutsReleaseDate = '2012-11-04';

var shortcutsLinks = [];

/***********************************************************

* INTERFACE

***********************************************************/

/**

* Starts a new section of links. Function for external use.

*/

window.shortcutsStartSection = function (name)

{

shortcutsLinks[shortcutsLinks.length] = { 'name': name, 'links': [] };

}

/**

* Adds new link into the current section of links. Function for external use.

*/

window.shortcutsAddLink = function (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 ()

{

if (mw.config.get('skin') == 'vector') {

var sidecol = document.getElementById ('panel');

} else {

var sidecol = 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 ()

{

if( $.isFunction( window.shortcutsInit ) ) { shortcutsInit(); }

shortcutsMain ();

}

/***********************************************************

* INITIALIZATION

***********************************************************/

shortcutsStartSection (mw.config.get('wgUserName') ? mw.config.get('wgUserName') : 'shortcuts');

$(shortcutsInitialize);