[IndieKit] Add peopletag parsing

Allows me to reference @People in Indiekit-powered posts, so I don't need to write {{< friend "people" >}} in longhand.
This commit is contained in:
JP Hastings-Spital 2024-10-08 12:27:53 +01:00
parent aac4d1184b
commit e964c41899
2 changed files with 23 additions and 2 deletions

View file

@ -103,7 +103,8 @@ export const getPostTemplate = (properties, frontMatterFormat = "yaml") => {
return frontMatter + content; return frontMatter + content;
}; };
const tagFinder = /(?<=\s|^)#[a-z0-9]+\b/ig; const hashtagFinder = /(?<=\s|^)#[a-z0-9]+\b/ig;
const peopletagFinder = /(?<=\s|^)@[a-z]+\b/ig;
/** /**
* Replaces all #HashTags with [HashTags](/tags/hashtags) and returns a compact array of the tags used * Replaces all #HashTags with [HashTags](/tags/hashtags) and returns a compact array of the tags used
@ -112,10 +113,12 @@ const tagFinder = /(?<=\s|^)#[a-z0-9]+\b/ig;
*/ */
const replaceTags = (content) => { const replaceTags = (content) => {
let tags = []; let tags = [];
content = content.replace(tagFinder, (tag) => { content = content.replace(hashtagFinder, (tag) => {
tag = tag.substring(1); tag = tag.substring(1);
tags.push(tag); tags.push(tag);
return `[${tag}](/tags/${tag.toLowerCase()})`; return `[${tag}](/tags/${tag.toLowerCase()})`;
}).replace(peopletagFinder, (tag) => {
return `{{< friend "${tag.substring(1).toLowerCase()}" >}}`;
}); });
return { content, tags } return { content, tags }

View file

@ -232,6 +232,24 @@ tags:
--- ---
[some](/tags/some) posts might have [hashtags](/tags/hashtags), even [MultiCasedOnes](/tags/multicasedones) but [fragment URLs](#heading) must be left alone. [some](/tags/some) posts might have [hashtags](/tags/hashtags), even [MultiCasedOnes](/tags/multicasedones) but [fragment URLs](#heading) must be left alone.
`,
);
});
it("Renders posts with people tags correctly", () => {
const result = getPostTemplate({
published: "2024-10-02",
content: "Sometimes I reference @People, but [@fedi@example.com](https://example.com/@fedi) links and email@example.com shouldn't be changed.",
});
assert.equal(
result,
`---
date: 2024-10-02
publishDate: 2024-10-02
---
Sometimes I reference {{< friend "people" >}}, but [@fedi@example.com](https://example.com/@fedi) links and email@example.com shouldn't be changed.
`, `,
); );
}); });