work.suroh.tk/.eleventy.js

106 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

// node requires
const fs = require('fs')
// webc plugin
const pluginWebc = require('@11ty/eleventy-plugin-webc')
// markdown plugin
const markdownIt = require('markdown-it')
const mdla = require('markdown-it-link-attributes')
// ~> config start
module.exports = (config) => {
// webc
config.addPlugin(pluginWebc, {
components: '_includes/components/**/*.webc'
})
// markdown setup
const mdOptions = {
html: true,
linkify: true,
}
const markdownLib = markdownIt(mdOptions)
.use(mdla, {
matcher(href, _c) {
return href.match(/\/@\w+/)
},
attrs: {
rel: 'me',
2023-01-10 17:07:18 +00:00
target: '_blank',
},
})
2023-01-10 17:07:18 +00:00
config.setLibrary('md', markdownLib)
// add collection for pages
config.addCollection('categories', (collection) => {
let categories = fs.readdirSync('_content')
categories = categories.filter(c => !c.match(/\.[^/.]{1,4}$/i))
let _cat = {}
categories.forEach(cat => {
let sorted = []
let unsorted = []
2024-02-06 13:15:42 +00:00
let pages = collection.getFilteredByGlob(`_content/${cat}/*.md`)
for (let page of pages) {
if (page.data.sort) {
if (sorted[page.data.sort]) {
sorted.splice(page.data.sort, 0, page)
} else {
sorted[page.data.sort] = page
}
2021-07-19 17:55:59 +00:00
} else {
unsorted.push(page)
2021-07-19 17:55:59 +00:00
}
}
sorted = sorted.filter(p => p.data.published)
2021-07-19 17:55:59 +00:00
_cat[cat] = sorted.concat(unsorted)
})
2023-09-03 19:43:03 +00:00
let _p = collection.getFilteredByGlob('_content/*.md')
let pages = {}
_p.forEach(p => {
if (p.data.title != 'index') {
pages[p.data.title] = p
}
})
return { ..._cat, ...pages }
})
// custom filters
2023-01-10 17:07:18 +00:00
config.addFilter('makeLowercase', (value) => {
if (typeof value === 'string' || value instanceof String) {
return value.toLowerCase()
}
})
2021-07-19 17:55:59 +00:00
// added passthrough for global assets
2023-01-10 17:07:18 +00:00
config.addPassthroughCopy('assets')
2023-10-26 10:06:12 +00:00
2023-11-16 14:57:49 +00:00
// backend
config.addPassthroughCopy('office')
// added passthrough for images in their respective folders
2023-01-10 17:07:18 +00:00
config.addPassthroughCopy('_content/**/images/**')
2021-07-19 17:55:59 +00:00
// reutrn updated config
return {
htmlTemplateEngine: 'webc',
dir: {
2023-01-10 17:07:18 +00:00
input: '_content', // content
includes: '../_includes', // templates
output: '_site', // rendered site
data: '../_data', // global data files
},
}
2021-07-19 17:55:59 +00:00
}