Files
www-ssg/eleventy.config.js

70 lines
2.3 KiB
JavaScript

import pugPlugin from "@11ty/eleventy-plugin-pug";
import brokenLinksPlugin from "eleventy-plugin-broken-links";
import { eleventyImageTransformPlugin } from "@11ty/eleventy-img";
import syntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight";
import { EleventyRenderPlugin, IdAttributePlugin } from '@11ty/eleventy';
import * as fs from 'fs';
import * as opml from 'opml';
export default function (eleventyConfig) {
eleventyConfig.setInputDirectory("src")
eleventyConfig.addPlugin(brokenLinksPlugin);
eleventyConfig.addPlugin(pugPlugin);
eleventyConfig.addPlugin(syntaxHighlight);
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
htmlOptions: {
imgAttributes: {
alt: '',
},
},
});
eleventyConfig.addPlugin(IdAttributePlugin);
eleventyConfig.addPlugin(EleventyRenderPlugin);
eleventyConfig.addPassthroughCopy("src/assets/**")
eleventyConfig.addCollection("blogByYear", api => {
const postsByYear = {}
const posts = api.getFilteredByTag('blog')
const years = []
for ( const post of posts ) {
const year = post.date.getFullYear()
if ( !postsByYear[year] ) postsByYear[year] = []
postsByYear[year] = [post, ...postsByYear[year]]
if ( !years.includes(year) ) years.push(year)
}
return years.sort().reverse().map(year => ({
year,
posts: postsByYear[year],
}))
})
eleventyConfig.addCollection("blogByTag", api => {
const postsByTag = {}
const posts = api.getFilteredByTag('blog')
const tags = []
for ( const post of posts ) {
for ( const tag of post.data.blogtags || [] ) {
if ( !postsByTag[tag] ) postsByTag[tag] = []
postsByTag[tag].push(post)
if ( !tags.includes(tag) ) tags.push(tag)
}
}
return tags.sort().map(tag => ({
tag,
posts: postsByTag[tag],
}))
})
eleventyConfig.addCollection("opmlByCategory", async api => {
const xml = fs.readFileSync("./src/assets/rss_opml.xml")
const parsed = await new Promise((res, rej) => {
opml.parse(xml, (err, doc) => err ? rej(err) : res(doc))
})
return parsed.opml.body.subs
})
}