slugify tag paths
This commit is contained in:
parent
795afa5c1c
commit
272a4b1326
|
@ -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];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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`
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue