penpot/docs/eleventy.config.mjs
andrés gonzález df0402b626
💄 Align the Help Center footer with penpot.app (#12179)
The footer had a hardcoded 2025 copyright and links that no longer match
penpot.app. The year is now set at build time. Sections, links and
social icons follow the current penpot.app footer, and the grid wraps
into two rows to fit the new sections.

Closes #12132

AI-assisted-by: claude-opus-5-5
2026-10-08 10:59:36 +02:00

126 lines
3.8 KiB
JavaScript

import { DateTime } from "luxon";
import fs from "fs";
import pluginNavigation from "@11ty/eleventy-navigation";
import pluginRss from "@11ty/eleventy-plugin-rss";
import pluginSyntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight";
import pluginAncestry from "@tigersway/eleventy-plugin-ancestry";
import metagen from "eleventy-plugin-metagen";
import pluginTOC from "eleventy-plugin-nesting-toc";
import markdownIt from "markdown-it";
import markdownItAnchor from "markdown-it-anchor";
import markdownItPlantUML from "markdown-it-plantuml";
export default function (eleventyConfig) {
eleventyConfig.addPlugin(pluginNavigation);
eleventyConfig.addPlugin(pluginRss);
eleventyConfig.addPlugin(pluginSyntaxHighlight);
eleventyConfig.addPlugin(pluginAncestry);
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>");
});
// 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.
eleventyConfig.addFilter("min", (...numbers) => {
return Math.min.apply(null, numbers);
});
// Current year, resolved at build time.
eleventyConfig.addShortcode("year", () => `${new Date().getFullYear()}`);
eleventyConfig.addPassthroughCopy("img");
eleventyConfig.addPassthroughCopy("css");
eleventyConfig.addPassthroughCopy("js");
// Redirects (for Cloudflare)
eleventyConfig.addPassthroughCopy({ _redirects: "_redirects" });
/* Markdown Overrides */
let markdownLibrary = markdownIt({
html: true,
breaks: false,
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");
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", "11ty.js"],
// If your site lives in a different subdirectory, change this.
// Leading or trailing slashes are all normalized away, so don't worry about those.
// If you don't 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",
},
};
}