From 7f2a66f262e5b378909c15f5a2c51befeffbf82a Mon Sep 17 00:00:00 2001 From: Gianni Ceccarelli Date: Thu, 14 Dec 2023 13:58:07 +0000 Subject: allow a theme to specify a font - #225 --- packages/backend/src/server/web/boot.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'packages/backend/src/server') diff --git a/packages/backend/src/server/web/boot.js b/packages/backend/src/server/web/boot.js index e1864ae124..e1aaee1d49 100644 --- a/packages/backend/src/server/web/boot.js +++ b/packages/backend/src/server/web/boot.js @@ -106,8 +106,29 @@ //#region Theme const theme = localStorage.getItem('theme'); + const themeFontFaceName = 'sharkey-theme-font-face'; if (theme) { - for (const [k, v] of Object.entries(JSON.parse(theme))) { + let existingFontFace; + document.fonts.forEach((v,k,s)=>{if (v.family === themeFontFaceName) existingFontFace=v;}); + if (existingFontFace) document.fonts.delete(existingFontFace); + + const themeProps = JSON.parse(theme); + const fontFaceSrc = themeProps.fontFaceSrc; + const fontFaceOpts = themeProps.fontFaceOpts || {}; + if (fontFaceSrc) { + const fontFace = new FontFace( + themeFontFaceName, + fontFaceSrc, fontFaceOpts || {}, + ); + document.fonts.add(fontFace); + fontFace.load().catch( + (failure) => { + console.log(failure) + } + ); + } + for (const [k, v] of Object.entries(themeProps)) { + if (k.startsWith('font')) continue; document.documentElement.style.setProperty(`--${k}`, v.toString()); // HTMLの theme-color 適用 -- cgit v1.2.3-freya