More ways to define tags in frontmatter

This commit is contained in:
Zef Hemel
2023-12-22 13:59:16 +01:00
parent df83c62dec
commit c709f4e4be
7 changed files with 53 additions and 40 deletions
+5 -26
View File
@@ -1,6 +1,6 @@
import { determineTags } from "$sb/lib/cheap_yaml.ts";
const frontMatterRegex = /^---\n(([^\n]|\n)*?)---\n/;
const yamlKvRegex = /^\s*(\w+):\s*(.*)/;
const yamlListItemRegex = /^\s*-\s+(.+)/;
/**
* Quick and dirty way to check if a page is a template or not
@@ -13,30 +13,9 @@ export function isTemplate(pageText: string): boolean {
if (frontmatter) {
pageText = pageText.slice(frontmatter[0].length);
const frontmatterText = frontmatter[1];
const lines = frontmatterText.split("\n");
let inTagsSection = false;
for (const line of lines) {
const yamlKv = yamlKvRegex.exec(line);
if (yamlKv) {
const [key, value] = yamlKv.slice(1);
// Looking for a 'tags' key
if (key === "tags") {
inTagsSection = true;
// 'template' there? Yay!
if (value.split(/,\s*/).includes("template")) {
return true;
}
} else {
inTagsSection = false;
}
}
const yamlListem = yamlListItemRegex.exec(line);
if (yamlListem && inTagsSection) {
// List item is 'template'? Yay!
if (yamlListem[1] === "template") {
return true;
}
}
const tags = determineTags(frontmatterText);
if (tags.includes("template")) {
return true;
}
}
// Or if the page text starts with a #template tag