www-lordnet-sh/.eleventy.js
2026-03-24 10:24:04 -04:00

47 lines
1.3 KiB
JavaScript

module.exports = function (eleventyConfig) {
// Collection: all posts sorted by date descending
eleventyConfig.addCollection("posts", function (collectionApi) {
return collectionApi
.getFilteredByGlob("blog/posts/**/*.md")
.sort((a, b) => b.date - a.date);
});
// Filter: human-readable date, e.g. "March 24, 2026"
eleventyConfig.addFilter("readableDate", function (date) {
return new Date(date).toLocaleDateString("en-US", {
year: "numeric",
month: "long",
day: "numeric",
});
});
// Filter: aggregate tags across a post collection
// Returns [{tag, count}, ...] sorted by count desc, excluding "posts"
eleventyConfig.addFilter("tagCounts", function (posts) {
const counts = {};
for (const post of posts) {
for (const tag of post.data.tags || []) {
if (tag === "posts") continue;
counts[tag] = (counts[tag] || 0) + 1;
}
}
return Object.entries(counts)
.map(([tag, count]) => ({ tag, count }))
.sort((a, b) => b.count - a.count);
});
// Pass through static assets
eleventyConfig.addPassthroughCopy("assets");
return {
dir: {
input: ".",
output: "_site",
includes: "_includes",
data: "_data",
},
templateFormats: ["njk", "md", "html"],
markdownTemplateEngine: "njk",
htmlTemplateEngine: "njk",
};
};