mirror of
https://github.com/fooflington/selfdefined.git
synced 2025-09-14 19:49:05 +00:00
feat(eleventy): split table of content into sub sections
This commit is contained in:
59
.eleventy.js
59
.eleventy.js
@@ -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 i’ve 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: 'A–E',
|
||||
definitions: []
|
||||
},
|
||||
fToL: {
|
||||
title: 'F–L',
|
||||
definitions: []
|
||||
},
|
||||
mToS: {
|
||||
title: 'M–S',
|
||||
definitions: []
|
||||
},
|
||||
tToZ: {
|
||||
title: 'T–Z',
|
||||
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 => {
|
||||
|
Reference in New Issue
Block a user