penpot-docs/.eleventy.js

145 lines
4.3 KiB
JavaScript
Raw Permalink Normal View History

2021-02-11 13:11:50 +00:00
const { DateTime } = require("luxon");
const fs = require("fs");
const pluginNavigation = require("@11ty/eleventy-navigation");
2021-02-11 13:11:50 +00:00
const pluginRss = require("@11ty/eleventy-plugin-rss");
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
const pluginAncestry = require("@tigersway/eleventy-plugin-ancestry");
const metagen = require('eleventy-plugin-metagen');
2021-02-11 13:11:50 +00:00
const pluginTOC = require('eleventy-plugin-nesting-toc');
const markdownIt = require("markdown-it");
const markdownItAnchor = require("markdown-it-anchor");
const markdownItPlantUML = require("markdown-it-plantuml");
const elasticlunr = require("elasticlunr");
2021-02-11 13:11:50 +00:00
module.exports = function(eleventyConfig) {
eleventyConfig.addPlugin(pluginNavigation);
2021-02-11 13:11:50 +00:00
eleventyConfig.addPlugin(pluginRss);
eleventyConfig.addPlugin(pluginSyntaxHighlight);
eleventyConfig.addPlugin(pluginAncestry);
2021-02-11 13:11:50 +00:00
eleventyConfig.addPlugin(metagen);
eleventyConfig.addPlugin(pluginTOC, {
tags: ['h1', 'h2', 'h3']
});
eleventyConfig.setDataDeepMerge(true);
eleventyConfig.addLayoutAlias("post", "layouts/post.njk");
eleventyConfig.addFilter("readableDate", dateObj => {
return DateTime.fromJSDate(dateObj, {zone: 'utc'}).toFormat("dd LLL yyyy");
});
// https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-date-string
eleventyConfig.addFilter('htmlDateString', (dateObj) => {
return DateTime.fromJSDate(dateObj, {zone: 'utc'}).toFormat('yyyy-LL-dd');
});
// Remove trailing # in automatic generated toc, because of
// anchors added at the end of the titles.
eleventyConfig.addFilter('stripHash', (toc) => {
return toc.replace(/ #\<\/a\>/g, "</a>");
});
2021-02-11 13:11:50 +00:00
// Get the first `n` elements of a collection.
eleventyConfig.addFilter("head", (array, n) => {
if( n < 0 ) {
return array.slice(n);
}
return array.slice(0, n);
});
// Get the lowest in a list of numbers.
2021-02-11 13:11:50 +00:00
eleventyConfig.addFilter("min", (...numbers) => {
return Math.min.apply(null, numbers);
});
// Build a search index
eleventyConfig.addFilter("search", (collection) => {
// What fields we'd like our index to consist of
// TODO: remove html tags from content
var index = elasticlunr(function () {
this.addField("title");
this.addField("content");
this.setRef("id");
});
// loop through each page and add it to the index
collection.forEach((page) => {
index.addDoc({
id: page.url,
title: page.template.frontMatter.data.title,
content: page.template.inputContent,
});
});
return index.toJSON();
});
2021-02-11 13:11:50 +00:00
eleventyConfig.addPassthroughCopy("img");
eleventyConfig.addPassthroughCopy("css");
eleventyConfig.addPassthroughCopy("js");
2021-02-11 13:11:50 +00:00
/* Markdown Overrides */
let markdownLibrary = markdownIt({
html: true,
breaks: false,
2021-02-11 13:11:50 +00:00
linkify: true
}).use(markdownItAnchor, {
permalink: true,
permalinkClass: "direct-link",
permalinkSymbol: "#"
}).use(markdownItPlantUML, {
});
eleventyConfig.setLibrary("md", markdownLibrary);
// Browsersync Overrides
eleventyConfig.setBrowserSyncConfig({
callbacks: {
ready: function(err, browserSync) {
const content_404 = fs.readFileSync('_dist/404.html');
2021-02-11 13:11:50 +00:00
browserSync.addMiddleware("*", (req, res) => {
// Provides the 404 content without redirect.
res.write(content_404);
res.end();
});
},
},
ui: false,
ghostMode: false
});
return {
templateFormats: [
"md",
"njk",
"html",
"liquid"
],
// If your site lives in a different subdirectory, change this.
// Leading or trailing slashes are all normalized away, so dont worry about those.
// 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`
// pathPrefix: "/",
markdownTemplateEngine: "liquid",
htmlTemplateEngine: "njk",
dataTemplateEngine: "njk",
// These are all optional, defaults are shown:
dir: {
input: ".",
includes: "_includes",
data: "_data",
output: "_dist"
2021-02-11 13:11:50 +00:00
}
};
};