// ==UserScript== // @name Yahoo Team BorisChen // @description This script adds a row to the team page in Yahoo Football Fantasy with the boris chen tier // @version 1.1 // @grant GM.xmlHttpRequest // @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js // @require https://greasyfork.org/scripts/31940-waitforkeyelements/code/waitForKeyElements.js?version=209282 // @include https://football.fantasysports.yahoo.com/f1/*/*/team* // @include /^https?:\/\/football\.fantasysports\.yahoo\.com\/f1\/.*\/[0-9][0-9]?/ // @namespace https://greasyfork.org/users/812226 // @downloadURL none // ==/UserScript== const TIER_TINTS = [ "#1e6bb9", "#3479c0", "#4a88c7", "#6197ce", "#78a6d5", "#8eb5dc", "#a5c3e3", "#aec9e5", "#b7cfe8", "#c0d5eb", "#c9dbee", "#d2e1f1", "#dbe7f3", "#e4edf6", "#edf3f9", "#f6f9fc", "#ffffff" ]; const getHttp = (url) => { return new Promise(resolve => { GM.xmlHttpRequest({ method: "GET", url: url, headers: { "Accept": "text/plain" }, onload: resolve }); }); } (async () => { const tierMap = {}; const wrPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_WR.txt") .then(response => parseTierText(response.responseText)) .then(wrTierMap => Object.assign(tierMap, wrTierMap)); const rbPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_RB.txt") .then(response => parseTierText(response.responseText)) .then(rbTierMap => Object.assign(tierMap, rbTierMap)); const qbPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_QB.txt") .then(response => parseTierText(response.responseText)) .then(qbTierMap => Object.assign(tierMap, qbTierMap)); const tePromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_TE.txt") .then(response => parseTierText(response.responseText)) .then(teTierMap => Object.assign(tierMap, teTierMap)); const dstPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_DST.txt") .then(response => parseTierText(response.responseText, santizeTeamString)) .then(dstTierMap => Object.assign(tierMap, dstTierMap)); const kPromise = getHttp("https://s3-us-west-1.amazonaws.com/fftiers/out/text_K.txt") .then(response => parseTierText(response.responseText)) .then(kTierMap => Object.assign(tierMap, kTierMap)); await Promise.all([wrPromise, rbPromise, qbPromise, tePromise, dstPromise, kPromise]); waitForKeyElements ( "#statTable0", (jNode) => { appendDataToTable(jNode, tierMap); } ); waitForKeyElements ( "#statTable1", (jNode) => { appendDataToTable(jNode, tierMap); } ); })(); const appendDataToTable = (jNode, data) => { const rows = jNode.children().find('tr'); let rowToInsert = 1; if ($(rows.get(0)).children().get(1).className.includes('Js-hidden')) { rowToInsert = 2; } rows.each((index, obj) => { if (index == 0) { } else if (index == 1) { $($($(obj).children()).eq(rowToInsert)).after(createYahooStyledHeader('BorisChen Tier')); } else { let tier = 'NR'; const name = getName(obj); if (data[name] !== null && data[name] !== undefined) { tier = data[name] + 1; } else { console.log("could not match this player: " + name); } $($($(obj).children()).eq(rowToInsert)).after(createTierCol(tier)); } }); }; const parseTierText = (rawStr, sanitize = santizeString) => { const tierMap = {}; const tiers = rawStr.split(/\r?\n/); tiers.forEach((tierStr, tier) => { if (tierStr != "") { const playerStr = tierStr.substring(tierStr.indexOf(":") + 2); const players = playerStr.split(', '); players.forEach((player) => { tierMap[sanitize(player)] = tier; }); } }); return tierMap; } const createYahooStyledHeader = (title) => { return `