diff options
Diffstat (limited to 'uftow-stats.user.js')
-rw-r--r-- | uftow-stats.user.js | 265 |
1 files changed, 111 insertions, 154 deletions
diff --git a/uftow-stats.user.js b/uftow-stats.user.js index fdfb838..db2a51e 100644 --- a/uftow-stats.user.js +++ b/uftow-stats.user.js @@ -1,23 +1,23 @@ // ==UserScript== // @name uftow-stats // @namespace uftow-stats -// @include http://ubuntuforums.org/showthread.php?t=1579442* -// @version 1.2.1 -// @Description Generates stats for Tug of War. +// @include https://ubuntuforums.org/showthread.php?t=1579442* +// @version 1.3.0 +// @Description Generates stats for Tug of War. +// @grant GM_log // @grant GM_getValue // @grant GM_setValue -// @grant GM_log // @grant GM_listValues -// @grant GM_setValue -// @grant GM_addStyle // @grant GM_deleteValue // @grant GM_registerMenuCommand // ==/UserScript== var towConfig = { multipliers:new Array( - //Forum Staff + //Forum Moderator 'images/rank_uf_moderator_2013-07.png',-2, + //Forum Super Moderator + 'images/rank_uf_super_moderator_2014_12.png',-3, //Forum Admin 'images/rank_uf_admin_2013-07.png',-4, //LoCo mods @@ -41,14 +41,14 @@ var towStats = { scores:new Array(), currentScore:0, lastPostNumber:null, + lastPoster:null, winner:null, marker:null, markerPost:null, - lastPoster:null, - init:function(){ + init: function(){ this.postContainers=document.getElementsByClassName('postcontainer'); - this.firstPostNumber=this.parsePostNumber(this.postContainers[0].getElementsByClassName('postcounter')[0].textContent); - this.lastPostNumber=this.parsePostNumber(this.postContainers[this.postContainers.length-1].getElementsByClassName('postcounter')[0].textContent); + this.firstPostNumber=parseInt(this.postContainers[0].getElementsByClassName('postcounter')[0].textContent.substr(1)); + this.lastPostNumber=parseInt(this.postContainers[this.postContainers.length-1].getElementsByClassName('postcounter')[0].textContent.substr(1)); this.currentScore=0; if(!GM_getValue("statsActive",false)){ GM_registerMenuCommand("Start counting posts",function(){towStats.startCounting();},'S'); @@ -58,24 +58,19 @@ var towStats = { } GM_registerMenuCommand("Clear counter",function(){towStats.clearStats();},'A'); }, - recordPosts: function(start){ + recordPosts: function(startPost){ var postNumber; - var startDiff=start-this.firstPostNumber; + var startDiff=startPost-this.firstPostNumber; var postInfo; - GM_log("Seek ahead by "+startDiff+" posts"); - //alt4Number=1+(startDiff*2); - if(startDiff<0){ - alert("No such post exists on this page"); + if(startDiff<0 || startPost>this.firstPostNumber+this.postContainers.length-1){ + alert("Post #"+startPost+" is not on this page."); return false; } for (var i=startDiff;i<this.postContainers.length;i++){ - //postInfo=this.getPostInfo(currentPagePost,i); postInfo=this.getPostInfo(this.postContainers[i]); - this.lastPostNumber = postInfo[3]; - //alt4Number+=2; - //currentPagePost++; + this.lastPostNumber=postInfo[3]; if(this.lastPoster==postInfo[0]){ - GM_log("Post #"+this.lastPostNumber+" is a duplicate and has been skipped."); + //GM_log("Post #"+this.lastPostNumber+" is a duplicate and has been skipped."); continue; } this.scorePost(postInfo); @@ -83,23 +78,21 @@ var towStats = { this.winner='mods'; }else if(this.currentScore>=200){ this.winner='community'; - }if(this.winner!=undefined){ + }if(this.winner!=null){ this.marker=postInfo[0]; this.markerPost=postInfo[3]; break; } - GM_log("Post: "+postInfo[3]+", Round score: "+this.currentScore); + //GM_log("Post: "+postInfo[3]+", Round score: "+this.currentScore); } + return true; }, getPostInfo: function(postElement){ var userSpanTag=postElement.getElementsByClassName('username')[0].getElementsByTagName('span')[0]; var userName=userSpanTag.textContent; var css=userSpanTag.getAttribute('style'); var rankURL=postElement.getElementsByClassName('rank')[0].getElementsByTagName('img')[0].getAttribute('src'); - var postNumber=this.parsePostNumber(postElement.getElementsByClassName('postcounter')[0].textContent); - if(userName==""){ - userName='[UNKNOWN USERNAME]'; - } + var postNumber=parseInt(postElement.getElementsByClassName('postcounter')[0].textContent.substr(1)); return new Array(userName,css,rankURL,postNumber); }, scorePost: function(postInfo){ @@ -121,94 +114,75 @@ var towStats = { } }, getSummary: function(){ - if(this.winner!=undefined){ - var alertText="[B]TUG OF WAR LAST ROUND STATS[/B]\n"; - var totalPoints=0; - var totalPosts=0; - var totalModPoints=0; - var totalModPosts=0; - var totalCommunityPoints=0; - var totalCommunityPosts=0; - var minimumRequiredMVP; - var mvpList=new Array(); - var communityParticipants=new Array(); - var winners; - var allowMVP; - var modParticipants=new Array(); - GM_log(this.scores); - for(var i=1;i<this.scores.length;i+=3){ - GM_log("STATS: User: "+this.scores[i-1]+", Multiplier: "+this.scores[i]+", Points: "+this.scores[i+1]+", Is Mod: "+this.scores[i+2]); - totalPoints+=(this.scores[i+1]*(Math.abs(this.scores[i]))); - if(this.scores[i]<0){ - totalModPoints+=this.scores[i+1]*(Math.abs(this.scores[i])); - totalModPosts+=this.scores[i+1]; - }else if(this.scores[i]>0){ - totalCommunityPoints+=this.scores[i+1]*this.scores[i]; - totalCommunityPosts+=this.scores[i+1]; - } - totalPosts+=this.scores[i+1]; - } - minimumRequiredMVP=Math.round(((this.winner=='community')?totalCommunityPoints:totalModPoints)*0.15); - alertText+="[B]Total points:[/B] "+totalPoints+" from "+totalPosts+" posts\n"; - alertText+="[B]Total community points:[/B] "; - if(totalCommunityPosts>0){ - alertText+=totalCommunityPoints+" from "+totalCommunityPosts+" posts\n"; - }else{ - alertText+="None\n"; + var alertText="[B]TUG OF WAR LAST ROUND STATS[/B]\n"; + var totalPoints=0; + var totalPosts=0; + var totalModPoints=0; + var totalModPosts=0; + var totalCommunityPoints=0; + var totalCommunityPosts=0; + var totalWinningPoints=0; + var minimumRequiredMVP; + var mvpList=new Array(); + var communityParticipants=new Array(); + var modParticipants=new Array(); + for(var i=1;i<this.scores.length;i+=3){ + //GM_log("STATS: User: "+this.scores[i-1]+", Multiplier: "+this.scores[i]+", Points: "+this.scores[i+1]+", Is Mod: "+this.scores[i+2]); + totalPoints+=(this.scores[i+1]*(Math.abs(this.scores[i]))); + if(this.scores[i]<0){ + totalModPoints+=this.scores[i+1]*(Math.abs(this.scores[i])); + totalModPosts+=this.scores[i+1]; + }else if(this.scores[i]>0){ + totalCommunityPoints+=this.scores[i+1]*this.scores[i]; + totalCommunityPosts+=this.scores[i+1]; } - alertText+="[B]Total mod points:[/B] "; - if(totalModPosts>0){ - alertText+=totalModPoints+" from "+totalModPosts+" posts\n"; + totalPosts+=this.scores[i+1]; + } + totalWinningPoints=(this.winner=='community')?totalCommunityPoints:totalModPoints; + minimumRequiredMVP=Math.round(totalWinningPoints*0.15); + alertText+="[B]Total points:[/B] "+totalPoints+" from "+totalPosts+" posts\n"; + alertText+="[B]Total community points:[/B] "; + alertText+=((totalCommunityPosts>0)?totalCommunityPoints+" from "+totalCommunityPosts+" posts":"None")+"\n"; + alertText+="[B]Total mod points:[/B] "; + alertText+=((totalModPosts>0)?totalModPoints+" from "+totalModPosts+" posts":"None")+"\n"; + alertText+="[B]Minimum required for MVP* ("+totalWinningPoints+" x 0.15):[/B] "+minimumRequiredMVP+"\n\n"; + for(var i=0;i<this.scores.length;i+=3){ + if(this.scores[i+1]<0){ + modParticipants.push(this.scores[i]); + modParticipants.push(Math.abs(this.scores[i+1])); + modParticipants.push(this.scores[i+2]); }else{ - alertText+="None\n"; + communityParticipants.push(this.scores[i]); + communityParticipants.push(this.scores[i+1]); + communityParticipants.push(this.scores[i+2]); } - alertText+="[B]Minimum required for MVP* ("+((this.winner=='community')?totalCommunityPoints:totalModPoints)+" x 0.15):[/B] "+minimumRequiredMVP+"\n\n"; - for(var i=0;i<this.scores.length;i+=3){ - if(this.scores[i+1]<0){ - modParticipants.push(this.scores[i]); - modParticipants.push(Math.abs(this.scores[i+1])); - modParticipants.push(this.scores[i+2]); - }else{ - communityParticipants.push(this.scores[i]); - communityParticipants.push(this.scores[i+1]); - communityParticipants.push(this.scores[i+2]); - } - } - alertText+="[B]COMMUNITY PARTICIPANTS[/B]\n"; - allowMVP=(this.winner=='community'); - communityStats=this.getListText(communityParticipants,minimumRequiredMVP); - alertText+=communityStats[0]+"\n"; - alertText+="[B]MODERATOR PARTICIPANTS[/B]\n"; - allowMVP=(this.winner=='mods'); - modStats=this.getListText(modParticipants,minimumRequiredMVP); - alertText+=modStats[0]+"\n"; - alertText+="[B]LAST ROUND MVPs[/B]\n"; - alertText+="- "+this.marker+" (at post #"+this.lastPostNumber+") \n"; - GM_log("MVP Order: "+this.marker+" made the mark at post #"+this.markerPost); - mvpList=(this.winner=='community')?communityStats[1]:modStats[1]; - for(var i=0;i<mvpList.length;i++){ - if(mvpList[i]!=this.marker){ - alertText+="- "+mvpList[i]+"\n"; - GM_log("MVP Order: "+mvpList[i]+" has spot #"+(i+2)); - } + } + alertText+="[B]COMMUNITY PARTICIPANTS[/B]\n"; + communityStats=this.getListText(communityParticipants,minimumRequiredMVP); + alertText+=communityStats[0]+"\n"; + alertText+="[B]MODERATOR PARTICIPANTS[/B]\n"; + modStats=this.getListText(modParticipants,minimumRequiredMVP); + alertText+=modStats[0]+"\n"; + alertText+="[B]LAST ROUND MVPs[/B]\n"; + alertText+="- "+this.marker+" (at post #"+this.markerPost+")\n"; + //GM_log("MVP order: "+this.marker+" made the mark at post #"+this.markerPost); + mvpList=(this.winner=='community')?communityStats[1]:modStats[1]; + for(var i=0;i<mvpList.length;i++){ + if(mvpList[i]!=this.marker){ + alertText+="- "+mvpList[i]+"\n"; + //GM_log("MVP order: "+mvpList[i]+" has spot #"+(i+2)); } - alertText+="\n*Starting with second place. The marker gets first place MVP."; - window.alert(alertText); - }else{ - window.alert("Tug of War is yet to be completed.\nIts score is "+this.currentScore+" points as of post #"+this.lastPostNumber); } - this.clearStats(); + alertText+="\n*Starting with second place. The marker gets first place MVP."; + window.alert(alertText); }, getListText: function(participants,minimumRequiredMVP){ var statsText=""; var thisScore; var mvpList=new Array(); - var doneSorting=false; var reCheck=true; - GM_log("Participant List: "+participants); var tempSpot; while(reCheck){ - reCheck=false; for(var i=0;i<participants.length;i+=3){ if(i+3>=participants.length){ @@ -228,12 +202,12 @@ var towStats = { } for(var i=0;i<participants.length;i+=3){ thisScore=participants[i+2]*participants[i+1]; - statsText+="[B]"+participants[i]+":[/B] "+participants[i+2]+" x "+participants[i+1]+" = "+thisScore+" "; - statsText+="point"+((thisScore!=1)?"s":""); - statsText+="\n"; - GM_log("Added "+participants[i]+" to the stats list DEBUG: Posts: "+participants[i+2]+", Multiplier: "+participants[i+1]+", Total Score: "+thisScore+", minimumRequiredMVP: "+minimumRequiredMVP); + statsText+="[B]"+participants[i]+":[/B] "+participants[i+2]+" x "+participants[i+1]+" = "+ + thisScore+" point"+((thisScore!=1)?"s":"")+"\n"; + //GM_log("Added "+participants[i]+" to the stats list DEBUG: Posts: "+participants[i+2]+", Multiplier: "+participants[i+1]+ + // ", Total Score: "+thisScore+", minimumRequiredMVP: "+minimumRequiredMVP); if(thisScore>=minimumRequiredMVP){ - GM_log("Adding "+participants[i]+" to the MVP list."); + //GM_log("Adding "+participants[i]+" to the MVP list."); mvpList.push(participants[i]); } } @@ -243,68 +217,61 @@ var towStats = { return new Array(statsText,mvpList); }, restoreStats: function(){ - var statsActive=GM_getValue("statsActive",false); - var scoresCount=GM_getValue("scores.count",0); - if(statsActive==false){ - GM_log("Attempting to save setting statsActive"); + if(!GM_getValue("statsActive",false)){ GM_setValue("statsActive",true); return false; - }else{ - this.lastUser=GM_getValue("lastPoster",null); - this.currentScore = parseInt(GM_getValue("CurrentScore")); - this.lastPostNumber = parseInt(GM_getValue("lastPostNumber")); - for(i=0;i<scoresCount;i++){ - this.scores.push(GM_getValue("scores."+i)); - //alert(GM_getValue("scores."+i)); - } - return true; } + var scoresCount=GM_getValue("scores.count",0); + this.lastPoster=GM_getValue("lastPoster",null); + this.currentScore=parseInt(GM_getValue("currentScore")); + this.lastPostNumber=parseInt(GM_getValue("lastPostNumber")); + for(i=0;i<scoresCount;i++){ + this.scores.push(GM_getValue("scores."+i)); + } + return true; }, startCounting: function(){ - //alert(5); - //var theAnswer; - //alert(6); if(this.restoreStats()){ startPost=this.lastPostNumber+1; }else{ - theAnswer=window.prompt("Specifiy a post number to begin counting.\nIf you do not know the post number, click Cancel."); + theAnswer=window.prompt("Specifiy a post number to begin counting.\n"+ + "If you do not know the post number, click Cancel."); if(theAnswer!=null){ startPost=parseInt(theAnswer); - GM_setValue('statsActive',true); + GM_setValue("statsActive",true); }else{ this.clearStats(); return false; } } - GM_log("Round score before counting: "+this.currentScore); - this.recordPosts(startPost); + //GM_log("Round score before counting: "+this.currentScore); + if(!this.recordPosts(startPost)){ + return false; + } if(this.winner!=null){ window.alert("Counting complete.\n"+ - "The "+((this.winner=='mods')?'-':'')+"200 mark is at post #"+this.markerPost+"\n"+ - "Stats will be displayed in the next dialog box."); + "The "+((this.winner=='mods')?'-':'')+"200 mark is at post #"+this.markerPost+"\n"+ + "Stats will be displayed in the next dialog box."); this.getSummary(); + this.clearStats(); }else{ this.saveStats(); if(!this.goToNextPage()){ - window.alert("Tug of War is yet to be completed.\nIts score is "+this.currentScore+" points as of post #"+this.lastPostNumber); + window.alert("Tug of War is yet to be completed.\n"+ + "Its score is "+this.currentScore+" points as of post #"+this.lastPostNumber); this.clearStats(); } } }, saveStats: function(){ - GM_log("lastPostNumber: "+this.lastPostNumber); - //GM_log("Attempting to save setting lastPostNumber, value: "+this.lastPostNumber); + //GM_log("Last post on this page: "+this.lastPostNumber); GM_setValue("lastPostNumber",this.lastPostNumber); - GM_log("Round score after counting this page's posts: "+this.currentScore); - //GM_log("Attempting to save setting currentScore, value: "+this.currentScore); - GM_setValue("CurrentScore",this.currentScore); + //GM_log("Current round score: "+this.currentScore); + GM_setValue("currentScore",this.currentScore); for(i=0;i<this.scores.length;i++){ - //GM_log("Attempting to save setting this.scores."+i+", value: "+this.scores[i]); GM_setValue("scores."+i,this.scores[i]); - //GM_log("Attempting to save setting this.scores.length, value: "+this.scores.length); GM_setValue("scores.count",this.scores.length); } - //GM_log("Attempting to save setting lastPoster, value: "+this.lastPoster); GM_setValue("lastPoster",this.lastPoster); }, goToNextPage: function(){ @@ -317,33 +284,23 @@ var towStats = { return false; } }, - isUserOnScoresList: function(username){ - for(var i=0;i<this.scores.length;i++){ - - } - }, clearStats: function(){ this.scores=new Array(); this.currentScore=0; this.lastPostNumber=null; + this.lastPoster=null; this.winner=null; this.marker=null; this.markerPost=null; - this.lastPoster=null; - keys = GM_listValues(); - for (var i=0, key=null; key=keys[i]; i++) { - GM_deleteValue(key); - GM_log("Deleted key: "+key); + keys=GM_listValues(); + for (var i=0,key=null; key=keys[i];i++) { + GM_deleteValue(key); } - GM_log("Reset Successful"); if(!this.alreadyHasStartCounting){ GM_registerMenuCommand("Start counting posts",function(){towStats.startCounting()},'S'); this.alreadyHasStartCounting=true; } - }, - parsePostNumber:function(numStr){ - return parseInt(numStr.substr(1)); } }; -towStats.init();
\ No newline at end of file +towStats.init(); |