in docs_template/publish.js [385:576]
function buildNav(members) {
let globalNav;
let nav = '<h2><a href="index.html">Home</a></h2>';
const seen = {};
const seenTutorials = {};
const paths = new Set();
Object.values(members).forEach(items => {
items.forEach(item => {
if (item.meta) {
paths.add(item.meta.path);
}
});
});
const splitStrings = (a, sep = '/') => a.map(i => i.split(sep));
const elAt = i => a => a[i];
const rotate = a => a[0].map((e, i) => a.map(elAt(i)));
const allElementsEqual = arr => arr.every(e => e === arr[0]);
const commonPath = (input, sep = '/') =>
`${rotate(splitStrings(input, sep))
.filter(allElementsEqual)
.map(elAt(0))
.join(sep)}${sep}`;
const capitalize = s => s.charAt(0).toUpperCase() + s.slice(1);
const basePath = commonPath(Array.from(paths));
const localPaths = Array.from(paths).map(each => each.replace(basePath, ''));
const builds = [...new Set(localPaths.map(p => p.split('/')[0]))].sort();
builds.forEach(buildName => {
const modules = members.modules.filter(
m =>
m.meta && m.meta.path.replace(basePath, '').startsWith(`${buildName}`)
);
const externals = members.externals.filter(
e =>
e.meta && e.meta.path.replace(basePath, '').startsWith(`${buildName}`)
);
const namespaces = members.namespaces.filter(
n =>
n.meta && n.meta.path.replace(basePath, '').startsWith(`${buildName}`)
);
const classes = members.classes.filter(
c =>
c.meta && c.meta.path.replace(basePath, '').startsWith(`${buildName}`)
);
const interfaces = members.interfaces.filter(
i =>
i.meta && i.meta.path.replace(basePath, '').startsWith(`${buildName}`)
);
const events = members.events.filter(
e =>
e.meta && e.meta.path.replace(basePath, '').startsWith(`${buildName}`)
);
const mixins = members.mixins.filter(
m =>
m.meta && m.meta.path.replace(basePath, '').startsWith(`${buildName}`)
);
const globals = members.globals.filter(
g =>
g.meta && g.meta.path.replace(basePath, '').startsWith(`${buildName}`)
);
if (
![
modules,
externals,
namespaces,
classes,
interfaces,
events,
mixins,
].some(a => a.length)
) {
return;
}
nav += `<h2><span class="toggle opened"></span>${capitalize(
buildName
)}</h2><div class="content active"><ul>`;
if (modules.length) {
nav += `<li><ul><li class="node">${buildMemberNav(
modules,
'Modules',
{},
linkto
)}</li></ul></li>`;
}
if (externals.length) {
nav += `<li><ul><li class="node">${buildMemberNav(
externals,
'Externals',
seen,
linktoExternal
)}</li></ul></li>`;
}
if (namespaces.length) {
nav += `<li><ul><li class="node">${buildMemberNav(
namespaces,
'Namespaces',
seen,
linkto
)}</li></ul></li>`;
}
if (classes.length) {
nav += `<li><ul><li class="node">${buildMemberNav(
classes,
'Classes',
seen,
linkto
)}</li></ul></li>`;
}
if (interfaces.length) {
nav += `<li><ul><li class="node">${buildMemberNav(
interfaces,
'Interfaces',
seen,
linkto
)}</li></ul></li>`;
}
if (events.length) {
nav += `<li><ul><li class="node">${buildMemberNav(
events,
'Events',
seen,
linkto
)}</li></ul></li>`;
}
if (mixins.length) {
nav += `<li><ul><li class="node">${buildMemberNav(
mixins,
'Mixins',
seen,
linkto
)}</li></ul></li>`;
}
if (globals.length) {
globalNav = '';
globals.forEach(({kind, longname, name}) => {
if (kind !== 'typedef' && !hasOwnProp.call(seen, longname)) {
globalNav += `<li>${linkto(longname, name)}</li>`;
}
seen[longname] = true;
});
if (!globalNav) {
// turn the heading into a link so you can actually get to the global page
nav += `<h3>${linkto('global', 'Global')}</h3>`;
} else {
nav += `<h3>Global</h3><ul>${globalNav}</ul>`;
}
}
nav += '</ul></div>';
});
/*nav += buildMemberNav(members.modules, 'Modules', {}, linkto);
nav += buildMemberNav(members.externals, 'Externals', seen, linktoExternal);
nav += buildMemberNav(members.namespaces, 'Namespaces', seen, linkto);
nav += buildMemberNav(members.classes, 'Classes', seen, linkto);
nav += buildMemberNav(members.interfaces, 'Interfaces', seen, linkto);
nav += buildMemberNav(members.events, 'Events', seen, linkto);
nav += buildMemberNav(members.mixins, 'Mixins', seen, linkto);*/
nav += buildMemberNav(
members.tutorials,
'Tutorials',
seenTutorials,
linktoTutorial
);
/*if (members.globals.length) {
globalNav = '';
members.globals.forEach(({kind, longname, name}) => {
if (kind !== 'typedef' && !hasOwnProp.call(seen, longname)) {
globalNav += `<li>${linkto(longname, name)}</li>`;
}
seen[longname] = true;
});
if (!globalNav) {
// turn the heading into a link so you can actually get to the global page
nav += `<h3>${linkto('global', 'Global')}</h3>`;
} else {
nav += `<h3>Global</h3><ul>${globalNav}</ul>`;
}
}*/
return nav;
}