77 lines
2.3 KiB
JavaScript
77 lines
2.3 KiB
JavaScript
const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight')
|
|
const markdownIt = require('markdown-it')
|
|
const markdownItAnchor = require('markdown-it-anchor')
|
|
const htmlmin = require("html-minifier")
|
|
|
|
module.exports = function(eleventyConfig) {
|
|
// Plugins
|
|
eleventyConfig.addPlugin(syntaxHighlight)
|
|
eleventyConfig.addTransform("htmlmin", (content, outputPath) => {
|
|
if (outputPath.endsWith(".html")) {
|
|
return htmlmin.minify(content, {
|
|
collapseWhitespace: true,
|
|
removeComments: true,
|
|
useShortDoctype: true,
|
|
});
|
|
}
|
|
|
|
return content;
|
|
});
|
|
|
|
// To enable merging of tags
|
|
eleventyConfig.setDataDeepMerge(true)
|
|
|
|
// Copy these static files to _site folder
|
|
eleventyConfig.addPassthroughCopy('src/assets')
|
|
eleventyConfig.addPassthroughCopy('src/manifest.json')
|
|
|
|
// To create excerpts
|
|
eleventyConfig.setFrontMatterParsingOptions({
|
|
excerpt: true,
|
|
excerpt_alias: 'post_excerpt',
|
|
excerpt_separator: '<!-- excerpt -->'
|
|
})
|
|
|
|
// To create a filter to determine duration of post
|
|
eleventyConfig.addFilter('readTime', (value) => {
|
|
const content = value
|
|
const textOnly = content.split(" ") // content.replace(/(<([^>]+)>)/gi, '')
|
|
const readingSpeedPerMin = 200
|
|
return Math.max(1, Math.floor(textOnly.length / readingSpeedPerMin))
|
|
})
|
|
|
|
// get proper date in utc
|
|
eleventyConfig.addFilter('realDate', (value) => {
|
|
const actualDate = new Date(value);
|
|
actualDate.setDate(actualDate.getDate() + 1);
|
|
return actualDate;
|
|
})
|
|
|
|
// Enable us to iterate over all the tags, excluding posts and all
|
|
eleventyConfig.addCollection('tagList', collection => {
|
|
const tagsSet = new Set()
|
|
collection.getAll().forEach(item => {
|
|
if (!item.data.tags) return
|
|
item.data.tags
|
|
.filter(tag => !['posts', 'all'].includes(tag))
|
|
.forEach(tag => tagsSet.add(tag))
|
|
})
|
|
return Array.from(tagsSet).sort()
|
|
})
|
|
|
|
const md = markdownIt({ linkify: true, html: true })
|
|
md.use(markdownItAnchor, { level: [1, 2], permalink: true, permalinkBefore: false, permalinkSymbol: '#' })
|
|
eleventyConfig.setLibrary('md', md)
|
|
|
|
// asset_img shortcode
|
|
eleventyConfig.addLiquidShortcode('asset_img', (filename, css) => {
|
|
return `<img class="my-4" src="/assets/img/posts/${filename}" style="${css}" />`
|
|
})
|
|
|
|
return {
|
|
dir: {
|
|
input: 'src'
|
|
}
|
|
}
|
|
}
|