mirror of
https://github.com/reonokiy/blog.nokiy.net.git
synced 2025-06-16 11:41:17 +02:00
74 lines
2 KiB
Text
74 lines
2 KiB
Text
---
|
|
import Comments from '@/components/Comments/index.astro'
|
|
import Layout from '@/layouts/Layout.astro'
|
|
import { checkSlugDuplication } from '@/utils/content'
|
|
import { generatePostPaths } from '@/utils/i18n/route'
|
|
import { getCollection } from 'astro:content'
|
|
|
|
export async function getStaticPaths() {
|
|
const posts = await getCollection('posts')
|
|
|
|
const duplicates = await checkSlugDuplication(posts)
|
|
if (duplicates.length > 0) {
|
|
throw new Error(`Slug conflicts found:\n${duplicates.join('\n')}`)
|
|
}
|
|
|
|
return generatePostPaths(posts)
|
|
}
|
|
|
|
const { post } = Astro.props
|
|
const { Content, remarkPluginFrontmatter } = await post.render()
|
|
---
|
|
|
|
<Layout
|
|
postTitle={post.data.title}
|
|
postDescription={post.data.description}
|
|
postImage={post.data.image}
|
|
>
|
|
<article class="heti mb-12.6">
|
|
<h1 class="post-title">
|
|
<span
|
|
transition:name={`post-${post.data.slug || post.slug}`}
|
|
data-disable-transition-on-theme
|
|
>
|
|
{post.data.title}
|
|
</span>
|
|
</h1>
|
|
|
|
<div
|
|
class="mb-17 block c-primary font-time"
|
|
transition:name={`time-${post.data.slug || post.slug}`}
|
|
data-disable-transition-on-theme
|
|
>
|
|
<time>
|
|
{post.data.published.toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' }).replace(/\//g, '-')}
|
|
</time>
|
|
<span class="ml-1.5">
|
|
{remarkPluginFrontmatter.minutes} min
|
|
</span>
|
|
{post.data.updated && (
|
|
<span class="ml-1.5">
|
|
updated {post.data.updated.toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' }).replace(/\//g, '-')}
|
|
</span>
|
|
)}
|
|
</div>
|
|
<Content />
|
|
</article>
|
|
|
|
<!-- Tags -->
|
|
{post.data.tags && post.data.tags.length > 0 && (
|
|
<div class="uno-decorative-line"></div>
|
|
<div class="uno-tags-wrapper">
|
|
{post.data.tags.map(tag => (
|
|
<a
|
|
href={`/tags/${tag}/`}
|
|
class="uno-tags-style"
|
|
>
|
|
{tag}
|
|
</a>
|
|
))}
|
|
</div>
|
|
)}
|
|
|
|
<Comments />
|
|
</Layout>
|