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 { getUserDetails, bricksToCurrency } 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].textContent += ` (${currency})`; 26 }; 27 }; 28 29 if (values.hideNotificationBadges.enabled) { 30 const badges = document.getElementsByClassName('notif-nav notif-sidebar'); 31 for (const badge of badges) { 32 badge.remove(); 33 }; 34 }; 35 36 if (values.membershipThemes.enabled) membershipThemes(values.membershipThemes.themeId as "plus" | "plusdx"); 37 }); 38 }); 39 } 40}); 41 42/** 43 * Applies the specified membership's theme to the sitewide navigation. 44 * @param themeId The ID of the membership whose theme should be applied. 45 */ 46function membershipThemes(themeId: "plus" | "plusdx") { 47 const navbar = document.querySelector('.navbar.navbar-expand-lg.navbar-light.bg-navbar.nav-topbar')!; 48 const sidebar = document.querySelector('.d-flex.flex-column.flex-shrink-0.bg-sidebar.nav-sidebar')!; 49 50 navbar.classList.add('navbar-' + themeId); 51 sidebar.classList.add('sidebar-' + themeId); 52 53 if (themeId == "plus") { 54 sidebar.getElementsByTagName('img')[0].src = plusIcon; 55 } else { 56 sidebar.getElementsByTagName('img')[0].src = plusDeluxeIcon; 57 } 58};