Difference between revisions of "MediaWiki:Common.js"

From LGPedia
Jump to: navigation, search
(New page: Any JavaScript here will be loaded for all users on every page load.: /** Collapsible tables ********************************************************* * * Description: Allows tables ...)
 
 
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
+
/** Collapsible tables *********************************************************
/** Collapsible tables  
+
  *
*********************************************************
+
  * Description: Allows tables to be collapsed, showing only the header. See
*
+
  *               [[Wikipedia:NavFrame]].
* Description: Allows tables to be collapsed, showing only the  
+
  * Maintainers: [[User:R. Koot]]
header. See
+
  */
* [[Wikipedia:NavFrame]].
+
* Maintainers: [[User:R. Koot]]
+
var autoCollapse = 2;
*/
+
var collapseCaption = "hide";
 
+
var expandCaption = "show";
var autoCollapse = 2;
+
var collapseCaption = "hide";
+
function collapseTable( tableIndex )
var expandCaption = "show";
+
{
 
+
    var Button = document.getElementById( "collapseButton" + tableIndex );
function collapseTable( tableIndex )
+
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
{
+
var Button = document.getElementById( "collapseButton" + tableIndex );
+
    if ( !Table || !Button ) {
var Table = document.getElementById( "collapsibleTable" + tableIndex );
+
        return false;
 
+
    }
if ( !Table || !Button ) {
+
return false;
+
    var Rows = Table.rows;
}
+
 
+
    if ( Button.firstChild.data == collapseCaption ) {
var Rows = Table.rows;
+
        for ( var i = 1; i < Rows.length; i++ ) {
 
+
            Rows[i].style.display = "none";
if ( Button.firstChild.data == collapseCaption ) {
+
        }
for ( var i = 1; i < Rows.length; i++ ) {
+
        Button.firstChild.data = expandCaption;
Rows[i].style.display = "none";
+
    } else {
}
+
        for ( var i = 1; i < Rows.length; i++ ) {
Button.firstChild.data = expandCaption;
+
            Rows[i].style.display = Rows[0].style.display;
} else {
+
        }
for ( var i = 1; i < Rows.length; i++ ) {
+
        Button.firstChild.data = collapseCaption;
Rows[i].style.display = Rows[0].style.display;
+
    }
}
+
}
Button.firstChild.data = collapseCaption;
+
}
+
function createCollapseButtons()
}
+
{
 
+
    var tableIndex = 0;
function createCollapseButtons()
+
    var NavigationBoxes = new Object();
{
+
    var Tables = document.getElementsByTagName( "table" );
var tableIndex = 0;
+
var NavigationBoxes = new Object();
+
    for ( var i = 0; i < Tables.length; i++ ) {
var Tables = document.getElementsByTagName( "table" );
+
        if ( hasClass( Tables[i], "collapsible" ) ) {
 
+
for ( var i = 0; i < Tables.length; i++ ) {
+
            /* only add button and increment count if there is a header row to work with */
if ( hasClass( Tables[i], "collapsible" ) ) {
+
            var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
 
+
            if (!HeaderRow) continue;
/* only add button and increment count if there is a header  
+
            var Header = HeaderRow.getElementsByTagName( "th" )[0];
row to work with */
+
            if (!Header) continue;
var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
+
if (!HeaderRow) continue;
+
            NavigationBoxes[ tableIndex ] = Tables[i];
var Header = HeaderRow.getElementsByTagName( "th" )[0];
+
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
if (!Header) continue;
+
 
+
            var Button     = document.createElement( "span" );
NavigationBoxes[ tableIndex ] = Tables[i];
+
            var ButtonLink = document.createElement( "a" );
Tables[i].setAttribute( "id", "collapsibleTable" +  
+
            var ButtonText = document.createTextNode( collapseCaption );
tableIndex );
+
 
+
            Button.style.styleFloat = "right";
var Button = document.createElement( "span" );
+
            Button.style.cssFloat = "right";
var ButtonLink = document.createElement( "a" );
+
            Button.style.fontWeight = "normal";
var ButtonText = document.createTextNode( collapseCaption );
+
            Button.style.textAlign = "right";
 
+
            Button.style.width = "6em";
Button.style.styleFloat = "right";
+
Button.style.cssFloat = "right";
+
            ButtonLink.style.color = Header.style.color;
Button.style.fontWeight = "normal";
+
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
Button.style.textAlign = "right";
+
            ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
Button.style.width = "6em";
+
            ButtonLink.appendChild( ButtonText );
 
+
ButtonLink.style.color = Header.style.color;
+
            Button.appendChild( document.createTextNode( "[" ) );
ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
+
            Button.appendChild( ButtonLink );
ButtonLink.setAttribute( "href",  
+
            Button.appendChild( document.createTextNode( "]" ) );
"javascript:collapseTable(" + tableIndex + ");" );
+
ButtonLink.appendChild( ButtonText );
+
            Header.insertBefore( Button, Header.childNodes[0] );
 
+
            tableIndex++;
Button.appendChild( document.createTextNode( "[" ) );
+
        }
Button.appendChild( ButtonLink );
+
    }
Button.appendChild( document.createTextNode( "]" ) );
+
 
+
    for ( var i = 0; i < tableIndex; i++ ) {
Header.insertBefore( Button, Header.childNodes[0] );
+
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
tableIndex++;
+
            collapseTable( i );
}
+
        }
}
+
    }
 
+
}
for ( var i = 0; i < tableIndex; i++ ) {
+
if ( hasClass( NavigationBoxes[i], "collapsed" ) || (  
+
addOnloadHook( createCollapseButtons );
tableIndex >= autoCollapse && hasClass( NavigationBoxes[i],  
+
"autocollapse" ) ) ) {
+
/** Dynamic Navigation Bars (experimental) *************************************
collapseTable( i );
+
  *
}
+
  * Description: See [[Wikipedia:NavFrame]].
}
+
  * Maintainers: UNMAINTAINED
}
+
  */
 
+
addOnloadHook( createCollapseButtons );
+
  // set up the words in your language
 
+
  var NavigationBarHide = '[' + collapseCaption + ']';
/** Dynamic Navigation Bars (experimental)  
+
  var NavigationBarShow = '[' + expandCaption + ']';
*************************************
+
*
+
  // shows and hides content and picture (if available) of navigation bars
* Description: See [[Wikipedia:NavFrame]].
+
  // Parameters:
* Maintainers: UNMAINTAINED
+
  //     indexNavigationBar: the index of navigation bar to be toggled
*/
+
  function toggleNavigationBar(indexNavigationBar)
 
+
  {
// set up the words in your language
+
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavigationBarHide = '[' + collapseCaption + ']';
+
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
var NavigationBarShow = '[' + expandCaption + ']';
+
 
+
    if (!NavFrame || !NavToggle) {
// shows and hides content and picture (if available) of navigation bars
+
        return false;
// Parameters:
+
    }
// indexNavigationBar: the index of navigation bar to be toggled
+
function toggleNavigationBar(indexNavigationBar)
+
    // if shown now
{
+
    if (NavToggle.firstChild.data == NavigationBarHide) {
var NavToggle = document.getElementById("NavToggle" +  
+
        for (
indexNavigationBar);
+
                var NavChild = NavFrame.firstChild;
var NavFrame = document.getElementById("NavFrame" +  
+
                NavChild != null;
indexNavigationBar);
+
                NavChild = NavChild.nextSibling
 
+
            ) {
if (!NavFrame || !NavToggle) {
+
            if ( hasClass( NavChild, 'NavPic' ) ) {
return false;
+
                NavChild.style.display = 'none';
}
+
            }
 
+
            if ( hasClass( NavChild, 'NavContent') ) {
// if shown now
+
                NavChild.style.display = 'none';
if (NavToggle.firstChild.data == NavigationBarHide) {
+
            }
for (
+
        }
var NavChild = NavFrame.firstChild;
+
    NavToggle.firstChild.data = NavigationBarShow;
NavChild != null;
+
NavChild = NavChild.nextSibling
+
    // if hidden now
) {
+
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
if ( hasClass( NavChild, 'NavPic' ) ) {
+
        for (
NavChild.style.display = 'none';
+
                var NavChild = NavFrame.firstChild;
}
+
                NavChild != null;
if ( hasClass( NavChild, 'NavContent') ) {
+
                NavChild = NavChild.nextSibling
NavChild.style.display = 'none';
+
            ) {
}
+
            if (hasClass(NavChild, 'NavPic')) {
}
+
                NavChild.style.display = 'block';
NavToggle.firstChild.data = NavigationBarShow;
+
            }
 
+
            if (hasClass(NavChild, 'NavContent')) {
// if hidden now
+
                NavChild.style.display = 'block';
} else if (NavToggle.firstChild.data == NavigationBarShow) {
+
            }
for (
+
        }
var NavChild = NavFrame.firstChild;
+
    NavToggle.firstChild.data = NavigationBarHide;
NavChild != null;
+
    }
NavChild = NavChild.nextSibling
+
  }
) {
+
if (hasClass(NavChild, 'NavPic')) {
+
  // adds show/hide-button to navigation bars
NavChild.style.display = 'block';
+
  function createNavigationBarToggleButton()
}
+
  {
if (hasClass(NavChild, 'NavContent')) {
+
    var indexNavigationBar = 0;
NavChild.style.display = 'block';
+
    // iterate over all < div >-elements  
}
+
    var divs = document.getElementsByTagName("div");
}
+
    for(
NavToggle.firstChild.data = NavigationBarHide;
+
            var i=0;  
}
+
            NavFrame = divs[i];  
}
+
            i++
 
+
        ) {
// adds show/hide-button to navigation bars
+
        // if found a navigation bar
function createNavigationBarToggleButton()
+
        if (hasClass(NavFrame, "NavFrame")) {
{
+
var indexNavigationBar = 0;
+
            indexNavigationBar++;
// iterate over all < div >-elements
+
            var NavToggle = document.createElement("a");
var divs = document.getElementsByTagName("div");
+
            NavToggle.className = 'NavToggle';
for(
+
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
var i=0;
+
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
NavFrame = divs[i];
+
i++
+
            var NavToggleText = document.createTextNode(NavigationBarHide);
) {
+
            for (
// if found a navigation bar
+
                  var NavChild = NavFrame.firstChild;
if (hasClass(NavFrame, "NavFrame")) {
+
                  NavChild != null;
 
+
                  NavChild = NavChild.nextSibling
indexNavigationBar++;
+
                ) {
var NavToggle = document.createElement("a");
+
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
NavToggle.className = 'NavToggle';
+
                    if (NavChild.style.display == 'none') {
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
+
                        NavToggleText = document.createTextNode(NavigationBarShow);
NavToggle.setAttribute('href',  
+
                        break;
'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
+
                    }
 
+
                }
var NavToggleText = document.createTextNode(NavigationBarHide);
+
            }
for (
+
var NavChild = NavFrame.firstChild;
+
            NavToggle.appendChild(NavToggleText);
NavChild != null;
+
            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
NavChild = NavChild.nextSibling
+
            for(
) {
+
              var j=0;  
if ( hasClass( NavChild, 'NavPic' ) || hasClass(  
+
              j < NavFrame.childNodes.length;  
NavChild, 'NavContent' ) ) {
+
              j++
if (NavChild.style.display == 'none') {
+
            ) {
NavToggleText =  
+
              if (hasClass(NavFrame.childNodes[j], "NavHead")) {
document.createTextNode(NavigationBarShow);
+
                NavFrame.childNodes[j].appendChild(NavToggle);
break;
+
              }
}
+
            }
}
+
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
+
        }
 
+
    }
NavToggle.appendChild(NavToggleText);
+
  }
// Find the NavHead and attach the toggle link (Must be  
+
this complicated because Moz's firstChild handling is borked)
+
  addOnloadHook( createNavigationBarToggleButton );
for(
+
var j=0;
+
j < NavFrame.childNodes.length;
+
/* Test if an element has a certain class **************************************
j++
+
  *
) {
+
  * Description: Uses regular expressions and caching for better performance.
if (hasClass(NavFrame.childNodes[j], "NavHead")) {
+
  * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
NavFrame.childNodes[j].appendChild(NavToggle);
+
  */
}
+
}
+
var hasClass = (function () {
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
+
    var reCache = {};
}
+
    return function (element, className) {
}
+
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
}
+
    };
 
+
})();
addOnloadHook( createNavigationBarToggleButton );
+

Latest revision as of 02:43, 25 February 2008

/** 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.style.styleFloat = "right";
             Button.style.cssFloat = "right";
             Button.style.fontWeight = "normal";
             Button.style.textAlign = "right";
             Button.style.width = "6em";
 
             ButtonLink.style.color = Header.style.color;
             ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
             ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
             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 );
         }
     }
 }
 
 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, 'NavPic' ) ) {
                 NavChild.style.display = 'none';
             }
             if ( hasClass( NavChild, 'NavContent') ) {
                 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, 'NavPic')) {
                 NavChild.style.display = 'block';
             }
             if (hasClass(NavChild, 'NavContent')) {
                 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 NavToggleText = document.createTextNode(NavigationBarHide);
             for (
                  var NavChild = NavFrame.firstChild;
                  NavChild != null;
                  NavChild = NavChild.nextSibling
                 ) {
                 if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                     if (NavChild.style.display == 'none') {
                         NavToggleText = document.createTextNode(NavigationBarShow);
                         break;
                     }
                 }
             }
 
             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")) {
                 NavFrame.childNodes[j].appendChild(NavToggle);
               }
             }
             NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
         }
     }
  }
 
  addOnloadHook( createNavigationBarToggleButton );
 
 
/* 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);
     };
 })();