A rewrite of Poly+, my quality-of-life browser extension for Polytoria. Built entirely fresh using the WXT extension framework, Typescript, and with added better overall code quality.
extension
1import { preferences } from "@/utils/storage"; 2import { getUserDetails, bricksToCurrency } from "@/utils/utilities"; 3import plusIcon from "/svgs/plus.svg"; 4import plusDeluxeIcon from "/svgs/plusDx.svg"; 5 6export default defineContentScript({ 7 matches: ['*://polytoria.com/*'], 8 main() { 9 getUserDetails() 10 .then((user) => { 11 if (!user) { 12 // Error page or event page most likely, where users are not authenticated 13 console.warn('[Poly+] Failure to get logged in user details.'); 14 return; 15 }; 16 17 console.info('[Poly+] Logged in as: ', user); 18 19 preferences.getPreferences() 20 .then((values) => { 21 if (values.irlBrickPrice.enabled) { 22 const currency = bricksToCurrency(user.bricks, "USD"); 23 if (currency) { 24 document.getElementsByClassName('brickBalanceCount')[0].textContent += ` (${currency})`; 25 }; 26 }; 27 28 if (values.hideNotificationBadges.enabled) { 29 const badges = document.getElementsByClassName('notif-nav notif-sidebar'); 30 for (const badge of badges) { 31 badge.remove(); 32 }; 33 }; 34 35 if (values.membershipThemes.enabled) membershipThemes(values.membershipThemes.themeId as "plus" | "plusdx"); 36 }); 37 }); 38 } 39}); 40 41function membershipThemes(themeId: "plus" | "plusdx") { 42 const navbar = document.querySelector('.navbar.navbar-expand-lg.navbar-light.bg-navbar.nav-topbar')!; 43 const sidebar = document.querySelector('.d-flex.flex-column.flex-shrink-0.bg-sidebar.nav-sidebar')!; 44 45 navbar.classList.add('navbar-' + themeId); 46 sidebar.classList.add('sidebar-' + themeId); 47 48 sidebar.getElementsByTagName('img')[0].src = browser.runtime.getURL(`/svgs/${themeId}.svg` as `/svgs/plus.svg` | `/svgs/plusdx.svg`); 49};