MediaWiki:Common.js
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(/§ion=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();
}