module.exports = function(eleventyConfig) { // 1. Collection: All published editions, newest first eleventyConfig.addCollection("publishedEditions", function(collectionApi) { return collectionApi.getFilteredByGlob("content/editions/*/index.md") .filter(item => item.data.status === "published") .sort((a, b) => b.date - a.date); }); // 2. Collection: The current (newest) published edition eleventyConfig.addCollection("currentEdition", function(collectionApi) { const published = collectionApi.getFilteredByGlob("content/editions/*/index.md") .filter(item => item.data.status === "published") .sort((a, b) => b.date - a.date); return published.length > 0 ? [published[0]] : []; }); // 3. Layout aliases eleventyConfig.addLayoutAlias("edition", "layouts/edition.njk"); eleventyConfig.addLayoutAlias("article", "layouts/article.njk"); eleventyConfig.addLayoutAlias("base", "layouts/base.njk"); // 4. Filters eleventyConfig.addFilter("newsDate", function(dateObj) { return new Date(dateObj).toLocaleDateString('en-US', { timeZone: 'UTC', weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' }); }); eleventyConfig.addFilter("roman", function(num) { const lookup = {M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1}; let roman = ''; for (let i in lookup) { while (num >= lookup[i]) { roman += i; num -= lookup[i]; } } return roman; }); eleventyConfig.addCollection("editions", function(collectionApi) { return collectionApi.getFilteredByGlob("content/editions/*/index.md"); }); // 5. Directory configuration (integrated into the same function) return { dir: { input: "content", includes: "../_includes", output: "dist" }, templateFormats: ["md", "njk", "html"] }; };