PTH stats since last

Displays the changes in stats on PTH

当前为 2016-12-17 提交的版本,查看 最新版本

// ==UserScript==
// @name         PTH stats since last
// @version      0.2
// @description  Displays the changes in stats on PTH
// @author       Chameleon
// @include      http*://*passtheheadphones.me/*
// @grant        none
// @namespace https://greasyfork.org/users/87476
// ==/UserScript==

(function() {
  'use strict';
  
  if(window.location.href.indexOf("threadid=1781") != -1)
    showSettings();

  var currentStats = {};
  var statspans = document.getElementById('userinfo_stats').getElementsByTagName('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 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.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)+', 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 = '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;
  }
  window.localStorage.lastStatsSettings = JSON.stringify(settings);
}

function getSettings()
{
  var settings = window.localStorage.lastStatsSettings;
  if(!settings)
  {
    settings = {noChange: false, profileOnly: false, alert: 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);
}