-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eleventy.js
88 lines (76 loc) · 2.28 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
const { DateTime } = require('luxon')
const svgContents = require('eleventy-plugin-svg-contents')
const ampPlugin = require('@ampproject/eleventy-plugin-amp')
const htmlmin = require('html-minifier')
const siteData = require('./src/_data/site')
const isAmp = process.env.AMP
const inputDir = 'src'
const componentsDir = `${inputDir}/_includes/components`
// components
const seo = require(`./${componentsDir}/seo.js`)
const link = require(`./${componentsDir}/link.js`)
const button = require(`./${componentsDir}/button.js`)
const {
formStyles,
input,
textarea,
formGroup,
} = require(`./${componentsDir}/form.js`)
const { container, row, col, rowStyles } = require(`./${componentsDir}/grid.js`)
module.exports = config => {
// custom plugins
config.addPlugin(svgContents)
if (isAmp) {
config.addPlugin(ampPlugin)
}
// components
config.addShortcode('seo', seo)
config.addShortcode('button', button)
config.addShortcode('input', input)
config.addShortcode('formStyles', formStyles)
config.addShortcode('textarea', textarea)
// wrapper components
config.addPairedShortcode('formGroup', formGroup)
config.addPairedShortcode('container', container)
config.addPairedShortcode('row', row)
config.addShortcode('rowStyles', rowStyles)
config.addPairedShortcode('col', col)
config.addPairedShortcode('link', link)
// copy/paste static assets
config.addPassthroughCopy('static')
// custom transformers
config.addTransform('htmlmin', function(content, outputPath) {
if (outputPath.endsWith('.html')) {
let minified = htmlmin.minify(content, {
useShortDoctype: true,
removeComments: true,
collapseWhitespace: true,
minifyJs: true,
minifyCSS: true,
})
return minified
}
return content
})
if (isAmp) {
config.addTransform('noSitemapWhenAmp', function(content, outputPath) {
if (outputPath.endsWith('sitemap.xml')) {
return ''
}
return content
})
}
// filters
config.addFilter('date', (dateObj, format) => {
return DateTime.fromJSDate(dateObj).toFormat(format)
})
config.addFilter('publicUrl', url => {
return siteData.publicUrl + url
})
return {
dir: {
input: inputDir,
output: 'build' + (isAmp ? siteData.ampDir : ''),
},
}
}