Advanced button stats

Show Advanced button stats

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         Advanced button stats
// @namespace    http://www.reddit.com/r/thebutton/ABS-pastymage
// @version      0.5.17
// @description  Show Advanced button stats
// @author       pastymage (forked from /u/bwochinski 0.5)
// @match        *://www.reddit.com/r/thebutton/*
// @grant        none
// ==/UserScript==

//CONFIG
	var advInterval = 500; //update interval in milliseconds
	var advKeepAmt = 60; //history to keep (in seconds)

//if you want it to automatically click, change -1 in the
// line below to the time (remaining) that you want
	var timeyouwant = -1

//Important variables
	var parHist = [];
	var histLen = (1000 / advInterval) * advKeepAmt;
	var lowestTime = 60.00;
	var clicked = false;
	

if ( !document.getElementsByClassName ) {
	document.getElementsByClassName = function(cl, tag) {
	   var els, matches = [],
	      i = 0, len,
	      regex = new RegExp('(?:\\s|^)' + cl + '(?:\\s|$)');
	 
	   // If no tag name is specified,
	   // we have to grab EVERY element from the DOM	 
	   els = document.getElementsByTagName(tag || "*");
	   if ( !els[0] ) return false;

	   for ( len = els.length; i < len; i++ ) {
	      if ( els[i].className.match(regex) ) {
	         matches.push( els[i]);
	      }
	   }
	   return matches; // an array of elements that have the desired classname
	};
}
 
// Very simple implementation. We're only checking for an id, class, or tag name.
// Does not accept CSS selectors in pre-querySelector browsers.
function qq(el, tag) {
   var firstChar = el.charAt(0);

   switch ( firstChar ) {
      case "#":
         return document.getElementById( el.slice(1) );
      case ".":
		 var res = document.getElementsByClassName( el.slice(1));
		 return res;
      default:
         return document.getElementsByTagName(tag);
   }
};

function qqf(el, tag) {
	var res = qq(el,tag);
	return res[0];
}
	
function setupABSDisplay() {
	var div;
	var tmp;
	
	const LEFTSTYLE = "style='Font: 18px Verdana normal black; width: 100%; float: left;'"
//	const LEFTSTYLE = "style='Font: 18px Verdana normal black; width: 400px; float: left;''"
	const RIGHTSTYLE = "style='Font: 18px Verdana normal black; width: 90px; float: left;'"
		
	div=document.createElement('div');
	div.id='advButtonStats'
	div.style='position: absolute; bottom: 0; margin-top: 100px; margin: 0 auto; width: 480px;'
	qqf(".thebutton-form").appendChild(div);
	tmp=document.createElement('div');
	tmp.innerHTML = "<div id='advSPACER' " + LEFTSTYLE + "><br></div>";
	qq("#advButtonStats").appendChild(tmp.firstChild);
	tmp.innerHTML = "<div id='advBOPS' " + RIGHTSTYLE + ">BOPS:</div>";
	qq("#advButtonStats").appendChild(tmp.firstChild);
	tmp.innerHTML = "<div id='advLowest' " + RIGHTSTYLE + ">Lowest Seen:</div>";
	qq("#advButtonStats").appendChild(tmp.firstChild);
	tmp.innerHTML = "<div id='advPPM' " + RIGHTSTYLE + ">Clicks/min:</div>";
	qq("#advButtonStats").appendChild(tmp.firstChild);
	tmp.innerHTML = "<div id='advFlair' " + RIGHTSTYLE + ">Current Flair:</div>";
	qq("#advButtonStats").appendChild(tmp.firstChild);
	tmp.innerHTML = "<div id='advSPC' " + RIGHTSTYLE + ">Avg Secs/Click:</div>";
	qq("#advButtonStats").appendChild(tmp.firstChild);
	if (timeyouwant != -1) {
		tmp.innerHTML = "<div id='advCamp' " + RIGHTSTYLE + "><b>Auto Click:</b> " + timeyouwant.toString() + "</div>";
		qq("#advButtonStats").appendChild(tmp.firstChild);
	}
}

function advStatUpdate() {
    if (parHist.length > histLen) {
        parHist.pop();
    }
    var advText = qqf(".thebutton-participants").textContent.replace(",","");
    parHist.unshift(parseInt(advText));

    //console.log(parHist);
    var curBOPS = (parHist[0] - parHist[parHist.length - 1]) / (parHist.length / (1000 / advInterval));
    var curPPM = (parHist[0] - parHist[parHist.length - 1]) * (60 / advKeepAmt) * (advKeepAmt / (parHist.length / (1000 / advInterval)));
    var curTime = parseFloat(qq("#thebutton-s-10s").textContent + qq("#thebutton-s-1s").textContent + "." + qq("#thebutton-s-100ms").textContent + qq("#thebutton-s-10ms").textContent);
	if (!clicked) {
		if (curTime < lowestTime) {
			lowestTime = curTime;
			document.title=curTime.toString();
		} else {
			document.title="the button";
		}
	}
	if (!clicked && (curTime < timeyouwant + 1) && (curtime >= timeyouwant)) {
		document.title = "Done!"
		qq("#thebutton").click();
		clicked=true;
	}
    qq("#advBOPS").innerHTML = "<b>BOPS:</b> " + curBOPS.toFixed(5);
    qq("#advPPM").innerHTML = "<b>Clicks/min:</b> " + Math.round(curPPM);
    qq("#advFlair").innerHTML = "<b>Current Flair:</b> <span class='flair flair-press-" + String(curTime + 9).substring(0,1) + "'>" + String(curTime).substring(0,2) + "s</span>";
    qq("#advLowest").innerHTML = "<b>Lowest Seen:</b> " + lowestTime + "s</span>";
    qq("#advSPC").innerHTML = "<b>Avg Secs/Click:</b> " + (1 / curBOPS.toFixed(5)).toFixed(2);
}

function main() {
	setupABSDisplay();
	advStatUpdate();
	setInterval(advStatUpdate, advInterval);
}


main();