| const htmlmin = require("html-minifier"); |
| const CleanCSS = require("clean-css"); |
| const sass = require("sass"); |
| const pluginRss = require("@11ty/eleventy-plugin-rss"); |
| |
| module.exports = function (eleventyConfig) { |
| // filters are used to modify the data used by a template |
| eleventyConfig.addLiquidFilter("getNewestCollectionItemDate", pluginRss.getNewestCollectionItemDate); |
| eleventyConfig.addLiquidFilter("dateToRfc3339", pluginRss.dateToRfc3339); |
| eleventyConfig.addLiquidFilter("dateToRfc822", pluginRss.dateToRfc822); |
| eleventyConfig.addLiquidFilter("absoluteUrl", pluginRss.absoluteUrl); |
| eleventyConfig.addLiquidFilter("htmlToAbsoluteUrls", pluginRss.convertHtmlToAbsoluteUrls); |
| eleventyConfig.addFilter("getSliceOfCollectionItems", function(value) { |
| return value.slice(0, Math.min(value.length, 3)); |
| }); |
| eleventyConfig.addFilter("excerpt", (post) => { |
| const content = post.replace(/(<([^>]+)>)/gi, ""); |
| return content.substr(0, content.lastIndexOf(" ", 200)) + "..."; |
| }); |
| |
| // copy these files to the output directory |
| // if the directories contain any template extensions (such as.html or .md), |
| // be sure to add the directory to .eleventyignore |
| eleventyConfig.addPassthroughCopy("img"); |
| eleventyConfig.addPassthroughCopy(".htaccess"); |
| eleventyConfig.addPassthroughCopy("asdoc"); |
| eleventyConfig.addPassthroughCopy("blog-examples"); |
| eleventyConfig.addPassthroughCopy("tourdejewel"); |
| eleventyConfig.addPassthroughCopy("blog/downloads"); |
| |
| // compile sass files into css files |
| eleventyConfig.addTemplateFormats("sass"); |
| eleventyConfig.addExtension("sass", { |
| outputFileExtension: "css", |
| compileOptions: { |
| // don't cache because @import won't work |
| cache: false |
| }, |
| compile: async function (inputContent) { |
| let result = sass.compileString(inputContent, { |
| loadPaths: [ |
| this.config.dir.includes |
| ] |
| }); |
| return async (data) => { |
| return new CleanCSS().minify(result.css).styles; |
| }; |
| } |
| }); |
| |
| // minify HTML |
| eleventyConfig.addTransform("htmlmin", function (content) { |
| if (this.outputPath && this.outputPath.endsWith(".html")) { |
| return htmlmin.minify(content, { |
| useShortDoctype: true, |
| removeComments: true, |
| collapseWhitespace: true, |
| minifyJS: true, |
| minifyCSS: true |
| }); |
| } |
| return content; |
| }); |
| } |