From 1ce46a2e71a84b94e47afbd7d135f3229023879d Mon Sep 17 00:00:00 2001 From: Razon Yang Date: Tue, 4 Jun 2024 20:12:11 +0800 Subject: [PATCH] perf: cache sidebar and using JavaScript to locate current active menu (#707) --- assets/hb/modules/docs/js/index.ts | 1 + assets/hb/modules/docs/js/nav.ts | 27 +++++++++++++++++++++++ layouts/docs/list.html | 2 +- layouts/docs/single.html | 2 +- layouts/partials/hb/modules/docs/nav.html | 12 ++++------ 5 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 assets/hb/modules/docs/js/nav.ts diff --git a/assets/hb/modules/docs/js/index.ts b/assets/hb/modules/docs/js/index.ts index 448780e2..0bebcaf0 100644 --- a/assets/hb/modules/docs/js/index.ts +++ b/assets/hb/modules/docs/js/index.ts @@ -1,2 +1,3 @@ import "js/bootstrap/src/collapse"; +import "./nav"; import "./nav-toggle"; diff --git a/assets/hb/modules/docs/js/nav.ts b/assets/hb/modules/docs/js/nav.ts new file mode 100644 index 00000000..43544f88 --- /dev/null +++ b/assets/hb/modules/docs/js/nav.ts @@ -0,0 +1,27 @@ +(() => { + const activeParent = (child: HTMLElement) => { + const parent = child.parentElement?.closest('.hb-docs-nav-links-group') as HTMLElement + if (parent == null) { + return + } + + parent.querySelector('.collapse')?.classList.add('show') + const heading = parent.querySelector('.hb-docs-nav-heading') as HTMLElement + heading.classList.add('active') + heading.querySelector('.hb-docs-nav-item-toggle')?.setAttribute('aria-expanded', 'true') + console.log(parent.closest('.hb-docs-nav-links-group')) + activeParent(parent) + } + + const active = (link: HTMLElement) => { + link.classList.add('active') + activeParent(link) + } + + const link = document.querySelector(`.hb-docs-nav-links a[href="${location.pathname}"]`) as HTMLElement + if (link == null) { + return + } + + active(link) +})() diff --git a/layouts/docs/list.html b/layouts/docs/list.html index 333420f7..c1eb2574 100644 --- a/layouts/docs/list.html +++ b/layouts/docs/list.html @@ -1,7 +1,7 @@ {{- define "main" }}
- {{ partial "hb/modules/docs/nav" . }} + {{ partialCached "hb/modules/docs/nav" . .FirstSection }}
{{ partial "hugopress/functions/render-hooks" (dict "Page" . "Name" "hb-docs-main-begin") }} diff --git a/layouts/docs/single.html b/layouts/docs/single.html index cd4c7d1b..832b8edf 100644 --- a/layouts/docs/single.html +++ b/layouts/docs/single.html @@ -1,7 +1,7 @@ {{- define "main" }}
- {{ partial "hb/modules/docs/nav" . }} + {{ partialCached "hb/modules/docs/nav" . .FirstSection }}
{{ partial "hugopress/functions/render-hooks" (dict "Page" . "Name" "hb-docs-main-begin") }} diff --git a/layouts/partials/hb/modules/docs/nav.html b/layouts/partials/hb/modules/docs/nav.html index f2d3ee78..1b3c3bfd 100644 --- a/layouts/partials/hb/modules/docs/nav.html +++ b/layouts/partials/hb/modules/docs/nav.html @@ -28,11 +28,7 @@
{{- $border := default true site.Params.hb.docs.navs_border }} {{- range .Tree }} {{- $node := . }} - {{- $active := eq $page.RelPermalink .Page.RelPermalink }} {{- if $node.Page.IsSection }} - {{- if partial "hb/modules/docs/functions/is-section-page" (dict "Page" $page "Section" $node.Page) }} - {{- $active = true }} - {{- end }}