From c9dd7145f0572e3c4ab920afa4931f85dc1290d3 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 12 Feb 2023 08:18:29 +0000 Subject: [PATCH] BlogEngine: Rewrite stapline for the blog --- src/routes/blog/+page.svelte | 22 ++++++++----- src/routes/blog/+page.ts | 60 ++++++++++++++++++++---------------- 2 files changed, 47 insertions(+), 35 deletions(-) diff --git a/src/routes/blog/+page.svelte b/src/routes/blog/+page.svelte index 1020e7f..5d34b03 100644 --- a/src/routes/blog/+page.svelte +++ b/src/routes/blog/+page.svelte @@ -1,5 +1,5 @@ @@ -46,18 +47,23 @@

Blog

- I write about software and I how I should have built it, books I've read, - and sometimes other things. -

-

- It's been {daysSinceLastPublish} {daysSinceLastPublish === 1 ? "day" : "days"} since I last published something. - On average I publish something every {averageDaysBetweenPosts} days ({numberOfPosts} +

+

+ I write about fun software I've built alone, Real Softwareâ„¢ I built in + teams, books I read, things I am sewing, and other things. +

+

+ I have written {numberOfBlogPostsThisYear} + {numberOfBlogPostsThisYear === 1 ? "piece" : "pieces"} so far this year. On + average I publish something every {averageDaysBetweenPosts} days ({numberOfPosts} posts in {daysSinceFirstPost} days).

diff --git a/src/routes/blog/+page.ts b/src/routes/blog/+page.ts index 21c5832..a7b5d18 100644 --- a/src/routes/blog/+page.ts +++ b/src/routes/blog/+page.ts @@ -1,36 +1,42 @@ -import type { LoadEvent, Load, Page } from '@sveltejs/kit'; -import { differenceInCalendarDays, intlFormat } from 'date-fns'; +import type { LoadEvent } from '@sveltejs/kit'; +import { differenceInCalendarDays, getYear } from 'date-fns'; export const prerender = true; -type BlogPost = { - filename: string; - preview: string[]; - title: string; - slug: string; - date: Date; - book_review?: boolean; -}; +interface BlogPostListItem { + title: string; + author: string; + book_review: boolean; + content: string; + date: string; + preview: string; + slug: string; +} export async function load({ fetch }: LoadEvent) { - const posts = await fetch('/api/blog.json') - .then((res) => res.json()) - .then((res) => res.posts); + const posts: BlogPostListItem[] = await fetch('/api/blog.json') + .then((res) => res.json()) + .then((res) => res.posts); - const mostRecentPost = posts[0]; + const currentYear = getYear(new Date()); + const mostRecentPost = posts[0]; - const daysSinceLastPublish = differenceInCalendarDays(new Date(), new Date(mostRecentPost.date)); + const daysSinceLastPublish = differenceInCalendarDays(new Date(), new Date(mostRecentPost.date)); - const numberOfPosts = posts.length; - const firstPost = posts[numberOfPosts - 1]; - const daysSinceFirstPost = differenceInCalendarDays(new Date(), new Date(firstPost.date)); - const averageDaysBetweenPosts = Number(daysSinceFirstPost / numberOfPosts).toFixed(2); + const numberOfPosts = posts.length; + const firstPost = posts[numberOfPosts - 1]; + const daysSinceFirstPost = differenceInCalendarDays(new Date(), new Date(firstPost.date)); + const averageDaysBetweenPosts = Number(daysSinceFirstPost / numberOfPosts).toFixed(2); + const numberOfBlogPostsThisYear: number = posts.filter( + (post) => getYear(new Date(post.date)) === currentYear + ).length; - return { - posts, - firstPost, - averageDaysBetweenPosts, - daysSinceFirstPost, - daysSinceLastPublish, - numberOfPosts - }; + return { + posts, + firstPost, + averageDaysBetweenPosts, + daysSinceFirstPost, + daysSinceLastPublish, + numberOfPosts, + numberOfBlogPostsThisYear, + }; }