Compare commits

...

59 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
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
Mark Dumay
65a44637d5 Merge pull request #1365 from gethinode/develop
Upgrade to PurgeCSS v7
2025-01-14 15:10:59 +01:00
Mark Dumay
6bbdb813de Merge branch 'main' into develop 2025-01-14 15:02:17 +01:00
Mark Dumay
3ad358bb96 Upgrade to PurgeCSS v7
Fixes #1333
2025-01-14 15:01:19 +01:00
github-actions[bot]
2e1c05fa63 Merge pull request #1364 from gethinode/dependabot/npm_and_yarn/stylelint-16.13.2
Bump stylelint from 16.13.0 to 16.13.2
2025-01-14 13:41:13 +00:00
dependabot[bot]
d67fc81c87 Bump stylelint from 16.13.0 to 16.13.2
Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.13.0 to 16.13.2.
- [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.0...16.13.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-14 13:34:58 +00:00
github-actions[bot]
8e532ce61b Merge pull request #1362 from gethinode/dependabot/npm_and_yarn/eslint-9.18.0
Bump eslint from 9.17.0 to 9.18.0
2025-01-13 13:19:44 +00:00
dependabot[bot]
dd7803110d Bump eslint from 9.17.0 to 9.18.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.17.0 to 9.18.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.17.0...v9.18.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-13 13:13:04 +00:00
github-actions[bot]
8c05e15693 Merge pull request #1361 from gethinode/dependabot/npm_and_yarn/stylelint-16.13.0
Bump stylelint from 16.12.0 to 16.13.0
2025-01-13 13:11:48 +00:00
dependabot[bot]
b78d0a9912 Bump stylelint from 16.12.0 to 16.13.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.12.0 to 16.13.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.12.0...16.13.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-13 13:06:35 +00:00
Mark Dumay
25aeaeb195 Merge pull request #1360 from gethinode/develop
Fix identification of active child navbar item
2025-01-12 13:29:56 +01:00
Mark Dumay
d8336200ef Merge branch 'main' into develop 2025-01-12 07:17:36 +01:00
Mark Dumay
2831b510d6 Fix identification of active child navbar item 2025-01-12 07:17:01 +01:00
Mark Dumay
ddc319e380 Merge pull request #1359 from gethinode/develop
Improve purge settings
2025-01-11 08:02:50 +01:00
Mark Dumay
0e4c493dd2 Merge branch 'main' into develop 2025-01-11 06:49:13 +01:00
Mark Dumay
48ceeb0b64 Improve purge settings 2025-01-11 06:48:47 +01:00
Mark Dumay
45bd45c5fa Merge pull request #1358 from gethinode/develop
Refine sidebar behavior
2025-01-10 19:32:49 +01:00
Mark Dumay
9f85b5bc93 Fix styles 2025-01-10 19:26:05 +01:00
Mark Dumay
41215fcc25 Merge branch 'main' into develop 2025-01-10 17:55:48 +01:00
Mark Dumay
912a34baa3 Merge pull request #1357 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2025-01-10 17:55:23 +01:00
Mark Dumay
db4fa60bff Refine sidebar behavior 2025-01-10 17:54:32 +01:00
markdumay
8ebc170e0e fix: update Hugo module dependencies 2025-01-10 03:11:55 +00:00
Mark Dumay
0b5a8756ad Merge pull request #1356 from gethinode/develop
Prettify language selector url when applicable
2025-01-09 14:01:51 +01:00
Mark Dumay
7cec88af78 Merge branch 'main' into develop 2025-01-09 13:54:48 +01:00
Mark Dumay
1681d9691e Merge pull request #1355 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2025-01-09 13:54:30 +01:00
Mark Dumay
5b661f8f7f Prettify language selector url when applicable 2025-01-09 13:53:09 +01:00
markdumay
3ca09592f7 fix: update Hugo module dependencies 2025-01-09 03:22:03 +00:00
51 changed files with 858 additions and 339 deletions

View File

@@ -7,22 +7,45 @@
top: var(--navbar-offset);
max-height: 90vh;
overflow-y: auto;
scrollbar-gutter: stable;
}
.sidebar-item {
color: rgba(0, 0, 0, 0.65);
margin-left: 0 !important;
padding-left: 0.85rem !important;
display: inline-block;
padding: 0.1875rem 0.5rem !important;
&.active {
color: $primary;
}
&.active,
&:hover,
&:focus {
color: black;
color: $primary;
background-color: tint-color($primary, 90%);
}
}
.btn-toggle {
.sidebar-item-group {
&:hover,
&:focus {
color: $primary;
background-color: tint-color($primary, 90%);
}
> div > a {
color: var(--bs-body-color) !important;
text-decoration: none;
cursor: pointer;
}
}
.sidebar-item-group > div {
padding: 0.1875rem 0.5rem !important;
}
.btn-toggle-group {
padding: 0.25rem 0.5rem;
font-weight: 600;
color: rgba(0, 0, 0, 0.65);
@@ -30,8 +53,7 @@
&:hover,
&:focus {
color: black;
background-color: tint-color($primary, 90%);
background-color: transparent;
}
&::before {
@@ -43,50 +65,49 @@
}
}
.btn-toggle[aria-expanded="true"] {
color: black;
.btn-toggle-group[aria-expanded="true"] {
&::before {
transform: rotate(90deg);
}
}
.btn-toggle-nav a {
padding: 0.1875rem 0.5rem;
margin-top: 0.125rem;
margin-left: 1.25rem;
&:hover,
&:focus {
background-color: tint-color($primary, 90%);
}
&.active {
font-weight: bold;
}
}
@if $enable-dark-mode {
@include color-mode(dark) {
.sidebar-item {
color: var(--bs-body-color);
margin-left: 0 !important;
padding-left: 0.85rem !important;
&.active,
&.active {
color: $primary-text-emphasis-dark !important;
}
&:hover,
&:focus {
color: $primary-text-emphasis-dark !important;
background-color: transparent;
box-shadow: inset 0 0 0 1px $primary-bg-subtle-dark;
}
}
.sidebar-item-group {
color: var(--bs-body-color) !important;
&.active {
color: $primary-text-emphasis-dark !important;
}
&:hover,
&:focus {
color: white !important;
background-color: transparent;
box-shadow: inset 0 0 0 1px $primary-bg-subtle-dark;
}
}
.btn-toggle {
.btn-toggle-group {
color: var(--bs-body-color);
&:hover,
&:focus {
color: white !important;
background-color: transparent;
}
@@ -95,25 +116,9 @@
}
}
.btn-toggle[aria-expanded="true"] {
.btn-toggle-group[aria-expanded="true"] {
color: var(--bs-secondary-color);
}
.btn-toggle-nav a {
padding: 0.1875rem 0.5rem;
margin-top: 0.125rem;
margin-left: 1.25rem;
&:hover,
&:focus {
color: white !important;
background-color: transparent;
}
&.active {
font-weight: bold;
}
}
}
}

View File

@@ -11,6 +11,10 @@
padding-right: 1rem;
}
.table-border-bottom-wrap {
border-bottom-style: none !important
}
@if $enable-dark-mode {
@include color-mode(dark) {
.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 {
[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

@@ -3,13 +3,15 @@ const cssnano = require('cssnano')({
preset: 'advanced'
})
const whitelister = require('purgecss-whitelister')
const purgecss = require('@fullhuman/postcss-purgecss')({
const purgeImport = require('@fullhuman/postcss-purgecss')
const purgeCSSPlugin = purgeImport.purgeCSSPlugin || purgeImport.default || purgeImport
const purgecss = purgeCSSPlugin({
content: ['./hugo_stats.json'],
defaultExtractor: (content) => {
const els = JSON.parse(content).htmlElements
return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])]
},
dynamicAttributes: ['data-bs-theme'],
dynamicAttributes: ['data-bs-theme', 'data-bs-theme-animate'],
safelist: ['was-validated',
...whitelister([
'./assets/scss/components/_clipboard.scss',

View File

@@ -3,6 +3,20 @@ comment: >-
improve their layout on smaller screens. To features `sortable`, `paging`,
and `searchable` require the module `simple-datatables`.
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:
type: select
optional: true
@@ -55,6 +69,13 @@ arguments:
optional: true
comment: Toggle the ability to search the dataset.
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:
type: string
optional: false

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"
@@ -158,7 +164,7 @@
# themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # external path
themeFontPath = "/fonts" # local path
themeFontPreload = "/fonts/inter-v12-latin-regular.woff2"
purge = false # TODO: fix purge setting of example site
purge = true
# toml-docs-end theme-colors
[schema]

View File

@@ -3,31 +3,34 @@ const cssnano = require('cssnano')({
preset: 'advanced'
})
const whitelister = require('purgecss-whitelister')
const purgecss = require('@fullhuman/postcss-purgecss')({
content: ['./hugo_stats.json'],
const purgeImport = require('@fullhuman/postcss-purgecss')
const purgeCSSPlugin = purgeImport.purgeCSSPlugin || purgeImport.default || purgeImport
const purgecss = purgeCSSPlugin({
content: ['./exampleSite/hugo_stats.json'],
defaultExtractor: (content) => {
const els = JSON.parse(content).htmlElements
return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])]
},
dynamicAttributes: ['data-bs-theme'],
dynamicAttributes: ['data-bs-theme', 'data-bs-theme-animate'],
safelist: ['was-validated',
...whitelister([
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_clipboard.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_command.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_nav.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_navbar.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_search.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_syntax.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_syntax-dark.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_syntax-light.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_table.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_video.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/theme/fonts.scss',
'./_vendor/github.com/gethinode/hinode/assets/scss/theme/theme.scss',
'./exampleSite/_vendor/github.com/gethinode/mod-cookieyes/v2/assets/scss/cookieyes.scss',
'./assets/scss/components/_clipboard.scss',
'./assets/scss/components/_command.scss',
'./assets/scss/components/_nav.scss',
'./assets/scss/components/_navbar.scss',
'./assets/scss/components/_search.scss',
'./assets/scss/components/_syntax.scss',
'./assets/scss/components/_syntax-dark.scss',
'./assets/scss/components/_syntax-light.scss',
'./assets/scss/components/_table.scss',
'./assets/scss/components/_video.scss',
'./assets/scss/theme/fonts.scss',
'./assets/scss/theme/theme.scss',
'./_vendor/github.com/gethinode/mod-cookieyes/v2/assets/scss/cookieyes.scss',
'./_vendor/github.com/gethinode/mod-flexsearch/v2/assets/scss/modules/flexsearch/flexsearch.scss',
'./_vendor/github.com/gethinode/mod-katex/dist/katex.scss',
'./_vendor/github.com/gethinode/mod-leaflet/dist/leaflet.scss',
'./_vendor/github.com/gethinode/mod-simple-datatables/dist/simple-datatables.scss',
'./_vendor/github.com/twbs/bootstrap/scss/_carousel.scss',
'./_vendor/github.com/twbs/bootstrap/scss/_dropdown.scss',
'./_vendor/github.com/twbs/bootstrap/scss/_modal.scss',

View File

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

8
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.1.9 // 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.5 // 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
)

12
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=
@@ -164,6 +166,10 @@ github.com/gethinode/mod-google-analytics v1.1.6 h1:0eNIM4NTzXnnRHMM04IVnYPPGwbM
github.com/gethinode/mod-google-analytics v1.1.6/go.mod h1:dl628cFozpCvoIMCiV7ujzQipjxcm3eatXrSfLPWNII=
github.com/gethinode/mod-google-analytics v1.1.9 h1:ld3bRGiJiUCfe/deH+4vOP3oZNhG6mPssT254EcK0Ro=
github.com/gethinode/mod-google-analytics v1.1.9/go.mod h1:dl628cFozpCvoIMCiV7ujzQipjxcm3eatXrSfLPWNII=
github.com/gethinode/mod-google-analytics v1.3.0 h1:R9oRB6nbFDwLsNmIhxlcmUVH4JE1kvcmbOloKSHhiIQ=
github.com/gethinode/mod-google-analytics v1.3.0/go.mod h1:dl628cFozpCvoIMCiV7ujzQipjxcm3eatXrSfLPWNII=
github.com/gethinode/mod-google-analytics v1.3.1 h1:WPXrsO6Kpp0k8PYY9a1JyiZgYGMlkBfHY8eEg6CfcL0=
github.com/gethinode/mod-google-analytics v1.3.1/go.mod h1:dl628cFozpCvoIMCiV7ujzQipjxcm3eatXrSfLPWNII=
github.com/gethinode/mod-katex v1.0.0 h1:me/3dIIZBkfk1mRIFt8QiAGYwYDoSG5bc2hHRtIutFc=
github.com/gethinode/mod-katex v1.0.0/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.1 h1:809QUztxmKgMNchU+v03iMO7Ma+ISc3ZzhXYauc21rs=
@@ -304,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=
@@ -372,6 +380,10 @@ github.com/gethinode/mod-utils/v2 v2.8.4 h1:ZBkIxFezFz2IrbTt0Y3Nq5ac7klU5N8TY19Q
github.com/gethinode/mod-utils/v2 v2.8.4/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
github.com/gethinode/mod-utils/v2 v2.8.5 h1:e71ncO2NYpum7JTdNTwb0lw8aDe8Zc64Ehjavy8x9xM=
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

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

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

@@ -31,6 +31,7 @@
{{- range $index, $item := $page.Ancestors.Reverse -}}
{{- $title := .LinkTitle -}}
{{- 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

@@ -28,7 +28,7 @@
{{- $menuURL = partial "utilities/URLJoin.html" (dict "base" $baseURL "path" ((or $menu.PageRef $menu.URL) | relLangURL)) -}}
{{ end }}
{{- $pageURL := $page.RelPermalink -}}
{{- $isActive := or (and (hasPrefix $pageURL $menuURL) (ne $menuURL ("/" | relLangURL))) (eq $pageURL $menuURL) -}}
{{- $isActive := or (and (eq $pageURL $menuURL) (ne $menuURL ("/" | relLangURL))) (eq $pageURL $menuURL) -}}
{{ if not $menu.PageRef }}{{ $isActive = false }}{{ end }}
{{- $isAlias := $menu.Params.alias -}}
{{- $isIcon := $menu.Params.icon -}}
@@ -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

@@ -77,6 +77,7 @@
<!-- Initialize arguments -->
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $pretty := site.Params.main.internalLinks.pretty | default false }}
{{- $id := .id | default (printf "navbar-%d" 0) -}}
{{- $page := .page -}}
{{- $baseURL := $page.Scratch.Get "baseURL" -}}
@@ -276,7 +277,11 @@
{{- end -}}
{{- else -}}
{{- range site.Languages -}}
<li><a class="dropdown-item" href="{{ partial "utilities/URLJoin.html" (dict "base" $baseURL "path" .Lang) }}" hreflang="{{.Lang}}">{{ default .Lang .LanguageName }}</a></li>
{{ $dest := partial "utilities/URLJoin.html" (dict "base" $baseURL "path" .Lang) }}
{{ if and $pretty (not (hasSuffix $dest "/")) }}
{{ $dest = printf "%s/" $dest }}
{{ end }}
<li><a class="dropdown-item" href="{{ $dest }}" hreflang="{{ .Lang }}">{{ default .Lang .LanguageName }}</a></li>
{{- end -}}
{{- end -}}
</ul>

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

@@ -28,12 +28,37 @@
{{- $doc_slug := partial "utilities/URLJoin.html" (dict "base" $baseURL "path" ($group.title | urlize)) -}}
{{- $href := or $group.link $doc_slug -}}
{{ $ref := partial "utilities/GetPage.html" (dict "url" $href "page" $page) }}
{{ if eq $group.link "#" }}{{ $href = $doc_slug }}{{ end }}
{{- $collapsed := strings.HasPrefix $page.RelPermalink $href -}}
{{ if not (hasSuffix $href "/") }}{{ $href = printf "%s/" $href }}{{ end }}
{{- $current := eq $href $page.RelPermalink }}
<li class="mb-1">
<button class="btn btn-toggle d-inline-flex align-items-center rounded border-0 collapsed" data-bs-toggle="collapse" data-bs-target="#sidebar-collapse-{{ $index }}-{{ $level }}" aria-expanded="{{ if $collapsed }}true{{ else }}false{{ end }}">
<div class="text-start flex-fill">{{ $group.title }}</div>
<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) }}
{{ $dest = "" }}
{{ end }}
<a {{ with $dest }} href="{{ . }}"{{ else }}
data-bs-toggle="collapse"
data-bs-target="#sidebar-collapse-{{ $index }}-{{ $level }}"
{{ end }}>{{ $groupTitle }}</a>
</div>
<button
class="btn btn-toggle-group d-inline-flex align-items-center rounded border-0 collapsed"
data-bs-toggle="collapse"
data-bs-target="#sidebar-collapse-{{ $index }}-{{ $level }}"
aria-expanded="{{ if $collapsed }}true{{ else }}false{{ end }}"
>
</button>
</div>
<div class="collapse {{ if $collapsed }}show{{ end }}" id="sidebar-collapse-{{ $index }}-{{ $level }}">
<ul class="btn-toggle-nav list-unstyled fw-normal {{ if eq $level 0}} pb-1 {{ end }}ps-3">
{{- range $item := $group.pages -}}
@@ -79,9 +104,11 @@
{{ $href = . }}
{{ else }}
{{- $href = partial "utilities/URLJoin.html" (dict "base" $baseURL "path" .) -}}
{{ if not (hasSuffix $href "/") }}{{ $href = printf "%s/" $href }}{{ end }}
{{ end }}
{{ else }}
{{- $href = partial "utilities/URLJoin.html" (dict "base" $baseURL "path" ($title | urlize)) -}}
{{ if not (hasSuffix $href "/") }}{{ $href = printf "%s/" $href }}{{ end }}
{{ end }}
{{- $active := eq (strings.TrimSuffix "/" $page.RelPermalink) (strings.TrimSuffix "/" $href) -}}
@@ -91,7 +118,7 @@
<li>
<ul class="btn-toggle-nav list-unstyled fw-bold pb-1">
<li>
{{ $class := "sidebar-item text-decoration-none rounded" }}
{{ $class := "sidebar-item text-decoration-none rounded w-100" }}
{{ if $active }}{{ $class = printf "%s active" $class }}{{ end }}
{{ $link := partial "assets/link.html" (dict "destination" $href "text" $title "class" $class "page" $page) }}
{{ if $link }}
@@ -104,7 +131,7 @@
</li>
{{ else }}
<li>
{{ $class := "sidebar-item text-decoration-none rounded small" }}
{{ $class := "sidebar-item text-decoration-none rounded small w-100" }}
{{ if $active }}{{ $class = printf "%s active" $class }}{{ end }}
{{ $link := partial "assets/link.html" (dict "destination" $href "text" $title "class" $class "page" $page) }}
{{ if $link }}

View File

@@ -4,42 +4,86 @@
Visit gethinode.com/license for more details.
-->
{{ define "partials/inline-table.html" }}
{{ $page := .page }}
{{ $input := .input }}
{{ $args := .args }}
{{ $sortable := .sortable | default false }}
{{ $paging := .paging | default false }}
{{ $searchable := .searchable | default false }}
{{ $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 -}}
{{ $attributes := .attributes }}
{{ $class := .class }}
{{ $wrap := .wrap }}
{{- if in $responsive "table-responsive-none" -}}
{{- $responsive = "" -}}
{{- else if not $responsive -}}
{{ $responsive = (slice "table-responsive") -}}
{{- end -}}
{{- $class := delimit $main " " -}}
{{ if or $sortable $paging $searchable }}{{ $class = trim (printf "%s data-table" $class) " " }}{{ end }}
{{- $input := $input | $page.RenderString }}
{{ if $wrap }}{{ $input = printf "%s\n{.table-wrap}" (chomp $input) }}{{ end }}
{{- $input = $input | $page.RenderString }}
{{ $regex := `<table\s*class="(.+?)"` }}
{{ $current := (index (index (findRESubmatch $regex $input) 0) 1) }}
{{ $target := delimit (((split $current " ") | append "table" | append $class) | uniq) " " }}
{{ $attributes := "" }}
{{ if $sortable }}{{ $attributes = printf "%s data-table-sortable=true" $attributes }}{{ end }}
{{ if $paging }}
{{ $attributes = printf "%s data-table-paging=true" $attributes }}
{{ $attributes := printf "%s data-table-paging-option-perPage=%s" $attributes $pagingOptionPerPage }}
{{ if (ne $pagingOptionPerPageSelect "") }}{{ $attributes := printf "%s data-table-paging-option-perPageSelect=%d" $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 -}}
{{- with $responsive }}<div class="{{ delimit . " " }}">{{ end -}}
{{ $input | safeHTML }}
{{- with $responsive }}</div>{{ end -}}
{{ return $input }}
{{ end }}
<!-- 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 := "" }}
{{ if $args.sortable }}{{ $attributes = printf "%s data-table-sortable=true" $attributes }}{{ end }}
{{ if $args.paging }}
{{ $attributes = printf "%s data-table-paging=true" $attributes }}
{{ $attributes = printf "%s data-table-paging-option-perPage=%d" $attributes $args.pagingOptionPerPage }}
{{ if (ne $args.pagingOptionPerPageSelect "") }}
{{ $attributes = printf "%s data-table-paging-option-perPageSelect=%s" $attributes $args.pagingOptionPerPageSelect }}
{{ end }}
{{ end }}
{{ if $args.searchable }}{{ $attributes = printf "%s data-table-searchable=true" $attributes }}{{ end }}
<!-- Main code -->
{{- $breakpoint := $args.page.Scratch.Get "breakpoint" -}}
{{ $regular := partial "partials/inline-table.html" (dict
"page" $args.page
"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,19 +4,29 @@
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) -}}
<!-- 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")
@@ -32,8 +42,22 @@
</div>
<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">
<small>{{ $page.TableOfContents }}</small>
{{- 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 }}
{{- 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

@@ -81,5 +81,5 @@
{{ 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 }}

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

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

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

226
package-lock.json generated
View File

@@ -1,26 +1,26 @@
{
"name": "@gethinode/hinode",
"version": "0.27.25",
"version": "0.29.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@gethinode/hinode",
"version": "0.27.25",
"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.17.0",
"markdownlint-cli2": "^0.17.1",
"eslint": "^9.18.0",
"markdownlint-cli2": "^0.17.2",
"neostandard": "^0.12.0",
"netlify-plugin-hugo-cache-resources": "^0.2.1",
"npm-run-all": "^4.1.5",
@@ -28,7 +28,7 @@
"replace-in-files-cli": "^3.0.0",
"rimraf": "^6.0.1",
"shx": "^0.3.4",
"stylelint": "^16.12.0",
"stylelint": "^16.13.2",
"stylelint-config-standard-scss": "^14.0.0"
},
"optionalDependencies": {
@@ -343,10 +343,13 @@
}
},
"node_modules/@eslint/core": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz",
"integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==",
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz",
"integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.15"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
@@ -375,9 +378,9 @@
}
},
"node_modules/@eslint/js": {
"version": "9.17.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz",
"integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==",
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz",
"integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==",
"dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -393,11 +396,12 @@
}
},
"node_modules/@eslint/plugin-kit": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz",
"integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==",
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz",
"integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==",
"dev": true,
"dependencies": {
"@eslint/core": "^0.10.0",
"levn": "^0.4.1"
},
"engines": {
@@ -408,6 +412,7 @@
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-7.0.2.tgz",
"integrity": "sha512-U4zAXNaVztbDxO9EdcLp51F3UxxYsb/7DN89rFxFJhfk2Wua2pvw2Kf3HdspbPhW/wpHjSjsxWYoIlbTgRSjbQ==",
"license": "MIT",
"dependencies": {
"purgecss": "^7.0.2"
},
@@ -581,6 +586,39 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/@keyv/serialize": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.2.tgz",
"integrity": "sha512-+E/LyaAeuABniD/RvUezWVXKpeuvwLEA9//nE9952zBaOdBd2mQ3pPoM8cUe2X6IcMByfuSLzmYqnYshG60+HQ==",
"dev": true,
"dependencies": {
"buffer": "^6.0.3"
}
},
"node_modules/@keyv/serialize/node_modules/buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -751,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": {
@@ -1600,6 +1638,16 @@
"node": "*"
}
},
"node_modules/cacheable": {
"version": "1.8.7",
"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.7.tgz",
"integrity": "sha512-AbfG7dAuYNjYxFUtL1lAqmlWdxczCJ47w7cFjhGcnGnUdwSo6VgmSojfoW3tUI12HUkgTJ5kqj78yyq6TsFtlg==",
"dev": true,
"dependencies": {
"hookified": "^1.6.0",
"keyv": "^5.2.3"
}
},
"node_modules/cacheable-lookup": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
@@ -1625,6 +1673,15 @@
"node": ">=14.16"
}
},
"node_modules/cacheable/node_modules/keyv": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.2.3.tgz",
"integrity": "sha512-AGKecUfzrowabUv0bH1RIR5Vf7w+l4S3xtQAypKaUpTdIR1EbrAcTxHCrpo9Q+IWeUlFE2palRtgIQcgm+PQJw==",
"dev": true,
"dependencies": {
"@keyv/serialize": "^1.0.2"
}
},
"node_modules/call-bind": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
@@ -2735,18 +2792,18 @@
}
},
"node_modules/eslint": {
"version": "9.17.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz",
"integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==",
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz",
"integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.19.0",
"@eslint/core": "^0.9.0",
"@eslint/core": "^0.10.0",
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "9.17.0",
"@eslint/plugin-kit": "^0.2.3",
"@eslint/js": "9.18.0",
"@eslint/plugin-kit": "^0.2.5",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.1",
@@ -3256,16 +3313,16 @@
"integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
},
"node_modules/fast-glob": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.4"
"micromatch": "^4.0.8"
},
"engines": {
"node": ">=8.6.0"
@@ -3439,9 +3496,9 @@
}
},
"node_modules/flatted": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
"integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
"integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
"dev": true
},
"node_modules/for-each": {
@@ -4073,6 +4130,12 @@
"node": ">= 0.4"
}
},
"node_modules/hookified": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.6.0.tgz",
"integrity": "sha512-se7cpwTA+iA/eY548Bu03JJqBiEZAqU2jnyKdj5B5qurtBg64CZGHTgqCv4Yh7NWu6FGI09W61MCq+NoPj9GXA==",
"dev": true
},
"node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -4109,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",
@@ -4119,6 +4182,7 @@
}
],
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"@xhmikosr/bin-wrapper": "^13.0.5",
"package-config": "^5.0.0"
@@ -4847,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",
@@ -5048,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",
@@ -5071,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"
},
@@ -7219,6 +7283,7 @@
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/purgecss/-/purgecss-7.0.2.tgz",
"integrity": "sha512-4Ku8KoxNhOWi9X1XJ73XY5fv+I+hhTRedKpGs/2gaBKU8ijUiIKF/uyyIyh7Wo713bELSICF5/NswjcuOqYouQ==",
"license": "MIT",
"dependencies": {
"commander": "^12.1.0",
"glob": "^11.0.0",
@@ -7243,6 +7308,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
@@ -7251,14 +7317,16 @@
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/purgecss/node_modules/glob": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
"integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz",
"integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==",
"license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^4.0.1",
@@ -7281,6 +7349,7 @@
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
"integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -8290,9 +8359,9 @@
}
},
"node_modules/stylelint": {
"version": "16.12.0",
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz",
"integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==",
"version": "16.13.2",
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.13.2.tgz",
"integrity": "sha512-wDlgh0mRO9RtSa3TdidqHd0nOG8MmUyVKl+dxA6C1j8aZRzpNeEgdhFmU5y4sZx4Fc6r46p0fI7p1vR5O2DZqA==",
"dev": true,
"funding": [
{
@@ -8314,16 +8383,16 @@
"colord": "^2.9.3",
"cosmiconfig": "^9.0.0",
"css-functions-list": "^3.2.3",
"css-tree": "^3.0.1",
"css-tree": "^3.1.0",
"debug": "^4.3.7",
"fast-glob": "^3.3.2",
"fast-glob": "^3.3.3",
"fastest-levenshtein": "^1.0.16",
"file-entry-cache": "^9.1.0",
"file-entry-cache": "^10.0.5",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.3.1",
"ignore": "^6.0.2",
"ignore": "^7.0.1",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
"known-css-properties": "^0.35.0",
@@ -8551,13 +8620,12 @@
"dev": true
},
"node_modules/stylelint/node_modules/css-tree": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.0.1.tgz",
"integrity": "sha512-8Fxxv+tGhORlshCdCwnNJytvlvq46sOLSYEx2ZIGurahWvMucSRnyjPA3AmrMq4VPRYbHVpWj5VkiVasrM2H4Q==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
"integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
"dev": true,
"license": "MIT",
"dependencies": {
"mdn-data": "2.12.1",
"mdn-data": "2.12.2",
"source-map-js": "^1.0.1"
},
"engines": {
@@ -8565,28 +8633,23 @@
}
},
"node_modules/stylelint/node_modules/file-entry-cache": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz",
"integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==",
"version": "10.0.5",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.5.tgz",
"integrity": "sha512-umpQsJrBNsdMDgreSryMEXvJh66XeLtZUwA8Gj7rHGearGufUFv6rB/bcXRFsiGWw/VeSUgUofF4Rf2UKEOrTA==",
"dev": true,
"dependencies": {
"flat-cache": "^5.0.0"
},
"engines": {
"node": ">=18"
"flat-cache": "^6.1.5"
}
},
"node_modules/stylelint/node_modules/flat-cache": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz",
"integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==",
"version": "6.1.5",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.5.tgz",
"integrity": "sha512-QR+2kN38f8nMfiIQ1LHYjuDEmZNZVjxuxY+HufbS3BW0EX01Q5OnH7iduOYRutmgiXb797HAKcXUeXrvRjjgSQ==",
"dev": true,
"dependencies": {
"flatted": "^3.3.1",
"keyv": "^4.5.4"
},
"engines": {
"node": ">=18"
"cacheable": "^1.8.7",
"flatted": "^3.3.2",
"hookified": "^1.6.0"
}
},
"node_modules/stylelint/node_modules/globby": {
@@ -8619,20 +8682,19 @@
}
},
"node_modules/stylelint/node_modules/ignore": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
"integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz",
"integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==",
"dev": true,
"engines": {
"node": ">= 4"
}
},
"node_modules/stylelint/node_modules/mdn-data": {
"version": "2.12.1",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.1.tgz",
"integrity": "sha512-rsfnCbOHjqrhWxwt5/wtSLzpoKTzW7OXdT5lLOIH1OTYhWu9rRJveGq0sKvDZODABH7RX+uoR+DYcpFnq4Tf6Q==",
"dev": true,
"license": "CC0-1.0"
"version": "2.12.2",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
"integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
"dev": true
},
"node_modules/stylelint/node_modules/postcss-selector-parser": {
"version": "7.0.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@gethinode/hinode",
"version": "0.27.25",
"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.17.0",
"markdownlint-cli2": "^0.17.1",
"eslint": "^9.18.0",
"markdownlint-cli2": "^0.17.2",
"neostandard": "^0.12.0",
"netlify-plugin-hugo-cache-resources": "^0.2.1",
"npm-run-all": "^4.1.5",
@@ -88,7 +88,7 @@
"replace-in-files-cli": "^3.0.0",
"rimraf": "^6.0.1",
"shx": "^0.3.4",
"stylelint": "^16.12.0",
"stylelint": "^16.13.2",
"stylelint-config-standard-scss": "^14.0.0"
},
"optionalDependencies": {

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"