/* see [[/examples]] for basic usage */
/**
* makeLink
* makes a link with the specified text and href
*
* param text: label text to give the link
* param href: url for the link
**/
function makeLink(text, href) {
var link = document.createElement('A');
link.appendChild(document.createTextNode(text));
link.href = href;
return link;
}
/**
* makeNewToolsItem
* makes a new item in the personal tools portlet with the specified id
*
* param id: id to give the new item
* returns: a new item (li) on the personal tools list with specified id
**/
function makeNewToolsItem(id) {
var node = document.createElement('LI');
node.id = id;
// add to list
var preflist = document.getElementById('pt-userpage').parentNode;
preflist.appendChild(node);
return node;
}
/**
* insertAfter
* adds newElement to the DOM tree after the reference node
*
* param reference: the node to insert after
* param newElement: the element to insert
**/
function insertAfter(reference, newElement) {
reference.parentNode.insertBefore(newElement,reference.nextSibling);
}
/**
* makeNew Portlet
* make a new sidebar portlet
*
* param id: id to give the containing div of the portlet
* param label: visible label for the portlet, like "toolbox"
* returns: an empty list (UL) to be filled with items (li's)
**/
function makeNewPortlet(id, label) {
var node = document.createElement('DIV');
node.id = id;
node.className= 'portlet';
var title = document.createElement('H5');
title.appendChild(label);
node.appendChild(title);
var contentnode = document.createElement('DIV');
contentnode.className = 'pBody';
node.appendChild(contentnode);
var listnode = document.createElement('UL');
contentnode.appendChild(listnode);
/* by default inserts under the 'toolbox'; use a different id
in place of 'p-tb' to move where the portlet gets put */
insertAfter(document.getElementById('p-tb'), node);
return listnode;
}
/**
* addPortletItem
* add an item to a portlet
*
* param portlet: a list (UL, usually)
* param item: a node, most often a link (A), to add to the list
*/
function addPortletItem(portlet, item) {
var listitem = document.createElement('LI');
listitem.appendChild(item);
portlet.appendChild(listitem);
}
/* generates a bunch of cookbook-related interface bits */
function cookbook() {
// make a cookbook item in the personal tools portlet
cooknode = makeNewToolsItem('pt-cookbook');
// wrap "Cookbook >" in a span so we can alter the style independently
var cooklabel = document.createElement('SPAN');
cooklabel.id = 'pt-cookbook-label';
// add the links
cooklabel.appendChild(makeLink('Cook', '/wiki/Cookbook:Table of Contents'));
cooklabel.appendChild(makeLink('book', '/wiki/Cookbook_talk:Table of Contents'));
cooklabel.appendChild(document.createTextNode('» '));
// append everything to the cookbook item
cooknode.appendChild(cooklabel);
cooknode.appendChild(makeLink('Changes', '/w/index.php?limit=1000&title=Special%3ARecentchanges&namespace=102'));
cooknode.appendChild(document.createTextNode('/'));
cooknode.appendChild(makeLink('Index', '/w/index.php?title=Special%3AAllpages&from=&namespace=102'));
// make cookbook portlet
var cooktools = makeNewPortlet('p-cookbook', document.createTextNode('Cookbook'));
// add a bunch of links to it
addPortletItem(cooktools, makeLink('Main page', '/wiki/Cookbook:Table of Contents'));
addPortletItem(cooktools, makeLink('Talk page', '/wiki/Cookbook_Talk:Table of Contents'));
addPortletItem(cooktools, makeLink('Recent changes', '/w/index.php?limit=1000&title=Special%3ARecentchanges&namespace=102'));
addPortletItem(cooktools, makeLink('All pages', '/w/index.php?title=Special%3AAllpages&from=&namespace=102'));
addPortletItem(cooktools, makeLink('Work needed', '/wiki/Category:Cookbook_pages_needing_work'));
addPortletItem(cooktools, makeLink('Stubs', '/wiki/Category:Cookbook_stubs'));
}
/* run cookbook() when a page is loaded */
if (window.addEventListener) window.addEventListener("load",cookbook,false);
else if (window.attachEvent) window.attachEvent("onload",cookbook);