schoolbox web extension :)
1import { browser, defineContentScript } from "#imports";
2import { injectCatppuccin, injectLogo, injectStylesheet, injectUserSnippets } from "@/utils";
3import { EXCLUDE_MATCHES, LOGO_INFO } from "@/utils/constants";
4import type { LogoId } from "@/utils/storage";
5import { globalSettings, schoolboxUrls } from "@/utils/storage";
6import cssUrl from "./catppuccin.css?url";
7
8export default defineContentScript({
9 matches: ["<all_urls>"],
10 cssInjectionMode: "manual",
11 runAt: "document_start",
12 excludeMatches: EXCLUDE_MATCHES,
13 async main() {
14 const settings = await globalSettings.storage.getValue();
15 const urls = (await schoolboxUrls.storage.getValue()).urls;
16
17 if (settings.global && urls.includes(window.location.origin)) {
18 // inject themes
19 if (settings.themes) {
20 injectStylesheet(cssUrl);
21 injectCatppuccin(settings.themeFlavour, settings.themeAccent);
22 }
23
24 // inject logo
25 injectLogo(LOGO_INFO[settings.themeLogo as LogoId], settings.themeLogoAsFavicon);
26
27 // inject snippets
28 if (settings.snippets) {
29 injectUserSnippets(settings.userSnippets);
30 }
31
32 // update icon
33 browser.runtime.sendMessage({ updateIcon: true });
34 }
35 },
36});