<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AT_kns%2Fcontribsrange.js</id>
	<title>Участник:T kns/contribsrange.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AT_kns%2Fcontribsrange.js"/>
	<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:T_kns/contribsrange.js&amp;action=history"/>
	<updated>2026-11-06T17:33:30Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://t8.lbstr.eu/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:T_kns/contribsrange.js&amp;diff=43251&amp;oldid=prev</id>
		<title>imported&gt;T kns в 11:45, 7 марта 2012</title>
		<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:T_kns/contribsrange.js&amp;diff=43251&amp;oldid=prev"/>
		<updated>2012-03-07T11:45:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;//&amp;lt;pre&amp;gt;&lt;br /&gt;
// Copy of http://en.wikipedia.org/wiki/MediaWiki:Gadget-contribsrange.js made 2008.11.07&lt;br /&gt;
// Except documentation and the first few lines of prefixContribsInit() &lt;br /&gt;
 &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;
&lt;br /&gt;
&lt;br /&gt;
if(wgCanonicalSpecialPageName == &amp;#039;Contributions&amp;#039; &amp;amp;&amp;amp; wgEnableAPI) { &lt;br /&gt;
  var crContURI = &amp;#039;&amp;#039;; //query URI for continuing later&lt;br /&gt;
  var crLimit = 500;&lt;br /&gt;
  var crMax = 10000; //bypass with &amp;amp;crshowall=true URI parameter&lt;br /&gt;
  var crImgHid = wgServer + stylepath + &amp;#039;/common/images/Arr_r.png&amp;#039;;&lt;br /&gt;
  var crImgSho = wgServer + stylepath + &amp;#039;/common/images/Arr_d.png&amp;#039;;&lt;br /&gt;
  appendCSS(&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;
  addOnloadHook(prefixContribsInit);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function prefixContribsInit() {&lt;br /&gt;
  var ucfrm = document.getElementsByTagName(&amp;#039;form&amp;#039;)[0]&lt;br /&gt;
 if (!ucfrm || !ucfrm.target) return&lt;br /&gt;
 var fls = document.getElementsByTagName(&amp;#039;fieldset&amp;#039;)[0] || ucfrm&lt;br /&gt;
 var sm = document.createElement(&amp;#039;small&amp;#039;)&lt;br /&gt;
 sm.innerHTML = &amp;#039;Включён гаджет диапазонов 0.2. Вы можете ввести IP &amp;lt;a href=&amp;quot;//www.mediawiki.org/wiki/Help:Range_blocks#Technical_explanation&amp;quot;&amp;gt;CIDR диапазон&amp;lt;/a&amp;gt; или добавить * в конце слова.&amp;#039; &lt;br /&gt;
 fls.appendChild(sm)&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 m = &amp;#039;&amp;#039; + ucfrm.month.selectedIndex; &lt;br /&gt;
  var y = ucfrm.year.value;&lt;br /&gt;
  if(m.length == 1) m = &amp;#039;0&amp;#039; + m&lt;br /&gt;
  if(y &amp;gt; 2000 &amp;amp;&amp;amp; y &amp;lt; 2100) opt_ts = &amp;#039;&amp;amp;ucstart=&amp;#039; + y + &amp;#039;-&amp;#039; + m + &amp;#039;-01T00:00:00Z&amp;#039;&lt;br /&gt;
  var options = opt_ns + opt_ts;&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[4-9]|3[0-2]|16)/i ;&lt;br /&gt;
  var patternWild = /^.{3,}\*$/i ;&lt;br /&gt;
  var url = wgServer + wgScriptPath + &amp;#039;/api.php?action=query&amp;amp;format=json&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, lets 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) url += &amp;#039;|&amp;#039;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if(ucfrm.target.value.search(patternWild) == 0) {&lt;br /&gt;
    //very simple wildcard, lets 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;
  importScriptURI(url);&lt;br /&gt;
  crContURI = 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:prefixContribsToggleDiv();&amp;#039;,&amp;#039;expand 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;
  injectSpinner(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;
  if(!obj[&amp;#039;query&amp;#039;] || !obj[&amp;#039;query&amp;#039;][&amp;#039;usercontribs&amp;#039;]) return&lt;br /&gt;
  cidr = obj[&amp;#039;query&amp;#039;][&amp;#039;usercontribs&amp;#039;];&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;
    removeSpinner(&amp;#039;prefixcontribs-spin&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;
    // 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, wgScript + &amp;#039;?title=Special:Contributions/&amp;#039; + cidr[i].user, cidr[i].user);&lt;br /&gt;
     li.appendChild(document.createTextNode(&amp;#039; (&amp;#039;));&lt;br /&gt;
     addlinkchild(li, wgScript + &amp;#039;?title=User_talk:&amp;#039; + cidr[i].user, &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, wgScript + &amp;#039;?title=-&amp;amp;curid=&amp;#039; + cidr[i].pageid + &amp;#039;&amp;amp;diff=&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, wgScript + &amp;#039;?title=-&amp;amp;curid=&amp;#039; + cidr[i].pageid, cidr[i].title);&lt;br /&gt;
     if(cidr[i].comment) li.appendChild(document.createTextNode(&amp;#039; (&amp;#039; + cidr[i].comment + &amp;#039;)&amp;#039;))&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(!obj[&amp;#039;query-continue&amp;#039;] || !obj[&amp;#039;query-continue&amp;#039;][&amp;#039;usercontribs&amp;#039;] || !obj[&amp;#039;query-continue&amp;#039;][&amp;#039;usercontribs&amp;#039;][&amp;#039;uccontinue&amp;#039;]) {&lt;br /&gt;
    removeSpinner(&amp;#039;prefixcontribs-spin&amp;#039;);  &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;][&amp;#039;usercontribs&amp;#039;][&amp;#039;uccontinue&amp;#039;];&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) gaurl = gaurl.substr(0,gaurl.indexOf(&amp;#039;#&amp;#039;))&lt;br /&gt;
     if(gaurl.indexOf(&amp;#039;?&amp;#039;) == -1) gaurl += &amp;#039;?&amp;#039;&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;
    removeSpinner(&amp;#039;prefixcontribs-spin&amp;#039;);&lt;br /&gt;
    prefixContribsNumerate();&lt;br /&gt;
  } else {&lt;br /&gt;
    prog.appendChild(document.createTextNode(&amp;#039;.&amp;#039;));&lt;br /&gt;
    importScriptURI(url);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function prefixContribsNumerate() {&lt;br /&gt;
  var lsts = getElementsByClassName(document,&amp;#039;ul&amp;#039;,&amp;#039;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) prefixContribsToggleDiv(lsts[0].id)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function prefixContribsToggleDiv(id,force) {&lt;br /&gt;
  if(!id) {&lt;br /&gt;
    var lsts = getElementsByClassName(document,&amp;#039;ul&amp;#039;,&amp;#039;cr-list&amp;#039;);&lt;br /&gt;
    for(var i=0;i&amp;lt;lsts.length;i++) prefixContribsToggleDiv(lsts[i].id,true)&lt;br /&gt;
    return;&lt;br /&gt;
  }&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) return&lt;br /&gt;
  if(i.style.display == &amp;#039;none&amp;#039; || force) {&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) return false;&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) a.setAttribute(&amp;#039;id&amp;#039;,id);&lt;br /&gt;
  if(classes) a.setAttribute(&amp;#039;class&amp;#039;,classes);&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;
//&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;T kns</name></author>
	</entry>
</feed>