-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex.tsx
More file actions
94 lines (76 loc) · 1.99 KB
/
index.tsx
File metadata and controls
94 lines (76 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import { useEffect } from 'react'
import { usePageData } from 'rspress/runtime'
import { useSiteOverrides } from '@alauda/doom/runtime'
const setNavBarSpans = (logoText: string) => {
const navBarLinks = document.querySelectorAll('[class^=navBarTitle] > a')
if (!navBarLinks.length) {
return
}
for (const navBarLink of navBarLinks) {
const navBarSpan =
navBarLink.querySelector('span') ||
navBarLink.appendChild(document.createElement('span'))
navBarSpan.innerText = logoText
}
}
const concatTitle = (title: string, suffix?: string) => {
if (!suffix) {
return title
}
title = title.trim()
suffix = suffix.trim()
if (!suffix.startsWith('-') && !suffix.startsWith('|')) {
return `${title} - ${suffix}`
}
return `${title} ${suffix}`
}
export const SiteOverrides = () => {
const { siteData, page } = usePageData()
const {
pageType,
// Inject by remark-plugin-toc
title: articleTitle,
frontmatter = {},
} = page
const { title, logoText } = useSiteOverrides()
useEffect(() => {
if (!title) {
return
}
siteData.originalTitle ??= siteData.title
siteData.title = title
let newTitle = (frontmatter.title as string) || articleTitle
if (newTitle && pageType === 'doc') {
// append main title as a suffix
newTitle = concatTitle(
newTitle,
(frontmatter.titleSuffix as string) || title,
)
} else if (pageType === 'home') {
newTitle = concatTitle(title, frontmatter.titleSuffix as string)
} else if (pageType === '404') {
newTitle = concatTitle('404', title)
} else {
newTitle = title
}
requestAnimationFrame(() => {
document.title = newTitle
})
}, [
articleTitle,
frontmatter.title,
frontmatter.titleSuffix,
pageType,
siteData,
title,
])
useEffect(() => {
if (!logoText) {
return
}
requestAnimationFrame(() => {
setNavBarSpans(logoText)
})
}, [logoText])
}
export default SiteOverrides