diff --git a/.vitepress/config.ts b/.vitepress/config.ts index e8a9f85d..d47257b4 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -1,4 +1,6 @@ -import type { DefaultTheme } from 'vitepress' +import path from 'node:path' +import fs from 'node:fs' +import type { DefaultTheme, HeadConfig } from 'vitepress' import { defineConfig } from 'vitepress' import { transformerTwoslash } from '@shikijs/vitepress-twoslash' import { @@ -75,6 +77,17 @@ const versionLinks = ((): DefaultTheme.NavItemWithLink[] => { } })() +function inlineScript(file: string): HeadConfig { + return [ + 'script', + {}, + fs.readFileSync( + path.resolve(__dirname, `./inlined-scripts/${file}`), + 'utf-8', + ), + ] +} + export default defineConfig({ title: 'Vite 官方中文文档', description: '下一代前端工具链', @@ -110,6 +123,7 @@ export default defineConfig({ href: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Manrope:wght@600&family=IBM+Plex+Mono:wght@400&display=swap', }, ], + inlineScript('banner.js'), ['link', { rel: 'me', href: 'https://m.webtoo.ls/@vite' }], ['meta', { property: 'og:type', content: 'website' }], ['meta', { property: 'og:title', content: ogTitle }], diff --git a/.vitepress/inlined-scripts/banner.js b/.vitepress/inlined-scripts/banner.js new file mode 100644 index 00000000..dc24e5d0 --- /dev/null +++ b/.vitepress/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.__VITE_BANNER_ID__ = 'viteconf2025' + restore(`vite-docs-banner-${__VITE_BANNER_ID__}`, 'banner-dismissed') +})() diff --git a/.vitepress/theme/components/SponsorBanner.vue b/.vitepress/theme/components/SponsorBanner.vue new file mode 100644 index 00000000..7bf922af --- /dev/null +++ b/.vitepress/theme/components/SponsorBanner.vue @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + ViteConf 2025 + + · First time in-person + · Amsterdam + · Oct 09-10 + + Register + + + + + + + + + + + + + + + diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index 9e212533..40bb95d3 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -11,6 +11,7 @@ import WwAds from './components/WwAds.vue' import ReleaseTag from './components/ReleaseTag.vue' import './custom.css' import YouTubeVideo from './components/YouTubeVideo.vue' +import SponsorBanner from './components/SponsorBanner.vue' import 'virtual:group-icons.css' export default { @@ -18,6 +19,7 @@ export default { Layout() { return h(DefaultTheme.Layout, null, { 'aside-outline-after': () => h(WwAds), + 'layout-top': () => h(SponsorBanner), 'aside-ads-before': () => h(AsideSponsors), }) },
+ ViteConf 2025 + + · First time in-person + · Amsterdam + · Oct 09-10 + + Register + +