User:Ilmari Karonen/test.js

/** Dynamic Navigation Bars (experimental) ************************************* * * Description: See xNavFrame. * Maintainers: UNMAINTAINED */

// set up the words in your language var xNavigationBarHide = '[' + collapseCaption + ']'; var xNavigationBarShow = '[' + expandCaption + ']';

// shows and hides content and picture (if available) of navigation bars // Parameters: //    indexNavigationBar: the index of navigation bar to be toggled function xtoggleNavigationBar(indexNavigationBar) {   var xNavToggle = document.getElementById("xNavToggle" + indexNavigationBar); var xNavFrame = document.getElementById("xNavFrame" + indexNavigationBar);

if (!xNavFrame || !xNavToggle) { return false; }

// if shown now if (xNavToggle.firstChild.data == xNavigationBarHide) { for (var xNavChild = xNavFrame.firstChild; xNavChild != null; xNavChild = xNavChild.nextSibling) { if ( hasClass( xNavChild, 'xNavPic' ) ) { xNavChild.style.display = 'none'; }           if ( hasClass( xNavChild, 'xNavContent') ) { xNavChild.style.display = 'none'; }       }    xNavToggle.firstChild.data = xNavigationBarShow;

// if hidden now } else if (xNavToggle.firstChild.data == xNavigationBarShow) { for (var xNavChild = xNavFrame.firstChild; xNavChild != null; xNavChild = xNavChild.nextSibling) { if (hasClass(xNavChild, 'xNavPic')) { xNavChild.style.display = 'block'; }           if (hasClass(xNavChild, 'xNavContent')) { xNavChild.style.display = 'block'; }       }        xNavToggle.firstChild.data = xNavigationBarHide; } }

// adds show/hide-button to navigation bars function xcreateNavigationBarToggleButton {   var indexNavigationBar = 0; // iterate over all -elements var divs = document.getElementsByTagName("div"); for (var i = 0; xNavFrame = divs[i]; i++) { // if found a navigation bar if (hasClass(xNavFrame, "xNavFrame")) {

indexNavigationBar++; var xNavToggle = document.createElement("a"); xNavToggle.className = 'xNavToggle'; xNavToggle.setAttribute('id', 'xNavToggle' + indexNavigationBar); xNavToggle.setAttribute('href', 'javascript:xtoggleNavigationBar(' + indexNavigationBar + ');');

var isCollapsed = hasClass( xNavFrame, "collapsed" ); /*            * Check if any children are already hidden. This loop is here for backwards compatibility: * the old way of making xNavFrames start out collapsed was to manually add style="display:none" * to all the xNavPic/xNavContent elements. Since this was bad for accessibility (no way to make            * the content visible without JavaScript support), the new recommended way is to add the class * "collapsed" to the xNavFrame itself, just like with collapsible tables. */           for (var xNavChild = xNavFrame.firstChild; xNavChild != null; xNavChild = xNavChild.nextSibling) { if ( hasClass( xNavChild, 'xNavPic' ) || hasClass( xNavChild, 'xNavContent' ) ) { if (xNavChild.style.display == 'none') { isCollapsed = true; break; }               }            }            if (isCollapsed) { for (var xNavChild = xNavFrame.firstChild; xNavChild != null; xNavChild = xNavChild.nextSibling) { if ( hasClass( xNavChild, 'xNavPic' ) || hasClass( xNavChild, 'xNavContent' ) ) { xNavChild.style.display = 'none'; }               }            }            var xNavToggleText = document.createTextNode(isCollapsed ? xNavigationBarShow : xNavigationBarHide); xNavToggle.appendChild(xNavToggleText);

// Find the xNavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) for(var j=0; j < xNavFrame.childNodes.length; j++) { if (hasClass(xNavFrame.childNodes[j], "xNavHead")) { xNavFrame.childNodes[j].appendChild(xNavToggle); }           }            xNavFrame.setAttribute('id', 'xNavFrame' + indexNavigationBar); }   } }

addOnloadHook( xcreateNavigationBarToggleButton );