@@ -10,7 +10,42 @@ function findSelfInNavPages(navPages, url) {
1010 }
1111
1212 return null ;
13- }
13+ } ;
14+
15+ const buildTreemap = ( navPages ) => {
16+ let html = `<ul id="treemap">`
17+ let pages = navPages . filter ( p => p . url !== '/' && p . url !== false )
18+ let tree = [ ]
19+
20+ while ( pages . length > 0 ) {
21+ const page = pages . shift ( )
22+
23+ let element = {
24+ name : page . fileSlug ,
25+ html : `<li class="treemap-node"><a href="${ page . url } ">${ page . fileSlug } </a>` ,
26+ children : navPages . filter ( p => p . data . eleventyNavigation ?. parent === page . fileSlug )
27+ }
28+
29+ // remove children from navPages
30+ pages = pages . filter ( p => ! element . children . includes ( p ) )
31+
32+ if ( element . children . length > 0 ) {
33+ element . html += `<ul class="treemap-children">`
34+ element . children . forEach ( child => { element . html += `<li class="treemap-node"><a href="${ child . url } ">${ child . fileSlug } </a></li>` } )
35+ element . html += `</ul>`
36+ }
37+
38+ element . html += `</li>`
39+ tree . push ( element )
40+ }
41+
42+ tree . sort ( ( a , b ) => a . name > b . name ? 1 : - 1 ) // sort tree by name
43+ tree . forEach ( node => html += node . html ) // add html to the treemap
44+
45+ html += `</ul>`
46+
47+ return html
48+ } ;
1449
1550const buildBreadcrumbs = ( navPages , thisPage ) => {
1651 if ( ! thisPage . url ) return '' ; // if permalink is false in frontmatter, don't show breadcrumbs
@@ -35,4 +70,4 @@ const buildBreadcrumbs = (navPages, thisPage) => {
3570 return html ;
3671} ;
3772
38- module . exports = buildBreadcrumbs ;
73+ module . exports = { buildBreadcrumbs, buildTreemap } ;
0 commit comments