您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Long overdue search functionality for the Equalizer, EQXL and Ladder Ranking.
// ==UserScript== // @name Ranked User Search for Webcamdarts // @version 0.3.1 // @license MIT // @description Long overdue search functionality for the Equalizer, EQXL and Ladder Ranking. // @author AlexisDot // @match https://www.webcamdarts.com/wda-games/equalizer-(ranked) // @match https://www.webcamdarts.com/wda-games/eqxl-(ranked) // @match https://www.webcamdarts.com/wda-games/ladder-(ranked) // @namespace https://greasyfork.org/en/users/913506-alexisdot // ==/UserScript== /*jshint esversion: 6 */ /* --------Add search to Rank Pages --------- */ (function () { "use strict"; let curDate = new Date(); let lastMonthDate = new Date(); lastMonthDate.setMonth(lastMonthDate.getMonth() - 1); let lastMonth = lastMonthDate.getMonth() + 1; let curDateMonth = curDate.getMonth() + 1; let curDateYear = curDate.getFullYear(); let lastMonthYear = lastMonthDate.getFullYear(); const rankings = {}; let curPathParts = window.location.pathname.split("/"); let wdaGamesIndex = curPathParts.indexOf("wda-games"); let rankTypes = ["equalizer-(ranked)", "eqxl-(ranked)", "ladder-(ranked)"]; let curRankList = rankTypes.indexOf(curPathParts[wdaGamesIndex + 1]); let fetchUrlInfoCurMonth = null; let fetchUrlAllCurMonth = null; let fetchUrlInfoLastMonth = null; let fetchUrlAllLastMonth = null; switch (curRankList) { case 0: fetchUrlInfoCurMonth = `https://www.webcamdarts.com/EqualizerRanking_Read?month=${curDateMonth}&year=${curDateYear}&take=1&skip=0&page=2&pageSize=1`; fetchUrlAllCurMonth = `https://www.webcamdarts.com/EqualizerRanking_Read?month=${curDateMonth}&year=${curDateYear}`; fetchUrlInfoLastMonth = `https://www.webcamdarts.com/EqualizerRanking_Read?month=${lastMonth}&year=${lastMonthYear}&take=1&skip=0&page=2&pageSize=1`; fetchUrlAllLastMonth = `https://www.webcamdarts.com/EqualizerRanking_Read?month=${lastMonth}&year=${lastMonthYear}`; break; case 1: fetchUrlInfoCurMonth = `https://www.webcamdarts.com/EqXLRanking_Read?month=${curDateMonth}&year=${curDateYear}`; fetchUrlAllCurMonth = fetchUrlInfoCurMonth; fetchUrlInfoLastMonth = `https://www.webcamdarts.com/EqXLRanking_Read?month=${lastMonth}&year=${lastMonthYear}`; fetchUrlAllLastMonth = fetchUrlInfoLastMonth; break; case 2: fetchUrlInfoCurMonth = `https://www.webcamdarts.com/GameOn/Game/LadderRanking_Read?sort%5B0%5D%5Bfield%5D=Rank&sort%5B0%5D%5Bdir%5D=asc&take=1&skip=0&page=2&pageSize=1`; fetchUrlAllCurMonth = `https://www.webcamdarts.com/GameOn/Game/LadderRanking_Read?sort%5B0%5D%5Bfield%5D=Rank&sort%5B0%5D%5Bdir%5D=asc`; break; } function fetchCurMonth(errorCorrect = 60) { fetch(fetchUrlInfoCurMonth) .then((response) => response.json()) .then((data) => { let errorCorrect = 60; if (curRankList === 0 || curRankList === 2) { fetchUrlAllCurMonth = `${fetchUrlAllCurMonth}&take=${data.Total - errorCorrect }&skip=0&page=0&pageSize=${data.Total - errorCorrect}`; } fetch(fetchUrlAllCurMonth) .then((response2) => { if (response2.ok) { return response2.json(); } throw new Error("Something went wrong."); }) .then((data2) => { if (curRankList === 1) { rankings.curMonth = data2; } else { rankings.curMonth = data2.Data; } let searchField = document.querySelector('#user-search'); searchField.disabled = false; searchField.placeholder = "Init complete. Enter NickName here." document.querySelector('#search-trigger').disabled = false; }) .catch((error) => { errorCorrect += 10; console.log( `Error correction for current month is set to: ${errorCorrect}` ); setTimeout(fetchCurMonth(errorCorrect), 200); }); }); } function fetchLastMonth(errorCorrect = 60) { if (fetchUrlInfoLastMonth) { fetch(fetchUrlInfoLastMonth) .then((response) => response.json()) .then((data) => { if (curRankList === 0 || curRankList === 2) { fetchUrlAllLastMonth = `${fetchUrlAllLastMonth}&take=${data.Total - errorCorrect }&skip=0&page=0&pageSize=${data.Total - errorCorrect}`; } fetch(fetchUrlAllLastMonth) .then((response2) => { if (response2.ok) { return response2.json(); } throw new Error("Something went wrong."); }) .then((data2) => { if (curRankList === 1) { rankings.lastMonth = data2; } else { rankings.lastMonth = data2.Data; } let searchField = document.querySelector('#user-search'); searchField.disabled = false; searchField.placeholder = "Init complete. Enter NickName here." document.querySelector('#search-trigger').disabled = false; }) .catch((error) => { errorCorrect += 10; console.log( `Error correction for last month is set to: ${errorCorrect}` ); setTimeout(fetchLastMonth(errorCorrect), 200); }); }); } } fetchCurMonth(); fetchLastMonth(); const htmlEQ = /*html*/ ` <div style="height: 250px; padding: 15px; margin-top: 20px" class="liteAccordion rounded dark"> <h2><strong>Search User</strong></h2> <label for="user-search">NickName:</label ><input type="text" id="user-search" placeholder="Initializing search script, please wait..." style="padding: 5px; border-radius: 5px; width: calc(100% - 83px); margin-right: 5px; display: inline-block" disabled /> <button type="button" style="padding: 5px; border-radius: 5px; border: 1px solid; width: 49px; display: inline-block;" id="search-trigger" disabled>Search</button> <br /> <br /> <div class="k-grid"> <table cellspacing="0" id="search-results"> <thead> <tr> <th class="k-header">Month</th> <th class="k-header">Nickname</th> <th class="k-header">Rank</th> <th class="k-header">Battle Points</th> <th class="k-header">Avg Leg Value</th> <th class="k-header">Average</th> <th class="k-header">Best Leg</th> <th class="k-header">High Out</th> <th class="k-header">180's</th> <th class="k-header"># Pld</th> </tr> </thead> <tbody></tbody> </table> </div> </div> `; const htmlEQXL = /*html*/ ` <div style="height: 250px; padding: 15px; margin-top: 20px" class="liteAccordion rounded dark"> <h2><strong>Search User</strong></h2> <label for="user-search">NickName:</label ><input type="text" id="user-search" placeholder="Initializing search script, please wait..." style="padding: 5px; border-radius: 5px; width: calc(100% - 83px); margin-right: 5px; display: inline-block" disabled /> <button type="button" style="padding: 5px; border-radius: 5px; border: 1px solid; width: 49px; display: inline-block;" id="search-trigger" disabled>Search</button> <br /> <br /> <div class="k-grid"> <table cellspacing="0" id="search-results"> <thead> <tr> <th class="k-header">Month</th> <th class="k-header">Nickname</th> <th class="k-header">Rank</th> <th class="k-header">Battle Points</th> <th class="k-header">Set Value</th> <th class="k-header">Avg Leg Value</th> <th class="k-header">Average</th> <th class="k-header">Best Leg</th> <th class="k-header">High Out</th> <th class="k-header">180's</th> <th class="k-header"># Pld</th> </tr> </thead> <tbody></tbody> </table> </div> </div> `; const htmlLadder = /*html*/ ` <div style="height: 250px; padding: 15px; margin-top: 20px" class="liteAccordion rounded dark"> <h2><strong>Search User</strong></h2> <label for="user-search">NickName:</label ><input type="text" id="user-search" placeholder="Initializing search script, please wait..." style="padding: 5px; border-radius: 5px; width: calc(100% - 83px); margin-right: 5px; display: inline-block" disabled /> <button type="button" style="padding: 5px; border-radius: 5px; border: 1px solid; width: 49px; display: inline-block;" id="search-trigger" disabled>Search</button> <br /> <br /> <div class="k-grid"> <table cellspacing="0" id="search-results"> <thead> <tr> <th class="k-header">Nickname</th> <th class="k-header">Rank</th> <th class="k-header">Score</th> <th class="k-header">Average</th> <th class="k-header">Best Leg</th> <th class="k-header">High Out</th> <th class="k-header">180's</th> <th class="k-header"># Played</th> <th class="k-header"># Won</th> <th class="k-header">Win %</th> </tr> </thead> <tbody></tbody> </table> </div> </div> `; let html = null; switch (curRankList) { case 0: html = htmlEQ; break; case 1: html = htmlEQXL; break; case 2: html = htmlLadder; break; } // const element = document.createRange().createContextualFragment(html); let lastLiteAccordion = document.querySelectorAll(".liteAccordion"); lastLiteAccordion = lastLiteAccordion[lastLiteAccordion.length - 1]; lastLiteAccordion.insertAdjacentHTML("beforebegin", html); // document.querySelector('.load').parentElement.append(element); document.querySelector(".load")?.classList.remove("load"); const searchField = document.querySelector("#user-search"); const searchButton = document.querySelector("#search-trigger"); const searchResultsTableBody = document.querySelector( "#search-results tbody" ); const months = Array.from( { length: 12, }, (e, i) => { return new Date(null, i + 1, null).toLocaleDateString("en", { month: "long", }); } ); searchButton.addEventListener("click", getRankings); searchField.addEventListener("keypress", function (e) { if (e.key === "Enter") { getRankings(); } }); function getRankings() { let curMonthRank = rankings.curMonth.find( (user) => user.NickName == searchField.value ); let lastMonthRank = null; if (rankings.lastMonth) { lastMonthRank = rankings.lastMonth.find( (user) => user.NickName == searchField.value ); } searchResultsTableBody.innerHTML = ""; let curMonthHtml = ''; let lastMonthHtml = ''; if (curMonthRank) { switch (curRankList) { case 0: curMonthHtml = /*html*/ ` <tr> <td>${months[curDateMonth - 1]}</td> <td>${curMonthRank.NickName}</td> <td>${curMonthRank.Rank}</td> <td>${curMonthRank.Score}</td> <td>${curMonthRank.AverageLegValue}</td> <td>${curMonthRank.Average.toFixed(2)}</td> <td>${curMonthRank.BestLeg}</td> <td>${curMonthRank.HighestOut}</td> <td>${curMonthRank.OneEighties}</td> <td>${curMonthRank.GamesPlayed}</td> </tr> `; break; case 1: curMonthHtml = /*html*/ ` <tr> <td>${months[curDateMonth - 1]}</td> <td>${curMonthRank.NickName}</td> <td>${curMonthRank.Rank}</td> <td>${curMonthRank.Score}</td> <td>${curMonthRank.CurrentLegValue}</td> <td>${curMonthRank.AverageLegValue}</td> <td>${curMonthRank.Average.toFixed(2)}</td> <td>${curMonthRank.BestLeg}</td> <td>${curMonthRank.HighestOut}</td> <td>${curMonthRank.OneEighties}</td> <td>${curMonthRank.GamesPlayed}</td> </tr> `; break; case 2: curMonthHtml = /*html*/ ` <tr> <td>${curMonthRank.NickName}</td> <td>${curMonthRank.Rank}</td> <td>${curMonthRank.Score}</td> <td>${curMonthRank.Average.toFixed(2)}</td> <td>${curMonthRank.BestLeg}</td> <td>${curMonthRank.HighestOut}</td> <td>${curMonthRank.OneEighties}</td> <td>${curMonthRank.GamesPlayed}</td> <td>${curMonthRank.GamesWon}</td> <td>${curMonthRank.WinPercentage.toFixed(2)}</td> </tr> `; break; } searchResultsTableBody.innerHTML += curMonthHtml; } else { let curMonthHtml = ''; switch (curRankList) { case 0: curMonthHtml = /*html*/ ` <tr> <td>${months[curDateMonth - 1]}</td> <td colspan="9" style="align: center">no results found</td> </tr> `; break; case 1: curMonthHtml = /*html*/ ` <tr> <td>${months[curDateMonth - 1]}</td> <td colspan="10" style="align: center">no results found</td> </tr> `; break; case 2: curMonthHtml = /*html*/ ` <tr> <td colspan="10" style="align: center">no results found</td> </tr> `; break; } searchResultsTableBody.innerHTML += curMonthHtml; } if (rankings.lastMonth) { if (lastMonthRank) { switch (curRankList) { case 0: lastMonthHtml = /*html*/ ` <tr> <td>${months[lastMonth - 1]}</td> <td>${lastMonthRank.NickName}</td> <td>${lastMonthRank.Rank}</td> <td>${lastMonthRank.Score}</td> <td>${lastMonthRank.AverageLegValue}</td> <td>${lastMonthRank.Average.toFixed(2)}</td> <td>${lastMonthRank.BestLeg}</td> <td>${lastMonthRank.HighestOut}</td> <td>${lastMonthRank.OneEighties}</td> <td>${lastMonthRank.GamesPlayed}</td> </tr> `; break; case 1: lastMonthHtml = /*html*/ ` <tr> <td>${months[lastMonth - 1]}</td> <td>${lastMonthRank.NickName}</td> <td>${lastMonthRank.Rank}</td> <td>${lastMonthRank.Score}</td> <td>${lastMonthRank.CurrentLegValue}</td> <td>${lastMonthRank.AverageLegValue}</td> <td>${lastMonthRank.Average.toFixed(2)}</td> <td>${lastMonthRank.BestLeg}</td> <td>${lastMonthRank.HighestOut}</td> <td>${lastMonthRank.OneEighties}</td> <td>${lastMonthRank.GamesPlayed}</td> </tr> `; break; } searchResultsTableBody.innerHTML += lastMonthHtml; } else { let lastMonthHtml = ''; switch (curRankList) { case 0: lastMonthHtml = /*html*/ ` <tr> <td>${months[lastMonth - 1]}</td> <td colspan="9" style="align: center">no results found</td> </tr> `; break; case 1: lastMonthHtml = /*html*/ ` <tr> <td>${months[lastMonth - 1]}</td> <td colspan="10" style="align: center">no results found</td> </tr> `; break; } searchResultsTableBody.innerHTML += lastMonthHtml; } } } })();