feat(eleventy): split table of content into sub sections

This commit is contained in:
Oscar
2019-11-15 22:19:37 +01:00
parent fad87004ce
commit 71de563b97
5 changed files with 95 additions and 29 deletions

View File

@@ -21,15 +21,68 @@ module.exports = function (config) {
config.addPassthroughCopy({'_site/css/': 'assets/css/'})
// Add collections here
// NOTE (ovlb): this will not be remembered as the best code ive written. if anyone seeing this has a better solution then the following to achieve sub groups of the definitions: i am happy to get rid of it
config.addCollection('definitions', collection => {
return collection
const allItems = collection
.getFilteredByGlob('./11ty/definitions/*.md')
.sort((a, b) => {
// `toLowerCase()` is just a safety measure, slugs should be lower case anyway
// `localeCompare()` is super cool: http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
return a.data.title.toLowerCase().localeCompare(b.data.title.toLowerCase())
})
const split = {
notLetters: {
title: '#',
definitions: []
},
aToE: {
title: 'AE',
definitions: []
},
fToL: {
title: 'FL',
definitions: []
},
mToS: {
title: 'MS',
definitions: []
},
tToZ: {
title: 'TZ',
definitions: []
}
}
allItems.forEach(word => {
const { title } = word.data
const { notLetters, aToE, fToL, mToS, tToZ } = split
if (/^[a-e]/gmi.test(title)) {
return aToE.definitions.push(word)
}
if (/^[f-l]/i.test(title)) {
return fToL.definitions.push(word)
}
if (/^[m-s]/i.test(title)) {
return mToS.definitions.push(word)
}
if (/^[t-z]/i.test(title)) {
return tToZ.definitions.push(word)
}
// no reg ex as the fallback to avoid testing for emojis and numbers
notLetters.definitions.push(word)
})
return Object.keys(split).map(key => {
const { title, definitions } = split[key]
return { title, definitions }
})
})
config.addCollection('definedWords', collection => {