diff --git a/packages/assembler/lib/produce-aggregate-document.js b/packages/assembler/lib/produce-aggregate-document.js index dd6cb605327ce318200bfc53028b5f825cbfb929..9fb3eca7e7e87b811674fc504ee4db36f57b77d2 100644 --- a/packages/assembler/lib/produce-aggregate-document.js +++ b/packages/assembler/lib/produce-aggregate-document.js @@ -52,6 +52,7 @@ function produceAggregateDocument ( function buildAsciiDocHeader (componentVersion, navtitle, doctype = 'book') { const [navtitlePlain, navtitleAsciiDoc] = sanitize(navtitle) let doctitle = navtitleAsciiDoc + doctitle = doctitle.replace(/(<([^>]+)>)/gi, '') if (navtitlePlain !== componentVersion.title) doctitle = `${componentVersion.title}: ${doctitle}` const version = componentVersion.version === 'master' ? '' : componentVersion.version return [ @@ -479,9 +480,11 @@ function generateStem (componentVersion, title) { segments.push( title .toLowerCase() + .replace(/(<([^>]+)>)/gi, '') .replace(/&.+?;|[^ \p{Alpha}0-9_\-.]/gu, '') .replace(/[ _.]/g, '-') .replace(/--+/g, '-') + .replace(/^-*/, '') ) return path.join(...segments) } diff --git a/packages/assembler/lib/produce-aggregate-documents.js b/packages/assembler/lib/produce-aggregate-documents.js index 9fd49102f68a0aa84b80678eaae673290fdf76c7..d4405b82e671df2fff3f857d3cddac7c05354112 100644 --- a/packages/assembler/lib/produce-aggregate-documents.js +++ b/packages/assembler/lib/produce-aggregate-documents.js @@ -117,14 +117,48 @@ function includedInNav (items, url) { // when root level is 1, create navigation per navigation menu // in this case, if there's only a single navigation menu with no title, promote each top-level item to a menu function prepareOutlines (navigation, rootEntry, rootLevel) { + if (isNaN(rootLevel)) { + let items = navigation + if (navigation.length === 1) { + items = navigation[0].items + } + const documents = [] + Object.entries(rootLevel).forEach((entry) => { + const [docName, docUrls] = entry + const buildeditems = items.reduce((navTree, it) => { + if (it.url) { + if ( + docUrls + .map((url) => { + return new RegExp(url).test(it.url) + }) + .includes(true) + ) { + return navTree.concat(it.content ? it : it.items) + } + } + return navTree + }, []) + if (buildeditems.length > 0) { + documents.push({ + content: docName, + items: buildeditems, + }) + } + }) + + return documents + } if (rootLevel === 0 || navigation.length === 1) { const navBranch = navigation.length === 1 ? navigation[0] : { items: navigation.reduce((navTree, it) => navTree.concat(it.content ? it : it.items), []) } - return rootLevel === 0 || navBranch.content ? [Object.assign(rootEntry, navBranch)] : navBranch.items + const result = rootLevel === 0 || navBranch.content ? [Object.assign(rootEntry, navBranch)] : navBranch.items + return result } - return navigation.reduce((navTree, it) => navTree.concat(it.content ? it : it.items), [rootEntry]) + const result = navigation.reduce((navTree, it) => navTree.concat(it.content ? it : it.items), [rootEntry]) + return result } module.exports = produceAggregateDocuments