Skip to content

Commit 3b91e0f

Browse files
committed
feat: rehypeKunH1ToH2
1 parent 9de422f commit 3b91e0f

File tree

5 files changed

+36
-41
lines changed

5 files changed

+36
-41
lines changed

app/api/utils/markdownToHtml.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,20 @@ import remarkRehype from 'remark-rehype'
77
import rehypePrism from 'rehype-prism-plus'
88
import { unified } from 'unified'
99

10+
import { visit } from 'unist-util-visit'
11+
import type { Plugin } from 'unified'
12+
// import type { Element } from 'hast'
13+
14+
const rehypeKunH1ToH2: Plugin<[], any> = () => {
15+
return (tree) => {
16+
visit(tree, 'element', (node: any) => {
17+
if (node.tagName === 'h1') {
18+
node.tagName = 'h2'
19+
}
20+
})
21+
}
22+
}
23+
1024
export const markdownToHtml = async (markdown: string) => {
1125
const htmlVFile = await unified()
1226
.use(remarkParse)
@@ -15,6 +29,8 @@ export const markdownToHtml = async (markdown: string) => {
1529
.use(remarkFrontmatter)
1630
.use(remarkGfm)
1731
.use(rehypePrism, { ignoreMissing: true })
32+
.use(rehypeKunH1ToH2)
33+
// @ts-expect-error kun love ren 1314~
1834
.use(rehypeStringify)
1935
.process(markdown)
2036

components/character/detail/Container.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import { Chip, Image, Link } from '@heroui/react'
44
import { ROLE_LABELS } from '~/constants/character'
55
import { getPreferredLanguageText } from '~/utils/getPreferredLanguageText'
6-
import type { PatchCharacterDetail } from '~/types/api/character'
76
import { cn } from '~/utils/cn'
7+
import type { PatchCharacterDetail } from '~/types/api/character'
88

99
interface InfoboxItem {
1010
key: string

components/patch/introduction/section/Person.tsx

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
'use client'
22

3-
import { Image } from '@heroui/react'
4-
import NextLink from 'next/link'
53
import { ROLE_ORDER_PERSON, roleLabel } from '~/constants/character'
4+
import { PersonCard } from '~/components/person/Card'
65
import type { PatchDetail } from '~/types/api/patch'
7-
import { getPreferredLanguageText } from '~/utils/getPreferredLanguageText'
86

97
export const PersonSection = ({ detail }: { detail: PatchDetail }) => {
108
if (!detail.person.length) return null
@@ -42,34 +40,7 @@ export const PersonSection = ({ detail }: { detail: PatchDetail }) => {
4240

4341
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-3">
4442
{(buckets.get(role) || []).map((p) => (
45-
<div key={`${role}-${p.id}`} className="flex gap-3">
46-
<div className="size-12 sm:size-16 rounded-xl bg-default-100 overflow-hidden flex items-center justify-center">
47-
<Image
48-
src={p.image || '/person.avif'}
49-
alt={getPreferredLanguageText(p.name)}
50-
className="w-full h-full object-cover"
51-
/>
52-
</div>
53-
54-
<div>
55-
<h3 className="font-semibold truncate">
56-
<NextLink
57-
href={`/person/${p.id}`}
58-
className="hover:underline"
59-
>
60-
{getPreferredLanguageText(p.name)}
61-
</NextLink>
62-
</h3>
63-
64-
<div className="flex flex-wrap gap-2">
65-
{p.roles.slice(0, 3).map((r) => (
66-
<span className="text-sm text-default-500" key={r}>
67-
{roleLabel(r)}
68-
</span>
69-
))}
70-
</div>
71-
</div>
72-
</div>
43+
<PersonCard key={p.id} person={p} />
7344
))}
7445
</div>
7546
</div>

components/person/detail/Container.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import { Chip, Image, Link } from '@heroui/react'
44
import { getPreferredLanguageText } from '~/utils/getPreferredLanguageText'
5+
import { ROLE_LABELS } from '~/constants/character'
56
import type { PatchPersonDetail } from '~/types/api/person'
67

78
export const PersonDetailContainer = ({
@@ -17,18 +18,20 @@ export const PersonDetailContainer = ({
1718
<h1 className="text-2xl font-bold mb-4">{displayName}</h1>
1819
<div className="grid grid-cols-1 md:grid-cols-6 gap-6">
1920
<aside className="md:col-span-1 space-y-4">
20-
<div className="shrink-0 size-48 rounded-xl bg-default-100 overflow-hidden flex items-center justify-center">
21-
<Image
22-
src={person.image || '/person.avif'}
23-
alt={getPreferredLanguageText(person.name)}
24-
className="w-full h-full object-cover"
25-
/>
26-
</div>
21+
{person.image && (
22+
<div className="shrink-0 size-48 rounded-xl bg-default-100 overflow-hidden flex items-center justify-center">
23+
<Image
24+
src={person.image}
25+
alt={getPreferredLanguageText(person.name)}
26+
className="w-full h-full object-cover"
27+
/>
28+
</div>
29+
)}
2730

2831
<div className="flex flex-wrap gap-2">
2932
{person.roles.map((r) => (
3033
<Chip key={r} size="sm" variant="flat">
31-
{r}
34+
{ROLE_LABELS[r]}
3235
</Chip>
3336
))}
3437
</div>

styles/prose.css

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
.kun-prose {
2-
@apply text-default-800 leading-7 whitespace-pre;
2+
@apply text-default-800 leading-7 whitespace-pre-line;
3+
}
4+
5+
.kun-prose p {
6+
@apply py-1;
7+
overflow-wrap: break-word;
38
}
49

510
/* Links */

0 commit comments

Comments
 (0)