User:Cryptic/dblredir.js

// function makebutton(lbl, action) { var button = document.createElement('input'); button.type = 'button'; button.value = lbl; button.setAttribute('onClick', action); return button; }

function descendent_ul(node, ancestor) { return (node.parentNode.tagName == 'LI'          && (node.parentNode.parentNode == ancestor || (node.parentNode.parentNode.tagName == 'UL' && descendent_ul(node.parentNode.parentNode, ancestor)))); }

function fix_double_redirects { var a, i, li, uls = document.getElementsByTagName('UL'), title = escape(document.getElementsByTagName('H1')[0].firstChild.data); for (i = 1; i < uls.length; ++i) if (descendent_ul(uls[i], uls[0])) for (li = uls[i].firstChild; li; li = li.nextSibling) if (li.tagName == 'LI'           && (a = li.firstChild).tagName == 'A'            && a.href.indexOf('&redirect=no') >= 0) window.open(a.href + '&action=edit&fakeaction=fix_dbl_redir&faketarget=' + title, '_blank'); }

addOnloadHook(function {  if (new String(document.location).indexOf('Special:Whatlinkshere') >= 0)    {      var h = document.getElementsByTagName('H1')[0];      h.parentNode.insertBefore(makebutton('Fix double redirects', 'javascript:fix_double_redirects'), h.nextSibling);    }  else if (location.search)    {      var action, target, l = location.search.substring(1).split('&');      for (var i = 0; i < l.length; ++i)        {          var eq = l[i].indexOf('=');          var name = l[i].substring(0, eq);          if (name == 'fakeaction')            action = l[i].substring(eq + 1);          else if (name == 'faketarget')            target = unescape(l[i].substring(eq + 1)).replace(/_/g, ' ');        }      else if (action == 'fix_dbl_redir')        {          document.editform.wpTextbox1.value = document.editform.wpTextbox1.value.replace(/\[\^\+\]\]/,  + target + );          document.editform.wpSummary.value = 'dbl redir'; document.editform.wpMinoredit.checked = true; document.editform.wpDiff.click; // insurance }   } }); //