compagniekalimat-fr/.eleventy.js

105 lines
3.0 KiB
JavaScript

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', '<br>'))
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",
}
}