-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
103 lines (89 loc) · 2.63 KB
/
Copy pathindex.js
File metadata and controls
103 lines (89 loc) · 2.63 KB
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
import markdownIt from 'markdown-it';
import syntaxHighlightPlugin from '@11ty/eleventy-plugin-syntaxhighlight';
import {
slideDataParser,
slideStyles,
buildSlides,
getSlideResources,
} from './utils/slides.js';
import { slideImg } from './utils/img.js';
export default async function(eleventyConfig, options) {
options = Object.assign({
markdownIt: {
html: true,
breaks: false,
typographer: true,
},
// markdownFunctions: {
// inline: (function),
// block: (function),
// },
// imgDir: (path relative to content folder),
// buildFunction: (function),
collectionName: 'slideDeck',
known: {
slides: 'knownSlides',
series: 'knownSeries',
},
// eventDateLocale: (locale),
eventDateFormat: {
year: 'numeric',
month: 'long',
day: 'numeric',
},
}, options);
if (!options.markdownFunctions) {
const mdDefault = markdownIt(options.markdownIt).disable('code');
options.markdownFunctions = {
inline: (content) => mdDefault.renderInline(content),
block: (content) => mdDefault.render(content),
};
}
// data
eleventyConfig.addGlobalData("slideDeckConfig", options);
eleventyConfig.addDataExtension("slides", {
parser: slideDataParser,
read: false,
encoding: "utf8",
});
eleventyConfig.addTemplateFormats("deck");
eleventyConfig.addExtension("deck", {
getData: async (inputPath) => slideDataParser(inputPath),
compile: async (inputContent) => {
let output = options.markdownFunctions.block(inputContent);
return async () => { return output; };
},
});
// slides
eleventyConfig.addFilter('buildSlides', buildSlides);
eleventyConfig.addFilter('slideStyles', slideStyles);
eleventyConfig.addFilter('slideImg', (src, dir) =>
slideImg(src, dir || options.imgDir || '')
);
// markdown
eleventyConfig.addPlugin(syntaxHighlightPlugin);
eleventyConfig.addFilter(
'slideMarkdownBlock',
options.markdownFunctions.block
);
eleventyConfig.addFilter(
'slideMarkdownInline',
options.markdownFunctions.inline
);
// collection
eleventyConfig.addCollection(options.collectionName, (collectionApi) => {
return collectionApi
.getAll()
.filter((item) => item.data.slides)
.map((item) => {
item.data.slideDeck = buildSlides({
slides: item.data.slides,
knownSlides: item.data[options.known.slides],
knownSeries: item.data[options.known.series],
buildFn: options.buildFunction,
});
item.data.slideResources = getSlideResources(item.data.slideDeck);
return item;
});
});
}