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(' <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§ion=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>