// ==UserScript==
// @name Rockitsauce's All Time Team Leaders - pabst fix
// @namespace rockitsauce
// @description List out your team's all time record holders in Goalline Blitz
// @include http://glb.warriorgeneral.com/game/team.pl?season=*&team_id=*
// @include http://glb.warriorgeneral.com/game/team.pl?team_id=*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js
// @version 14.02.27-pabst
// @downloadURL https://update.greasyfork.icu/scripts/1340/Rockitsauce%27s%20All%20Time%20Team%20Leaders%20-%20pabst%20fix.user.js
// @updateURL https://update.greasyfork.icu/scripts/1340/Rockitsauce%27s%20All%20Time%20Team%20Leaders%20-%20pabst%20fix.meta.js
// ==/UserScript==
$(document).ready( function() {
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
}
else newObj[i] = this[i]
}
return newObj;
};
//var c = unsafeWindow.console;
var el = {
link_stats: ' View All Time Team Leaders',
display: '
',
settings_form: '',
input_form: 'Seasons: to Blowout: Adjust %:
');
div.append(fn[type.toLowerCase()](stat) + "");
}
else
fn[type.toLowerCase()](stat);
stat.holders = [];
});
});
},
game: function(stat) {
var left = stat.stat.split('.')[0];
var right = stat.stat.split('.')[1];
var holders = new Array();
var text = '
';
for (s = 0; s <= data.history.seasons.length -1; s++) {
var season = data.history.seasons[s];
if (season.games.length == 0) continue;
for (g = 0; g <= season.games.length - 1; g++) {
var game = season.games[g];
for (p = 0; p <= game.players.length - 1; p++) {
if (game.players[p].stats[left][right] == undefined || game.players[p].stats[left][right] == '0' || isNaN(parseInt(game.players[p].stats[left][right]))) continue;
holders.push(game.players[p].clone());
}
}
}
if (holders.length < 0) return;
holders.sort(function(a, b) {
return b.stats[left][right] - a.stats[left][right];
});
for (i = 0; i <=9; i++) {
if (holders[i] == undefined) break;
text += '(' + (i + 1) + ')...' + holders[i].stats[left][right].toFixed(2).replace('.00', '') + '...(' + holders[i].pos.trim() + ') [b]' + holders[i].name + '[/b] - http://glb.warriorgeneral.com/game/player.pl?player_id=' + holders[i].id + ' ';
}
return text += "
";
},
season: function(stat) {
var left = stat.stat.split('.')[0];
var right = stat.stat.split('.')[1];
var holders = new Array();
var text = '
';
var temp = [];
for (s = 0; s <= data.history.seasons.length -1; s++) {
var season = data.history.seasons[s];
if (season.games.length == 0) continue;
else {
for (var t in temp) {
if (temp[t].id != undefined)
holders.push(temp[t]);
}
temp = [];
}
for (g = 0; g <= season.games.length - 1; g++) {
var game = season.games[g];
for (p = 0; p <= game.players.length - 1; p++) {
if (game.players[p].stats[left][right] == undefined || game.players[p].stats[left][right] == '0' || isNaN(parseInt(game.players[p].stats[left][right]))) continue;
var existing = fn.index(temp, game.players[p].id);
if (existing > -1) {
temp[existing].name = game.players[p].name;
fn.calculate(temp[existing], game.players[p], left, right);
}
else
temp.push(game.players[p].clone());
}
}
}
if (holders.length < 0) return;
holders.sort(function(a, b) {
return b.stats[left][right] - a.stats[left][right];
});
for (i = 0; i <=9; i++) {
if (holders[i] == undefined) break;
text += '(' + (i + 1) + ')...' + holders[i].stats[left][right].toFixed(2).replace('.00', '') + '...(' + holders[i].pos.trim() + ') [b]' + holders[i].name + '[/b] - http://glb.warriorgeneral.com/game/player.pl?player_id=' + holders[i].id + ' ';
}
return text += "
";
},
career: function(stat) {
var left = stat.stat.split('.')[0];
var right = stat.stat.split('.')[1];
var holders = new Array();
var text = '
';
for (s = 0; s <= data.history.seasons.length -1; s++) {
var season = data.history.seasons[s];
for (g = 0; g <= season.games.length - 1; g++) {
var game = season.games[g];
for (p = 0; p <= game.players.length - 1; p++) {
if (game.players[p].stats[left][right] == undefined || game.players[p].stats[left][right] == '0' || isNaN(parseInt(game.players[p].stats[left][right]))) continue;
var existing = fn.index(holders, game.players[p].id);
if (existing > -1) {
holders[existing].name = game.players[p].name;
fn.calculate(holders[existing], game.players[p], left, right);
}
else
holders.push(game.players[p].clone());
}
}
}
if (holders.length < 0) return;
holders.sort(function(a, b) {
return b.stats[left][right] - a.stats[left][right];
});
for (i = 0; i <=9; i++) {
if (holders[i] == undefined) break;
text += '(' + (i + 1) + ')...' + holders[i].stats[left][right].toFixed(2).replace('.00', '') + '...(' + holders[i].pos.trim() + ') [b]' + holders[i].name + '[/b] - http://glb.warriorgeneral.com/game/player.pl?player_id=' + holders[i].id + ' ';
}
return text += "
";
},
index: function(array, id) {
for (var p in array) {
if (array[p].id == id)
return p;
}
return -1;
},
calculate: function(p, player, section, stat) {
// passing: pct, ya; rushing: avg; receiving: avg; punting: avg;
// kickpuntreturn: kravg, pravg
if (stat == 'pct' || stat.indexOf('avg') > -1 || stat == 'ya') {
switch (section) {
case 'passing':
if (stat == 'pct') {
p.stats[section][stat] = (((parseInt(p.stats.passing.comp) / parseInt(p.stats.passing.att)) * 100));
}
if (stat == 'ya') {
p.stats[section][stat] = (((parseInt(p.stats.passing.yds) / parseInt(p.stats.passing.att)) * 100) / 100);
}
break;
case 'rushing':
if (stat == 'avg') {
p.stats[section][stat] = (((parseInt(p.stats.rushing.yds) / parseInt(p.stats.rushing.rush)) * 100) / 100);
}
break;
case 'receiving':
if (stat == 'avg') {
p.stats[section][stat] = (((parseInt(p.stats.receiving.yds) / parseInt(p.stats.receiving.rec)) * 100) / 100);
}
break;
case 'punting':
if (stat == 'avg') {
p.stats[section][stat] = (((parseInt(p.stats.punting.yds) / parseInt(p.stats.punting.punts)) * 100) / 100);
}
break;
case 'kickpuntreturn':
if (stat == 'kavg') {
p.stats[section][stat] = (((parseInt(p.stats.kickpuntreturn.kyds) / parseInt(p.stats.kickpuntreturn.kkr)) * 100) / 100);
}
if (stat == 'pavg') {
p.stats[section][stat] = (((parseInt(p.stats.kickpuntreturn.pyds) / parseInt(p.stats.kickpuntreturn.ppr)) * 100) / 100);
}
break;
//default:
// return p.stats[section][stat] += p.stats[section][stat];
}
}
else {
p.stats[section][stat] += parseInt(player.stats[section][stat]);
return;
}
},
start_gamelist: function() {
$('#status').text(" - Getting games");
fn.loop_gamelist(
parseInt($('#range_from option:selected').val()),
parseInt($('#range_to option:selected').val())
);
},
build_mask: function(tr, section) {
var mask = [];
$('.box_score_player_stat', tr).each(function(i, td) {
var t = $(td).text().replace('/', '').toLowerCase();
if (section == 'kickpuntreturn') {
mask.push(mask.length < 3 ? 'k' + t : 'p' + t);
}
else
mask.push(t);
});
return mask;
},
player_stats: function(season, game, tr, section, mask, blowout) {
var id = $('.box_score_player_stat_name a:eq(0)', tr).attr('href').split('player_id=')[1];
var name = $('.box_score_player_stat_name a:eq(0)', tr).text();
var pos = $('.position', tr).text().trim();
var player = { "id": id, "name": name, "pos": pos, "stats": new stats() };
var ratio = $('#txb_adjust').val();
var blowout = $('#txb_blow').val();
var exists = false;
$.each(data.history.seasons[season].games[game].players, function(i, p) {
if (p.id == player.id) {
player = p; exists = true;
return;
}
});
if (!exists) data.history.seasons[season].games[game].players.push(player);
$('.box_score_player_stat', tr).each(function(i, s) {
var value = (parseFloat($(this).text().trim())* (blowout ? (ratio * .01) : 1)); //fn.calculate(player, section, parseFloat($(this).text().trim()), mask[i]) * (blowout ? (ratio * .01) : 1);//
player.stats[section][fn.mask_fix(section, mask[i], i)] = value;
});
},
mask_fix: function(section, mask, i) {
if (section != 'kickpuntreturn') return mask;
return i < 3 ? 'k' + mask : 'p' + mask;
},
parse_nonsort: function(season, game, context, us, them, blowout, ratio) {
var mask = [];
var active = false;
var section = '';
$('table', context).each(function(i, table) { // main container
section = $('.nonalternating_color > td', table).text().replace(' ', '').replace('/', '').toLowerCase();
if (section == 'teamstats' || section == 'scoringsummary' || section == '') return;
$('tr', table).each(function(i, tr) {
if ($(tr).is('.nonalternating_color2')) {
active = us.indexOf($('.box_score_player_stat_name', tr).text()) > -1;
mask = fn.build_mask(tr, section);
}
else if ($(tr).is('.alternating_color1, .alternating_color2') && active) {
fn.player_stats(season, game, tr, section, mask, blowout);
}
});
});
},
parse_sortable: function(season, game, context, us, them, blowout, ratio) {
var section = '';
var mask = [];
var active = false;
$('table', context).each(function(i, table) {
if ($('.nonalternating_color', table).length > 0) { // section header
section = $('.nonalternating_color > td', table).text().replace(' ', '').replace('/', '').toLowerCase();
if (section == 'teamstats' || section == 'scoringsummary' || section == '') return;
}
else {
var mask = [];
var active = false;
$('tr, th', table).each(function(i, tr) {
if ($(tr).is('.nonalternating_color2')) {
active = us.indexOf($('.box_score_player_stat_name', tr).text()) > -1;
mask = fn.build_mask(tr);
}
else if ($(tr).is('.alternating_color1, .alternating_color2') && active) {
fn.player_stats(season, game, tr, section, mask, blowout);
}
});
}
});
},
loop_games: function(season, to, game) {
if (season == to && game == data.history.seasons[season].games.length - 1) {
$('#status').text(' - Finished. Click Print to display');
fn.save();
return;
}
$('#status').text(' - Gathering stats: Season: [s] - Game [g]'.replace('[s]', season + 1).replace('[g]', game + 1));
var next = function() {
if (data.history.seasons[season].games[game+1] != undefined)
game = game + 1;
else {
season = season + 1;
game = 0;
}
fn.loop_games(season, to, game);
};
if (data.history.seasons[season].games[game].players.length < 1) {
$.ajax({
url: '/game/game.pl?game_id=[g]'.replace('[g]', data.history.seasons[season].games[game].id),
dataType: 'html',
success: function(response) {
var context = $('#scoreboard', response);
var boxscore = $('#box_score', response);
var offset = $('.team_logo:first img', context).attr('src').split('team_id=')[1] == data.team.id;
var us = $('.team_name:eq' + (offset ? '(1)' : '(2)') + ' a', context).text();
var them = $('.team_name:eq' + (offset ? '(2)' : '(1)') + ' a', context).text();
var us_score = parseInt($('.total:eq' + (offset ? '(1)' : '(2)'), context).text());
var them_score = parseInt($('.total:eq' + (offset ? '(2)' : '(1)'), context).text());
fn[$('.sortable-text', response).length == 0 ? 'parse_nonsort' : 'parse_sortable'](season, game, boxscore,us,them, (us_score - them_score) > parseInt($('#txb_blow').val()), parseInt($('#txb_adjust').val()));
},
complete: function() {
next();
},
error: function(x) {
//alert('Error getting game data page. ' + x);
}
});
}
else {
next();
}
return;
},
loop_gamelist: function(i, f) {
if (i > f) {
fn.loop_games(parseInt($('#range_from option:selected').val() - 1), parseInt($('#range_to option:selected').val() - 1), 0);
return;
}
$.ajax({
url: '/game/team.pl?season=[s]&team_id=[t]#'.replace('[s]', i).replace('[t]', data.team.id),
dataType: 'html',
success: function(response) {
var context = $('.schedule_content:eq(0)', response);
$('.alternating_color1, .alternating_color2', context).each(function(x, tr) {
if ($('td:last a', tr).text() == 'Matchup') return;
var g = { id: $('td:last a', tr).attr('href').split('game_id=')[1], players: [] };
var push = true;
$.each(data.history.seasons[i-1].games, function(i, game) {
if (game.id == g.id) {
push = false;
return;
}
});
if (push) data.history.seasons[i-1].games.push(g);
});
},
complete: function() {
i = i + 1;
fn.loop_gamelist(i, f);
},
error: function(x) {
//alert('Error getting season page. ' + x);
}
});
},
get: function() {
var stored = GM_getValue(data.team.id);
if (stored) {
data = JSON.parse(stored);
return true;
}
return false;
},
del: function() {
GM_deleteValue(data.team.id);
fn.onload();
},
save: function() {
GM_setValue(data.team.id, JSON.stringify(data));
}
};
fn.init();
});