// ==UserScript== // @name PTH stats since last // @version 0.5 // @description Displays the changes in stats on PTH // @author Chameleon // @include http*://*passtheheadphones.me/* // @include http*://*passthepopcorn.me/* // @grant GM_getValue // @grant GM_setValue // @namespace https://greasyfork.org/users/87476 // @downloadURL none // ==/UserScript== (function() { 'use strict'; if((window.location.href.indexOf("threadid=1781") != -1 && window.location.host.indexOf('headphones') != -1) || (window.location.href.indexOf("threadid=30532") != -1 && window.location.host.indexOf('popcorn') != -1)) showSettings(); var currentStats = {}; var statspans = document.getElementById('userinfo_stats').querySelectorAll('span'); currentStats.up = parseStats(statspans[0].textContent); currentStats.down = parseStats(statspans[1].textContent); currentStats.ratio = parseFloat(statspans[2].textContent); if(isNaN(currentStats.ratio)) currentStats.ratio = 0; var oldStats = window.localStorage.lastStats; if(!oldStats) oldStats = {up:currentStats.up, down:currentStats.down, ratio:currentStats.ratio}; else oldStats = JSON.parse(oldStats); window.localStorage.lastStats = JSON.stringify(currentStats); var settings = getSettings(); var li=false; if(settings.showBuffer) { li=document.createElement('li'); var before=document.getElementById('stats_ratio'); before.parentNode.insertBefore(li, before); li.innerHTML='Buffer: '+renderStats((currentStats.up/1.05)-currentStats.down)+''; } var change = {up:currentStats.up-oldStats.up, down:currentStats.down-oldStats.down, ratio:Math.round((currentStats.ratio-oldStats.ratio)*100)/100}; if(settings.profileOnly && window.location.href.indexOf(document.getElementById('nav_userinfo').getElementsByTagName('a')[0].href) == -1) return; if(change.up != 0 || settings.noChange) statspans[0].innerHTML += ' ('+renderStats(change.up)+')'; if(change.down != 0 || settings.noChange) statspans[1].innerHTML += ' ('+renderStats(change.down)+')'; if((change.up != 0 || change.down != 0 || settings.noChange) && settings.showBuffer) { var span=li.getElementsByTagName('span')[0]; span.innerHTML += ' ('+renderStats(change.up-change.down)+')'; } if(change.ratio != 0 || settings.noChange) statspans[2].innerHTML += ' ('+change.ratio+')'; if(settings.alert && (change.up != 0 || change.down != 0 || change.ratio != 0)) alert('Up: '+renderStats(change.up)+', Down: '+renderStats(change.down)+', Buffer: '+renderStats((change.up/1.05)-change.down)+', Ratio: '+change.ratio); })(); function showSettings() { var before = document.getElementsByClassName('forum_post')[0]; var div = document.createElement('div'); before.parentNode.insertBefore(div, before); div.setAttribute('style', 'width: 100%; text-align: center; padding-bottom: 10px;'); div.setAttribute('class', 'box'); div.innerHTML = '

PTH stats since last Settings


'; var settings = getSettings(); var a=document.createElement('a'); a.href='javascript:void(0);'; a.innerHTML = 'Show on no change: '+(settings.noChange ? 'On' : 'Off'); a.addEventListener('click', changeSetting.bind(undefined, a), false); div.appendChild(a); div.appendChild(document.createElement('br')); var a=document.createElement('a'); a.href='javascript:void(0);'; a.innerHTML = 'Show on profile only: '+(settings.profileOnly ? 'On' : 'Off'); a.addEventListener('click', changeSetting.bind(undefined, a), false); div.appendChild(a); div.appendChild(document.createElement('br')); var a=document.createElement('a'); a.href='javascript:void(0);'; a.innerHTML = 'Show buffer: '+(settings.showBuffer ? 'On' : 'Off'); a.addEventListener('click', changeSetting.bind(undefined, a), false); div.appendChild(a); div.appendChild(document.createElement('br')); var a=document.createElement('a'); a.href='javascript:void(0);'; a.innerHTML = 'Alert on change: '+(settings.alert ? 'On' : 'Off'); a.addEventListener('click', changeSetting.bind(undefined, a), false); div.appendChild(a); div.appendChild(document.createElement('br')); } function changeSetting(a) { var on=false; if(a.innerHTML.indexOf('On') == -1) { on=true; a.innerHTML = a.innerHTML.replace('Off', 'On'); } else { a.innerHTML = a.innerHTML.replace('On', 'Off'); } var settings = getSettings(); if(a.innerHTML.indexOf('no change') != -1) { settings.noChange = on; } else if(a.innerHTML.indexOf('profile only') != -1) { settings.profileOnly = on; } else if(a.innerHTML.indexOf('Alert') != -1) { settings.alert = on; } else if(a.innerHTML.indexOf('Show buffer') != -1) { settings.showBuffer = on; } GM_setValue('lastStatsSettings', JSON.stringify(settings)); } function getSettings() { var settings = GM_getValue('lastStatsSettings', false); if(!settings) { settings = {noChange: false, profileOnly: false, alert: false, showBuffer: false}; } else settings = JSON.parse(settings); return settings; } function renderStats(number) { var amount = number; var pow = 0; for(var i=10; i<=50; i=i+10) { if(Math.abs(amount)/Math.pow(2, i) > 1) pow=i/10; } var suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; return (Math.round(amount/Math.pow(2, pow*10)*100))/100+' '+suffixes[pow]; } function parseStats(string) { var amount = parseFloat(string); if(string.indexOf('KB') != -1) amount = amount*Math.pow(2, 10); else if(string.indexOf('MB') != -1) amount = amount*Math.pow(2, 20); else if(string.indexOf('GB') != -1) amount = amount*Math.pow(2, 30); else if(string.indexOf('TB') != -1) amount = amount*Math.pow(2, 40); else if(string.indexOf('PB') != -1) amount = amount*Math.pow(2, 50); return Math.round(amount); }