User:Quarl/directredirect.js

// User:Quarl/directredirect.js - automatically fix double redirects //  Annotates Special:Whatlinkshere pages with [fix] and [fix all] buttons //  that asynchronously change the target to a direct redirect.

// quarl 2006-01-31 initial version

// requires: wikipage.js, wikiedit.js, util.js

//

directredirect = new Object;

directredirect.annotatePage = function { var contentDiv = document.getElementById('bodyContent'); var links = contentDiv.getElementsByTagName('a'); directredirect.wpTarget = null; var redirects = directredirect.redirects = [];

for (var i in links) { var link = links[i]; if (!link.href) continue; if (!link.href.match(/redirect=no/)) continue;

var wp = new WikiPage(link.href); if (!directredirect.wpTarget) { // first "redirect=no" link, this is the target directredirect.wpTarget = wp; } else { // redirect page; is it a double (or worse) redirect?

if (link.parentNode.parentNode.parentNode == contentDiv) { // if the parent is contentDiv, then it's a first-level // redirect. } else { // double redirect; add button var url = "javascript:directredirect.fix(" + string_quote_escape(wp.page) + ")"; var button = document.createElement('span'); button.innerHTML = ' [fix]'; add_after(link.nextSibling, button); var o = { wp: wp, link: link, button: button }; redirects[wp.page] = o;               redirects.push(o); }       }    }

if (redirects.length) { var p = contentDiv.getElementsByTagName('p')[0]; var button = document.createElement('blockquote'); button.innerHTML = 'There are '+redirects.length+' indirect redirects. [fix all]'; add_before(p, button); } }

directredirect.fix = function(pagename) { directredirect.fix0( directredirect.redirects[pagename] ); }

directredirect.fixall = function { for (var i in directredirect.redirects) { directredirect.fix0( directredirect.redirects[i] ); } }

directredirect.fix0 = function(redirect) { if (!redirect) { alert ("## internal error 8e747379-406c-4bcf-b85f-770c855d9db1"); return; } redirect.button.innerHTML = ' [fixing: downloading...]'; redirect.wp.getEditorAsync(directredirect.edit, redirect); }

directredirect.edit = function(editor, redirect) { redirect.button.innerHTML = ' [fixing: submitting...]'; var pagename = directredirect.wpTarget.page; if (!pagename) { alert ("## internal error 4cf6e5b6-5ed4-4d97-98d3-6288eb8e4f39"); return; } var redir = '#REDIRECT '+pagename+''; editor.wpTextbox1 = redir; editor.wpSummary = 'Direct redirect '+redir; editor.wpMinoredit = true; editor.submitAsync(null, directredirect.editCompleted, redirect); }

directredirect.editCompleted = function(req, redirect) { if (req.status != 200) { alert( "Error submitting new redirect content!" ); return; }

redirect.button.innerHTML = ' [fixed]'; }

directredirect.load = function { if (wikiPage.page != 'Special:Whatlinkshere') return; directredirect.annotatePage; }

$(directredirect.load);

//