forked from AstrolabeCAE/SiteWebAstrolabe_public
Previous version made GPDR-friendly
This commit is contained in:
156
.eleventy.js
Normal file
156
.eleventy.js
Normal file
@@ -0,0 +1,156 @@
|
||||
import rssPlugin from '@11ty/eleventy-plugin-rss';
|
||||
import syntaxHighlight from '@11ty/eleventy-plugin-syntaxhighlight';
|
||||
import fs from 'fs';
|
||||
import util from 'util';
|
||||
|
||||
// Import filters
|
||||
import dateFilter from './src/filters/date-filter.js';
|
||||
import markdownFilter from './src/filters/markdown-filter.js';
|
||||
import w3DateFilter from './src/filters/w3-date-filter.js';
|
||||
|
||||
// Import transforms
|
||||
import htmlMinTransform from './src/transforms/html-min-transform.js';
|
||||
import parseTransform from './src/transforms/parse-transform.js';
|
||||
|
||||
// Import data files
|
||||
import {createRequire} from 'node:module';
|
||||
const require = createRequire(import.meta.url);
|
||||
// need this because of issue when using ESM : https://github.com/11ty/eleventy-dependency-tree-esm/issues/2
|
||||
// This will get soon resolved
|
||||
const site = require('./src/_data/site.json');
|
||||
|
||||
export default function(config) {
|
||||
// Filters
|
||||
config.addFilter('dateFilter', dateFilter);
|
||||
config.addFilter('markdownFilter', markdownFilter);
|
||||
config.addFilter('w3DateFilter', w3DateFilter);
|
||||
config.addFilter('dump', obj => {
|
||||
return util.inspect(obj);
|
||||
});
|
||||
|
||||
// Layout aliases
|
||||
config.addLayoutAlias('home', 'layouts/home.njk');
|
||||
|
||||
// Transforms
|
||||
config.addTransform('htmlmin', htmlMinTransform);
|
||||
config.addTransform('parse', parseTransform);
|
||||
|
||||
// Passthrough copy
|
||||
config.addPassthroughCopy('src/fonts');
|
||||
config.addPassthroughCopy('src/images');
|
||||
config.addPassthroughCopy('src/js');
|
||||
config.addPassthroughCopy('src/admin/config.yml');
|
||||
config.addPassthroughCopy('src/admin/previews.js');
|
||||
config.addPassthroughCopy('node_modules/nunjucks/browser/nunjucks-slim.js');
|
||||
config.addPassthroughCopy('src/robots.txt');
|
||||
config.addPassthroughCopy('src/.htaccess');
|
||||
config.addPassthroughCopy('src/form');
|
||||
|
||||
const now = new Date();
|
||||
|
||||
// Custom collections
|
||||
const livePosts = post => post.date <= now && !post.data.draft;
|
||||
const newsPosts = post => post.data.type === 'news';
|
||||
const eventPosts = post => post.data.type === 'event';
|
||||
|
||||
config.addCollection('posts', collection => {
|
||||
return [...collection.getFilteredByGlob('./src/posts/*.md')].reverse();
|
||||
});
|
||||
config.addCollection('news', collection => {
|
||||
return [
|
||||
...collection.getFilteredByGlob('./src/posts/*.md').filter(newsPosts)
|
||||
].reverse();
|
||||
});
|
||||
config.addCollection('events', collection => {
|
||||
return [
|
||||
...collection.getFilteredByGlob('./src/posts/*.md').filter(eventPosts)
|
||||
].reverse();
|
||||
});
|
||||
config.addCollection('newsFeed', collection => {
|
||||
return [...collection.getFilteredByGlob('./src/posts/*.md').filter(livePosts)]
|
||||
.reverse()
|
||||
.slice(0, site.maxNewsPerPage);
|
||||
});
|
||||
config.addCollection('members', collection => {
|
||||
return [...collection.getFilteredByGlob('./src/members/*.md')];
|
||||
});
|
||||
config.addCollection('profiles', collection => {
|
||||
return [...collection.getFilteredByGlob('./src/members/*.md')]
|
||||
.reverse()
|
||||
.slice(0, site.maxProfilePreview);
|
||||
});
|
||||
config.addCollection('tagsList', function(collectionApi) {
|
||||
const tagsList = new Set();
|
||||
collectionApi.getAll().map(item => {
|
||||
if (item.data.tags) {
|
||||
// handle pages that don't have tags
|
||||
item.data.tags.map(tag => tagsList.add(tag));
|
||||
}
|
||||
});
|
||||
return tagsList;
|
||||
});
|
||||
config.addCollection('skillsList', function(collectionApi) {
|
||||
const skillsList = new Set();
|
||||
collectionApi.getFilteredByGlob('./src/members/*.md').map(item => {
|
||||
if (item.data.tags) {
|
||||
// handle pages that don't have skills
|
||||
item.data.tags.map(skill => {
|
||||
// exclude non related tags
|
||||
if (['post', 'news', 'event'].indexOf(skill) == -1) {
|
||||
skillsList.add(skill);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return skillsList;
|
||||
});
|
||||
config.addCollection('membersLocations', function(collectionApi) {
|
||||
return collectionApi
|
||||
.getFilteredByGlob('./src/members/*.md')
|
||||
.filter(item => typeof item.data.location !== 'undefined')
|
||||
.map(member => {
|
||||
return {
|
||||
name: member.data.name,
|
||||
url: member.data.url,
|
||||
location: member.data.location
|
||||
};
|
||||
});
|
||||
});
|
||||
config.addCollection('customers', collection => {
|
||||
return [...collection.getFilteredByGlob('./src/customers/*.md')]
|
||||
.reverse()
|
||||
.slice(0, site.maxCustomerPerPage);
|
||||
});
|
||||
config.addCollection('partners', collection => {
|
||||
return [...collection.getFilteredByGlob('./src/partners/*.md')]
|
||||
.reverse()
|
||||
.slice(0, site.maxPartnerPerPage);
|
||||
});
|
||||
|
||||
// Plugins
|
||||
config.addPlugin(rssPlugin);
|
||||
config.addPlugin(syntaxHighlight);
|
||||
|
||||
// 404
|
||||
config.setBrowserSyncConfig({
|
||||
callbacks: {
|
||||
ready: function(err, browserSync) {
|
||||
const content_404 = fs.readFileSync('dist/404.html');
|
||||
|
||||
browserSync.addMiddleware('*', (req, res) => {
|
||||
// Provides the 404 content without redirect.
|
||||
res.write(content_404);
|
||||
res.end();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
dir: {
|
||||
input: 'src',
|
||||
output: 'dist'
|
||||
},
|
||||
passthroughFileCopy: true
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user