-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path.eleventy.js
90 lines (71 loc) · 2.78 KB
/
.eleventy.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
const collections = require('./config/collections.js')
const shortcodes = require('./config/shortcodes.js')
const filters = require('./config/filters/filters.js')
const dateFilters = require('./config/filters/date.js')
const indiewebFilters = require('./config/filters/indieweb.js')
const plugins = require('./config/plugins.js')
module.exports = function(eleventyConfig) {
const markdownIt = require("markdown-it")
const markdownItFootnote = require("markdown-it-footnote")
const markdownItGithubAlerts = require('markdown-it-github-alerts')
const { mention } = require('@fedify/markdown-it-mention')
const options = {
html: true, // Enable HTML tags in source
breaks: true, // Convert '\n' in paragraphs into <br>
linkify: true // Autoconvert URL-like text to links
};
let markdownLib = markdownIt(options)
.use(markdownItFootnote)
.use(markdownItGithubAlerts)
.use(mention, {
link: (handle) => {
const [username, domain] = handle.split('@').filter(f => f)
return `https://${domain}/@${username}`
},
})
// replace the stupid emoji
markdownLib.renderer.rules.footnote_anchor = (tokens, idx, options, env, slf) => {
var id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf)
if (tokens[idx].meta.subId > 0) {
id += ':' + tokens[idx].meta.subId
}
return ' <a href="#fnref' + id + '" class="footnote-backref">⤾</a>'
}
eleventyConfig.setLibrary('md', markdownLib);
// passthrough
['src/assets'].forEach(path => {
eleventyConfig.addPassthroughCopy(path)
})
// plugins
plugins.forEach(plugin => {
eleventyConfig.addPlugin(require(plugin.name), { ...plugin.options })
})
// collections
Object.keys(collections).forEach(collectionName => {
eleventyConfig.addCollection(collectionName, collections[collectionName])
})
// shortcodes
Object.keys(shortcodes).forEach(shortcodeName => {
eleventyConfig.addShortcode(shortcodeName, shortcodes[shortcodeName])
})
// filters
Object.keys(filters).forEach(filterName => {
eleventyConfig.addFilter(filterName, filters[filterName])
})
// date filters
Object.keys(dateFilters).forEach(filterName => {
eleventyConfig.addFilter(filterName, dateFilters[filterName])
})
// indieweb/posse filters
Object.keys(indiewebFilters).forEach(filterName => {
eleventyConfig.addFilter(filterName, indiewebFilters[filterName])
})
eleventyConfig.configureErrorReporting({ allowMissingExtensions: true })
return {
passthroughFileCopy: true,
dir: {
input: 'src',
output: 'public'
}
}
}