import { eleventyImageTransformPlugin } from "@11ty/eleventy-img"; import eleventyNavigationPlugin from "@11ty/eleventy-navigation"; import { feedPlugin } from "@11ty/eleventy-plugin-rss"; import syntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight"; import { attrs } from "@mdit/plugin-attrs"; import { chunk } from "lodash-es"; import pluginFilters from "./_config/filters.js"; export default async function(eleventyConfig) { /* Markdown HTML attribute parsing */ eleventyConfig.amendLibrary("md", (mdLib) => mdLib.use(attrs)); /* Collections */ /* Tag pagination */ eleventyConfig.addCollection("tagPagination", function(collection) { let tagSet = new Set(collection.getAllSorted().flatMap((post) => post.data.tags || [])); let paginationSize = 13; let tagMap = []; let tagArray = [...tagSet]; for( let tagName of tagArray) { let tagItems = collection.getFilteredByTag(tagName); let pagedItems = chunk(tagItems.reverse(), paginationSize); // console.log( tagName, tagItems.length, pagedItems.length ); for( let pageNumber = 0, max = pagedItems.length; pageNumber < max; pageNumber++) { tagMap.push({ tagName: tagName, pageNumber: pageNumber, pageSize: pagedItems.length, pageData: pagedItems[pageNumber] }); } } //console.log( tagMap ); return tagMap; }); /* Passthroughs */ eleventyConfig.addPassthroughCopy({"css": "assets/css"}); /* Plugins */ /* All filters from _config/filters.js */ eleventyConfig.addPlugin(pluginFilters); /* RSS */ eleventyConfig.addPlugin(feedPlugin, { type: "atom", // or "rss", "json" outputPath: "/feed.xml", collection: { name: "posts", // iterate over `collections.posts` limit: 10, // 0 means no limit }, metadata: { language: "en", title: "hello hello", subtitle: "Lee Cattarin... on the internet!", base: "https://leecat.art", author: { name: "Lee Cattarin", email: "lee.cattarin@gmail.com", } } }); /* Images */ eleventyConfig.addPlugin(eleventyImageTransformPlugin, { // output image formats formats: ["auto"], // output image widths widths: [1000], // optional, attributes assigned on nodes override these values htmlOptions: { imgAttributes: { loading: "lazy", decoding: "async", }, }, }); /* Navigation */ eleventyConfig.addPlugin(eleventyNavigationPlugin); /* Syntax highlighting */ eleventyConfig.addPlugin(syntaxHighlight); /* Watch when serving */ eleventyConfig.addWatchTarget("css"); }; export const config = { dir: { input: "src", includes: "../_includes", layouts: "../_includes/layouts", data: "../_data" }, markdownTemplateEngine: "njk", htmlTemplateEngine: "njk", templateFormats: ["html", "md", "njk"], };