Badge time.png   The Paragon Wiki Archive documents the state of City of Heroes/Villains as it existed on December 1, 2012.

Difference between revisions of "MediaWiki:Common.js"

From Paragon Wiki Archive
Jump to: navigation, search
(adding code to move the search box and to enable collapsible tables)
 
(now that main page has been updated, dropping the code that didn't end up getting used)
 
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
/* Any JavaScript here will be loaded for all users on every page load. */
 
/* Any JavaScript here will be loaded for all users on every page load. */
  
/** Code to move the Search Box ***************************************
+
// Following is from http://www.wikia.com/index.php?title=Help:Dynamic_navigation&oldid=88652
*
+
*  Description: Moves the Search box from way down below to up beneath
+
*  the main navigation box.
+
*  Maintainers: [[User:Sekoia]]
+
*/
+
 
+
function moveSearchBox() {
+
  var psearch = document.getElementById("p-search");
+
  var newpsearch = psearch.cloneNode(true);
+
  var psitelinks = document.getElementById("p-Official_Site_Links");
+
  var columnone = document.getElementById("column-one");
+
  
  columnone.insertBefore(newpsearch, psitelinks);
+
// ============================================================
  columnone.removeChild(psearch);
+
// BEGIN Dynamic Navigation Bars (experimantal)
}
+
// This script is from Wikipedia. For author attribution, please see http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.js&action=history
  
addOnloadHook(moveSearchBox);
 
  
/** Collapsible tables *********************************************************
+
/* Test if an element has a certain class **************************************
 
  *
 
  *
  * Description: Allows tables to be collapsed, showing only the header.
+
  * Description: Uses regular expressions and caching for better performance.
  * Maintainers: [[User:Sekoia]]
+
  * Maintainers: User:Mike Dillon, User:R. Koot, User:SG
*
+
*  Copied from http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.js&oldid=175826047
+
*  on 2007-12-05 from version maintained by [[wikipedia:User:R. Koot]]
+
 
  */
 
  */
  
var autoCollapse = 2;
+
var hasClass = (function () {
var collapseCaption = "hide";
+
    var reCache = {};
var expandCaption = "show";
+
    return function (element, className) {
 +
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
 +
    };
 +
})();
  
function collapseTable( tableIndex )
+
/** Collapsible tables *********************************************************
{
+
  *
    var Button = document.getElementById( "collapseButton" + tableIndex );
+
  *  Description: Allows tables to be collapsed, showing only the header. See
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
+
  *              [[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;
  
     if ( !Table || !Button ) {
+
            NavigationBoxes[ tableIndex ] = Tables[i];
        return false;
+
            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 );
  
     var Rows = Table.rows;
+
/** Dynamic Navigation Bars (experimental) *************************************
 +
  *
 +
  *  Description: See [[Wikipedia:NavFrame]].
 +
  *  Maintainers: UNMAINTAINED
 +
  */
 +
 +
  // set up the words in your language
 +
  var NavigationBarHide = '[' + collapseCaption + ']';
 +
  var NavigationBarShow = '[' + expandCaption + ']';
 +
 
 +
  // 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 = autoCollapse;
 +
 
 +
 
 +
  // 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;
 +
                    }
 +
                }
 +
            }
  
    if ( Button.firstChild.data == collapseCaption ) {
+
            NavToggle.appendChild(NavToggleText);
        for ( var i = 1; i < Rows.length; i++ ) {
+
            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
            Rows[i].style.display = "none";
+
            for(
        }
+
              var j=0;  
        Button.firstChild.data = expandCaption;
+
              j < NavFrame.childNodes.length;  
    } else {
+
              j++
        for ( var i = 1; i < Rows.length; i++ ) {
+
            ) {
            Rows[i].style.display = Rows[0].style.display;
+
              if (hasClass(NavFrame.childNodes[j], "NavHead")) {
        }
+
                NavFrame.childNodes[j].appendChild(NavToggle);
        Button.firstChild.data = collapseCaption;
+
              }
    }
+
            }
}
+
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
 +
        }
 +
    }
 +
  }  
 +
  addOnloadHook( createNavigationBarToggleButton );
  
function createCollapseButtons()
+
// End from http://www.wikia.com/index.php?title=Help:Dynamic_navigation&oldid=88652
{
+
    var tableIndex = 0;
+
    var NavigationBoxes = new Object();
+
    var Tables = document.getElementsByTagName( "table" );
+
  
    for ( var i = 0; i < Tables.length; i++ ) {
+
// Code to auto-select quick reference layout for Main Page
        if ( hasClass( Tables[i], "collapsible" ) ) {
+
$(document).ready(function(){
 
+
  if(($('#quickreftop').length > 0) && ($('#quickrefinline').length > 0)) {
            /* only add button and increment count if there is a header row to work with */
+
    var qrf = function () {
            var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
+
      if($(window).width() > 1024) {
            if (!HeaderRow) continue;
+
        $('#quickreftop').hide();
            var Header = HeaderRow.getElementsByTagName( "th" )[0];
+
        $('#quickrefinline').show();
            if (!Header) continue;
+
      } else {
 
+
        $('#quickrefinline').hide();
            NavigationBoxes[ tableIndex ] = Tables[i];
+
        $('#quickreftop').show();
            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++;
+
        }
+
 
     }
 
     }
 
+
     $(window).resize(qrf);
     for ( var i = 0;  i < tableIndex; i++ ) {
+
    qrf();
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
+
  }
            collapseTable( i );
+
});
        }
+
    }
+
}
+
+
addOnloadHook( createCollapseButtons );
+

Latest revision as of 08:28, 29 December 2011

/* Any JavaScript here will be loaded for all users on every page load. */

// Following is from http://www.wikia.com/index.php?title=Help:Dynamic_navigation&oldid=88652

// ============================================================
// BEGIN Dynamic Navigation Bars (experimantal)
// This script is from Wikipedia. For author attribution, please see http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.js&action=history


/* 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.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 + ']';
  
  // 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 = autoCollapse;
  
  
  // 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 );

// End from http://www.wikia.com/index.php?title=Help:Dynamic_navigation&oldid=88652

// Code to auto-select quick reference layout for Main Page
$(document).ready(function(){
  if(($('#quickreftop').length > 0) && ($('#quickrefinline').length > 0)) {
    var qrf = function () {
      if($(window).width() > 1024) {
        $('#quickreftop').hide();
        $('#quickrefinline').show();
      } else {
        $('#quickrefinline').hide();
        $('#quickreftop').show();
      }
    }
    $(window).resize(qrf);
    qrf();
  }
});