<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-BlockInfo.js</id>
	<title>MediaWiki:Gadget-BlockInfo.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-BlockInfo.js"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-BlockInfo.js&amp;action=history"/>
	<updated>2026-04-10T22:55:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=MediaWiki:Gadget-BlockInfo.js&amp;diff=474863&amp;oldid=prev</id>
		<title>Sware: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-BlockInfo.js&amp;diff=474863&amp;oldid=prev"/>
		<updated>2025-11-04T17:47:05Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:47, 4 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
	<entry>
		<id>https://linguifex.com/w/index.php?title=MediaWiki:Gadget-BlockInfo.js&amp;diff=474862&amp;oldid=prev</id>
		<title>wikt&gt;-sche at 16:14, 13 May 2017</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-BlockInfo.js&amp;diff=474862&amp;oldid=prev"/>
		<updated>2017-05-13T16:14:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// {{documentation}}&lt;br /&gt;
/*jshint undef:true */&lt;br /&gt;
/*global jQuery, mw */&lt;br /&gt;
(function(){&lt;br /&gt;
&amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
var api = new mw.Api();&lt;br /&gt;
&lt;br /&gt;
function el(tag, child, attr, events) {&lt;br /&gt;
	var key, node = document.createElement(tag);&lt;br /&gt;
 &lt;br /&gt;
	if (child) {&lt;br /&gt;
		if (typeof child !== &amp;#039;object&amp;#039;)&lt;br /&gt;
			child = [child];&lt;br /&gt;
		for (var i = 0; i &amp;lt; child.length; ++i) {&lt;br /&gt;
			var ch = child[i];&lt;br /&gt;
			if ((ch === void(null)) || (ch === null))&lt;br /&gt;
				continue;&lt;br /&gt;
			else if (typeof ch !== &amp;#039;object&amp;#039;)&lt;br /&gt;
				ch = document.createTextNode(String(ch));&lt;br /&gt;
			node.appendChild(ch);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	if (attr) for (key in attr) {&lt;br /&gt;
		node.setAttribute(key, String(attr[key]));&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	if (events) for (key in events) {&lt;br /&gt;
		node.addEventListener(key, events[key], false);&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	return node;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function fmtDate(date) {&lt;br /&gt;
	// XXX: uses browser&amp;#039;s time zone instead of preferences&lt;br /&gt;
	date = new Date(date);&lt;br /&gt;
&lt;br /&gt;
	switch (mw.user.options.get(&amp;#039;date&amp;#039;)) {&lt;br /&gt;
	case &amp;#039;dmy&amp;#039;     : return date.toLocaleTimeString() + &amp;#039;, &amp;#039; + date.getDate() + &amp;#039; &amp;#039; + mw.language.months.genitive[date.getMonth()] + &amp;#039; &amp;#039; + date.getFullYear();&lt;br /&gt;
	case &amp;#039;mdy&amp;#039;     : return date.toLocaleTimeString() + &amp;#039;, &amp;#039; + mw.language.months.genitive[date.getMonth()] + &amp;#039; &amp;#039; + date.getFullYear() + &amp;#039;, &amp;#039; + date.getDate();&lt;br /&gt;
	case &amp;#039;ymd&amp;#039;     : return date.toLocaleTimeString() + &amp;#039;, &amp;#039; + date.getFullYear() + &amp;#039; &amp;#039; + mw.language.months.genitive[date.getMonth()] + &amp;#039; &amp;#039; + date.getDate();&lt;br /&gt;
	case &amp;#039;default&amp;#039; : return date.toLocaleString();&lt;br /&gt;
	case &amp;#039;ISO 8601&amp;#039;: return date.toISOString(); &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var wd2iw = {&lt;br /&gt;
	&amp;#039;metawiki&amp;#039;: &amp;#039;m&amp;#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function buildList(user, callback) {&lt;br /&gt;
	var isAnon = mw.util.isIPv4Address(user) || mw.util.isIPv6Address(user);&lt;br /&gt;
&lt;br /&gt;
	var rq = api.get({&lt;br /&gt;
		action: &amp;#039;query&amp;#039;,&lt;br /&gt;
		list: &amp;#039;blocks&amp;#039; + (isAnon ? &amp;#039;|globalblocks&amp;#039; : &amp;#039;|globalallusers&amp;#039;),&lt;br /&gt;
		&lt;br /&gt;
		// blocks&lt;br /&gt;
		bkip: isAnon ? user : void(window.warranty),&lt;br /&gt;
		bkusers: isAnon ? void(window.warranty) : user,&lt;br /&gt;
		bkprop: &amp;#039;id|user|range|timestamp|expiry|by|reason|flags&amp;#039;,&lt;br /&gt;
		bkdir: &amp;#039;older&amp;#039;,&lt;br /&gt;
		&lt;br /&gt;
		// globalblocks&lt;br /&gt;
		bgip: isAnon ? user : void(window.warranty),&lt;br /&gt;
		bgprop: isAnon ? &amp;#039;id|address|range|timestamp|expiry|by|reason&amp;#039; : void(window.warranty),&lt;br /&gt;
		bgdir: isAnon ? &amp;#039;older&amp;#039; : void(window.warranty),&lt;br /&gt;
		&lt;br /&gt;
		// globalallusers&lt;br /&gt;
		agufrom: !isAnon ? user : void(window.warranty),&lt;br /&gt;
		aguto: !isAnon ? user : void(window.warranty),&lt;br /&gt;
		agulimit: !isAnon ? 1 : void(window.warranty),&lt;br /&gt;
		aguprop: !isAnon ? &amp;#039;lockinfo&amp;#039; : void(window.warranty)&lt;br /&gt;
	});&lt;br /&gt;
	&lt;br /&gt;
	rq.then(function (result) {&lt;br /&gt;
		var list = el(&amp;#039;ul&amp;#039;), item, i;&lt;br /&gt;
&lt;br /&gt;
		if (result.query.globalallusers &amp;amp;&amp;amp; result.query.globalallusers[0] &amp;amp;&amp;amp; (&amp;#039;locked&amp;#039; in result.query.globalallusers[0])) {&lt;br /&gt;
			list.appendChild(el(&amp;#039;li&amp;#039;, [&lt;br /&gt;
				&amp;quot;This account is globally locked&amp;quot;, &lt;br /&gt;
				&amp;quot; (&amp;quot;, el(&amp;#039;a&amp;#039;, &amp;quot;globalauth log&amp;quot;, { href: mw.util.getUrl(&amp;#039;m:Special:Log/globalauth&amp;#039;, { page: &amp;#039;User:&amp;#039; + user + &amp;#039;@global&amp;#039; }) }), &amp;quot;).&amp;quot;&lt;br /&gt;
			]));&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		for (i = 0; i &amp;lt; result.query.blocks.length; ++i) {&lt;br /&gt;
			item = result.query.blocks[i];&lt;br /&gt;
			list.appendChild(el(&amp;#039;li&amp;#039;, [&lt;br /&gt;
				fmtDate(item.timestamp),&lt;br /&gt;
				&amp;#039;: &amp;#039;, el(&amp;#039;a&amp;#039;, item.by, { href: mw.util.getUrl(&amp;#039;User:&amp;#039; + item.by) }),&lt;br /&gt;
				&amp;quot; blocked &amp;quot;, el(&amp;#039;b&amp;#039;, item.user),&lt;br /&gt;
				&amp;quot; (&amp;quot;, el(&amp;#039;a&amp;#039;, &amp;#039;block log&amp;#039;, { href: mw.util.getUrl(&amp;#039;Special:Log/block&amp;#039;, { page: &amp;#039;User:&amp;#039; + item.user }) }), &amp;quot;),&amp;quot;,&lt;br /&gt;
				&amp;#039; expiring &amp;#039;, el(&amp;#039;b&amp;#039;, item.expiry === &amp;#039;infinity&amp;#039; ? &amp;#039;never&amp;#039; : fmtDate(item.expiry)),&lt;br /&gt;
				item.reason &amp;amp;&amp;amp; &amp;quot; (&amp;quot;, item.reason, item.reason &amp;amp;&amp;amp; &amp;quot;)&amp;quot;,&lt;br /&gt;
			]));&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (result.query.globalblocks)&lt;br /&gt;
		for (i = 0; i &amp;lt; result.query.globalblocks.length; ++i) {&lt;br /&gt;
			item = result.query.globalblocks[i];&lt;br /&gt;
			list.appendChild(el(&amp;#039;li&amp;#039;, [&lt;br /&gt;
				fmtDate(item.timestamp),&lt;br /&gt;
				&amp;#039;: &amp;#039;, el(&amp;#039;a&amp;#039;, item.by, { href: mw.util.getUrl(wd2iw[item.bywiki] + &amp;#039;:User:&amp;#039; + item.by) }),&lt;br /&gt;
				&amp;quot; at &amp;quot;, el(&amp;#039;code&amp;#039;, item.bywiki),&lt;br /&gt;
				&amp;quot; globally blocked &amp;quot;, el(&amp;#039;b&amp;#039;, item.address),&lt;br /&gt;
				&amp;quot; (&amp;quot;, el(&amp;#039;a&amp;#039;, &amp;quot;gblblock log&amp;quot;, { href: mw.util.getUrl(wd2iw[item.bywiki] + &amp;#039;:Special:Log/gblblock&amp;#039;, { page: &amp;#039;User:&amp;#039; + item.address }) }), &amp;quot;),&amp;quot;,&lt;br /&gt;
				&amp;quot; expiring &amp;quot;, el(&amp;#039;b&amp;#039;, item.expiry === &amp;#039;infinity&amp;#039; ? &amp;quot;never&amp;quot; : fmtDate(item.expiry)),&lt;br /&gt;
				item.reason &amp;amp;&amp;amp; &amp;quot; (&amp;quot;, item.reason, item.reason &amp;amp;&amp;amp; &amp;quot;)&amp;quot;,&lt;br /&gt;
			]));&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		callback(list);&lt;br /&gt;
	});&lt;br /&gt;
	&lt;br /&gt;
	return rq;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeBox(user, relTo) {&lt;br /&gt;
	if (!user)&lt;br /&gt;
		return;&lt;br /&gt;
	relTo = relTo || document.getElementById(&amp;#039;mw-content-text&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	var afterList, box = el(&amp;#039;div&amp;#039;, [&lt;br /&gt;
		el(&amp;#039;p&amp;#039;, [el(&amp;#039;strong&amp;#039;, user), &amp;#039; is currently blocked.&amp;#039;]),&lt;br /&gt;
		afterList = el(&amp;#039;small&amp;#039;, [&lt;br /&gt;
			el(&amp;#039;a&amp;#039;, &amp;quot;block log&amp;quot;        , { href: mw.util.getUrl(&amp;#039;Special:Log/block&amp;#039;, { page: &amp;#039;User:&amp;#039; + user }) })&lt;br /&gt;
		])&lt;br /&gt;
	], {&lt;br /&gt;
		&amp;#039;class&amp;#039;: &amp;#039;mw-warning-with-logexcerpt&amp;#039;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	relTo.rq = buildList(user, function (list) {&lt;br /&gt;
		relTo.rq = null;&lt;br /&gt;
		if (!list.hasChildNodes())&lt;br /&gt;
			return;&lt;br /&gt;
&lt;br /&gt;
		box.insertBefore(list, afterList);&lt;br /&gt;
		relTo.parentNode.insertBefore(box, relTo);&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	return box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var user;&lt;br /&gt;
&lt;br /&gt;
var wgNamespaceNumber = mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;);&lt;br /&gt;
var wgNamespaceIds = mw.config.get(&amp;#039;wgNamespaceIds&amp;#039;);&lt;br /&gt;
var wgTitle = mw.config.get(&amp;#039;wgTitle&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
if ((wgNamespaceNumber &amp;amp; ~1) === wgNamespaceIds.user) {&lt;br /&gt;
	makeBox(wgTitle.replace(/\/.*$/, &amp;#039;&amp;#039;));&lt;br /&gt;
} else if ((mw.config.get(&amp;#039;wgCanonicalSpecialPageName&amp;#039;) === &amp;#039;Contributions&amp;#039;) || (mw.config.get(&amp;#039;wgCanonicalSpecialPageName&amp;#039;) === &amp;#039;DeletedContributions&amp;#039;)) {&lt;br /&gt;
	makeBox(wgTitle.indexOf(&amp;#039;/&amp;#039;) !== -1 ? wgTitle.replace(/^.*?\//, &amp;#039;&amp;#039;) : mw.util.getParamValue(&amp;#039;target&amp;#039;));&lt;br /&gt;
} else if (mw.config.get(&amp;#039;wgCanonicalSpecialPageName&amp;#039;) === &amp;#039;Log&amp;#039;) {&lt;br /&gt;
	user = mw.util.getParamValue(&amp;#039;user&amp;#039;);&lt;br /&gt;
	if (/^[^\/]+\/(block|delete)$/.test(wgTitle))&lt;br /&gt;
		return;&lt;br /&gt;
	if (wgTitle.indexOf(&amp;#039;/&amp;#039;) !== -1)&lt;br /&gt;
		user = wgTitle.replace(/^.*\//, &amp;#039;&amp;#039;);&lt;br /&gt;
	makeBox(user);&lt;br /&gt;
} else if (mw.config.get(&amp;#039;wgCanonicalSpecialPageName&amp;#039;) === &amp;#039;Block&amp;#039;) {&lt;br /&gt;
	var ipinput = document.getElementById(&amp;#039;mw-bi-target&amp;#039;);&lt;br /&gt;
	var relTo = ipinput.form.getElementsByTagName(&amp;#039;legend&amp;#039;)[0].nextSibling;&lt;br /&gt;
	var warnnode = null;&lt;br /&gt;
&lt;br /&gt;
	var refresh = function () {&lt;br /&gt;
		if (relTo.rq)&lt;br /&gt;
			relTo.rq.abort();&lt;br /&gt;
&lt;br /&gt;
		if (warnnode &amp;amp;&amp;amp; warnnode.parentNode) {&lt;br /&gt;
			warnnode.parentNode.removeChild(warnnode);&lt;br /&gt;
			warnnode = null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!ipinput.value)&lt;br /&gt;
			return;&lt;br /&gt;
&lt;br /&gt;
		warnnode = makeBox(ipinput.value, relTo);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var tmout;&lt;br /&gt;
	ipinput.addEventListener(&amp;#039;input&amp;#039;, function () {&lt;br /&gt;
		clearTimeout(tmout);&lt;br /&gt;
		tmout = setTimeout(refresh, 500);&lt;br /&gt;
	}, false);&lt;br /&gt;
	ipinput.addEventListener(&amp;#039;change&amp;#039;, function () {&lt;br /&gt;
		refresh();&lt;br /&gt;
	}, false);&lt;br /&gt;
	refresh();&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>wikt&gt;-sche</name></author>
	</entry>
</feed>