This repository has been archived by the owner on Jul 29, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eleventy.js
128 lines (111 loc) · 4.31 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
require('dotenv').config();
const CleanCSS = require('clean-css');
const markdownIt = require('markdown-it');
const markdownItAnchor = require('markdown-it-anchor');
const markdownItAttrs = require('markdown-it-attrs');
const markdownItFootnote = require('markdown-it-footnote');
const markdownItImageLazyLoading = require('markdown-it-image-lazy-loading');
const markdownItKatex = require('@iktakahiro/markdown-it-katex');
const collections = require('./src/utils/collections');
const betterSlugFilter = require('./src/filters/better-slug');
const dateFilter = require('./src/filters/date-filter');
const dumpFilter = require('@jamshop/eleventy-filter-dump');
const markdownFilter = require('./src/filters/markdown-filter');
const statFilter = require('./src/filters/stat-filter');
const w3DateFilter = require('./src/filters/w3-date-filter');
const pluginRss = require('@11ty/eleventy-plugin-rss');
const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight');
module.exports = (eleventyConfig) => {
// Markdown
const options = {
html: true,
breaks: true,
linkify: true,
typographer: true,
};
const markdownLib = markdownIt(options)
.use(markdownItAttrs)
.use(markdownItFootnote)
.use(markdownItKatex, { strict: false })
.use(markdownItImageLazyLoading)
.use(markdownItAnchor, {
permalink: markdownItAnchor.permalink.ariaHidden({
symbol: '#',
class: 'text-gray-300 border-b-4 border-transparent hover:border-gray-200 hover:text-gray-500',
placement: 'before'
}),
});
eleventyConfig.setUseGitIgnore(false);
eleventyConfig.addWatchTarget('src/assets/styles');
// Use markdownIt with markdownItAttrs for markdown parsing
// Allows for classes and id's to be applied in markdown without
// HTML
eleventyConfig.setLibrary('md', markdownLib);
eleventyConfig.setDataDeepMerge(true);
// CSS needs to be compiled with `npm run css`
eleventyConfig.addPassthroughCopy('src/assets/img');
eleventyConfig.addPassthroughCopy('src/assets/fonts');
eleventyConfig.addPassthroughCopy('src/assets/scripts');
eleventyConfig.addPassthroughCopy('src/assets/vectors');
eleventyConfig.addPassthroughCopy('src/assets/styles/style.min.css');
eleventyConfig.addPassthroughCopy({ 'src/assets/siteroot': '/' });
eleventyConfig.addPassthroughCopy({ 'node_modules/katex/dist/fonts': 'assets/fonts' });
// Collections
Object.entries(collections).map(([key, value]) => {
eleventyConfig.addCollection(key, value);
});
// Browsersync Configuration
eleventyConfig.setBrowserSyncConfig({
// Disable ghostMode so it does not interfere
// with syncing in Sizzy browser.
ghostMode: false,
});
// Plugins
eleventyConfig.addPlugin(syntaxHighlight);
eleventyConfig.addPlugin(pluginRss);
// Shortcodes
eleventyConfig.addShortcode('pullquote', require('./lib/shortcodes/pullquote.js'));
eleventyConfig.addPairedShortcode('letter', function (contents) {
const parsedMarkDown = markdownLib.render(contents);
const html = `
<div class="full-bleed">
<div id="letter" class="text-sm text-gray-00 md:letter w-max-800">
${parsedMarkDown}
</div>
</div>`;
return html.replace(/(\r\n|\n|\r)(\s\s)*/gm, '');
});
eleventyConfig.addPairedShortcode('table', function (contents) {
const parsedMarkDown = markdownLib.render(contents);
const html = `
<div class="table-wrapper full-bleed my-16">
<div class="w-max-900">
${parsedMarkDown}
</div>
</div>`;
return html.replace(/(\r\n|\n|\r)(\s\s)*/gm, '');
});
// Filters
eleventyConfig.addFilter('cssmin', function (code) {
return new CleanCSS({}).minify(code).styles;
});
eleventyConfig.addFilter('dateFilter', dateFilter);
eleventyConfig.addFilter('dump', dumpFilter);
eleventyConfig.addFilter('markdownFilter', markdownFilter);
eleventyConfig.addFilter('slug', betterSlugFilter);
eleventyConfig.addFilter('stat', statFilter);
eleventyConfig.addFilter('w3DateFilter', w3DateFilter);
return {
dir: {
// ⚠️ These values are both relative to your input directory.
includes: '_includes',
layouts: '_layouts',
input: 'src',
output: 'www',
},
templateFormats: ['md', 'html', 'njk'],
markdownTemplateEngine: 'njk',
htmlTemplateEngine: 'njk',
dataTemplateEngine: 'njk',
};
};