- // ==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
- // ==/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: <span class="stat">'+renderStats((currentStats.up/1.05)-currentStats.down)+'</span>';
- }
-
- 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)+')</span>';
- }
- 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 = '<h2>PTH stats since last Settings</h2><br />';
- 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);
- }