From 841cb328356431d766e4535325644aaba835265a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 28 Dec 2025 01:58:22 +0200 Subject: [PATCH] fix(icon_packs): integrate boxicons back into share theme --- apps/server/src/routes/assets.ts | 23 ++++++++++++++--------- apps/server/src/share/content_renderer.ts | 7 +++++-- packages/share-theme/package.json | 1 - packages/share-theme/src/styles/index.css | 2 -- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/apps/server/src/routes/assets.ts b/apps/server/src/routes/assets.ts index 7fc3f1a27..4418876a7 100644 --- a/apps/server/src/routes/assets.ts +++ b/apps/server/src/routes/assets.ts @@ -1,9 +1,10 @@ -import { assetUrlFragment } from "../services/asset_path.js"; -import path from "path"; import express from "express"; -import { getResourceDir, isDev } from "../services/utils.js"; -import type serveStatic from "serve-static"; import { existsSync } from "fs"; +import path from "path"; +import type serveStatic from "serve-static"; + +import { assetUrlFragment } from "../services/asset_path.js"; +import { getResourceDir, isDev } from "../services/utils.js"; const persistentCacheStatic = (root: string, options?: serveStatic.ServeStaticOptions>>) => { if (!isDev) { @@ -31,19 +32,24 @@ async function register(app: express.Application) { css: { devSourcemap: true } }); app.use(`/${assetUrlFragment}/`, (req, res, next) => { - req.url = `/${assetUrlFragment}` + req.url; + req.url = `/${assetUrlFragment}${req.url}`; + vite.middlewares(req, res, next); + }); + app.use(`/share/assets/fonts/`, (req, res, next) => { + req.url = `/${assetUrlFragment}/src/fonts${req.url}`; vite.middlewares(req, res, next); }); app.use(`/node_modules/@excalidraw/excalidraw/dist/prod`, persistentCacheStatic(path.join(srcRoot, "../../node_modules/@excalidraw/excalidraw/dist/prod"))); } else { const publicDir = path.join(resourceDir, "public"); if (!existsSync(publicDir)) { - throw new Error("Public directory is missing at: " + path.resolve(publicDir)); + throw new Error(`Public directory is missing at: ${ path.resolve(publicDir)}`); } app.use(`/${assetUrlFragment}/src`, persistentCacheStatic(path.join(publicDir, "src"))); app.use(`/${assetUrlFragment}/stylesheets`, persistentCacheStatic(path.join(publicDir, "stylesheets"))); app.use(`/${assetUrlFragment}/fonts`, persistentCacheStatic(path.join(publicDir, "fonts"))); + app.use(`/share/assets/fonts/`, express.static(path.join(publicDir, "fonts"))); app.use(`/${assetUrlFragment}/translations/`, persistentCacheStatic(path.join(publicDir, "translations"))); app.use(`/node_modules/`, persistentCacheStatic(path.join(publicDir, "node_modules"))); } @@ -59,10 +65,9 @@ export function getShareThemeAssetDir() { if (process.env.NODE_ENV === "development") { const srcRoot = path.join(__dirname, "..", ".."); return path.join(srcRoot, "../../packages/share-theme/dist"); - } else { - const resourceDir = getResourceDir(); - return path.join(resourceDir, "share-theme/assets"); } + const resourceDir = getResourceDir(); + return path.join(resourceDir, "share-theme/assets"); } export default { diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 3ea4b3c06..0a85362c3 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -130,7 +130,7 @@ export function renderNoteContent(note: SNote) { const customLogoId = note.getRelation("shareLogo")?.value; const logoUrl = customLogoId ? `api/images/${customLogoId}/image.png` : `../${assetUrlFragment}/images/icon-color.svg`; - const iconPacks = getIconPacks().filter(p => !!shaca.notes[p.manifestNoteId]); + const iconPacks = getIconPacks().filter(p => p.builtin || !!shaca.notes[p.manifestNoteId]); return renderNoteContentInternal(note, { subRoot, @@ -141,7 +141,10 @@ export function renderNoteContent(note: SNote) { ancestors, isStatic: false, faviconUrl: note.hasRelation("shareFavicon") ? `api/notes/${note.getRelationValue("shareFavicon")}/download` : `../favicon.ico`, - iconPackCss: iconPacks.map(p => generateCss(p, `/share/api/attachments/${p.fontAttachmentId}/download`)) + iconPackCss: iconPacks.map(p => generateCss(p, p.builtin + ? `/share/assets/fonts/${p.fontAttachmentId}.${MIME_TO_EXTENSION_MAPPINGS[p.fontMime]}` + : `/share/api/attachments/${p.fontAttachmentId}/download` + )) .filter(Boolean) .join("\n\n"), iconPackSupportedPrefixes: iconPacks.map(p => p.manifest.prefix) diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json index 779af643c..5bad83a00 100644 --- a/packages/share-theme/package.json +++ b/packages/share-theme/package.json @@ -24,7 +24,6 @@ ], "license": "Apache-2.0", "dependencies": { - "boxicons": "2.1.4", "fuse.js": "7.1.0", "katex": "0.16.27", "mermaid": "11.12.2" diff --git a/packages/share-theme/src/styles/index.css b/packages/share-theme/src/styles/index.css index 530db1b7b..1a4438b91 100644 --- a/packages/share-theme/src/styles/index.css +++ b/packages/share-theme/src/styles/index.css @@ -1,5 +1,3 @@ -@import "boxicons/css/boxicons.min.css"; - @import "./base.css"; @import "./childlinks.css"; @import "./externallinks.css";