From 6518ff07c7b25c03714964b120edc13797a1f6b0 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Sat, 9 Aug 2025 17:51:04 +0900 Subject: [PATCH 1/2] feat: reduce layout shift caused by banner Co-authored-by: Alexander --- .vitepress/config/inlined-scripts/banner.js | 11 +++++++++++ .vitepress/config/shared.ts | 11 +++++++++++ .vitepress/theme/components/Banner.vue | 1 + 3 files changed, 23 insertions(+) create mode 100644 .vitepress/config/inlined-scripts/banner.js diff --git a/.vitepress/config/inlined-scripts/banner.js b/.vitepress/config/inlined-scripts/banner.js new file mode 100644 index 0000000000..062a853786 --- /dev/null +++ b/.vitepress/config/inlined-scripts/banner.js @@ -0,0 +1,11 @@ +(() => { + const restore = (key, cls, def = false) => { + const saved = localStorage.getItem(key); + if (saved ? saved !== "false" : def) { + document.documentElement.classList.add(cls); + } + }; + + window.__OXC_BANNER_ID__ = "/blog/2025-06-10-oxlint-stable"; + restore(`oxc-banner-dismissed-${__OXC_BANNER_ID__}`, "banner-dismissed"); +})(); diff --git a/.vitepress/config/shared.ts b/.vitepress/config/shared.ts index 933e2595b9..7be55c5081 100644 --- a/.vitepress/config/shared.ts +++ b/.vitepress/config/shared.ts @@ -1,8 +1,17 @@ +import { readFileSync } from "node:fs"; import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; import { defineConfig, HeadConfig } from "vitepress"; import { groupIconMdPlugin, groupIconVitePlugin } from "vitepress-plugin-group-icons"; +function inlineScript(file: string): HeadConfig { + return [ + 'script', + {}, + readFileSync(resolve(__dirname, `./inlined-scripts/${file}`), 'utf-8'), + ] +} + const head: HeadConfig[] = [ [ "link", @@ -31,6 +40,8 @@ const head: HeadConfig[] = [ content: "https://cdn.jsdelivr.net/gh/oxc-project/oxc-assets/preview-universal.png", }, ], + // banner + inlineScript('banner.js'), // Google Analytics ["script", { async: "", src: "https://www.googletagmanager.com/gtag/js?id=G-X7WQ091KL7" }], [ diff --git a/.vitepress/theme/components/Banner.vue b/.vitepress/theme/components/Banner.vue index 4a33bb4bbd..803d318aeb 100644 --- a/.vitepress/theme/components/Banner.vue +++ b/.vitepress/theme/components/Banner.vue @@ -16,6 +16,7 @@ const hide = () => { document.documentElement.classList.add("banner-dismissed"); }; +// Sync with inlined-scripts/banner.js const slug = "/blog/2025-06-10-oxlint-stable"; const bannerDismissed = useLocalStorage(`oxc-banner-dismissed-${slug}`, false); From 680be992803783e27bed16a377fea7ab5dae285e Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Sat, 9 Aug 2025 17:56:00 +0900 Subject: [PATCH 2/2] chore: fix lint --- .vitepress/config/shared.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.vitepress/config/shared.ts b/.vitepress/config/shared.ts index 7be55c5081..a4bf620fb0 100644 --- a/.vitepress/config/shared.ts +++ b/.vitepress/config/shared.ts @@ -6,10 +6,10 @@ import { groupIconMdPlugin, groupIconVitePlugin } from "vitepress-plugin-group-i function inlineScript(file: string): HeadConfig { return [ - 'script', + "script", {}, - readFileSync(resolve(__dirname, `./inlined-scripts/${file}`), 'utf-8'), - ] + readFileSync(resolve(__dirname, `./inlined-scripts/${file}`), "utf-8"), + ]; } const head: HeadConfig[] = [ @@ -41,7 +41,7 @@ const head: HeadConfig[] = [ }, ], // banner - inlineScript('banner.js'), + inlineScript("banner.js"), // Google Analytics ["script", { async: "", src: "https://www.googletagmanager.com/gtag/js?id=G-X7WQ091KL7" }], [