Files
leecat.art/eleventy.config.js

106 lines
2.7 KiB
JavaScript
Raw Normal View History

2026-02-17 21:11:03 -08:00
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";
2026-02-18 16:29:21 -08:00
import { attrs } from "@mdit/plugin-attrs";
import { chunk } from "lodash-es";
import pluginFilters from "./_config/filters.js";
2026-02-17 21:11:03 -08:00
2026-02-17 20:03:12 -08:00
export default async function(eleventyConfig) {
2026-02-18 16:29:21 -08:00
/* 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 || []));
tagSet = tagSet.difference(new Set(["posts", "gallery", "reference"]));
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]
});
}
}
return tagMap;
});
2026-02-17 21:11:03 -08:00
/* Passthroughs */
2026-02-17 20:03:12 -08:00
eleventyConfig.addPassthroughCopy({"css": "assets/css"});
2026-02-17 21:11:03 -08:00
/* Plugins */
/* All filters from _config/filters.js */
eleventyConfig.addPlugin(pluginFilters);
2026-02-17 21:11:03 -08:00
/* 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],
2026-02-17 21:11:03 -08:00
// optional, attributes assigned on <img> nodes override these values
htmlOptions: {
imgAttributes: {
loading: "lazy",
decoding: "async",
},
},
});
/* Navigation */
eleventyConfig.addPlugin(eleventyNavigationPlugin);
/* Syntax highlighting */
eleventyConfig.addPlugin(syntaxHighlight);
2026-02-17 21:11:03 -08:00
/* Watch when serving */
eleventyConfig.addWatchTarget("css");
2026-02-17 20:03:12 -08:00
};
export const config = {
dir: {
2026-02-17 21:11:03 -08:00
input: "src",
includes: "../_includes",
layouts: "../_includes/layouts",
2026-02-17 21:11:03 -08:00
data: "../_data"
2026-02-17 20:03:12 -08:00
},
markdownTemplateEngine: "njk",
htmlTemplateEngine: "njk",
templateFormats: ["html", "md", "njk"],
};