Skip to content

Commit 891e950

Browse files
committed
feat: implement footer and make global configuration
1 parent d11ff59 commit 891e950

File tree

25 files changed

+400
-55
lines changed

25 files changed

+400
-55
lines changed

apps/blog/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"@astrojs/mdx": "^4.2.0",
1313
"@astrojs/react": "^4.2.0",
1414
"@astrojs/rss": "^4.0.0",
15+
"@explainer/config": "workspace:*",
1516
"@explainer/mdx": "workspace:*",
1617
"@explainer/thumbnail": "workspace:*",
1718
"@explainer/ui": "workspace:*",

apps/blog/src/config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { defineConfig } from '@explainer/config'
2+
3+
export const siteConfig = defineConfig({
4+
titleTemplate: '%s — Blog',
5+
description: 'Explainer Blog',
6+
})

apps/blog/src/layouts/base.astro

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
import '../styles/globals.css'
33
import { ClientRouter } from 'astro:transitions'
44
import { BlogNavbar } from '../components/blog-navbar'
5+
import { Footer } from '@explainer/ui'
6+
import { formatTitle } from '@explainer/config'
7+
import { siteConfig } from '../config'
58
import { useTranslations } from '../i18n/utils'
69
710
interface Props {
@@ -13,7 +16,7 @@ interface Props {
1316
localeSwitchUrls?: Record<string, string>
1417
}
1518
16-
const { title, description = 'Explainer Blog', thumbnail, locale = 'en', locales = ['en'], localeSwitchUrls = {} } = Astro.props
19+
const { title, description = siteConfig.description, thumbnail, locale = 'en', locales = ['en'], localeSwitchUrls = {} } = Astro.props
1720
const t = useTranslations(locale)
1821
const thumbnailUrl = thumbnail ?? `${Astro.url.pathname.replace(/\/$/, '')}/thumbnail.png`
1922
@@ -29,17 +32,17 @@ const appUrlOverrides = {
2932
<head>
3033
<meta charset="UTF-8" />
3134
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
32-
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
35+
<link rel="icon" type="image/svg+xml" href={siteConfig.favicon} />
3336
<meta name="description" content={description} />
3437
<meta property="og:title" content={title} />
3538
<meta property="og:description" content={description} />
3639
<meta property="og:image" content={thumbnailUrl} />
37-
<meta property="og:type" content="website" />
38-
<meta name="twitter:card" content="summary_large_image" />
40+
<meta property="og:type" content={siteConfig.ogType} />
41+
<meta name="twitter:card" content={siteConfig.twitterCard} />
3942
<meta name="twitter:title" content={title} />
4043
<meta name="twitter:description" content={description} />
4144
<meta name="twitter:image" content={thumbnailUrl} />
42-
<title>{title} — Blog</title>
45+
<title>{formatTitle(siteConfig, title)}</title>
4346
<ClientRouter />
4447
<script is:inline>
4548
(function () {
@@ -61,10 +64,8 @@ const appUrlOverrides = {
6164
<main class="mx-auto max-w-6xl px-6 py-10">
6265
<slot />
6366
</main>
64-
<footer class="border-t mt-16">
65-
<div class="mx-auto max-w-6xl px-6 py-8 text-sm text-muted-foreground">
66-
{t('footer.text')}
67-
</div>
68-
</footer>
67+
<div class="mx-auto max-w-6xl px-6">
68+
<Footer config={siteConfig} locale={locale} appUrlOverrides={appUrlOverrides} client:load />
69+
</div>
6970
</body>
7071
</html>

apps/docs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"dependencies": {
1212
"@astrojs/mdx": "^4.2.0",
1313
"@astrojs/react": "^4.2.0",
14+
"@explainer/config": "workspace:*",
1415
"@explainer/mdx": "workspace:*",
1516
"@explainer/thumbnail": "workspace:*",
1617
"@explainer/ui": "workspace:*",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { Footer } from '@explainer/ui'

apps/docs/src/components/sidebar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ function SidebarItem({ item, currentPath, depth = 0 }: { item: NavItem; currentP
3232
if (item.type === 'group') {
3333
return (
3434
<li className="mt-6 first:mt-0">
35-
<div className="px-3 pb-1.5 text-xs font-medium uppercase tracking-wider text-muted-foreground">
35+
<div className="px-3 pb-1.5 text-xs font-medium uppercase text-foreground/80">
3636
{item.title}
3737
</div>
3838
<ul>

apps/docs/src/components/toc.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,19 @@ export function TableOfContents({ headings, contributors = [] }: TocProps) {
3636
observer.observe(el)
3737
}
3838

39-
return () => observer.disconnect()
39+
const onScroll = () => {
40+
const atBottom = window.innerHeight + window.scrollY >= document.documentElement.scrollHeight - 50
41+
if (atBottom && elements.length > 0) {
42+
setActiveId(elements[elements.length - 1].id)
43+
}
44+
}
45+
46+
window.addEventListener('scroll', onScroll, { passive: true })
47+
48+
return () => {
49+
observer.disconnect()
50+
window.removeEventListener('scroll', onScroll)
51+
}
4052
}, [filtered.map((h) => h.slug).join(',')])
4153

4254
if (filtered.length === 0) return null

apps/docs/src/config.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { defineConfig } from '@explainer/config'
2+
3+
export const siteConfig = defineConfig({
4+
titleTemplate: '%s — Explainer',
5+
})

apps/docs/src/layouts/base.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ interface Props {
66
description?: string
77
}
88
9-
const { title, description = 'Explainer v2' } = Astro.props
9+
const { title, description } = Astro.props
1010
---
1111

1212
<!doctype html>

apps/docs/src/layouts/docs.astro

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ import { Header } from '../components/header'
55
import { Sidebar } from '../components/sidebar'
66
import { TableOfContents, type TocHeading } from '../components/toc'
77
import { fetchContributors, sortContributors } from '@explainer/ui'
8+
import { formatTitle } from '@explainer/config'
89
import { Pagination } from '../components/pagination'
10+
import { Footer } from '../components/footer'
11+
import { siteConfig } from '../config'
912
import type { NavItem, ProjectInfo, BreadcrumbItem } from '../lib/docs'
1013
1114
interface Props {
@@ -68,17 +71,17 @@ const appUrlOverrides = {
6871
<head>
6972
<meta charset="UTF-8" />
7073
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
71-
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
74+
<link rel="icon" type="image/svg+xml" href={siteConfig.favicon} />
7275
{description && <meta name="description" content={description} />}
7376
<meta property="og:title" content={title} />
7477
{description && <meta property="og:description" content={description} />}
7578
<meta property="og:image" content={thumbnailUrl} />
76-
<meta property="og:type" content="website" />
77-
<meta name="twitter:card" content="summary_large_image" />
79+
<meta property="og:type" content={siteConfig.ogType} />
80+
<meta name="twitter:card" content={siteConfig.twitterCard} />
7881
<meta name="twitter:title" content={title} />
7982
{description && <meta name="twitter:description" content={description} />}
8083
<meta name="twitter:image" content={thumbnailUrl} />
81-
<title>{title} — Explainer</title>
84+
<title>{formatTitle(siteConfig, title)}</title>
8285

8386
<ClientRouter />
8487
<script is:inline>
@@ -144,6 +147,7 @@ const appUrlOverrides = {
144147
<slot />
145148
</article>
146149
<Pagination prev={prev} next={next} client:load />
150+
<Footer config={siteConfig} locale={currentLocale} appUrlOverrides={appUrlOverrides} client:load />
147151
</main>
148152
<div transition:animate="none">
149153
<TableOfContents headings={headings} contributors={contributors} client:load />

0 commit comments

Comments
 (0)