-
Notifications
You must be signed in to change notification settings - Fork 0
/
.eleventy.js
67 lines (56 loc) · 2.02 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
const yaml = require("js-yaml");
const Image = require("@11ty/eleventy-img");
const { EleventyRenderPlugin } = require("@11ty/eleventy");
const TAGS = ['fun', 'serious', 'legacy', 'jenkins', 'muds'];
const toImageTag = async (src = 'src/img/noimage.jpg', alt = "", width = 300) => {
if (!src) {
src = "src/img/noimage.jpg";
}
let attributes = {
src: src.replace('/assets/', 'src/img/'),
widths: [width],
alt: alt || "",
}
const imageOptions = {
// We only need the original width and format
widths: attributes.widths,
formats: ['avif', 'jpeg'],
// Where the generated image files get saved
outputDir: '_site/assets/images',
// Public URL path that's referenced in the img tag's src attribute
urlPath: '/assets/images',
};
// generate images, while this is async we don’t wait
let metadata = await Image(attributes.src, imageOptions);
return Image.generateHTML(metadata, {
sizes: '100vw',
loading: 'lazy',
decoding: 'async',
...attributes,
});
};
module.exports = eleventyConfig => {
eleventyConfig.addPlugin(EleventyRenderPlugin);
eleventyConfig.addDataExtension("yaml", contents => yaml.load(contents));
eleventyConfig.addPassthroughCopy("src/img/*.png");
eleventyConfig.addPassthroughCopy("src/img/*.gif");
eleventyConfig.addPassthroughCopy('css')
eleventyConfig.addAsyncShortcode('toImageTag', toImageTag)
eleventyConfig.addFilter("toUpperCase", value => value.toUpperCase())
eleventyConfig.addShortcode("twitter", function (username) {
return `<a href="https://www.twitter.com/${username}">${username}</a>`;
});
TAGS.forEach(tag => {
eleventyConfig.addCollection(tag + 'Projects', function (collectionApi) {
return collectionApi.getAll().filter(item => item?.data?.tags?.includes(tag));
})
})
eleventyConfig.addCollection('remainingProjects', function (collectionApi) {
return collectionApi.getAll().filter(item => !TAGS.some(tag => item?.data?.tags?.includes(tag)));
})
return {
dir: {
input: "src",
}
}
};