generated from 11ty/eleventy-base-blog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eleventy.js
119 lines (96 loc) · 3.81 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
const { DateTime } = require("luxon");
const fs = require("fs");
const pluginRss = require("@11ty/eleventy-plugin-rss");
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
const pluginNavigation = require("@11ty/eleventy-navigation");
const { markdownLibrary } = require("./lib/scripts/markdown.js");
const CleanCSS = require('clean-css');
const { getProjectsData } = require('./lib/js/projects');
module.exports = function(eleventyConfig) {
eleventyConfig.addPlugin(pluginRss);
eleventyConfig.addPlugin(pluginSyntaxHighlight);
eleventyConfig.addPlugin(pluginNavigation);
// https://www.11ty.dev/docs/data-deep-merge/
eleventyConfig.setDataDeepMerge(true);
eleventyConfig.addLayoutAlias("post", "layouts/post.njk");
eleventyConfig.addFilter("readableDate", dateObj => {
return DateTime.fromJSDate(dateObj, {zone: 'utc', locale: 'ru'}).toFormat("dd LLL yyyy");
});
eleventyConfig.addFilter("readableDateWithoutDays", dateObj => {
return DateTime.fromJSDate(dateObj, {zone: 'utc', locale: 'ru'}).toFormat("LLL yyyy");
});
// https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-date-string
eleventyConfig.addFilter('htmlDateString', (dateObj) => {
return DateTime.fromJSDate(dateObj, {zone: 'utc', locale: 'ru'}).toFormat('yyyy-LL-dd');
});
eleventyConfig.addFilter("head", (array, n) => {
if( n < 0 ) {
return array.slice(n);
}
return array.slice(0, n);
});
eleventyConfig.addFilter("min", (...numbers) => {
return Math.min.apply(null, numbers);
});
eleventyConfig.addFilter("filterTagList", tags => {
return (tags || []).filter(tag => ["all", "nav", "post", "posts"].indexOf(tag) === -1);
})
eleventyConfig.addFilter("keys", obj => Object.keys(obj));
eleventyConfig.addFilter("cssmin", (code) => {
return new CleanCSS({}).minify(code);
})
eleventyConfig.addCollection("tagList", function(collection) {
let tagSet = new Set();
collection.getAll().forEach(item => {
(item.data.tags || []).forEach(tag => tagSet.add(tag));
});
return [...tagSet];
});
eleventyConfig.addCollection("projects", async () => {
const projects = await getProjectsData();
console.log('projects', projects);
return projects;
})
eleventyConfig.addPassthroughCopy("static");
eleventyConfig.addPassthroughCopy("./src/assets/css/prism.css");
const jsAssetsFiles = "./src/**/*.js"
const cssAssetsFiles = "./src/assets/css/**/*.scss"
const mdAssetsFiles = "./src/**/*.md"
eleventyConfig.addWatchTarget(jsAssetsFiles)
eleventyConfig.addWatchTarget(cssAssetsFiles)
eleventyConfig.addWatchTarget(mdAssetsFiles)
eleventyConfig.setLibrary("md", markdownLibrary);
eleventyConfig.setBrowserSyncConfig({
files: '*',
ignore: ['_site', '.gitignore', 'node_modules'],
callbacks: {
ready: function(err, browserSync) {
const content_404 = fs.readFileSync('_site/404.html');
browserSync.addMiddleware("*", (req, res) => {
// Provides the 404 content without redirect.
res.writeHead(404, {"Content-Type": "text/html; charset=UTF-8"});
res.write(content_404);
res.end();
});
},
},
ui: false,
ghostMode: false
});
return {
templateFormats: [
"md",
"njk",
"html",
],
pathPrefix: "/",
markdownTemplateEngine: "njk",
htmlTemplateEngine: "njk",
dataTemplateEngine: false,
dir: {
input: "src",
includes: "_includes",
data: "../_data",
}
};
};