User:Dschwen/highlightredirects2.js

var highlightRedirects = { tab_redirects : null, status: null, xhr : null, todo : null, num : { total:0, done:0, redir:0 },

// // Try to create an XMLHTTP request object for each tile // with maximum browser compat. // code adapted from http://jibbering.com/2002/4/httprequest.html // createXMLHTTP : function { var i, xhr;

/*@cc_on @*/ /*@if (@_jscript_version >= 5) // Internet Explorer (uses Conditional compilation) // traps security blocked creation of the objects. wmaDebug('Microsoft section'); try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xhr = false; }  }  @end @*/

// Firefox, Konqueror, Safari, Mozilla if (!xhr && typeof(XMLHttpRequest) != 'undefined') { try { xhr = new XMLHttpRequest; } catch (e) { xhr = false; } }

// ICE browser if (!xhr && window.createRequest) { try { xhr = new window.createRequest; } catch (e) { xhr = false; } }

return xhr; },

updateStatus : function { with( highlightRedirects ) {  status.nodeValue = ' (' + num.redir + '/' + num.done + '/' + num.total + ')'; } },

// cross-browser event attachment (John Resig) // http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html addEvent : function ( obj, type, fn ) { if (obj.addEventListener) obj.addEventListener( type, fn, false ); else if (obj.attachEvent) {  obj["e"+type+fn] = fn; obj[type+fn] = function { obj["e"+type+fn]( window.event ); } obj.attachEvent( "on"+type, obj[type+fn] ); } },

run : function { var links = document.getElementById('bodyContent').getElementsByTagName('a'); var local = window.location.href + '#' if( highlightRedirects.todo != null ) return;

highlightRedirects.todo = new Array;

for( var key in links ) {  if( links[key].href &&        links[key].pathname &&       links[key].pathname.substr(0,6) == '/wiki/' &&       !( links[key].href.substr(0,local.length) == local ) ) {   highlightRedirects.todo[highlightRedirects.num.total] = {    link : links[key], xhr : highlightRedirects.createXMLHTTP, func : new Function(      'var me = highlightRedirects.todo['+highlightRedirects.num.total+'];' +        'if(me.xhr.readyState==4) {' +        'var ro=eval("("+me.xhr.responseText+")");' +        'var redir=false;' +        'for( var k in ro.query.pages ) {' +          'if( typeof(ro.query.pages[k].redirect) != "undefined" ) redir=true;' +        '}' +        'if(redir) {' +          'me.link.style.color="green";' +         'highlightRedirects.num.redir++;' +        '}' +         'else me.link.style.color="blue";' +        'highlightRedirects.num.done++; highlightRedirects.updateStatus;' +       '}'      ) }

links[key].style.color = 'gray';

with(highlightRedirects.todo[highlightRedirects.num.total]) {    xhr.open("GET",       "http://en.wikipedia.org/w/api.php?action=query&prop=info&format=json&titles=" +      links[key].pathname.substr(6), true);

xhr.onreadystatechange = func; xhr.send( null ); }

highlightRedirects.num.total++; } } },

install : function { with(highlightRedirects) {  tab_redirects = document.createElement('li'); tab_redirects.style.cursor = 'pointer'; tab_redirects.style.padding = '0pt 0.8em 0pt 0.8em'; tab_redirects.style.color = 'blue';

status = document.createTextNode(''); tab_redirects.appendChild( document.createTextNode('redirects') ); tab_redirects.appendChild( status );

if( document.getElementById('ca-history') ) document.getElementById('ca-history').parentNode.appendChild( tab_redirects );

addEvent( tab_redirects, 'click', run ); } }

};

// // Hook up installation function // addOnloadHook(highlightRedirects.install);