<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://eota.emufarmers.com//w/index.php?action=history&amp;feed=atom&amp;title=User%3AEmufarmers%2Fcommon.js</id>
	<title>User:Emufarmers/common.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://eota.emufarmers.com//w/index.php?action=history&amp;feed=atom&amp;title=User%3AEmufarmers%2Fcommon.js"/>
	<link rel="alternate" type="text/html" href="http://eota.emufarmers.com//w/index.php?title=User:Emufarmers/common.js&amp;action=history"/>
	<updated>2026-04-07T18:45:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>http://eota.emufarmers.com//w/index.php?title=User:Emufarmers/common.js&amp;diff=2790&amp;oldid=prev</id>
		<title>Emufarmers: Created page with &quot;/* Ajax batch delete thingy, version [0.1.1b] Originally from: http://en.wikipedia.org/wiki/User:Splarka/ajaxbatchdelete.js   Notes: * It is a bit verbose, after debugging per...&quot;</title>
		<link rel="alternate" type="text/html" href="http://eota.emufarmers.com//w/index.php?title=User:Emufarmers/common.js&amp;diff=2790&amp;oldid=prev"/>
		<updated>2012-01-21T15:56:08Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;/* Ajax batch delete thingy, version [0.1.1b] Originally from: http://en.wikipedia.org/wiki/User:Splarka/ajaxbatchdelete.js   Notes: * It is a bit verbose, after debugging per...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Ajax batch delete thingy, version [0.1.1b]&lt;br /&gt;
Originally from: http://en.wikipedia.org/wiki/User:Splarka/ajaxbatchdelete.js&lt;br /&gt;
 &lt;br /&gt;
Notes:&lt;br /&gt;
* It is a bit verbose, after debugging perhaps some output should be removed.&lt;br /&gt;
* It waits 1 second after every delete before starting the next.&lt;br /&gt;
* Can be aborted by simply deleting the contents of the textarea, or leaving the page.&lt;br /&gt;
* Stops when it hits a blank line.&lt;br /&gt;
* Nonfatal errors (skip to next line):&lt;br /&gt;
** Bad character or malformed line&lt;br /&gt;
** Bad token&lt;br /&gt;
** Unexpected response&lt;br /&gt;
* Pauses in execution can be added with a blank line.&lt;br /&gt;
 &lt;br /&gt;
To do:&lt;br /&gt;
* Cache the token if two the same?&lt;br /&gt;
** Please note the delete token is not guaranteed to be static, but currently it always is.&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
addOnloadHook(function() {&lt;br /&gt;
  addPortletLink(&amp;#039;p-tb&amp;#039;,&amp;#039;/wiki/Special:BlankPage?blankspecial=ajaxbd&amp;#039;,&amp;#039;Batch Delete&amp;#039;);&lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
if(wgCanonicalSpecialPageName &amp;amp;&amp;amp; wgCanonicalSpecialPageName.toLowerCase() == &amp;#039;blankpage&amp;#039; &amp;amp;&amp;amp; queryString(&amp;#039;blankspecial&amp;#039;) == &amp;#039;ajaxbd&amp;#039;) {&lt;br /&gt;
  document.title = &amp;#039;Ajax Batch Deletion&amp;#039;;&lt;br /&gt;
  addOnloadHook(abdForm);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function abdForm() {&lt;br /&gt;
  addPortletLink(&amp;#039;p-tb&amp;#039;,&amp;#039;/wiki/Special:Log/delete?user=&amp;#039; + encodeURIComponent(wgUserName),&amp;#039;My delete log&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
  //subvert this Special: page to our own needs.&lt;br /&gt;
  var con = document.getElementById(&amp;#039;content&amp;#039;) || document.getElementById(&amp;#039;mw_content&amp;#039;);&lt;br /&gt;
  var bcon = document.getElementById(&amp;#039;bodyContent&amp;#039;) || document.getElementById(&amp;#039;mw_contentholder&amp;#039;);&lt;br /&gt;
  var fh = getElementsByClassName(con,&amp;#039;h1&amp;#039;,&amp;#039;firstHeading&amp;#039;)[0];&lt;br /&gt;
  while(fh.firstChild) fh.removeChild(fh.firstChild)&lt;br /&gt;
  fh.appendChild(document.createTextNode(&amp;#039;Ajax Batch Deletion&amp;#039;));&lt;br /&gt;
  for(var i=0;i&amp;lt;bcon.childNodes.length;i++) {&lt;br /&gt;
    bcur = bcon.childNodes[i];&lt;br /&gt;
    if(bcur.id != &amp;#039;siteSub&amp;#039; &amp;amp;&amp;amp; bcur.id != &amp;#039;contentSub&amp;#039; &amp;amp;&amp;amp; bcur.className != &amp;#039;visualClear&amp;#039;) {&lt;br /&gt;
      while(bcur.firstChild) bcur.removeChild(bcur.firstChild)&lt;br /&gt;
      if(bcur.nodeType == 3) bcur.nodeValue = &amp;#039;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  //generate content&lt;br /&gt;
  var form = document.createElement(&amp;#039;form&amp;#039;);&lt;br /&gt;
   form.appendChild(document.createTextNode(&amp;#039;List of pages to delete:&amp;#039;));&lt;br /&gt;
   form.appendChild(document.createElement(&amp;#039;p&amp;#039;));&lt;br /&gt;
   form.setAttribute(&amp;#039;action&amp;#039;,&amp;#039;javascript:void(0);&amp;#039;);&lt;br /&gt;
   var txt = document.createElement(&amp;#039;textarea&amp;#039;);&lt;br /&gt;
    txt.style.height = &amp;#039;20em&amp;#039;;&lt;br /&gt;
    txt.style.width = &amp;#039;50%&amp;#039;;&lt;br /&gt;
    txt.setAttribute(&amp;#039;id&amp;#039;,&amp;#039;abd-textarea&amp;#039;);&lt;br /&gt;
   form.appendChild(txt);&lt;br /&gt;
   form.appendChild(document.createElement(&amp;#039;p&amp;#039;));&lt;br /&gt;
   var lab1 = document.createElement(&amp;#039;label&amp;#039;);&lt;br /&gt;
    lab1.setAttribute(&amp;#039;for&amp;#039;,&amp;#039;abd-reason&amp;#039;)&lt;br /&gt;
    lab1.appendChild(document.createTextNode(&amp;#039;Deletion reason: &amp;#039;));&lt;br /&gt;
   form.appendChild(lab1);&lt;br /&gt;
   var inp1 = document.createElement(&amp;#039;input&amp;#039;);&lt;br /&gt;
    inp1.style.width = &amp;#039;20em&amp;#039;;&lt;br /&gt;
    inp1.setAttribute(&amp;#039;type&amp;#039;,&amp;#039;text&amp;#039;);&lt;br /&gt;
    inp1.setAttribute(&amp;#039;id&amp;#039;,&amp;#039;abd-reason&amp;#039;);&lt;br /&gt;
   form.appendChild(inp1);&lt;br /&gt;
   form.appendChild(document.createElement(&amp;#039;p&amp;#039;));&lt;br /&gt;
   var sub1 = document.createElement(&amp;#039;input&amp;#039;);&lt;br /&gt;
    sub1.setAttribute(&amp;#039;type&amp;#039;,&amp;#039;button&amp;#039;);&lt;br /&gt;
    sub1.setAttribute(&amp;#039;id&amp;#039;,&amp;#039;abd-startbutton&amp;#039;);&lt;br /&gt;
    sub1.setAttribute(&amp;#039;value&amp;#039;,&amp;#039;start&amp;#039;);&lt;br /&gt;
    sub1.setAttribute(&amp;#039;onclick&amp;#039;,&amp;#039;abdStart()&amp;#039;);&lt;br /&gt;
   form.appendChild(sub1);&lt;br /&gt;
  bcon.appendChild(form);&lt;br /&gt;
  var pre = document.createElement(&amp;#039;pre&amp;#039;);&lt;br /&gt;
   pre.setAttribute(&amp;#039;id&amp;#039;,&amp;#039;abd-output&amp;#039;);&lt;br /&gt;
  bcon.appendChild(pre);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function abdStart() {&lt;br /&gt;
  document.getElementById(&amp;#039;abd-startbutton&amp;#039;).setAttribute(&amp;#039;disabled&amp;#039;,&amp;#039;disabled&amp;#039;);&lt;br /&gt;
  var out = document.getElementById(&amp;#039;abd-output&amp;#039;);&lt;br /&gt;
  var txt = document.getElementById(&amp;#039;abd-textarea&amp;#039;);&lt;br /&gt;
  var deletes = txt.value.split(&amp;#039;\n&amp;#039;);&lt;br /&gt;
  var page = deletes[0];&lt;br /&gt;
  if(page == &amp;#039;&amp;#039;) {&lt;br /&gt;
    out.appendChild(document.createTextNode(&amp;#039;* Done! Nothing left to do, or next line is blank.\n&amp;#039;));&lt;br /&gt;
    document.getElementById(&amp;#039;abd-startbutton&amp;#039;).removeAttribute(&amp;#039;disabled&amp;#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
    var badchars = /(\#|\&amp;lt;|\&amp;gt;|\[|\]|\{|\}|\|)/;&lt;br /&gt;
    if(badchars.test(page)) {&lt;br /&gt;
      out.appendChild(document.createTextNode(&amp;#039;! Illegal characters detected, skipping:&amp;#039; + page + &amp;#039;\n&amp;#039;));&lt;br /&gt;
      setTimeout(&amp;#039;abdStart()&amp;#039;,1000);&lt;br /&gt;
    } else {&lt;br /&gt;
      out.appendChild(document.createTextNode(&amp;#039;&amp;gt; Attempting to delete [[&amp;#039; + page + &amp;#039;]]\n&amp;#039;));&lt;br /&gt;
      abdGetToken(page);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  deletes = deletes.slice(1,deletes.length);&lt;br /&gt;
  txt.value = deletes.join(&amp;#039;\n&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function abdGetToken(page) {&lt;br /&gt;
  var out = document.getElementById(&amp;#039;abd-output&amp;#039;);&lt;br /&gt;
  out.appendChild(document.createTextNode(&amp;#039; &amp;gt; Fetching delete token for [[&amp;#039; + page + &amp;#039;]]\n&amp;#039;));&lt;br /&gt;
  var url = wgScriptPath + &amp;#039;/api.php?action=query&amp;amp;prop=info&amp;amp;indexpageids=1&amp;amp;intoken=delete&amp;amp;format=json&amp;amp;titles=&amp;#039; + encodeURIComponent(page);&lt;br /&gt;
  var req = sajax_init_object();&lt;br /&gt;
  req.open(&amp;#039;GET&amp;#039;, url, true);&lt;br /&gt;
  req.onreadystatechange = function() {&lt;br /&gt;
    if(req.readyState == 4 &amp;amp;&amp;amp; req.status == 200) {&lt;br /&gt;
      eval(&amp;quot;abdDelete(&amp;quot; + req.responseText + &amp;quot;,&amp;#039;&amp;quot; + req.responseText.replace(/\&amp;#039;/g,&amp;quot;`&amp;quot;) + &amp;quot;&amp;#039;,&amp;#039;&amp;quot; + page + &amp;quot;&amp;#039;)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  req.send(null);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function abdDelete(obj,txt,page) {&lt;br /&gt;
  var out = document.getElementById(&amp;#039;abd-output&amp;#039;);&lt;br /&gt;
  if(obj[&amp;#039;error&amp;#039;]) {&lt;br /&gt;
    out.appendChild(document.createTextNode(&amp;#039; ! Api error: &amp;#039; + obj[&amp;#039;error&amp;#039;][&amp;#039;code&amp;#039;] + &amp;#039; - &amp;#039; + obj[&amp;#039;error&amp;#039;][&amp;#039;info&amp;#039;] + &amp;#039;\n&amp;#039;));&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  if(!obj[&amp;#039;query&amp;#039;] || !obj[&amp;#039;query&amp;#039;][&amp;#039;pageids&amp;#039;] || !obj[&amp;#039;query&amp;#039;][&amp;#039;pages&amp;#039;][obj[&amp;#039;query&amp;#039;][&amp;#039;pageids&amp;#039;][0]] || !obj[&amp;#039;query&amp;#039;][&amp;#039;pages&amp;#039;][obj[&amp;#039;query&amp;#039;][&amp;#039;pageids&amp;#039;][0]][&amp;#039;deletetoken&amp;#039;]) {&lt;br /&gt;
    out.appendChild(document.createTextNode(&amp;#039;  ? Unexpected response: &amp;#039; + txt + &amp;#039;\n&amp;#039;));&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var token = obj[&amp;#039;query&amp;#039;][&amp;#039;pages&amp;#039;][obj[&amp;#039;query&amp;#039;][&amp;#039;pageids&amp;#039;][0]][&amp;#039;deletetoken&amp;#039;];&lt;br /&gt;
  out.appendChild(document.createTextNode(&amp;#039;  &amp;gt; Token found, attempting delete\n&amp;#039;));&lt;br /&gt;
  var reason = document.getElementById(&amp;#039;abd-reason&amp;#039;).value;&lt;br /&gt;
 &lt;br /&gt;
  var params = &amp;#039;action=delete&amp;amp;format=json&amp;amp;token=&amp;#039; + encodeURIComponent(token) + &amp;#039;&amp;amp;title=&amp;#039; + encodeURIComponent(page) + &amp;#039;&amp;amp;reason=&amp;#039; + encodeURIComponent(reason);&lt;br /&gt;
  var url = wgScriptPath + &amp;#039;/api.php&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
  var req = sajax_init_object();&lt;br /&gt;
  req.open(&amp;#039;POST&amp;#039;, url, true);&lt;br /&gt;
  req.setRequestHeader(&amp;#039;Content-type&amp;#039;, &amp;#039;application/x-www-form-urlencoded&amp;#039;);&lt;br /&gt;
  req.setRequestHeader(&amp;#039;Content-length&amp;#039;, params.length);&lt;br /&gt;
  req.setRequestHeader(&amp;#039;Connection&amp;#039;, &amp;#039;close&amp;#039;);&lt;br /&gt;
  req.onreadystatechange = function() {&lt;br /&gt;
    if(req.readyState == 4 &amp;amp;&amp;amp; req.status == 200) {&lt;br /&gt;
      eval(&amp;quot;abdDeleteAftermath(&amp;quot; + req.responseText + &amp;quot;,&amp;#039;&amp;quot; + req.responseText.replace(/\&amp;#039;/g,&amp;quot;`&amp;quot;) + &amp;quot;&amp;#039;)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  req.send(params);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function abdDeleteAftermath(obj,txt) {&lt;br /&gt;
  var out = document.getElementById(&amp;#039;abd-output&amp;#039;);&lt;br /&gt;
  if(obj[&amp;#039;error&amp;#039;]) {&lt;br /&gt;
    out.appendChild(document.createTextNode(&amp;#039;   ! Api error: &amp;#039; + obj[&amp;#039;error&amp;#039;][&amp;#039;code&amp;#039;] + &amp;#039; - &amp;#039; + obj[&amp;#039;error&amp;#039;][&amp;#039;info&amp;#039;] + &amp;#039;\n&amp;#039;));&lt;br /&gt;
  } else if(obj[&amp;#039;delete&amp;#039;] &amp;amp;&amp;amp; obj[&amp;#039;delete&amp;#039;][&amp;#039;title&amp;#039;]) {&lt;br /&gt;
    out.appendChild(document.createTextNode(&amp;#039;   &amp;gt; Page [[&amp;#039; + obj[&amp;#039;delete&amp;#039;][&amp;#039;title&amp;#039;] + &amp;#039;]] deleted\n&amp;#039;));&lt;br /&gt;
  } else {&lt;br /&gt;
    out.appendChild(document.createTextNode(&amp;#039;   ? Unexpected response: &amp;#039; + txt + &amp;#039;\n&amp;#039;));&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  setTimeout(&amp;#039;abdStart()&amp;#039;,1000);&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;/div&gt;</summary>
		<author><name>Emufarmers</name></author>
	</entry>
</feed>