lib/filters/navigation.js (43 lines of code) (raw):

module.exports = function(nodes = [], navigation = {}, key = "") { let pages = []; let versionNodes = nodes.filter(a => a.data.eleventyNavigation.version == navigation.version); for(let entry of versionNodes) { if(entry.data && entry.data.eleventyNavigation) { let nav = entry.data.eleventyNavigation; if(!key && !nav.parent || nav.parent === key) { pages.push(Object.assign({}, nav, { url: nav.url || entry.data.page.url, pluginType: "eleventy-navigation" }, key ? { parentKey: key } : {})); } } } return pages.sort(function(a, b) { return (a.order || 0) - (b.order || 0); }).map(function(entry) { if(!entry.title) { entry.title = entry.key; } if(entry.key) { entry.children = findChildEntries(versionNodes, entry.key, entry.version); } return entry; }); function findChildEntries(versionNodes, key, version) { let childs = []; for(let entry of versionNodes) { if(entry.data && entry.data.eleventyNavigation) { let nav = entry.data.eleventyNavigation; if (version == nav.version) { if(!key && !nav.parent || nav.parent === key) { childs.push(Object.assign({}, nav, { url: nav.url || entry.data.page.url, pluginType: "eleventy-navigation" }, key ? { parentKey: key } : {})); } } } } return childs; } };