slugify tag paths

This commit is contained in:
Shadowfacts 2021-04-12 18:31:03 -04:00
parent 795afa5c1c
commit 272a4b1326
Signed by: shadowfacts
GPG Key ID: 94A5AB95422746E5
5 changed files with 7 additions and 3 deletions

View File

@ -11,6 +11,8 @@ import layout from "../layout";
async function generatePostFromFile(postPath: string, additionalMetadata: object = {}): Promise<Page> { async function generatePostFromFile(postPath: string, additionalMetadata: object = {}): Promise<Page> {
const page = await metadata.get(postPath); const page = await metadata.get(postPath);
(<PostMetadata>page.metadata).tagSlugs = (<PostMetadata>page.metadata).tags.map((tag) => slugify(tag));
for (const k in additionalMetadata) { for (const k in additionalMetadata) {
if (additionalMetadata.hasOwnProperty(k)) page.metadata[k] = additionalMetadata[k]; if (additionalMetadata.hasOwnProperty(k)) page.metadata[k] = additionalMetadata[k];
} }

View File

@ -1,5 +1,6 @@
import { Page, PostMetadata } from "../metadata"; import { Page, PostMetadata } from "../metadata";
import generatePaginated from "./paginated"; import generatePaginated from "./paginated";
import slugify from "@sindresorhus/slugify";
export default async function(posts: Page[]): Promise<Map<string, Page[]>> { export default async function(posts: Page[]): Promise<Map<string, Page[]>> {
const taggedPosts = new Map<string, Page[]>(); const taggedPosts = new Map<string, Page[]>();
@ -15,7 +16,7 @@ export default async function(posts: Page[]): Promise<Map<string, Page[]>> {
} }
taggedPosts.forEach((tagPosts, tag) => { taggedPosts.forEach((tagPosts, tag) => {
generatePaginated(tagPosts, `/${tag}/`, "site/tag.html.ejs", { generatePaginated(tagPosts, `/${slugify(tag)}/`, "site/tag.html.ejs", {
tag tag
}, { }, {
title: `${tag} posts` title: `${tag} posts`

View File

@ -17,6 +17,7 @@ export interface PostMetadata extends Metadata {
title: string; title: string;
slug: string; slug: string;
tags: string[]; tags: string[];
tagSlugs: string[];
date: string | Date; date: string | Date;
readingTime?: number; readingTime?: number;
wordCount?: number; wordCount?: number;

View File

@ -11,7 +11,7 @@
<% if (metadata.tags) { %> <% if (metadata.tags) { %>
in in
<% for (let i = 0; i < metadata.tags.length; i++) { %> <% for (let i = 0; i < metadata.tags.length; i++) { %>
<span itemprop="articleSection"><a href="/<%= metadata.tags[i] %>/" rel="tag"><%= metadata.tags[i] %></a></span><%= i < metadata.tags.length - 1 ? ", " : "" %> <span itemprop="articleSection"><a href="/<%= metadata.tagSlugs[i] %>/" rel="tag"><%= metadata.tags[i] %></a></span><%= i < metadata.tags.length - 1 ? ", " : "" %>
<% } %> <% } %>
<% } else if (metadata.series) { %> <% } else if (metadata.series) { %>
in in

View File

@ -1,6 +1,6 @@
``` ```
metadata.title = "Let's Build a Programming Language: Part 0" metadata.title = "Let's Build a Programming Language: Part 0"
metadata.tags = ["let's build a programming language", "rust"] metadata.tags = ["build a programming language", "rust"]
metadata.date = "2021-04-12 17:27:42 -0400" metadata.date = "2021-04-12 17:27:42 -0400"
metadata.shortDesc = "" metadata.shortDesc = ""
metadata.slug = "lets-build-a-programming-language" metadata.slug = "lets-build-a-programming-language"