mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-07 18:14:28 +00:00
Compare commits
30 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a4057ad498 | ||
![]() |
09d3294867 | ||
![]() |
7b167e32c4 | ||
![]() |
941698cc15 | ||
![]() |
1ec7d7477b | ||
![]() |
9ef702ef06 | ||
![]() |
5e41fddef3 | ||
![]() |
a620900c18 | ||
![]() |
cc25fe311d | ||
![]() |
c057b11094 | ||
![]() |
df6fb8f0ff | ||
![]() |
a6c3de6a7d | ||
![]() |
efb9c56b55 | ||
![]() |
7e3301d277 | ||
![]() |
068df86fd8 | ||
![]() |
4f57919a96 | ||
![]() |
21f90455d4 | ||
![]() |
50499a415a | ||
![]() |
e75c8cf40f | ||
![]() |
42529594b0 | ||
![]() |
73afeb13bd | ||
![]() |
23ece830e2 | ||
![]() |
41f5dbaea1 | ||
![]() |
5e368f2726 | ||
![]() |
2db3365115 | ||
![]() |
bf2235a96b | ||
![]() |
2ab8ee674f | ||
![]() |
e52d14e21a | ||
![]() |
46101e174e | ||
![]() |
d28b51aa63 |
@@ -75,6 +75,35 @@
|
||||
}
|
||||
}
|
||||
|
||||
a.toc-item {
|
||||
display: block;
|
||||
}
|
||||
|
||||
a.toc-level-1 {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
a.toc-level-2 {
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
a.toc-level-3 {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
a.toc-level-4 {
|
||||
margin-left: 3em;
|
||||
}
|
||||
|
||||
a.toc-level-5 {
|
||||
margin-left: 4em;
|
||||
}
|
||||
|
||||
a.toc-level-6 {
|
||||
margin-left: 5em;
|
||||
}
|
||||
|
||||
|
||||
@if $enable-dark-mode {
|
||||
[data-bs-theme="dark"] {
|
||||
.toc-button {
|
||||
|
@@ -116,7 +116,7 @@ home = ["HTML", "RSS", "REDIR", "netlify", "server"]
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = true
|
||||
min = "0.136.3"
|
||||
min = "0.141.0"
|
||||
[[module.mounts]]
|
||||
source = "archetypes"
|
||||
target = "archetypes"
|
||||
|
@@ -10,6 +10,7 @@
|
||||
footerBelowFold = false
|
||||
loading = "lazy"
|
||||
breakpoint = "md"
|
||||
titleCase = false
|
||||
[main.internalLinks]
|
||||
validate = true
|
||||
pretty = false
|
||||
@@ -41,6 +42,12 @@
|
||||
host = "youtube"
|
||||
# toml-docs-end videos
|
||||
|
||||
[dam]
|
||||
videoCodecs = [
|
||||
"webm/vp9",
|
||||
"mp4/h265",
|
||||
"mp4"
|
||||
]
|
||||
|
||||
# toml-docs-start debugging
|
||||
[debugging]
|
||||
|
@@ -79,12 +79,10 @@ arguments:
|
||||
- 16x9
|
||||
- 21x9
|
||||
release: v0.26.5
|
||||
portrait:
|
||||
type: bool
|
||||
options:
|
||||
type: string
|
||||
optional: true
|
||||
default: false
|
||||
release: v0.28.2
|
||||
comment: >-
|
||||
Flag to adjust the ratio from landscape to portrait. The image itself is
|
||||
not rotated, only the crop area is adjusted. Not applicable to vector
|
||||
graphics.
|
||||
release: v0.26.5
|
||||
Optional query parameters to append to video asset's url. The query string
|
||||
is prepended with a `?` symbol. Only applicable to Cloudinary.
|
2
exampleSite/config/_default/params.fr.toml
Normal file
2
exampleSite/config/_default/params.fr.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
[main]
|
||||
titleCase = false
|
2
exampleSite/config/_default/params.nl.toml
Normal file
2
exampleSite/config/_default/params.nl.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
[main]
|
||||
titleCase = false
|
@@ -8,6 +8,7 @@
|
||||
footerBelowFold = false
|
||||
loading = "lazy"
|
||||
breakpoint = "md"
|
||||
titleCase = true
|
||||
[main.internalLinks]
|
||||
validate = true
|
||||
pretty = true
|
||||
@@ -63,6 +64,11 @@
|
||||
|
||||
[dam]
|
||||
dimensions = "dimensions.yml"
|
||||
videoCodecs = [
|
||||
"webm/vp9",
|
||||
"mp4/h265",
|
||||
"mp4"
|
||||
]
|
||||
|
||||
[[dam.providers]]
|
||||
name = "Cloudinary"
|
||||
|
@@ -14,7 +14,6 @@
|
||||
"footer",
|
||||
"form",
|
||||
"h2",
|
||||
"h3",
|
||||
"head",
|
||||
"hr",
|
||||
"html",
|
||||
@@ -252,6 +251,7 @@
|
||||
"font-monospace",
|
||||
"footer",
|
||||
"form-control",
|
||||
"fs-2",
|
||||
"fs-3",
|
||||
"fs-5",
|
||||
"fs-6",
|
||||
@@ -357,7 +357,6 @@
|
||||
"p-2",
|
||||
"p-3",
|
||||
"p-4",
|
||||
"pb-2",
|
||||
"pb-3",
|
||||
"pb-4",
|
||||
"pb-5",
|
||||
@@ -373,6 +372,7 @@
|
||||
"ps-1",
|
||||
"ps-3",
|
||||
"pt-1",
|
||||
"pt-4",
|
||||
"pt-5",
|
||||
"pt-md-3",
|
||||
"ptw-3",
|
||||
@@ -469,6 +469,8 @@
|
||||
"toast-header",
|
||||
"toc",
|
||||
"toc-button",
|
||||
"toc-item",
|
||||
"toc-level-1",
|
||||
"toc-panel",
|
||||
"toc-sidebar",
|
||||
"toggler-icon",
|
||||
@@ -485,7 +487,6 @@
|
||||
"w-50"
|
||||
],
|
||||
"ids": [
|
||||
"TableOfContents",
|
||||
"abbr",
|
||||
"accordion",
|
||||
"accordion-0",
|
||||
|
6
go.mod
6
go.mod
@@ -6,14 +6,14 @@ require (
|
||||
github.com/airbnb/lottie-web v5.12.2+incompatible // indirect
|
||||
github.com/gethinode/mod-bootstrap v1.3.2 // indirect
|
||||
github.com/gethinode/mod-csp v1.0.7 // indirect
|
||||
github.com/gethinode/mod-flexsearch/v2 v2.0.3 // indirect
|
||||
github.com/gethinode/mod-flexsearch/v2 v2.1.0 // indirect
|
||||
github.com/gethinode/mod-fontawesome v1.10.1 // indirect
|
||||
github.com/gethinode/mod-google-analytics v1.3.1 // indirect
|
||||
github.com/gethinode/mod-katex v1.1.3 // indirect
|
||||
github.com/gethinode/mod-leaflet v1.2.1 // indirect
|
||||
github.com/gethinode/mod-lottie v1.5.13 // indirect
|
||||
github.com/gethinode/mod-simple-datatables v1.1.6 // indirect
|
||||
github.com/gethinode/mod-utils/v2 v2.8.6 // indirect
|
||||
github.com/gethinode/mod-simple-datatables v1.1.7 // indirect
|
||||
github.com/gethinode/mod-utils/v2 v2.9.0 // indirect
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20240501124520-961c3ae84a87 // indirect
|
||||
github.com/twbs/bootstrap v5.3.3+incompatible // indirect
|
||||
)
|
||||
|
6
go.sum
6
go.sum
@@ -96,6 +96,8 @@ github.com/gethinode/mod-flexsearch/v2 v2.0.2 h1:5FkLbjORwKvK544H/yaAltyIB7eptRP
|
||||
github.com/gethinode/mod-flexsearch/v2 v2.0.2/go.mod h1:d7MMkVlz0l6cEk76e0mkveEsDxGfu5Sv+HUIhoGguhE=
|
||||
github.com/gethinode/mod-flexsearch/v2 v2.0.3 h1:lC4UN9DPYyj3lsRm86Rt+kKx2DmAS10dOxbM/1H8fVw=
|
||||
github.com/gethinode/mod-flexsearch/v2 v2.0.3/go.mod h1:d7MMkVlz0l6cEk76e0mkveEsDxGfu5Sv+HUIhoGguhE=
|
||||
github.com/gethinode/mod-flexsearch/v2 v2.1.0 h1:NzCruYAKQBMM1DwFFoH7/tzqmItR6sKByMHZWRaRiRk=
|
||||
github.com/gethinode/mod-flexsearch/v2 v2.1.0/go.mod h1:d7MMkVlz0l6cEk76e0mkveEsDxGfu5Sv+HUIhoGguhE=
|
||||
github.com/gethinode/mod-fontawesome v1.0.2 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg=
|
||||
github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||
github.com/gethinode/mod-fontawesome v1.1.0 h1:rsDzUI+3ZlS/do2ff3ne8/z3KwHeysmuA+WsXlumXXk=
|
||||
@@ -308,6 +310,8 @@ github.com/gethinode/mod-simple-datatables v1.1.5 h1:DKJ+aR94mekzcDwOnm6MJ/+MjAz
|
||||
github.com/gethinode/mod-simple-datatables v1.1.5/go.mod h1:bvMdmQFk4Hvyltf/QhMqUaApvPbIGTnbI3JLjOEh8go=
|
||||
github.com/gethinode/mod-simple-datatables v1.1.6 h1:7nPeRwHlYbmlNEg7fBV6FyXqpxWW6ZAemaZyYxpIF8U=
|
||||
github.com/gethinode/mod-simple-datatables v1.1.6/go.mod h1:bvMdmQFk4Hvyltf/QhMqUaApvPbIGTnbI3JLjOEh8go=
|
||||
github.com/gethinode/mod-simple-datatables v1.1.7 h1:wCY2bWFUxRHWbWzb/zefCACooCSbDPYKrZthfn+qAgM=
|
||||
github.com/gethinode/mod-simple-datatables v1.1.7/go.mod h1:FjkIEuxqeLLEqqDcz/nHAGHsRfV7EJP5Uhk4kYD8okY=
|
||||
github.com/gethinode/mod-utils v1.0.0 h1:cqHm2xS5uDiJzRm1KfHaNbq6uMVDKLhQa8/BuTZ1nhY=
|
||||
github.com/gethinode/mod-utils v1.0.0/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE=
|
||||
github.com/gethinode/mod-utils v1.0.1 h1:jhZGlGFHHL1f5HXbBMXfiZ2gCz4TVafAzjnRPTIBSEE=
|
||||
@@ -378,6 +382,8 @@ github.com/gethinode/mod-utils/v2 v2.8.5 h1:e71ncO2NYpum7JTdNTwb0lw8aDe8Zc64Ehja
|
||||
github.com/gethinode/mod-utils/v2 v2.8.5/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
|
||||
github.com/gethinode/mod-utils/v2 v2.8.6 h1:gtTtL37YPq1n/POIzbj40aYOg1VaZq8IjqwSf2V5yo0=
|
||||
github.com/gethinode/mod-utils/v2 v2.8.6/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
|
||||
github.com/gethinode/mod-utils/v2 v2.9.0 h1:IGaYO+DNo7CcplyAUJASP1sf10/EqiG8sVVM1Q4SJKc=
|
||||
github.com/gethinode/mod-utils/v2 v2.9.0/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
|
||||
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=
|
||||
|
@@ -1,11 +1,11 @@
|
||||
{{ with transform.ToMath .Inner (dict "displayMode" true) }}
|
||||
{{ with try (transform.ToMath .Inner (dict "displayMode" true)) }}
|
||||
{{ with .Err }}
|
||||
{{ errorf "Failed to render KaTeX: %q. See %s" . $.Position }}
|
||||
{{ else }}
|
||||
{{ if $.Attributes.class }}
|
||||
<div class="{{ $.Attributes.class }}">{{ . }}</div>
|
||||
<div class="{{ $.Attributes.class | safeHTMLAttr }}">{{ .Value }}</div>
|
||||
{{ else }}
|
||||
{{ . }}
|
||||
{{ .Value }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
17
layouts/_default/_markup/render-heading-new.html
Normal file
17
layouts/_default/_markup/render-heading-new.html
Normal file
@@ -0,0 +1,17 @@
|
||||
{{ $text := chomp .Text }}
|
||||
{{ if site.Params.main.titleCase }}{{ $text = title $text }}{{ end }}
|
||||
|
||||
{{ if eq page.RelPermalink "/en/privacy/" }}
|
||||
{{ warnf "title: %s" (.Text | safeHTML) }}
|
||||
{{ end }}
|
||||
|
||||
{{ if and site.Params.navigation.anchor $text }}
|
||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">
|
||||
{{- $text | safeHTML -}}
|
||||
<a href="#{{ .Anchor | safeURL }}" aria-labelledby="{{ .Anchor | safeURL }}">
|
||||
{{- partial "assets/icon.html" (dict "icon" "fas link anchor") }}
|
||||
</a>
|
||||
</h{{ .Level }}>
|
||||
{{ else }}
|
||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ $text | safeHTML }}</h{{ .Level }}>
|
||||
{{ end }}
|
@@ -1,12 +1,13 @@
|
||||
{{ $text := trim .Text " \n\r" }}
|
||||
{{ $text := chomp .Text }}
|
||||
{{ if site.Params.main.titleCase }}{{ $text = (title ($text | htmlUnescape)) | htmlEscape }}{{ end }}
|
||||
|
||||
{{ if and site.Params.navigation.anchor $text }}
|
||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">
|
||||
{{- .Text | safeHTML -}}
|
||||
{{- $text | safeHTML -}}
|
||||
<a href="#{{ .Anchor | safeURL }}" aria-labelledby="{{ .Anchor | safeURL }}">
|
||||
{{- partial "assets/icon.html" (dict "icon" "fas link anchor") }}
|
||||
</a>
|
||||
</h{{ .Level }}>
|
||||
{{ else }}
|
||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }}</h{{ .Level }}>
|
||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ $text | safeHTML }}</h{{ .Level }}>
|
||||
{{ end }}
|
@@ -4,10 +4,10 @@
|
||||
{{ $opts = dict "displayMode" true }}
|
||||
{{ end }}
|
||||
|
||||
{{ with transform.ToMath .Inner $opts }}
|
||||
{{ with try (transform.ToMath .Inner $opts) }}
|
||||
{{ with .Err }}
|
||||
{{ errorf "Failed to render KaTeX: %q. See %s" . $.Position }}
|
||||
{{ else }}
|
||||
{{ . }}
|
||||
{{ .Value }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
@@ -2,11 +2,13 @@
|
||||
{{- $fullCover := $.Scratch.Get "fullCover" -}}
|
||||
{{- $breakpoint := $.Scratch.Get "breakpoint" -}}
|
||||
{{- $layout := .Params.layout -}}
|
||||
{{- $title := .Title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
<div class="row row-cols-1 row-cols-{{ $breakpoint.current }}-2">
|
||||
<div class="col-12 col-{{ $breakpoint.current }}-9">
|
||||
{{ if not .IsHome }}
|
||||
{{ with .Title }}<p id="{{ anchorize . }}" class="display-4 mt-5{{ if and $.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
|
||||
{{ with $title }}<p id="{{ anchorize . }}" class="display-4 mt-5{{ if and $.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
|
||||
{{ end }}
|
||||
{{ if (.Params.menu) }}
|
||||
{{- partial "assets/section-menu.html" (dict "page" .) -}}
|
||||
|
@@ -12,7 +12,10 @@
|
||||
{{- errorf "layout [_default/single/header.html] - Invalid value for param 'metadata': %s" $metadata -}}
|
||||
{{- end -}}
|
||||
|
||||
{{ with .Title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
|
||||
{{ $title := .Title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
{{ with $title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
|
||||
{{ if ne $metadata "none" }}
|
||||
<small class="text-body-secondary text-uppercase">
|
||||
{{ if .Date }}
|
||||
|
@@ -1,3 +1,6 @@
|
||||
{{ with .Title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
|
||||
{{ $title := .Title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
{{ with $title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
|
||||
{{ partial "assets/sharing.html" (dict "page" .) }}
|
||||
<p class="lead mb-5">{{ .Description }}</p>
|
||||
|
@@ -1,3 +1,6 @@
|
||||
{{ with .Title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
|
||||
{{ $title := .Title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
{{ with $title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
|
||||
{{ partial "assets/sharing.html" (dict "page" .) }}
|
||||
<p class="lead mb-5">{{ .Description }}</p>
|
||||
|
@@ -30,7 +30,8 @@
|
||||
{{ $items := slice }}
|
||||
{{- range $index, $item := $page.Ancestors.Reverse -}}
|
||||
{{- $title := .LinkTitle -}}
|
||||
{{- if .IsHome }}{{ $title = T "home" }}{{ end -}}
|
||||
{{- if .IsHome }}{{ $title = T "home" }}{{ end -}}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
{{- $address := or .RelPermalink .Params.Redirect -}}
|
||||
{{ if and $title $address}}
|
||||
{{ $items = $items | append (dict "title" $title "address" $address) }}
|
||||
@@ -57,9 +58,15 @@
|
||||
<ol class="breadcrumb">
|
||||
{{- $length := len $items }}
|
||||
{{- range $index, $item := $items -}}
|
||||
<li class="breadcrumb-item"><a href="{{ $item.address }}">{{ $item.title }}</a></li>
|
||||
{{ $title := $item.title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
<li class="breadcrumb-item"><a href="{{ $item.address }}">{{ $title }}</a></li>
|
||||
{{- end -}}
|
||||
<li class="breadcrumb-item active" aria-current="page">{{ $page.LinkTitle }}</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">
|
||||
{{ $title := $page.LinkTitle }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
{{ $title }}
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
{{ end }}
|
@@ -86,6 +86,8 @@
|
||||
{{- if eq $body "title" }}{{ $description = "" }}{{ end -}}
|
||||
{{- if eq $body "none" }}{{ $title = "" }}{{ $description = "" }}{{ end -}}
|
||||
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
<!-- Inline partial to render the card's body -->
|
||||
{{- define "partials/card-body.html" -}}
|
||||
{{- $title := .title -}}
|
||||
|
@@ -33,6 +33,9 @@
|
||||
{{- $url := .url -}}
|
||||
{{- $mode := .mode -}}
|
||||
{{- $modes := site.Params.main.modes | default (slice "light" "dark") -}}
|
||||
{{ if and site.Params.main.titleCase (eq $caption (plainify $caption)) }}
|
||||
{{ $caption = title $caption }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Main code -->
|
||||
{{ $params := dict }}
|
||||
|
@@ -106,7 +106,12 @@
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{- if not $case }}{{ $text = lower $text }}{{ end -}}
|
||||
{{- if not $case }}
|
||||
{{ $text = lower $text }}
|
||||
{{ else if site.Params.main.titleCase }}
|
||||
{{ $text = title $text }}
|
||||
{{ end -}}
|
||||
|
||||
{{ if and $pretty (not (hasSuffix $destination "/" )) (not (strings.Contains $destination "#")) }}
|
||||
{{ $destination = printf "%s/" $destination }}
|
||||
{{ end }}
|
||||
|
@@ -77,16 +77,19 @@
|
||||
|
||||
<!-- Main code -->
|
||||
{{ if not $error }}
|
||||
{{ $title := $menu.Name }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
{{ if $menu.Params.button }}
|
||||
{{ partial "assets/button.html" (dict
|
||||
"title" $menu.Name
|
||||
"title" $title
|
||||
"icon" $menu.Pre
|
||||
"href" $menuURL
|
||||
"size" "sm"
|
||||
)}}
|
||||
{{ else }}
|
||||
{{ cond (ne $menuURL "") "<a" "<div" | safeHTML }} class="{{ $anchorClass }}{{ if $isActive }} active{{ end }}{{ with $class }} {{ . }}{{ end }}"
|
||||
{{ if $isIcon }}aria-label="{{ $menu.Name }}"{{ end }}
|
||||
{{ if $isIcon }}aria-label="{{ $title }}"{{ end }}
|
||||
data-nav="main" data-nav-main="{{ $mainNav }}"{{ with $childNav }} data-nav-child="{{ . }}"{{ end }}
|
||||
{{ if $menuURL }} href="{{ $menuURL }}{{ $params | safeHTML }}"{{ with $externalHref }} {{ . | safeHTML }}{{ end }}{{ end }} {{ $button | safeHTML }}>
|
||||
|
||||
@@ -97,7 +100,7 @@
|
||||
{{ partial "assets/icon.html" (dict "icon" (string .) )}}
|
||||
{{ end }}
|
||||
{{ end -}}
|
||||
<span {{ if $isActive }} class="active"{{ end }}>{{ if or (not $isIcon) $plain }}{{ $menu.Name }}{{ end }}</span>
|
||||
<span {{ if $isActive }} class="active"{{ end }}>{{ if or (not $isIcon) $plain }}{{ $title }}{{ end }}</span>
|
||||
{{- with $menu.Post }}{{ . }}{{ end -}}
|
||||
{{- if not $isIcon }} {{ $suffix }}{{ end -}}
|
||||
{{ cond (ne $menuURL "") "</a>" "</div>" | safeHTML }}
|
||||
|
@@ -53,7 +53,7 @@
|
||||
{{- $title := .title -}}
|
||||
{{- $content := .content -}}
|
||||
|
||||
<h3>{{ $title }}</h3>
|
||||
<div class="fs-3 mt-4">{{ $title }}</div>
|
||||
{{ with $content }}<p>{{ . }}</p>{{ end -}}
|
||||
{{- end -}}
|
||||
|
||||
|
@@ -16,6 +16,7 @@
|
||||
{{- $title := .title -}}
|
||||
{{- $description := .description -}}
|
||||
{{- $content := .content -}}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
<!-- Main code -->
|
||||
{{ with $title }}<p id="{{ anchorize . }}" class="display-4 py-5{{ if and page.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
|
||||
|
@@ -37,6 +37,9 @@
|
||||
<li class="mb-1">
|
||||
<div class="d-flex w-100 p-0 sidebar-item-group">
|
||||
<div class="text-start flex-grow-1 {{ if $current }}fw-bold{{ end }}">
|
||||
{{- $groupTitle := $group.title -}}
|
||||
{{ if site.Params.main.titleCase }}{{ $groupTitle = title $groupTitle }}{{ end }}
|
||||
|
||||
{{ $dest := $href }}
|
||||
{{ $target := "" }}
|
||||
{{ if or $current (not $ref) }}
|
||||
@@ -45,7 +48,7 @@
|
||||
<a {{ with $dest }} href="{{ . }}"{{ else }}
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#sidebar-collapse-{{ $index }}-{{ $level }}"
|
||||
{{ end }}>{{ $group.title }}</a>
|
||||
{{ end }}>{{ $groupTitle }}</a>
|
||||
</div>
|
||||
|
||||
<button
|
||||
|
@@ -4,36 +4,60 @@
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "toc" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/toc-dropdown.html] - Invalid arguments" -}}
|
||||
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "toc" "args" . "group" "partial") }}
|
||||
{{ if $args.err }}
|
||||
{{ partial "utilities/LogErr.html" (dict
|
||||
"partial" "assets/schema.html"
|
||||
"msg" "Invalid arguments"
|
||||
"details" $args.errmsg
|
||||
"file" page.File
|
||||
)}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page -}}
|
||||
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" $page.TableOfContents) -}}
|
||||
<!-- Initialize local arguments -->
|
||||
{{- $startLevel := or (.Site.Params.navigation.startLevel | int) 2 }}
|
||||
{{- $endLevel := or (.Site.Params.navigation.endLevel | int) 3 }}
|
||||
{{- $minNumHeadings := or (.Site.Params.navigation.minNumHeadings | int) 2 }}
|
||||
|
||||
{{ if and (not $error) (gt $items 1) -}}
|
||||
<div class="d-grid gap-2 mx-auto">
|
||||
{{ partial "assets/button.html" (dict
|
||||
"title" (T "toc")
|
||||
"color" "secondary"
|
||||
"outline" "true"
|
||||
"class" "toc-button"
|
||||
"icon" "fas sort"
|
||||
"justify" "between"
|
||||
"collapse" "toc-collapse"
|
||||
"order" "last"
|
||||
"spacing" false
|
||||
) -}}
|
||||
</div>
|
||||
|
||||
<div class="collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll" id="toc-collapse">
|
||||
<div class="toc toc-panel text-body p-2">
|
||||
<small>{{ $page.TableOfContents }}</small>
|
||||
<!-- Main code -->
|
||||
{{ if not $error }}
|
||||
{{ $headings := partial "assets/toc-headings.html" $args.page }}
|
||||
{{- with $headings }}
|
||||
{{- if and (not $error) (ge (len .) $minNumHeadings) }}
|
||||
<div class="d-grid gap-2 mx-auto">
|
||||
{{ partial "assets/button.html" (dict
|
||||
"title" (T "toc")
|
||||
"color" "secondary"
|
||||
"outline" "true"
|
||||
"class" "toc-button"
|
||||
"icon" "fas sort"
|
||||
"justify" "between"
|
||||
"collapse" "toc-collapse"
|
||||
"order" "last"
|
||||
"spacing" false
|
||||
) -}}
|
||||
</div>
|
||||
</div>
|
||||
{{ end -}}
|
||||
|
||||
<div class="collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll" id="toc-collapse">
|
||||
<small>
|
||||
<div class="toc toc-panel text-body p-2">
|
||||
{{- range . }}
|
||||
{{- $attrs := dict "class" (printf "toc-item toc-level-%d" (add 1 (sub .level $startLevel))) }}
|
||||
{{- with .id }}
|
||||
{{- $attrs = merge $attrs (dict "href" (printf "%s#%s" $args.page.RelPermalink .)) }}
|
||||
{{- end }}
|
||||
<a
|
||||
{{- range $k, $v := $attrs }}
|
||||
{{- printf " %s=%q" $k $v | safeHTMLAttr }}
|
||||
{{- end -}}
|
||||
>{{ .text }}</a>
|
||||
{{- end }}
|
||||
</div>
|
||||
</small>
|
||||
</div>
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
75
layouts/partials/assets/toc-headings.html
Normal file
75
layouts/partials/assets/toc-headings.html
Normal file
@@ -0,0 +1,75 @@
|
||||
{{- /*
|
||||
Copyright 2023 Veriphor, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
use this file except in compliance with the License. You may obtain a copy of
|
||||
the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations under
|
||||
the License.
|
||||
*/}}
|
||||
|
||||
{{- /* Initialize. */}}
|
||||
{{- $partialName := "toc-headings" }}
|
||||
|
||||
{{- /* Verify minimum required version. */}}
|
||||
{{- $minHugoVersion := "0.125.6" }}
|
||||
{{- if lt hugo.Version $minHugoVersion }}
|
||||
{{- errorf "The %q partial requires Hugo v%s or later." $partialName $minHugoVersion }}
|
||||
{{- end }}
|
||||
|
||||
{{- /* Determine content path for warning and error messages. */}}
|
||||
{{- $contentPath := "" }}
|
||||
{{- with .File }}
|
||||
{{- $contentPath = .Path }}
|
||||
{{- else }}
|
||||
{{- $contentPath = .Path }}
|
||||
{{- end }}
|
||||
|
||||
{{- /* Get configuration. */}}
|
||||
{{- $startLevel := or (.Site.Params.navigation.startLevel | int) 2 }}
|
||||
{{- $endLevel := or (.Site.Params.navigation.endLevel | int) 3 }}
|
||||
|
||||
{{- /* Get headings. */}}
|
||||
{{- $headings := slice }}
|
||||
{{- $ids := slice }}
|
||||
{{- range findRE `(?is)<h\d.*?</h\d>` .Content }}
|
||||
{{- $level := substr . 2 1 | int }}
|
||||
{{- if and (ge $level $startLevel) (le $level $endLevel) }}
|
||||
{{- $text := replaceRE `(?is)<h\d.*?>(.+?)</h\d>` "$1" . }}
|
||||
{{- $text = trim $text " " | plainify | safeHTML }}
|
||||
{{- $id := "" }}
|
||||
{{- if findRE `\s+id=` . }}
|
||||
{{- $id = replaceRE `(?is).+?\s+id=(?:\x22|\x27)?(.*?)(?:\x22|\x27)?[\s>].+` "$1" . }}
|
||||
{{- $ids = $ids | append $id }}
|
||||
{{- if not $id }}
|
||||
{{- errorf "The %q partial detected that the %q heading has an empty ID attribute. See %s" $partialName $text $contentPath }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
{{- errorf "The %q partial detected that the %q heading does not have an ID attribute. See %s" $partialName $text $contentPath }}
|
||||
{{- end }}
|
||||
{{- $headings = $headings | append (dict "id" $id "level" $level "text" $text) }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- /* Check for duplicate heading IDs. */}}
|
||||
{{- $unique := slice }}
|
||||
{{- $duplicates := slice }}
|
||||
{{- range $ids }}
|
||||
{{- if in $unique . }}
|
||||
{{- $duplicates = $duplicates | append . }}
|
||||
{{- else }}
|
||||
{{- $unique = $unique | append . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with $duplicates }}
|
||||
{{- errorf "The %q partial detected duplicate heading IDs (%s) in %s" $partialName (delimit . ", ") $contentPath }}
|
||||
{{- end }}
|
||||
|
||||
{{ return $headings }}
|
||||
|
107
layouts/partials/assets/toc-parse-content.html
Normal file
107
layouts/partials/assets/toc-parse-content.html
Normal file
@@ -0,0 +1,107 @@
|
||||
{{- /*
|
||||
Copyright 2023 Veriphor, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
use this file except in compliance with the License. You may obtain a copy of
|
||||
the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations under
|
||||
the License.
|
||||
*/}}
|
||||
|
||||
{{- /*
|
||||
Renders a table of contents by parsing rendered content.
|
||||
|
||||
In site configuration, set the default start level, end level, and the minimum
|
||||
number of headings required to show the table of contents:
|
||||
|
||||
[params.toc]
|
||||
startLevel = 2 # default is 2
|
||||
endLevel = 3 # default is 3
|
||||
minNumHeadings = 2 # default is 2
|
||||
|
||||
To display the table of contents on a page:
|
||||
|
||||
+++
|
||||
title = 'Post 1'
|
||||
toc = true
|
||||
+++
|
||||
|
||||
To display the table of contents on a page, and override one or more of the
|
||||
default settings:
|
||||
|
||||
+++
|
||||
title = 'Post 1'
|
||||
[toc]
|
||||
startLevel = 2 # default is 2
|
||||
endLevel = 3 # default is 3
|
||||
minNumHeadings = 2 # default is 2
|
||||
+++
|
||||
|
||||
Change or localize the title with a "toc_title" key in your i18n file(s).
|
||||
|
||||
Start with these basic CSS rules to style the table of contents:
|
||||
|
||||
a.toc-item {
|
||||
display: block;
|
||||
}
|
||||
a.toc-level-1 {
|
||||
margin-left: 0em;
|
||||
}
|
||||
a.toc-level-2 {
|
||||
margin-left: 1em;
|
||||
}
|
||||
a.toc-level-3 {
|
||||
margin-left: 2em;
|
||||
}
|
||||
a.toc-level-4 {
|
||||
margin-left: 3em;
|
||||
}
|
||||
a.toc-level-5 {
|
||||
margin-left: 4em;
|
||||
}
|
||||
a.toc-level-6 {
|
||||
margin-left: 5em;
|
||||
}
|
||||
|
||||
@context {page} .
|
||||
|
||||
@returns {template.HTML}
|
||||
|
||||
@example {{ partial "toc-parse-content.html" . }}
|
||||
*/}}
|
||||
|
||||
{{- /* Get configuration. */}}
|
||||
{{- $startLevel := or (.Site.Params.navigation.startLevel | int) 2 }}
|
||||
{{- $endLevel := or (.Site.Params.navigation.endLevel | int) 3 }}
|
||||
{{- $minNumHeadings := or (.Site.Params.navigation.minNumHeadings | int) 2 }}
|
||||
|
||||
{{- /* Initialize. */}}
|
||||
{{ $headings := partial "assets/toc-headings.html" . }}
|
||||
|
||||
{{- /* Render */}}
|
||||
{{- if .Site.Params.navigation.toc }}
|
||||
{{- with $headings }}
|
||||
{{- if ge (len .) $minNumHeadings }}
|
||||
<strong class="d-block h6 my-2 pt-4">{{ T "toc" }}:</strong>
|
||||
<nav class="toc">
|
||||
{{- range . }}
|
||||
{{- $attrs := dict "class" (printf "toc-item toc-level-%d" (add 1 (sub .level $startLevel))) }}
|
||||
{{- with .id }}
|
||||
{{- $attrs = merge $attrs (dict "href" (printf "%s#%s" $.RelPermalink .)) }}
|
||||
{{- end }}
|
||||
<a
|
||||
{{- range $k, $v := $attrs }}
|
||||
{{- printf " %s=%q" $k $v | safeHTMLAttr }}
|
||||
{{- end -}}
|
||||
>{{ .text }}</a>
|
||||
{{- end }}
|
||||
</nav>
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2022 - 2025 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
@@ -14,10 +14,8 @@
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page -}}
|
||||
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" $page.TableOfContents) -}}
|
||||
|
||||
<!-- Main code -->
|
||||
{{ if and (not $error) (gt $items 1) -}}
|
||||
<strong class="d-block h6 my-2 pb-2">{{ T "toc" }}:</strong>
|
||||
{{ $page.TableOfContents }}
|
||||
{{ if not $error -}}
|
||||
{{ partial "assets/toc-parse-content.html" $page }}
|
||||
{{ end -}}
|
@@ -68,11 +68,11 @@
|
||||
{{ $api := printf "https://www.youtube.com/oembed?format=json&url=%s" (printf "https://www.youtube.com/watch?v=%s" $id) }}
|
||||
{{ $padding := "56.25%" }}
|
||||
|
||||
{{ with resources.GetRemote $api }}
|
||||
{{ with try (resources.GetRemote $api) }}
|
||||
{{ with .Err }}
|
||||
{{ errorf "Unable to parse video metadata '%q': %s\n %s" $api $origin . }}
|
||||
{{ else }}
|
||||
{{ $data := . | transform.Unmarshal }}
|
||||
{{ $data := .Value | transform.Unmarshal }}
|
||||
{{ if $autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }}
|
||||
{{ $padding = printf "%.2f%%" (mul (div $data.height $data.width) 100) }}
|
||||
{{ end }}
|
||||
@@ -97,11 +97,11 @@
|
||||
{{- $dnt := cond $pc.EnableDNT 1 0 -}}
|
||||
{{- $query := querify "url" $url "dnt" $dnt -}}
|
||||
{{- $api := printf "https://vimeo.com/api/oembed.json?%s" $query -}}
|
||||
{{- with resources.GetRemote $api -}}
|
||||
{{- with try (resources.GetRemote $api) -}}
|
||||
{{ with .Err }}
|
||||
{{ errorf "Unable to parse video metadata '%q': %s\n %s" $api $origin . }}
|
||||
{{ else }}
|
||||
{{ $data := . | transform.Unmarshal }}
|
||||
{{ $data := .Value | transform.Unmarshal }}
|
||||
{{ if $autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }}
|
||||
{{ $padding = printf "%.2f%%" (mul (div $data.height $data.width) 100) }}
|
||||
{{ end }}
|
||||
@@ -117,9 +117,21 @@
|
||||
{{ end }}
|
||||
|
||||
{{ $url := printf "https://player.cloudinary.com/embed/?cloud_name=%s&public_id=%s" $account $id }}
|
||||
{{ $params := "&controls=true" }}
|
||||
{{ if $autoplay }}{{ $params = print $params "&autoplay=true&muted=true" }}{{ end }}
|
||||
{{ with $params }}{{ $url = print $url . }}{{ end }}
|
||||
{{ $params := "" }}
|
||||
{{ if $autoplay }}{{ $params = print $params "&player[autoplay]=true&player[muted]=true" }}{{ end }}
|
||||
|
||||
{{ $codecs := slice }}
|
||||
{{ with index site.Params "dam" }}{{ with index . "videoCodecs" }}{{ $codecs = . }}{{ end }}{{ end }}
|
||||
{{ range $k, $v := $codecs }}
|
||||
{{ $params = printf "%s&source[source_types][%d]=%s" $params $k (urlquery $v) }}
|
||||
{{ end }}
|
||||
{{ if gt (len $codecs) 0 }}
|
||||
{{ $params = print $params "&source[transformation][1][quality]=auto" }}
|
||||
{{ end }}
|
||||
|
||||
{{ with .options }}{{ $params = print $params "&" . }}{{ end }}
|
||||
{{ $params = strings.TrimLeft "?&" $params }}
|
||||
{{ with $params }}{{ $url = print $url "&" . }}{{ end }}
|
||||
{{ $padding := "56.25%" }}
|
||||
|
||||
{{ $thumbnail := partial "utilities/URLJoin.html" (dict "base" (path.Dir $id) "path" (printf "%s.jpg" (path.BaseName $id))) }}
|
||||
@@ -136,7 +148,7 @@
|
||||
{{ if not $title }}{{ $title = printf "Cloudinary video '%s'" (path.BaseName $id) }}{{ end }}
|
||||
|
||||
<div class="video-embedded {{ $class }}" data-video-padding="{{ $padding }}">
|
||||
<iframe src="{{ $url | safeHTMLAttr }}" title="{{ $title }}" webkitallowfullscreen mozallowfullscreen allowfullscreen>
|
||||
<iframe src="{{ $url | safeURL }}" title="{{ $title }}" allow="autoplay; fullscreen; encrypted-media" frameborder="0">
|
||||
</iframe>
|
||||
</div>
|
||||
{{ else }}
|
||||
|
@@ -13,7 +13,9 @@
|
||||
<div class="col col-6">
|
||||
<div class="row justify-content-end p-0">
|
||||
<div class="col-12 col-md-8 p-0">
|
||||
<div class="fs-3 fw-bold">{{ or .Site.Params.footer.socialTitle .Site.Params.social.title }}</div>
|
||||
{{- $title := or .Site.Params.footer.socialTitle .Site.Params.social.title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
<div class="fs-3 fw-bold">{{ $title }}</div>
|
||||
<p>{{ or .Site.Params.footer.socialCaption .Site.Params.social.caption }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -2,13 +2,13 @@
|
||||
|
||||
<!-- Adapted from doks -->
|
||||
{{ with .Params.meta.title }}
|
||||
{{ $.Scratch.Set "title" . -}}
|
||||
{{ $title := . }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
{{ $.Scratch.Set "title" $title -}}
|
||||
{{ else }}
|
||||
{{ with .Title -}}
|
||||
{{ $.Scratch.Set "title" . -}}
|
||||
{{ else -}}
|
||||
{{ $.Scratch.Set "title" .Site.Title -}}
|
||||
{{ end -}}
|
||||
{{ $title := .Title | default .Site.Title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
{{ $.Scratch.Set "title" $title -}}
|
||||
{{ end }}
|
||||
|
||||
{{ $description := or (partial "utilities/GetDescription.html" (dict "page" . "meta" true)) .Site.Params.main.description }}
|
||||
|
@@ -33,7 +33,10 @@
|
||||
{{- $align := .align | default "center" -}}
|
||||
|
||||
<div class="text-{{ $align }}">
|
||||
{{ with $page.Title }}<p class="display-4">{{ . }}</p>{{ end }}
|
||||
{{ $title := $page.Title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
{{ with $title }}<p class="display-4">{{ . }}</p>{{ end }}
|
||||
<span class="fs-5 text-muted">{{ $page.Description }}</span>
|
||||
|
||||
{{ if $actions }}
|
||||
|
@@ -46,6 +46,8 @@
|
||||
{{- with index . "title" }}{{ $title = or . $title }}{{ end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
{{- $thumbnail := "" -}}
|
||||
{{ if reflect.IsMap $sectionPage.Params.Thumbnail }}{{ $thumbnail = $sectionPage.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $sectionPage.Params.Thumbnail }}{{ end }}
|
||||
{{- $icon := $sectionPage.Params.Icon -}}
|
||||
|
@@ -53,11 +53,11 @@
|
||||
|
||||
<div class="accordion-item">
|
||||
{{- with $header -}}
|
||||
<h2 class="accordion-header m-0" id="{{ $parent }}-heading-{{ $id }}">
|
||||
<div class="accordion-header m-0 fs-2" id="{{ $parent }}-heading-{{ $id }}">
|
||||
<button class="accordion-button{{ if not $show }} collapsed{{ end }}" type="button" data-bs-toggle="collapse" data-bs-target="#{{ $parent }}-item-{{ $id }}" aria-expanded="false" aria-controls="{{ $parent }}-item-{{ $id }}">
|
||||
{{ . }}
|
||||
</button>
|
||||
</h2>
|
||||
</div>
|
||||
{{- end -}}
|
||||
<div id="{{ $parent }}-item-{{ $id }}" class="accordion-collapse collapse{{ if $show }} show{{ end }}{{ with $class }} {{ . }}{{ end }}" aria-labelledby="{{ $parent }}-heading-{{ $id }}" data-bs-parent="#{{ $parent }}">
|
||||
<div class="accordion-body">{{ $body | .Page.RenderString | safeHTML }}</div>
|
||||
|
@@ -22,7 +22,10 @@
|
||||
{{ $force := false }}
|
||||
{{ $cue := site.Params.main.externalLinks.cue }}
|
||||
{{ $tab := site.Params.main.externalLinks.tab }}
|
||||
{{ $text := trim .Inner " \r\n" | .Page.RenderString | safeHTML }}
|
||||
{{ $text := chomp .Inner }}
|
||||
{{ if site.Params.main.titleCase }}{{ $text = title $text }}{{ end }}
|
||||
{{ $text := $text | .Page.RenderString | safeHTML }}
|
||||
|
||||
{{- $anchor := "" -}}
|
||||
|
||||
{{ if .IsNamedParams }}
|
||||
|
@@ -3,6 +3,8 @@
|
||||
{{- $layout := $page.Params.layout -}}
|
||||
{{- $breakpoint := $.Scratch.Get "breakpoint" -}}
|
||||
{{- $hasSidebar := site.Params.navigation.sidebar | default true -}}
|
||||
{{- $pageTitle := .Page.Title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $pageTitle = title $pageTitle }}{{ end }}
|
||||
|
||||
<div class="container-xxl flex-fill p-4 px-xxl-0">
|
||||
<div class="row row-cols-1 row-cols-{{ $breakpoint.prev }}-{{ if $hasSidebar }}3{{ else }}2{{ end }}">
|
||||
@@ -14,17 +16,20 @@
|
||||
{{ end -}}
|
||||
{{- end -}}
|
||||
|
||||
<p class="display-4 mt-5">{{ .Page.Title }}</p>
|
||||
<p class="display-4 mt-5">{{ $pageTitle }}</p>
|
||||
|
||||
{{ if eq .Kind "taxonomy" }}
|
||||
<div class="row mt-5"></div>
|
||||
{{ range $.Site.Taxonomies.tags.ByCount }}
|
||||
{{- $title := .Page.Title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
|
||||
<div class="row mt-2">
|
||||
<div class="col-3 mt-auto text-right">
|
||||
{{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }}
|
||||
</div>
|
||||
<div class="col-9">
|
||||
<a href="{{ .Page.RelPermalink }}">{{ .Page.Title | .Page.RenderString }}</a>
|
||||
<a href="{{ .Page.RelPermalink }}">{{ $title | .Page.RenderString }}</a>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -37,6 +42,8 @@
|
||||
{{ range .Pages }}
|
||||
{{ $year := .Date.Year }}
|
||||
{{ $lastYear := $.Scratch.Get "lastYear"}}
|
||||
{{- $title := .Title }}
|
||||
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
|
||||
<div class="row mt-2">
|
||||
<div class="d-none d-{{ $breakpoint.prev }}-block col-{{ $breakpoint.prev }}-3 mt-auto text-right">
|
||||
{{ with .Date }}
|
||||
@@ -52,7 +59,7 @@
|
||||
<p class="text-body-secondary mt-5">{{ $year }}</p>
|
||||
{{ $.Scratch.Set "lastYear" $year }}
|
||||
{{ end }}
|
||||
<a href="{{ .Page.RelPermalink }}">{{ if .Draft }}{{ T "draft" | upper }}: {{ end }}{{ .Title | .Page.RenderString }}</a>
|
||||
<a href="{{ .Page.RelPermalink }}">{{ if .Draft }}{{ T "draft" | upper }}: {{ end }}{{ $title | .Page.RenderString }}</a>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
41
package-lock.json
generated
41
package-lock.json
generated
@@ -1,26 +1,26 @@
|
||||
{
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.28.0",
|
||||
"version": "0.29.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.28.0",
|
||||
"version": "0.29.2",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@fullhuman/postcss-purgecss": "^7.0.2",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"cssnano": "^7.0.6",
|
||||
"cssnano-preset-advanced": "^7.0.6",
|
||||
"hugo-bin": "0.137.2",
|
||||
"hugo-bin": "0.138.0",
|
||||
"purgecss-whitelister": "^2.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gethinode/netlify-plugin-dartsass": "^0.3.0",
|
||||
"cpy-cli": "^5.0.0",
|
||||
"eslint": "^9.18.0",
|
||||
"markdownlint-cli2": "^0.17.1",
|
||||
"markdownlint-cli2": "^0.17.2",
|
||||
"neostandard": "^0.12.0",
|
||||
"netlify-plugin-hugo-cache-resources": "^0.2.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
@@ -789,9 +789,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/ms": {
|
||||
"version": "0.7.34",
|
||||
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
|
||||
"integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
|
||||
"integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/unist": {
|
||||
@@ -4172,9 +4172,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/hugo-bin": {
|
||||
"version": "0.137.2",
|
||||
"resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.137.2.tgz",
|
||||
"integrity": "sha512-tnq0BeOEHydDVboO3cVeq4aZ9ejzZA/iabSSuV346cQC8XwKH5rqZlA9xByJmijth4zZDeuvnDRpRVQf8NsHeA==",
|
||||
"version": "0.138.0",
|
||||
"resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.138.0.tgz",
|
||||
"integrity": "sha512-WNpW+PQb9MFzZlaQBT354/MMN5/MWMvgQyTSHgIK/w8hfcefpcxklSnPmPXJxOYZNEphwzJ8jgDOwJ606gm0jA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -4182,6 +4182,7 @@
|
||||
}
|
||||
],
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@xhmikosr/bin-wrapper": "^13.0.5",
|
||||
"package-config": "^5.0.0"
|
||||
@@ -4910,9 +4911,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/katex": {
|
||||
"version": "0.16.19",
|
||||
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.19.tgz",
|
||||
"integrity": "sha512-3IA6DYVhxhBabjSLTNO9S4+OliA3Qvb8pBQXMfC4WxXJgLwZgnfDl0BmB4z6nBMdznBsZ+CGM8DrGZ5hcguDZg==",
|
||||
"version": "0.16.21",
|
||||
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz",
|
||||
"integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
"https://opencollective.com/katex",
|
||||
@@ -5111,9 +5112,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/markdownlint": {
|
||||
"version": "0.37.3",
|
||||
"resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.3.tgz",
|
||||
"integrity": "sha512-eoQqH0291YCCjd+Pe1PUQ9AmWthlVmS0XWgcionkZ8q34ceZyRI+pYvsWksXJJL8OBkWCPwp1h/pnXxrPFC4oA==",
|
||||
"version": "0.37.4",
|
||||
"resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz",
|
||||
"integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"markdown-it": "14.1.0",
|
||||
@@ -5134,15 +5135,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/markdownlint-cli2": {
|
||||
"version": "0.17.1",
|
||||
"resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.17.1.tgz",
|
||||
"integrity": "sha512-n1Im9lhKJJE12/u2N0GWBwPqeb0HGdylN8XpSFg9hbj35+QalY9Vi6mxwUQdG6wlSrrIq9ZDQ0Q85AQG9V2WOg==",
|
||||
"version": "0.17.2",
|
||||
"resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.17.2.tgz",
|
||||
"integrity": "sha512-XH06ZOi8wCrtOSSj3p8y3yJzwgzYOSa7lglNyS3fP05JPRzRGyjauBb5UvlLUSCGysMmULS1moxdRHHudV+g/Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"globby": "14.0.2",
|
||||
"js-yaml": "4.1.0",
|
||||
"jsonc-parser": "3.3.1",
|
||||
"markdownlint": "0.37.3",
|
||||
"markdownlint": "0.37.4",
|
||||
"markdownlint-cli2-formatter-default": "0.0.5",
|
||||
"micromatch": "4.0.8"
|
||||
},
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.28.0",
|
||||
"version": "0.29.2",
|
||||
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
|
||||
"keywords": [
|
||||
"hugo",
|
||||
@@ -73,14 +73,14 @@
|
||||
"autoprefixer": "^10.4.20",
|
||||
"cssnano": "^7.0.6",
|
||||
"cssnano-preset-advanced": "^7.0.6",
|
||||
"hugo-bin": "0.137.2",
|
||||
"hugo-bin": "0.138.0",
|
||||
"purgecss-whitelister": "^2.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gethinode/netlify-plugin-dartsass": "^0.3.0",
|
||||
"cpy-cli": "^5.0.0",
|
||||
"eslint": "^9.18.0",
|
||||
"markdownlint-cli2": "^0.17.1",
|
||||
"markdownlint-cli2": "^0.17.2",
|
||||
"neostandard": "^0.12.0",
|
||||
"netlify-plugin-hugo-cache-resources": "^0.2.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
|
@@ -6,7 +6,7 @@ homepage = "https://gethinode.com"
|
||||
demosite = "https://demo.gethinode.com"
|
||||
tags = ["blog", "documentation", "minimal", "modern", "customizable", "search", "bootstrap"]
|
||||
features = ["security aware", "fast by default", "seo-ready", "development tools", "bootstrap framework", "netlify-ready", "full text search", "page layouts", "versioned documentation"]
|
||||
min_version = "0.139.0"
|
||||
min_version = "0.141.0"
|
||||
|
||||
[author]
|
||||
name = "Mark Dumay"
|
||||
|
Reference in New Issue
Block a user