diff --git a/src/app.d.ts b/src/app.d.ts index f9281b5..98a2aa9 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -23,6 +23,7 @@ declare global { title: string; thumbnail?: string; date?: string; + dateChanged?: string; description: string; publisher: string; published?: boolean; diff --git a/src/lib/util/Blogs.ts b/src/lib/util/Blogs.ts index 2e00ced..ad2d430 100644 --- a/src/lib/util/Blogs.ts +++ b/src/lib/util/Blogs.ts @@ -1,5 +1,7 @@ import path from 'path'; +export const THUMBNAIL_DEFAULT = "https://teasanctuary.ru/common/background-day.webp"; + export async function fetchPostsSorted() { const allPosts = await fetchPosts(); @@ -8,7 +10,7 @@ export async function fetchPostsSorted() { .filter((a) => !!a.date) .sort((a, b) => { return new Date(b.date!).valueOf() - new Date(a.date!).valueOf(); - }); + }); return sortedPosts; }; @@ -31,3 +33,11 @@ export async function fetchPosts() { return allPosts; }; + +export function resolveBlogPath(slug?: string, src?: string) { + if (!src) return null; + + return src.startsWith('http://') || src.startsWith('https://') + ? src + : `/blog/${slug}/${src}`; +} \ No newline at end of file diff --git a/src/routes/blog/[slug]/+page.svelte b/src/routes/blog/[slug]/+page.svelte new file mode 100644 index 0000000..b531f07 --- /dev/null +++ b/src/routes/blog/[slug]/+page.svelte @@ -0,0 +1,95 @@ + + + + + + + + +
+
+
+

{data.blogPost.title}

+ {#if data.blogPost.description} +

{data.blogPost.description}

+ {/if} +
+
+
+
+
+ +

+ {data.blogPost.date + ? new Date(data.blogPost.date).toLocaleString(undefined, { + month: 'short', + day: 'numeric', + year: 'numeric' + }) + : 'Не опубликован!'} +

+
+ {#if data.blogPost.dateChanged} +
+ +

+ {new Date(data.blogPost.dateChanged).toLocaleString(undefined, { + month: 'short', + day: 'numeric', + year: 'numeric' + })} +

+
+ {/if} +
+ +{#if page.data.blogPost.projects?.length > 0} + +

В данной заметке упоминаются наши проекты:

+ +
+{/if} + +
+ +
+ + diff --git a/src/routes/blog/[slug]/+page.ts b/src/routes/blog/[slug]/+page.ts new file mode 100644 index 0000000..d73e58d --- /dev/null +++ b/src/routes/blog/[slug]/+page.ts @@ -0,0 +1,17 @@ +import { resolveBlogPath, THUMBNAIL_DEFAULT } from "$src/lib/util/Blogs.js"; + +export async function load({ params }) { + const post = await import(`$src/blogs/${params.slug}.md`); + const blogPost: App.BlogPost = post.metadata; + const thumbnail = resolveBlogPath(params.slug, blogPost.thumbnail ?? THUMBNAIL_DEFAULT); + + return { + title: `${blogPost.title} — Блог`, + description: blogPost.description, + thumbnail: thumbnail, + content: post.default, + blogPost: { + ...blogPost + } + }; +};