User:Jivecat/userwatch.js

/////////////////////////////////////// //         User watchlist           // //             by Tra               // ///////////////////////////////////////

function uwdownload(bundle) { // mandatory: bundle.url // optional: bundle.onSuccess (xmlhttprequest, bundle) // optional: bundle.onFailure (xmlhttprequest, bundle) // optional: bundle.otherStuff OK too, passed to onSuccess and onFailure

var x = window.XMLHttpRequest ? new XMLHttpRequest : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false;

if (x) { x.onreadystatechange=function { if ( x.readyState==4 ) { uwdownloadComplete(x,bundle); } };   x.open("GET",bundle.url,true); x.send(null); } return x; }

function uwdownloadComplete(x,bundle) { if (x.status==200) { bundle.onSuccess(x,bundle); } else { bundle.onFailure(x,bundle); alert(x.statusText);} }

function uwgetstartdate(uwdate) {

var tempvar = ''

if (navigator.userAgent.indexOf("Firefox")!=-1){ tempvar = uwdate.getYear + 1900 } else { tempvar = uwdate.getYear }

tempvar += ''

if ((uwdate.getMonth + 1) < 10 ) { tempvar += '0' }

tempvar += (uwdate.getMonth + 1)

tempvar += ''

if (uwdate.getDate < 10 ) { tempvar += '0' }

tempvar += uwdate.getDate

tempvar += '000000'

return tempvar

}

window.gettingWatchlist=false; uwwatchlist=null; function uwgetWatchlist {

window.gettingWatchlist=true; uwdownload({url: 'http://' + document.location.hostname + '/wiki/Special:Watchlist?action=raw',	     onSuccess: uwprocessWatchlist, onFailure: function  { setTimeout(uwgetWatchlist, 15000); return true; }}); } function uwprocessWatchlist(req, bundle) {

var watchlist={}; var lines=req.responseText.split('\n');

var h1=document.getElementsByTagName('h1')[0] var myinfo=document.createElement('ul'); h1.parentNode.appendChild(myinfo);

var uwnspg = '' var uwinlist = 'no' var uwpropline = '' var uwdonestart = 'no' var uwquerystring = '' var uwcountusers = 0

var uwnow = new Date

var h1=document.getElementsByTagName('h1')[0] var uwoutput=document.createElement('div'); h1.parentNode.appendChild(uwoutput);

uwoutput.innerHTML = '';

for (var i=0; i -1) { uwinlist = 'yes'; } if (lines[i].indexOf(' -1) { uwinlist = 'no'; }

if (uwinlist == 'yes') { uwpropline = lines[i]; uwnspg=uwpropline.split(':');

// eliminate all but user or user talk pages if ((uwnspg[0] == 'User' || uwnspg[0] == 'User talk') && uwpropline.split('/')[0]==uwpropline && uwcountusers <25) {

if (uwdonestart == 'yes') {uwquerystring += '|'} uwdonestart = 'yes'

uwquerystring += 'User:' + uwnspg[1] uwcountusers += 1

if (uwcountusers == 25) {

//send and process stuff

uwquerystring += '&uclimit=20&ucstart=' + uwgetstartdate(uwnow) + '&uccomments&format=json&dummy=' + parseInt(Math.random*99999999)

//myinfo.innerHTML += ('http://' + document.location.hostname + '/w/api.php?action=query&list=usercontribs&titles=' + uwquerystring + 'stop'); uwdownload({url: 'http://' + document.location.hostname + '/w/api.php?action=query&list=usercontribs&titles=' + uwquerystring,	     onSuccess: function (req, bundle) {  uwoutput.innerHTML += uwprocessuserwatchlist(req.responseText) ;   if (typeof(window.setupTooltips)!='undefined') { setupTooltips(uwoutput); } }});

uwcountusers = 0 uwquerystring = '' uwdonestart = 'no'

}

}         }  }

uwquerystring += '&uclimit=20&ucstart=' + uwgetstartdate(uwnow) + '&uccomments&format=json&dummy=' + parseInt(Math.random*99999999) // myinfo.innerHTML += '' + uwquerystring + ''

//myinfo.innerHTML += ('http://' + document.location.hostname + '/w/api.php?action=query&list=usercontribs&titles=' + uwquerystring);

//if (uwcountusers == 25) {myinfo.innerHTML += 'For performance reasons, only the first 25 users on your watchlist are shown.';}

uwdownload({url: 'http://' + document.location.hostname + '/w/api.php?action=query&list=usercontribs&titles=' + uwquerystring,	     onSuccess: function (req, bundle) { uwoutput.innerHTML += uwprocessuserwatchlist(req.responseText) ;   if (typeof(window.setupTooltips)!='undefined') { setupTooltips(uwoutput); } ; uwloadingmsg.innerHTML = ''; }});

// at very end // uwoutput.innerHTML = uwtempoutput; // if (typeof(window.setupTooltips)!='undefined') { setupTooltips(uwoutput); }

// uwloadingmsg.innerHTML = ''

}

function uwmid(str, start, len) /*** IN: str - the string we are LEFTing start - our string's starting position (0 based!!) len - how many characters from start we want to get

RETVAL: The substring from start to start+len ***/ {    // Make sure start and len are within proper bounds if (start < 0 || len < 0) return "";

var iEnd, iLen = String(str).length; if (start + len > iLen) iEnd = iLen; else iEnd = start + len;

return String(str).substring(start,iEnd); }

function uwtimefromdate(uwdate) {

return uwmid(uwdate, 11, 5)

}

// function uwuwprocessuserwatchlist

function uwprocessuserwatchlist(uwrsp) {

// alert(uwrsp);

// uwoutput.innerHTML += uwrsp

var uwtempoutput = ''

var uwdata = eval('(' + uwrsp + ')');

var uwusernum = Math.random*99999999;

var uwcontribnum = 0;

var uwobjcontrib

var uwusername

uwtempoutput += '';

// uwtempoutput += uwdata.pages.length; // uwtempoutput += uwdata.pages.items[0].title;

for (prop in uwdata.pages) {

if (uwdata.pages[prop].contributions.length > 0) {

uwusername = uwdata.pages[prop].title.split(':')[1]

uwtempoutput += ' ' uwtempoutput += '           ' uwtempoutput += '' + uwusername uwtempoutput += ' (<a href="/wiki/User_talk:' + uwusername + '" title="User talk:' + uwusername   uwtempoutput += '">Talk</a> | <a href="/w/index.php?title=Special:Contributions&amp;target=' + uwusername    uwtempoutput += '" title="Special:Contributions">contribs</a>)' + ' ';

uwtempoutput += '<div id="RCI' + uwusernum + '" style="display:none">'

for (uwcontribnum = 0; uwcontribnum < uwdata.pages[prop].contributions.length; ++uwcontribnum){

uwobjcontrib = uwdata.pages[prop].contributions[uwcontribnum]

uwtempoutput += '<img src="/skins-1.5/common/images/Arr_.png" width="12" height="12" alt=" " />' uwtempoutput += '<tt>           </tt>'

uwtempoutput += '<tt><a href="/w/index.php?title=' + uwobjcontrib['*'] + '&amp;oldid=' + uwobjcontrib.revid     uwtempoutput += '" title="' + uwobjcontrib['*'] + '">' + uwtimefromdate(uwobjcontrib.timestamp) + '</a></tt> '

uwtempoutput +='(<a href="/w/index.php?title=' + uwobjcontrib['*']     uwtempoutput += '&amp;action=history" title="' + uwobjcontrib['*'] + '">hist</a>) (<a href="/w/index.php?title='      uwtempoutput += uwobjcontrib['*'] + '&amp;diff=prev&amp;oldid=' + uwobjcontrib.revid + '" title="' + uwobjcontrib['*']      uwtempoutput += '">diff</a>)  <a href="/wiki/' + uwobjcontrib['*'] + '" title="' + uwobjcontrib['*'] + '">' uwtempoutput += uwobjcontrib['*'] + '</a> ' + (typeof uwobjcontrib['minor']=='undefined' ? '' : 'm ') uwtempoutput += ' (' + uwobjcontrib.comment + ') ' uwtempoutput += (typeof uwobjcontrib['top']=='undefined' ? '' : ' (top)') + ' '

}

uwtempoutput += ' ' ++uwusernum

}

}

uwtempoutput += '';

return uwtempoutput

}

// ************************************************** // Installation // **************************************************

function uwaddlilink(tabs, url, name, id, title, key){ var na = document.createElement('a'); na.href = url; na.appendChild(document.createTextNode(name)); var li = document.createElement('li'); if(id) li.id = id; li.appendChild(na); tabs.appendChild(li); if(id) { if(key && title) ta[id] = [key, title]; else if(key)    ta[id] = [key, '']; else if(title)  ta[id] = ['', title]; }   // re-render the title and accesskeys from existing code in wikibits.js    akeytt; return li; }

function uwaddToolboxLink(url, name, id){ var tb = document.getElementById('p-tb').getElementsByTagName('ul')[0]; uwaddlilink(tb, url, name, id); }

var uwloadingmsg function uwloadapp {

//var h1=document.getElementsByTagName('h1')[0] // var uwoutput=document.createElement('div'); //h1.innerHTML = 'User watchlist';

uwaddToolboxLink('http://' + document.location.hostname + '/wiki/' + 'User:Kevin_Forsyth/User watchlist', 'User watchlist', 'uw_link');

if (wgPageName == 'User:Kevin_Forsyth/User_watchlist') { //

var h1=document.getElementsByTagName('h1')[0] uwloadingmsg=document.createElement('div'); h1.parentNode.appendChild(uwloadingmsg);

uwloadingmsg.innerHTML = 'Loading...'

uwgetWatchlist

} //

}

addOnloadHook(uwloadapp)