From 05cf380e867fef70ee37fdd93f3b7140fa02e71f Mon Sep 17 00:00:00 2001 From: Aden Linday Date: Tue, 7 Apr 2026 08:46:28 +0930 Subject: [PATCH] feat: some messed up stuff to fix some stuff --- .gitignore | 4 ++++ package.json | 1 + scripts/copy-pdfjs-assets.mjs | 17 +++++++++++++++++ src/interface/pages/themeCreator.svelte | 4 ++-- src/lib/pdfjsExtension.ts | 17 +++++++++-------- src/plugins/built-in/themes/ThemeCreator.ts | 7 +++---- src/seqta/utils/listeners/MessageListener.ts | 2 +- vite.config.ts | 17 +---------------- 8 files changed, 38 insertions(+), 31 deletions(-) create mode 100644 scripts/copy-pdfjs-assets.mjs diff --git a/.gitignore b/.gitignore index 1c965582..e24ea199 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,10 @@ pnpm-lock.yaml yarn.lock bun.lock +# PDF.js extension assets (copied by postinstall from pdfjs-dist) +src/public/resources/pdfjs/pdf.worker.min.mjs +src/public/resources/pdfjs/pdf.legacy.min.mjs + # Build extension.zip build/ diff --git a/package.json b/package.json index d175d5ff..e17a4637 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "description": "Enhance SEQTA Learn's usability and aesthetics! A fork of BetterSEQTA to continue development and add heaps more features!", "browserslist": "> 0.5%, last 2 versions, not dead", "scripts": { + "postinstall": "node scripts/copy-pdfjs-assets.mjs", "autoaudit": "npm audit && npm audit fix && npm run build", "dev": "cross-env MODE=chrome vite dev", "dev:firefox": "cross-env MODE=firefox vite build --watch", diff --git a/scripts/copy-pdfjs-assets.mjs b/scripts/copy-pdfjs-assets.mjs new file mode 100644 index 00000000..2ed5cc77 --- /dev/null +++ b/scripts/copy-pdfjs-assets.mjs @@ -0,0 +1,17 @@ +import { copyFileSync, mkdirSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const pdfjsRoot = join(root, "node_modules", "pdfjs-dist"); +const outDir = join(root, "src", "public", "resources", "pdfjs"); + +mkdirSync(outDir, { recursive: true }); +copyFileSync( + join(pdfjsRoot, "build", "pdf.worker.min.mjs"), + join(outDir, "pdf.worker.min.mjs"), +); +copyFileSync( + join(pdfjsRoot, "legacy", "build", "pdf.min.mjs"), + join(outDir, "pdf.legacy.min.mjs"), +); diff --git a/src/interface/pages/themeCreator.svelte b/src/interface/pages/themeCreator.svelte index e24a7fea..1f04583c 100644 --- a/src/interface/pages/themeCreator.svelte +++ b/src/interface/pages/themeCreator.svelte @@ -24,9 +24,9 @@ handleImageVariableChange, handleCoverImageUpload } from '../utils/themeImageHandlers'; - import { CloseThemeCreator } from '@/plugins/built-in/themes/ThemeCreator' - import { themeUpdates } from '../hooks/ThemeUpdates' import { ThemeManager } from '@/plugins/built-in/themes/theme-manager' + import { themeUpdates } from '../hooks/ThemeUpdates' + import { CloseThemeCreator } from '@/plugins/built-in/themes/ThemeCreator' const { themeID } = $props<{ themeID: string }>() const themeManager = ThemeManager.getInstance(); diff --git a/src/lib/pdfjsExtension.ts b/src/lib/pdfjsExtension.ts index 09c00b42..77646be2 100644 --- a/src/lib/pdfjsExtension.ts +++ b/src/lib/pdfjsExtension.ts @@ -1,11 +1,12 @@ import * as pdfjs from "pdfjs-dist"; import browser from "webextension-polyfill"; -import pdfWorkerHref from "pdfjs-dist/build/pdf.worker.min.mjs?url"; -import pdfLegacyHref from "pdfjs-dist/legacy/build/pdf.min.mjs?url"; -function extensionAssetUrl(viteAssetHref: string): string { - const path = viteAssetHref.replace(/^\/+/, ""); - return browser.runtime.getURL(path); +/** Static copies in `src/public` (see `scripts/copy-pdfjs-assets.mjs`, manifest web_accessible_resources). */ +const PDF_WORKER_RESOURCE = "resources/pdfjs/pdf.worker.min.mjs"; +const PDF_LEGACY_RESOURCE = "resources/pdfjs/pdf.legacy.min.mjs"; + +function extensionAssetUrl(relativePath: string): string { + return browser.runtime.getURL(relativePath.replace(/^\/+/, "")); } let workerConfigured = false; @@ -13,14 +14,14 @@ let workerConfigured = false; /** Required before pdfjs spawns a worker (content-script / extension isolate). */ export function ensurePdfjsWorker(): void { if (workerConfigured) return; - pdfjs.GlobalWorkerOptions.workerSrc = extensionAssetUrl(pdfWorkerHref); + pdfjs.GlobalWorkerOptions.workerSrc = extensionAssetUrl(PDF_WORKER_RESOURCE); workerConfigured = true; } /** Page-context script on Firefox must load these chrome-extension:// URLs (see web_accessible_resources). */ export function getPdfjsPageContextUrls(): { lib: string; worker: string } { return { - lib: extensionAssetUrl(pdfLegacyHref), - worker: extensionAssetUrl(pdfWorkerHref), + lib: extensionAssetUrl(PDF_LEGACY_RESOURCE), + worker: extensionAssetUrl(PDF_WORKER_RESOURCE), }; } diff --git a/src/plugins/built-in/themes/ThemeCreator.ts b/src/plugins/built-in/themes/ThemeCreator.ts index 9b53bc28..5463eb6f 100644 --- a/src/plugins/built-in/themes/ThemeCreator.ts +++ b/src/plugins/built-in/themes/ThemeCreator.ts @@ -1,11 +1,10 @@ import renderSvelte from "@/interface/main"; -import themeCreator from "@/interface/pages/themeCreator.svelte"; -import { unmount } from "svelte"; import { ThemeManager } from "@/plugins/built-in/themes/theme-manager"; +import { unmount } from "svelte"; +import themeCreator from "@/interface/pages/themeCreator.svelte"; import { settingsState } from "@/seqta/utils/listeners/SettingsState"; let themeCreatorSvelteApp: any = null; -const themeManager = ThemeManager.getInstance(); /** * Open the Theme Creator sidebar, it is an embedded page loaded similar to the extension popup @@ -41,7 +40,7 @@ export function OpenThemeCreator(themeID: string = "") { closeButton.textContent = "×"; closeButton.addEventListener("click", () => { CloseThemeCreator(); - themeManager.clearPreview(); + ThemeManager.getInstance().clearPreview(); }); document.body.appendChild(closeButton); diff --git a/src/seqta/utils/listeners/MessageListener.ts b/src/seqta/utils/listeners/MessageListener.ts index cf9cb82e..13f82d73 100644 --- a/src/seqta/utils/listeners/MessageListener.ts +++ b/src/seqta/utils/listeners/MessageListener.ts @@ -6,13 +6,13 @@ import { OpenMenuOptions, } from "@/seqta/utils/Openers/OpenMenuOptions"; +import { ThemeManager } from "@/plugins/built-in/themes/theme-manager"; import { CloseThemeCreator, OpenThemeCreator, } from "@/plugins/built-in/themes/ThemeCreator"; import sendThemeUpdate from "@/seqta/utils/sendThemeUpdate"; import hideSensitiveContent from "@/seqta/ui/dev/hideSensitiveContent"; -import { ThemeManager } from "@/plugins/built-in/themes/theme-manager"; const themeManager = ThemeManager.getInstance(); diff --git a/vite.config.ts b/vite.config.ts index 0dfc3932..ddc5bec3 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -85,22 +85,7 @@ export default defineConfig(({ command }) => ({ pageState: join(__dirname, "src", "pageState.js"), }, output: { - assetFileNames(info) { - const labels = [ - ...(info.names ?? []), - ...(info.originalFileNames ?? []), - ].join(" "); - if ( - labels.includes("pdf.worker.min") || - labels.includes("pdf.worker.mjs") - ) { - return "resources/pdfjs/pdf.worker.min.mjs"; - } - if (labels.includes("legacy") && labels.includes("pdf.min")) { - return "resources/pdfjs/pdf.legacy.min.mjs"; - } - return "assets/[name]-[hash][extname]"; - }, + assetFileNames: "assets/[name]-[hash][extname]", }, onwarn(warning, warn) { if (warning.code === "FILE_NAME_CONFLICT") return;