From 714c80bf3f29b92dc249ce64be9a04bcaba48997 Mon Sep 17 00:00:00 2001 From: Johann150 Date: Wed, 13 Jul 2022 14:06:24 +0200 Subject: [PATCH] enhance: read theme color nodeinfo (#8977) * provide theme color in nodeinfo metadata * read theme color from nodeinfo Prefer to read the theme color from the nodeinfo since it is more performant than performing selector search on a DOM. --- packages/backend/src/server/nodeinfo.ts | 1 + packages/backend/src/services/fetch-instance-metadata.ts | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/server/nodeinfo.ts b/packages/backend/src/server/nodeinfo.ts index 13a362a75..f139d203d 100644 --- a/packages/backend/src/server/nodeinfo.ts +++ b/packages/backend/src/server/nodeinfo.ts @@ -78,6 +78,7 @@ const nodeinfo2 = async () => { enableEmail: meta.enableEmail, enableServiceWorker: meta.enableServiceWorker, proxyAccountName: proxyAccount ? proxyAccount.username : null, + themeColor: meta.themeColor || '#86b300', }, }; }; diff --git a/packages/backend/src/services/fetch-instance-metadata.ts b/packages/backend/src/services/fetch-instance-metadata.ts index 029c388dc..ee1245132 100644 --- a/packages/backend/src/services/fetch-instance-metadata.ts +++ b/packages/backend/src/services/fetch-instance-metadata.ts @@ -34,7 +34,7 @@ export async function fetchInstanceMetadata(instance: Instance, force = false): const [favicon, icon, themeColor, name, description] = await Promise.all([ fetchFaviconUrl(instance, dom).catch(() => null), fetchIconUrl(instance, dom, manifest).catch(() => null), - getThemeColor(dom, manifest).catch(() => null), + getThemeColor(info, dom, manifest).catch(() => null), getSiteName(info, dom, manifest).catch(() => null), getDescription(info, dom, manifest).catch(() => null), ]); @@ -208,8 +208,8 @@ async function fetchIconUrl(instance: Instance, doc: DOMWindow['document'] | nul return null; } -async function getThemeColor(doc: DOMWindow['document'] | null, manifest: Record | null): Promise { - const themeColor = doc?.querySelector('meta[name="theme-color"]')?.getAttribute('content') || manifest?.theme_color; +async function getThemeColor(info: NodeInfo | null, doc: DOMWindow['document'] | null, manifest: Record | null): Promise { + const themeColor = info?.metadata?.themeColor || doc?.querySelector('meta[name="theme-color"]')?.getAttribute('content') || manifest?.theme_color; if (themeColor) { const color = new tinycolor(themeColor);