feat: Show tag count and fix tag wrapping #11
|
@ -27,7 +27,7 @@ export async function getPosts(tag: string | null = null) {
|
||||||
return posts;
|
return posts;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getTags() {
|
export async function getTags() : Promise<Map<string, number>> {
|
||||||
const allPostFiles = import.meta.glob('$content/post/*.md');
|
const allPostFiles = import.meta.glob('$content/post/*.md');
|
||||||
const iterablePostFiles = Object.entries(allPostFiles);
|
const iterablePostFiles = Object.entries(allPostFiles);
|
||||||
|
|
||||||
|
@ -37,5 +37,7 @@ export async function getTags() {
|
||||||
return metadata.tags;
|
return metadata.tags;
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
return new Set(allPosts.flat());
|
return allPosts.flat().reduce((acc: Map<string, number>, curr: string) => {
|
||||||
|
return acc[curr] ? ++acc[curr] : acc[curr] = 1, acc
|
||||||
|
}, new Map());
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,11 @@
|
||||||
|
|
||||||
<hr class="separator" />
|
<hr class="separator" />
|
||||||
<div id="tags">
|
<div id="tags">
|
||||||
{#each allTags as tag}
|
{#each Object.entries(allTags) as [tag, occ]}
|
||||||
<a class="tag" href="/tag/{tag}">{tag}</a>
|
<div class="tag">
|
||||||
|
<a href="/tag/{tag}">{tag}</a>
|
||||||
|
({occ})
|
||||||
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
<hr class="separator" />
|
<hr class="separator" />
|
||||||
|
|
|
@ -2,6 +2,6 @@ import type { PageLoad } from './$types';
|
||||||
import { getTags } from '$lib/posts';
|
import { getTags } from '$lib/posts';
|
||||||
|
|
||||||
export const load: PageLoad = async (_) => {
|
export const load: PageLoad = async (_) => {
|
||||||
const allTags = await getTags();
|
let allTags = await getTags();
|
||||||
return { allTags };
|
return { allTags };
|
||||||
};
|
};
|
|
@ -10,7 +10,7 @@
|
||||||
<title>{name} | {siteMetadata.blogName}</title>
|
<title>{name} | {siteMetadata.blogName}</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<h1>{name}</h1>
|
<h1>{name} ({posts.length})</h1>
|
||||||
|
|
||||||
<hr class="separator" />
|
<hr class="separator" />
|
||||||
<ul id="catalog" class="content">
|
<ul id="catalog" class="content">
|
||||||
|
|
Loading…
Reference in New Issue