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