Jump to content

User:Quarl/wikitabs.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// [[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

// <pre><nowiki>

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;

// </nowiki></pre>