UNPKG

4.77 kBSource Map (JSON)View Raw
1{"version":3,"file":"NavigationPlugin.js","sourceRoot":"","sources":["../../../../src/lib/output/plugins/NavigationPlugin.ts"],"names":[],"mappings":";;;;;;;;AAAA,8CAA6D;AAE7D,sCAAqD;AAWrD,IAAa,gBAAgB,GAA7B,MAAa,gBAAiB,SAAQ,8BAAiB;IASnD,UAAU;QACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;YACtB,CAAC,sBAAa,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,eAAe;YAC3C,CAAC,kBAAS,CAAC,KAAK,CAAC,EAAM,IAAI,CAAC,WAAW;SAC1C,CAAC,CAAC;IACP,CAAC;IAOO,eAAe,CAAC,KAAoB;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAOO,WAAW,CAAC,IAAe;QAC/B,MAAM,YAAY,GAAqB,EAAE,CAAC;QAC1C,CAAC,SAAS,UAAU,CAAC,IAAoB;YACrC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAI,KAAK,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAEhC,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;gBACxF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC3B;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;aACvD;QACL,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpB,YAAY,CAAC,OAAO,CAAC,CAAC,IAAgC,EAAE,EAAE;YACtD,IAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YAEvB,IAAI,KAAK,GAAG,IAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,EAAE;gBACT,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC;gBACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAEtB,KAAK,IAAI,CAAC,CAAC;gBACX,KAAK,IAAI,CAAC,CAAC;gBACX,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC9B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;wBACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;4BAC5B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;wBAC3B,CAAC,CAAC,CAAC;qBACN;iBACJ;gBAED,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;aACtB;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACtC,CAAC;CACJ,CAAA;AAxEY,gBAAgB;IAD5B,sBAAS,CAAC,EAAC,IAAI,EAAE,YAAY,EAAC,CAAC;GACnB,gBAAgB,CAwE5B;AAxEY,4CAAgB","sourcesContent":["import { Component, RendererComponent } from '../components';\nimport { NavigationItem } from '../models/NavigationItem';\nimport { RendererEvent, PageEvent } from '../events';\n\n/**\n * A plugin that exposes the navigation structure of the documentation\n * to the rendered templates.\n *\n * The navigation structure is generated using the current themes\n * [[BaseTheme.getNavigation]] function. This plugins takes care that the navigation\n * is updated and passed to the render context.\n */\n@Component({name: 'navigation'})\nexport class NavigationPlugin extends RendererComponent {\n /**\n * The navigation structure generated by the current theme.\n */\n navigation!: NavigationItem;\n\n /**\n * Create a new NavigationPlugin instance.\n */\n initialize() {\n this.listenTo(this.owner, {\n [RendererEvent.BEGIN]: this.onBeginRenderer,\n [PageEvent.BEGIN]: this.onBeginPage\n });\n }\n\n /**\n * Triggered before the renderer starts rendering a project.\n *\n * @param event An event object describing the current render operation.\n */\n private onBeginRenderer(event: RendererEvent) {\n this.navigation = this.owner.theme!.getNavigation(event.project);\n }\n\n /**\n * Triggered before a document will be rendered.\n *\n * @param page An event object describing the current render operation.\n */\n private onBeginPage(page: PageEvent) {\n const currentItems: NavigationItem[] = [];\n (function updateItem(item: NavigationItem) {\n item.isCurrent = false;\n item.isInPath = false;\n item.isVisible = item.isGlobals;\n\n if (item.url === page.url || (item.dedicatedUrls && item.dedicatedUrls.includes(page.url))) {\n currentItems.push(item);\n }\n\n if (item.children) {\n item.children.forEach((child) => updateItem(child));\n }\n })(this.navigation);\n\n currentItems.forEach((item: NavigationItem | undefined) => {\n item!.isCurrent = true;\n\n let depth = item!.isGlobals ? -1 : 0;\n let count = 1;\n while (item) {\n item.isInPath = true;\n item.isVisible = true;\n\n count += 1;\n depth += 1;\n if (item.children) {\n count += item.children.length;\n if (depth < 2 || count < 30) {\n item.children.forEach((child) => {\n child.isVisible = true;\n });\n }\n }\n\n item = item.parent;\n }\n });\n\n page.navigation = this.navigation;\n }\n}\n"]}
\No newline at end of file