diff --git a/.eleventy.js b/.eleventy.js index 207f858..fdd1bc7 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -20,6 +20,8 @@ module.exports = function(eleventyConfig) { eleventyConfig.addCollection("blog", (collectionApi) => { return collectionApi.getFilteredByGlob('./src/blog/*.md').reverse() }) + eleventyConfig.addCollection('categoryList', require('./src/_11ty/getCategoryList')) + eleventyConfig.addCollection('categories', require('./src/_11ty/createCategories')) return { dir: { diff --git a/src/_11ty/createCategories.js b/src/_11ty/createCategories.js new file mode 100644 index 0000000..5304f45 --- /dev/null +++ b/src/_11ty/createCategories.js @@ -0,0 +1,33 @@ +const slugify = require('slugify') + +module.exports = (collectionApi) => { + const categories = {} + + collectionApi.getFilteredByGlob('./src/blog/*.md').forEach(item => { + let category = item.data.category + + // Ignore the ones without a category + if (typeof category !== 'string') + return + + const slug = strToSlug(category) + + if (Array.isArray(categories[slug])) { + categories[slug].push(item) + } else { + categories[slug] = [item] + } + }) + + return categories +} + +function strToSlug(str) { + const options = { + replacement: '-', + remove: /[&,+()$~%.'':*?<>{}]/g, + lower: true, + } + + return slugify(str, options); +} \ No newline at end of file diff --git a/src/_11ty/getCategoryList.js b/src/_11ty/getCategoryList.js new file mode 100644 index 0000000..b9a326b --- /dev/null +++ b/src/_11ty/getCategoryList.js @@ -0,0 +1,43 @@ +const slugify = require('slugify') + +module.exports = (collectionApi) => { + const catPages = [] + let categories = [] + const blogPosts = collectionApi.getFilteredByGlob('./src/blog/*.md') + + blogPosts.map((item) => { + let category = item.data.category + categories.push(category) + }) + + categories = categories.sort(sortAlphabetically) + let temp = [...new Set(categories)] + + temp.forEach((category) => { + let slug = strToSlug(category); + + if(slug !== 'in-the-spotlight') { + catPages.push({ + 'key': slug, + 'name': category + }) + } + }) + + return catPages +} + +function strToSlug(str) { + const options = { + replacement: '-', + remove: /[&,+()$~%.'':*?<>{}]/g, + lower: true, + } + + return slugify(str, options) +} + + +function sortAlphabetically(a, b) { + return a.localeCompare(b, 'en', { sensitivity: 'base' }); +} \ No newline at end of file