User:Gimmetrow/dynabars.js

From Wikipedia, the free encyclopedia

Note: After saving, you have to bypass your browser's cache to see the changes. Firefox/Mozilla/Safari: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Internet Explorer: press Ctrl-F5, Opera/Konqueror: press F5.

// ============================================================
 // BEGIN Dynamic Navigation Bars (experimental)
 
 // set up the words in your language
 //var LocalNavigationBarHide = '[ Hide ]';
 //var LocalNavigationBarShow = '[ Show ]';
 
 // set up max count of Navigation Bars on page,
 // if there are more, all will be hidden
 // NavigationBarShowDefault = 0; // all bars will be hidden
 // NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
 //var LocalNavigationBarShowDefault = 1;
 
 
 // shows and hides content and picture (if available) of navigation bars
 // Parameters:
 //     indexNavigationBar: the index of navigation bar to be toggled
 function toggleLocalNavigationBar(indexNavigationBar, NavShow, NavHide)
 {
    var NavToggle = document.getElementById("LocalNavToggle" + indexNavigationBar);
    var NavFrame  = document.getElementById("LocalNavFrame"  + indexNavigationBar);
 
    if (!NavFrame || !NavToggle) {
        return false;
    }
 
    // get hide and show texts from title attributes
    //var NavHide = NavFrame.getAttribute('title');
    //var NavShow = NavToggle.getAttribute('title');
    //if (!NavShow) NavShow = LocalNavigationBarShow;
    //if (!NavHide) NavHide = LocalNavigationBarHide;
 
    // if shown now
    //if (NavToggle.firstChild.data == LocalNavigationBarHide) {
    if (NavToggle.firstChild.data == NavHide) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild != null;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'LocalNavPic') {
                NavChild.style.display = 'none';
            }
            if (NavChild.className == 'LocalNavContent') {
                NavChild.style.display = 'none';
            }
        }
    NavToggle.firstChild.data = NavShow;
    //NavToggle.firstChild.data = LocalNavigationBarShow;
 
    // if hidden now
    //} else if (NavToggle.firstChild.data == LocalNavigationBarShow) {
    } else if (NavToggle.firstChild.data == NavShow) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild != null;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'LocalNavPic') {
                //if (NavChild.hasAttribute('title')) NavChild.style.display = 'inline';
                //else NavChild.style.display = 'block';
                NavChild.style.display = 'inline';
            }
            if (NavChild.className == 'LocalNavContent') {
                //if (NavChild.hasAttribute('title')) NavChild.style.display = 'inline';
                //else NavChild.style.display = 'block';
                NavChild.style.display = 'inline';
            }
        }
    NavToggle.firstChild.data = NavHide;
    //NavToggle.firstChild.data = LocalNavigationBarHide;
    }
 }
 
 // adds show/hide-button to navigation bars
 function createLocalNavigationBarToggleButton()
 {
    var indexNavigationBar = 0;
    var NavHide, NavShow;
    // iterate over all < div >-elements
    for(
            var i=0; 
            NavFrame = document.getElementsByTagName("span")[i]; //div 
            i++
        ) {
        // if found a navigation bar
        if (NavFrame.className == "LocalNavFrame") {
 
            indexNavigationBar++;
 
            var toggleShow = false;
            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
            for(
              var j=0; 
              j < NavFrame.childNodes.length; 
              j++
            ) {
              if (NavFrame.childNodes[j].className == "LocalNavShow") toggleShow = true;
              if (NavFrame.childNodes[j].className == "LocalNavHead") {
  
                if (NavFrame.hasAttribute('title')) NavHide = NavFrame.getAttribute('title');
                else NavHide = NavigationBarHide;
 
                if (NavFrame.childNodes[j].hasAttribute('title')) NavShow = NavFrame.childNodes[j].getAttribute('title');
                else NavShow = NavigationBarShow;
 
              //if (NavShow) NavToggle.setAttribute('title', NavShow);
 
                var NavToggle = document.createElement("a");
                NavToggle.className = 'LocalNavToggle';
                NavToggle.setAttribute('id', 'LocalNavToggle' + indexNavigationBar);
  
                NavToggle.setAttribute('href', 'javascript:toggleLocalNavigationBar(' + indexNavigationBar + ",'" + NavShow + "','" + NavHide + "');");
                NavFrame.setAttribute('id', 'LocalNavFrame' + indexNavigationBar);
  
                var NavToggleText = document.createTextNode(NavHide);
                NavToggle.appendChild(NavToggleText);
  
                NavFrame.childNodes[j].appendChild(NavToggle);
                //NavFrame.childNodes[j].insertBefore(NavToggle, NavFrame.childNodes[j].childNodes[0]);//alt
                toggleLocalNavigationBar(indexNavigationBar, NavShow, NavHide);
              }
            }
  
            if (toggleShow) toggleLocalNavigationBar(indexNavigationBar, NavShow, NavHide);
        }
    }
    // if more Navigation Bars found than Default: hide all
    if (indexNavigationBar == 1) toggleLocalNavigationBar(1, NavShow, NavHide); // show 1 by default
  /* broken
    if (LocalNavigationBarShowDefault < indexNavigationBar) {
        for(
                var i=1; 
                i<=indexNavigationBar; 
                i++
        ) {
            toggleLocalNavigationBar(i);
        } 
    } */
 
 }
 
 addOnloadHook(createLocalNavigationBarToggleButton);
 
 // END Dynamic Navigation Bars
 // ============================================================