Compare commits

...

44 Commits

Author SHA1 Message Date
Mark Dumay
d1bedea219 Merge pull request #1384 from gethinode/develop
FIx link to page resource
2025-01-28 06:41:59 +01:00
Mark Dumay
e21815d4d2 Merge branch 'main' into develop 2025-01-28 06:29:19 +01:00
Mark Dumay
8d38e6b8c2 FIx link to page resource 2025-01-28 06:28:54 +01:00
Mark Dumay
974b0db6ee Merge pull request #1383 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2025-01-28 05:52:56 +01:00
markdumay
1aa0243bb5 fix: update Hugo module dependencies 2025-01-28 03:06:46 +00:00
github-actions[bot]
bff00ecca6 Merge pull request #1381 from gethinode/dependabot/npm_and_yarn/stylelint-16.14.0
Bump stylelint from 16.13.2 to 16.14.0
2025-01-27 14:28:14 +00:00
dependabot[bot]
fc436a1398 Bump stylelint from 16.13.2 to 16.14.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.13.2 to 16.14.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.13.2...16.14.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:22:18 +00:00
github-actions[bot]
60b06880f7 Merge pull request #1382 from gethinode/dependabot/npm_and_yarn/eslint-9.19.0
Bump eslint from 9.18.0 to 9.19.0
2025-01-27 14:20:55 +00:00
dependabot[bot]
3e986fa135 Bump eslint from 9.18.0 to 9.19.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.18.0 to 9.19.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.18.0...v9.19.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 14:14:14 +00:00
github-actions[bot]
3d7c877cec Merge pull request #1379 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.139.0
Bump hugo-bin from 0.138.0 to 0.139.0
2025-01-23 13:51:05 +00:00
dependabot[bot]
f21a7bc0da Bump hugo-bin from 0.138.0 to 0.139.0
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.138.0 to 0.139.0.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.138.0...v0.139.0)

---
updated-dependencies:
- dependency-name: hugo-bin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-23 13:43:24 +00:00
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
Mark Dumay
dd80ee2bfe Merge pull request #1366 from gethinode/develop
Add wrapping support to tables
2025-01-16 13:56:31 +01:00
Mark Dumay
2e8b087c48 Merge branch 'main' into develop 2025-01-16 13:45:47 +01:00
Mark Dumay
03592cba67 Add wrapping support to tables 2025-01-16 13:45:10 +01:00
48 changed files with 651 additions and 229 deletions

View File

@@ -11,6 +11,10 @@
padding-right: 1rem; padding-right: 1rem;
} }
.table-border-bottom-wrap {
border-bottom-style: none !important
}
@if $enable-dark-mode { @if $enable-dark-mode {
@include color-mode(dark) { @include color-mode(dark) {
.table-striped, .table-striped-columns { .table-striped, .table-striped-columns {

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 { @if $enable-dark-mode {
[data-bs-theme="dark"] { [data-bs-theme="dark"] {
.toc-button { .toc-button {

View File

@@ -116,7 +116,7 @@ home = ["HTML", "RSS", "REDIR", "netlify", "server"]
[module] [module]
[module.hugoVersion] [module.hugoVersion]
extended = true extended = true
min = "0.136.3" min = "0.141.0"
[[module.mounts]] [[module.mounts]]
source = "archetypes" source = "archetypes"
target = "archetypes" target = "archetypes"

View File

@@ -10,6 +10,7 @@
footerBelowFold = false footerBelowFold = false
loading = "lazy" loading = "lazy"
breakpoint = "md" breakpoint = "md"
titleCase = false
[main.internalLinks] [main.internalLinks]
validate = true validate = true
pretty = false pretty = false
@@ -41,6 +42,12 @@
host = "youtube" host = "youtube"
# toml-docs-end videos # toml-docs-end videos
[dam]
videoCodecs = [
"webm/vp9",
"mp4/h265",
"mp4"
]
# toml-docs-start debugging # toml-docs-start debugging
[debugging] [debugging]

View File

@@ -7,17 +7,17 @@
Access-Control-Allow-Origin = '*' Access-Control-Allow-Origin = '*'
Content-Security-Policy = """ Content-Security-Policy = """
base-uri 'self'; \ base-uri 'self'; \
connect-src 'self' *.google-analytics.com *.analytics.google.com *.googletagmanager.com; \ connect-src 'self' *.analytics.google.com *.google.com *.google-analytics.com *.googletagmanager.com; \
default-src 'none'; \ default-src 'none'; \
font-src 'self' fonts.gstatic.com; \ font-src 'self' fonts.gstatic.com data:; \
form-action 'self'; \ form-action 'self'; \
frame-src player.cloudinary.com www.youtube-nocookie.com www.youtube.com player.vimeo.com; \ frame-src *.googletagmanager.com player.cloudinary.com www.youtube-nocookie.com www.youtube.com player.vimeo.com; \
img-src 'self' *.google-analytics.com *.googletagmanager.com data: *.imgix.net *.imagekit.io *.cloudinary.com i.ytimg.com tile.openstreetmap.org i.vimeocdn.com; \ img-src 'self' *.google-analytics.com *.googletagmanager.com googletagmanager.com ssl.gstatic.com www.gstatic.com data: *.imgix.net *.imagekit.io *.cloudinary.com i.ytimg.com tile.openstreetmap.org i.vimeocdn.com; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self'; \ media-src 'self'; \
object-src 'none'; \ object-src 'none'; \
script-src 'self' *.google-analytics.com *.googletagmanager.com player.vimeo.com; \ script-src 'self' *.google-analytics.com *.googletagmanager.com *.analytics.google.com googletagmanager.com tagmanager.google.com player.vimeo.com; \
style-src 'self' www.youtube.com; \ style-src 'self' googletagmanager.com tagmanager.google.com fonts.googleapis.com www.youtube.com; \
""" """
Permissions-Policy = 'geolocation=(), midi=(), sync-xhr=(), microphone=(), camera=(), magnetometer=(), gyroscope=(), fullscreen=(), payment=() ' Permissions-Policy = 'geolocation=(), midi=(), sync-xhr=(), microphone=(), camera=(), magnetometer=(), gyroscope=(), fullscreen=(), payment=() '
Referrer-Policy = 'strict-origin' Referrer-Policy = 'strict-origin'

View File

@@ -3,6 +3,20 @@ comment: >-
improve their layout on smaller screens. To features `sortable`, `paging`, improve their layout on smaller screens. To features `sortable`, `paging`,
and `searchable` require the module `simple-datatables`. and `searchable` require the module `simple-datatables`.
arguments: arguments:
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: false
comment: Page to display the breadcrumb for.
group: partial
input:
type:
- string
- template.HTML
optional: false
comment: Table input in markdown format.
group: partial
breakpoint: breakpoint:
type: select type: select
optional: true optional: true
@@ -55,6 +69,13 @@ arguments:
optional: true optional: true
comment: Toggle the ability to search the dataset. comment: Toggle the ability to search the dataset.
release: v0.24.13 release: v0.24.13
wrap:
type: bool
optional: true
comment: >-
Toggle the last column to wrap to a new row on smaller devices. This
setting is not compatible with data tables.
release: v0.28.0
body: body:
type: string type: string
optional: false optional: false

View File

@@ -79,12 +79,10 @@ arguments:
- 16x9 - 16x9
- 21x9 - 21x9
release: v0.26.5 release: v0.26.5
portrait: options:
type: bool type: string
optional: true optional: true
default: false release: v0.28.2
comment: >- comment: >-
Flag to adjust the ratio from landscape to portrait. The image itself is Optional query parameters to append to video asset's url. The query string
not rotated, only the crop area is adjusted. Not applicable to vector is prepended with a `?` symbol. Only applicable to Cloudinary.
graphics.
release: v0.26.5

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 footerBelowFold = false
loading = "lazy" loading = "lazy"
breakpoint = "md" breakpoint = "md"
titleCase = true
[main.internalLinks] [main.internalLinks]
validate = true validate = true
pretty = true pretty = true
@@ -63,6 +64,11 @@
[dam] [dam]
dimensions = "dimensions.yml" dimensions = "dimensions.yml"
videoCodecs = [
"webm/vp9",
"mp4/h265",
"mp4"
]
[[dam.providers]] [[dam.providers]]
name = "Cloudinary" name = "Cloudinary"

View File

@@ -14,7 +14,6 @@
"footer", "footer",
"form", "form",
"h2", "h2",
"h3",
"head", "head",
"hr", "hr",
"html", "html",
@@ -65,6 +64,7 @@
"use" "use"
], ],
"classes": [ "classes": [
"%!s(<nil>)",
"accordion", "accordion",
"accordion-body", "accordion-body",
"accordion-button", "accordion-button",
@@ -251,6 +251,7 @@
"font-monospace", "font-monospace",
"footer", "footer",
"form-control", "form-control",
"fs-2",
"fs-3", "fs-3",
"fs-5", "fs-5",
"fs-6", "fs-6",
@@ -356,7 +357,6 @@
"p-2", "p-2",
"p-3", "p-3",
"p-4", "p-4",
"pb-2",
"pb-3", "pb-3",
"pb-4", "pb-4",
"pb-5", "pb-5",
@@ -372,6 +372,7 @@
"ps-1", "ps-1",
"ps-3", "ps-3",
"pt-1", "pt-1",
"pt-4",
"pt-5", "pt-5",
"pt-md-3", "pt-md-3",
"ptw-3", "ptw-3",
@@ -468,6 +469,8 @@
"toast-header", "toast-header",
"toc", "toc",
"toc-button", "toc-button",
"toc-item",
"toc-level-1",
"toc-panel", "toc-panel",
"toc-sidebar", "toc-sidebar",
"toggler-icon", "toggler-icon",
@@ -484,7 +487,6 @@
"w-50" "w-50"
], ],
"ids": [ "ids": [
"TableOfContents",
"abbr", "abbr",
"accordion", "accordion",
"accordion-0", "accordion-0",

6
go.mod
View File

@@ -6,14 +6,14 @@ require (
github.com/airbnb/lottie-web v5.12.2+incompatible // indirect github.com/airbnb/lottie-web v5.12.2+incompatible // indirect
github.com/gethinode/mod-bootstrap v1.3.2 // indirect github.com/gethinode/mod-bootstrap v1.3.2 // indirect
github.com/gethinode/mod-csp v1.0.7 // 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-fontawesome v1.10.1 // indirect
github.com/gethinode/mod-google-analytics v1.3.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-katex v1.1.3 // indirect
github.com/gethinode/mod-leaflet v1.2.1 // indirect github.com/gethinode/mod-leaflet v1.2.1 // indirect
github.com/gethinode/mod-lottie v1.5.13 // indirect github.com/gethinode/mod-lottie v1.5.13 // indirect
github.com/gethinode/mod-simple-datatables v1.1.6 // indirect github.com/gethinode/mod-simple-datatables v1.1.7 // indirect
github.com/gethinode/mod-utils/v2 v2.8.6 // indirect github.com/gethinode/mod-utils/v2 v2.10.0 // indirect
github.com/nextapps-de/flexsearch v0.0.0-20240501124520-961c3ae84a87 // indirect github.com/nextapps-de/flexsearch v0.0.0-20240501124520-961c3ae84a87 // indirect
github.com/twbs/bootstrap v5.3.3+incompatible // indirect github.com/twbs/bootstrap v5.3.3+incompatible // indirect
) )

8
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.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 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.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 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg=
github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI= 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= 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.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 h1:7nPeRwHlYbmlNEg7fBV6FyXqpxWW6ZAemaZyYxpIF8U=
github.com/gethinode/mod-simple-datatables v1.1.6/go.mod h1:bvMdmQFk4Hvyltf/QhMqUaApvPbIGTnbI3JLjOEh8go= 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 h1:cqHm2xS5uDiJzRm1KfHaNbq6uMVDKLhQa8/BuTZ1nhY=
github.com/gethinode/mod-utils v1.0.0/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE= github.com/gethinode/mod-utils v1.0.0/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE=
github.com/gethinode/mod-utils v1.0.1 h1:jhZGlGFHHL1f5HXbBMXfiZ2gCz4TVafAzjnRPTIBSEE= github.com/gethinode/mod-utils v1.0.1 h1:jhZGlGFHHL1f5HXbBMXfiZ2gCz4TVafAzjnRPTIBSEE=
@@ -378,6 +382,10 @@ 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.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 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.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/gethinode/mod-utils/v2 v2.10.0 h1:2GN6f3wcu/TlbzPD6DFlWyx+KomXz6LnBv7mfPIXB6o=
github.com/gethinode/mod-utils/v2 v2.10.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 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-20230711092928-1243fd883ec3/go.mod h1:5GdMfPAXzbA2gXBqTjC6l27kioSYzHlqDMh0+wyx7sU=
github.com/nextapps-de/flexsearch v0.0.0-20240108021025-afd75f742f22 h1:re7L8FxbXQpnX8BgzkdUnDpsUmloGNyLmiy2ZCln8pg= 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 }} {{ with .Err }}
{{ errorf "Failed to render KaTeX: %q. See %s" . $.Position }} {{ errorf "Failed to render KaTeX: %q. See %s" . $.Position }}
{{ else }} {{ else }}
{{ if $.Attributes.class }} {{ if $.Attributes.class }}
<div class="{{ $.Attributes.class }}">{{ . }}</div> <div class="{{ $.Attributes.class | safeHTMLAttr }}">{{ .Value }}</div>
{{ else }} {{ else }}
{{ . }} {{ .Value }}
{{ end }} {{ end }}
{{ end }} {{ 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 }} {{ if and site.Params.navigation.anchor $text }}
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading"> <h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">
{{- .Text | safeHTML -}} {{- $text | safeHTML -}}
<a href="#{{ .Anchor | safeURL }}" aria-labelledby="{{ .Anchor | safeURL }}"> <a href="#{{ .Anchor | safeURL }}" aria-labelledby="{{ .Anchor | safeURL }}">
{{- partial "assets/icon.html" (dict "icon" "fas link anchor") }} {{- partial "assets/icon.html" (dict "icon" "fas link anchor") }}
</a> </a>
</h{{ .Level }}> </h{{ .Level }}>
{{ else }} {{ else }}
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }}</h{{ .Level }}> <h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ $text | safeHTML }}</h{{ .Level }}>
{{ end }} {{ end }}

View File

@@ -4,10 +4,10 @@
{{ $opts = dict "displayMode" true }} {{ $opts = dict "displayMode" true }}
{{ end }} {{ end }}
{{ with transform.ToMath .Inner $opts }} {{ with try (transform.ToMath .Inner $opts) }}
{{ with .Err }} {{ with .Err }}
{{ errorf "Failed to render KaTeX: %q. See %s" . $.Position }} {{ errorf "Failed to render KaTeX: %q. See %s" . $.Position }}
{{ else }} {{ else }}
{{ . }} {{ .Value }}
{{ end }} {{ end }}
{{ end }} {{ end }}

View File

@@ -7,8 +7,10 @@
{{ $attr = merge $attr (dict "class" (trim (delimit ($class | append "table") " ") " ")) }} {{ $attr = merge $attr (dict "class" (trim (delimit ($class | append "table") " ") " ")) }}
{{ end }} {{ end }}
{{ $wrap := in $class "table-wrap" }}
{{ $align := dict "left" "start" "center" "center" "right" "end" }} {{ $align := dict "left" "start" "center" "center" "right" "end" }}
{{ $header := "" }}
<table <table
{{- range $k, $v := $attr }} {{- range $k, $v := $attr }}
{{- if $v }} {{- if $v }}
@@ -17,6 +19,19 @@
{{- end }}> {{- end }}>
<thead> <thead>
{{- range .THead }} {{- range .THead }}
{{ $length := len . }}
{{ if $wrap }}
<tr>
{{- range . | first (sub $length 1) }}
<th {{ with .Alignment }}class="text-{{ index $align . }}"{{ end }}>
{{- .Text -}}
</th>
{{- end }}
{{- range . | last 1 }}
{{ $header = .Text }}
{{ end }}
</tr>
{{ else }}
<tr> <tr>
{{- range . }} {{- range . }}
<th {{ with .Alignment }}class="text-{{ index $align . }}"{{ end }}> <th {{ with .Alignment }}class="text-{{ index $align . }}"{{ end }}>
@@ -24,17 +39,36 @@
</th> </th>
{{- end }} {{- end }}
</tr> </tr>
{{ end }}
{{- end }} {{- end }}
</thead> </thead>
<tbody> <tbody>
{{- range .TBody }} {{- range .TBody }}
{{ $length := len . }}
{{ if $wrap }}
<tr> <tr>
{{- range . }} {{- range . | first (sub $length 1) }}
<td {{ with .Alignment }}class="text-{{ index $align . }}"{{ end }}> <td class="{{ with .Alignment }}text-{{ index $align . }}{{ end }} table-border-bottom-wrap">
{{- .Text -}} {{- .Text -}}
</td> </td>
{{- end }} {{- end }}
</tr> </tr>
<tr>
{{- range . | last 1 }}
<td class="{{ with .Alignment }}text-{{ index $align . }}{{ end }}" colspan="{{ (sub $length 1) }}">
{{- .Text -}}
</td>
{{ end }}
</tr>
{{ else }}
<tr>
{{- range . }}
<td {{ with .Alignment }}class="text-{{ index $align . }}"{{ end }}>
{{- .Text -}}
</td>
{{- end }}
</tr>
{{ end }}
{{- end }} {{- end }}
</tbody> </tbody>
</table> </table>

View File

@@ -2,11 +2,13 @@
{{- $fullCover := $.Scratch.Get "fullCover" -}} {{- $fullCover := $.Scratch.Get "fullCover" -}}
{{- $breakpoint := $.Scratch.Get "breakpoint" -}} {{- $breakpoint := $.Scratch.Get "breakpoint" -}}
{{- $layout := .Params.layout -}} {{- $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="row row-cols-1 row-cols-{{ $breakpoint.current }}-2">
<div class="col-12 col-{{ $breakpoint.current }}-9"> <div class="col-12 col-{{ $breakpoint.current }}-9">
{{ if not .IsHome }} {{ 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 }} {{ end }}
{{ if (.Params.menu) }} {{ if (.Params.menu) }}
{{- partial "assets/section-menu.html" (dict "page" .) -}} {{- 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 -}} {{- errorf "layout [_default/single/header.html] - Invalid value for param 'metadata': %s" $metadata -}}
{{- end -}} {{- 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" }} {{ if ne $metadata "none" }}
<small class="text-body-secondary text-uppercase"> <small class="text-body-secondary text-uppercase">
{{ if .Date }} {{ 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" .) }} {{ partial "assets/sharing.html" (dict "page" .) }}
<p class="lead mb-5">{{ .Description }}</p> <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" .) }} {{ partial "assets/sharing.html" (dict "page" .) }}
<p class="lead mb-5">{{ .Description }}</p> <p class="lead mb-5">{{ .Description }}</p>

View File

@@ -30,7 +30,8 @@
{{ $items := slice }} {{ $items := slice }}
{{- range $index, $item := $page.Ancestors.Reverse -}} {{- range $index, $item := $page.Ancestors.Reverse -}}
{{- $title := .LinkTitle -}} {{- $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 -}} {{- $address := or .RelPermalink .Params.Redirect -}}
{{ if and $title $address}} {{ if and $title $address}}
{{ $items = $items | append (dict "title" $title "address" $address) }} {{ $items = $items | append (dict "title" $title "address" $address) }}
@@ -57,9 +58,15 @@
<ol class="breadcrumb"> <ol class="breadcrumb">
{{- $length := len $items }} {{- $length := len $items }}
{{- range $index, $item := $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 -}} {{- 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> </ol>
</nav> </nav>
{{ end }} {{ end }}

View File

@@ -86,6 +86,8 @@
{{- if eq $body "title" }}{{ $description = "" }}{{ end -}} {{- if eq $body "title" }}{{ $description = "" }}{{ end -}}
{{- if eq $body "none" }}{{ $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 --> <!-- Inline partial to render the card's body -->
{{- define "partials/card-body.html" -}} {{- define "partials/card-body.html" -}}
{{- $title := .title -}} {{- $title := .title -}}

View File

@@ -33,6 +33,9 @@
{{- $url := .url -}} {{- $url := .url -}}
{{- $mode := .mode -}} {{- $mode := .mode -}}
{{- $modes := site.Params.main.modes | default (slice "light" "dark") -}} {{- $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 --> <!-- Main code -->
{{ $params := dict }} {{ $params := dict }}

View File

@@ -79,12 +79,16 @@
{{ $pageContext = path.Dir (strings.TrimPrefix hugo.WorkingDir .Filename) }} {{ $pageContext = path.Dir (strings.TrimPrefix hugo.WorkingDir .Filename) }}
{{ end }} {{ end }}
{{ $isPageRes := fileExists (path.Join $pageContext $destination) }} {{ $isPageRes := fileExists (path.Join $pageContext $destination) }}
{{ $res := "" }}
{{ if $isPageRes }}
{{- $res = partial "utilities/GetResource.html" (dict "url" .destination "page" $page) -}}
{{ end }}
{{ $isStatic := fileExists (path.Join "static" $destination) }} {{ $isStatic := fileExists (path.Join "static" $destination) }}
{{ if and (not $isPageRes) (not $isStatic) }} {{ if and (not $res) (not $isStatic) }}
{{- errorf "partial [assets/link.html] - Cannot find page or asset: '%s' at '%s'" $destination $page.File.Path -}} {{- errorf "partial [assets/link.html] - Cannot find page or asset: '%s' at '%s'" $destination $page.File.Path -}}
{{- $error = true -}} {{- $error = true -}}
{{ else if $isPageRes }} {{ else if $res }}
{{ $destination = partial "utilities/URLJoin.html" (dict "elements" (slice "/" (strings.TrimPrefix "/content" $pageContext) $destination)) }} {{ $destination = $res.RelPermalink }}
{{ else if $isStatic }} {{ else if $isStatic }}
{{ $destination = partial "utilities/URLJoin.html" (dict "base" "/" "path" $destination) }} {{ $destination = partial "utilities/URLJoin.html" (dict "base" "/" "path" $destination) }}
{{ end }} {{ end }}
@@ -106,7 +110,12 @@
{{ end }} {{ end }}
{{ 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 "#")) }} {{ if and $pretty (not (hasSuffix $destination "/" )) (not (strings.Contains $destination "#")) }}
{{ $destination = printf "%s/" $destination }} {{ $destination = printf "%s/" $destination }}
{{ end }} {{ end }}

View File

@@ -77,16 +77,19 @@
<!-- Main code --> <!-- Main code -->
{{ if not $error }} {{ if not $error }}
{{ $title := $menu.Name }}
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
{{ if $menu.Params.button }} {{ if $menu.Params.button }}
{{ partial "assets/button.html" (dict {{ partial "assets/button.html" (dict
"title" $menu.Name "title" $title
"icon" $menu.Pre "icon" $menu.Pre
"href" $menuURL "href" $menuURL
"size" "sm" "size" "sm"
)}} )}}
{{ else }} {{ else }}
{{ cond (ne $menuURL "") "<a" "<div" | safeHTML }} class="{{ $anchorClass }}{{ if $isActive }} active{{ end }}{{ with $class }} {{ . }}{{ end }}" {{ 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 }} 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 }}> {{ if $menuURL }} href="{{ $menuURL }}{{ $params | safeHTML }}"{{ with $externalHref }} {{ . | safeHTML }}{{ end }}{{ end }} {{ $button | safeHTML }}>
@@ -97,7 +100,7 @@
{{ partial "assets/icon.html" (dict "icon" (string .) )}} {{ partial "assets/icon.html" (dict "icon" (string .) )}}
{{ end }} {{ end }}
{{ 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 -}} {{- with $menu.Post }}{{ . }}{{ end -}}
{{- if not $isIcon }}&nbsp;{{ $suffix }}{{ end -}} {{- if not $isIcon }}&nbsp;{{ $suffix }}{{ end -}}
{{ cond (ne $menuURL "") "</a>" "</div>" | safeHTML }} {{ cond (ne $menuURL "") "</a>" "</div>" | safeHTML }}

View File

@@ -53,7 +53,7 @@
{{- $title := .title -}} {{- $title := .title -}}
{{- $content := .content -}} {{- $content := .content -}}
<h3>{{ $title }}</h3> <div class="fs-3 mt-4">{{ $title }}</div>
{{ with $content }}<p>{{ . }}</p>{{ end -}} {{ with $content }}<p>{{ . }}</p>{{ end -}}
{{- end -}} {{- end -}}

View File

@@ -16,6 +16,7 @@
{{- $title := .title -}} {{- $title := .title -}}
{{- $description := .description -}} {{- $description := .description -}}
{{- $content := .content -}} {{- $content := .content -}}
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
<!-- Main code --> <!-- 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 }} {{ 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"> <li class="mb-1">
<div class="d-flex w-100 p-0 sidebar-item-group"> <div class="d-flex w-100 p-0 sidebar-item-group">
<div class="text-start flex-grow-1 {{ if $current }}fw-bold{{ end }}"> <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 }} {{ $dest := $href }}
{{ $target := "" }} {{ $target := "" }}
{{ if or $current (not $ref) }} {{ if or $current (not $ref) }}
@@ -45,7 +48,7 @@
<a {{ with $dest }} href="{{ . }}"{{ else }} <a {{ with $dest }} href="{{ . }}"{{ else }}
data-bs-toggle="collapse" data-bs-toggle="collapse"
data-bs-target="#sidebar-collapse-{{ $index }}-{{ $level }}" data-bs-target="#sidebar-collapse-{{ $index }}-{{ $level }}"
{{ end }}>{{ $group.title }}</a> {{ end }}>{{ $groupTitle }}</a>
</div> </div>
<button <button

View File

@@ -4,42 +4,86 @@
Visit gethinode.com/license for more details. Visit gethinode.com/license for more details.
--> -->
{{ $page := .page }} {{ define "partials/inline-table.html" }}
{{ $input := .input }} {{ $page := .page }}
{{ $args := .args }} {{ $input := .input }}
{{ $sortable := .sortable | default false }} {{ $attributes := .attributes }}
{{ $paging := .paging | default false }} {{ $class := .class }}
{{ $searchable := .searchable | default false }} {{ $wrap := .wrap }}
{{ $pagingOptionPerPage := .pagingOptionPerPage }}
{{ $pagingOptionPerPageSelect := .pagingOptionPerPageSelect }}
{{- $responsiveVals := slice "table-responsive" "table-responsive-none" "table-responsive-sm" "table-responsive-md" "table-responsive-lg" "table-responsive-xl" "table-responsive-xxl" -}}
{{- $responsive := intersect $args $responsiveVals -}}
{{- $main := complement $responsive $args -}}
{{- if in $responsive "table-responsive-none" -}} {{ if $wrap }}{{ $input = printf "%s\n{.table-wrap}" (chomp $input) }}{{ end }}
{{- $responsive = "" -}} {{- $input = $input | $page.RenderString }}
{{- else if not $responsive -}} {{ $regex := `<table\s*class="(.+?)"` }}
{{ $responsive = (slice "table-responsive") -}} {{ $current := (index (index (findRESubmatch $regex $input) 0) 1) }}
{{- end -}} {{ $target := delimit (((split $current " ") | append "table" | append $class) | uniq) " " }}
{{- $class := delimit $main " " -}} {{- $new := printf `<table class="%s" %s` $target (trim $attributes " ") -}}
{{ if or $sortable $paging $searchable }}{{ $class = trim (printf "%s data-table" $class) " " }}{{ end }} {{ $input := replaceRE $regex $new $input 1 -}}
{{- $input := $input | $page.RenderString }}
{{ $regex := `<table\s*class="(.+?)"` }} {{ return $input }}
{{ $current := (index (index (findRESubmatch $regex $input) 0) 1) }} {{ end }}
{{ $target := delimit (((split $current " ") | append "table" | append $class) | uniq) " " }}
<!-- Initialize arguments -->
{{ $error := false }}
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "table" "args" .) }}
{{ if $args.err }}
{{ partial "utilities/LogErr.html" (dict
"partial" "assets/table.html"
"msg" "Invalid arguments"
"details" $args.errmsg
"file" page.File
)}}
{{ end }}
<!-- Initialize local variables -->
{{ $class := $args.class }}
{{ if or $args.sortable $args.paging $args.searchable }}{{ $class = trim (printf "%s data-table" $class) " " }}{{ end }}
{{ $attributes := "" }} {{ $attributes := "" }}
{{ if $sortable }}{{ $attributes = printf "%s data-table-sortable=true" $attributes }}{{ end }} {{ if $args.sortable }}{{ $attributes = printf "%s data-table-sortable=true" $attributes }}{{ end }}
{{ if $paging }} {{ if $args.paging }}
{{ $attributes = printf "%s data-table-paging=true" $attributes }} {{ $attributes = printf "%s data-table-paging=true" $attributes }}
{{ $attributes := printf "%s data-table-paging-option-perPage=%s" $attributes $pagingOptionPerPage }} {{ $attributes = printf "%s data-table-paging-option-perPage=%d" $attributes $args.pagingOptionPerPage }}
{{ if (ne $pagingOptionPerPageSelect "") }}{{ $attributes := printf "%s data-table-paging-option-perPageSelect=%d" $attributes $pagingOptionPerPageSelect }}{{ end }} {{ if (ne $args.pagingOptionPerPageSelect "") }}
{{ $attributes = printf "%s data-table-paging-option-perPageSelect=%s" $attributes $args.pagingOptionPerPageSelect }}
{{ end }}
{{ end }} {{ end }}
{{ if $searchable }}{{ $attributes = printf "%s data-table-searchable=true" $attributes }}{{ end }} {{ if $args.searchable }}{{ $attributes = printf "%s data-table-searchable=true" $attributes }}{{ end }}
{{- $new := printf `<table class="%s" %s` $target (trim $attributes " ") -}} <!-- Main code -->
{{ $input := replaceRE $regex $new $input 1 -}} {{- $breakpoint := $args.page.Scratch.Get "breakpoint" -}}
{{- with $responsive }}<div class="{{ delimit . " " }}">{{ end -}} {{ $regular := partial "partials/inline-table.html" (dict
{{ $input | safeHTML }} "page" $args.page
{{- with $responsive }}</div>{{ end -}} "input" $args.input
"attributes" $attributes
"class" $class
"wrap" false
) }}
{{ $wrapped := "" }}
{{ if $args.wrap }}
{{ $wrapped = partial "partials/inline-table.html" (dict
"page" $args.page
"input" $args.input
"attributes" $attributes
"class" $class
"wrap" true
) }}
{{ end }}
{{ if not $error }}
{{ if eq $args.breakpoint "none" }}
{{ $regular | safeHTML }}
{{ with $wrapped }}{{ . | safeHTML }}{{ end }}
{{ else }}
<div class="table-responsive{{- with $args.breakpoint }}-{{ . }}{{ end }} {{ if $wrapped }}d-none d-{{ $breakpoint.current }}-block{{ end }}">
{{ $regular | safeHTML }}
</div>
{{ with $wrapped }}
<div class="table-responsive{{- with $args.breakpoint }}-{{ . }}{{ end }} d-{{ $breakpoint.current }}-none">
{{ . | safeHTML }}
</div>
{{ end }}
{{ end }}
{{ end }}

View File

@@ -4,36 +4,60 @@
Visit gethinode.com/license for more details. Visit gethinode.com/license for more details.
--> -->
<!-- Initialize arguments -->
{{ $error := false }} {{ $error := false }}
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "toc" "args" . "group" "partial") }}
<!-- Validate arguments --> {{ if $args.err }}
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "toc" "args" . "group" "partial") }} {{ partial "utilities/LogErr.html" (dict
{{- errorf "partial [assets/toc-dropdown.html] - Invalid arguments" -}} "partial" "assets/schema.html"
"msg" "Invalid arguments"
"details" $args.errmsg
"file" page.File
)}}
{{ $error = true }} {{ $error = true }}
{{ end }} {{ end }}
<!-- Initialize arguments --> <!-- Initialize local arguments -->
{{- $page := .page -}} {{- $startLevel := or (.Site.Params.navigation.startLevel | int) 2 }}
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" $page.TableOfContents) -}} {{- $endLevel := or (.Site.Params.navigation.endLevel | int) 3 }}
{{- $minNumHeadings := or (.Site.Params.navigation.minNumHeadings | int) 2 }}
{{ if and (not $error) (gt $items 1) -}} <!-- Main code -->
<div class="d-grid gap-2 mx-auto"> {{ if not $error }}
{{ partial "assets/button.html" (dict {{ $headings := partial "assets/toc-headings.html" $args.page }}
"title" (T "toc") {{- with $headings }}
"color" "secondary" {{- if and (not $error) (ge (len .) $minNumHeadings) }}
"outline" "true" <div class="d-grid gap-2 mx-auto">
"class" "toc-button" {{ partial "assets/button.html" (dict
"icon" "fas sort" "title" (T "toc")
"justify" "between" "color" "secondary"
"collapse" "toc-collapse" "outline" "true"
"order" "last" "class" "toc-button"
"spacing" false "icon" "fas sort"
) -}} "justify" "between"
</div> "collapse" "toc-collapse"
"order" "last"
<div class="collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll" id="toc-collapse"> "spacing" false
<div class="toc toc-panel text-body p-2"> ) -}}
<small>{{ $page.TableOfContents }}</small>
</div> </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. 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. Visit gethinode.com/license for more details.
--> -->
@@ -14,10 +14,8 @@
<!-- Initialize arguments --> <!-- Initialize arguments -->
{{- $page := .page -}} {{- $page := .page -}}
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" $page.TableOfContents) -}}
<!-- Main code --> <!-- Main code -->
{{ if and (not $error) (gt $items 1) -}} {{ if not $error -}}
<strong class="d-block h6 my-2 pb-2">{{ T "toc" }}:</strong> {{ partial "assets/toc-parse-content.html" $page }}
{{ $page.TableOfContents }}
{{ end -}} {{ 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) }} {{ $api := printf "https://www.youtube.com/oembed?format=json&url=%s" (printf "https://www.youtube.com/watch?v=%s" $id) }}
{{ $padding := "56.25%" }} {{ $padding := "56.25%" }}
{{ with resources.GetRemote $api }} {{ with try (resources.GetRemote $api) }}
{{ with .Err }} {{ with .Err }}
{{ errorf "Unable to parse video metadata '%q': %s\n %s" $api $origin . }} {{ errorf "Unable to parse video metadata '%q': %s\n %s" $api $origin . }}
{{ else }} {{ else }}
{{ $data := . | transform.Unmarshal }} {{ $data := .Value | transform.Unmarshal }}
{{ if $autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }} {{ if $autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }}
{{ $padding = printf "%.2f%%" (mul (div $data.height $data.width) 100) }} {{ $padding = printf "%.2f%%" (mul (div $data.height $data.width) 100) }}
{{ end }} {{ end }}
@@ -97,11 +97,11 @@
{{- $dnt := cond $pc.EnableDNT 1 0 -}} {{- $dnt := cond $pc.EnableDNT 1 0 -}}
{{- $query := querify "url" $url "dnt" $dnt -}} {{- $query := querify "url" $url "dnt" $dnt -}}
{{- $api := printf "https://vimeo.com/api/oembed.json?%s" $query -}} {{- $api := printf "https://vimeo.com/api/oembed.json?%s" $query -}}
{{- with resources.GetRemote $api -}} {{- with try (resources.GetRemote $api) -}}
{{ with .Err }} {{ with .Err }}
{{ errorf "Unable to parse video metadata '%q': %s\n %s" $api $origin . }} {{ errorf "Unable to parse video metadata '%q': %s\n %s" $api $origin . }}
{{ else }} {{ else }}
{{ $data := . | transform.Unmarshal }} {{ $data := .Value | transform.Unmarshal }}
{{ if $autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }} {{ if $autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }}
{{ $padding = printf "%.2f%%" (mul (div $data.height $data.width) 100) }} {{ $padding = printf "%.2f%%" (mul (div $data.height $data.width) 100) }}
{{ end }} {{ end }}
@@ -117,9 +117,21 @@
{{ end }} {{ end }}
{{ $url := printf "https://player.cloudinary.com/embed/?cloud_name=%s&public_id=%s" $account $id }} {{ $url := printf "https://player.cloudinary.com/embed/?cloud_name=%s&public_id=%s" $account $id }}
{{ $params := "&controls=true" }} {{ $params := "" }}
{{ if $autoplay }}{{ $params = print $params "&autoplay=true&muted=true" }}{{ end }} {{ if $autoplay }}{{ $params = print $params "&player[autoplay]=true&player[muted]=true" }}{{ end }}
{{ with $params }}{{ $url = print $url . }}{{ 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%" }} {{ $padding := "56.25%" }}
{{ $thumbnail := partial "utilities/URLJoin.html" (dict "base" (path.Dir $id) "path" (printf "%s.jpg" (path.BaseName $id))) }} {{ $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 }} {{ if not $title }}{{ $title = printf "Cloudinary video '%s'" (path.BaseName $id) }}{{ end }}
<div class="video-embedded {{ $class }}" data-video-padding="{{ $padding }}"> <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> </iframe>
</div> </div>
{{ else }} {{ else }}

View File

@@ -13,7 +13,9 @@
<div class="col col-6"> <div class="col col-6">
<div class="row justify-content-end p-0"> <div class="row justify-content-end p-0">
<div class="col-12 col-md-8 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> <p>{{ or .Site.Params.footer.socialCaption .Site.Params.social.caption }}</p>
</div> </div>
</div> </div>

View File

@@ -2,13 +2,13 @@
<!-- Adapted from doks --> <!-- Adapted from doks -->
{{ with .Params.meta.title }} {{ with .Params.meta.title }}
{{ $.Scratch.Set "title" . -}} {{ $title := . }}
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
{{ $.Scratch.Set "title" $title -}}
{{ else }} {{ else }}
{{ with .Title -}} {{ $title := .Title | default .Site.Title }}
{{ $.Scratch.Set "title" . -}} {{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
{{ else -}} {{ $.Scratch.Set "title" $title -}}
{{ $.Scratch.Set "title" .Site.Title -}}
{{ end -}}
{{ end }} {{ end }}
{{ $description := or (partial "utilities/GetDescription.html" (dict "page" . "meta" true)) .Site.Params.main.description }} {{ $description := or (partial "utilities/GetDescription.html" (dict "page" . "meta" true)) .Site.Params.main.description }}

View File

@@ -33,7 +33,10 @@
{{- $align := .align | default "center" -}} {{- $align := .align | default "center" -}}
<div class="text-{{ $align }}"> <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> <span class="fs-5 text-muted">{{ $page.Description }}</span>
{{ if $actions }} {{ if $actions }}

View File

@@ -46,6 +46,8 @@
{{- with index . "title" }}{{ $title = or . $title }}{{ end -}} {{- with index . "title" }}{{ $title = or . $title }}{{ end -}}
{{- end -}} {{- end -}}
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
{{- $thumbnail := "" -}} {{- $thumbnail := "" -}}
{{ if reflect.IsMap $sectionPage.Params.Thumbnail }}{{ $thumbnail = $sectionPage.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $sectionPage.Params.Thumbnail }}{{ end }} {{ if reflect.IsMap $sectionPage.Params.Thumbnail }}{{ $thumbnail = $sectionPage.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $sectionPage.Params.Thumbnail }}{{ end }}
{{- $icon := $sectionPage.Params.Icon -}} {{- $icon := $sectionPage.Params.Icon -}}

View File

@@ -53,11 +53,11 @@
<div class="accordion-item"> <div class="accordion-item">
{{- with $header -}} {{- 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 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> </button>
</h2> </div>
{{- end -}} {{- 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 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> <div class="accordion-body">{{ $body | .Page.RenderString | safeHTML }}</div>

View File

@@ -81,5 +81,5 @@
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ partial "assets/table.html" (dict "page" .Page "input" $table "args" slice) }} {{ partial "assets/table.html" (dict "page" .Page "input" $table "wrap" true) }}
{{ end }} {{ end }}

View File

@@ -22,7 +22,10 @@
{{ $force := false }} {{ $force := false }}
{{ $cue := site.Params.main.externalLinks.cue }} {{ $cue := site.Params.main.externalLinks.cue }}
{{ $tab := site.Params.main.externalLinks.tab }} {{ $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 := "" -}} {{- $anchor := "" -}}
{{ if .IsNamedParams }} {{ if .IsNamedParams }}

View File

@@ -5,63 +5,34 @@
--> -->
{{ $error := false }} {{ $error := false }}
{{ $args := dict }}
<!-- Validate arguments --> {{ $breakpoint := "" }}
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "table" "args" .Params) }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments --> <!-- Initialize arguments -->
{{ $breakpoint := "" }}
{{ $class := "" }}
{{ $sortable := false }}
{{ $paging := false }}
{{ $searchable := false }}
{{ $pagingOptionPerPage := 10 }}
{{ $pagingOptionPerPageSelect := "" }}
{{- if .IsNamedParams -}} {{- if .IsNamedParams -}}
{{ $breakpoint = .Get "breakpoint" }} {{ $args = partial "utilities/InitArgs.html" (dict "structure" "table" "args" .Params "group" "shortcode") }}
{{ $class = .Get "class" | default "" }} {{ if $args.err }}
{{ if isset .Params "sortable" }}{{ $sortable = partial "utilities/CastBool.html" (.Get "sortable") }}{{ end }} {{ partial "utilities/LogErr.html" (dict
{{ if isset .Params "paging" }}{{ $paging = partial "utilities/CastBool.html" (.Get "paging") }}{{ end }} "partial" "shortcodes/table.html"
{{ if isset .Params "searchable" }}{{ $searchable = partial "utilities/CastBool.html" (.Get "searchable") }}{{ end }} "msg" "Invalid arguments"
{{ if isset .Params "pagingOptionPerPage" }}{{ $pagingOptionPerPage = (.Get "pagingOptionPerPage") }}{{ end }} "details" $args.errmsg
{{ if isset .Params "pagingOptionPerPageSelect" }}{{ $pagingOptionPerPageSelect = (.Get "OptionPerPageSelect") }}{{ end }} "file" page.File
)}}
{{ end }}
{{ else }} {{ else }}
{{ $breakpoint = .Get 0 }} {{ $breakpoint = .Get 0 }}
{{ end }} {{ end }}
<!-- Main code --> <!-- Main code -->
{{ if or $sortable $paging $searchable }}{{ $class = trim (printf "%s data-table" $class) " " }}{{ end }} {{ partial "assets/table.html" (dict
"page" .Page
{{- $input := .Inner | .Page.RenderString }} "input" .Inner
{{ $regex := `<table\s*class="(.+?)"` }} "breakpoint" (or $breakpoint $args.breakpoint)
{{ $current := (index (index (findRESubmatch $regex $input) 0) 1) }} "class" $args.class
{{ $target := delimit (((split $current " ") | append "table" | append $class) | uniq) " " }} "sortable" $args.sortable
"paging" $args.paging
{{ $attributes := "" }} "pagingOptionPerPage" $args.pagingOptionPerPage
{{ if $sortable }}{{ $attributes = printf "%s data-table-sortable=true" $attributes }}{{ end }} "pagingOptionPageSelect" $args.pagingOptionPageSelect
{{ if $paging }} "searchable" $args.searchable
{{ $attributes = printf "%s data-table-paging=true" $attributes }} "wrap" $args.wrap
{{ $attributes = printf "%s data-table-paging-option-perPage=%d" $attributes $pagingOptionPerPage }} ) }}
{{ if (ne $pagingOptionPerPageSelect "") }}
{{ $attributes = printf "%s data-table-paging-option-perPageSelect=%s" $attributes $pagingOptionPerPageSelect }}
{{ end }}
{{ end }}
{{ if $searchable }}{{ $attributes = printf "%s data-table-searchable=true" $attributes }}{{ end }}
{{- $new := printf `<table class="%s" %s` $target (trim $attributes " ") -}}
{{ $input := replaceRE $regex $new $input 1 -}}
{{ if not $error }}
{{ if eq $breakpoint "none" }}
{{ $input | safeHTML }}
{{ else }}
<div class="table-responsive{{- with $breakpoint }}-{{ . }}{{ end -}}">
{{ $input | safeHTML }}
</div>
{{ end }}
{{ end }}

View File

@@ -3,6 +3,8 @@
{{- $layout := $page.Params.layout -}} {{- $layout := $page.Params.layout -}}
{{- $breakpoint := $.Scratch.Get "breakpoint" -}} {{- $breakpoint := $.Scratch.Get "breakpoint" -}}
{{- $hasSidebar := site.Params.navigation.sidebar | default true -}} {{- $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="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 }}"> <div class="row row-cols-1 row-cols-{{ $breakpoint.prev }}-{{ if $hasSidebar }}3{{ else }}2{{ end }}">
@@ -14,17 +16,20 @@
{{ end -}} {{ end -}}
{{- end -}} {{- end -}}
<p class="display-4 mt-5">{{ .Page.Title }}</p> <p class="display-4 mt-5">{{ $pageTitle }}</p>
{{ if eq .Kind "taxonomy" }} {{ if eq .Kind "taxonomy" }}
<div class="row mt-5"></div> <div class="row mt-5"></div>
{{ range $.Site.Taxonomies.tags.ByCount }} {{ range $.Site.Taxonomies.tags.ByCount }}
{{- $title := .Page.Title }}
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
<div class="row mt-2"> <div class="row mt-2">
<div class="col-3 mt-auto text-right"> <div class="col-3 mt-auto text-right">
{{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }} {{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }}
</div> </div>
<div class="col-9"> <div class="col-9">
<a href="{{ .Page.RelPermalink }}">{{ .Page.Title | .Page.RenderString }}</a> <a href="{{ .Page.RelPermalink }}">{{ $title | .Page.RenderString }}</a>
</div> </div>
</div> </div>
{{ end }} {{ end }}
@@ -37,6 +42,8 @@
{{ range .Pages }} {{ range .Pages }}
{{ $year := .Date.Year }} {{ $year := .Date.Year }}
{{ $lastYear := $.Scratch.Get "lastYear"}} {{ $lastYear := $.Scratch.Get "lastYear"}}
{{- $title := .Title }}
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
<div class="row mt-2"> <div class="row mt-2">
<div class="d-none d-{{ $breakpoint.prev }}-block col-{{ $breakpoint.prev }}-3 mt-auto text-right"> <div class="d-none d-{{ $breakpoint.prev }}-block col-{{ $breakpoint.prev }}-3 mt-auto text-right">
{{ with .Date }} {{ with .Date }}
@@ -52,7 +59,7 @@
<p class="text-body-secondary mt-5">{{ $year }}</p> <p class="text-body-secondary mt-5">{{ $year }}</p>
{{ $.Scratch.Set "lastYear" $year }} {{ $.Scratch.Set "lastYear" $year }}
{{ end }} {{ 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>
</div> </div>
{{ end }} {{ end }}

80
package-lock.json generated
View File

@@ -1,26 +1,26 @@
{ {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.27.29", "version": "0.29.3",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.27.29", "version": "0.29.3",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@fullhuman/postcss-purgecss": "^7.0.2", "@fullhuman/postcss-purgecss": "^7.0.2",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"cssnano": "^7.0.6", "cssnano": "^7.0.6",
"cssnano-preset-advanced": "^7.0.6", "cssnano-preset-advanced": "^7.0.6",
"hugo-bin": "0.137.2", "hugo-bin": "0.139.0",
"purgecss-whitelister": "^2.4.0" "purgecss-whitelister": "^2.4.0"
}, },
"devDependencies": { "devDependencies": {
"@gethinode/netlify-plugin-dartsass": "^0.3.0", "@gethinode/netlify-plugin-dartsass": "^0.3.0",
"cpy-cli": "^5.0.0", "cpy-cli": "^5.0.0",
"eslint": "^9.18.0", "eslint": "^9.19.0",
"markdownlint-cli2": "^0.17.1", "markdownlint-cli2": "^0.17.2",
"neostandard": "^0.12.0", "neostandard": "^0.12.0",
"netlify-plugin-hugo-cache-resources": "^0.2.1", "netlify-plugin-hugo-cache-resources": "^0.2.1",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
@@ -28,7 +28,7 @@
"replace-in-files-cli": "^3.0.0", "replace-in-files-cli": "^3.0.0",
"rimraf": "^6.0.1", "rimraf": "^6.0.1",
"shx": "^0.3.4", "shx": "^0.3.4",
"stylelint": "^16.13.2", "stylelint": "^16.14.0",
"stylelint-config-standard-scss": "^14.0.0" "stylelint-config-standard-scss": "^14.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
@@ -378,10 +378,11 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "9.18.0", "version": "9.19.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.19.0.tgz",
"integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", "integrity": "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==",
"dev": true, "dev": true,
"license": "MIT",
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
} }
@@ -789,9 +790,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/ms": { "node_modules/@types/ms": {
"version": "0.7.34", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
"integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
"dev": true "dev": true
}, },
"node_modules/@types/unist": { "node_modules/@types/unist": {
@@ -2792,17 +2793,18 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "9.18.0", "version": "9.19.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.19.0.tgz",
"integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", "integrity": "sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1", "@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.19.0", "@eslint/config-array": "^0.19.0",
"@eslint/core": "^0.10.0", "@eslint/core": "^0.10.0",
"@eslint/eslintrc": "^3.2.0", "@eslint/eslintrc": "^3.2.0",
"@eslint/js": "9.18.0", "@eslint/js": "9.19.0",
"@eslint/plugin-kit": "^0.2.5", "@eslint/plugin-kit": "^0.2.5",
"@humanfs/node": "^0.16.6", "@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
@@ -4172,9 +4174,9 @@
} }
}, },
"node_modules/hugo-bin": { "node_modules/hugo-bin": {
"version": "0.137.2", "version": "0.139.0",
"resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.137.2.tgz", "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.139.0.tgz",
"integrity": "sha512-tnq0BeOEHydDVboO3cVeq4aZ9ejzZA/iabSSuV346cQC8XwKH5rqZlA9xByJmijth4zZDeuvnDRpRVQf8NsHeA==", "integrity": "sha512-ZjtVqatwvqCW6BSRNucj3xsNVoO3ZjuZDCg0NGQC0B/Wsvc6vwVfS7E6KD755XJ/N6o7raa3qXe+gIvJiew7cA==",
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@@ -4182,6 +4184,7 @@
} }
], ],
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@xhmikosr/bin-wrapper": "^13.0.5", "@xhmikosr/bin-wrapper": "^13.0.5",
"package-config": "^5.0.0" "package-config": "^5.0.0"
@@ -4910,9 +4913,9 @@
} }
}, },
"node_modules/katex": { "node_modules/katex": {
"version": "0.16.19", "version": "0.16.21",
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.19.tgz", "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz",
"integrity": "sha512-3IA6DYVhxhBabjSLTNO9S4+OliA3Qvb8pBQXMfC4WxXJgLwZgnfDl0BmB4z6nBMdznBsZ+CGM8DrGZ5hcguDZg==", "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==",
"dev": true, "dev": true,
"funding": [ "funding": [
"https://opencollective.com/katex", "https://opencollective.com/katex",
@@ -5111,9 +5114,9 @@
} }
}, },
"node_modules/markdownlint": { "node_modules/markdownlint": {
"version": "0.37.3", "version": "0.37.4",
"resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.3.tgz", "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz",
"integrity": "sha512-eoQqH0291YCCjd+Pe1PUQ9AmWthlVmS0XWgcionkZ8q34ceZyRI+pYvsWksXJJL8OBkWCPwp1h/pnXxrPFC4oA==", "integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"markdown-it": "14.1.0", "markdown-it": "14.1.0",
@@ -5134,15 +5137,15 @@
} }
}, },
"node_modules/markdownlint-cli2": { "node_modules/markdownlint-cli2": {
"version": "0.17.1", "version": "0.17.2",
"resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.17.1.tgz", "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.17.2.tgz",
"integrity": "sha512-n1Im9lhKJJE12/u2N0GWBwPqeb0HGdylN8XpSFg9hbj35+QalY9Vi6mxwUQdG6wlSrrIq9ZDQ0Q85AQG9V2WOg==", "integrity": "sha512-XH06ZOi8wCrtOSSj3p8y3yJzwgzYOSa7lglNyS3fP05JPRzRGyjauBb5UvlLUSCGysMmULS1moxdRHHudV+g/Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"globby": "14.0.2", "globby": "14.0.2",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"jsonc-parser": "3.3.1", "jsonc-parser": "3.3.1",
"markdownlint": "0.37.3", "markdownlint": "0.37.4",
"markdownlint-cli2-formatter-default": "0.0.5", "markdownlint-cli2-formatter-default": "0.0.5",
"micromatch": "4.0.8" "micromatch": "4.0.8"
}, },
@@ -6587,9 +6590,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.49", "version": "8.5.1",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
"integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -6606,7 +6609,7 @@
], ],
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"nanoid": "^3.3.7", "nanoid": "^3.3.8",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
"source-map-js": "^1.2.1" "source-map-js": "^1.2.1"
}, },
@@ -8358,9 +8361,9 @@
} }
}, },
"node_modules/stylelint": { "node_modules/stylelint": {
"version": "16.13.2", "version": "16.14.0",
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.13.2.tgz", "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.14.0.tgz",
"integrity": "sha512-wDlgh0mRO9RtSa3TdidqHd0nOG8MmUyVKl+dxA6C1j8aZRzpNeEgdhFmU5y4sZx4Fc6r46p0fI7p1vR5O2DZqA==", "integrity": "sha512-orePw2dKxzXC0hd1VmxrDBqgf1KUV9DYsZY4guKLE9XcQD7m0BxVnWMaoQqMNsQIG14MyyTHf6zoajvOnDra8g==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -8372,6 +8375,7 @@
"url": "https://github.com/sponsors/stylelint" "url": "https://github.com/sponsors/stylelint"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-parser-algorithms": "^3.0.4",
"@csstools/css-tokenizer": "^3.0.3", "@csstools/css-tokenizer": "^3.0.3",
@@ -8391,7 +8395,7 @@
"globby": "^11.1.0", "globby": "^11.1.0",
"globjoin": "^0.1.4", "globjoin": "^0.1.4",
"html-tags": "^3.3.1", "html-tags": "^3.3.1",
"ignore": "^7.0.1", "ignore": "^7.0.3",
"imurmurhash": "^0.1.4", "imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0", "is-plain-object": "^5.0.0",
"known-css-properties": "^0.35.0", "known-css-properties": "^0.35.0",
@@ -8400,7 +8404,7 @@
"micromatch": "^4.0.8", "micromatch": "^4.0.8",
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
"postcss": "^8.4.49", "postcss": "^8.5.1",
"postcss-resolve-nested-selector": "^0.1.6", "postcss-resolve-nested-selector": "^0.1.6",
"postcss-safe-parser": "^7.0.1", "postcss-safe-parser": "^7.0.1",
"postcss-selector-parser": "^7.0.0", "postcss-selector-parser": "^7.0.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.27.29", "version": "0.29.3",
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator", "description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
"keywords": [ "keywords": [
"hugo", "hugo",
@@ -73,14 +73,14 @@
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"cssnano": "^7.0.6", "cssnano": "^7.0.6",
"cssnano-preset-advanced": "^7.0.6", "cssnano-preset-advanced": "^7.0.6",
"hugo-bin": "0.137.2", "hugo-bin": "0.139.0",
"purgecss-whitelister": "^2.4.0" "purgecss-whitelister": "^2.4.0"
}, },
"devDependencies": { "devDependencies": {
"@gethinode/netlify-plugin-dartsass": "^0.3.0", "@gethinode/netlify-plugin-dartsass": "^0.3.0",
"cpy-cli": "^5.0.0", "cpy-cli": "^5.0.0",
"eslint": "^9.18.0", "eslint": "^9.19.0",
"markdownlint-cli2": "^0.17.1", "markdownlint-cli2": "^0.17.2",
"neostandard": "^0.12.0", "neostandard": "^0.12.0",
"netlify-plugin-hugo-cache-resources": "^0.2.1", "netlify-plugin-hugo-cache-resources": "^0.2.1",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
@@ -88,7 +88,7 @@
"replace-in-files-cli": "^3.0.0", "replace-in-files-cli": "^3.0.0",
"rimraf": "^6.0.1", "rimraf": "^6.0.1",
"shx": "^0.3.4", "shx": "^0.3.4",
"stylelint": "^16.13.2", "stylelint": "^16.14.0",
"stylelint-config-standard-scss": "^14.0.0" "stylelint-config-standard-scss": "^14.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {

View File

@@ -6,7 +6,7 @@ homepage = "https://gethinode.com"
demosite = "https://demo.gethinode.com" demosite = "https://demo.gethinode.com"
tags = ["blog", "documentation", "minimal", "modern", "customizable", "search", "bootstrap"] 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"] 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] [author]
name = "Mark Dumay" name = "Mark Dumay"