您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This script adds a row to the team page in Yahoo Football Fantasy with the boris chen tier
当前为
// ==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 // ==/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 `<th class="ys-stat Hy(m)" title="${title}"> <div class="ys-stat Whs-nw T-0 Pos-a P-4"> ${title} <i class="Icon Wpx-10 ys-dir0"></i> </div> </th>` }; const createTierCol = (tier) => { const colour = tier < TIER_TINTS.length ? TIER_TINTS[tier - 1] : TIER_TINTS[TIER_TINTS.length - 1]; return `<td class="Alt Ta-c Bdrstart" style="background-color: ${colour}; opacity: 0.75"> ${tier} </td>`; }; const getName = (jQueryNode) => { const nameCol = $($(jQueryNode).find('.player')); const nameRow = $(nameCol.find('.ysf-player-name')); const name = $(nameRow.children().get(0)).text(); return santizeString(name); }; const santizeString = (str) => { if (str === "Darrell Henderson") { str = "darrell henderson jr"; } return str.toLowerCase() .replace(/\./g, '') .replace(/'/g, ''); }; const santizeTeamString = (str) => { str = str.substring(0, str.lastIndexOf(" ")); return santizeString(str); }