const htmlmin = require('html-minifier'); const dateFns = require('date-fns'); const lazyImagesPlugin = require('eleventy-plugin-lazyimages'); const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight'); const i18n = require('eleventy-plugin-i18n'); const translations = require('./src/_data/i18n'); module.exports = function (eleventyConfig) { // PLUGINS ************************************************************** eleventyConfig.addPlugin(syntaxHighlight); // does not work with background images eleventyConfig.addPlugin(lazyImagesPlugin, { transformImgPath: (imgPath) => { if (imgPath.startsWith('http://') || imgPath.startsWith('https://')) { // Handle remote file return imgPath; } else { return `./src/${imgPath}`; } }, }); eleventyConfig.addPlugin(i18n, { translations, fallbackLocales: { '*': 'en-US', }, }); eleventyConfig.setEjsOptions({ rmWhitespace: true, context: { dateFns, }, }); eleventyConfig.setBrowserSyncConfig({ files: './_site/assets/styles/main.css', }); // use this to redirect to en-US // eleventyConfig.setBrowserSyncConfig({ // files: './_site/assets/styles/main.css', // callbacks: { // ready: function (err, bs) { // bs.addMiddleware('*', (req, res) => { // if (req.url === '/') { // res.writeHead(302, { // location: '/en-US/' // }); // res.end(); // } // }); // } // } // }); eleventyConfig.addPassthroughCopy('styles/fonts'); eleventyConfig.addPassthroughCopy('src/assets/images/**/*.png'); eleventyConfig.addPassthroughCopy('src/assets/images/**/*.svg'); eleventyConfig.addPassthroughCopy('src/assets/images/**/*.jpg'); eleventyConfig.addPassthroughCopy('node_modules/@glidejs/glide/dist'); eleventyConfig.addPassthroughCopy('node_modules/blueimp-md5/js'); eleventyConfig.addTransform('htmlmin', (content, outputPath) => { if (outputPath.endsWith('.html')) { const minified = htmlmin.minify(content, { useShortDoctype: true, removeComments: true, collapseWhitespace: true, minifyJS: true, }); return minified; } return content; }); // Import fast-glob package const fg = require('fast-glob'); // Run search for images in /screenshots const galleryThumbnails = fg.sync(['**/images/screenshots/*resized*', '!**/_site']); const galleryImagesAll = fg.sync(['**/images/screenshots/*', '!**/_site']); //Create collection of screenshots eleventyConfig.addCollection('screenshotThumbnails', function (collection) { return galleryThumbnails.map((url) => { return url.replace('src/', ''); }); }); //Create collection of screenshots eleventyConfig.addCollection('screenshotHires', function (collection) { return galleryImagesAll .filter((url) => !url.includes('resized')) .map((url) => { return url.replace('src/', ''); }); }); return { passthroughFileCopy: true, dir: { input: 'src', output: '_site', data: '_data' }, }; // return { // templateFormats: ['md', 'njk', 'html', 'liquid'], // // If your site lives in a different subdirectory, change this. // // Leading or trailing slashes are all normalized away, so don’t worry about it. // // If you don’t have a subdirectory, use "" or "/" (they do the same thing) // // This is only used for URLs (it does not affect your file structure) // pathPrefix: '/', // markdownTemplateEngine: 'liquid', // htmlTemplateEngine: 'njk', // dataTemplateEngine: 'njk', // passthroughFileCopy: true, // dir: { // input: '.', // includes: '_includes', // data: '_data', // output: 'docs', // }, // }; };