-
Notifications
You must be signed in to change notification settings - Fork 130
/
content.11tydata.js
107 lines (106 loc) · 3.09 KB
/
content.11tydata.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
const fs = require('fs-extra');
const serialize = require('serialize-javascript');
/*
* This file controls if files are published or not.
* The filename must match the directory name.
* If frontmatter contains: `published: false` this doc will be omitted from the build for the production env.
*
*/
module.exports = {
eleventyComputed: {
siteEnv: process.env.ELEVENTY_ENV,
fileDate: async (data) => {
const stat = await fs.stat(data.page.inputPath);
const created = new Date(stat.birthtimeMs).toISOString();
return {
published: data.data ? data.date.toISOString() : created,
created,
modifed: new Date(stat.ctimeMs).toISOString(),
};
},
eleventyExcludeFromCollections: (data) => {
if (data.published === false) {
return true;
} else {
return data.eleventyExcludeFromCollections;
}
},
permalink: (data) => {
if (process.env.BUILD_UNPUBLISHED) {
return data.permalink;
} else {
// Don't output files with an explicit "published: false".
return data.published === false ? false : data.permalink;
}
},
title: (data) => {
if (data.tag) {
return `Results for tag "${data.tag}"`;
} else {
return data.title;
}
},
seo: {
title: (data) => {
if (data.permalink === '') {
// Special case the homepage.
return `${data.site.title} | ${data.site.description}`;
} else if (data.tag) {
// Special case tag titles.
return `Results for tag "${data.tag}" | ${data.site.title}`;
} else if (data.title) {
// Use a title if set in the frontmatter.
return `${data.title} | ${data.site.title}`;
} else {
// Use site title as a last resort.
return data.site.title;
}
},
description: (data) => {
return data.description ? data.description : data.site.description;
},
canonicalURL: (data) => {
if (data.canonical_url) {
return data.canonical_url;
}
return data.site.url + data.page.url;
},
jsonLD: (data) => {
const defaultJSON = {
'@context': 'http://schema.org',
url: data.seo.canonicalURL,
};
const webSite = {
...defaultJSON,
'@type': 'WebSite',
name: data.site.title,
};
const webPage = {
...defaultJSON,
'@type': 'WebPage',
name: data.site.title,
};
const techArticle = {
...defaultJSON,
'@type': 'TechArticle',
author: data.author,
datePublished: data.fileDate.published,
headline: data.title,
};
let jsonData;
switch (data.schemaType) {
case 'webSite':
jsonData = webSite;
break;
case 'webPage':
jsonData = webPage;
break;
default:
jsonData = techArticle;
break;
}
return serialize(jsonData, { space: 2, isJSON: true });
},
},
},
};