User:Quarl/wikitabs.js

// User:Quarl/wikitabs.js (formerly User:Quarl/addlilink.js)

// depends: wikitabs.css

// originally based on

// http://en.wikipedia.org/wiki/Wikipedia:WikiProject_User_scripts/Scripts/Add_LI_link

//

var wikitabs = new Object();

wikitabs.getPortlet = function(n) {

return document.getElementById(n).getElementsByTagName('ul')[0];

}

wikitabs.getPortletPersonal = function() { return wikitabs.getPortlet('p-personal'); }

wikitabs.getPortletTabActions = function() { return wikitabs.getPortlet('p-cactions'); }

wikitabs.getPortletNavigation = function() { return wikitabs.getPortlet('p-navigation'); }

wikitabs.getPortletToolbox = function() { return wikitabs.getPortlet('p-tb'); }

wikitabs.addTab = function(url, name, id, title, key) {

return wikitabs.addLiLink(wikitabs.getPortletTabActions(), url, name, id, title, key);

}

wikitabs.addToolboxLink = function(url, name, id, title, key) {

return wikitabs.addLiLink(wikitabs.getPortletToolbox(), url, name, id, title, key);

}

wikitabs.addNavigationLink = function(url, name, id, title, key) {

return wikitabs.addLiLink(wikitabs.getPortletNavigation(), url, name, id, title, key);

}

// add a node at a location. If it's a regular node, then append to location

// as parent. If it's {after:node}, then insert after node.

wikitabs._fancyAdd = function(location, newNode) {

if (location['after']) {

var after = location['after'];

if (after.nextSibling) {

after.parentNode.insertBefore(newNode, after.nextSibling);

} else {

after.parentNode.appendChild(newNode);

}

} else {

location.appendChild(newNode);

}

}

wikitabs.addLiLinkX = function(location, entry, id, title, key){

var li = document.createElement('li');

if(id) li.id = id;

if (typeof(entry) == 'string') {

li.innerHTML = entry;

} else {

li.appendChild(entry);

}

wikitabs._fancyAdd(location, li);

if(id && (key || title) && window.ta) {

ta[id] = [(key||), (title||)];

}

// re-render the title and accesskeys from existing code in wikibits.js

akeytt();

return li;

}

wikitabs.addLiLink = function(parent, url, name, id, title, key){

var na = document.createElement('a');

na.href = url;

na.appendChild(document.createTextNode(name));

return wikitabs.addLiLinkX(parent, na, id, title, key);

}

wikitabs._toggleMenu = function() {

var mn = this.nextSibling;

if (!mn || typeof(mn.displayState) != 'boolean') {

alert("## invalid target for wikitabs._toggleMenu (error f66282ae-0762-4c90-8b5d-f095909cb786)");

return;

}

if ( (mn.displayState = !mn.displayState) ) {

// new state: display

mn.className += ' sticky';

} else {

// new state: hide

mn.className = mn.className.replace(/(^| )sticky/, '');

}

}

wikitabs.addTabMenu = function(name, id)

{

var parent = wikitabs.getPortletTabActions();

var na = document.createElement('a');

na.href = 'javascript:void(0)';

na.appendChild(document.createTextNode(name));

na.onclick = wikitabs._toggleMenu;

var mn = document.createElement('ul');

mn.displayState = false;

var li = document.createElement('li');

li.id = id;

li.className = 'tabmenu';

li.appendChild(na);

li.appendChild(mn);

parent.appendChild(li);

return mn;

}

// deprecated aliases

getTabActions = wikitabs.getPortletTabActions;

getToolbox = wikitabs.getPortletToolbox;

getNavigationBox = wikitabs.getPortletNavigation;

addlilink = wikitabs.addLiLink;

addlilinkX = wikitabs.addLiLinkX;

addTab = wikitabs.addTab;

addToolboxLink = wikitabs.addToolboxLink;

addNavigationLink = wikitabs.addNavigationLink;

//