MediaWiki:Common.js

3D Game Comparison - Game vs. game. No hype; just facts.™

Revision as of 22:36, 14 February 2010 by Eep² (t|c)
Jump to: navigation, search

/*

Contents

Test if an element has a certain class

*
* Description: Uses regular expressions and caching for better performance.
* Maintainers: w:User:Mike Dillon, w:User:R. Koot, w: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
*               w:Wikipedia:NavFrame.
*  Maintainers: w:User:R. Koot
*/

var autoCollapse = 2; var collapseCaption = "—"; var expandCaption = "+";

function collapseTable( tableIndex ) {

   var Button = document.getElementById( "collapseButton" + tableIndex );
   var Table = document.getElementById( "collapsibleTable" + tableIndex );
   if ( !Table || !Button ) {
       return false;
   }
   var Rows = Table.getElementsByTagName( "tr" ); 
   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" ) ) {
           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.setAttribute( "id", "collapseButton" + tableIndex );
           ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
           ButtonLink.appendChild( ButtonText );
           Button.appendChild( document.createTextNode( "[" ) );
           Button.appendChild( ButtonLink );
           Button.appendChild( document.createTextNode( "]" ) );
           var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
           /* 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++ ) {
       if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
           collapseTable( i );
       }
   }

}

addOnloadHook( createCollapseButtons );

/*

Dynamic Navigation Bars (experimental)

*
*  Description: See w: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 = 'inline';
          }
          if (hasClass(NavChild, 'NavContent')) {
              NavChild.style.display = 'inline';
          }
      }
  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 );

/*

Extra toolbar options

*
*  Description: UNDOCUMENTED
*  Maintainers: w:User:MarkS?, w:User:Voice of All, w:User:R. Koot
*/

//This is a modified copy of a script by User:MarkS for extra features added by User:Voice of All. // This is based on the original code on w:Wikipedia:Tools/Editing tools // To disable this script, add mwCustomEditButtons = [];<code> to Special:Mypage/monobook.js

if (mwCustomEditButtons) {

 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_headline3.png",
"speedTip": "level 3 headline (

)", "tagOpen": "\n===", "tagClose": "===", "sampleText": "text"}; mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "Button_see_also.png", "speedTip": "see also", "tagOpen": "==See also==\n* [[", "tagClose": "]]", "sampleText": "article"}; mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "Button_category03.png", "speedTip": "category", "tagOpen": "[[cat:", "tagClose": "]]", "sampleText": "category"}; mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "Button_redirect.png", "speedTip": "redirect", "tagOpen": "#redirect[[", "tagClose": "]]", "sampleText": "Common.js"}; mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "Tt_icon.png", "speedTip": "teletype (monospace) text", "tagOpen": "", "tagClose": "", "sampleText": "teletype text"}; mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "Button_pre.png", "speedTip": "preformatted text", "tagOpen": "
",
    "tagClose": "
",
   "sampleText": "preformatted text"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_strike.png",
   "speedTip": "strikethrough text",
   "tagOpen": "",
   "tagClose": "",
   "sampleText": "strikethrough text"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_enter.png",
   "speedTip": "line break",
   "tagOpen": "
", "tagClose": "", "sampleText": ""};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_center.png",
   "speedTip": "center text",
"tagOpen": '
', "tagClose": "
",
   "sampleText": "centered text"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_upper_letter.png",
   "speedTip": "superscript text",
   "tagOpen": "",
   "tagClose": "",
   "sampleText": "superscript text"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_lower_letter.png",
   "speedTip": "subscript text",
   "tagOpen": "",
   "tagClose": "",
   "sampleText": "subscript text"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_small.png",
   "speedTip": "small text",
   "tagOpen": "",
   "tagClose": "",
   "sampleText": "small text"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_big.png",
   "speedTip": "big text",
   "tagOpen": "",
   "tagClose": "",
   "sampleText": "big text"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_blockquote.png",
   "speedTip": "blockquote",
"tagOpen": "
\n", "tagClose": "\n
",
   "sampleText": "block quote"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_hide_comment.png",
   "speedTip": "comment",
   "tagOpen": "",
   "sampleText": "comment"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_advanced_image.png",
   "speedTip": "image (advanced)",
   "tagOpen": "[[Image:",
   "tagClose": "|thumb|right|px|Caption]]",
   "sampleText": "image.ext"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_gallery.png",
   "speedTip": "gallery",
"tagOpen": "\n",
   "sampleText": "Image:Example.jpg|Caption1\nImage:Example.jpg|Caption2"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_insert_table.png",
   "speedTip": "table",
   "tagOpen": '{| class=sortable\n|-\n',
   "tagClose": "\n|}",
   "sampleText": "!header 1 !!header 2 !!header 3\n|-\n| row 1, cell 1 || row 1, cell 2 || row 1, cell 3\n|-\n| row 2, cell 1 || row 2, cell 2 || row 2, cell 3"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "TableStart.png",
   "speedTip": "table start",
   "tagOpen": '{|',
   "tagClose": "",
   "sampleText": ""};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "TableRow.png",
   "speedTip": "table row",
   "tagOpen": '|-',
   "tagClose": "",
   "sampleText": ""};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "TableCell.png",
   "speedTip": "table cell",
   "tagOpen": '|',
   "tagClose": "",
   "sampleText": ""};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "TableEnd.png",
   "speedTip": "table end",
   "tagOpen": "",
   "tagClose": '|}',
   "sampleText": ""};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_plantilla.png",
   "speedTip": "template",
   "tagOpen": "{{",
   "tagClose": "}}",
   "sampleText": "template"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_substitute.png",
   "speedTip": "substitute template",
   "tagOpen": "{{subst:",
   "tagClose": "}}",
   "sampleText": "template"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_no_include.png",
   "speedTip": "noinclude",
   "tagOpen": "",
   "tagClose": "",
   "sampleText": "text"};
 mwCustomEditButtons[mwCustomEditButtons.length] = {
   "imageFile": "Button_include.png",
   "speedTip": "includeonly",
   "tagOpen": "",
   "sampleText": "text"};
}

Personal tools