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};