Compare commits

...

30 Commits

Author SHA1 Message Date
Mark Dumay
a4057ad498 Merge pull request #1377 from gethinode/develop
Fix rendering of Cloudinary videos in Firefox
2025-01-21 11:12:08 +01:00
Mark Dumay
09d3294867 Merge branch 'main' into develop 2025-01-21 11:00:32 +01:00
Mark Dumay
7b167e32c4 Fix rendering of Cloudinary videos in Firefox 2025-01-21 11:00:00 +01:00
Mark Dumay
941698cc15 Merge pull request #1376 from gethinode/develop
Fix math codeblock rendering
2025-01-21 09:59:23 +01:00
Mark Dumay
1ec7d7477b Merge branch 'main' into develop 2025-01-21 09:08:13 +01:00
Mark Dumay
9ef702ef06 Fix math codeblock rendering 2025-01-21 09:07:36 +01:00
Mark Dumay
5e41fddef3 Merge pull request #1375 from gethinode/develop
Apply title case to sections and sidebar menus
2025-01-20 13:22:00 +01:00
Mark Dumay
a620900c18 Merge branch 'main' into develop 2025-01-20 12:31:09 +01:00
Mark Dumay
cc25fe311d Apply title case to sections and sidebar menus 2025-01-20 12:30:39 +01:00
Mark Dumay
c057b11094 Merge pull request #1373 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2025-01-20 12:01:16 +01:00
Mark Dumay
df6fb8f0ff Merge branch 'main' into hugo-mod-dependencies 2025-01-20 11:52:23 +01:00
Mark Dumay
a6c3de6a7d Merge pull request #1374 from gethinode/develop
Support optional title case
2025-01-20 11:52:05 +01:00
Mark Dumay
efb9c56b55 Support optional title case 2025-01-20 11:06:31 +01:00
markdumay
7e3301d277 fix: update Hugo module dependencies 2025-01-20 03:08:11 +00:00
Mark Dumay
068df86fd8 Merge pull request #1372 from gethinode/develop
Upgrade to hugo v0.141.0
2025-01-18 15:45:18 +01:00
Mark Dumay
4f57919a96 Merge branch 'main' into develop 2025-01-18 15:38:59 +01:00
github-actions[bot]
21f90455d4 Merge pull request #1371 from gethinode/dependabot/npm_and_yarn/katex-0.16.21
Bump katex from 0.16.20 to 0.16.21
2025-01-18 14:38:14 +00:00
Mark Dumay
50499a415a Merge branch 'main' into develop 2025-01-18 15:34:15 +01:00
Mark Dumay
e75c8cf40f Upgrade to hugo v0.141.0 2025-01-18 15:33:38 +01:00
dependabot[bot]
42529594b0 Bump katex from 0.16.20 to 0.16.21
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.20 to 0.16.21.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.20...v0.16.21)

---
updated-dependencies:
- dependency-name: katex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-18 14:33:33 +00:00
Mark Dumay
73afeb13bd Merge pull request #1370 from gethinode/develop
Support options for Cloudinary videos
2025-01-18 15:32:32 +01:00
Mark Dumay
23ece830e2 Make video options argument optional 2025-01-18 15:26:26 +01:00
Mark Dumay
41f5dbaea1 Merge branch 'main' into develop 2025-01-18 14:30:11 +01:00
Mark Dumay
5e368f2726 Support options for Cloudinary videos 2025-01-18 14:29:33 +01:00
github-actions[bot]
2db3365115 Merge pull request #1368 from gethinode/dependabot/npm_and_yarn/markdownlint-cli2-0.17.2
Bump markdownlint-cli2 from 0.17.1 to 0.17.2
2025-01-17 13:55:59 +00:00
dependabot[bot]
bf2235a96b Bump markdownlint-cli2 from 0.17.1 to 0.17.2
Bumps [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) from 0.17.1 to 0.17.2.
- [Changelog](https://github.com/DavidAnson/markdownlint-cli2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/DavidAnson/markdownlint-cli2/compare/v0.17.1...v0.17.2)

---
updated-dependencies:
- dependency-name: markdownlint-cli2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 13:50:17 +00:00
Mark Dumay
2ab8ee674f Merge pull request #1367 from gethinode/develop
Improve rendering of TOC items
2025-01-16 14:54:34 +01:00
Mark Dumay
e52d14e21a Fix linting issues 2025-01-16 14:48:08 +01:00
Mark Dumay
46101e174e Merge branch 'main' into develop 2025-01-16 14:44:14 +01:00
Mark Dumay
d28b51aa63 Improve rendering of TOC items
The table of contents now support headings generated by shortcodes. Be sure to include an `id` if your custom partials or shortcodes include HTML headings (h1-h6). To exclude these headings from the TOC, use the attribute `fs-` to define a font size.
2025-01-16 14:42:23 +01:00
41 changed files with 451 additions and 113 deletions

View File

@@ -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 {

View File

@@ -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"

View File

@@ -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]

View File

@@ -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.

View File

@@ -0,0 +1,2 @@
[main]
titleCase = false

View File

@@ -0,0 +1,2 @@
[main]
titleCase = false

View File

@@ -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"

View File

@@ -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
View File

@@ -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
View File

@@ -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=

View File

@@ -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 }}

View 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 }}

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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" .) -}}

View File

@@ -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 }}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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 }}

View File

@@ -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 -}}

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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 }}&nbsp;{{ $suffix }}{{ end -}}
{{ cond (ne $menuURL "") "</a>" "</div>" | safeHTML }}

View File

@@ -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 -}}

View File

@@ -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 }}

View File

@@ -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

View File

@@ -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 }}

View 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 }}

View 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 }}

View File

@@ -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 -}}

View File

@@ -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 }}

View File

@@ -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>

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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 -}}

View File

@@ -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>

View File

@@ -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 }}

View File

@@ -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
View File

@@ -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"
},

View File

@@ -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",

View File

@@ -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"