Minecraft Wiki

The Minecraft Wiki has moved from Fandom; see the linked discussion page for details.

READ MORE

Minecraft Wiki
Advertisement

Documentation may be created at User:Psl85/hydra.js/doc.

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

Google Chrome, Firefox, Microsoft Edge, and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button.
For details and instructions about other browsers, see Wikipedia:Bypass your cache.

//<nowiki>
mw.loader.localLoad = function( url ) { return mw.loader.load( '//minecraft.gamepedia.com/index.php?title=' + url + '&action=raw&ctype=text/javascript' ); };

/* Auto-refresh button on Special:RecentChanges */
function setCookie(c_name, value, expiredays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
}
function getCookie(c_name) {
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + "=");
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1) c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return "";
}
var ajaxPages = new Array("Special:RecentChanges", "Special:Watchlist");
var ajaxRCOverride = false;
var rcRefresh = 15000;
function ajaxRC() {
	appTo = $(".firstHeading");
	appTo.append('&nbsp;<span style="position:absolute; right:75px;"><span style="position:relative; top:2px;"><span style="position:relative; top:-12px; right:-15px;" id="autoRefreshProgress"><img src="//upload.wikimedia.org/wikipedia/commons/2/2a/Loading_Key.gif" border="0" alt="AJAX operation in progress" /></span><span style="font-size: xx-small; cursor:help;" title="Automatically refresh the current page every ' + Math.floor(rcRefresh / 1000) + ' seconds">AUTO-REFRESH:</span><input type="checkbox" id="autoRefreshToggle"></span></span>');
	$("#autoRefreshToggle").click(function () {
		setCookie("ajaxRC", $("#autoRefreshToggle").is(":checked") ? "on" : "off")
		loadRCData()
	});
	$("#autoRefreshProgress").hide();
	if (getCookie("ajaxRC") == "on" || ajaxRCOverride) {
		$("#autoRefreshToggle").attr("checked", "checked");
		setTimeout("loadRCData();", rcRefresh);
	}
}
function loadRCData() {
	if (!$("#autoRefreshToggle").is(":checked")) return;
	$('#autoRefreshProgress').show()
	$(article).load(location.href + " " + article + " > *", function (data) {
		$(article + " .mw-collapsible").makeCollapsible();
		$('#autoRefreshProgress').hide()
		if ($("#autoRefreshToggle").is(":checked")) setTimeout("loadRCData();", rcRefresh);
	});
}
$(function () {
	article = "#bodyContent";
	for (x in ajaxPages) {
		if (mw.config.get('wgPageName') == ajaxPages[x] && $("#autoRefreshToggle").length == 0) ajaxRC();
	}
});

function setUpSynchTable () {
  var tables = document.getElementsByClassName("awardsSynchronisedTable");
  for (var k = 0; k < tables.length; k++) {
    var rows = tables[k].rows;
    for (var i = 0; i < rows.length; i++) {
      var cells = rows[i].cells;
      for (var j = 0; j < cells.length; j++) {
        cells[j].style.verticalAlign = "top";
        var synchDiv = document.createElement("DIV");
        synchDiv.style.position = "relative";
        synchDiv.className = "synchDiv";
        var childs = cells[j].childNodes;
        while (childs.length > 0) {
          synchDiv.appendChild(childs[0]);
        }
        cells[j].appendChild(synchDiv);
      }
    }
  }
  if (tables.length > 0) {
    document.onscroll = synchTableOnScroll;
  }
}

function synchTableOnScroll() {
  
  var divs = document.getElementsByClassName("synchDiv");
  for (var i = 0; i < divs.length; i++) {
    var parent = divs[i].parentNode;
    var parentRect = parent.getBoundingClientRect();
    var offset;
    if (window.innerHeight > divs[i].offsetHeight) {
      offset = Math.min(Math.max(-1 * parentRect.top, 0), parent.clientHeight - divs[i].offsetHeight);
    } else {
      offset = Math.min(Math.max(-1 * parentRect.top / (parent.clientHeight - window.innerHeight) * (parent.clientHeight - divs[i].offsetHeight), 0), parent.clientHeight - divs[i].offsetHeight);
    }
    divs[i].style.top = offset + "px";
  }
}

/** Scripts **/


// [[User:Majr/Prism.js]]
// Adds JavaScript, CSS and Lua syntax highlighting, see file for license
// Requires a theme from http://prismjs.com to be added to usercss
mw.loader.localLoad( 'User:Majr/Prism.js' );

// [[User:Majr/codeLinks.js]]
mw.loader.localLoad( 'User:Majr/codeLinks.js' );

// [[User:Majr/renderConsoleOutput.js]]
// Allows the output wikitext of the lua console to be rendered
if ( $( '#mw-scribunto-console' ).length ) {
	mw.loader.localLoad( 'User:Majr/renderConsoleOutput.js' );
}

/** General fixes **/

$( function() { 
'use strict';

// Replaces the [[Special:Achievements]] tab with the [[Special:MyPage/Sandbox]] tab
$('#pt-achievements a').attr({ href: '/User:' + mw.config.get( 'wgUserName' ) + '/Sandbox' }).text('Sandbox');

// Makes one of the user links my profile, and the other the userwiki
$('.netbar-box.right li.user a').attr({ href: '/UserProfile:' + mw.config.get( 'wgUserName' ) }).text( 'Profile' );

// Add a subpages link to pages
if ( mw.config.get( 'wgArticleId' ) != 0 ) {
	mw.util.addPortletLink (
		'p-tb',
		'/Special:PrefixIndex/' + mw.config.get( 'wgRelevantPageName' ) + '/',
		'Subpages',
		't-subpages',
		'Subpages of the article'
	);
}

/* Add link to browse the source code */
 {
	mw.util.addPortletLink (
		'p-tb',
		'/index.php?title=' + mw.config.get( 'wgRelevantPageName' ) + '&action=raw',
		'View Source',
		't-viewsource',
		'View the wikitext of the current page'
	);
}
/** Mostly direct code from [[User:Majr/hydra.js]] **/

// Modify the editing toolbar
if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) > -1 ) {
	mw.loader.using( 'ext.wikiEditor.toolbar', function() {

		// Modify the text added by the signature button.
		var $button = $( '#wikiEditor-section-main > .group-insert > a[rel="signature"]' );
		if ( $button.length ) {
			var action = $button.data( 'action' );
			action.options.pre = '<span class=nowrap>~~' + '~~</span>';
			$button.data( 'action', action );
		}

		// Add an option to insert <code> tags
		$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
			section: 'advanced',
			group: 'format',
			tools: {
				code: {
					label: 'Code formatting',
					type: 'button',
					icon: '//upload.wikimedia.org/wikipedia/commons/6/62/Toolbar_code.png',
					action: {
						type: 'encapsulate',
						options: { pre: '<code>', post: '</code>' }
					}
				}
			}
		// Add an option to insert template braces
		} ).wikiEditor( 'addToToolbar', {
			section: 'advanced',
			group: 'insert',
			tools: {
				sign: {
					label: 'Template',
					type: 'button',
					icon: '//upload.wikimedia.org/wikipedia/commons/4/43/Button-template.png',
					action: {
						type: 'replace',
						options: { pre: '{{', post: '}}' }
					}
				}
			}
		// Add characters to the symbols insert page
		} ).on( 'wikiEditor-toolbar-buildSection-characters', function (event, section) {
      	  section.pages.symbols.characters.push( '¦', '²{', '}²' );
  		} );
	} );
}

// Add 0th section edit button to first infobox which is in the 0th section
var $firstInfobox = $( '.notaninfobox' ).first();
if ( !$firstInfobox.prevAll( 'h1, h2, h3, h4, h5, h6' ).length ) {
	$firstInfobox.children( '.infobox-title' ).css( 'padding-left', 50 ).prepend(
		$( '<span>' ).addClass( 'mw-editsection' ).css( {
			float: 'right',
			lineHeight: 'inherit'
		} ).append(
			'[',
			$( '<a>' ).prop( 'href', '/' + mw.config.get( 'wgPageName' ) + '?action=edit&section=0' ).text( 'edit' ),
			']'
		)
	);
}

} );

/* Blockinfo */
/*jshint undef:true */
/*global jQuery, mw */
(function(){
'use strict';

var api = new mw.Api();

function el(tag, child, attr, events) {
	var key, node = document.createElement(tag);
 
	if (child) {
		if (typeof child !== 'object')
			child = [child];
		for (var i = 0; i < child.length; ++i) {
			var ch = child[i];
			if ((ch === void(null)) || (ch === null))
				continue;
			else if (typeof ch !== 'object')
				ch = document.createTextNode(String(ch));
			node.appendChild(ch);
		}
	}
 
	if (attr) for (key in attr) {
		node.setAttribute(key, String(attr[key]));
	}
 
	if (events) for (key in events) {
		node.addEventListener(key, events[key], false);
	}
 
	return node;
}

function fmtDate(date) {
	// XXX: uses browser's time zone instead of preferences
	date = new Date(date);

	switch (mw.user.options.get('date')) {
	case 'dmy'     : return date.toLocaleTimeString() + ', ' + date.getDate() + ' ' + mw.language.months.genitive[date.getMonth()] + ' ' + date.getFullYear();
	case 'mdy'     : return date.toLocaleTimeString() + ', ' + mw.language.months.genitive[date.getMonth()] + ' ' + date.getFullYear() + ', ' + date.getDate();
	case 'ymd'     : return date.toLocaleTimeString() + ', ' + date.getFullYear() + ' ' + mw.language.months.genitive[date.getMonth()] + ' ' + date.getDate();
	case 'default' : return date.toLocaleString();
	case 'ISO 8601': return date.toISOString(); 
	}
}

var wd2iw = {
	'metawiki': 'm'
};

function buildList(user, callback) {
	var isAnon = mw.util.isIPv4Address(user) || mw.util.isIPv6Address(user);

	var rq = api.get({
		action: 'query',
		list: 'blocks' + (isAnon ? '|globalblocks' : '|globalallusers'),
		
		// blocks
		bkip: isAnon ? user : void(window.warranty),
		bkusers: isAnon ? void(window.warranty) : user,
		bkprop: 'id|user|range|timestamp|expiry|by|reason|flags',
		bkdir: 'older',
		
		// globalblocks
		bgip: isAnon ? user : void(window.warranty),
		bgprop: isAnon ? 'id|address|range|timestamp|expiry|by|reason' : void(window.warranty),
		bgdir: isAnon ? 'older' : void(window.warranty),
		
		// globalallusers
		agufrom: !isAnon ? user : void(window.warranty),
		aguto: !isAnon ? user : void(window.warranty),
		agulimit: !isAnon ? 1 : void(window.warranty),
		aguprop: !isAnon ? 'lockinfo' : void(window.warranty)
	});
	
	rq.then(function (result) {
		var list = el('ul'), item, i;

		if (result.query.globalallusers && result.query.globalallusers[0] && ('locked' in result.query.globalallusers[0])) {
			list.appendChild(el('li', [
				"This account is globally locked", 
				" (", el('a', "globalauth log", { href: mw.util.getUrl('m:Special:Log/globalauth', { page: 'User:' + user + '@global' }) }), ")."
			]));
		}
		
		for (i = 0; i < result.query.blocks.length; ++i) {
			item = result.query.blocks[i];
			list.appendChild(el('li', [
				fmtDate(item.timestamp),
				': ', el('a', item.by, { href: mw.util.getUrl('User:' + item.by) }),
				" blocked ", el('b', item.user),
				" (", el('a', 'block log', { href: mw.util.getUrl('Special:Log/block', { page: 'User:' + item.user }) }), "),",
				' expiring ', el('b', item.expiry === 'infinity' ? 'never' : fmtDate(item.expiry)),
				item.reason && " (", item.reason, item.reason && ")",
			]));
		}
	
		if (result.query.globalblocks)
		for (i = 0; i < result.query.globalblocks.length; ++i) {
			item = result.query.globalblocks[i];
			list.appendChild(el('li', [
				fmtDate(item.timestamp),
				': ', el('a', item.by, { href: mw.util.getUrl(wd2iw[item.bywiki] + ':User:' + item.by) }),
				" at ", el('code', item.bywiki),
				" globally blocked ", el('b', item.address),
				" (", el('a', "gblblock log", { href: mw.util.getUrl(wd2iw[item.bywiki] + ':Special:Log/gblblock', { page: 'User:' + item.address }) }), "),",
				" expiring ", el('b', item.expiry === 'infinity' ? "never" : fmtDate(item.expiry)),
				item.reason && " (", item.reason, item.reason && ")",
			]));
		}
		
		callback(list);
	});
	
	return rq;
}

function makeBox(user, relTo) {
	if (!user)
		return;
	relTo = relTo || document.getElementById('mw-content-text');

	var afterList, box = el('div', [
		el('p', [el('strong', user), ' is currently blocked.']),
		afterList = el('small', [
			el('a', "block log"        , { href: mw.util.getUrl('Special:Log/block', { page: 'User:' + user }) })
		])
	], {
		'class': 'mw-warning-with-logexcerpt'
	});

	relTo.rq = buildList(user, function (list) {
		relTo.rq = null;
		if (!list.hasChildNodes())
			return;

		box.insertBefore(list, afterList);
		relTo.parentNode.insertBefore(box, relTo);
	});

	return box;
}

var user;

var wgNamespaceNumber = mw.config.get('wgNamespaceNumber');
var wgNamespaceIds = mw.config.get('wgNamespaceIds');
var wgTitle = mw.config.get('wgTitle');

if ((wgNamespaceNumber & ~1) === wgNamespaceIds.user) {
	makeBox(wgTitle.replace(/\/.*$/, ''));
} else if ((mw.config.get('wgCanonicalSpecialPageName') === 'Contributions') || (mw.config.get('wgCanonicalSpecialPageName') === 'DeletedContributions')) {
	makeBox(wgTitle.indexOf('/') !== -1 ? wgTitle.replace(/^.*?\//, '') : mw.util.getParamValue('target'));
} else if (mw.config.get('wgCanonicalSpecialPageName') === 'Log') {
	user = mw.util.getParamValue('user');
	if (/^[^\/]+\/(block|delete)$/.test(wgTitle))
		return;
	if (wgTitle.indexOf('/') !== -1)
		user = wgTitle.replace(/^.*\//, '');
	makeBox(user);
} else if (mw.config.get('wgCanonicalSpecialPageName') === 'Block') {
	var ipinput = document.getElementById('mw-bi-target');
	var relTo = ipinput.form.getElementsByTagName('legend')[0].nextSibling;
	var warnnode = null;

	var refresh = function () {
		if (relTo.rq)
			relTo.rq.abort();

		if (warnnode && warnnode.parentNode) {
			warnnode.parentNode.removeChild(warnnode);
			warnnode = null;
		}

		if (!ipinput.value)
			return;

		warnnode = makeBox(ipinput.value, relTo);
	};

	var tmout;
	ipinput.addEventListener('input', function () {
		clearTimeout(tmout);
		tmout = setTimeout(refresh, 500);
	}, false);
	ipinput.addEventListener('change', function () {
		refresh();
	}, false);
	refresh();
	return;
}

})();
// </nowiki>
Advertisement