Merge pull request #1482 from gethinode/develop

Fix rendering of nav items
This commit is contained in:
Mark Dumay
2025-06-30 08:42:44 +02:00
committed by GitHub
12 changed files with 98 additions and 85 deletions

View File

@@ -1,14 +1,8 @@
.nav-tabs .nav-tabs {
border: none;
.nav-tabs {
border: none !important;
}
.nav-tabs .nav-link.active {
border-bottom-color: var(--bs-body-bg) !important;
border-bottom-style: solid !important;
z-index: 1;
}
.nav-callout {
.nav-callout, .tab-content {
--#{$prefix}nav-callout-bg: var(--#{$prefix}light);
--#{$prefix}nav-callout-active-bg: var(--bs-primary-bg-subtle);
--#{$prefix}nav-callout-gap: #{$nav-underline-gap};
@@ -92,7 +86,7 @@
@if $enable-dark-mode {
@include color-mode(dark) {
.nav-callout {
.nav-callout, .tab-content {
--#{$prefix}nav-callout-bg: var(--#{$prefix}tertiary-bg);
}

View File

@@ -7,8 +7,12 @@ arguments:
group: partial
list:
group: partial
nav-disabled:
release: v1.0.0
nav-items:
release: v1.0.0
nav-show:
release: v1.0.0
nav-titles:
release: v1.0.0
tab-type:

View File

@@ -362,14 +362,14 @@ As an example, the following shortcode displays a tab group with vertically alig
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* nav tab-type="pills" vertical="true" */>}}
{{</* nav-item title="Nav Item #1" show="true" */>}}
{{</* nav-item title="Nav Item #1" */>}}
This is the first item's nav body. It supports Markdown content.
The item is shown by adding the value `show` to the `class` argument.
{{</* /nav-item */>}}
{{</* nav-item title="Nav Item #2" */>}}
{{</* nav-item title="Nav Item #2" show="true" */>}}
This is the second item's nav body.
{{</* /nav-item */>}}
{{</* nav-item title="Nav Item #3" */>}}
{{</* nav-item title="Nav Item #3" disabled="true" */>}}
This is the third item's nav body.
{{</* /nav-item */>}}
{{</* /nav */>}}

View File

@@ -207,6 +207,7 @@
"d-sm-block",
"d-sm-none",
"data-table",
"disabled",
"display-1",
"display-4",
"dropdown",
@@ -614,16 +615,16 @@
"fab-medium",
"fab-whatsapp",
"fab-x-twitter",
"faq-34d87c018291b431ca97288bad74039b",
"faq-34d87c018291b431ca97288bad74039b-heading-faq-34d87c018291b431ca97288bad74039b",
"faq-34d87c018291b431ca97288bad74039b-item-0",
"faq-34d87c018291b431ca97288bad74039b-item-1",
"faq-34d87c018291b431ca97288bad74039b-item-2",
"faq-5f40bcb82ce38af994740e507c42561e",
"faq-5f40bcb82ce38af994740e507c42561e-heading-faq-5f40bcb82ce38af994740e507c42561e",
"faq-5f40bcb82ce38af994740e507c42561e-item-0",
"faq-5f40bcb82ce38af994740e507c42561e-item-1",
"faq-5f40bcb82ce38af994740e507c42561e-item-2",
"faq-0a7097f76883a213c55ec2c34a30493c",
"faq-0a7097f76883a213c55ec2c34a30493c-heading-faq-0a7097f76883a213c55ec2c34a30493c",
"faq-0a7097f76883a213c55ec2c34a30493c-item-0",
"faq-0a7097f76883a213c55ec2c34a30493c-item-1",
"faq-0a7097f76883a213c55ec2c34a30493c-item-2",
"faq-f7b9efada37955325b04f32aa6566814",
"faq-f7b9efada37955325b04f32aa6566814-heading-faq-f7b9efada37955325b04f32aa6566814",
"faq-f7b9efada37955325b04f32aa6566814-item-0",
"faq-f7b9efada37955325b04f32aa6566814-item-1",
"faq-f7b9efada37955325b04f32aa6566814-item-2",
"fas-1",
"fas-2",
"fas-3",
@@ -703,10 +704,10 @@
"nav-0-0",
"nav-0-1",
"nav-0-2",
"nav-0-btn-0",
"nav-0-btn-1",
"nav-0-btn-2",
"nav-nav-0",
"nav-nav-0-btn-0",
"nav-nav-0-btn-1",
"nav-nav-0-btn-2",
"navbar",
"navbar-0-collapse",
"navbar-mode",

2
go.mod
View File

@@ -18,7 +18,7 @@ require (
github.com/gethinode/mod-simple-datatables v1.1.7 // indirect
github.com/gethinode/mod-simple-datatables/v2 v2.0.1 // indirect
github.com/gethinode/mod-utils/v3 v3.3.1 // indirect
github.com/gethinode/mod-utils/v4 v4.8.2 // indirect
github.com/gethinode/mod-utils/v4 v4.8.4 // indirect
github.com/nextapps-de/flexsearch v0.0.0-20250606060143-c28f52c09b7a // indirect
github.com/twbs/bootstrap v5.3.7+incompatible // indirect
)

4
go.sum
View File

@@ -448,6 +448,10 @@ github.com/gethinode/mod-utils/v4 v4.8.1 h1:XJULrx5VWO4wR69EsvfPp9bQoRvx8Y7Gwnkn
github.com/gethinode/mod-utils/v4 v4.8.1/go.mod h1:bYmvRdAo4ICy5MpSGafDvO4p5bTDpsDKFCPL3bH0mN4=
github.com/gethinode/mod-utils/v4 v4.8.2 h1:mhPmqdeCar2sOdVwKIyJl5la0RVBPtw4d29ncRKN3ek=
github.com/gethinode/mod-utils/v4 v4.8.2/go.mod h1:bYmvRdAo4ICy5MpSGafDvO4p5bTDpsDKFCPL3bH0mN4=
github.com/gethinode/mod-utils/v4 v4.8.3 h1:CSaFR/c1cGrSPpH5ZfrNOoMhAbNb8sw0SCRh9ZxCJTU=
github.com/gethinode/mod-utils/v4 v4.8.3/go.mod h1:bYmvRdAo4ICy5MpSGafDvO4p5bTDpsDKFCPL3bH0mN4=
github.com/gethinode/mod-utils/v4 v4.8.4 h1:ExD2zZCGonAmbIxC9wBU2dp+V4ZfvG46NWaz+LaV3iQ=
github.com/gethinode/mod-utils/v4 v4.8.4/go.mod h1:bYmvRdAo4ICy5MpSGafDvO4p5bTDpsDKFCPL3bH0mN4=
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3 h1:H/qVR5O4BXjRjD+5PZB+r4ug2BSJ2Of4RtwOntd+OKo=
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3/go.mod h1:5GdMfPAXzbA2gXBqTjC6l27kioSYzHlqDMh0+wyx7sU=
github.com/nextapps-de/flexsearch v0.0.0-20240108021025-afd75f742f22 h1:re7L8FxbXQpnX8BgzkdUnDpsUmloGNyLmiy2ZCln8pg=

View File

@@ -6,16 +6,16 @@
*/}}
{{/* Initialize arguments */}}
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "nav-item" "args" . "group" "partial") }}
{{ if or $args.err $args.warnmsg }}
{{ partial (cond $args.err "utilities/LogErr.html" "utilities/LogWarn.html") (dict
{{- $args := partial "utilities/InitArgs.html" (dict "structure" "nav-item" "args" . "group" "partial") -}}
{{- if or $args.err $args.warnmsg -}}
{{- partial (cond $args.err "utilities/LogErr.html" "utilities/LogWarn.html") (dict
"partial" "assets/nav-item.html"
"warnid" "warn-invalid-arguments"
"msg" "Invalid arguments"
"details" ($args.errmsg | append $args.warnmsg)
"file" page.File
)}}
{{ end }}
) -}}
{{- end -}}
{{/* Initialize local arguments */}}
{{- $parentID := or $args.parentId $args.parentID -}}
@@ -36,16 +36,16 @@
"class" "hero-image"
"image-overlay" $args.imageOverlay
) }}
{{ else }}
{{ $illustration = partial $args.hook (dict "page" $args.page "image" $args.illustration) }}
{{ end }}
{{- else -}}
{{- $illustration = partial $args.hook (dict "page" $args.page "image" $args.illustration) -}}
{{- end -}}
{{/* Main code */}}
{{ if not $args.err }}
{{ if eq $type "accordion" }}
{{- if not $args.err -}}
{{- if eq $type "accordion" -}}
<div class="accordion-item{{ if $args.show }} show{{ end }}{{ with $args.class }} {{ . }}{{ end }}">
{{- with $title -}}
<h2 id="accordion-{{ $parentID }}-heading-{{ $args.id }}" class="accordion-header m-0" >
<h2 id="accordion-{{ $parentID }}-heading-{{ $args.id }}" class="accordion-header m-0">
<button
class="accordion-button collapsed {{ if $args.disabled }} text-secondary{{ end }}"
type="button"
@@ -55,14 +55,14 @@
aria-controls="accordion-{{ $parentID }}-item-{{ $args.id }}"
{{ if $args.disabled }} disabled{{ end }}
>
{{ if $illustration }}
{{- if $illustration -}}
<div class="row">
<div class="col-3 col-sm-2 my-auto">{{ $illustration | safeHTML }}</div>
<div class="col-9 col-sm-10 fs-6 fs-sm-5 my-auto">{{ . }}</div>
</div>
{{ else }}
{{- else }}
{{ . }}
{{ end }}
{{ end -}}
</button>
</h2>
{{- end -}}
@@ -75,19 +75,16 @@
<div class="accordion-body">{{ $args.body | $args.page.RenderString | safeHTML }}</div>
</div>
</div>
{{ else }}
{{- else -}}
<div
id="{{ $parentID }}-{{ $args.id }}"
class="tab-pane{{ if $args.show }} active {{ if $args.fade }}show{{ end }}{{ end }} {{ if $args.fade }}fade{{ end }}{{ with $args.class }} {{ . }}{{ end }}"
class="tab-pane{{ if $args.show }} active{{ if $args.fade }} show{{ end }}{{ end }}{{ if $args.fade }} fade{{ end }}{{ with $args.class }} {{ . }}{{ end }}"
role="tabpanel"
aria-labelledby="{{ $parentID }}-btn-{{ $args.id }}"
tabindex="0"
data-header="{{ $title }}"
{{ if $args.show }}data-show-id="{{ $args.id }}"{{ end }}
data-has-content="{{ gt (len $args.body) 0 }}"
{{ if $args.disabled }} data-disabled-id="{{ $args.id }}"{{ end }}
>
{{ $args.body | $args.page.RenderString | safeHTML }}
</div>
{{ end }}
{{ end }}
{{- end -}}
{{- end -}}

View File

@@ -42,7 +42,7 @@
"class" $args.class
"body" (or $item.Description $item.Content)
"show" false
"disabled" false
"disabled" $item.disabled
"item_type" "accordion"
"illustration" (partial "utilities/GetIllustration.html" (dict "item" $item "size" "col-12"))
)
@@ -64,11 +64,14 @@
{{- range $args.list }}{{ $titles = $titles | append .Title }} {{ end -}}
{{- if reflect.IsSlice $args.navTitles }}{{ $titles = $titles | append $args.navTitles }}{{ end -}}
{{- range $index, $item := $titles -}}
{{ $show := eq $index 0}}
{{ $itemID := printf "%s-btn-%d" $args.id $index -}}
{{- $show := eq $index 0 -}}
{{- if $args.navShow }}{{ $show = eq $args.navShow $itemID }}{{ end -}}
{{- $disabled := in $args.navDisabled $itemID -}}
<li class="nav-item" role="presentation">
<button
class="nav-link {{ if not $wrap }} text-nowrap{{ end }}{{ if $show }} active{{ end }}"
id="nav-{{ $id }}-btn-{{ $index }}"
class="nav-link{{ if not $wrap }} text-nowrap{{ end }}{{ if $show }} active{{ end }}{{ if $disabled }} disabled{{ end }}"
id="{{ $itemID }}"
data-bs-toggle="pill"
data-bs-target="#{{ $id }}-{{ $index }}"
type="button"
@@ -82,7 +85,7 @@
{{ end -}}
</ul>
<div class="tab-content {{ if eq $type "tabs" }}border border-bottom-0 p-3{{ else if $args.vertical }}ms-3{{ else }}mt-3{{ end }}">
<div class="tab-content {{ if eq $type "tabs" }}border p-3{{ else if $args.vertical }}ms-3{{ else }}mt-3{{ end }}">
{{- range $index, $item := $args.list -}}
{{- $header := $item.Title -}}
{-{ $body := $item.Content -}}

View File

@@ -30,6 +30,8 @@
{{- if isset .Parent.Params "fade" }}{{ $parentFade = partial "utilities/CastBool.html" (.Parent.Get "fade") }}{{ end -}}
{{- $fade = or $fade $parentFade -}}
{{- $title := or $args.title $args.header -}}
{{- $itemID := printf "%s-btn-%d" $parent $id }}
{{- $disabledID := cond $args.disabled $itemID "" }}
{{- $body := trim .Inner " \r\n" -}}
{{- $current := "" -}}
@@ -49,15 +51,19 @@
{{- $current := .Parent.Scratch.Get "inner" -}}
{{- $titles := .Parent.Scratch.Get "inner-title" -}}
{{- $disabled := .Parent.Scratch.Get "inner-disabled" -}}
{{- if $args.show }}{{ .Parent.Scratch.Set "inner-show" $itemID }}{{ end -}}
{{- if $current -}}
{{- .Parent.Scratch.Set "inner" (print $current $output) -}}
{{- .Parent.Scratch.Set "inner-title" ($titles | append $title) -}}
{{- .Parent.Scratch.Set "inner-disabled" ($disabled | append $disabledID) -}}
{{- else -}}
{{- .Parent.Scratch.Set "inner" $output -}}
{{- .Parent.Scratch.Set "inner-title" (slice $title) -}}
{{- .Parent.Scratch.Set "inner-disabled" (slice $disabledID) -}}
{{- end }}
{{- $alternative := partial "assets/nav-item" (dict
{{- $alternative := partial "assets/nav-item.html" (dict
"page" .Page
"id" $id
"parent-id" $parent

View File

@@ -19,6 +19,8 @@
{{- $inner := .Scratch.Get "inner" -}}
{{- $innerTitles := .Scratch.Get "inner-title" -}}
{{- $innerDisabled := .Scratch.Get "inner-disabled" -}}
{{- $innerShow := .Scratch.Get "inner-show" -}}
{{- $input := trim .Inner " \r\n" -}}
{{- if $input -}}
{{- $input = replace $input "\n" "\n " -}}
@@ -28,17 +30,19 @@
{{/* Main code */}}
{{- if not $args.err -}}
{{- partial "assets/nav.html" (dict
"id" (or $args.id (printf "nav-%d" .Ordinal))
"page" .Page
"list" $args.list
"nav-items" $inner
"nav-titles" $innerTitles
"tab-type" (or $args.tabType $args.type)
"vertical" $args.vertical
"word-wrap" $args.wordWrap
"class" $args.class
"pane" $args.pane
"width" $args.width
"id" (or $args.id (printf "nav-%d" .Ordinal))
"page" .Page
"list" $args.list
"nav-items" $inner
"nav-titles" $innerTitles
"nav-disabled" $innerDisabled
"nav-show" $innerShow
"tab-type" (or $args.tabType $args.type)
"vertical" $args.vertical
"word-wrap" $args.wordWrap
"class" $args.class
"pane" $args.pane
"width" $args.width
)
-}}
{{- end -}}

36
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@gethinode/hinode",
"version": "1.0.0-beta5",
"version": "1.0.0-beta6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@gethinode/hinode",
"version": "1.0.0-beta5",
"version": "1.0.0-beta6",
"license": "MIT",
"dependencies": {
"@fullhuman/postcss-purgecss": "^7.0.2",
@@ -19,7 +19,7 @@
"devDependencies": {
"@gethinode/netlify-plugin-dartsass": "^0.3.0",
"cpy-cli": "^5.0.0",
"eslint": "^9.29.0",
"eslint": "^9.30.0",
"markdownlint-cli2": "^0.18.1",
"neostandard": "^0.12.1",
"netlify-plugin-hugo-cache-resources": "^0.2.1",
@@ -329,9 +329,9 @@
}
},
"node_modules/@eslint/config-array": {
"version": "0.20.1",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz",
"integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==",
"version": "0.21.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
"integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -344,9 +344,9 @@
}
},
"node_modules/@eslint/config-helpers": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz",
"integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==",
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
"integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -391,9 +391,9 @@
}
},
"node_modules/@eslint/js": {
"version": "9.29.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz",
"integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==",
"version": "9.30.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.0.tgz",
"integrity": "sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2875,19 +2875,19 @@
}
},
"node_modules/eslint": {
"version": "9.29.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz",
"integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==",
"version": "9.30.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.0.tgz",
"integrity": "sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.20.1",
"@eslint/config-helpers": "^0.2.1",
"@eslint/config-array": "^0.21.0",
"@eslint/config-helpers": "^0.3.0",
"@eslint/core": "^0.14.0",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "9.29.0",
"@eslint/js": "9.30.0",
"@eslint/plugin-kit": "^0.3.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",

View File

@@ -1,6 +1,6 @@
{
"name": "@gethinode/hinode",
"version": "1.0.0-beta5",
"version": "1.0.0-beta6",
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
"keywords": [
"hugo",
@@ -79,7 +79,7 @@
"devDependencies": {
"@gethinode/netlify-plugin-dartsass": "^0.3.0",
"cpy-cli": "^5.0.0",
"eslint": "^9.29.0",
"eslint": "^9.30.0",
"markdownlint-cli2": "^0.18.1",
"neostandard": "^0.12.1",
"netlify-plugin-hugo-cache-resources": "^0.2.1",