MediaWiki:Common.js

From Unreal Wiki, The Unreal Engine Documentation Site
Revision as of 07:06, 13 May 2008 by Wormbo (talk | contribs) (added support for non-floating toggle button in collapsible table)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* <!-- Add source highlighting to preview page --> <source lang=javascript> */
 /* Test if an element has a certain class **************************************
  *
  * Description: Uses regular expressions and caching for better performance.
  * Copied from: [[wikipedia:MediaWiki:Common.js]]
  */
 
 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:Project:NavFrame]].
  * Copied from: [[wikipedia:MediaWiki:Common.js]]
  */
 
 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 );

             if ( !hasClass(Header, "inline-button") ) {
                 Button.style.styleFloat = "right";
                 Button.style.cssFloat = "right";
                 Button.style.textAlign = "right";
                 Button.style.width = "6em";
             }
             Button.style.fontWeight = "normal";
 
             ButtonLink.style.color = Header.style.color;
             ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
             ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
             ButtonLink.appendChild( ButtonText );
 
             Button.appendChild( document.createTextNode( hasClass(Header, "inline-button") ? " [" : "[" ) );
             Button.appendChild( ButtonLink );
             Button.appendChild( document.createTextNode( "]" ) );
 
             if ( hasClass(Header, "inline-button") ) {
                 Header.appendChild( Button );
             } else {
                 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 );

/* Hidden blocks ***********************************************************
 *
 * Description: Similar to collapsible tables, hidden blocks' visibility can
 *              be toggled on and off.
 */
function toggleHiddenBlock(blockIndex)
{
  var Button = document.getElementById("toggleBlockButton" + blockIndex);
  var Block = document.getElementById("hiddenBlock" + blockIndex);

  if (!Block || !Button) {
    return false;
  }

  if (Button.firstChild.data == collapseCaption) {
    Block.style.display = "none";
    Button.firstChild.data = expandCaption;
  } else {
    Block.style.display = "block";
    Button.firstChild.data = collapseCaption;
  }
}

function createShowBlockButtons()
{
  var blockIndex = 0;
  var Blocks = document.getElementsByTagName("div");

  for (var i = 0; i < Blocks.length; i++) {
    if (hasClass(Blocks[i], "hidden-block" ) ) {
      var Hint = Blocks[i].getElementsByTagName("span")[0];
      if (!Hint) continue;
      var HiddenBlock = Blocks[i].getElementsByTagName("div")[0];
      if (!HiddenBlock) continue;

      HiddenBlock.setAttribute("id", "hiddenBlock" + blockIndex);

      var Button     = document.createElement("span");
      var ButtonLink = document.createElement("a");
      var ButtonText = document.createTextNode(collapseCaption);

      ButtonLink.style.color = Hint.style.color;
      ButtonLink.setAttribute("id", "toggleBlockButton" + blockIndex);
      ButtonLink.setAttribute("href", "javascript:toggleHiddenBlock(" + blockIndex + ");");
      ButtonLink.appendChild(ButtonText);

      Button.appendChild(document.createTextNode("["));
      Button.appendChild(ButtonLink);
      Button.appendChild(document.createTextNode("]"));

      Blocks[i].insertBefore(Button, HiddenBlock);
      blockIndex++;
    }
  }

  for (var i = 0; i < blockIndex; i++ ) {
    toggleHiddenBlock(i);
  }
}

addOnloadHook(createShowBlockButtons);

/* Change Watch URLs ***********************************************************
 *
 * Description: The format of watch URLs on this wiki is different from the
 * standard format.  Adjust the Ajax code to accommodate this.
 */

function changeWatchURLs() {
    wgAjaxWatch.setHref = function( string ) { 
        for( i = 0; i < wgAjaxWatch.watchLinks.length; i++ ) { 
            if( string == 'watch' ) { 
                wgAjaxWatch.watchLinks[i].href = wgAjaxWatch.watchLinks[i].href
                    .replace( /\/unwatch\//, '/watch/' );
            } else if( string == 'unwatch' ) { 
                wgAjaxWatch.watchLinks[i].href = wgAjaxWatch.watchLinks[i].href
                    .replace( /\/watch\//, '/unwatch/' );
            }
        }
    }
}

addOnloadHook( changeWatchURLs );

/** Extra toolbar options ******************************************************
  *
  *  Description: UNDOCUMENTED
  *  Copied from: [[wikipedia:MediaWiki:Common.js]]
  */
// To disable this script, add <code>mwCustomEditButtons = [];<code> to [[Special:Mypage/monobook.js]]

if (mwCustomEditButtons) {
  mwCustomEditButtons[mwCustomEditButtons.length] = {
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png",
    "speedTip": "Redirect",
    "tagOpen": "#REDIRECT [[",
    "tagClose": "]]",
    "sampleText": "Insert text"
  };
  mwCustomEditButtons[mwCustomEditButtons.length] = {
    "imageFile": "/w/images/Button_uscript.png",
    "speedTip": "UScript code",
    "tagOpen": "<uscript>",
    "tagClose": "</uscript>",
    "sampleText": "Insert code"
  };

}

/* </source> */