From db531fd4775033ee85b3ef5ade3f4d045a9bdb57 Mon Sep 17 00:00:00 2001 From: Krytarik Raido Date: Sun, 17 Sep 2017 22:45:04 +0200 Subject: uftow-stats, -simple 1.3.0 --- uftow-stats-simple.user.js | 225 ++++++++++++++++++++++++++++++++++++++ uftow-stats.user.js | 265 +++++++++++++++++++-------------------------- 2 files changed, 336 insertions(+), 154 deletions(-) create mode 100644 uftow-stats-simple.user.js diff --git a/uftow-stats-simple.user.js b/uftow-stats-simple.user.js new file mode 100644 index 0000000..f04c987 --- /dev/null +++ b/uftow-stats-simple.user.js @@ -0,0 +1,225 @@ +// ==UserScript== +// @name uftow-stats-simple +// @namespace uftow-stats-simple +// @include https://ubuntuforums.org/showthread.php?t=1579442* +// @version 1.3.0 +// @Description Generates stats for Tug of War - simple variant. +// @grant GM_log +// @grant GM_getValue +// @grant GM_setValue +// @grant GM_listValues +// @grant GM_deleteValue +// @grant GM_registerMenuCommand +// ==/UserScript== + +var towStats = { + alreadyHasStartCounting:false, + scores:new Array(), + lastPostNumber:null, + lastPoster:null, + startPostNumber:null, + endPostNumber:null, + init: function(){ + this.postContainers=document.getElementsByClassName('postcontainer'); + 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)); + if(!GM_getValue("statsActive",false)){ + GM_registerMenuCommand("Start counting posts",function(){towStats.startCounting();},'S'); + this.alreadyHasStartCounting=true; + }else{ + this.startCounting(); + } + GM_registerMenuCommand("Clear counter",function(){towStats.clearStats();},'A'); + }, + recordPosts: function(startPost){ + var postNumber; + var startDiff=startPost-this.firstPostNumber; + var postInfo; + if(startDiff<0 || startPost>this.firstPostNumber+this.postContainers.length-1){ + alert("Post #"+startPost+" is not on this page."); + return false; + } + for (var i=startDiff;ithis.endPostNumber){ + break; + } + this.scorePost(postInfo); + } + return true; + }, + getPostInfo: function(postElement){ + var userSpanTag=postElement.getElementsByClassName('username')[0].getElementsByTagName('span')[0]; + var userName=userSpanTag.textContent; + var postNumber=parseInt(postElement.getElementsByClassName('postcounter')[0].textContent.substr(1)); + return new Array(userName,postNumber); + }, + scorePost: function(postInfo){ + this.lastPoster=postInfo[0]; + userIndex=this.scores.indexOf(postInfo[0]); + //The second check in the if statement makes sure users with usernames being actual numbers don't break this script + if(userIndex!=-1&&userIndex%2==0){ + this.scores[userIndex+1]++; + }else{ + this.scores.push(postInfo[0]); + this.scores.push(1); + } + }, + getSummary: function(){ + var alertText="[B]TUG OF WAR LAST ROUND STATS[/B]\n"; + var totalParticipants=0; + var totalPosts=0; + for(var i=1;i=participants.length){ + break; + } + if(participants[i+1]=this.endPostNumber) || !this.goToNextPage()){ + if(this.scores.length>=2 && !(this.endPostNumber!=null && this.lastPostNumberthis.firstPostNumber+this.postContainers.length-1){ + alert("Post #"+startPost+" is not on this page."); return false; } for (var i=startDiff;i=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;i0){ - 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;i0){ + 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=participants.length){ @@ -228,12 +202,12 @@ var towStats = { } for(var i=0;i=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