itsonus-blog/eleventy.config.js

331 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

const { DateTime } = require("luxon");
const markdownItAnchor = require("markdown-it-anchor");
const pluginRss = require("@11ty/eleventy-plugin-rss");
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
const pluginNavigation = require("@11ty/eleventy-navigation");
const { EleventyHtmlBasePlugin } = require("@11ty/eleventy");
let markdownIt = require("markdown-it");
const htmlmin = require('html-minifier');
let options = {
// whatever options you have set for the library here
};
let mdfigcaption = require('markdown-it-image-figures');
let figoptions = {
figcaption: true
};
const mdLib = markdownIt(options).use(mdfigcaption, figoptions);
module.exports = function(eleventyConfig) {
eleventyConfig.setUseGitIgnore(false);
eleventyConfig.setLibrary("md", mdLib);
// Watch our compiled assets for changes
eleventyConfig.addWatchTarget('./src/compiled-assets/main.css');
//eleventyConfig.addWatchTarget('./src/compiled-assets/main.js');
//eleventyConfig.addWatchTarget('./src/compiled-assets/vendor.js');
// Copy src/compiled-assets to /assets
eleventyConfig.addPassthroughCopy({ 'src/compiled-assets': 'assets' });
// Copy all images
eleventyConfig.addPassthroughCopy('src/images');
// Add plugins
eleventyConfig.addPlugin(pluginRss);
eleventyConfig.addPlugin(pluginSyntaxHighlight);
eleventyConfig.addPlugin(pluginNavigation);
eleventyConfig.addPlugin(EleventyHtmlBasePlugin);
eleventyConfig.addFilter("env", (key, def="NOT DEFINED") => process.env[key] || def);
eleventyConfig.addFilter("readableDate", (dateObj, format = "dd LLLL yyyy") => {
return DateTime.fromJSDate(dateObj, {zone: 'utc', locale: 'fr'}).toFormat(format);
});
// https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-date-string
eleventyConfig.addFilter('htmlDateString', (dateObj) => {
return DateTime.fromJSDate(dateObj, {zone: 'utc', locale: 'fr'}).toFormat('yyyy-LL-dd');
});
// 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);
});
// Return the smallest number argument
eleventyConfig.addFilter("min", (...numbers) => {
return Math.min.apply(null, numbers);
});
// Return all the tags used in a collection
eleventyConfig.addFilter("getAllTags", collection => {
let tagSet = new Set();
for(let item of collection) {
(item.data.tags || []).forEach(tag => tagSet.add(tag));
}
return Array.from(tagSet).sort((a, b) => {
return a.localeCompare(b, undefined, {sensitivity: 'base'});
});
});
eleventyConfig.addFilter("filterTagList", function filterTagList(tags) {
return (tags || []).filter(tag => ["all", "nav", "post", "posts"].indexOf(tag) === -1);
});
// Customize Markdown library and settings:
eleventyConfig.amendLibrary("md", mdLib => {
mdLib.use(markdownItAnchor, {
permalink: markdownItAnchor.permalink.ariaHidden({
placement: "after",
class: "direct-link",
symbol: "#",
}),
level: [1,2,3,4],
slugify: eleventyConfig.getFilter("slug")
});
});
// Override @11ty/eleventy-dev-server defaults (used only with --serve)
eleventyConfig.setServerOptions({
showVersion: true,
});
if (process.env.ELEVENTY_ENV === 'production') {
eleventyConfig.addTransform('htmlmin', (content, outputPath) => {
if (outputPath.endsWith('.html')) {
return htmlmin.minify(content, {
collapseInlineTagWhitespace: false,
collapseWhitespace: true,
removeComments: true,
sortClassName: true,
useShortDoctype: true,
});
}
return content;
});
}
return {
// Control which files Eleventy will process
// e.g.: *.md, *.njk, *.html, *.liquid
templateFormats: [
"md",
"njk",
"html",
"liquid"
],
// Pre-process *.md files with: (default: `liquid`)
markdownTemplateEngine: "njk",
// Pre-process *.html files with: (default: `liquid`)
htmlTemplateEngine: "njk",
// -----------------------------------------------------------------
// If your site deploys to a subdirectory, change `pathPrefix`.
// Dont worry about leading and trailing slashes, we normalize these.
// If you dont have a subdirectory, use "" or "/" (they do the same thing)
// This is only used for link URLs (it does not affect your file structure)
// Best paired with the `url` filter: https://www.11ty.dev/docs/filters/url/
// You can also pass this in on the command line using `--pathprefix`
// Optional (default is shown)
pathPrefix: "/",
// -----------------------------------------------------------------
// These are all optional (defaults are shown):
dir: {
input: 'src',
includes: '_components',
layouts: '_layouts',
output: 'dist',
},
};
};
// const fs = require("fs");
// const path = require("path");
// const { DateTime } = require("luxon");
// const rosetta = require("rosetta");
// const markdownItAnchor = require("markdown-it-anchor");
// const pluginRss = require("@11ty/eleventy-plugin-rss");
// const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
// const pluginNavigation = require("@11ty/eleventy-navigation");
// const { EleventyI18nPlugin, EleventyHtmlBasePlugin } = require("@11ty/eleventy");
// const languageStrings = require("./i18n.js");
// let markdownIt = require("markdown-it");
// let options = {
// // whatever options you have set for the library here
// };
// let mdfigcaption = require('markdown-it-image-figures');
// let figoptions = {
// figcaption: true
// };
// const mdLib = markdownIt(options).use(mdfigcaption, figoptions);
//
// const manifestPath = path.resolve(__dirname, "_site", "assets", "manifest.json");
// const manifest = JSON.parse(
// fs.readFileSync(manifestPath, { encoding: "utf8" })
// );
//
// module.exports = function(eleventyConfig) {
// eleventyConfig.ignores.add("README.md");
//
// eleventyConfig.setLibrary("md", mdLib);
//
// // Adds a universal shortcode to return the URL to a webpack asset. In Nunjack templates:
// // {% webpackAsset 'main.js' %} or {% webpackAsset 'main.css' %}
// eleventyConfig.addShortcode("webpackAsset", function(name) {
// if (!manifest[name]) {
// throw new Error(`The asset ${name} does not exist in ${manifestPath}`);
// }
// return manifest[name];
// });
//
// // Copy all images directly to dist.
// eleventyConfig.addPassthroughCopy({ "public/img": "img" });
//
// // Copy the contents of the `public` folder to the output folder
// // For example, `./public/css/` ends up in `_site/css/`
// // eleventyConfig.addPassthroughCopy({
// // "./node_modules/prismjs/themes/prism-okaidia.css": "/public/css/prism-theme.css",
// // });
// // // Watch our compiled assets for changes
// // eleventyConfig.addWatchTarget('./src/compiled-assets/main.css');
// // // Copy src/compiled-assets to /assets
// // eleventyConfig.addPassthroughCopy({ 'src/compiled-assets': 'assets' });
//
// // Add plugins
// eleventyConfig.addPlugin(pluginRss);
// eleventyConfig.addPlugin(pluginSyntaxHighlight);
// eleventyConfig.addPlugin(pluginNavigation);
// eleventyConfig.addPlugin(EleventyHtmlBasePlugin);
//
// eleventyConfig.addPlugin(EleventyI18nPlugin, {
// defaultLanguage: "fr",
// errorMode: "allow-fallback",
// });
//
// eleventyConfig.addFilter("readableDate", (dateObj, format = "dd LLLL yyyy") => {
// return DateTime.fromJSDate(dateObj, {zone: 'utc', locale: 'fr'}).toFormat(format);
// });
//
// // https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-date-string
// eleventyConfig.addFilter('htmlDateString', (dateObj) => {
// return DateTime.fromJSDate(dateObj, {zone: 'utc', locale: 'fr'}).toFormat('yyyy-LL-dd');
// });
//
// // 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);
// });
//
// // Return the smallest number argument
// eleventyConfig.addFilter("min", (...numbers) => {
// return Math.min.apply(null, numbers);
// });
//
// // Return all the tags used in a collection
// eleventyConfig.addFilter("getAllTags", collection => {
// let tagSet = new Set();
// for(let item of collection) {
// (item.data.tags || []).forEach(tag => tagSet.add(tag));
// }
// return Array.from(tagSet).sort((a, b) => {
// return a.localeCompare(b, undefined, {sensitivity: 'base'});
// });
// });
//
// eleventyConfig.addFilter("filterTagList", function filterTagList(tags) {
// return (tags || []).filter(tag => ["all", "nav", "post", "posts"].indexOf(tag) === -1);
// });
//
// // Customize Markdown library and settings:
// eleventyConfig.amendLibrary("md", mdLib => {
// mdLib.use(markdownItAnchor, {
// permalink: markdownItAnchor.permalink.ariaHidden({
// placement: "after",
// class: "direct-link",
// symbol: "#",
// }),
// level: [1,2,3,4],
// slugify: eleventyConfig.getFilter("slug")
// });
// });
//
// // Override @11ty/eleventy-dev-server defaults (used only with --serve)
// eleventyConfig.setServerOptions({
// showVersion: true,
// });
//
// // i18n filter using Rosetta
// const rosettaLib = rosetta(languageStrings);
//
// eleventyConfig.addFilter("i18n", function (key, lang) {
// const I18N_PREFIX = "i18n.";
// if(key.startsWith(I18N_PREFIX)) {
// key = key.slice(I18N_PREFIX.length);
// }
// // depends on page.lang in 2.0.0-canary.14+
// let page = this.page || this.ctx?.page || this.context?.environments?.page || {};
// return rosettaLib.t(key, {}, lang || page.lang);
// });
//
// return {
// // Control which files Eleventy will process
// // e.g.: *.md, *.njk, *.html, *.liquid
// templateFormats: [
// "md",
// "njk",
// "html",
// "liquid"
// ],
//
// // Pre-process *.md files with: (default: `liquid`)
// markdownTemplateEngine: "njk",
//
// // Pre-process *.html files with: (default: `liquid`)
// htmlTemplateEngine: "njk",
//
// // -----------------------------------------------------------------
// // If your site deploys to a subdirectory, change `pathPrefix`.
// // Dont worry about leading and trailing slashes, we normalize these.
//
// // If you dont have a subdirectory, use "" or "/" (they do the same thing)
// // This is only used for link URLs (it does not affect your file structure)
// // Best paired with the `url` filter: https://www.11ty.dev/docs/filters/url/
//
// // You can also pass this in on the command line using `--pathprefix`
//
// // Optional (default is shown)
// pathPrefix: "/",
// // -----------------------------------------------------------------
//
// // These are all optional (defaults are shown):
// dir: {
// input: ".",
// includes: "_includes",
// data: "_data",
// output: "_site"
// }
// };
// };