MediaWiki:Common.js: Difference between revisions

From XentaxWiki
Jump to navigation Jump to search
imported>Dinoguy1000
mNo edit summary
No edit summary
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
/* {{MediaWiki:Clearyourcache}} */
// <syntaxhighlight lang="javascript">
/* Import more specific scripts if necessary */
/*if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Special:Upload") //scripts specific to editing pages
{
    importScript("MediaWiki:Common.js/edit.js")
}*/
/** For sysops *****************************************
*
*  Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]].
*/
/*if ( wgUserGroups ) {
  for ( var g = 0; g < wgUserGroups.length; ++g ) {
    if ( wgUserGroups[g] == "sysop" ) {
      importStylesheet("MediaWiki:Sysop.css");
      addOnloadHook( function() {
        if ( !window.disableSysopJS ) {
          importScript("MediaWiki:Sysop.js");
        }
      } );
    }
  }
}*/


/** Tooltips and access keys **************************************************
/* Scripts specific to Internet Explorer */
  *
  *  To be replaced with MediaWiki:Accesskey-* when mw software gets updated
  */
   
   
ta = new Object();
if (navigator.appName == "Microsoft Internet Explorer")
  ta['pt-userpage']           = new Array('.','My user page');
{
  ta['pt-anonuserpage']      = new Array('.','The user page for the ip you\'re editing as');
    /** Internet Explorer bug fix **************************************************
  ta['pt-mytalk']            = new Array('n','My talk page');
    *
  ta['pt-anontalk']          = new Array('n','Discussion about edits from this ip address');
    *  Description: Fixes IE horizontal scrollbar bug
ta['pt-preferences']        = new Array('','My preferences');
    * Maintainers: [[User:Tom-]]?
  ta['pt-watchlist']          = new Array('l','The list of pages you\'re monitoring for changes.');
    */
  ta['pt-mycontris']          = new Array('y','List of my contributions');
  ta['pt-login']              = new Array('o','You are encouraged to log in, it is not mandatory however.');
    var oldWidth;
  ta['pt-anonlogin']          = new Array('o','You are encouraged to log in, it is not mandatory however.');
    var docEl = document.documentElement;
  ta['pt-logout']             = new Array('o','Log out');
ta['ca-talk']              = new Array('t','Discussion about the content page');
    function fixIEScroll()
ta['ca-edit']               = new Array('e','You can edit this page. Please use the preview button before saving.');
    {
ta['ca-addsection']        = new Array('+','Add a comment to this discussion.');
        if (!oldWidth || docEl.clientWidth > oldWidth)
  ta['ca-viewsource']        = new Array('e','This page is protected. You can view its source.');
            doFixIEScroll();
  ta['ca-history']           = new Array('h','Past versions of this page.');
        else
  ta['ca-protect']           = new Array('=','Protect this page');
            setTimeout(doFixIEScroll, 1);
  ta['ca-delete']            = new Array('d','Delete this page');
   
ta['ca-undelete']          = new Array('d','Restore the edits done to this page before it was deleted');
        oldWidth = docEl.clientWidth;
  ta['ca-move']              = new Array('m','Move this page');
    }
  ta['ca-watch']              = new Array('w','Add this page to your watchlist');
   
ta['ca-unwatch']           = new Array('w','Remove this page from your watchlist');
    function doFixIEScroll() {
ta['search']               = new Array('f','Search this wiki');
        docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
ta['p-logo']                = new Array('','Main Page');
    }
  ta['n-mainpage']            = new Array('z','Visit the Main Page');
   
ta['n-portal']              = new Array('','About the project, what you can do, where to find things');
    document.attachEvent("onreadystatechange", fixIEScroll);
ta['n-currentevents']      = new Array('','Find background information on current events');
    document.attachEvent("onresize", fixIEScroll);
  ta['n-recentchanges']      = new Array('r','The list of recent changes in the wiki.');
   
ta['n-randompage']         = new Array('x','Load a random page');
    // In print IE (7?) does not like line-height
  ta['n-help']               = new Array('','The place to find out.');
    appendCSS( '@media print { sup, sub, p, .documentDescription { line-height: normal; }}');
ta['n-sitesupport']        = new Array('','Support us');
   
ta['t-whatlinkshere']       = new Array('j','List of all wiki pages that link here');
    // IE overflow bug
  ta['t-recentchangeslinked'] = new Array('k','Recent changes in pages linked from this page');
    appendCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
ta['feed-rss']             = new Array('','RSS feed for this page');
   
  ta['feed-atom']             = new Array('','Atom feed for this page');
    // IE zoomfix
ta['t-contributions']      = new Array('','View the list of contributions of this user');
    //Use to fix right floating div/table inside tables.
ta['t-emailuser']          = new Array('','Send a mail to this user');
    appendCSS('.iezoomfix div, .iezoomfix table { zoom: 1;}' );
  ta['t-upload']              = new Array('u','Upload images or media files');
   
  ta['t-specialpages']        = new Array('q','List of all special pages');
    //Import scripts specific to Internet Explorer 6
ta['ca-nstab-main']        = new Array('c','View the content page');
    if (navigator.appVersion.substr(22, 1) == "6") {
  ta['ca-nstab-user']        = new Array('c','View the user page');
        importScript("MediaWiki:Common.js/IE60Fixes.js")
ta['ca-nstab-media']        = new Array('c','View the media page');
    }
  ta['ca-nstab-special']      = new Array('','This is a special page, you can\'t edit the page itself.');
}
ta['ca-nstab-wp']          = new Array('a','View the project page');
ta['ca-nstab-image']       = new Array('c','View the image page');
/* Test if an element has a certain class **************************************
  ta['ca-nstab-mediawiki']   = new Array('c','View the system message');
*
  ta['ca-nstab-template']     = new Array('c','View the template');
* Description: Uses regular expressions and caching for better performance.
ta['ca-nstab-help']         = new Array('c','View the help page');
  * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
ta['ca-nstab-category']     = new Array('c','View the category page');
*/
 
/** Test if an element has a certain class ************************************
var hasClass = (function () {
  *
    var reCache = {};
  *  Description: Uses regular expressions and caching for better performance.
    return function (element, className) {
  *  Copied from [[wikipedia:MediaWiki:Common.js|MediaWiki:Common.js]]
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
  *  Maintainers: [[wikipedia:User:Mike Dillon|User:Mike Dillon]], [[wikipedia:User:R. Koot|User:R. Koot]], [[wikipedia:User:SG|User:SG]]
    };
  */
})();
   
/** Collapsible tables *********************************************************
*
*  Description: Allows tables to be collapsed, showing only the header. See
  *              [[Wikipedia:NavFrame]].
  *  Maintainers: [[User:R. Koot]]
*/
var autoCollapse = 2;
var collapseCaption = "hide";
var expandCaption = "show";
   
function collapseTable( tableIndex )
{
    var Button = document.getElementById( "collapseButton" + tableIndex );
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
   
    if ( !Table || !Button ) {
        return false;
    }
   
    var Rows = Table.rows;
    if ( Button.firstChild.data == collapseCaption ) {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = "none";
        }
        Button.firstChild.data = expandCaption;
    } else {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = Rows[0].style.display;
        }
        Button.firstChild.data = collapseCaption;
    }
}
   
function createCollapseButtons()
{
    var tableIndex = 0;
    var NavigationBoxes = new Object();
    var Tables = document.getElementsByTagName( "table" );
   
    for ( var i = 0; i < Tables.length; i++ ) {
        if ( hasClass( Tables[i], "collapsible" ) ) {
   
            /* only add button and increment count if there is a header row to work with */
            var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
            if (!HeaderRow) continue;
            var Header = HeaderRow.getElementsByTagName( "th" )[0];
            if (!Header) continue;
   
            NavigationBoxes[ tableIndex ] = Tables[i];
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
   
             var Button    = document.createElement( "span" );
            var ButtonLink = document.createElement( "a" );
            var ButtonText = document.createTextNode( collapseCaption );
   
            Button.className = "collapseButton"; //Styles are declared in Common.css
   
            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
            ButtonLink.setAttribute( "href", "#" );
            addHandler( ButtonLink, "click", new Function( "evt", "collapseTable(" + tableIndex + " ); return killEvt( evt );") );
            ButtonLink.appendChild( ButtonText );
   
            Button.appendChild( document.createTextNode( "[" ) );
            Button.appendChild( ButtonLink );
            Button.appendChild( document.createTextNode( "]" ) );
   
            Header.insertBefore( Button, Header.childNodes[0] );
            tableIndex++;
        }
    }
    for ( var i = 0; i < tableIndex; i++ ) {
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
            collapseTable( i );
        }
        else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
            var element = NavigationBoxes[i];
            while (element = element.parentNode) {
                if ( hasClass( element, "outercollapse" ) ) {
                    collapseTable ( i );
                    break;
                }
            }
        }
    }
}
   
   
var hasClass = (function () {
addOnloadHook( createCollapseButtons );
    var reCache = {};
    return function (element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
})();
 
/** Collapsible tables ********************************************************
  *
  *  Description: Allows tables to be collapsed, showing only the header. See
  *              [[wikipedia:Wikipedia:NavFrame|Wikipedia:NavFrame]].
  *  Copied from [[wikipedia:MediaWiki:Common.js|MediaWiki:Common.js]]
  *  Maintainers: [[wikipedia:User:R. Koot|User:R. Koot]]
  *
  */
   
   
var autoCollapse = 2;
var collapseCaption = "hide";
var expandCaption = "show";
   
   
function collapseTable( tableIndex )
/** Dynamic Navigation Bars (experimental) *************************************
  {
  *
    var Button = document.getElementById( "collapseButton" + tableIndex );
*  Description: See [[Wikipedia:NavFrame]].
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
*  Maintainers: UNMAINTAINED
*/
   
   
    if ( !Table || !Button ) {
// set up the words in your language
        return false;
var NavigationBarHide = '[' + collapseCaption + ']';
    }
var NavigationBarShow = '[' + expandCaption + ']';
   
   
    var Rows = Table.getElementsByTagName( "tr" );  
// 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 ( Button.firstChild.data == collapseCaption ) {
    if (!NavFrame || !NavToggle) {
        for ( var i = 1; i < Rows.length; i++ ) {
        return false;
            Rows[i].style.display = "none";
    }
        }
        Button.firstChild.data = expandCaption;
    } else {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = Rows[0].style.display;
        }
        Button.firstChild.data = collapseCaption;
    }
}
   
   
function createCollapseButtons()
    // if shown now
{
    if (NavToggle.firstChild.data == NavigationBarHide) {
    var tableIndex = 0;
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
    var NavigationBoxes = new Object();
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
    var Tables = document.getElementsByTagName( "table" );
                NavChild.style.display = 'none';
            }
        }
    NavToggle.firstChild.data = NavigationBarShow;
   
   
    for ( var i = 0; i < Tables.length; i++ ) {
    // if hidden now
        if ( hasClass( Tables[i], "collapsible" ) ) {
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
            NavigationBoxes[ tableIndex ] = Tables[i];
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
                NavChild.style.display = 'block';
            }
        }
        NavToggle.firstChild.data = NavigationBarHide;
    }
}
   
   
            var Button     = document.createElement( "span" );
// adds show/hide-button to navigation bars
            var ButtonLink = document.createElement( "a" );
function createNavigationBarToggleButton()
            var ButtonText = document.createTextNode( collapseCaption );
{
    var indexNavigationBar = 0;
     // iterate over all < div >-elements
    var divs = document.getElementsByTagName("div");
    for (var i = 0; NavFrame = divs[i]; i++) {
        // if found a navigation bar
        if (hasClass(NavFrame, "NavFrame")) {
   
   
            Button.style.styleFloat = "right";
            indexNavigationBar++;
            Button.style.cssFloat = "right";
            var NavToggle = document.createElement("a");
            Button.style.fontWeight = "normal";
            NavToggle.className = 'NavToggle';
            Button.style.textAlign = "right";
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            Button.style.width = "6em";
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
   
   
             ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
            var isCollapsed = hasClass( NavFrame, "collapsed" );
            ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
            /*
            ButtonLink.appendChild( ButtonText );
             * Check if any children are already hidden. This loop is here for backwards compatibility:
            * the old way of making NavFrames start out collapsed was to manually add style="display:none"
            * to all the NavPic/NavContent 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 NavFrame itself, just like with collapsible tables.
            */
            for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                    if ( NavChild.style.display == 'none' ) {
                        isCollapsed = true;
                    }
                }
            }
            if (isCollapsed) {
                for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
                    if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                        NavChild.style.display = 'none';
                    }
                }
            }
            var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
            NavToggle.appendChild(NavToggleText);
   
   
            Button.appendChild( document.createTextNode( "[" ) );
            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
            Button.appendChild( ButtonLink );
            for(var j=0; j < NavFrame.childNodes.length; j++) {
            Button.appendChild( document.createTextNode( "]" ) );
                if (hasClass(NavFrame.childNodes[j], "NavHead")) {
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
                    NavFrame.childNodes[j].appendChild(NavToggle);
                }
            }
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
}
   
   
            var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
addOnloadHook( createNavigationBarToggleButton );
            /* only add button and increment count if there is a header row to work with */
            if (Header) {
                Header.insertBefore( Button, Header.childNodes[0] );
                tableIndex++;
            }
        }
    }
   
   
    for ( var i = 0;  i < tableIndex; i++ ) {
// Define ta for now. Bugzilla 23175
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
window.ta = [];
            collapseTable( i );
        }
    }
}
   
   
addOnloadHook( createCollapseButtons );
// </syntaxhighlight>

Latest revision as of 19:59, 12 January 2024

// <syntaxhighlight lang="javascript">
 
/* Import more specific scripts if necessary */
 
/*if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Special:Upload") //scripts specific to editing pages
{
    importScript("MediaWiki:Common.js/edit.js")
}*/
 
/** For sysops *****************************************
 *
 *  Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]].
 */
/*if ( wgUserGroups ) {
  for ( var g = 0; g < wgUserGroups.length; ++g ) {
    if ( wgUserGroups[g] == "sysop" ) {
      importStylesheet("MediaWiki:Sysop.css");
      addOnloadHook( function() {
        if ( !window.disableSysopJS ) {
          importScript("MediaWiki:Sysop.js");
        }
      } );
    } 
  }
}*/

/* Scripts specific to Internet Explorer */
 
if (navigator.appName == "Microsoft Internet Explorer")
{
    /** Internet Explorer bug fix **************************************************
     *
     *  Description: Fixes IE horizontal scrollbar bug
     *  Maintainers: [[User:Tom-]]?
     */
 
    var oldWidth;
    var docEl = document.documentElement;
 
    function fixIEScroll()
    {
        if (!oldWidth || docEl.clientWidth > oldWidth)
            doFixIEScroll();
        else
            setTimeout(doFixIEScroll, 1);
 
        oldWidth = docEl.clientWidth;
    }
 
    function doFixIEScroll() {
        docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
    }
 
    document.attachEvent("onreadystatechange", fixIEScroll);
    document.attachEvent("onresize", fixIEScroll);
 
    // In print IE (7?) does not like line-height
    appendCSS( '@media print { sup, sub, p, .documentDescription { line-height: normal; }}');
 
    // IE overflow bug
    appendCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
 
    // IE zoomfix
    //Use to fix right floating div/table inside tables.
    appendCSS('.iezoomfix div, .iezoomfix table { zoom: 1;}' );
 
    //Import scripts specific to Internet Explorer 6
    if (navigator.appVersion.substr(22, 1) == "6") {
        importScript("MediaWiki:Common.js/IE60Fixes.js")
    }
}
 
/* Test if an element has a certain class **************************************
 *
 * Description: Uses regular expressions and caching for better performance.
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 */
 
var hasClass = (function () {
    var reCache = {};
    return function (element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
})();
 
 
/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *               [[Wikipedia:NavFrame]].
 *  Maintainers: [[User:R. Koot]]
 */
 
var autoCollapse = 2;
var collapseCaption = "hide";
var expandCaption = "show";
 
function collapseTable( tableIndex )
{
    var Button = document.getElementById( "collapseButton" + tableIndex );
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
 
    if ( !Table || !Button ) {
        return false;
    }
 
    var Rows = Table.rows;
 
    if ( Button.firstChild.data == collapseCaption ) {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = "none";
        }
        Button.firstChild.data = expandCaption;
    } else {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = Rows[0].style.display;
        }
        Button.firstChild.data = collapseCaption;
    }
}
 
function createCollapseButtons()
{
    var tableIndex = 0;
    var NavigationBoxes = new Object();
    var Tables = document.getElementsByTagName( "table" );
 
    for ( var i = 0; i < Tables.length; i++ ) {
        if ( hasClass( Tables[i], "collapsible" ) ) {
 
            /* only add button and increment count if there is a header row to work with */
            var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
            if (!HeaderRow) continue;
            var Header = HeaderRow.getElementsByTagName( "th" )[0];
            if (!Header) continue;
 
            NavigationBoxes[ tableIndex ] = Tables[i];
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
 
            var Button     = document.createElement( "span" );
            var ButtonLink = document.createElement( "a" );
            var ButtonText = document.createTextNode( collapseCaption );
 
            Button.className = "collapseButton";  //Styles are declared in Common.css
 
            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
            ButtonLink.setAttribute( "href", "#" );
            addHandler( ButtonLink,  "click", new Function( "evt", "collapseTable(" + tableIndex + " ); return killEvt( evt );") );
            ButtonLink.appendChild( ButtonText );
 
            Button.appendChild( document.createTextNode( "[" ) );
            Button.appendChild( ButtonLink );
            Button.appendChild( document.createTextNode( "]" ) );
 
            Header.insertBefore( Button, Header.childNodes[0] );
            tableIndex++;
        }
    }
 
    for ( var i = 0;  i < tableIndex; i++ ) {
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
            collapseTable( i );
        } 
        else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
            var element = NavigationBoxes[i];
            while (element = element.parentNode) {
                if ( hasClass( element, "outercollapse" ) ) {
                    collapseTable ( i );
                    break;
                }
            }
        }
    }
}
 
addOnloadHook( createCollapseButtons );
 
 
/** Dynamic Navigation Bars (experimental) *************************************
 *
 *  Description: See [[Wikipedia:NavFrame]].
 *  Maintainers: UNMAINTAINED
 */
 
// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
 
// 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.firstChild.data == NavigationBarHide) {
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
                NavChild.style.display = 'none';
            }
        }
    NavToggle.firstChild.data = NavigationBarShow;
 
    // if hidden now
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
                NavChild.style.display = 'block';
            }
        }
        NavToggle.firstChild.data = NavigationBarHide;
    }
}
 
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton()
{
    var indexNavigationBar = 0;
    // iterate over all < div >-elements 
    var divs = document.getElementsByTagName("div");
    for (var i = 0; NavFrame = divs[i]; i++) {
        // if found a navigation bar
        if (hasClass(NavFrame, "NavFrame")) {
 
            indexNavigationBar++;
            var NavToggle = document.createElement("a");
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
 
            var isCollapsed = hasClass( NavFrame, "collapsed" );
            /*
             * Check if any children are already hidden.  This loop is here for backwards compatibility:
             * the old way of making NavFrames start out collapsed was to manually add style="display:none"
             * to all the NavPic/NavContent 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 NavFrame itself, just like with collapsible tables.
             */
            for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                    if ( NavChild.style.display == 'none' ) {
                        isCollapsed = true;
                    }
                }
            }
            if (isCollapsed) {
                for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
                    if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                        NavChild.style.display = 'none';
                    }
                }
            }
            var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
            NavToggle.appendChild(NavToggleText);
 
            // 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 (hasClass(NavFrame.childNodes[j], "NavHead")) {
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
                    NavFrame.childNodes[j].appendChild(NavToggle);
                }
            }
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
}
 
addOnloadHook( createNavigationBarToggleButton );
 
// Define ta for now. Bugzilla 23175
window.ta = [];
 
// </syntaxhighlight>