MediaWiki:Common.js

From Zelda Wiki, the Zelda encyclopedia
Revision as of 03:34, 10 February 2014 by Justin Folvarcik (talk | contribs)
Jump to navigation Jump to search

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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */
importScript('MediaWiki:Tabs.js');
importScript('MediaWiki:Toggle.js');
importScript('MediaWiki:Scrollbar.js');
importStylesheetURI('http://zeldawiki.org/User:Adam/menu.css&ctype=text/css&action=raw');

// --------------------------------------------------------
// Rights
// Sets a variable "rights" which will return "false" if the 
// currently logged in user is a bureaucrat, administrator, or autoconfirmed user. It will return true otherwise.
// it also defines variables which may be used elsewhere in scripts.
// --------------------------------------------------------

if (wgUserGroups){
 var rights_isAuto = (wgUserGroups.toString().indexOf('autoconfirmed') != -1);
 var rights_isPatrol = (wgUserGroups.toString().indexOf('patrol') != -1);
 var rights_isAdmin = (wgUserGroups.toString().indexOf('sysop') != -1);
 var rights_isCrat = (wgUserGroups.toString().indexOf('bureaucrat') != -1);
 var rights = true;
}
else {
 var rights = false;
}
//

 if (rights_isCrat || rights_isAdmin || rights_isPatrol)
 {importScript('MediaWiki:Admin.js');}

// --------------------------------------------------------
// staffrights.js          (adapted from http://en.wikipedia.org/wiki/User:Ais523/adminrights.js)
// This script changes the color of links to staffs' userpages in the bodyContent of Special, History pages, diff pages,
// and old page revisions.
// ("bodyContent" being everything but the tabs,personal links at the top of the screen and sidebar).
// 
// Highlighting script. Based on [[User:ais523/highlightmyname.js]].
// --------------------------------------------------------

var adminrights=new Array();
var patrolrights=new Array();
var botrights=new Array();

importScript('MediaWiki:StaffList.js');
 
function highlightstaff(n){ //node
  while(n!=null){
    if(n.nodeType==1&&n.tagName.toLowerCase()=="a"){ //anchor

      if(n.href.indexOf("/User:")!=-1){
        var u=n.href.split("/User:")[1];
        if(adminrights[u]==1)       n.className += " admin";
        else if(patrolrights[u]==1) n.className += " patrol";
        else if(botrights[u]==1)    n.className += " bot";
      }

      else if(n.href.indexOf("/index.php?title=User:")!=-1){
        var u=n.href.split("/index.php?title=User:")[1];
        if(adminrights[u]==1)       n.className += " admin";
        else if(patrolrights[u]==1) n.className += " patrol";
        else if(botrights[u]==1)    n.className += " bot";
      }

      else
        if(n.firstChild!=null) highlightstaff(n.firstChild);
    }

    else{
      if(n.firstChild!=null) highlightstaff(n.firstChild);
    }
    n=n.nextSibling;
  }
}


if (wgCanonicalNamespace == 'Special' || wgAction == 'history' || document.URL.indexOf('diff=') > 0 || document.URL.indexOf('oldid=') > 0)
{
  addOnloadHook(function() {
    highlightstaff(document.getElementById('bodyContent').firstChild);
  });
}
 
//

// --------------------------------------------------------
// addPurge
// adds a "purge" tab (after "watch")
// --------------------------------------------------------
addOnloadHook(function () {
    if (wgAction != 'edit' && wgCanonicalNamespace != 'Special' && wgAction != 'history' && wgAction != 'delete' && wgAction != 'watch' && wgAction 
    != 'unwatch' && wgAction != 'protect' && wgAction != 'markpatrolled' && wgAction != 'rollback' && document.URL.indexOf('diff=') <= 0
    && document.URL.indexOf('oldid=') <=0)
    { var hist; var url;
    if (!(hist = document.getElementById('ca-history') )) return;
    if (!(url = hist.getElementsByTagName('a')[0] )) return;
    if (!(url = url.href )) return;
    addPortletLink('p-cactions', url.replace(/([?&]action=)history([&#]|$)/, '$1purge$2'),
                   'purge', 'ca-purge', 'Purge server cache for this page', '0');
}
});
//

// --------------------------------------------------------
// addSubpages
// adds a 'subpages' link to the toolbox bar (excludes File, MediaWiki and Category namespaces)
// --------------------------------------------------------
//addOnloadHook(function () {
//  var NSWithoutSubpages = new Array(-1, 6, 8, 14);
//  if (document.getElementById('p-tb') && NSWithoutSubpages.indexOf(wgNamespaceNumber) == -1)
//    {
//    var linkSubpages = '/Special:PrefixIndex/' + wgPageName + '/';
//    addPortletLink('p-tb', linkSubpages, 'Subpages', 't-subpages', 'Subpages of this page');
//    }
//});
//

// --------------------------------------------------------
// last diff
// Adds a tab which gives the latest diff for a page.
// --------------------------------------------------------
function lastdiff() {
	addPortletLink("p-cactions", wgServer +  "/index.php?title=" + encodeURIComponent(wgPageName) + "&diff=cur&oldid=prev", 
        "last", "ca-last", "Show most recent diff", '2');
}
if (wgCanonicalNamespace != 'Special' && wgAction != 'edit' && wgAction != 'delete' && wgAction != 'watch' && wgAction 
!= 'unwatch' && wgAction != 'protect'){ 
addOnloadHook(lastdiff);
}
//

// --------------------------------------------------------
// redirects
// adds a tab to the top of pages, when clicked it highlights all links on the page that are redirects.
// --------------------------------------------------------
if (wgCanonicalNamespace != 'Special' && wgAction != 'history' && wgAction != 'delete' && wgAction != 'watch' && wgAction 
!= 'unwatch' && wgAction != 'protect' && wgAction != 'markpatrolled' && wgAction != 'rollback' && document.URL.indexOf('diff=') <= 0)
{
var highlightRedirects = {
 
 tab_redirects : null,
 
 addStylesheetRule : function(tag, style) {
  var ss = document.styleSheets[0];
  if (ss.insertRule) {
   ss.insertRule(tag + '{' + style + '}', ss.cssRules.length);
  } else if (ss.addRule) {
   ss.addRule(tag, style);
  }
 },
 
 run : function()
 {
  highlightRedirects.addStylesheetRule('a.mw-redirect', 'color:red');
  highlightRedirects.addStylesheetRule('a.mw-redirect:visited', 'color:hotpink');
 },
 
 install : function()
 {
  with(highlightRedirects)
  {
   addPortletLink ('p-cactions', 'javascript:highlightRedirects.run();', 'redirects', 'ca-redirects', 'Highlights all links which are redirects', 'r') ||
   addPortletLink ('views', 'javascript:highlightRedirects.run();', 'redirects', 'ca-redirects', 'Highlights all links which are redirects', 'r');
  }
 }
 
};
 
addOnloadHook(highlightRedirects.install);
}
//


// --------------------------------------------------------
// Movepage
// Uncheck "Leave a redirect behind" if moving a file
// --------------------------------------------------------
$(function() {
        if (wgPageName == "Special:MovePage") {
                if (document.getElementById('wpNewTitle').value.split(":",1) == "File") {
                document.getElementById( 'wpLeaveRedirect' ).checked = false;
                }
        }
});




// --------------------------------------------------------
// 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 );


// --------------------------------------------------------
// 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);
        };
})();




// --------------------------------------------------------
// ForcePreviewLite
// A modified version of http://en.wikipedia.org/wiki/Wikipedia:WikiProject_User_scripts/Scripts/Force_edit_summary_alternative
// NOTE: This is not a completed script, only a test of possible options for future addition. Implementation of this script would be done by combining the code of "function forceSummary()" into "function forcePreview()" at http://www.mediawiki.org/wiki/Manual:Force_preview
 // --------------------------------------------------------

function addForceSummary()
{
    if(!/&action=edit/.test(window.location.href) && !/&action=submit/.test(window.location.href)) return;
    if(/&section=new/.test(window.location.href)) return;
    if(!document.forms.editform) return;
    document.forms.editform.wpSave.onclick = forceSummary;
}
 
function forceSummary()
{
        flashcolour(7);
        document.forms.editform.wpSave.onclick = "";
        return false;
}
 
var flashcolour_timer;
function flashcolour(count) {
    if (count%2 == 1)
        document.getElementById("wpPreview").style.backgroundColor = "silver";
    else
        document.getElementById("wpPreview").style.backgroundColor = "yellow";

 
    if (flashcolour_timer != null) {
        clearTimeout(flashcolour_timer);
        flashcolour_timer = null;
    }
 
    if (count > 0)
        flashcolour_timer = window.setTimeout("flashcolour(" + (count-1) + ")",350);
}
 
if (wgAction != "submit" && rights == false)
{
addOnloadHook(addForceSummary);
}





// --------------------------------------------------------
// Visibility Toggling
// Description: Toggles visibility for things like [[Template:Hide]]
// --------------------------------------------------------

$(document).ready(function(){
  var NavigationBarHide = '[hide ▲]';
  var NavigationBarShow = '[show ▼]';

  // Initialization
  $('.NavFrame').each(function(){
    if ($(this).children('.NavContent').css("display") == "none") {
      $(this).children('.NavHead').prepend('<span class="NavToggle">' + NavigationBarShow + '</span>');
    }
    else {
      $(this).children('.NavHead').prepend('<span class="NavToggle">' + NavigationBarHide + '</span>');
    }
  });


  // When the header is clicked
  $(".NavHead").click(function () {
    var $toggle = $(this).children('.NavToggle');
    var $content = $(this).parent().children('.NavContent');

    // toggle content
    $content.toggle();

    // toggle text
    if ($toggle.text() == NavigationBarHide) {
      $toggle.text(NavigationBarShow)
    }
    else {
      $toggle.text(NavigationBarHide)
    }
  });

});

// (end of script)

// --------------------------------------------------------
// Contains citation templates to be added to the toolbar. 
// Source: [http://mediawiki.org/wiki/Manual:Custom_edit_buttons MediaWiki.org]
// Credit to [[User:RAP|RAP]] for the images.
// --------------------------------------------------------

// We begin by getting the date for use in certain citations.
    var time = new Date();
    var curday = time.getDate();
    var month=new Array();
    month[0]="January";
    month[1]="February";
    month[2]="March";
    month[3]="April";
    month[4]="May";
    month[5]="June";
    month[6]="July";
    month[7]="August";
    month[8]="September";
    month[9]="October";
    month[10]="November";
    month[11]="December";
    var curmonth = month[time.getMonth()];
    var nowyear = time.getYear()+1900;
    var nowday = curday.toString();
    var nowmonth = curmonth.toString();

// Now we make the function itself
var addExtraButtons = function(){

// Start with web cite
        mw.toolbar.addButton( {
                imageFile: 'http://zeldawiki.org/images/9/91/Button_cite_web.png',
                speedTip: 'Web Citation',
                tagOpen: "<ref>{{cite web|quote= |author= |published= |retrieved=" + nowmonth + " " + nowday + ", " + nowyear + "|url= |title= |site= |type=",
                tagClose: '}}</ref>',
                sampleText: '',
                imageId: ''
        } );
// Cite book
mw.toolbar.addButton( {
                imageFile: 'http://zeldawiki.org/images/e/ef/Button_cite_book.png',
                speedTip: 'Cite book',
                tagOpen: '<ref>{{cite book|quote= |book= |publisher= |page= ',
                tagClose: '}}</ref>',
                sampleText: '',
                imageId: ''
        } );

// Cite person
mw.toolbar.addButton( {
                imageFile: 'http://zeldawiki.org/images/5/53/Button_cite_person.png',
                speedTip: 'Cite person',
                tagOpen: '<ref>{{cite person|quote= |name= |url= |title= ',
                tagClose: '}}</ref>',
                sampleText: '',
                imageId: ''
        } );

// Cite episode
mw.toolbar.addButton( {
                imageFile: 'http://zeldawiki.org/images/1/1c/Button_cite_episode.png',
                speedTip: 'Cite episode',
                tagOpen: '<ref>{{cite episode|quote= |name= |show= |episode= |time= ',
                tagClose: '}}</ref>',
                sampleText: '',
                imageId: ''
        } );

// Cite manual
mw.toolbar.addButton( {
                imageFile: 'http://zeldawiki.org/images/5/5d/Button_cite_manual.png',
                speedTip: 'Cite manual',
                tagOpen: '<ref>{{cite manual|quote= |game= |page= ',
                tagClose: '}}</ref>',
                sampleText: '',
                imageId: ''
        } );

// Regular cite template
mw.toolbar.addButton( {
                imageFile: 'http://zeldawiki.org/images/2/20/Button_cite_template.png',
                speedTip: 'Regular citation',
                tagOpen: '<ref>{{cite|(Quote)|(Person)|(Game)',
                tagClose: '}}</ref>',
                sampleText: '',
                imageId: ''
        } );

};
 
if( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) {
        mw.loader.using( 'user.options', function () {
                if ( ! mw.user.options.get( 'usebetatoolbar' ) ) {
                        mw.loader.using( 'mediawiki.action.edit', function(){
                                $( addExtraButtons );
                        } );
                }
        } );
}

// --------------------------------------------------
// Page logs. Because they're not just for admins :P
// --------------------------------------------------
if (wgCanonicalNamespace != "Special"){
addPortletLink("p-tb", "http://zeldawiki.org/index.php?title=Special%3ALog&type=&user=&page=" + wgPageName, 
        "Page Logs", "t-logs", "Show all relevant logs for this page.", '3');
}

// --------------------------------------------------
// Preview button for Special:Upload
// --------------------------------------------------
if (wgPageName == 'Special:Upload') 
{
  importScript( 'MediaWiki:UploadPreview.js' );
}

// Remove the annoying whitespace left where the ads were for logged in users
if (wgUserName != null){
jQuery(".adsbygoogle").remove();
}