From b01c8ee405702e8b45362972c97e4a403643ca30 Mon Sep 17 00:00:00 2001 From: Xin Date: Sun, 29 Dec 2024 00:33:09 +0000 Subject: [PATCH] chore: add example sidebar data file - update docs - replace original sidebar template with new sidebar template - update references names --- assets/css/compiled/main.css | 91 --------- .../content/docs/guide/configuration.md | 29 ++- exampleSite/data/en/sidebar.yaml | 49 +++++ exampleSite/hugo.yaml | 4 + exampleSite/hugo_stats.json | 24 --- layouts/_default/list.html | 2 +- layouts/_default/single.html | 2 +- layouts/_default/wide.html | 2 +- layouts/blog/list.html | 2 +- layouts/blog/single.html | 2 +- layouts/docs/list.html | 2 +- layouts/docs/single.html | 2 +- layouts/hextra-home.html | 2 +- layouts/index.html | 2 +- layouts/partials/sidebar-ng.html | 92 --------- layouts/partials/sidebar.html | 193 ++++++------------ 16 files changed, 147 insertions(+), 353 deletions(-) create mode 100644 exampleSite/data/en/sidebar.yaml delete mode 100644 layouts/partials/sidebar-ng.html diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index 5965990..fe2cea7 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -860,9 +860,6 @@ video { .hx-justify-center { justify-content: center; } -.hx-justify-between { - justify-content: space-between; -} .hx-justify-items-start { justify-items: start; } @@ -1028,10 +1025,6 @@ video { --tw-bg-opacity: 1; background-color: rgb(255 247 237 / var(--tw-bg-opacity)); } -.hx-bg-primary-100 { - --tw-bg-opacity: 1; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / var(--tw-bg-opacity)); -} .hx-bg-primary-400 { --tw-bg-opacity: 1; background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 16) / var(--tw-bg-opacity)); @@ -1311,10 +1304,6 @@ video { --tw-text-opacity: 1; color: rgb(154 52 18 / var(--tw-text-opacity)); } -.hx-text-primary-800 { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 32) / var(--tw-text-opacity)); -} .hx-text-red-900 { --tw-text-opacity: 1; color: rgb(127 29 29 / var(--tw-text-opacity)); @@ -2813,11 +2802,6 @@ body:is(html[class~="dark"] *) { content: var(--tw-content); inset: 0px; } -.before\:hx-inset-y-1::before { - content: var(--tw-content); - top: 0.25rem; - bottom: 0.25rem; -} .before\:hx-mr-1::before { content: var(--tw-content); margin-right: 0.25rem; @@ -2826,37 +2810,16 @@ body:is(html[class~="dark"] *) { content: var(--tw-content); display: inline-block; } -.before\:hx-w-px::before { - content: var(--tw-content); - width: 1px; -} -.before\:hx-bg-gray-200::before { - content: var(--tw-content); - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} -.before\:hx-opacity-25::before { - content: var(--tw-content); - opacity: 0.25; -} .before\:hx-transition-transform::before { content: var(--tw-content); transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } -.before\:hx-content-\[\'\#\'\]::before { - --tw-content: '#'; - content: var(--tw-content); -} .before\:hx-content-\[\'\'\]::before { --tw-content: ''; content: var(--tw-content); } -.before\:hx-content-\[\\\"\\\"\]::before { - --tw-content: \"\"; - content: var(--tw-content); -} .first\:hx-mt-0:first-child { margin-top: 0px; } @@ -3035,15 +2998,6 @@ body:is(html[class~="dark"] *) { border-color: rgb(163 163 163 / var(--tw-border-opacity)); } - .contrast-more\:hx-border-primary-500 { - --tw-border-opacity: 1; - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); - } - - .contrast-more\:hx-border-transparent { - border-color: transparent; - } - .contrast-more\:hx-font-bold { font-weight: 700; } @@ -3082,11 +3036,6 @@ body:is(html[class~="dark"] *) { --tw-shadow-colored: 0 0 #0000; box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } - - .contrast-more\:hover\:hx-border-gray-900:hover { - --tw-border-opacity: 1; - border-color: rgb(17 24 39 / var(--tw-border-opacity)); - } } .dark\:hx-block:is(html[class~="dark"] *) { display: block; @@ -3172,9 +3121,6 @@ body:is(html[class~="dark"] *) { .dark\:hx-bg-primary-300\/10:is(html[class~="dark"] *) { background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / 0.1); } -.dark\:hx-bg-primary-400\/10:is(html[class~="dark"] *) { - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 16) / 0.1); -} .dark\:hx-bg-primary-600:is(html[class~="dark"] *) { --tw-bg-opacity: 1; background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-bg-opacity)); @@ -3233,18 +3179,10 @@ body:is(html[class~="dark"] *) { --tw-text-opacity: 1; color: rgb(229 229 229 / var(--tw-text-opacity)); } -.dark\:hx-text-neutral-400:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(163 163 163 / var(--tw-text-opacity)); -} .dark\:hx-text-orange-300:is(html[class~="dark"] *) { --tw-text-opacity: 1; color: rgb(253 186 116 / var(--tw-text-opacity)); } -.dark\:hx-text-primary-600:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); -} .dark\:hx-text-red-200:is(html[class~="dark"] *) { --tw-text-opacity: 1; color: rgb(254 202 202 / var(--tw-text-opacity)); @@ -3286,11 +3224,6 @@ body:is(html[class~="dark"] *) { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity)); } -.dark\:before\:hx-bg-neutral-800:is(html[class~="dark"] *)::before { - content: var(--tw-content); - --tw-bg-opacity: 1; - background-color: rgb(38 38 38 / var(--tw-bg-opacity)); -} .dark\:before\:hx-invert:is(html[class~="dark"] *)::before { content: var(--tw-content); --tw-invert: invert(100%); @@ -3406,11 +3339,6 @@ body:is(html[class~="dark"] *) { border-color: rgb(163 163 163 / var(--tw-border-opacity)); } - .contrast-more\:dark\:hx-border-primary-500:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); - } - .dark\:contrast-more\:hx-border-neutral-400:is(html[class~="dark"] *) { --tw-border-opacity: 1; border-color: rgb(163 163 163 / var(--tw-border-opacity)); @@ -3446,11 +3374,6 @@ body:is(html[class~="dark"] *) { --tw-shadow-colored: 0 0 #0000; box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } - - .contrast-more\:dark\:hover\:hx-border-gray-50:hover:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(249 250 251 / var(--tw-border-opacity)); - } } @media not all and (min-width: 1280px) { @@ -3598,9 +3521,6 @@ body:is(html[class~="dark"] *) { .ltr\:hx-ml-1:where([dir="ltr"], [dir="ltr"] *) { margin-left: 0.25rem; } -.ltr\:hx-ml-3:where([dir="ltr"], [dir="ltr"] *) { - margin-left: 0.75rem; -} .ltr\:hx-ml-auto:where([dir="ltr"], [dir="ltr"] *) { margin-left: auto; } @@ -3650,10 +3570,6 @@ body:is(html[class~="dark"] *) { .ltr\:hx-text-right:where([dir="ltr"], [dir="ltr"] *) { text-align: right; } -.ltr\:before\:hx-left-0:where([dir="ltr"], [dir="ltr"] *)::before { - content: var(--tw-content); - left: 0px; -} @media (min-width: 768px) { .ltr\:md\:hx-left-auto:where([dir="ltr"], [dir="ltr"] *) { @@ -3675,9 +3591,6 @@ body:is(html[class~="dark"] *) { .rtl\:hx-mr-1:where([dir="rtl"], [dir="rtl"] *) { margin-right: 0.25rem; } -.rtl\:hx-mr-3:where([dir="rtl"], [dir="rtl"] *) { - margin-right: 0.75rem; -} .rtl\:hx-mr-auto:where([dir="rtl"], [dir="rtl"] *) { margin-right: auto; } @@ -3721,10 +3634,6 @@ body:is(html[class~="dark"] *) { .rtl\:hx-text-left:where([dir="rtl"], [dir="rtl"] *) { text-align: left; } -.rtl\:before\:hx-right-0:where([dir="rtl"], [dir="rtl"] *)::before { - content: var(--tw-content); - right: 0px; -} .rtl\:before\:hx-rotate-180:where([dir="rtl"], [dir="rtl"] *)::before { content: var(--tw-content); --tw-rotate: 180deg; diff --git a/exampleSite/content/docs/guide/configuration.md b/exampleSite/content/docs/guide/configuration.md index 9c7a8f6..35625e3 100644 --- a/exampleSite/content/docs/guide/configuration.md +++ b/exampleSite/content/docs/guide/configuration.md @@ -87,7 +87,7 @@ params: ### Main Sidebar -For the main sidebar, it is automatically generated from the structure of the content directory. +By default, the main sidebar is automatically generated from the structure of the content directory. See the [Organize Files](/docs/guide/organize-files) page for more details. To exclude a single page from the left sidebar, set the `sidebar.exclude` parameter in the front matter of the page: @@ -119,6 +119,33 @@ menu: weight: 3 ``` +### Sidebar from Data + +Alternatively, you can define the sidebar structure in the `data` directory. This gives you more flexibility to define sidebar differently than your content structure. To enable this, set the `params.sidebar.source` parameter in the config file to `data`: + +```yaml {filename="hugo.yaml"} +params: + sidebar: + source: data +``` + +To define the sidebar data, create a file named `sidebar.yaml` in the `data` directory. + +```yaml {filename="data/sidebar.yaml"} +docs: + - title: Documentation + link: /docs/ + - title: Guide + link: /docs/guide/ + open: false + items: + - title: Configuration + link: /docs/guide/configuration/ + # ... +``` + +If your site is multilingual, you can define the sidebar data for each language, for example in `data/en/sidebar.yaml` file. + ## Right Sidebar ### Table of Contents diff --git a/exampleSite/data/en/sidebar.yaml b/exampleSite/data/en/sidebar.yaml new file mode 100644 index 0000000..132f347 --- /dev/null +++ b/exampleSite/data/en/sidebar.yaml @@ -0,0 +1,49 @@ +docs: + - title: Documentation + link: /docs/ + - title: Getting Started + link: /docs/getting-started/ + - title: Guide + link: /docs/guide/ + open: false + items: + - title: Organize Files + link: /docs/guide/organize-files/ + - title: Configuration + link: /docs/guide/configuration/ + - title: Markdown + link: /docs/guide/markdown/ + - title: Syntax Highlighting + link: /docs/guide/syntax-highlighting/ + - title: LaTeX + link: /docs/guide/latex/ + - title: Diagrams + link: /docs/guide/diagrams/ + - title: Shortcodes + link: /docs/guide/shortcodes/ + items: + - title: Callout + link: /docs/guide/shortcodes/callout/ + - title: Cards + link: /docs/guide/shortcodes/cards/ + - title: Details + link: /docs/guide/shortcodes/details/ + - title: FileTree + link: /docs/guide/shortcodes/filetree/ + - title: Icon + link: /docs/guide/shortcodes/icon/ + - title: Steps + link: /docs/guide/shortcodes/steps/ + - title: Tabs + link: /docs/guide/shortcodes/tabs/ + - title: Deploy Site + link: /docs/guide/deploy-site/ + - title: Advanced + link: /docs/advanced/ + items: + - title: Multi-language + link: /docs/advanced/multi-language/ + - title: Comments + link: /docs/advanced/comments/ + - title: Customization + link: /docs/advanced/customization/ diff --git a/exampleSite/hugo.yaml b/exampleSite/hugo.yaml index c8c3301..ff8ea4f 100644 --- a/exampleSite/hugo.yaml +++ b/exampleSite/hugo.yaml @@ -113,6 +113,10 @@ params: # full (100%), wide (90rem), normal (1280px) width: normal + # TODO: move one level up + sidebar: + source: data + theme: # light | dark | system default: system diff --git a/exampleSite/hugo_stats.json b/exampleSite/hugo_stats.json index 8ea454d..68656eb 100644 --- a/exampleSite/hugo_stats.json +++ b/exampleSite/hugo_stats.json @@ -76,40 +76,29 @@ "active:hx-shadow-sm", "before:hx-absolute", "before:hx-bg-glass-gradient", - "before:hx-bg-gray-200", - "before:hx-content-[\"\"]", - "before:hx-content-['#']", "before:hx-content-['']", "before:hx-inline-block", "before:hx-inset-0", - "before:hx-inset-y-1", "before:hx-mr-1", - "before:hx-opacity-25", "before:hx-pointer-events-none", "before:hx-transition-transform", - "before:hx-w-px", "chroma", "content", - "contrast-more:dark:hover:hx-border-gray-50", "contrast-more:dark:hx-border-current", "contrast-more:dark:hx-border-gray-50", "contrast-more:dark:hx-border-neutral-400", - "contrast-more:dark:hx-border-primary-500", "contrast-more:dark:hx-shadow-[0_0_0_1px_#fff]", "contrast-more:dark:hx-shadow-none", "contrast-more:dark:hx-text-current", "contrast-more:dark:hx-text-gray-100", "contrast-more:dark:hx-text-gray-300", "contrast-more:dark:hx-text-gray-50", - "contrast-more:hover:hx-border-gray-900", "contrast-more:hx-border", "contrast-more:hx-border-current", "contrast-more:hx-border-gray-800", "contrast-more:hx-border-gray-900", "contrast-more:hx-border-neutral-400", - "contrast-more:hx-border-primary-500", "contrast-more:hx-border-t", - "contrast-more:hx-border-transparent", "contrast-more:hx-font-bold", "contrast-more:hx-shadow-[0_0_0_1px_#000]", "contrast-more:hx-shadow-none", @@ -119,7 +108,6 @@ "contrast-more:hx-text-gray-900", "contrast-more:hx-underline", "copy-icon", - "dark:before:hx-bg-neutral-800", "dark:before:hx-invert", "dark:contrast-more:hx-border-neutral-400", "dark:focus:hx-bg-dark", @@ -154,7 +142,6 @@ "dark:hx-bg-neutral-900", "dark:hx-bg-orange-400/20", "dark:hx-bg-primary-300/10", - "dark:hx-bg-primary-400/10", "dark:hx-bg-primary-600", "dark:hx-bg-red-900/30", "dark:hx-bg-yellow-700/30", @@ -188,9 +175,7 @@ "dark:hx-text-green-200", "dark:hx-text-indigo-200", "dark:hx-text-neutral-200", - "dark:hx-text-neutral-400", "dark:hx-text-orange-300", - "dark:hx-text-primary-600", "dark:hx-text-red-200", "dark:hx-text-slate-100", "dark:hx-text-yellow-200", @@ -288,7 +273,6 @@ "hx-bg-indigo-100", "hx-bg-neutral-50", "hx-bg-orange-50", - "hx-bg-primary-100", "hx-bg-primary-400", "hx-bg-primary-600", "hx-bg-primary-700/5", @@ -360,7 +344,6 @@ "hx-inset-y-0", "hx-items-center", "hx-items-start", - "hx-justify-between", "hx-justify-center", "hx-justify-end", "hx-justify-items-start", @@ -509,7 +492,6 @@ "hx-text-left", "hx-text-lg", "hx-text-orange-800", - "hx-text-primary-800", "hx-text-red-900", "hx-text-slate-900", "hx-text-sm", @@ -553,11 +535,9 @@ "last-of-type:hx-mb-0", "lntable", "lntd", - "ltr:before:hx-left-0", "ltr:hx--mr-4", "ltr:hx-border-l", "ltr:hx-ml-1", - "ltr:hx-ml-3", "ltr:hx-ml-auto", "ltr:hx-mr-auto", "ltr:hx-pl-12", @@ -609,7 +589,6 @@ "print:hx-bg-transparent", "print:hx-hidden", "rtl:-hx-rotate-180", - "rtl:before:hx-right-0", "rtl:before:hx-rotate-180", "rtl:hx--ml-4", "rtl:hx-border-r", @@ -617,7 +596,6 @@ "rtl:hx-left-3", "rtl:hx-ml-auto", "rtl:hx-mr-1", - "rtl:hx-mr-3", "rtl:hx-mr-auto", "rtl:hx-pl-2", "rtl:hx-pl-4", @@ -634,8 +612,6 @@ "search-input", "search-results", "search-wrapper", - "sidebar-active-item", - "sidebar-container", "sm:hx-block", "sm:hx-flex", "sm:hx-items-start", diff --git a/layouts/_default/list.html b/layouts/_default/list.html index 01d4259..8328099 100644 --- a/layouts/_default/list.html +++ b/layouts/_default/list.html @@ -1,7 +1,7 @@ {{ define "main" }}
{{- if not (in (slice "taxonomy" "term") .Kind) -}} - {{- partial "sidebar-ng.html" (dict "context" .) -}} + {{- partial "sidebar.html" (dict "context" .) -}} {{- end -}} {{ partial "toc.html" . }}
diff --git a/layouts/_default/single.html b/layouts/_default/single.html index b4c6ee2..fb8c990 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -1,6 +1,6 @@ {{ define "main" }}
- {{ partial "sidebar-ng.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }} + {{ partial "sidebar.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }} {{ partial "toc.html" . }}
diff --git a/layouts/_default/wide.html b/layouts/_default/wide.html index af0045a..ec7abe1 100644 --- a/layouts/_default/wide.html +++ b/layouts/_default/wide.html @@ -1,6 +1,6 @@ {{ define "main" }}
- {{ partial "sidebar-ng.html" (dict "context" . "disableSidebar" true "displayPlaceholder" false) }} + {{ partial "sidebar.html" (dict "context" . "disableSidebar" true "displayPlaceholder" false) }}

{{ if .Title }}

{{ .Title }}

{{ end }} diff --git a/layouts/blog/list.html b/layouts/blog/list.html index 3668f68..5f0cca7 100644 --- a/layouts/blog/list.html +++ b/layouts/blog/list.html @@ -1,7 +1,7 @@ {{ define "main" }} {{- $readMore := (T "readMore") | default "Read more →" -}}
- {{ partial "sidebar-ng.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }} + {{ partial "sidebar.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }}

diff --git a/layouts/blog/single.html b/layouts/blog/single.html index 2d4ff2e..75fa392 100644 --- a/layouts/blog/single.html +++ b/layouts/blog/single.html @@ -1,6 +1,6 @@ {{ define "main" }}
- {{ partial "sidebar-ng.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }} + {{ partial "sidebar.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }} {{ partial "toc.html" . }}
diff --git a/layouts/docs/list.html b/layouts/docs/list.html index 9101c6f..8ed116c 100644 --- a/layouts/docs/list.html +++ b/layouts/docs/list.html @@ -1,6 +1,6 @@ {{ define "main" }}
- {{ partial "sidebar-ng.html" (dict "context" .) }} + {{ partial "sidebar.html" (dict "context" .) }} {{ partial "toc.html" . }}
diff --git a/layouts/docs/single.html b/layouts/docs/single.html index 9101c6f..8ed116c 100644 --- a/layouts/docs/single.html +++ b/layouts/docs/single.html @@ -1,6 +1,6 @@ {{ define "main" }}
- {{ partial "sidebar-ng.html" (dict "context" .) }} + {{ partial "sidebar.html" (dict "context" .) }} {{ partial "toc.html" . }}
diff --git a/layouts/hextra-home.html b/layouts/hextra-home.html index ea0c54c..54d792d 100644 --- a/layouts/hextra-home.html +++ b/layouts/hextra-home.html @@ -1,6 +1,6 @@ {{ define "main" }}
- {{ partial "sidebar-ng.html" (dict "context" . "disableSidebar" true) }} + {{ partial "sidebar.html" (dict "context" . "disableSidebar" true) }}
{{ .Content }} diff --git a/layouts/index.html b/layouts/index.html index 6805f3a..2b99236 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,6 +1,6 @@ {{ define "main" }}
- {{ partial "sidebar-ng.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }} + {{ partial "sidebar.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }} {{ partial "toc.html" . }}
diff --git a/layouts/partials/sidebar-ng.html b/layouts/partials/sidebar-ng.html deleted file mode 100644 index e5dd04e..0000000 --- a/layouts/partials/sidebar-ng.html +++ /dev/null @@ -1,92 +0,0 @@ -{{- $context := .context -}} - -{{- $disableSidebar := .disableSidebar | default false -}} -{{- $displayPlaceholder := .displayPlaceholder | default false -}} - -{{- $sidebarClass := cond $disableSidebar (cond $displayPlaceholder "md:hx-hidden xl:hx-block" "md:hx-hidden") "md:hx-sticky" -}} - -{{- $navRoot := cond (eq site.Home.Type "docs") site.Home $context.FirstSection -}} -{{- $pageURL := $context.RelPermalink -}} - -{{- $data := slice -}} -{{- $dataMobile := slice -}} - -{{- if (eq site.Params.page.sidebar.source "data") -}} - {{ $data = partialCached "components/sidebar/get-section-data" $context $context.Section }} - {{- $dataMobile = $data -}} -{{- else -}} - {{- $data = (partialCached "components/sidebar/generate-section-data" $navRoot $navRoot) | unmarshal -}} - {{- $dataMobile = (partialCached "components/sidebar/generate-section-data" site.Home site.Home) | unmarshal -}} -{{- end -}} - -{{- $shouldCache := site.Params.page.sidebar.cache | default false -}} - -{{/* EXPERIMENTAL */}} -{{- if .context.Params.sidebar.hide -}} - {{- $disableSidebar = true -}} - {{- $displayPlaceholder = true -}} -{{- end -}} - -
- - - -{{- define "partials/components/sidebar/mobile-search" -}} -
- {{- partialCached "search.html" . -}} -
-{{- end -}} - -{{- define "partials/components/sidebar/switches" -}} - {{- $context := .context -}} - {{- $disableSidebar := .disableSidebar -}} - {{/* Hide theme switch when sidebar is disabled */}} - {{ $switchesClass := cond $disableSidebar "md:hx-hidden" "" -}} - {{ $displayThemeToggle := (site.Params.theme.displayToggle | default true) -}} - - {{ if or hugo.IsMultilingual $displayThemeToggle }} -
- {{- with hugo.IsMultilingual -}} - {{- partial "language-switch" (dict "context" $context "grow" true) -}} - {{- with $displayThemeToggle }}{{ partial "theme-toggle" (dict "hideLabel" true) }}{{ end -}} - {{- else -}} - {{- with $displayThemeToggle -}} -
{{ partial "theme-toggle" }}
- {{- end -}} - {{- end -}} -
- {{- end -}} -{{- end -}} diff --git a/layouts/partials/sidebar.html b/layouts/partials/sidebar.html index 6698f10..4a2da3f 100644 --- a/layouts/partials/sidebar.html +++ b/layouts/partials/sidebar.html @@ -3,48 +3,89 @@ {{- $disableSidebar := .disableSidebar | default false -}} {{- $displayPlaceholder := .displayPlaceholder | default false -}} +{{/* EXPERIMENTAL - allow hiding sidebar on a per-page basis */}} +{{- if $context.Params.sidebar.hide -}} + {{- $disableSidebar = true -}} + {{- $displayPlaceholder = true -}} +{{- end -}} + {{- $sidebarClass := cond $disableSidebar (cond $displayPlaceholder "md:hx-hidden xl:hx-block" "md:hx-hidden") "md:hx-sticky" -}} {{- $navRoot := cond (eq site.Home.Type "docs") site.Home $context.FirstSection -}} {{- $pageURL := $context.RelPermalink -}} -{{/* EXPERIMENTAL */}} -{{- if .context.Params.sidebar.hide -}} - {{- $disableSidebar = true -}} - {{- $displayPlaceholder = true -}} +{{- $data := slice -}} +{{- $dataMobile := slice -}} + +{{- if (eq site.Params.page.sidebar.source "data") -}} + {{/* Get sidebar data from Hugo `data` directory */}} + {{- $data = partialCached "components/sidebar/get-section-data" $context $context.Section -}} + {{- $dataMobile = $data -}} +{{- else -}} + {{/* Generate and cache sidebar data in memory */}} + {{- $data = (partialCached "components/sidebar/generate-section-data" $navRoot $navRoot) | unmarshal -}} + {{- $dataMobile = (partialCached "components/sidebar/generate-section-data" site.Home site.Home) | unmarshal -}} {{- end -}} +{{- if not (hugo.IsProduction) -}} + {{ with $data }}{{ warnf "%v" (debug.Dump .) }}{{ end }} +{{- end -}} + +{{/* Cache rendered sidebar */}} +{{- $shouldCache := site.Params.page.sidebar.cache | default false -}}
- - -{{- define "sidebar-main" -}} - {{ template "sidebar-tree" (dict "context" .context "level" 0 "page" .page "pageURL" .pageURL "toc" (.toc | default false)) }} -{{- end -}} - -{{- define "sidebar-tree" -}} - {{- if ge .level 4 -}} - {{- return -}} - {{- end -}} - - {{- $context := .context -}} - {{- $page := .page }} - {{- $pageURL := .page.RelPermalink -}} - {{- $level := .level -}} - {{- $toc := .toc | default false -}} - - {{- with $items := union .context.RegularPages .context.Sections -}} - {{- $items = where $items "Params.sidebar.exclude" "!=" true -}} - {{- if eq $level 0 -}} - {{- range $items.ByWeight }} - {{- if .Params.sidebar.separator -}} -
  • - {{ partial "utils/title" . }} -
  • - {{- else -}} - {{- $active := eq $pageURL .RelPermalink -}} - {{- $shouldOpen := or (.Params.sidebar.open) (.IsAncestor $page) $active | default true }} -
  • - {{- $linkTitle := partial "utils/title" . -}} - {{- template "sidebar-item-link" dict "context" . "active" $active "title" $linkTitle "link" .RelPermalink -}} - {{- if and $toc $active -}} - {{- template "sidebar-toc" dict "page" . -}} - {{- end -}} - {{- template "sidebar-tree" dict "context" . "page" $page "pageURL" $pageURL "level" (add $level 1) "toc" $toc -}} -
  • - {{- end -}} - {{- end -}} - {{- else -}} -
    -
      - {{- range $items.ByWeight }} - {{- $active := eq $pageURL .RelPermalink -}} - {{- $shouldOpen := or (.Params.sidebar.open) (.IsAncestor $page) $active | default true }} - {{- $linkTitle := partial "utils/title" . -}} -
    • - {{- template "sidebar-item-link" dict "context" . "active" $active "title" $linkTitle "link" .RelPermalink -}} - {{- if and $toc $active -}} - {{ template "sidebar-toc" dict "page" . }} - {{- end }} - {{ template "sidebar-tree" dict "context" . "page" $page "pageURL" $pageURL "level" (add $level 1) "toc" $toc }} -
    • - {{- end -}} -
    -
    - {{- end -}} - {{- end }} -{{- end -}} - -{{- define "sidebar-toc" -}} - {{ $page := .page }} - {{ with $page.Fragments.Headings }} -
      - {{- range . }} - {{- with .Headings }} - {{- range . -}} -
    • - - {{- .Title -}} - -
    • - {{ end -}} - {{ end -}} - {{ end -}} -
    - {{ end }} -{{- end -}} - -{{- define "sidebar-footer" -}} - {{- range site.Menus.sidebar -}} - {{- $name := or (T .Identifier) .Name -}} - {{ if eq .Params.type "separator" }} -
  • - {{ $name }} -
  • - {{ else }} -
  • {{ template "sidebar-item-link" dict "active" false "title" $name "link" (.URL | relLangURL) }}
  • - {{ end }} - {{- end -}} -{{- end -}} - -{{- define "sidebar-item-link" -}} - {{- $external := strings.HasPrefix .link "http" -}} - {{- $open := .open | default true -}} - - {{- .title -}} - {{- with .context }} - {{- if or .RegularPages .Sections }} - - {{- template "sidebar-collapsible-button" -}} - - {{- end }} - {{ end -}} - -{{- end -}} - -{{- define "sidebar-collapsible-button" -}} - {{- end -}}