require('dotenv').config() const { DateTime } = require("luxon"); const pluginNavigation = require("@11ty/eleventy-navigation"); const markdownIt = require('markdown-it') const markdownItAttrs = require('markdown-it-attrs') const Image = require("@11ty/eleventy-img"); const markdownItOptions = { html: true, breaks: false, linkify: true } const parseDate = (date) => typeof date === 'string' ? DateTime.fromISO(date).setZone("Europe/Paris") : DateTime.fromJSDate(date, {zone: 'utc'}).setZone("Europe/Paris") async function imageShortcode(src, alt, sizes, classes) { let metadata = await Image(src, { widths: [300, 600, 1200], formats: ["webp", "jpg"], outputDir: '_site/images/generated', urlPath: '/images/generated' }); let imageAttributes = { alt, sizes, loading: "lazy", decoding: "async", class: classes }; // You bet we throw an error on missing alt in `imageAttributes` (alt="" works okay) return Image.generateHTML(metadata, imageAttributes); } module.exports = function(eleventyConfig) { eleventyConfig.addPlugin(pluginNavigation); eleventyConfig.setUseGitIgnore(false); eleventyConfig.addPassthroughCopy("src/*.png"); eleventyConfig.addPassthroughCopy("src/*.ico"); eleventyConfig.addPassthroughCopy("src/css"); eleventyConfig.addPassthroughCopy("src/js"); eleventyConfig.addPassthroughCopy("src/fonts"); eleventyConfig.addPassthroughCopy("src/images"); eleventyConfig.addPassthroughCopy("src/il/*.jpg"); eleventyConfig.addPassthroughCopy("src/il/*.pdf"); eleventyConfig.addPassthroughCopy("src/araberlin/*.webp"); eleventyConfig.addPassthroughCopy("src/araberlin/*.jpg"); eleventyConfig.addPassthroughCopy("src/araberlin/*.pdf"); eleventyConfig.addFilter("toHTML", str => { return new markdownIt(markdownItOptions).renderInline(str); }); eleventyConfig.addFilter("readableDate", dateObj => { return parseDate(dateObj).setLocale("fr").toFormat("dd LLL yyyy"); }); // https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-date-string eleventyConfig.addFilter('htmlDateString', (dateObj) => { return parseDate(dateObj).toFormat('yyyy-LL-dd'); }); eleventyConfig.addFilter('htmlDateTimeISO', (dateObj) => { return parseDate(dateObj).toISO(); }); // Get the first `n` elements of a collection. eleventyConfig.addFilter("head", (array, n) => { if (!Array.isArray(array) || array.length === 0) { return []; } if (n < 0) { return array.slice(n); } return array.slice(0, n); }); eleventyConfig.addFilter("nlToBr", string => string.replaceAll('\n', '
')) eleventyConfig.setLibrary('md', markdownIt(markdownItOptions).use(markdownItAttrs)) eleventyConfig.setFrontMatterParsingOptions({ excerpt: true }); eleventyConfig.addAsyncShortcode("image", imageShortcode) return { dir: { input: 'src' }, // Pre-process *.md files with: (default: `liquid`) // markdownTemplateEngine: "njk", // Pre-process *.html files with: (default: `liquid`) htmlTemplateEngine: "njk", } }