User:Gary Queen/shortcuts.js

// Original: User:Jsimlo/shortcuts-dev.js

/*********************************************************** * INTERFACE ***********************************************************/

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

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

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

/*********************************************************** * IMPLEMENTATION ***********************************************************/

/** * Link maker. * Creates and returns an li element with the desired link. */ function shortcutsMakeLink(name, url, onclick) {	var ntxt = document.createTextNode(name); var na = document.createElement('a'); var nli = document.createElement('li'); if (url.indexOf('http') == 0 || url.indexOf('javascript') == 0) na.setAttribute('href', url); else na.setAttribute('href', '/wiki/' + url.replace(/ /g, '_')); if (onclick) na.setAttribute('onclick', onclick); nli.setAttribute('class', 'n-shortcut'); nli.setAttribute('id', 't-' + name.toLowerCase.replace(' ', '-'));

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');

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'], links[i]['onclick']));

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 = 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 = new Array; shortcutsStartSection(wgUserName ? wgUserName : 'shortcuts');

$(shortcutsInitialize);