diff options
| author | Dawid Rycerz <dawid@rycerz.xyz> | 2026-01-13 15:31:19 +0100 |
|---|---|---|
| committer | Dawid Rycerz <dawid@rycerz.xyz> | 2026-01-13 15:39:07 +0100 |
| commit | 52411f6cb9efc10dd683096b34e5c279a11f7e0a (patch) | |
| tree | fd5e71902fbebe2e3f014c7ebb5f153fc8c7d1e7 /src/pages/micro | |
| parent | 26ffc44ee72522891b4fdacac15134dfcf9c4859 (diff) | |
Rework how tags are working and make them native
Diffstat (limited to 'src/pages/micro')
| -rw-r--r-- | src/pages/micro/[...page].astro | 10 | ||||
| -rw-r--r-- | src/pages/micro/rss.xml.ts | 6 | ||||
| -rw-r--r-- | src/pages/micro/tags/[tag]/[...page].astro | 71 | ||||
| -rw-r--r-- | src/pages/micro/tags/index.astro | 36 |
4 files changed, 10 insertions, 113 deletions
diff --git a/src/pages/micro/[...page].astro b/src/pages/micro/[...page].astro index 8e7e814..d11d9ce 100644 --- a/src/pages/micro/[...page].astro +++ b/src/pages/micro/[...page].astro @@ -9,8 +9,10 @@ import PageLayout from "@/layouts/Base.astro"; export const getStaticPaths = (async ({ paginate }) => { const MAX_MICRO_PER_PAGE = 10; - // Get only Pleroma posts - const allMicro = await getCollection("micro").catch(() => []); // Fallback to empty array if micro collection fails + // Get only Pleroma posts tagged with "micro" + const allMicro = await getCollection("micro", ({ data }) => data.tags?.includes("micro")).catch( + () => [], + ); // Fallback to empty array if micro collection fails // Sort all micro posts const allMicroPosts = allMicro.sort( @@ -52,11 +54,11 @@ const paginationProps = { <section> <h1 class="title mb-6 flex items-center gap-3"> Micro - <a class="text-accent" href="/micro/tags/" title="Browse micro tags"> + <a class="text-accent" href="/tags/" title="Browse all tags"> <span class="sr-only">Browse tags</span> <Icon aria-hidden="true" class="h-6 w-6" focusable="false" name="mdi:tag-multiple" /> </a> - <a class="text-accent" href="/micro/rss.xml" target="_blank"> + <a class="text-accent" href="/tags/micro/rss.xml" target="_blank"> <span class="sr-only">RSS feed</span> <Icon aria-hidden="true" class="h-6 w-6" focusable="false" name="mdi:rss" /> </a> diff --git a/src/pages/micro/rss.xml.ts b/src/pages/micro/rss.xml.ts index 37d7d39..9356341 100644 --- a/src/pages/micro/rss.xml.ts +++ b/src/pages/micro/rss.xml.ts @@ -4,8 +4,10 @@ import type { APIContext } from "astro"; import { siteConfig } from "@/site.config"; export const GET = async (context: APIContext) => { - // Get only Pleroma posts - const allMicro = await getCollection("micro").catch(() => []); // Fallback to empty array if micro collection fails + // Get only Pleroma posts tagged with "micro" + const allMicro = await getCollection("micro", ({ data }) => data.tags?.includes("micro")).catch( + () => [], + ); // Fallback to empty array if micro collection fails // Sort all micro posts const allMicroPosts = allMicro.sort( diff --git a/src/pages/micro/tags/[tag]/[...page].astro b/src/pages/micro/tags/[tag]/[...page].astro deleted file mode 100644 index 3f78663..0000000 --- a/src/pages/micro/tags/[tag]/[...page].astro +++ /dev/null @@ -1,71 +0,0 @@ ---- -import { getCollection } from "astro:content"; -import type { GetStaticPaths, InferGetStaticPropsType } from "astro"; -import { Icon } from "astro-icon/components"; -import Note from "@/components/note/Note.astro"; -import Pagination from "@/components/Paginator.astro"; -import PageLayout from "@/layouts/Base.astro"; -import { getUniqueMicroTags, sortMicroEntries } from "@/utils/micro"; - -export const getStaticPaths = (async ({ paginate }) => { - const allMicroPosts = await getCollection("micro"); - const sortedPosts = sortMicroEntries(allMicroPosts); - const uniqueTags = getUniqueMicroTags(sortedPosts); - - return uniqueTags.flatMap((tag) => { - const postsWithTag = sortedPosts.filter((post) => post.data.tags?.includes(tag)); - return paginate(postsWithTag, { - pageSize: 10, - params: { tag }, - }); - }); -}) satisfies GetStaticPaths; - -type Props = InferGetStaticPropsType<typeof getStaticPaths>; - -const { page } = Astro.props as Props; -const { tag } = Astro.params; - -const meta = { - description: `View all micro posts with the tag - ${tag}`, - title: `Micro posts about ${tag}`, -}; - -const paginationProps = { - ...(page.url.prev && { - prevUrl: { - text: "← Previous Page", - url: page.url.prev, - }, - }), - ...(page.url.next && { - nextUrl: { - text: "Next Page →", - url: page.url.next, - }, - }), -}; ---- - -<PageLayout meta={meta}> - <nav class="mb-8" aria-label="Breadcrumbs"> - <ul class="flex items-center"> - <li class="flex items-center"> - <a class="text-accent" href="/micro/tags/">Micro Tags</a> - <Icon aria-hidden="true" name="mdi:chevron-right" class="mx-1.5" /> - </li> - <li aria-current="page" class=""><span aria-hidden="true">#</span>{tag}</li> - </ul> - </nav> - <h1 class="title capitalize">Micro posts about {tag}</h1> - <ul class="mt-6 space-y-8 text-start"> - { - page.data.map((note) => ( - <li class=""> - <Note note={note} as="h2" isPreview /> - </li> - )) - } - </ul> - <Pagination {...paginationProps} /> -</PageLayout> diff --git a/src/pages/micro/tags/index.astro b/src/pages/micro/tags/index.astro deleted file mode 100644 index 8d39b8a..0000000 --- a/src/pages/micro/tags/index.astro +++ /dev/null @@ -1,36 +0,0 @@ ---- -import { getCollection } from "astro:content"; -import PageLayout from "@/layouts/Base.astro"; -import { getUniqueMicroTagsWithCount } from "@/utils/micro"; - -const allMicroPosts = await getCollection("micro"); -const allTags = getUniqueMicroTagsWithCount(allMicroPosts); - -const meta = { - description: "A list of all the topics I've written about in my micro posts", - title: "Micro Tags", -}; ---- - -<PageLayout meta={meta}> - <h1 class="title mb-6">Micro Tags</h1> - <ul class="space-y-6"> - { - allTags.map(([tag, val]) => ( - <li class="flex items-center gap-x-2"> - <a - class="cactus-link inline-block" - data-astro-prefetch - href={`/micro/tags/${tag}/`} - title={`View micro posts with the tag: ${tag}`} - > - #{tag} - </a> - <span class="inline-block"> - - {val} Post{val > 1 && "s"} - </span> - </li> - )) - } - </ul> -</PageLayout> |
