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 config from "@/utils/config.json"; 2import { preferences } from "@/utils/storage"; 3import { bricksToCurrency, getUserDetails } from "@/utils/utilities"; 4import plusIcon from "@/assets/plus.svg"; 5import plusDeluxeIcon from "@/assets/plusDx.svg"; 6 7export default defineContentScript({ 8 matches: ["*://polytoria.com/*"], 9 main() { 10 getUserDetails() 11 .then((user) => { 12 if (!user) { 13 // Error page or event page most likely, where users are not authenticated 14 console.warn("[Poly+] Failure to get logged in user details."); 15 return; 16 } 17 18 if (config.devBuild) console.info("[Poly+] Logged in as: ", user); 19 20 preferences.getPreferences() 21 .then((values) => { 22 if (values.irlBrickPrice.enabled) { 23 const currency = bricksToCurrency(user.bricks, "USD"); 24 if (currency) { 25 document.getElementsByClassName("brickBalanceCount")[0] 26 .textContent += ` (${currency})`; 27 } 28 } 29 30 if (values.hideNotificationBadges.enabled) { 31 const badges = document.getElementsByClassName( 32 "notif-nav notif-sidebar", 33 ); 34 for (const badge of badges) { 35 badge.remove(); 36 } 37 } 38 39 if (values.membershipThemes.enabled) { 40 membershipThemes( 41 values.membershipThemes.themeId as "plus" | "plusdx", 42 ); 43 } 44 }); 45 }); 46 }, 47}); 48 49/** 50 * Applies the specified membership's theme to the sitewide navigation. 51 * @param themeId The ID of the membership whose theme should be applied. 52 */ 53function membershipThemes(themeId: "plus" | "plusdx") { 54 const navbar = document.querySelector( 55 ".navbar.navbar-expand-lg.navbar-light.bg-navbar.nav-topbar", 56 )!; 57 const sidebar = document.querySelector( 58 ".d-flex.flex-column.flex-shrink-0.bg-sidebar.nav-sidebar", 59 )!; 60 61 navbar.classList.add("navbar-" + themeId); 62 sidebar.classList.add("sidebar-" + themeId); 63 64 if (themeId == "plus") { 65 sidebar.getElementsByTagName("img")[0].src = plusIcon; 66 } else { 67 sidebar.getElementsByTagName("img")[0].src = plusDeluxeIcon; 68 } 69}