From 144ac65ebe72b36bc026caed854b66eef76f2f26 Mon Sep 17 00:00:00 2001 From: Ajit Date: Thu, 28 Dec 2023 04:28:00 +0530 Subject: [PATCH] feat: support h3 subheadings in toc --- .../components/(tabs)/tabs.page.ts | 4 ++-- .../layout/page-nav/page-nav.component.ts | 23 +++++++++++++------ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/apps/app/src/app/pages/(components)/components/(tabs)/tabs.page.ts b/apps/app/src/app/pages/(components)/components/(tabs)/tabs.page.ts index 219646411..ad2a47243 100644 --- a/apps/app/src/app/pages/(components)/components/(tabs)/tabs.page.ts +++ b/apps/app/src/app/pages/(components)/components/(tabs)/tabs.page.ts @@ -67,14 +67,14 @@ export const routeMeta: RouteMeta = { Examples -

Default

+

Default

-

Vertical

+

Vertical

diff --git a/apps/app/src/app/shared/layout/page-nav/page-nav.component.ts b/apps/app/src/app/shared/layout/page-nav/page-nav.component.ts index e0b01efe2..42f9c187d 100644 --- a/apps/app/src/app/shared/layout/page-nav/page-nav.component.ts +++ b/apps/app/src/app/shared/layout/page-nav/page-nav.component.ts @@ -1,3 +1,4 @@ +import { NgClass } from '@angular/common'; import { AfterViewInit, Component, @@ -17,12 +18,13 @@ import { PageNavLinkComponent } from './page-nav-link.component'; type SamePageAnchorLink = { id: string; label: string; + isNested: boolean; }; @Component({ selector: 'spartan-page-nav', standalone: true, - imports: [HlmScrollAreaComponent, PageNavLinkComponent], + imports: [HlmScrollAreaComponent, NgClass, PageNavLinkComponent], host: { class: 'hidden xl:block text-sm', }, @@ -34,7 +36,11 @@ type SamePageAnchorLink = {
    @for (link of links(); track link.id) { - + } @empty { @if (isDevMode()) { [DEV] Nothing to see here! @@ -56,11 +62,14 @@ export class PageNavComponent implements OnInit, AfterViewInit, OnDestroy { private page: HTMLElement = (inject(ElementRef).nativeElement as HTMLElement).previousSibling as HTMLElement; ngOnInit() { - const headings = Array.from(this.page.querySelectorAll('spartan-section-sub-heading')); - const links = headings.map(({ id, children }) => ({ - id, - label: children[0].childNodes[0].textContent ?? '[DEV] Empty heading!', - })); + const selectors = ['spartan-section-sub-heading', '[spartanMainSection] > h3']; + const headings = Array.from(this.page.querySelectorAll(selectors.join(','))); + const links = headings.map((element) => { + const { id, children, localName, textContent } = element; + const isSubHeading = localName === 'spartan-section-sub-heading'; + const label = (isSubHeading ? children[0].childNodes[0].textContent : textContent) ?? '[DEV] Empty heading!'; + return { id, label, isNested: !isSubHeading }; + }); this.links.set(links); } ngAfterViewInit() {