Skip to content

Instantly share code, notes, and snippets.

@scriptype
Created March 20, 2018 13:46
Show Gist options
  • Save scriptype/bdc86e88dfeb8b643e63d0c626c06c82 to your computer and use it in GitHub Desktop.
Save scriptype/bdc86e88dfeb8b643e63d0c626c06c82 to your computer and use it in GitHub Desktop.
Traverse deep categoryTree recursively
function rootTemplate(categories) {
return `
<div class="root-container">
${ getCategoryMarkup(categories) }
</div>
`
}
function itemsTemplate(items, level) {
return `
<div class="cat-items">
${items.reduce((titles, item) => `
${titles}
<h${level}>${item.title}</h${level}>
`, '')}
</div>
`
}
function categoryTemplate(category, title, level) {
return `
<div class="cat cat--level-${level}">
<h${level}>${title}</h${level}>
${ getCategoryMarkup(category, level + 1) }
</div>
`
}
function getCategoryMarkup(category, level = 1) {
return Object.keys(category).reduce((markup, key, index) => {
var node = category[key]
var newMarkup = key === 'items' ?
itemsTemplate(node, level) :
categoryTemplate(node, key, level)
return markup + newMarkup
}, '')
}
// For debugging
var el = document.createElement('div')
el.innerHTML = rootTemplate(categories)
el.firstElementChild
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment