const fs = require("fs");
const path = require("path");
const { DateTime } = require("luxon");
const pluginRss = require("@11ty/eleventy-plugin-rss");
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
const pluginNavigation = require("@11ty/eleventy-navigation");
const Image = require("@11ty/eleventy-img");
const markdownIt = require("markdown-it");
const markdownItAnchor = require("markdown-it-anchor");
const markdownItAttrs = require("markdown-it-attrs");
function hyphenize(input) {
return input.replace(/[^\w- ]/, "").replace(/[_ ]/, "-").toLowerCase();
}
module.exports = function(eleventyConfig) {
eleventyConfig.addPlugin(pluginRss);
eleventyConfig.addPlugin(pluginSyntaxHighlight);
eleventyConfig.addPlugin(pluginNavigation);
eleventyConfig.setDataDeepMerge(true);
//
// Filters
//
eleventyConfig.addFilter("readableDate", dateObj => {
return DateTime.fromJSDate(dateObj, {zone: 'utc'}).toFormat("dd LLL yyyy");
});
eleventyConfig.addFilter('htmlDateString', (dateObj) => {
return DateTime.fromJSDate(dateObj, {zone: 'utc'}).toFormat('yyyy-LL-dd');
});
eleventyConfig.addFilter("head", (array, n) => n < 0 ? array.slice(n) : array.slice(0, n));
eleventyConfig.addFilter("min", (...numbers) => Math.min.apply(null, numbers));
function filterTagList(tags) {
return (tags || []).filter(tag => ["all", "nav", "post", "posts"].indexOf(tag) === -1);
}
eleventyConfig.addFilter("filterTagList", filterTagList);
// Build collections for the top and bottom navigation - the first one
// contains the main sites and the latter contains legal pages.
eleventyConfig.addCollection("topNavigation", (collection) => {
return collection.getAll().filter(item => !(item.data.tags || []).includes('legal'));
});
eleventyConfig.addCollection("bottomNavigation", (collection) => {
return collection.getAll().filter(item => (item.data.tags || []).includes('legal'));
});
//
// Widgets
//
eleventyConfig.addPairedShortcode("section", (content, inverted) => `