From d9f04f1a88657ff7e46ea38f96a91535be8068b9 Mon Sep 17 00:00:00 2001 From: grassblock Date: Sun, 20 Jul 2025 13:44:20 +0800 Subject: [PATCH] refactor: split parts into standalone components --- src/components/ArticleList.astro | 19 +++++++++++ src/components/Navbar.astro | 9 +++++ src/components/Statistics.astro | 35 ++++++++++++++++++++ src/layouts/Layout.astro | 42 +++--------------------- src/pages/blog.astro | 18 ++-------- src/pages/categories/[...category].astro | 8 ++--- src/pages/tags/[...tag].astro | 8 ++--- 7 files changed, 73 insertions(+), 66 deletions(-) create mode 100644 src/components/ArticleList.astro create mode 100644 src/components/Navbar.astro create mode 100644 src/components/Statistics.astro diff --git a/src/components/ArticleList.astro b/src/components/ArticleList.astro new file mode 100644 index 0000000..f67a2ae --- /dev/null +++ b/src/components/ArticleList.astro @@ -0,0 +1,19 @@ +--- +const { posts, displayDate = false, placeholder = false } = Astro.props; +--- +
+ {posts.map((post) => ( +

+ {displayDate && {new Date(post.data.pubDate).toISOString().split('T')[0]}} + {post.data.title} +

+ ))} + + {placeholder && posts.length === 0 && ( + <> +

+ No posts here yet +

+ + )} +
\ No newline at end of file diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro new file mode 100644 index 0000000..7bcb4bc --- /dev/null +++ b/src/components/Navbar.astro @@ -0,0 +1,9 @@ +--- +import {siteConfig} from "../config"; +const navBarItems = siteConfig.navBarItems +--- + \ No newline at end of file diff --git a/src/components/Statistics.astro b/src/components/Statistics.astro new file mode 100644 index 0000000..bc9444e --- /dev/null +++ b/src/components/Statistics.astro @@ -0,0 +1,35 @@ +--- +import {siteConfig} from "../config"; +const noscript = siteConfig.noClientJavaScript +const statisticsType = siteConfig.siteAnalytics.type +const umamiConfig = siteConfig.siteAnalytics.umami +const goatCounterConfig = siteConfig.siteAnalytics.goatcounter +--- +{statisticsType === 'umami' && ( + +)} + +{statisticsEnabled && statisticsType === 'goatcounter' && ( + <> + {noscript ? ( + Analytics + ) : ( + <> + + + + )} + +)} \ No newline at end of file diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index d7ccb74..055801a 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -8,6 +8,8 @@ import Meta from "../components/helper/head/Meta.astro"; import { siteConfig } from "../config"; import Logo from '../assets/mercury.svg' +import Statistics from "../components/Statistics.astro"; +import Navbar from "../components/Navbar.astro"; interface Props { title: string; @@ -20,9 +22,6 @@ interface Props { const noscript = siteConfig.noClientJavaScript const statisticsEnabled = siteConfig.siteAnalytics.enabled -const statisticsType = siteConfig.siteAnalytics.type -const umamiConfig = siteConfig.siteAnalytics.umami -const goatCounterConfig = siteConfig.siteAnalytics.goatcounter const defaultTitle = siteConfig.title const formattedRootPath = defaultTitle.toLowerCase().replace(/\s+/g, '-'); @@ -31,7 +30,6 @@ const path = formattedRootPath + (relativePath === '/' ? '' : relativePath) const pageTitle = (relativePath === '/' ? defaultTitle : `${Astro.props.title} - ${defaultTitle}`) -const navBarItems = siteConfig.navBarItems const customFooter = siteConfig.customFooter const nekoType = siteConfig.neko?.type @@ -54,13 +52,7 @@ const { title = pageTitle, author = siteConfig.defaultAuthor.name,description =
{path}
- - - +
@@ -80,33 +72,7 @@ const { title = pageTitle, author = siteConfig.defaultAuthor.name,description =

Powered by mercury

- {statisticsEnabled && statisticsType === 'umami' && ( - - )} - {statisticsEnabled && statisticsType === 'goatcounter' && ( - <> - {noscript ? ( - Analytics - ) : ( - <> - - - - )} - - )} + {statisticsEnabled && } { (siteConfig.neko.enabled && !noscript) && <>