v50 Steam/Premium information for editors
  • v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
  • Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.

Difference between revisions of "MediaWiki:Common.js"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
m (Reverted edits by Briess (Talk) to last revision by Senso)
 
(75 intermediate revisions by 6 users not shown)
Line 13: Line 13:
 
     }
 
     }
 
     importedScripts[page] = true;
 
     importedScripts[page] = true;
     var url = wgScriptPath
+
     var url = mw.config.get('wgScriptPath')
 
             + '/index.php?title='
 
             + '/index.php?title='
 
             + encodeURIComponent( page.replace( / /g, '_' ) )
 
             + encodeURIComponent( page.replace( / /g, '_' ) )
Line 22: Line 22:
 
     document.getElementsByTagName( 'head' )[0].appendChild( scriptElem );
 
     document.getElementsByTagName( 'head' )[0].appendChild( scriptElem );
 
  }
 
  }
+
 
 
  function importStylesheet( page ) {
 
  function importStylesheet( page ) {
 
     var sheet = '@import "'
 
     var sheet = '@import "'
               + wgScriptPath
+
               + mw.config.get('wgScriptPath')
 
               + '/index.php?title='
 
               + '/index.php?title='
 
               + encodeURIComponent( page.replace( / /g, '_' ) )
 
               + encodeURIComponent( page.replace( / /g, '_' ) )
               + '&action=raw&ctype=text/css";'
+
               + '&action=raw&ctype=text/css";';
 
     var styleElem = document.createElement( 'style' );
 
     var styleElem = document.createElement( 'style' );
 
     styleElem.setAttribute( 'type' , 'text/css' );
 
     styleElem.setAttribute( 'type' , 'text/css' );
Line 34: Line 34:
 
     document.getElementsByTagName( 'head' )[0].appendChild( styleElem );
 
     document.getElementsByTagName( 'head' )[0].appendChild( styleElem );
 
  }
 
  }
+
 
 
  /* Test if an element has a certain class **************************************
 
  /* Test if an element has a certain class **************************************
 
   *
 
   *
Line 47: Line 47:
 
     };
 
     };
 
  })();
 
  })();
+
 
/** Internet Explorer bug fix **************************************************
 
  *
 
  *  Description: UNDOCUMENTED
 
  *  Maintainers: [[User:Tom-]]?
 
  */
 
 
if (window.showModalDialog && document.compatMode && document.compatMode == "CSS1Compat" && navigator.appName == "Microsoft Internet Explorer")
 
{
 
  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);
 
  attachEvent("onresize", fixIEScroll);
 
}
 
 
/** Interwiki links to featured articles ***************************************
 
  *
 
  *  Description: Highlights interwiki links to featured articles (or
 
  *              equivalents) by changing the bullet before the interwiki link
 
  *              into a star.
 
  *  Maintainers: [[User:R. Koot]]
 
  */
 
 
function LinkFA()
 
{
 
    if ( document.getElementById( "p-lang" ) ) {
 
        var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );
 
 
        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
 
            if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) {
 
                InterwikiLinks[i].className += " FA"
 
                InterwikiLinks[i].title = "This is a featured article in another language.";
 
            }
 
        }
 
    }
 
}
 
 
addOnloadHook( LinkFA );
 
 
 
  /** Collapsible tables *********************************************************
 
  /** Collapsible tables *********************************************************
 
   *
 
   *
Line 139: Line 86:
 
  {
 
  {
 
     var tableIndex = 0;
 
     var tableIndex = 0;
     var NavigationBoxes = new Object();
+
     var NavigationBoxes = {};
 
     var Tables = document.getElementsByTagName( "table" );
 
     var Tables = document.getElementsByTagName( "table" );
 
   
 
   
Line 183: Line 130:
 
         }
 
         }
 
     }
 
     }
 +
    // Add text selection to gamedata infoboxes
 +
$('.infobox.gamedata').each(function(i,e){
 +
var ospan=$(e).find('th span:nth(0)'),
 +
span=$('<span>').insertAfter(ospan).attr('style',ospan.attr('style'));
 +
ospan.css({width:'auto',paddingLeft:5});
 +
$('<a>').attr('href','#').click(function(v){
 +
v.preventDefault();
 +
SelectText($(this).parents('.infobox.gamedata').find('.gamedata-content')[0]);
 +
}).text('Select all').appendTo(span);
 +
span.append(']').prepend('[');
 +
});
 +
 
  }
 
  }
+
 
addOnloadHook( createCollapseButtons );
+
$(createCollapseButtons);
+
 
/** Dynamic Navigation Bars (experimental) *************************************
+
/*******************
  *
+
********************
  * Description: See [[Wikipedia:NavFrame]].
+
DF Wiki-specific scripts
  * Maintainers: UNMAINTAINED
+
********************
  */
+
********************/
+
 
  // set up the words in your language
+
/************* Sidebar stuff *************/
  var NavigationBarHide = '[' + collapseCaption + ']';
+
 
  var NavigationBarShow = '[' + expandCaption + ']';
+
function addSidebarLink(title, page, sidebar, position){
+
$('<li>').append(
  // shows and hides content and picture (if available) of navigation bars
+
$('<a>').attr('href', encodeURIComponent(page)).text(title)
  // Parameters:
+
).insertBefore('#mw-panel ul:nth('+sidebar+') li:nth('+position+')');
  //    indexNavigationBar: the index of navigation bar to be toggled
+
}
  function toggleNavigationBar(indexNavigationBar)
+
 
  {
+
// ***** Masterwork sidebar links
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
+
if(mw.config.get('wgCanonicalNamespace').toLowerCase().indexOf('masterwork')==0){
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
+
  addSidebarLink('Main Page (MDF)', 'Masterwork:Main Page', 0, 1);
+
  addSidebarLink('Community portal (MDF)', 'Masterwork:Community portal', 0, 4);
    if (!NavFrame || !NavToggle) {
+
  addSidebarLink('Random page (MDF)', 'Special:Random/Masterwork' , 0, 8);
        return false;
+
}
    }
+
 
+
// ***** Older version links
    // if shown now
+
var vns = mw.config.get('wgCanonicalNamespace').replace(/_talk/ig, '');
    if (NavToggle.firstChild.data == NavigationBarHide) {
+
if(['23a', '40d', 'v0.31', 'v0.34'].indexOf(vns)>=0) addSidebarLink(vns + ' Main Page', vns+':Main_Page', 0,1);
        for (
+
 
                var NavChild = NavFrame.firstChild;
+
// ***** Color [tags] in sidebar
                NavChild != null;
+
$('#mw-panel li a').map(function(i,e){
                NavChild = NavChild.nextSibling
+
e=$(e);
            ) {
+
e.html(e.html().replace(/\[([^\]]+)\]/g, function(m,a){
            if ( hasClass( NavChild, 'NavPic' ) ) {
+
return '<span style="color:white;background-color:red;font-size:80%;padding:1px">'+a.toUpperCase()+'</span>';
                NavChild.style.display = 'none';
+
}));
            }
+
});
            if ( hasClass( NavChild, 'NavContent') ) {
+
 
                NavChild.style.display = 'none';
+
/*********** Misc **********/
            }
+
 
        }
+
// ***** Text selection
    NavToggle.firstChild.data = NavigationBarShow;
+
function SelectText(element) {
+
var range, selection;
    // if hidden now
+
if (document.body.createTextRange) {
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
+
range = document.body.createTextRange();  
        for (
+
range.moveToElementText(element);  
                var NavChild = NavFrame.firstChild;
+
range.select();
                NavChild != null;
+
}
                NavChild = NavChild.nextSibling
+
else if (window.getSelection) {
            ) {
+
selection = window.getSelection();  
            if (hasClass(NavChild, 'NavPic')) {
+
range = document.createRange();  
                NavChild.style.display = 'block';
+
range.selectNodeContents(element);
            }
+
selection.removeAllRanges();  
            if (hasClass(NavChild, 'NavContent')) {
+
selection.addRange(range);
                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 );
 
 
/** Main Page layout fixes *********************************************************
 
  *
 
  *  Description:        Various layout fixes for the main page, including an
 
  *                      additional link to the complete list of languages available
 
  *                      and the renaming of the 'Article' to to 'Main Page'.
 
  *  Maintainers:        [[User:AzaToth]], [[User:R. Koot]]
 
  */
 
 
function mainPageRenameNamespaceTab() {
 
    try {
 
        var Node = document.getElementById( 'ca-nstab-main' ).firstChild;
 
        if ( Node.textContent ) {      // Per DOM Level 3
 
            Node.textContent = 'Main Page';
 
        } else if ( Node.innerText ) { // IE doesn't handle .textContent
 
            Node.innerText = 'Main Page';
 
        } else {                      // Fallback
 
            Node.replaceChild( Node.firstChild, document.createTextNode( 'Main Page' ) );
 
        }
 
    } catch(e) {
 
        // bailing out!
 
    }
 
}
 
 
function mainPageAppendCompleteListLink() {
 
    try {
 
        var node = document.getElementById( "p-lang" )
 
                            .getElementsByTagName('div')[0]
 
                            .getElementsByTagName('ul')[0];
 
 
        var aNode = document.createElement( 'a' );
 
        var liNode = document.createElement( 'li' );
 
 
        aNode.appendChild( document.createTextNode( 'Complete list' ) );
 
        aNode.setAttribute( 'href' , 'http://meta.wikimedia.org/wiki/List_of_Wikipedias' );
 
        liNode.appendChild( aNode );
 
        liNode.className = 'interwiki-completelist';
 
        node.appendChild( liNode );
 
      } catch(e) {
 
        // lets just ignore what's happened
 
        return;
 
    }
 
}
 
 
if ( wgTitle == 'Main Page' && ( wgNamespaceNumber == 0 || wgNamespaceNumber == 1 ) ) {
 
        addOnloadHook( mainPageRenameNamespaceTab );
 
}
 
 
if ( wgTitle == 'Main Page' && wgNamespaceNumber == 0 ) {
 
        addOnloadHook( mainPageAppendCompleteListLink );
 
}
 
 
/** Extra toolbar options ****************************************************** <nowiki>
 
  *
 
  *  Description: UNDOCUMENTED
 
  *  Maintainers: [[User:MarkS]]?, [[User:Voice of All]], [[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 Wikipedia:Tools/Editing tools
 
// 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": "http://upload.wikimedia.org/wikipedia/en/c/c9/Button_strike.png",
 
    "speedTip": "Strike",
 
    "tagOpen": "<s>",
 
    "tagClose": "</s>",
 
    "sampleText": "Strike-through text"};
 
 
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/13/Button_enter.png",
 
    "speedTip": "Line break",
 
    "tagOpen": "<br />",
 
    "tagClose": "",
 
    "sampleText": ""};
 
 
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/8/80/Button_upper_letter.png",
 
    "speedTip": "Superscript",
 
    "tagOpen": "<sup>",
 
    "tagClose": "</sup>",
 
    "sampleText": "Superscript text"};
 
 
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/7/70/Button_lower_letter.png",
 
    "speedTip": "Subscript",
 
    "tagOpen": "<sub>",
 
    "tagClose": "</sub>",
 
    "sampleText": "Subscript text"};
 
 
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/5/58/Button_small.png",
 
    "speedTip": "Small",
 
    "tagOpen": "<small>",
 
    "tagClose": "</small>",
 
    "sampleText": "Small Text"};
 
 
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png",
 
    "speedTip": "Insert hidden Comment",
 
    "tagOpen": "<!-- ",
 
    "tagClose": " -->",
 
    "sampleText": "Comment"};
 
 
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/12/Button_gallery.png",
 
    "speedTip": "Insert a picture gallery",
 
    "tagOpen": "\n<gallery>\n",
 
    "tagClose": "\n</gallery>",
 
    "sampleText": "Image:Example.jpg|Caption1\nImage:Example.jpg|Caption2"};
 
 
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png",
 
    "speedTip": "Insert block of quoted text",
 
    "tagOpen": "<blockquote>\n",
 
    "tagClose": "\n</blockquote>",
 
    "sampleText": "Block quote"};
 
 
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/6/60/Button_insert_table.png",
 
    "speedTip": "Insert a table",
 
    "tagOpen": '{| class="wikitable"\n|-\n',
 
    "tagClose": "\n|}",
 
    "sampleText": "! header 1\n! header 2\n! header 3\n|-\n| row 1, cell 1\n| row 1, cell 2\n| row 1, cell 3\n|-\n| row 2, cell 1\n| row 2, cell 2\n| row 2, cell 3"};
 
}
 
 
/*</nowiki>*/
 
 
/** pageview counter ***********************************************************
 
  *
 
  *  Description: Please talk to de:User:LeonWeber before changing anything or
 
  *              if there are any issues with that.
 
  *  Maintainers: [[:de:User:LeonWeber]]?
 
  */
 
 
  // this should be adjusted to a good value.
 
  // BE CAREFUL, you will break zedler if it's too low!
 
  // And then DaB. will kill Leon :-(
 
  var disable_counter = 0;
 
  var counter_factor = 6000;
 
 
  function pgcounter_setup()
 
  {
 
  if(disable_counter == 0)
 
  {
 
  var url = window.location.href;
 
  if(Math.floor(Math.random()*counter_factor)==42)  // the probability thing
 
  {
 
  if(wgIsArticle==true || wgArticleId==0) // do not count history pages etc.
 
  {
 
  var pgcountNs = wgCanonicalNamespace;
 
  if(wgCanonicalNamespace=="")
 
  {
 
  pgcountNs = "0";
 
  }
 
  var cnt_url = "http://pgcount.wikimedia.de/index.png?ns=" + pgcountNs + "&title=" + encodeURI(wgTitle) + "&factor=" + counter_factor +"&wiki=enwiki";
 
  var img = new Image();
 
  img.src = cnt_url;
 
  }
 
  }
 
  }
 
  }
 
  // Do not use aOnloadFunctions[aOnloadFunctions.length] = pgcounter_setup;, some browsers don't like that.
 
  pgcounter_setup();
 
 
/** "Technical restrictions" title fix *****************************************
 
*
 
* Description:
 
* Maintainers: User:Interiot, User:Mets501, User:Freakofnurture
 
*/
 
//
 
// For pages that have something like Template:Lowercase, replace the title, but only if it is cut-and-pasteable as a valid wikilink.
 
// (for instance iPod's title is updated. But [[C#]] is not an equivalent
 
// wikilink, so [[C Sharp]] doesn't have its main title changed)
 
// Likewise for users who have selected the U.K. date format ("1 March") the 
 
// titles of day-of-the-year articles will appear in that style. Users with any
 
// other date setting are not affected.
 
//
 
// The function looks for a banner like this:
 
// &lt;div id="RealTitleBanner"&gt;  ... &lt;span id="RealTitle"&gt;title&lt;/span&gt; ... &lt;/div&gt;
 
// An element with id=DisableRealTitle disables the function.
 
//
 
var disableRealTitle = 0; // users can set disableRealTitle = 1 locally to disable.
 
if (wgIsArticle) { // don't display the RealTitle when editing, since it is apparently inconsistent (doesn't show when editing sections, doesn't show when not previewing)
 
  addOnloadHook(function() {
 
    try {
 
        var realTitleBanner = document.getElementById("RealTitleBanner");
 
        if (realTitleBanner && !document.getElementById("DisableRealTitle") && !disableRealTitle ) {
 
            var realTitle = document.getElementById("RealTitle");
 
            if (realTitle) {
 
                var realTitleHTML = realTitle.innerHTML;
 
                realTitleText = pickUpText(realTitle);
 
 
                var isPasteable = 0;
 
                //var containsHTML = /</.test(realTitleHTML);    // contains ANY HTML
 
                var containsTooMuchHTML = /</.test( realTitleHTML.replace(/<\/?(sub|sup|small|big)>/gi, "") ); // contains HTML that will be ignored when cut-n-pasted as a wikilink
 
                // calculate whether the title is pasteable
 
                var verifyTitle = realTitleText.replace(/^ +/, "");      // trim left spaces
 
                verifyTitle = verifyTitle.charAt(0).toUpperCase() + verifyTitle.substring(1, verifyTitle.length);    // uppercase first character
 
 
                // if the namespace prefix is there, remove it on our verification copy. If it isn't there, add it to the original realValue copy.
 
                if (wgNamespaceNumber != 0) {
 
                    if (wgCanonicalNamespace == verifyTitle.substr(0, wgCanonicalNamespace.length).replace(/ /g, "_") && verifyTitle.charAt(wgCanonicalNamespace.length) == ":") {
 
                        verifyTitle = verifyTitle.substr(wgCanonicalNamespace.length + 1);
 
                    } else {
 
                        realTitleText = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleText;
 
                        realTitleHTML = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleHTML;
 
                    }
 
                }
 
 
                // verify whether wgTitle matches
 
                verifyTitle = verifyTitle.replace(/[\s_]+/g, " ");      // underscores and multiple spaces to single spaces
 
                verifyTitle = verifyTitle.replace(/^\s+/, "").replace(/\s+$/, "");        // trim left and right spaces
 
                verifyTitle = verifyTitle.charAt(0).toUpperCase() + verifyTitle.substring(1, verifyTitle.length);    // uppercase first character
 
                if ( (verifyTitle == wgTitle) || (verifyTitle == wgTitle.replace(/^(.+)?(January|February|March|April|May|June|July|August|September|October|November|December)\s+([12]?[0-9]|3[0123])([^\d].*)?$/g, "$1$3 $2$4") )) isPasteable = 1;
 
                var h1 = document.getElementsByTagName("h1")[0];
 
                if (h1 && isPasteable) {
 
                    h1.innerHTML = containsTooMuchHTML ? realTitleText : realTitleHTML;
 
                    if (!containsTooMuchHTML)
 
                        realTitleBanner.style.display = "none";
 
                }
 
                document.title = realTitleText + " - Wikipedia, the free encyclopedia";
 
            }
 
        }
 
    } catch (e) {
 
        /* Something went wrong. */
 
    }
 
  });
 
}
 
 
// similar to innerHTML, but only returns the text portions of the insides, excludes HTML
 
function pickUpText(aParentElement) {
 
var str = "";
 
 
function pickUpTextInternal(aElement) {
 
  var child = aElement.firstChild;
 
  while (child) {
 
  if (child.nodeType == 1)    // ELEMENT_NODE
 
    pickUpTextInternal(child);
 
  else if (child.nodeType == 3)  // TEXT_NODE
 
    str += child.nodeValue;
 
 
  child = child.nextSibling;
 
  }
 
}
 
 
  pickUpTextInternal(aParentElement);
 
  return str;
 
}
 
 
//fix edit summary prompt for undo
 
//this code fixes the fact that the undo function combined with the "no edit summary prompter" causes problems if leaving the
 
//edit summary unchanged
 
//this was added by [[User:Deskana]], code by [[User:Tra]]
 
addOnloadHook(function () {
 
  if (document.location.search.indexOf("undo=") != -1
 
  && document.getElementsByName('wpAutoSummary')[0]) {
 
    document.getElementsByName('wpAutoSummary')[0].value='';
 
  }
 
})
 
 
/** Add dismiss button to watchlist-message *************************************
 
  *
 
  *  Description: Hide the watchlist message for one week.
 
  *  Maintainers: [[User:Ruud Koot|Ruud Koot]]
 
  */
 
 
function addDismissButton() {
 
    var watchlistMessage = document.getElementById("watchlist-message");
 
    if ( watchlistMessage == null ) return;
 
 
    if ( document.cookie.indexOf( "hidewatchlistmessage=yes" ) != -1 ) {
 
        watchlistMessage.style.display = "none";
 
    }
 
 
    var Button    = document.createElement( "span" );
 
    var ButtonLink = document.createElement( "a" );
 
    var ButtonText = document.createTextNode( "dismiss" );
 
 
    ButtonLink.setAttribute( "id", "dismissButton" );
 
    ButtonLink.setAttribute( "href", "javascript:dismissWatchlistMessage();" );
 
    ButtonLink.setAttribute( "title", "Hide this message for one week" );
 
    ButtonLink.appendChild( ButtonText );
 
 
    Button.appendChild( document.createTextNode( "[" ) );
 
    Button.appendChild( ButtonLink );
 
    Button.appendChild( document.createTextNode( "]" ) );
 
 
    watchlistMessage.appendChild( Button );
 
}
 
 
function dismissWatchlistMessage() {
 
    var e = new Date();
 
    e.setTime( e.getTime() + (7*24*60*60*1000) );
 
    document.cookie = "hidewatchlistmessage=yes; expires=" + e.toGMTString() + "; path=/";
 
    var watchlistMessage = document.getElementById("watchlist-message");
 
    watchlistMessage.style.display = "none";
 
}
 
 
addOnloadHook( addDismissButton );
 
 
/** Numeric sorting ***************************************************
 
  *
 
  *  Description: Fixes a bug (part of [[bugzilla:8115]])
 
  *  in http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js
 
  *  regarding [[Help:Sorting|table sorting]]:
 
  *  it allows sorting of numbers with more than one comma (thousands separator).
 
  *  Maintainer: [[User:Patrick|Patrick]]
 
  */
 
function ts_parseFloat(num) {
 
if (!num) return 0;
 
num = parseFloat(num.replace(/,/g, ""));
 
return (isNaN(num) ? 0 : num);
 
}
 
 
/** Main Page deletion image *******************************************************
 
  *
 
  *  Description: If the Main Page does not exist (i.e., it's been deleted) then insert an image
 
  *              instead of showing the "page does not exist" text.
 
  *  Created by: [[User:Mark]], with invaluable help from [[User:Pathoschild]]
 
  */
 
 
function MainPageDeletedImage() {
 
  try {
 
 
    //If the article does not exist and it is the Main Page, proceed
 
    if ( document.getElementById( "noarticletext" ) && wgTitle == 'Main Page' ) {
 
 
      // Insert a protected commons image at the end of the document explaining it.
 
      var contentbox = document.getElementById('content');
 
      var newimg = document.createElement('img');
 
      newimg.setAttribute('src','http://upload.wikimedia.org/wikipedia/commons/9/99/WikipediaTechnical.png');
 
      contentbox.appendChild(newimg);
 
 
      // Hide the article-does-not-exist text
 
      var NoArticleMessage = document.getElementById('noarticletext');
 
      NoArticleMessage.style.display="none";
 
 
      // Hide the edit button
 
      var EditThisPageButton = document.getElementById('ca-edit');
 
      EditThisPageButton.style.display="none";
 
    }
 
  } catch(e) {
 
      // In case it does not work, do nothing
 
      return;
 
  }
 
}
 
 
addOnloadHook( MainPageDeletedImage );
 
 
/** Change Special:Search to use a drop-down menu *******************************************************
 
  *
 
  *  Description: Change Special:Search to use a drop-down menu, with the default being
 
  *              the internal MediaWiki engine
 
  *  Created and maintained by: [[User:Gracenotes]]
 
  */
 
 
if (wgPageName == "Special:Search") {
 
        var searchEngines = [];
 
        addOnloadHook(SpecialSearchEnhanced);
 
}
 
 
function SpecialSearchEnhanced() {
 
        var createOption = function(site, action, mainQ, addQ, addV) {
 
                var opt = document.createElement('option');
 
                opt.appendChild(document.createTextNode(site));
 
                searchEngines[searchEngines.length] = [action, mainQ, addQ, addV];
 
                return opt;
 
        }
 
        var searchForm = document.forms['search'];
 
        var selectBox = document.createElement('select');
 
        selectBox.id = 'searchEngine';
 
        searchForm.onsubmit = function() {
 
                var optSelected = searchEngines[document.getElementById('searchEngine').selectedIndex];
 
                searchForm.action = optSelected[0];
 
                searchForm.lsearchbox.name = optSelected[1];
 
                searchForm.title.value = optSelected[3];
 
                searchForm.title.name = optSelected[2];
 
        }
 
        selectBox.appendChild(createOption('MediaWiki search', wgScriptPath + '/index.php', 'search', 'title', 'Special:Search'));
 
        selectBox.appendChild(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikipedia.org'));
 
        selectBox.appendChild(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikipedia.org'));
 
        selectBox.appendChild(createOption('Windows Live', 'http://search.live.com/results.aspx', 'q', 'q1', 'site:http://en.wikipedia.org'));
 
        selectBox.appendChild(createOption('Wikiwix', 'http://www.wikiwix.com/', 'action', 'lang', 'en'));
 
        selectBox.appendChild(createOption('Exalead', 'http://www.exalead.com/wikipedia/results', 'q', 'language', 'en'));
 
        searchForm.lsearchbox.style.marginLeft = '0px';
 
        var lStat = document.getElementById('loadStatus');
 
        lStat.parentNode.insertBefore(selectBox, lStat);
 
}
 
 
/** Geo-targeted watchlist notice *******************************************************
 
  *
 
  *  Description: Allows for geographic targeting of watchlist notices. See [[Wikipedia:Geonotice]] for more information.
 
  *  Created by: [[User:Gmaxwell]]
 
  */
 
 
if (wgPageName == "Special:Watchlist")
 
    addOnloadHook((function (){document.write('<script type="text/javascript" src="http://tools.wikimedia.de/~gmaxwell/cgi-bin/geonotice.py"><\/script>')}));
 
 
/** Sysop Javascript *******************************************************
 
*
 
*  Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]].
 
*  Created by: [[User:^demon]]
 
*/
 
function sysopFunctions() {
 
if ( wgUserGroups && !window.disableSysopJS ) {
 
for ( var g = 0; g < wgUserGroups.length; ++g ) {
 
if ( wgUserGroups[g] == "sysop" ) {
 
importScript( "MediaWiki:Sysop.js" );
 
break;
 
}
 
}
 
 
}
 
}
 
}
 
}
 
addOnloadHook( sysopFunctions );
 
 
/** WikiMiniAtlas *******************************************************
 
  *
 
  *  Description: WikiMiniAtlas is a popup click and drag world map.
 
  *              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
 
  *              The script itself is located on meta because it is used by many projects.
 
  *              See [[Meta:WikiMiniAtlas]] for more information.
 
  *  Created by: [[User:Dschwen]]
 
  */
 
 
document.write('<script type="text/javascript" src="'
 
    + 'http://meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js'
 
    + '&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400"></script>');
 
 
/** IE 6 Z-index bug workaround for anonnotice **************************
 
  *
 
  *  Description: This implements a work around for the Z-index bug found in Internet Explorer.
 
  *              It correctly places the anon notice on the page, even under IE6.
 
  *              See this Google search for more information about the bug:
 
  *              http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=q74&q=z-index+ie6+bug&btnG=Search
 
  *  Created by: [[User:Gmaxwell]]
 
  */
 
addOnloadHook((function (){
 
    if (wgUserName == null) {
 
 
        var messageEdu=new Array();
 
            messageEdu[0]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Researching_with_Wikipedia" title="Wikipedia:Researching with Wikipedia">Learn&nbsp;more&nbsp;about&nbsp;using&nbsp;Wikipedia&nbsp;for&nbsp;research</a>';
 
            messageEdu[1]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Ten_things_you_may_not_know_about_Wikipedia" title="Wikipedia:Ten things you may not know about Wikipedia">Ten&nbsp;things&nbsp;you&nbsp;may&nbsp;not&nbsp;know&nbsp;about&nbsp;Wikipedia</a>';
 
            messageEdu[2]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Ten_things_you_may_not_know_about_images_on_Wikipedia" title="Wikipedia:Ten things you may not know about images on Wikipedia">Ten&nbsp;things&nbsp;you&nbsp;may&nbsp;not&nbsp;know&nbsp;about&nbsp;images&nbsp;on&nbsp;Wikipedia</a>';
 
            messageEdu[3]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Citing_Wikipedia" title="Wikipedia:Citing Wikipedia">Learn&nbsp;more&nbsp;about&nbsp;citing&nbsp;Wikipedia</a>';
 
            messageEdu[4]='Have&nbsp;questions?&nbsp;<a href="http://en.wikipedia.org/wiki/Wikipedia:Questions" title="Wikipedia:Questions">Find&nbsp;out&nbsp;how&nbsp;to&nbsp;ask&nbsp;questions&nbsp;and&nbsp;get&nbsp;answers.</a>';
 
            messageEdu[5]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Basic_navigation" title="Wikipedia:Basic navigation">Find&nbsp;out&nbsp;more&nbsp;about&nbsp;navigating&nbsp;Wikipedia&nbsp;and&nbsp;finding&nbsp;information</a>';
 
            messageEdu[6]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Contributing_to_Wikipedia" title="Wikipedia:Contributing to Wikipedia">Interested&nbsp;in&nbsp;contributing&nbsp;to&nbsp;Wikipedia?</a>';
 
        var whichMessageEdu = Math.floor(Math.random()*(messageEdu.length));
 
 
  
    }
+
// ***** CP437 palette
}));
+
$.when($.ready, mw.loader.using('ext.wikiEditor')).then(function(){
+
   $('#wpTextbox1').wikiEditor('addToToolbar', {
/**  
+
     'section': 'characters',
  * Correctly handle PNG transparency in Internet Explorer 6.
+
     'pages': {
  * http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.
+
      'cp437': {
  *
+
         'layout': 'characters',
  * Adapted for Wikipedia by Remember_the_dot and Edokter.
+
         'label': 'CP437',
  * 
+
         'characters': ["\u263A", "\u263B", "\u2665", "\u2666", "\u2663", "\u2660", "\u2022", "\u25D8", "\u25CB", "\u25D9", "\u2642", "\u2640", "\u266A", "\u266B", "\u263C", "\u25BA", "\u25C4", "\u2195", "\u203C", "\u00B6", "\u00A7", "\u25AC", "\u21A8", "\u2191", "\u2193", "\u2192", "\u2190", "\u221F", "\u2194", "\u25B2", "\u25BC", "\u0020", "\u0021", "\u0022", "\u0023", "\u0024", "\u0025", "\u0026", "\u0027", "\u0028", "\u0029", "\u002A", "\u002B", "\u002C", "\u002D", "\u002E", "\u002F", "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039", "\u003A", "\u003B", "\u003C", "\u003D", "\u003E", "\u003F", "\u0040", "\u0041", "\u0042", "\u0043", "\u0044", "\u0045", "\u0046", "\u0047", "\u0048", "\u0049", "\u004A", "\u004B", "\u004C", "\u004D", "\u004E", "\u004F", "\u0050", "\u0051", "\u0052", "\u0053", "\u0054", "\u0055", "\u0056", "\u0057", "\u0058", "\u0059", "\u005A", "\u005B", "\u005C", "\u005D", "\u005E", "\u005F", "\u0060", "\u0061", "\u0062", "\u0063", "\u0064", "\u0065", "\u0066", "\u0067", "\u0068", "\u0069", "\u006A", "\u006B", "\u006C", "\u006D", "\u006E", "\u006F", "\u0070", "\u0071", "\u0072", "\u0073", "\u0074", "\u0075", "\u0076", "\u0077", "\u0078", "\u0079", "\u007A", "\u007B", "\u007C", "\u007D", "\u007E", "\u2302", "\u00C7", "\u00FC", "\u00E9", "\u00E2", "\u00E4", "\u00E0", "\u00E5", "\u00E7", "\u00EA", "\u00EB", "\u00E8", "\u00EF", "\u00EE", "\u00EC", "\u00C4", "\u00C5", "\u00C9", "\u00E6", "\u00C6", "\u00F4", "\u00F6", "\u00F2", "\u00FB", "\u00F9", "\u00FF", "\u00D6", "\u00DC", "\u00A2", "\u00A3", "\u00A5", "\u20A7", "\u0192", "\u00E1", "\u00ED", "\u00F3", "\u00FA", "\u00F1", "\u00D1", "\u00AA", "\u00BA", "\u00BF", "\u2310", "\u00AC", "\u00BD", "\u00BC", "\u00A1", "\u00AB", "\u00BB", "\u2591", "\u2592", "\u2593", "\u2502", "\u2524", "\u2561", "\u2562", "\u2556", "\u2555", "\u2563", "\u2551", "\u2557", "\u255D", "\u255C", "\u255B", "\u2510", "\u2514", "\u2534", "\u252C", "\u251C", "\u2500", "\u253C", "\u255E", "\u255F", "\u255A", "\u2554", "\u2569", "\u2566", "\u2560", "\u2550", "\u256C", "\u2567", "\u2568", "\u2564", "\u2565", "\u2559", "\u2558", "\u2552", "\u2553", "\u256B", "\u256A", "\u2518", "\u250C", "\u2588", "\u2584", "\u258C", "\u2590", "\u2580", "\u03B1", "\u00DF", "\u0393", "\u03C0", "\u03A3", "\u03C3", "\u00B5", "\u03C4", "\u03A6", "\u0398", "\u03A9", "\u03B4", "\u221E", "\u03C6", "\u03B5", "\u2229", "\u2261", "\u00B1", "\u2265", "\u2264", "\u2320", "\u2321", "\u00F7", "\u2248", "\u00B0", "\u2219", "\u00B7", "\u221A", "\u207F", "\u00B2", "\u25A0", "\u00A0"]
  * http://homepage.ntlworld.com/bobosola/pnginfo.htm states "This page contains more information for
+
      }
  * the curious or those who wish to amend the script for special needs", which I take as permission to
 
  * modify or adapt this script freely. I release my changes into the public domain.
 
   */ 
 
 
function PngFix()
 
{
 
     if (document.body.filters && !window.PngFixDisabled)
 
     {
 
        var documentImages = document.images
 
         var documentCreateElement = document.createElement
 
         var funcEncodeURI = encodeURI
 
 
         for (var i = 0; i < documentImages.length;)
 
        {
 
            var img = documentImages[i]
 
            var imgSrc = img.src
 
 
            if (imgSrc.substr(imgSrc.length - 3).toLowerCase() == "png" && !img.onclick)
 
            {
 
                if (img.useMap)
 
                {
 
                    img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + encodeURI(imgSrc) + "')"
 
                    img.src = "http://upload.wikimedia.org/wikipedia/commons/c/ce/Transparent.gif"
 
                    i++
 
                }
 
                else
 
                {
 
                    var outerSpan = documentCreateElement("span")
 
                    var innerSpan = documentCreateElement("span")
 
                    var outerSpanStyle = outerSpan.style
 
                    var innerSpanStyle = innerSpan.style
 
                    var imgCurrentStyle = img.currentStyle
 
 
                    outerSpan.id = img.id
 
                    outerSpan.title = img.title
 
                    outerSpan.className = img.className
 
                    outerSpanStyle.backgroundImage = imgCurrentStyle.backgroundImage
 
                    outerSpanStyle.borderWidth = imgCurrentStyle.borderWidth
 
                    outerSpanStyle.borderStyle = imgCurrentStyle.borderStyle
 
                    outerSpanStyle.borderColor = imgCurrentStyle.borderColor
 
                    outerSpanStyle.display = "inline-block"
 
                    outerSpanStyle.fontSize = "0"
 
                    outerSpanStyle.verticalAlign = "middle"
 
                    if (img.parentElement.href) outerSpanStyle.cursor = "hand"
 
 
                    innerSpanStyle.width = "1px"
 
                    innerSpanStyle.height = "1px"
 
                    innerSpanStyle.display = "inline-block"
 
                    innerSpanStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + funcEncodeURI(imgSrc) + "')"
 
 
                    outerSpan.appendChild(innerSpan)
 
                    img.parentNode.replaceChild(outerSpan, img)
 
                }
 
            }
 
            else
 
            {
 
                i++
 
            }
 
        }
 
 
     }
 
     }
}
+
  });
+
   $('.section-characters .index div:first').before($('.section-characters .index div[rel=cp437]'));
if (navigator.appName == "Microsoft Internet Explorer" && navigator.appVersion.substr(22, 1) == "6")
+
});
{
 
    window.attachEvent("onload", PngFix)
 
}
 
 
/**
 
   * Remove need for CSS hacks regarding MSIE and IPA.
 
  */
 
 
if(navigator.userAgent.indexOf("MSIE") != -1 && document.createStyleSheet) {
 
  document.createStyleSheet().addRule('.IPA', 'font-family: "Doulos SIL", "Charis SIL", Gentium, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode";');
 
}
 

Latest revision as of 03:54, 12 November 2022

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

/** Import module *************************************************************
  *
  *  Description: Includes a raw wiki page as javascript or CSS, 
  *               used for including user made modules.
  *  Maintainers: [[User:AzaToth]]
  */
 importedScripts = {}; // object keeping track of included scripts, so a script ain't included twice
 function importScript( page ) {
     if( importedScripts[page] ) {
         return;
     }
     importedScripts[page] = true;
     var url = mw.config.get('wgScriptPath')
             + '/index.php?title='
             + encodeURIComponent( page.replace( / /g, '_' ) )
             + '&action=raw&ctype=text/javascript';
     var scriptElem = document.createElement( 'script' );
     scriptElem.setAttribute( 'src' , url );
     scriptElem.setAttribute( 'type' , 'text/javascript' );
     document.getElementsByTagName( 'head' )[0].appendChild( scriptElem );
 }

 function importStylesheet( page ) {
     var sheet = '@import "'
               + mw.config.get('wgScriptPath')
               + '/index.php?title='
               + encodeURIComponent( page.replace( / /g, '_' ) )
               + '&action=raw&ctype=text/css";';
     var styleElem = document.createElement( 'style' );
     styleElem.setAttribute( 'type' , 'text/css' );
     styleElem.appendChild( document.createTextNode( sheet ) );
     document.getElementsByTagName( 'head' )[0].appendChild( styleElem );
 }

 /* 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 = {};
     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 );
         }
     }
    // Add text selection to gamedata infoboxes
	$('.infobox.gamedata').each(function(i,e){
		var ospan=$(e).find('th span:nth(0)'),
			span=$('<span>').insertAfter(ospan).attr('style',ospan.attr('style'));
		ospan.css({width:'auto',paddingLeft:5});
		$('<a>').attr('href','#').click(function(v){
			v.preventDefault();
			SelectText($(this).parents('.infobox.gamedata').find('.gamedata-content')[0]);
		}).text('Select all').appendTo(span);
		span.append(']').prepend('[');
	});

 }

$(createCollapseButtons);

/*******************
********************
DF Wiki-specific scripts
********************
********************/

/************* Sidebar stuff *************/

function addSidebarLink(title, page, sidebar, position){
	$('<li>').append(
		$('<a>').attr('href', encodeURIComponent(page)).text(title)
	).insertBefore('#mw-panel ul:nth('+sidebar+') li:nth('+position+')');
}

// ***** Masterwork sidebar links
if(mw.config.get('wgCanonicalNamespace').toLowerCase().indexOf('masterwork')==0){
  addSidebarLink('Main Page (MDF)', 'Masterwork:Main Page', 0, 1);
  addSidebarLink('Community portal (MDF)', 'Masterwork:Community portal', 0, 4);
  addSidebarLink('Random page (MDF)', 'Special:Random/Masterwork' , 0, 8);
}

// ***** Older version links
var vns = mw.config.get('wgCanonicalNamespace').replace(/_talk/ig, '');
if(['23a', '40d', 'v0.31', 'v0.34'].indexOf(vns)>=0) addSidebarLink(vns + ' Main Page', vns+':Main_Page', 0,1);

// ***** Color [tags] in sidebar
$('#mw-panel li a').map(function(i,e){
	e=$(e);
	e.html(e.html().replace(/\[([^\]]+)\]/g, function(m,a){
		return '<span style="color:white;background-color:red;font-size:80%;padding:1px">'+a.toUpperCase()+'</span>';
	}));
});

/*********** Misc **********/

// ***** Text selection
function SelectText(element) {
	var range, selection; 
	if (document.body.createTextRange) {
		range = document.body.createTextRange(); 
		range.moveToElementText(element); 
		range.select();
	} 
	else if (window.getSelection) {
		selection = window.getSelection(); 
		range = document.createRange(); 
		range.selectNodeContents(element); 
		selection.removeAllRanges(); 
		selection.addRange(range);
	}
}

// ***** CP437 palette
$.when($.ready, mw.loader.using('ext.wikiEditor')).then(function(){
  $('#wpTextbox1').wikiEditor('addToToolbar', {
    'section': 'characters',
    'pages': {
      'cp437': {
        'layout': 'characters',
        'label': 'CP437',
        'characters': ["\u263A", "\u263B", "\u2665", "\u2666", "\u2663", "\u2660", "\u2022", "\u25D8", "\u25CB", "\u25D9", "\u2642", "\u2640", "\u266A", "\u266B", "\u263C", "\u25BA", "\u25C4", "\u2195", "\u203C", "\u00B6", "\u00A7", "\u25AC", "\u21A8", "\u2191", "\u2193", "\u2192", "\u2190", "\u221F", "\u2194", "\u25B2", "\u25BC", "\u0020", "\u0021", "\u0022", "\u0023", "\u0024", "\u0025", "\u0026", "\u0027", "\u0028", "\u0029", "\u002A", "\u002B", "\u002C", "\u002D", "\u002E", "\u002F", "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039", "\u003A", "\u003B", "\u003C", "\u003D", "\u003E", "\u003F", "\u0040", "\u0041", "\u0042", "\u0043", "\u0044", "\u0045", "\u0046", "\u0047", "\u0048", "\u0049", "\u004A", "\u004B", "\u004C", "\u004D", "\u004E", "\u004F", "\u0050", "\u0051", "\u0052", "\u0053", "\u0054", "\u0055", "\u0056", "\u0057", "\u0058", "\u0059", "\u005A", "\u005B", "\u005C", "\u005D", "\u005E", "\u005F", "\u0060", "\u0061", "\u0062", "\u0063", "\u0064", "\u0065", "\u0066", "\u0067", "\u0068", "\u0069", "\u006A", "\u006B", "\u006C", "\u006D", "\u006E", "\u006F", "\u0070", "\u0071", "\u0072", "\u0073", "\u0074", "\u0075", "\u0076", "\u0077", "\u0078", "\u0079", "\u007A", "\u007B", "\u007C", "\u007D", "\u007E", "\u2302", "\u00C7", "\u00FC", "\u00E9", "\u00E2", "\u00E4", "\u00E0", "\u00E5", "\u00E7", "\u00EA", "\u00EB", "\u00E8", "\u00EF", "\u00EE", "\u00EC", "\u00C4", "\u00C5", "\u00C9", "\u00E6", "\u00C6", "\u00F4", "\u00F6", "\u00F2", "\u00FB", "\u00F9", "\u00FF", "\u00D6", "\u00DC", "\u00A2", "\u00A3", "\u00A5", "\u20A7", "\u0192", "\u00E1", "\u00ED", "\u00F3", "\u00FA", "\u00F1", "\u00D1", "\u00AA", "\u00BA", "\u00BF", "\u2310", "\u00AC", "\u00BD", "\u00BC", "\u00A1", "\u00AB", "\u00BB", "\u2591", "\u2592", "\u2593", "\u2502", "\u2524", "\u2561", "\u2562", "\u2556", "\u2555", "\u2563", "\u2551", "\u2557", "\u255D", "\u255C", "\u255B", "\u2510", "\u2514", "\u2534", "\u252C", "\u251C", "\u2500", "\u253C", "\u255E", "\u255F", "\u255A", "\u2554", "\u2569", "\u2566", "\u2560", "\u2550", "\u256C", "\u2567", "\u2568", "\u2564", "\u2565", "\u2559", "\u2558", "\u2552", "\u2553", "\u256B", "\u256A", "\u2518", "\u250C", "\u2588", "\u2584", "\u258C", "\u2590", "\u2580", "\u03B1", "\u00DF", "\u0393", "\u03C0", "\u03A3", "\u03C3", "\u00B5", "\u03C4", "\u03A6", "\u0398", "\u03A9", "\u03B4", "\u221E", "\u03C6", "\u03B5", "\u2229", "\u2261", "\u00B1", "\u2265", "\u2264", "\u2320", "\u2321", "\u00F7", "\u2248", "\u00B0", "\u2219", "\u00B7", "\u221A", "\u207F", "\u00B2", "\u25A0", "\u00A0"]
      }
    }
  });
  $('.section-characters .index div:first').before($('.section-characters .index div[rel=cp437]'));
});