您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows players comparison not having direct games history through common competitors
当前为
// ==UserScript== // @name swiss-badminton extended head 2 head // @namespace http://tampermonkey.net/ // @version 1.1.2 // @description Shows players comparison not having direct games history through common competitors // @author all41.dev // @match https://www.swiss-badminton.ch/* // @icon https://www.google.com/s2/favicons?sz=64&domain=swiss-badminton.ch // @license MIT // @grant none // ==/UserScript== window.addEventListener('load', function() { 'use strict'; const getFetchResp = async (url) => { const resp = await fetch(url); if (!resp.ok) throw new Error(`fetch failed: ${await resp.text()}`); const txt = await resp.text(); try { return JSON.parse(txt); } catch (err) { return txt; } } const getOptions = async (playerNumber) => { const resp = await getFetchResp(`https://www.swiss-badminton.ch/head-2-head/GetPlayerOptions?OrganizationCode=A819E89F-58F3-49B9-9C1F-C865A135F19A&t1p1memberid=${playerNumber}&t1p2memberid=&t2p1memberid=&t2p2memberid=&_=1683628580024`); const options = resp.T2P1Options; //console.debug(options); return options; } const calcExtH2h = async () => { const player1Options = await getOptions(mainUserId); //console.debug(player1Options); const player2Id = document.querySelector('#player2Id').value; //console.debug(player2Id); const player2Options = await getOptions(player2Id); //console.debug(player2Options); const commonOpponents = player1Options.filter((op1) => player2Options.some((op2) => op2.Value === op1.Value)); console.debug(commonOpponents); const container = document.querySelector('#h2h-loading_content'); container.innerHTML = ''; const tableContainer = document.createElement('table'); tableContainer.style.width = '100%'; tableContainer.innerHTML = '<thead><th></th><th></th></thead><tbody></tbody>'; container.insertBefore(tableContainer, null); const tbodyContainetbodyContainer = tableContainer.querySelector('tbody'); tbodyContainetbodyContainer.innerHTML = ''; for(const commonOpp of commonOpponents) { console.debug(commonOpp); const result = await getMiddlePlayerResults(mainUserId, commonOpp.Value, player2Id); const row = document.createElement('tr'); const left = document.createElement('td'); left.style.verticalAlign = 'top'; left.innerHTML = result[0]; row.insertBefore(left, null); const right = document.createElement('td'); right.style.verticalAlign = 'top'; right.innerHTML = result[1]; row.insertBefore(right, null); tbodyContainetbodyContainer.insertBefore(row, null); } } const getMiddlePlayerResults = async (mainPlayer, middlePlayer, comparedPlayer) => { // https://www.swiss-badminton.ch/head-2-head/Head2HeadContent?OrganizationCode=A819E89F-58F3-49B9-9C1F-C865A135F19A&t1p1memberid=401124&t1p2memberid=&t2p1memberid=403483&t2p2memberid=&_=1683628580027 const leftResults = await getFetchResp(`https://www.swiss-badminton.ch/head-2-head/Head2HeadContent?OrganizationCode=A819E89F-58F3-49B9-9C1F-C865A135F19A&t1p1memberid=${mainPlayer}&t1p2memberid=&t2p1memberid=${middlePlayer}&t2p2memberid=&_=1683628580027`); const rightResults = await getFetchResp(`https://www.swiss-badminton.ch/head-2-head/Head2HeadContent?OrganizationCode=A819E89F-58F3-49B9-9C1F-C865A135F19A&t1p1memberid=${middlePlayer}&t1p2memberid=&t2p1memberid=${comparedPlayer}&t2p2memberid=&_=1683628580027`); //console.debug(leftResults); //console.debug(rightResults); return [leftResults, rightResults]; } const displayRanks = async (ev) => { const tables = document.querySelectorAll('table'); const table = tables[tables.length-1]; const trhead = table.querySelector('.ruler thead tr'); const classements = []; const trs = table.querySelectorAll('.ruler tbody tr'); //console.debug(trs); trs.forEach((tr) => { fetch(tr.querySelector('a').href).then((res) => res.text()).then((text) => { const parser = new DOMParser(); const playerDocument = parser.parseFromString(text, "text/html").documentElement; const tables2 = Array.from(playerDocument.querySelectorAll('table')); const classementsPlayer = tables2.find((t) => t.innerText.trim().startsWith('Classements')); // console.debug(classementsPlayer); if (!classementsPlayer) return; Array.from(classementsPlayer.querySelectorAll('td')).forEach((el) => { const classementName = el.innerText; if(classements.indexOf(classementName) === -1) { classements.push(classementName); const newCat = trhead.insertCell(); newCat.onclick = sortTableNumber; newCat.style.cursor = 'pointer'; trs.forEach((_tr) => _tr.insertCell()); newCat.innerText = classementName; } const link = el.querySelector('a'); fetch(link.href).then((res) => res.text()).then((text) => { const rankingDocument = parser.parseFromString(text, "text/html").documentElement; const categories = rankingDocument.querySelector('tbody').querySelectorAll('tr:not(:nth-child(1))'); const singles = categories[0]; const classement = singles.querySelector('td:nth-child(2)'); const classementCell = tr.querySelectorAll('td')[classements.indexOf(classementName)+3]; classementCell.innerText = classement.innerText; }); }); }); }); } const sortTableNumber = (event) => { const target = event.target; const index = Array.from(target.parentNode.children).indexOf(target); console.debug(index); const targetTable = target.parentElement.parentElement.parentElement; const tbody = targetTable.querySelector('tbody'); const rowArr = Array.from(tbody.querySelectorAll('tr')); const sortedRows = rowArr.sort((l, r) => parseInt(l.querySelector(`td:nth-child(${index+1})`).innerText || '9999') < parseInt(r.querySelector(`td:nth-child(${index+1})`).innerText || '9999') ? -1 : 1); sortedRows.forEach((r) => tbody.insertBefore(r, null)); } if(window.location.href.startsWith('https://www.swiss-badminton.ch/head-2-head')) { // head2head const mainUserId = new URLSearchParams(window.location.search).get('T1P1MemberID'); const titleElem = document.querySelector('h2'); const extH2HLink = document.createElement('div'); extH2HLink.style.margins = 'auto'; extH2HLink.innerHTML = '<input id="player2Id" style="color: black; margins: auto" class="text--xsmall text--center" type="text" value="" placeholder="player #"><button id="extH2hBtn">extended head to head</button><table id="extH2HResult" style="width: 100%"><thead><th>left</th><th>right</th></thead><tbody></tbody></table>'; titleElem.parentNode.insertBefore(extH2HLink, titleElem.nextSibling); document.querySelector('#extH2hBtn').onclick = calcExtH2h; } if (window.location.href.startsWith('https://www.swiss-badminton.ch/sport/event.aspx')) { // event page setTimeout(() => { const btn = document.createElement('button'); btn.type = 'button'; btn.innerText = 'display ranking'; btn.onclick = displayRanks; document.querySelectorAll('h3')[1].insertBefore(btn, null); // alert(document.querySelectorAll('h3')[1]); }, 5000); } }, false);