Advertisement
waf9000

View Peak Rank

Nov 17th, 2023
783
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 2.76 KB | Source Code | 0 0
  1. // ==UserScript==
  2. // @name         View Peak Rank
  3. // @namespace    a2m.ca
  4. // @version      1.0.0
  5. // @description  Easily toggle to view peak rank in Tracker
  6. // @author       waf9000
  7. // @match        https://tracker.gg/valorant/**
  8. // @icon         https://www.google.com/s2/favicons?sz=64&domain=tracker.gg
  9. // @grant        none
  10. // ==/UserScript==
  11.  
  12. function withPeakRank(name, f) {
  13.   const cache = localStorage.getItem(name);
  14.   if (cache !== null) return f(JSON.parse(cache));
  15.   fetch(`https://api.tracker.gg/api/v2/valorant/standard/profile/riot/${encodeURIComponent(name)}`).then(r => r.json()).then(json => {
  16.     const data = json.data?.segments?.[0]?.stats?.peakRank?.metadata ?? false;
  17.     try {
  18.       localStorage.setItem(name, JSON.stringify(data));
  19.     } catch (e) {
  20.       if (e instanceof DOMException && e.name === 'QuotaExceededError') {
  21.         localStorage.clear();
  22.         localStorage.setItem(name, JSON.stringify(data));
  23.       } else { throw e; }
  24.     }
  25.     return f(data);
  26.   });
  27. }
  28.  
  29. window.getHeaderLabels = () => document.querySelectorAll(".st-entry-rank.st-header__item > span:not(.toggle-rank)");
  30.  
  31. function addPeakRankToggle() {
  32.   const headerLabels = window.getHeaderLabels();
  33.   const rows = document.querySelectorAll('.st-valorant-team div.st-content__item');
  34.   headerLabels.forEach((h) => h.classList.add('toggle-rank') ?? h.parentNode.addEventListener('click', (ev) => {
  35.     if (/(Current|Match) Rank/.exec(h.textContent)) {
  36.       headerLabels.forEach((header) => {
  37.         header.oldTextContent = header.textContent;
  38.         header.textContent = 'Peak Rank';
  39.       });
  40.       rows.forEach((row) => {
  41.         const name = row.querySelector('.trn-ign').innerText.replace('\n', '');
  42.         const rankImg = row.querySelector('.st-entry-rank img');
  43.         rankImg.currentRankSrc = rankImg.src;
  44.         withPeakRank(name, (metadata) => metadata && (rankImg.src = metadata?.iconUrl));
  45.       });
  46.     } else {
  47.       headerLabels.forEach((header) => { header.textContent = header.oldTextContent; });
  48.       document.querySelectorAll('.st-entry-rank img').forEach((img) => {
  49.         if (img.currentRankSrc) img.src = img.currentRankSrc;
  50.       });
  51.     }
  52.   }));
  53. };
  54.  
  55. function findRankHeader() {
  56.   if (window.getHeaderLabels()?.length > 0) {
  57.     console.debug("[ViewPeakRank] found rank header!");
  58.     addPeakRankToggle();
  59.     return true;
  60.   }
  61. }
  62.  
  63. setTimeout(() => {
  64.   const finder = new MutationObserver(findRankHeader); const elem = document.querySelector('#trn-teleport-drawer-content');
  65.   if (elem) finder.observe(elem, { subtree: true, childList: true }); else console.warn('[ViewPeakRank] could not find drawer');
  66.   console.debug("[ViewPeakRank] hi!");
  67.   findRankHeader() || console.debug("[ViewPeakRank] could not find rank header");
  68. }, 500);
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement