<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://compusofia.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-contribsrange.js</id>
	<title>MediaWiki:Gadget-contribsrange.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://compusofia.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-contribsrange.js"/>
	<link rel="alternate" type="text/html" href="https://compusofia.com/w/index.php?title=MediaWiki:Gadget-contribsrange.js&amp;action=history"/>
	<updated>2026-04-23T17:24:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://compusofia.com/w/index.php?title=MediaWiki:Gadget-contribsrange.js&amp;diff=1900&amp;oldid=prev</id>
		<title>Majestix: 1 revision imported: Initial Setup</title>
		<link rel="alternate" type="text/html" href="https://compusofia.com/w/index.php?title=MediaWiki:Gadget-contribsrange.js&amp;diff=1900&amp;oldid=prev"/>
		<updated>2026-04-09T10:32:32Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported: Initial Setup&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 12:32, 9 April 2026&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>Majestix</name></author>
	</entry>
	<entry>
		<id>https://compusofia.com/w/index.php?title=MediaWiki:Gadget-contribsrange.js&amp;diff=1899&amp;oldid=prev</id>
		<title>en&gt;Pppery: Cap</title>
		<link rel="alternate" type="text/html" href="https://compusofia.com/w/index.php?title=MediaWiki:Gadget-contribsrange.js&amp;diff=1899&amp;oldid=prev"/>
		<updated>2025-04-02T18:48:18Z</updated>

		<summary type="html">&lt;p&gt;Cap&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Special:Contributions Wildcard/CIDR lookup, version [0.2.7], Updated by Krinkle (2017-07-25)&lt;br /&gt;
Originally from: http://en.wikipedia.org/wiki/User:Splarka/contribsrange.js&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Uses the API which is faster than most CIDR contrib tools.&lt;br /&gt;
** Needs 1.14 r42198+ for advanced continue.&lt;br /&gt;
* Currently uses a GET json via &amp;lt;script src=&amp;quot;&amp;quot;&amp;gt; to avoid ajax problems.&lt;br /&gt;
* Only currently works if submitted (or called by URL parameter, eg Special:Contributions/User).&lt;br /&gt;
** Checks namespace and date options in form.&lt;br /&gt;
** Also utilizes &amp;amp;ucstart and &amp;amp;ucend date parameters if supplied manually (not supported in the UI atm).&lt;br /&gt;
*** These parameter soverride the form date options.&lt;br /&gt;
* Uses: Submit any IP CIDR range /16 or from /24 to /32. Submit any string (at least 3 characters) with a suffixed asterisk.&lt;br /&gt;
** eg: [123.123.123.0/24 ] or [123.123.123.* ] or [Willy* ].&lt;br /&gt;
* Now keeps searching until it finds crMax (or forever with crshowall=true URI parameter).&lt;br /&gt;
** Puts them in a nice collapsed div stack, like enhanced recent changes.&lt;br /&gt;
* /25 and /26 ranges now disabled, since they are inaccurate (50 parameter limit), please use /24 (ucuserprefix) or /27 (32 parameters)&lt;br /&gt;
&lt;br /&gt;
To do:&lt;br /&gt;
* use ajax (let sysops/bots = 5000)?&lt;br /&gt;
*/&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
if( mw.config.get(&amp;#039;wgCanonicalSpecialPageName&amp;#039;) == &amp;#039;Contributions&amp;#039; &amp;amp;&amp;amp; true ) {&lt;br /&gt;
	var crContURI = &amp;#039;&amp;#039;; // query URI for continuing later&lt;br /&gt;
	var crLimit = 500; // limit for each query&lt;br /&gt;
	var crMax = 10000; // bypass with &amp;amp;crshowall=true URI parameter&lt;br /&gt;
	var crImgHid = &amp;#039;//upload.wikimedia.org/wikipedia/commons/a/ad/Arr_r.png&amp;#039;;&lt;br /&gt;
	var crImgSho = &amp;#039;//upload.wikimedia.org/wikipedia/commons/f/f0/Arr_d.png&amp;#039;;&lt;br /&gt;
	var crModuleLoad;&lt;br /&gt;
	$( prefixContribsInit );&lt;br /&gt;
	mw.util.addCSS(&lt;br /&gt;
		&amp;#039;.cr-list {padding-left:5px;}\n.cr-toggle-hidden {padding-left:16px;background: transparent no-repeat center left url(&amp;quot;&amp;#039; + crImgHid + &amp;#039;&amp;quot;)}&amp;#039; +&lt;br /&gt;
		&amp;#039;\n.cr-toggle-shown {padding-left:16px;background: transparent no-repeat center left url(&amp;quot;&amp;#039; + crImgSho + &amp;#039;&amp;quot;)}\n.mw-mightexist {font-style:italic;}&amp;#039; +&lt;br /&gt;
		&amp;#039;\n#results-from-CIDR {border:1px solid black;padding:.5em}\n#prefixcontribs-tog {float:right;border:1px solid black;text-decoration:none;color:black;padding:0 5px;}&amp;#039;&lt;br /&gt;
	);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function prefixContribsInit() {&lt;br /&gt;
	var show = document.getElementById( &amp;#039;contentSub&amp;#039; ) || document.getElementById( &amp;#039;topbar&amp;#039; );&lt;br /&gt;
	if( show ) {&lt;br /&gt;
		show.appendChild( document.createTextNode( &amp;#039; \u2022 JavaScript-enhanced contributions lookup 0.2 enabled. You may enter a CIDR range or append an asterisk to do a prefix search.&amp;#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
	var ucfrm = document.getElementsByTagName( &amp;#039;form&amp;#039; )[0];&lt;br /&gt;
	if( !ucfrm.target ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// general optionlets independent of type of search.&lt;br /&gt;
	var opt_ns = ( parseInt( ucfrm.namespace[ucfrm.namespace.selectedIndex].value ) &amp;gt; -1 ) ? &amp;#039;&amp;amp;ucnamespace=&amp;#039; + ucfrm.namespace[ucfrm.namespace.selectedIndex].value : &amp;#039;&amp;#039;;&lt;br /&gt;
	var opt_ts = &amp;#039;&amp;#039;;&lt;br /&gt;
	var start = ucfrm.start &amp;amp;&amp;amp; ucfrm.start.value &amp;amp;&amp;amp; ( ucfrm.start.value + &amp;#039;T00:00:00Z&amp;#039; );&lt;br /&gt;
	if( start ) {&lt;br /&gt;
		opt_ts = &amp;#039;&amp;amp;ucstart=&amp;#039; + start;&lt;br /&gt;
	}&lt;br /&gt;
	var opts_se = &amp;#039;&amp;#039;;&lt;br /&gt;
	if( queryString( &amp;#039;ucstart&amp;#039; ) ) {&lt;br /&gt;
		opts_se += &amp;#039;&amp;amp;ucstart=&amp;#039; + encodeURIComponent( queryString( &amp;#039;ucstart&amp;#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
	if( queryString( &amp;#039;ucend&amp;#039; ) ) {&lt;br /&gt;
		opts_se += &amp;#039;&amp;amp;ucend=&amp;#039; + encodeURIComponent( queryString( &amp;#039;ucend&amp;#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
	if( opts_se == &amp;#039;&amp;#039; ) {&lt;br /&gt;
		var options = opt_ns + opt_ts;&lt;br /&gt;
	} else {&lt;br /&gt;
		var options = opt_ns + opts_se + &amp;#039;&amp;amp;ucdir=newer&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var patternCIDR = /(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(2[7-9]|3[0-2]|24|16)/i;&lt;br /&gt;
	var patternWild = /^.{3,}\*$/i;&lt;br /&gt;
	var url = mw.config.get(&amp;#039;wgServer&amp;#039;) + mw.config.get(&amp;#039;wgScriptPath&amp;#039;) + &amp;#039;/api.php?action=query&amp;amp;format=json&amp;amp;rawcontinue=&amp;amp;callback=prefixContribs&amp;amp;list=usercontribs&amp;#039; + options + &amp;#039;&amp;amp;uclimit=&amp;#039; + parseInt( crLimit );&lt;br /&gt;
	if( ucfrm.target.value.search( patternCIDR ) == 0 ) {&lt;br /&gt;
		prefixContribsStartbox( ucfrm.parentNode );&lt;br /&gt;
		var cidr = ucfrm.target.value.match( patternCIDR )[0];&lt;br /&gt;
		var range = cidr.match( /[^\/]\d{1,2}$/i )[0];&lt;br /&gt;
		if( range == 24 || range == 16 ) {&lt;br /&gt;
			// prefixable CIDR, lets do-er&lt;br /&gt;
			if( range == 24 ) {&lt;br /&gt;
				cidr = cidr.match( /\d{1,3}\.\d{1,3}\.\d{1,3}\./ )[0];&lt;br /&gt;
			} else {&lt;br /&gt;
				cidr = cidr.match( /\d{1,3}\.\d{1,3}\./ )[0];&lt;br /&gt;
			}&lt;br /&gt;
			url += &amp;#039;&amp;amp;ucuserprefix=&amp;#039; + cidr;&lt;br /&gt;
		} else {&lt;br /&gt;
			// complex CIDR, let&amp;#039;s figure it out&lt;br /&gt;
			var oct3 = cidr.match( /\.\d{1,3}\//i )[0].replace( /(\.|\/)/g, &amp;#039;&amp;#039; );&lt;br /&gt;
			cidr = cidr.match( /\d{1,3}\.\d{1,3}\.\d{1,3}\./ )[0];&lt;br /&gt;
			var num = Math.pow( 2, 32 - range );&lt;br /&gt;
			var start = oct3 - oct3 % num;&lt;br /&gt;
			url += &amp;#039;&amp;amp;ucuser=&amp;#039;;&lt;br /&gt;
			for( var i = start; i &amp;lt;= start + num; i++ ) {&lt;br /&gt;
				url += &amp;#039;&amp;#039; + cidr + i;&lt;br /&gt;
				if( i != start + num ) {&lt;br /&gt;
					url += &amp;#039;|&amp;#039;;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	} else if( ucfrm.target.value.search( patternWild ) == 0 ) {&lt;br /&gt;
		// very simple wildcard, let&amp;#039;s do-er&lt;br /&gt;
		prefixContribsStartbox( ucfrm.parentNode );&lt;br /&gt;
		var prefix = ucfrm.target.value.replace( /\*$/, &amp;#039;&amp;#039; );&lt;br /&gt;
		prefix = prefix.substr( 0, 1 ).toUpperCase() + prefix.substr( 1 );&lt;br /&gt;
		url += &amp;#039;&amp;amp;ucuserprefix=&amp;#039; + prefix;&lt;br /&gt;
	}&lt;br /&gt;
	crContURI = url;&lt;br /&gt;
	mw.loader.load( url );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function prefixContribsStartbox( parent ) {&lt;br /&gt;
	var res = document.createElement( &amp;#039;div&amp;#039; );&lt;br /&gt;
	res.setAttribute( &amp;#039;id&amp;#039;, &amp;#039;results-from-CIDR&amp;#039; );&lt;br /&gt;
	addlinkchild( res, &amp;#039;javascript:prefixContribsToggleAll();&amp;#039;, &amp;#039;toggle all&amp;#039;, &amp;#039;prefixcontribs-tog&amp;#039; );&lt;br /&gt;
	var spin = document.createElement( &amp;#039;span&amp;#039; );&lt;br /&gt;
	spin.setAttribute( &amp;#039;id&amp;#039;, &amp;#039;prefixcontribs-prog&amp;#039; );&lt;br /&gt;
	spin.appendChild( document.createTextNode( &amp;#039;Searching.&amp;#039; ) );&lt;br /&gt;
	res.appendChild( spin );&lt;br /&gt;
	createSpinner( spin, &amp;#039;prefixcontribs-spin&amp;#039; );&lt;br /&gt;
	parent.appendChild( res );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function prefixContribs( obj ) {&lt;br /&gt;
	removeSpinner( &amp;#039;prefixcontribs-spin&amp;#039; );&lt;br /&gt;
	if( !obj.query || !obj.query.usercontribs ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	cidr = obj.query.usercontribs;&lt;br /&gt;
	var res = document.getElementById( &amp;#039;results-from-CIDR&amp;#039; );&lt;br /&gt;
	if( cidr.length == 0 ) {&lt;br /&gt;
		res.appendChild( document.createTextNode( &amp;#039; No changes were found for this wildcard/CIDR range.&amp;#039; ) );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	for( var i = 0; i &amp;lt; cidr.length; i++ ) {&lt;br /&gt;
		var id = &amp;#039;cr-&amp;#039; + escapeID( cidr[i].user );&lt;br /&gt;
		var etitle = encodeURIComponent( cidr[i].title.replace( / /g, &amp;#039;_&amp;#039; ) ).replace( &amp;#039;%2F&amp;#039;, &amp;#039;/&amp;#039; ).replace( &amp;#039;%3A&amp;#039;, &amp;#039;:&amp;#039; );&lt;br /&gt;
		var euser = encodeURIComponent( cidr[i].user.replace( / /g, &amp;#039;_&amp;#039; ) ).replace( &amp;#039;%2F&amp;#039;, &amp;#039;/&amp;#039; ).replace( &amp;#039;%3A&amp;#039;, &amp;#039;:&amp;#039; );&lt;br /&gt;
		// group each result set based on the user name, create new div for new names&lt;br /&gt;
		if( !document.getElementById( id ) ) {&lt;br /&gt;
			var hdiv = document.createElement( &amp;#039;div&amp;#039; );&lt;br /&gt;
			hdiv.setAttribute( &amp;#039;id&amp;#039;, &amp;#039;d-&amp;#039; + id );&lt;br /&gt;
			addlinkchild( hdiv, &amp;#039;javascript:prefixContribsToggleDiv(&amp;quot;&amp;#039; + id + &amp;#039;&amp;quot;)&amp;#039;, cidr[i].user, &amp;#039;m-&amp;#039; + id, &amp;#039;cr-toggle-hidden&amp;#039; );&lt;br /&gt;
			res.appendChild( hdiv );&lt;br /&gt;
			res.appendChild( document.createTextNode( &amp;#039;\n&amp;#039; ) );&lt;br /&gt;
			var rul = document.createElement( &amp;#039;ul&amp;#039; );&lt;br /&gt;
			rul.setAttribute( &amp;#039;id&amp;#039;, id );&lt;br /&gt;
			rul.setAttribute( &amp;#039;class&amp;#039;, &amp;#039;cr-list&amp;#039; );&lt;br /&gt;
			rul.style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
			res.appendChild( rul );&lt;br /&gt;
			res.appendChild( document.createTextNode( &amp;#039;\n&amp;#039; ) );&lt;br /&gt;
		}&lt;br /&gt;
		var ul = document.getElementById( id );&lt;br /&gt;
		ul.appendChild( document.createTextNode( &amp;#039;\n&amp;#039; ) );&lt;br /&gt;
		var li = document.createElement( &amp;#039;li&amp;#039; );&lt;br /&gt;
		li.appendChild( document.createTextNode( cidr[i].timestamp.replace( /T[\d:]*Z/, &amp;#039; &amp;#039; ) ) );&lt;br /&gt;
		addlinkchild( li, mw.config.get(&amp;#039;wgScript&amp;#039;) + &amp;#039;?title=Special:Contributions/&amp;#039; + euser, cidr[i].user );&lt;br /&gt;
		li.appendChild( document.createTextNode( &amp;#039; (&amp;#039; ) );&lt;br /&gt;
		addlinkchild( li, mw.config.get(&amp;#039;wgScript&amp;#039;) + &amp;#039;?title=User_talk:&amp;#039; + euser, &amp;#039;talk&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;mw-mightexist&amp;#039; );&lt;br /&gt;
		li.appendChild( document.createTextNode( &amp;#039;) edited (&amp;#039; ) );&lt;br /&gt;
		addlinkchild( li, mw.config.get(&amp;#039;wgScript&amp;#039;) + &amp;#039;?title=&amp;#039; + etitle + &amp;#039;&amp;amp;curid=&amp;#039; + cidr[i].pageid + &amp;#039;&amp;amp;diff=prev&amp;amp;oldid=&amp;#039; + cidr[i].revid, &amp;#039;diff&amp;#039; );&lt;br /&gt;
		li.appendChild( document.createTextNode( &amp;#039;) &amp;#039; ) );&lt;br /&gt;
		addlinkchild( li, mw.config.get(&amp;#039;wgScript&amp;#039;) + &amp;#039;?title=&amp;#039; + etitle + &amp;#039;&amp;amp;curid=&amp;#039; + cidr[i].pageid, cidr[i].title );&lt;br /&gt;
		if( cidr[i].comment ) {&lt;br /&gt;
			li.appendChild( document.createTextNode( &amp;#039; (&amp;#039; + cidr[i].comment + &amp;#039;)&amp;#039; ) );&lt;br /&gt;
		}&lt;br /&gt;
		ul.appendChild( li );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// continue?&lt;br /&gt;
	crMax = crMax - cidr.length;&lt;br /&gt;
	var prog = document.getElementById( &amp;#039;prefixcontribs-prog&amp;#039; );&lt;br /&gt;
	if(&lt;br /&gt;
		!obj[&amp;#039;query-continue&amp;#039;] ||&lt;br /&gt;
		!obj[&amp;#039;query-continue&amp;#039;].usercontribs ||&lt;br /&gt;
		!obj[&amp;#039;query-continue&amp;#039;].usercontribs.uccontinue&lt;br /&gt;
	)&lt;br /&gt;
	{&lt;br /&gt;
		prog.parentNode.removeChild( prog );&lt;br /&gt;
		prefixContribsNumerate();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	var url = crContURI + &amp;#039;&amp;amp;uccontinue=&amp;#039;+ obj[&amp;#039;query-continue&amp;#039;].usercontribs.uccontinue;&lt;br /&gt;
	if( crMax &amp;lt;= 0 &amp;amp;&amp;amp; queryString( &amp;#039;crshowall&amp;#039; ) != &amp;#039;true&amp;#039; ) {&lt;br /&gt;
		prog.appendChild( document.createTextNode( &amp;#039; Whoa! Finding a lot. To see them all click &amp;#039; ) );&lt;br /&gt;
		var ga = document.createElement( &amp;#039;a&amp;#039; );&lt;br /&gt;
		var gaurl = document.location.href;&lt;br /&gt;
		if( gaurl.indexOf( &amp;#039;#&amp;#039; ) != -1 ) {&lt;br /&gt;
			gaurl = gaurl.substr( 0, gaurl.indexOf( &amp;#039;#&amp;#039; ) );&lt;br /&gt;
		}&lt;br /&gt;
		if( gaurl.indexOf( &amp;#039;?&amp;#039; ) == -1 ) {&lt;br /&gt;
			gaurl += &amp;#039;?&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		gaurl += &amp;#039;&amp;amp;crshowall=true&amp;#039;;&lt;br /&gt;
		ga.setAttribute( &amp;#039;href&amp;#039;, gaurl );&lt;br /&gt;
		ga.appendChild( document.createTextNode( &amp;#039;here&amp;#039; ) );&lt;br /&gt;
		prog.appendChild( ga );&lt;br /&gt;
		prog.appendChild( document.createTextNode( &amp;#039;. (Warning: May bog down browser!)&amp;#039; ) );&lt;br /&gt;
		prefixContribsNumerate();&lt;br /&gt;
	} else {&lt;br /&gt;
		prog.appendChild( document.createTextNode( &amp;#039;.&amp;#039; ) );&lt;br /&gt;
		mw.loader.load( url );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function prefixContribsNumerate() {&lt;br /&gt;
	var lsts = document.querySelectorAll( &amp;#039;ul.cr-list&amp;#039; );&lt;br /&gt;
	for( var i = 0; i &amp;lt; lsts.length; i++ ) {&lt;br /&gt;
		var dv = document.getElementById( &amp;#039;d-&amp;#039; + lsts[i].getAttribute( &amp;#039;id&amp;#039; ) );&lt;br /&gt;
		dv.appendChild( document.createTextNode( &amp;#039; &amp;#039; + lsts[i].getElementsByTagName( &amp;#039;li&amp;#039; ).length + &amp;#039; found&amp;#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
	if( lsts.length == 1 ) {&lt;br /&gt;
		prefixContribsToggleDiv( lsts[0].id );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function prefixContribsToggleAll() {&lt;br /&gt;
	var lsts = document.querySelectorAll( &amp;#039;ul.cr-list&amp;#039; );&lt;br /&gt;
	if( lsts.length == 0 ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	var togglefrom = lsts[0].style.display;&lt;br /&gt;
	for( var i = 0; i &amp;lt; lsts.length;i++ ) {&lt;br /&gt;
		if( lsts[i].style.display == togglefrom ) {&lt;br /&gt;
			prefixContribsToggleDiv( lsts[i].id );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function prefixContribsToggleDiv( id ) {&lt;br /&gt;
	var i = document.getElementById( id );&lt;br /&gt;
	var m = document.getElementById( &amp;#039;m-&amp;#039; + id );&lt;br /&gt;
	if( !i || !m ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if( i.style.display == &amp;#039;none&amp;#039; ) {&lt;br /&gt;
		i.style.display = &amp;#039;block&amp;#039;;&lt;br /&gt;
		m.className = &amp;#039;cr-toggle-shown&amp;#039;;&lt;br /&gt;
	} else {&lt;br /&gt;
		i.style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
		m.className = &amp;#039;cr-toggle-hidden&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addlinkchild( obj, href, text, id, classes ) {&lt;br /&gt;
	if( !obj || !href || !text ) {&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	var a = document.createElement( &amp;#039;a&amp;#039; );&lt;br /&gt;
	a.setAttribute( &amp;#039;href&amp;#039;, href );&lt;br /&gt;
	a.appendChild( document.createTextNode( text ) );&lt;br /&gt;
	if( id ) {&lt;br /&gt;
		a.setAttribute( &amp;#039;id&amp;#039;, id );&lt;br /&gt;
	}&lt;br /&gt;
	if( classes ) {&lt;br /&gt;
		a.setAttribute( &amp;#039;class&amp;#039;, classes );&lt;br /&gt;
	}&lt;br /&gt;
	obj.appendChild( a );&lt;br /&gt;
	return a;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function escapeID( txt ) {&lt;br /&gt;
	var id = txt;&lt;br /&gt;
	id = id.replace( / /g, &amp;#039;_&amp;#039; );&lt;br /&gt;
	id = encodeURIComponent( id );&lt;br /&gt;
	id = id.replace( /\%3A/g, &amp;#039;:&amp;#039; );&lt;br /&gt;
	id = id.replace( /\%/g, &amp;#039;.&amp;#039; );&lt;br /&gt;
	return id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function queryString( p ) {&lt;br /&gt;
	var re = RegExp( &amp;#039;[&amp;amp;?#]&amp;#039; + p + &amp;#039;=([^&amp;amp;#]*)&amp;#039; );&lt;br /&gt;
	var matches;&lt;br /&gt;
	if ( matches = re.exec( document.location ) ) {&lt;br /&gt;
		try {&lt;br /&gt;
			return decodeURI( matches[1] );&lt;br /&gt;
		} catch ( e ) {&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createSpinner( after, name ) {&lt;br /&gt;
	crModuleLoad = crModuleLoad || mw.loader.using( &amp;#039;jquery.spinner&amp;#039; );&lt;br /&gt;
	crModuleLoad.done( function () {&lt;br /&gt;
		$( after ).after( $.createSpinner( name ) );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function removeSpinner( name ) {&lt;br /&gt;
	if ( crModuleLoad ) {&lt;br /&gt;
		crModuleLoad.done( function () {&lt;br /&gt;
			$.removeSpinner( name );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Expose public methods&lt;br /&gt;
window.prefixContribs = prefixContribs; // JSON-P callback&lt;br /&gt;
window.prefixContribsToggleAll = prefixContribsToggleAll; // href&lt;br /&gt;
window.prefixContribsToggleDiv = prefixContribsToggleDiv; // href&lt;br /&gt;
&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>en&gt;Pppery</name></author>
	</entry>
</feed>