Blog posts working now
This commit is contained in:
parent
eafc8b7082
commit
b3153ae06a
@ -1,17 +0,0 @@
|
||||
<script lang="ts">
|
||||
import ArticleFooter from '../../components/blog/ArticleFooter.svelte'
|
||||
import { contentClass } from './blog.css'
|
||||
|
||||
export let post
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{post.title}</title>
|
||||
</svelte:head>
|
||||
|
||||
<h1>{post.title}</h1>
|
||||
|
||||
<div class="content {contentClass}">
|
||||
{@html post.body}
|
||||
</div>
|
||||
<ArticleFooter {post} />
|
@ -1,44 +0,0 @@
|
||||
import { readFile } from 'fs'
|
||||
import { promisify } from 'util'
|
||||
import fm from 'front-matter'
|
||||
import { parseField } from '../../markdown/parse-markdown'
|
||||
import type { PostAttributes } from './content'
|
||||
import type { Request, Response } from '@sveltejs/kit'
|
||||
|
||||
export interface SinglePost {
|
||||
body: string
|
||||
}
|
||||
|
||||
export async function get({ params: { slug } }: Request): Promise<Response> {
|
||||
// the `slug` parameter is available because
|
||||
// this file is called [slug].json.js
|
||||
|
||||
let postSource: string
|
||||
try {
|
||||
postSource = await promisify(readFile)(`_posts/blog/${slug}.md`, 'utf-8')
|
||||
} catch (e) {
|
||||
if (e.code === 'ENOENT') {
|
||||
return {
|
||||
status: 404,
|
||||
body: 'Post not found \n' + e.toString(),
|
||||
headers: {},
|
||||
}
|
||||
}
|
||||
return {
|
||||
status: 500,
|
||||
body: 'Error loading post source file. \n' + e.toString(),
|
||||
headers: {},
|
||||
}
|
||||
}
|
||||
|
||||
const parsedPost = fm<PostAttributes>(postSource)
|
||||
|
||||
const post = parseField<SinglePost>('body')({
|
||||
...parsedPost.attributes,
|
||||
body: parsedPost.body,
|
||||
})
|
||||
|
||||
return {
|
||||
body: { post },
|
||||
}
|
||||
}
|
33
src/routes/blog/[slug=blogPage]/+page.server.ts
Normal file
33
src/routes/blog/[slug=blogPage]/+page.server.ts
Normal file
@ -0,0 +1,33 @@
|
||||
import { readFile } from 'fs'
|
||||
import { promisify } from 'util'
|
||||
import fm from 'front-matter'
|
||||
import { parseField } from '../../../markdown/parse-markdown'
|
||||
import { error, json } from '@sveltejs/kit'
|
||||
import type { PostAttributes } from '../content'
|
||||
import type { PageServerLoad } from './$types'
|
||||
|
||||
export interface SinglePost {
|
||||
body: string
|
||||
}
|
||||
|
||||
export const load = (async ({ params: { slug } }) => {
|
||||
let postSource: string
|
||||
try {
|
||||
postSource = await promisify(readFile)(`_posts/blog/${slug}.md`, 'utf-8')
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
} catch (e: any) {
|
||||
if (e.code === 'ENOENT') {
|
||||
throw error(404, 'Post not found \n' + e.toString())
|
||||
}
|
||||
throw e
|
||||
}
|
||||
|
||||
const parsedPost = fm<PostAttributes>(postSource)
|
||||
|
||||
const post = parseField<SinglePost>('body')({
|
||||
...parsedPost.attributes,
|
||||
body: parsedPost.body,
|
||||
})
|
||||
|
||||
return post
|
||||
}) satisfies PageServerLoad
|
18
src/routes/blog/[slug=blogPage]/+page.svelte
Normal file
18
src/routes/blog/[slug=blogPage]/+page.svelte
Normal file
@ -0,0 +1,18 @@
|
||||
<script lang="ts">
|
||||
import ArticleFooter from '../../../components/blog/ArticleFooter.svelte'
|
||||
import type { PageData } from './$types'
|
||||
import { contentClass } from './blog.css'
|
||||
|
||||
export let data: PageData
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{data.title}</title>
|
||||
</svelte:head>
|
||||
|
||||
<h1>{data.title}</h1>
|
||||
|
||||
<div class="content {contentClass}">
|
||||
{@html data.body}
|
||||
</div>
|
||||
<ArticleFooter post={data} />
|
Loading…
Reference in New Issue
Block a user