Skip to content

Commit 36070b4

Browse files
committed
Update Twitter logo to X
1 parent 420ce67 commit 36070b4

1 file changed

Lines changed: 108 additions & 80 deletions

File tree

.eleventy.js

Lines changed: 108 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,112 @@
11
const fs = require('fs');
2+
const path = require('path');
23

34
// Plugins
45
const eleventyNavigationPlugin = require('@11ty/eleventy-navigation');
5-
const build = require('./src/_data/build');
6+
const build = require('./src/_data/build') || {};
67
const i18n = require('eleventy-plugin-i18n');
78
const markdownIt = require('markdown-it');
89
const markdownItAnchor = require('markdown-it-anchor');
910
const sitemap = require('@quasibit/eleventy-plugin-sitemap');
1011
const translations = require('./src/_data/i18n');
1112

1213
module.exports = function (eleventyConfig) {
13-
console.log(process.env.NODE_ENV);
14+
console.log(`Running in environment: ${process.env.NODE_ENV || 'development'}`);
1415

1516
// Hot-reload site on CSS changes
1617
eleventyConfig.addWatchTarget('src/css');
1718
eleventyConfig.addWatchTarget('src/_11ty');
1819

20+
// Helper function to check if a file exists before requiring it
21+
const requireIfExists = filePath => {
22+
if (!fs.existsSync(filePath)) {
23+
console.warn(`Missing file: ${filePath}`);
24+
}
25+
return fs.existsSync(filePath) ? require(filePath) : () => {};
26+
};
27+
1928
// Collections
20-
const collectionsDir = `./src/_11ty/collections`;
21-
eleventyConfig.addCollection('primary', require(`${collectionsDir}/primary.js`));
22-
eleventyConfig.addCollection('sitemap', require(`${collectionsDir}/sitemap.js`));
29+
const collectionsDir = './src/_11ty/collections';
30+
eleventyConfig.addCollection('primary', requireIfExists(`${collectionsDir}/primary.js`));
31+
eleventyConfig.addCollection('sitemap', requireIfExists(`${collectionsDir}/sitemap.js`));
2332

2433
// Filters
25-
const filtersDir = `./src/_11ty/filters`;
26-
eleventyConfig.addFilter('chunkByYear', require(`${filtersDir}/chunkByYear.js`));
27-
eleventyConfig.addFilter('cleanCardContent', require(`${filtersDir}/cleanCardContent.js`));
28-
eleventyConfig.addFilter('cleanSearchRaw', require(`${filtersDir}/cleanSearchRaw.js`));
29-
eleventyConfig.addFilter('endsWith', require(`${filtersDir}/endsWith.js`));
30-
eleventyConfig.addFilter('formatDate', require(`${filtersDir}/formatDate.js`));
31-
eleventyConfig.addFilter('formatDateRange', require(`${filtersDir}/formatDateRange.js`));
32-
eleventyConfig.addFilter('getArticleType', require(`${filtersDir}/getArticleType.js`));
33-
eleventyConfig.addFilter('getCollectionByTag', require(`${filtersDir}/getCollectionByTag.js`));
34-
eleventyConfig.addFilter('getCollectionTags', require(`${filtersDir}/getCollectionTags.js`));
35-
eleventyConfig.addFilter('getItems', require(`${filtersDir}/getItems.js`));
36-
eleventyConfig.addFilter('getItemsByLocale', require(`${filtersDir}/getItemsByLocale.js`));
37-
eleventyConfig.addFilter('getItemsInFuture', require(`${filtersDir}/getItemsInFuture.js`));
38-
eleventyConfig.addFilter('getItemsInPast', require(`${filtersDir}/getItemsInPast.js`));
39-
eleventyConfig.addFilter('getJobs', require(`${filtersDir}/getJobs.js`));
40-
eleventyConfig.addFilter('getSingleDigitFromDate', require(`${filtersDir}/getSingleDigitFromDate.js`));
41-
eleventyConfig.addFilter('isInFuture', require(`${filtersDir}/isInFuture.js`));
42-
eleventyConfig.addFilter('objectValues', require(`${filtersDir}/objectValues.js`));
43-
eleventyConfig.addFilter('randomize', require(`${filtersDir}/randomize.js`));
44-
eleventyConfig.addFilter('removeHtml', require(`${filtersDir}/removeHtml.js`));
45-
eleventyConfig.addFilter('removeTags', require(`${filtersDir}/removeTags.js`));
46-
eleventyConfig.addFilter('startsWith', require(`${filtersDir}/startsWith.js`));
47-
eleventyConfig.addFilter('truncate', require(`${filtersDir}/truncate.js`));
48-
49-
// Layout aliases — TBC if this is bringing enough benefit
50-
eleventyConfig.addLayoutAlias('base', 'layouts/_base.njk');
51-
eleventyConfig.addLayoutAlias('blog-post', 'layouts/blog-post.njk');
52-
eleventyConfig.addLayoutAlias('case-study', 'layouts/case-study.njk');
53-
eleventyConfig.addLayoutAlias('content', 'layouts/content.njk');
54-
eleventyConfig.addLayoutAlias('content-simple', 'layouts/content-simple.njk');
55-
eleventyConfig.addLayoutAlias('content-support', 'layouts/content-support.njk');
56-
eleventyConfig.addLayoutAlias('event', 'layouts/event.njk');
57-
eleventyConfig.addLayoutAlias('home', 'layouts/home.njk');
58-
eleventyConfig.addLayoutAlias('press-release', 'layouts/press-release.njk');
59-
eleventyConfig.addLayoutAlias('hub-community', 'layouts/hub-community.njk');
60-
eleventyConfig.addLayoutAlias('hub-developers', 'layouts/hub-developers.njk');
61-
eleventyConfig.addLayoutAlias('hub-discover', 'layouts/hub-discover.njk');
62-
eleventyConfig.addLayoutAlias('hub-foundation', 'layouts/hub-foundation.njk');
63-
eleventyConfig.addLayoutAlias('hub-news', 'layouts/hub-news.njk');
64-
eleventyConfig.addLayoutAlias('hub-users', 'layouts/hub-users.njk');
65-
eleventyConfig.addLayoutAlias('listing-blog-posts', 'layouts/listing-blog-posts.njk');
66-
eleventyConfig.addLayoutAlias('listing-blog-post-categories', 'layouts/listing-blog-post-categories.njk');
67-
eleventyConfig.addLayoutAlias('listing-blog-search', 'layouts/listing-blog-search.njk');
68-
eleventyConfig.addLayoutAlias('listing-case-studies', 'layouts/listing-case-studies.njk');
69-
eleventyConfig.addLayoutAlias('listing-case-study-categories', 'layouts/listing-case-study-categories.njk');
70-
eleventyConfig.addLayoutAlias('listing-events', 'layouts/listing-events.njk');
71-
eleventyConfig.addLayoutAlias('listing-event-categories', 'layouts/listing-event-categories.njk');
72-
eleventyConfig.addLayoutAlias('listing-planet-ceph-articles', 'layouts/listing-planet-ceph-articles.njk');
73-
eleventyConfig.addLayoutAlias('listing-press-releases', 'layouts/listing-press-releases.njk');
74-
eleventyConfig.addLayoutAlias('listing-press-release-categories', 'layouts/listing-press-release-categories.njk');
75-
eleventyConfig.addLayoutAlias('navigation', 'layouts/navigation.njk');
34+
const filtersDir = './src/_11ty/filters';
35+
const filterFiles = [
36+
'chunkByYear',
37+
'cleanCardContent',
38+
'cleanSearchRaw',
39+
'endsWith',
40+
'formatDate',
41+
'formatDateRange',
42+
'getArticleType',
43+
'getCollectionByTag',
44+
'getCollectionTags',
45+
'getItems',
46+
'getItemsByLocale',
47+
'getItemsInFuture',
48+
'getItemsInPast',
49+
'getJobs',
50+
'getSingleDigitFromDate',
51+
'isInFuture',
52+
'objectValues',
53+
'randomize',
54+
'removeHtml',
55+
'removeTags',
56+
'startsWith',
57+
'truncate',
58+
];
59+
60+
filterFiles.forEach(filter => {
61+
eleventyConfig.addFilter(filter, requireIfExists(`${filtersDir}/${filter}.js`));
62+
});
63+
64+
// Layout aliases
65+
const layoutAliases = {
66+
base: 'layouts/_base.njk',
67+
'blog-post': 'layouts/blog-post.njk',
68+
'case-study': 'layouts/case-study.njk',
69+
content: 'layouts/content.njk',
70+
'content-simple': 'layouts/content-simple.njk',
71+
'content-support': 'layouts/content-support.njk',
72+
event: 'layouts/event.njk',
73+
home: 'layouts/home.njk',
74+
'press-release': 'layouts/press-release.njk',
75+
'hub-community': 'layouts/hub-community.njk',
76+
'hub-developers': 'layouts/hub-developers.njk',
77+
'hub-discover': 'layouts/hub-discover.njk',
78+
'hub-foundation': 'layouts/hub-foundation.njk',
79+
'hub-news': 'layouts/hub-news.njk',
80+
'hub-users': 'layouts/hub-users.njk',
81+
'listing-blog-posts': 'layouts/listing-blog-posts.njk',
82+
'listing-blog-post-categories': 'layouts/listing-blog-post-categories.njk',
83+
'listing-blog-search': 'layouts/listing-blog-search.njk',
84+
'listing-case-studies': 'layouts/listing-case-studies.njk',
85+
'listing-case-study-categories': 'layouts/listing-case-study-categories.njk',
86+
'listing-events': 'layouts/listing-events.njk',
87+
'listing-event-categories': 'layouts/listing-event-categories.njk',
88+
'listing-planet-ceph-articles': 'layouts/listing-planet-ceph-articles.njk',
89+
'listing-press-releases': 'layouts/listing-press-releases.njk',
90+
'listing-press-release-categories': 'layouts/listing-press-release-categories.njk',
91+
navigation: 'layouts/navigation.njk',
92+
};
93+
94+
Object.entries(layoutAliases).forEach(([alias, layoutPath]) => {
95+
const fullPath = path.join(__dirname, 'src/_includes', layoutPath);
96+
if (!fs.existsSync(fullPath)) {
97+
console.error(`Missing layout: ${layoutPath}`);
98+
}
99+
eleventyConfig.addLayoutAlias(alias, layoutPath);
100+
});
76101

77102
// Shortcodes
78-
const shortcodesDir = `./src/_11ty/shortcodes`;
79-
eleventyConfig.addShortcode('ArticleCard', require(`${shortcodesDir}/ArticleCard.js`));
80-
eleventyConfig.addShortcode('YouTube', require(`${shortcodesDir}/YouTube.js`));
103+
const shortcodesDir = './src/_11ty/shortcodes';
104+
eleventyConfig.addShortcode('ArticleCard', requireIfExists(`${shortcodesDir}/ArticleCard.js`));
105+
eleventyConfig.addShortcode('YouTube', requireIfExists(`${shortcodesDir}/YouTube.js`));
81106

82107
// Transforms
83-
const transformsDir = `./src/_11ty/transforms`;
84-
eleventyConfig.addTransform('htmlmin', require(`${transformsDir}/html-minifier.js`));
108+
const transformsDir = './src/_11ty/transforms';
109+
eleventyConfig.addTransform('htmlmin', requireIfExists(`${transformsDir}/html-minifier.js`));
85110

86111
// Passthrough copy
87112
eleventyConfig.addPassthroughCopy('./src/assets/**/*.json');
@@ -97,57 +122,60 @@ module.exports = function (eleventyConfig) {
97122
});
98123
eleventyConfig.addPlugin(sitemap, {
99124
sitemap: {
100-
hostname: build.isProduction ? 'https://ceph.io' : 'https://develop.ceph.io',
125+
hostname: build && build.isProduction ? 'https://ceph.io' : 'https://develop.ceph.io',
101126
},
102127
});
128+
103129
// Markdown overrides
104130
let markdownLibrary = markdownIt({
105131
html: true,
106132
linkify: true,
107133
}).use(markdownItAnchor, {
108134
level: [2, 3, 4, 5, 6],
109135
permalink: true,
110-
permalinkClass: 'link-anchor',
111-
permalinkSymbol: '¶',
136+
permalinkClass: 'direct-link',
137+
permalinkSymbol: '🔗',
138+
space: true,
112139
});
113140

114141
eleventyConfig.setLibrary('md', markdownLibrary);
115142

116143
// Run after the build ends
117144
eleventyConfig.on('afterBuild', () => {
118-
require('./scripts/search-index.js');
145+
const searchIndexPath = './scripts/search-index.js';
146+
if (fs.existsSync(searchIndexPath)) {
147+
require(searchIndexPath);
148+
} else {
149+
console.warn('Warning: search-index.js not found, skipping post-build task.');
150+
}
119151
});
120152

121153
eleventyConfig.setServerOptions({
122-
// Swapping back to Browsersync
123-
// See https://www.11ty.dev/docs/dev-server/#swap-back-to-browsersync
124154
module: '@11ty/eleventy-server-browsersync',
125155
callbacks: {
126156
ready: function (err, bs) {
127157
bs.addMiddleware('*', (req, res) => {
128-
// Dev mode redirect for root path to default language
129158
if (req.url === '/') {
130-
res.writeHead(302, {
131-
location: '/en/',
132-
});
159+
res.writeHead(302, { location: '/en/' });
133160
res.end();
161+
} else {
162+
const errorPagePath = path.join(__dirname, 'src/en/404.html');
163+
if (fs.existsSync(errorPagePath)) {
164+
const content_404 = fs.readFileSync(errorPagePath);
165+
res.writeHead(404);
166+
res.end(content_404);
167+
} else {
168+
res.writeHead(404, { 'Content-Type': 'text/plain' });
169+
res.end('404 Not Found');
170+
}
134171
}
135-
136-
// 404 on --serve
137-
// https://www.11ty.dev/docs/quicktips/not-found/#with-serve
138-
const content_404 = fs.readFileSync('dist/en/404.html');
139-
res.write(content_404);
140-
res.writeHead(404);
141-
res.end();
142172
});
143173
},
144174
},
145175
});
146176

147177
// Configuration
148178
eleventyConfig.setDataDeepMerge(true);
149-
// TBC if this is a bit heavy-handed
150-
// See https://www.11ty.dev/docs/data-deep-merge/
151179

152180
return {
153181
htmlTemplateEngine: 'njk',

0 commit comments

Comments
 (0)