User:Hippietrail/navbars.js

/*

Dynamic Navigation Bars (experimental)
*/

// ============================================================ // BEGIN Dynamic Navigation Bars (experimental) // FIXME: currently only works for one nav bar on a page at a time // set up the words in your language var NavigationBarHide = 'hide'; var NavigationBarShow = '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 NavigationBarShowDefault = 1; //Honor the User Preferences if ( getCookie('WiktionaryPreferencesShowNav') != 'true' ) { NavigationBarShowDefault = 0; } else { if ( wgNamespaceNumber == 0 ) NavigationBarShowDefault = 999 ; } /*

toggleNavigationBar
*/

// shows and hides content and picture (if available) of navigation bars // Parameters: //    indexNavigationBar: the index of navigation bar to be toggled function toggleNavigationBar(indexNavigationBar) {   var NavToggle = document.getElementById("NavToggle" + indexNavigationBar); var NavFrame = document.getElementById("NavFrame" + indexNavigationBar); if (!NavFrame || !NavToggle) { return false; }   // if shown now if (NavToggle.isHidden == false) { for (               var NavChild = NavFrame.firstChild;                NavChild;                NavChild = NavChild.nextSibling            ) { if (NavChild.className == 'NavPic') { NavChild.style.display = 'none'; }           if (NavChild.className == 'NavContent') { NavChild.style.display = 'none'; }       }    NavToggle.childNodes[1].firstChild.nodeValue = NavigationBarShow; NavToggle.isHidden = true; // if hidden now } else if (NavToggle.isHidden == true) { for (               var NavChild = NavFrame.firstChild;                NavChild;                NavChild = NavChild.nextSibling            ) { if (NavChild.className == 'NavPic') { NavChild.style.display = 'block'; }           if (NavChild.className == 'NavContent') { NavChild.style.display = 'block'; }       }    NavToggle.childNodes[1].firstChild.nodeValue = NavigationBarHide; NavToggle.isHidden = false; } } /*

createNavigationBarToggleButton
*/

// adds show/hide-button to navigation bars function createNavigationBarToggleButton {   // Are we previewing an translation section? var preview = document.getElementById('wikiPreview');

if (preview != null) { var p = preview.getElementsByTagName('p'); if (p != null && p.length >= 2 && p[1].firstChild.id == 'Translations') { NavigationBarShowDefault = 999; }   }

var indexNavigationBar = 0; // iterate over all -elements for(           var i=0;             NavFrame = document.getElementsByTagName("div")[i];             i++        ) { // if found a navigation bar if (NavFrame.className == "NavFrame") { indexNavigationBar++; var NavToggle = document.createElement("span"); NavToggle.className = 'NavToggle editsection'; NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); NavToggle.appendChild(document.createTextNode('[')); NavToggle.appendChild(document.createElement("a")); var NavToggleText = document.createTextNode(NavigationBarHide); NavToggle.childNodes[1].setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); NavToggle.childNodes[1].appendChild(NavToggleText); NavToggle.appendChild(document.createTextNode(']')); NavToggle.isHidden = 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 == "NavHead") { NavFrame.childNodes[j].appendChild(NavToggle); }           }            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); }   }    // if more Navigation Bars found than Default: hide all if (NavigationBarShowDefault < indexNavigationBar) { for(               var i=1;                 i<=indexNavigationBar;                 i++        ) { toggleNavigationBar(i); }   } } addOnloadHook(createNavigationBarToggleButton); // END Dynamic Navigation Bars // ============================================================