Compare commits

...

178 Commits

Author SHA1 Message Date
Mark Dumay
895d606175 Merge pull request #1182 from gethinode/develop
Bump Netlify build environment
2024-09-10 09:36:02 +02:00
Mark Dumay
9a17df96f3 Merge branch 'main' into develop 2024-09-10 07:17:05 +02:00
Mark Dumay
d2e1a1678a Bump Netlify build environment 2024-09-10 07:16:39 +02:00
Mark Dumay
d8451e2699 Merge pull request #1181 from gethinode/develop
Fix deprecation warning
2024-09-10 07:15:09 +02:00
Mark Dumay
f98ab74905 Merge branch 'main' into develop 2024-09-10 07:09:30 +02:00
Mark Dumay
6e453ea2ab Fix deprecation warning 2024-09-10 07:09:05 +02:00
Mark Dumay
d6ca890c80 Merge pull request #1180 from gethinode/develop
Improve handling of unsupported alert types
2024-09-10 07:07:51 +02:00
Mark Dumay
46aecfe65a Merge branch 'main' into develop 2024-09-10 06:58:26 +02:00
Mark Dumay
496c07ff7e Improve handling of unsupported alert types 2024-09-10 06:55:56 +02:00
github-actions[bot]
3a63f4fad7 Merge pull request #1179 from gethinode/dependabot/npm_and_yarn/eslint-9.10.0
Bump eslint from 9.9.1 to 9.10.0
2024-09-09 13:24:05 +00:00
dependabot[bot]
bbf99507d6 Bump eslint from 9.9.1 to 9.10.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.9.1 to 9.10.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.9.1...v9.10.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 13:18:22 +00:00
Mark Dumay
2a92cfd155 Merge pull request #1175 from gethinode/develop
Fix thumbnail init
2024-09-08 13:46:21 +02:00
Mark Dumay
31a5377cf4 Merge branch 'main' into develop 2024-09-08 13:40:46 +02:00
Mark Dumay
633a33796c Fix thumbnail init 2024-09-08 13:40:26 +02:00
Mark Dumay
9b224317bb Fix thumbnail used in seo metadata 2024-09-08 13:33:13 +02:00
Mark Dumay
a410fcaa19 Merge pull request #1174 from gethinode/develop
Make core elements compatible with Hugo < v0.112.0
2024-09-08 12:18:52 +02:00
Mark Dumay
a6b2ddd2f9 Merge branch 'main' into develop 2024-09-08 12:12:57 +02:00
Mark Dumay
2e4a3660cc Make core elements compatible with Hugo < v0.112.0 2024-09-08 12:12:28 +02:00
Mark Dumay
2b0620b2d9 Merge pull request #1173 from gethinode/develop
Fix linting issues
2024-09-08 12:04:43 +02:00
Mark Dumay
98fc43cf7d Merge branch 'main' into develop 2024-09-08 11:58:49 +02:00
Mark Dumay
de1101c7ec Fix linting issues 2024-09-08 11:55:49 +02:00
Mark Dumay
c42f3bb27b Merge pull request #1171 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-09-08 11:52:24 +02:00
Mark Dumay
267007b7e8 Merge branch 'main' into hugo-mod-dependencies 2024-09-08 11:46:59 +02:00
Mark Dumay
77288da0de Merge pull request #1172 from gethinode/develop
Improve code layout
2024-09-08 11:43:01 +02:00
Mark Dumay
1764ccd9f4 Merge branch 'main' into develop 2024-09-08 11:37:38 +02:00
Mark Dumay
14f8c27eca Improve code layout 2024-09-08 11:37:16 +02:00
markdumay
884b7b323d fix: update Hugo module dependencies 2024-09-08 03:07:03 +00:00
github-actions[bot]
a0795b35db Merge pull request #1167 from gethinode/dependabot/npm_and_yarn/markdownlint-cli2-0.14.0
Bump markdownlint-cli2 from 0.13.0 to 0.14.0
2024-09-07 14:02:31 +00:00
Mark Dumay
0db4e4c32a Merge branch 'main' into dependabot/npm_and_yarn/markdownlint-cli2-0.14.0 2024-09-07 15:58:37 +02:00
Mark Dumay
71a084943c Merge pull request #1170 from gethinode/develop
Fix linting issue
2024-09-07 15:58:27 +02:00
Mark Dumay
6bad597805 Merge branch 'main' into develop 2024-09-07 15:52:08 +02:00
Mark Dumay
b11aefd592 Fix linting issue 2024-09-07 15:51:32 +02:00
Mark Dumay
f280f6402b Merge branch 'main' into dependabot/npm_and_yarn/markdownlint-cli2-0.14.0 2024-09-07 15:47:40 +02:00
Mark Dumay
157b3da43e Merge pull request #1169 from gethinode/develop
Fix linting issue
2024-09-07 15:47:25 +02:00
Mark Dumay
5de693297f Merge branch 'main' into develop 2024-09-07 15:40:25 +02:00
Mark Dumay
65633ca62c Fix linting issue 2024-09-07 15:39:54 +02:00
dependabot[bot]
81589efb00 Bump markdownlint-cli2 from 0.13.0 to 0.14.0
Bumps [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) from 0.13.0 to 0.14.0.
- [Changelog](https://github.com/DavidAnson/markdownlint-cli2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/DavidAnson/markdownlint-cli2/compare/v0.13.0...v0.14.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-07 13:38:18 +00:00
Mark Dumay
1d50bb5ed2 Merge pull request #1168 from gethinode/develop
Make video partial compatible with Hugo < v0.112.0
2024-09-07 15:37:08 +02:00
Mark Dumay
b5a19fa7d6 Refine video path 2024-09-07 15:29:50 +02:00
Mark Dumay
fc76bac8b0 Merge branch 'main' into develop 2024-09-07 13:43:49 +02:00
Mark Dumay
f671c31130 Make video partial compatible with Hugo < v0.112.0 2024-09-07 13:43:01 +02:00
github-actions[bot]
cdb84e8f21 Merge pull request #1166 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.131.1
Bump hugo-bin from 0.131.0 to 0.131.1
2024-09-06 13:48:38 +00:00
dependabot[bot]
121625515a Bump hugo-bin from 0.131.0 to 0.131.1
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.131.0 to 0.131.1.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.131.0...v0.131.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-06 13:43:21 +00:00
Mark Dumay
60b6e1c960 Merge pull request #1160 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-09-05 19:45:31 +02:00
Mark Dumay
6628e9f879 Merge branch 'main' into hugo-mod-dependencies 2024-09-05 19:36:37 +02:00
Mark Dumay
a3178e06af Merge pull request #1163 from gethinode/develop
Migrate to neostandard eslint
2024-09-05 19:35:38 +02:00
Mark Dumay
fc86946cff Merge branch 'main' into develop 2024-09-05 19:24:59 +02:00
Mark Dumay
e440386999 Migrate to neostandard eslint
See #1143
2024-09-05 19:20:34 +02:00
Mark Dumay
01c864bd64 Merge branch 'main' into hugo-mod-dependencies 2024-09-05 18:13:04 +02:00
github-actions[bot]
16cc468cf1 Merge pull request #1162 from gethinode/dependabot/npm_and_yarn/cssnano-7.0.6
Bump cssnano from 7.0.5 to 7.0.6
2024-09-05 13:52:10 +00:00
dependabot[bot]
1147c8fff6 Bump cssnano from 7.0.5 to 7.0.6
Bumps [cssnano](https://github.com/cssnano/cssnano) from 7.0.5 to 7.0.6.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano@7.0.5...cssnano@7.0.6)

---
updated-dependencies:
- dependency-name: cssnano
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-05 13:46:27 +00:00
github-actions[bot]
6b0fd9e244 Merge pull request #1161 from gethinode/dependabot/npm_and_yarn/cssnano-preset-advanced-7.0.6
Bump cssnano-preset-advanced from 7.0.5 to 7.0.6
2024-09-05 13:45:18 +00:00
dependabot[bot]
05bb9417b0 Bump cssnano-preset-advanced from 7.0.5 to 7.0.6
Bumps [cssnano-preset-advanced](https://github.com/cssnano/cssnano) from 7.0.5 to 7.0.6.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano-preset-advanced@7.0.5...cssnano-preset-advanced@7.0.6)

---
updated-dependencies:
- dependency-name: cssnano-preset-advanced
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-05 13:40:18 +00:00
markdumay
03fc50852a fix: update Hugo module dependencies 2024-09-05 03:06:20 +00:00
Mark Dumay
4de91bb7f2 Merge pull request #1159 from gethinode/develop
Enhance styling options of cards and card groups
2024-09-04 16:11:13 +02:00
Mark Dumay
96b9a3b38d Merge branch 'main' into develop 2024-09-04 16:03:24 +02:00
Mark Dumay
da52d6e596 Bump package release 2024-09-04 16:01:57 +02:00
Mark Dumay
b369e34f32 Extend styling options of card groups 2024-09-04 16:01:46 +02:00
Mark Dumay
e456061d19 Extend configuration of card body 2024-09-04 15:59:38 +02:00
Mark Dumay
a87de9c37c Add overlay support to card 2024-09-04 15:58:48 +02:00
Mark Dumay
6283970443 Merge pull request #1158 from gethinode/develop
Fix deprecation warnings
2024-09-04 14:43:06 +02:00
Mark Dumay
200ca109b1 Merge branch 'main' into develop 2024-09-04 14:36:00 +02:00
Mark Dumay
acded37e83 Use css.PostCSS instead of deprecated resources.PostCSS 2024-09-04 14:35:21 +02:00
Mark Dumay
782a40e1e8 Use pagerSize instead of deprecated pagination key 2024-09-04 14:35:16 +02:00
Mark Dumay
7b2bb803b3 Merge pull request #1157 from gethinode/develop
Support table render hook
2024-09-04 14:25:44 +02:00
Mark Dumay
0e0561b081 Merge branch 'main' into develop 2024-09-04 14:18:14 +02:00
Mark Dumay
e3cf2e1337 Support table render hook
Fixes #1156
2024-09-04 14:17:45 +02:00
github-actions[bot]
c18316250b Merge pull request #1153 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.131.0
Bump hugo-bin from 0.130.1 to 0.131.0
2024-09-04 07:09:54 +00:00
Mark Dumay
29a8666d7d Merge branch 'main' into dependabot/npm_and_yarn/hugo-bin-0.131.0 2024-09-04 08:06:53 +02:00
Mark Dumay
431125e46c Merge pull request #1155 from gethinode/develop
Support type hstring.HTML introduced in Hugo v0.134.0
2024-09-04 08:06:41 +02:00
Mark Dumay
dae6541185 Merge branch 'main' into develop 2024-09-04 07:56:38 +02:00
Mark Dumay
41d0edb6c1 Support type hstring.HTML introduced in Hugo v0.134.0 2024-09-04 07:55:45 +02:00
Mark Dumay
5d9d11c388 Merge pull request #1154 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-09-04 07:52:26 +02:00
markdumay
3b26c04bdd fix: update Hugo module dependencies 2024-09-04 03:05:46 +00:00
dependabot[bot]
01d41ae38e Bump hugo-bin from 0.130.1 to 0.131.0
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.130.1 to 0.131.0.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.130.1...v0.131.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>
2024-09-03 13:53:26 +00:00
github-actions[bot]
22d5859432 Merge pull request #1152 from gethinode/dependabot/npm_and_yarn/eslint-plugin-import-2.30.0
Bump eslint-plugin-import from 2.29.1 to 2.30.0
2024-09-03 13:52:15 +00:00
dependabot[bot]
551b185dd9 Bump eslint-plugin-import from 2.29.1 to 2.30.0
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.29.1 to 2.30.0.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...v2.30.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-03 13:47:25 +00:00
Mark Dumay
2edf12fb8b Merge pull request #1150 from gethinode/develop
Bump package release
2024-09-02 20:10:11 +02:00
Mark Dumay
fbdf79e05e Merge branch 'main' into develop 2024-09-02 16:27:37 +02:00
Mark Dumay
92e37ef847 Bump package release 2024-09-02 16:27:00 +02:00
Mark Dumay
62084600a5 Merge pull request #1149 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-09-02 16:26:30 +02:00
markdumay
8867ab1cbe fix: update Hugo module dependencies 2024-09-02 14:20:28 +00:00
Mark Dumay
c3e09c341f Merge pull request #1147 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-08-31 13:00:11 +02:00
Mark Dumay
6cf4deceb7 Merge branch 'main' into hugo-mod-dependencies 2024-08-31 12:53:43 +02:00
Mark Dumay
0dd790cf7a Merge pull request #1148 from ignaciocastro/main
Change site.IsMultilingual to hugo.IsMultilingual on navbar.html
2024-08-31 12:53:20 +02:00
Ignacio Castro
6353b68c3e Change site.IsMultilingual to hugo.IsMultilingual
site.IsMultilingual was deprecated in 0.124.0
2024-08-31 00:07:38 -04:00
markdumay
fadd5b2fb5 fix: update Hugo module dependencies 2024-08-30 03:06:10 +00:00
github-actions[bot]
1d4add88ec Merge pull request #1146 from gethinode/dependabot/npm_and_yarn/stylelint-16.9.0
Bump stylelint from 16.8.2 to 16.9.0
2024-08-28 14:02:26 +00:00
dependabot[bot]
0b779d5f3a Bump stylelint from 16.8.2 to 16.9.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.8.2 to 16.9.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.8.2...16.9.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-28 13:57:37 +00:00
Mark Dumay
2898745383 Merge pull request #1145 from gethinode/develop
Suppress card button when link target is not specified
2024-08-28 11:21:50 +02:00
Mark Dumay
892546886b Merge branch 'main' into develop 2024-08-28 10:56:10 +02:00
Mark Dumay
b09f039929 Suppress card button when link target is not specified 2024-08-28 10:55:32 +02:00
Mark Dumay
86bcfa21fa Merge pull request #1144 from gethinode/develop
Refine video component
2024-08-28 10:44:06 +02:00
Mark Dumay
f97eeff745 Merge branch 'main' into develop 2024-08-28 10:36:32 +02:00
Mark Dumay
205e10d86b Improve video error messages 2024-08-28 10:35:53 +02:00
Mark Dumay
3eb0794f08 Refine video arguments 2024-08-28 08:55:23 +02:00
Mark Dumay
a1abc5970f Merge pull request #1141 from d-oit/patch-1
Update de.yaml
2024-08-28 08:12:10 +02:00
Dominik Oswald
7b0839ad92 Update de.yaml
add # alerts section
2024-08-27 17:56:40 +02:00
github-actions[bot]
3f20ddcd65 Merge pull request #1140 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.130.1
Bump hugo-bin from 0.130.0 to 0.130.1
2024-08-27 13:30:35 +00:00
dependabot[bot]
24e0282eb7 Bump hugo-bin from 0.130.0 to 0.130.1
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.130.0 to 0.130.1.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.130.0...v0.130.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-27 13:24:59 +00:00
Mark Dumay
9fba521bc5 Merge pull request #1137 from gethinode/develop
Add support for Cloudinary videos
2024-08-26 09:34:52 +02:00
Mark Dumay
60a34aac97 Fix error handling when Cloudinary video thumbnail is not found 2024-08-26 09:25:22 +02:00
Mark Dumay
15daf8c090 Merge branch 'main' into develop 2024-08-26 09:17:19 +02:00
Mark Dumay
7e4459ca8d Add support for Cloudinary videos 2024-08-26 09:16:48 +02:00
Mark Dumay
5ef2aad372 Merge pull request #1131 from gethinode/develop
Adjust padding of video based on aspect ratio
2024-08-25 12:56:35 +02:00
Mark Dumay
4c6f4a9da9 Merge branch 'main' into develop 2024-08-25 09:02:11 +02:00
Mark Dumay
fd7f3692dd Adjust padding of video based on aspect ratio 2024-08-25 09:01:37 +02:00
Mark Dumay
f48b462c51 Merge pull request #1130 from gethinode/develop
Add support for configurable video players
2024-08-24 15:49:26 +02:00
Mark Dumay
287bc7700c Merge branch 'main' into develop 2024-08-24 11:41:49 +02:00
Mark Dumay
ee5e2745e2 Add support for configurable video players
Refactors previous YouTube shortcode into a reusable video partial. The partial includes support for Vimeo. A new shortcode Vimeo is added.

In the future, the code could be refactored to use adapters, similar to the image partial.
2024-08-24 11:41:26 +02:00
github-actions[bot]
31fb07e180 Merge pull request #1129 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.130.0
Bump hugo-bin from 0.129.2 to 0.130.0
2024-08-23 13:28:04 +00:00
dependabot[bot]
aaf8513688 Bump hugo-bin from 0.129.2 to 0.130.0
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.129.2 to 0.130.0.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.129.2...v0.130.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>
2024-08-23 13:23:26 +00:00
Mark Dumay
acd2812218 Merge pull request #1128 from gethinode/develop
Fix search input margin on smaller screens
2024-08-23 11:19:58 +02:00
Mark Dumay
665357e538 Merge branch 'main' into develop 2024-08-23 08:17:00 +02:00
Mark Dumay
f678352b78 Fix search input margin on smaller screens 2024-08-23 08:16:25 +02:00
Mark Dumay
17b39caef7 Merge pull request #1127 from gethinode/develop
Fix border behavior of card zoom animation
2024-08-23 08:07:03 +02:00
Mark Dumay
38ab9f2e43 Merge branch 'main' into develop 2024-08-23 08:00:12 +02:00
Mark Dumay
aa4da56910 Fix border behavior of card zoom animation 2024-08-23 07:58:43 +02:00
Mark Dumay
ea8e851e45 Merge pull request #1124 from gethinode/develop
Fix navbar behavior
2024-08-21 10:56:08 +02:00
Mark Dumay
90e6c9869d Merge branch 'main' into develop 2024-08-21 10:42:52 +02:00
Mark Dumay
628eb99f62 Skip navbar theme update when not fixed 2024-08-21 10:41:07 +02:00
Mark Dumay
a0293cc081 Fix navbar item status when pageref is unspecified 2024-08-21 10:40:48 +02:00
Mark Dumay
d37dcdd20c Fix navbar overlay behavior when not fixed 2024-08-21 10:40:36 +02:00
Mark Dumay
f0ff631b0d Merge pull request #1122 from gethinode/develop
Fix schema config
2024-08-21 07:24:48 +02:00
Mark Dumay
b84bd07073 Merge branch 'main' into develop 2024-08-21 07:14:24 +02:00
Mark Dumay
b800906956 Fix schema config 2024-08-21 07:13:53 +02:00
Mark Dumay
049b38d3c1 Merge pull request #1121 from gethinode/develop
Fix sidebar config
2024-08-21 07:13:07 +02:00
Mark Dumay
27c2500c92 Merge branch 'main' into develop 2024-08-21 07:07:15 +02:00
Mark Dumay
a182b2a134 Merge pull request #1119 from d-oit/main
Update de.yaml, fix schema.org exampleSite
2024-08-21 07:06:41 +02:00
Mark Dumay
43abf793b8 Merge branch 'main' into main 2024-08-21 06:50:07 +02:00
Mark Dumay
e11fa8d377 Bump package release 2024-08-21 06:48:06 +02:00
Mark Dumay
fb94544bb0 Update build stats 2024-08-21 06:47:41 +02:00
Mark Dumay
67f687d6b9 Fix sidebar config
See #1120
2024-08-21 06:47:05 +02:00
Dominik Oswald
879efc07e8 ExampleSite: Fix schema.org config
Author is missing: 

https://validator.schema.org/#url=https%3A%2F%2Fdemo.gethinode.com%2Fen%2Fblog%2Fimage%2F

fix:
[author] > schema.author
2024-08-18 17:10:38 +02:00
Mark Dumay
29bcb26d04 Merge pull request #1116 from gethinode/develop
Enable embedded Font Awesome icons
2024-08-17 16:02:43 +02:00
Mark Dumay
e04a8dc0ed Enable embedded Font Awesome icons
Fixes #394
2024-08-17 15:56:55 +02:00
Mark Dumay
c7e70bf933 Merge pull request #1114 from gethinode/download-link
Support links to static files and page resources
2024-08-17 15:44:15 +02:00
Mark Dumay
1700abc7de Merge branch 'main' into download-link 2024-08-17 14:57:41 +02:00
Mark Dumay
3ef857dba9 Fix link error 2024-08-17 08:00:03 +02:00
Mark Dumay
5acc2e8f9e Support links to static files and page resources 2024-08-16 19:05:07 +02:00
Mark Dumay
0caa00a1a1 Merge pull request #1112 from gethinode/develop
Support embedding of vector image assets
2024-08-16 16:23:19 +02:00
Mark Dumay
b27a5ac7cb Merge branch 'main' into develop 2024-08-16 16:14:19 +02:00
Mark Dumay
24261c9193 Support embedding of vector image assets 2024-08-16 16:13:42 +02:00
github-actions[bot]
d1aa9c0f7c Merge pull request #1111 from gethinode/dependabot/npm_and_yarn/stylelint-16.8.2
Bump stylelint from 16.8.1 to 16.8.2
2024-08-16 13:12:21 +00:00
dependabot[bot]
a18d387379 Bump stylelint from 16.8.1 to 16.8.2
Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.8.1 to 16.8.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.8.1...16.8.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-16 13:07:34 +00:00
Mark Dumay
2d9cbf9195 Merge pull request #1110 from gethinode/develop
Add assistive label to featured icons
2024-08-16 14:21:22 +02:00
Mark Dumay
64abda14ce Merge branch 'main' into develop 2024-08-16 14:15:55 +02:00
Mark Dumay
3625675577 Bump package release 2024-08-16 14:14:55 +02:00
Mark Dumay
e6e115a65d Update build stats 2024-08-16 14:12:34 +02:00
Mark Dumay
9832b566db Add assistive label to featured icons
Fixes #1106
2024-08-16 14:12:21 +02:00
Mark Dumay
f3211eabe0 Merge pull request #1109 from gethinode/develop
Fix reference to base URL in links
2024-08-16 13:52:15 +02:00
Mark Dumay
82c1d00af4 Merge branch 'main' into develop 2024-08-16 13:38:17 +02:00
Mark Dumay
70386eaeec Fix reference to base URL in links 2024-08-16 13:37:38 +02:00
Mark Dumay
7413155dea Merge pull request #1108 from gethinode/develop
Fix embedded and anchor links
2024-08-16 11:04:54 +02:00
Mark Dumay
cfd1706f5f Merge branch 'main' into develop 2024-08-16 10:58:37 +02:00
Mark Dumay
5eca63c50d Fix embedded and anchor links 2024-08-16 10:58:05 +02:00
Mark Dumay
d3f471a281 Merge pull request #1107 from gethinode/develop
Use utility function to retrieve the page associated with a card
2024-08-16 10:55:56 +02:00
Mark Dumay
b4acd7aef2 Merge branch 'main' into develop 2024-08-16 10:51:11 +02:00
Mark Dumay
49a3ef3c42 Use utility function to retrieve the page associated with a card 2024-08-16 10:50:36 +02:00
github-actions[bot]
56eaa9d90b Merge pull request #1105 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.129.2
Bump hugo-bin from 0.129.1 to 0.129.2
2024-08-15 13:42:51 +00:00
dependabot[bot]
492dbbec24 Bump hugo-bin from 0.129.1 to 0.129.2
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.129.1 to 0.129.2.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.129.1...v0.129.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-15 13:38:04 +00:00
Mark Dumay
d2fc5e3433 Merge pull request #1104 from gethinode/develop
Support markdown links
2024-08-15 15:15:30 +02:00
Mark Dumay
b5cc3f6d84 Merge branch 'main' into develop 2024-08-15 14:46:54 +02:00
Mark Dumay
e1e1041c1b Support markdown links
Closes #826
2024-08-15 14:46:10 +02:00
Mark Dumay
e1cac645a7 Merge pull request #1103 from gethinode/develop
Support markdown images
2024-08-15 13:14:35 +02:00
Mark Dumay
d23d533575 Merge branch 'main' into develop 2024-08-15 12:48:56 +02:00
Mark Dumay
d447a4a65a Support markdown images 2024-08-15 12:48:26 +02:00
Mark Dumay
3a466277e3 Merge pull request #1102 from gethinode/develop
Support server-side math rendering using KaTeX
2024-08-15 11:44:50 +02:00
Mark Dumay
2b09ceef93 Merge branch 'main' into develop 2024-08-15 10:22:46 +02:00
Mark Dumay
ee30409257 Support server-side math rendering using KaTeX 2024-08-15 10:22:12 +02:00
Dominik Oswald
c5edb65550 Update de.yaml 2024-08-15 10:07:42 +02:00
Mark Dumay
70583bdb33 Merge pull request #1101 from gethinode/develop
Fix rendering of theme toggle button
2024-08-14 16:57:34 +02:00
Mark Dumay
8e1a299a72 Merge branch 'main' into develop 2024-08-14 16:36:52 +02:00
Mark Dumay
e20aba4907 Improve initial state of theme toggle button 2024-08-14 16:33:04 +02:00
Mark Dumay
1aedf22923 Fix toggle button color in high-contrast mode 2024-08-14 14:47:10 +02:00
Mark Dumay
e77671ffef Merge pull request #1100 from gethinode/develop
Bump required Hugo version
2024-08-14 14:20:09 +02:00
Mark Dumay
433f8ef60d Merge branch 'main' into develop 2024-08-14 14:00:50 +02:00
Mark Dumay
acb261ba69 Bump required Hugo version
Hinode v0.25.5 uses the blockquote template and GitHub-style alerts introduced by Hugo v0.132.0
2024-08-14 13:33:41 +02:00
76 changed files with 2661 additions and 1312 deletions

View File

@@ -1,7 +0,0 @@
assets/js/critical/languageSelector.js
assets/js/critical/color.js
assets/js/analytics.js
assets/js/flexsearch.js
assets/js/sharing.js
assets/js/vendor
node_modules

View File

@@ -1,3 +1,4 @@
/* eslint-disable no-undef */
const alert = document.getElementById('page-alert') const alert = document.getElementById('page-alert')
const closeBtn = document.getElementById('page-alert-btn-close') const closeBtn = document.getElementById('page-alert-btn-close')
if (alert !== null && closeBtn !== null) { if (alert !== null && closeBtn !== null) {

View File

@@ -61,33 +61,14 @@
}) })
window.addEventListener('DOMContentLoaded', () => { window.addEventListener('DOMContentLoaded', () => {
const light = (document.documentElement.getAttribute('data-bs-theme') === 'light')
document.querySelectorAll('.ball').forEach(ball => {
ball.classList.add('notransition');
})
document.querySelectorAll('.navbar-mode-selector').forEach(chk => { document.querySelectorAll('.navbar-mode-selector').forEach(chk => {
chk.checked = light
chk.addEventListener('change', function () { chk.addEventListener('change', function () {
document.documentElement.setAttribute('data-bs-theme-animate', 'true') document.documentElement.setAttribute('data-bs-theme-animate', 'true')
toggleTheme() toggleTheme()
}) })
}) })
document.querySelectorAll('.ball').forEach(ball => {
ball.offsetHeight; // flush css changes
ball.classList.remove('notransition');
})
}) })
window.addEventListener('load', () => {
const light = (document.documentElement.getAttribute('data-bs-theme') === 'light')
document.querySelectorAll('.navbar-mode-selector').forEach(chk => {
chk.checked = light
})
});
// initialize theme directly when script is invoked // initialize theme directly when script is invoked
setTheme(getTheme()) setTheme(getTheme())
})() })()

View File

@@ -1,3 +1,4 @@
const fixed = {{ site.Params.navigation.fixed }}
const navbar = document.querySelector('.navbar') const navbar = document.querySelector('.navbar')
const togglers = document.querySelectorAll('.main-nav-toggler') const togglers = document.querySelectorAll('.main-nav-toggler')
const modeSelectors = document.querySelectorAll('.switch-mode-collapsed') const modeSelectors = document.querySelectorAll('.switch-mode-collapsed')
@@ -20,7 +21,7 @@ function updateNavbar () {
if ((navbar !== null) && (window.performance.getEntriesByType)) { if ((navbar !== null) && (window.performance.getEntriesByType)) {
if (window.performance.getEntriesByType('navigation')[0].type === 'reload') { if (window.performance.getEntriesByType('navigation')[0].type === 'reload') {
updateNavbar() fixed && updateNavbar()
} }
} }
@@ -32,7 +33,7 @@ if (navbar !== null && togglers !== null) {
attributeFilter: ['data-bs-theme'] attributeFilter: ['data-bs-theme']
} }
const Observer = new MutationObserver((mutationrecords) => { const Observer = new MutationObserver((mutationrecords) => {
updateNavbar() fixed && updateNavbar()
}) })
Observer.observe(html, config) Observer.observe(html, config)
@@ -43,7 +44,7 @@ if (navbar !== null && togglers !== null) {
// set the navbar background color to opaque when scrolling past a breakpoint // set the navbar background color to opaque when scrolling past a breakpoint
window.onscroll = () => { window.onscroll = () => {
updateNavbar() fixed && updateNavbar()
} }
// set the navbar background color to opaque when expanded // set the navbar background color to opaque when expanded

3
assets/js/video.js Normal file
View File

@@ -0,0 +1,3 @@
document.querySelectorAll('[data-video-padding]').forEach(element => {
element.style.paddingBottom = element.getAttribute('data-video-padding')
})

View File

@@ -5,11 +5,21 @@
background-color: var(--#{$prefix}secondary-bg); background-color: var(--#{$prefix}secondary-bg);
} }
.card-img-wrap { .card .card-img-wrap {
overflow: hidden; overflow: hidden;
position: relative; position: relative;
} }
.card .card-img-wrap:has(.card-img-top) {
border-top-left-radius: var(--#{$prefix}card-inner-border-radius);
border-top-right-radius: var(--#{$prefix}card-inner-border-radius);
}
.card .card-img-wrap:has(.card-img-bottom) {
border-bottom-right-radius: var(--#{$prefix}card-inner-border-radius);
border-bottom-left-radius: var(--#{$prefix}card-inner-border-radius);
}
.card-zoom { .card-zoom {
cursor: pointer; cursor: pointer;
} }

View File

@@ -1,5 +1,69 @@
// stylelint-disable annotation-no-unknown // stylelint-disable annotation-no-unknown
// adapted from https://www.codeply.com/p/UsTEwDkzNp#
.checkbox {
opacity: 0;
position: absolute;
}
.mode-switch {
--#{$prefix}mode-switch-width: 50px;
}
.mode-switch .label {
border-color: var(--#{$prefix}border-color);
border-style: solid;
border-width: 1px;
border-radius: var(--#{$prefix}mode-switch-width);
cursor: pointer;
display: flex;
align-items: center;
justify-content: space-between;
padding: 5px;
position: relative;
height: calc(1px + var(--#{$prefix}mode-switch-width) / 2);
width: var(--#{$prefix}mode-switch-width);
transform: scale(0.9);
}
.notransition {
-webkit-transition: none !important;
-moz-transition: none !important;
-o-transition: none !important;
transition: none !important;
}
.mode-switch .label .ball {
background-color: var(--#{$prefix}border-color);
border-radius: 50%;
position: absolute;
top: 2px;
left: 2px;
height: calc((var(--#{$prefix}mode-switch-width) / 2) - 5px);
width: calc((var(--#{$prefix}mode-switch-width) / 2) - 5px);
transition: transform 0.2s linear;
}
.mode-switch .checkbox:checked + .label .ball {
transform: translateX(calc((var(--#{$prefix}mode-switch-width) / 2) - 1px));
}
@if $enable-dark-mode {
[data-bs-theme="light"] .mode-switch .ball {
transform: translateX(calc((var(--#{$prefix}mode-switch-width) / 2) - 1px));
}
}
.mode-switch .fa-moon {
color: $yellow;
transform: scale(0.8);
}
.mode-switch .fa-sun {
color: var(--#{$prefix}bs-body-color);
transform: scale(0.8);
}
// Source: https://jsfiddle.net/njhgr40m/ // Source: https://jsfiddle.net/njhgr40m/
@if $enable-dark-mode { @if $enable-dark-mode {
@@ -49,9 +113,15 @@
--bs-navbar-active-color: white !important; --bs-navbar-active-color: white !important;
--bs-navbar-toggler-color: white; --bs-navbar-toggler-color: white;
.navbar-title { .navbar-title, .mode-switch {
--#{$prefix}border-color: white;
color: white !important; color: white !important;
} }
.mode-switch .fa-moon {
color: $white;
}
} }
.navbar-expanded { .navbar-expanded {
@@ -245,60 +315,7 @@
} }
} }
// adapted from https://www.codeply.com/p/UsTEwDkzNp# .navbar-overlay {
.checkbox { position: absolute;
opacity: 0; z-index: $zindex-fixed;
position: absolute;
}
.mode-switch {
--#{$prefix}mode-switch-width: 50px;
}
.mode-switch .label {
border-color: var(--#{$prefix}border-color);
border-style: solid;
border-width: 1px;
border-radius: var(--#{$prefix}mode-switch-width);
cursor: pointer;
display: flex;
align-items: center;
justify-content: space-between;
padding: 5px;
position: relative;
height: calc(1px + var(--#{$prefix}mode-switch-width) / 2);
width: var(--#{$prefix}mode-switch-width);
transform: scale(0.9);
}
.notransition {
-webkit-transition: none !important;
-moz-transition: none !important;
-o-transition: none !important;
transition: none !important;
}
.mode-switch .label .ball {
background-color: var(--#{$prefix}secondary-bg);
border-radius: 50%;
position: absolute;
top: 2px;
left: 2px;
height: calc((var(--#{$prefix}mode-switch-width) / 2) - 5px);
width: calc((var(--#{$prefix}mode-switch-width) / 2) - 5px);
transition: transform 0.2s linear;
}
.mode-switch .checkbox:checked + .label .ball {
transform: translateX(calc((var(--#{$prefix}mode-switch-width) / 2) - 1px));
}
.mode-switch .fa-moon {
color: $yellow;
transform: scale(0.8);
}
.mode-switch .fa-sun {
color: var(--#{$prefix}bs-body-color);
transform: scale(0.8);
} }

View File

@@ -1,11 +1,11 @@
.youtube-embedded { .video-embedded {
position: relative; position: relative;
padding-bottom: 56.25%; padding-bottom: 56.25%;
height: 0; height: 0;
overflow: hidden; overflow: hidden;
} }
.youtube-embedded > iframe { .video-embedded > iframe {
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;

View File

@@ -1,7 +1,6 @@
# toml-docs-start main # toml-docs-start main
title = "Hinode" title = "Hinode"
copyright = "Copyright © 2024 Mark Dumay." copyright = "Copyright © 2024 Mark Dumay."
paginate = 9
enableGitInfo = true enableGitInfo = true
# toml-docs-end main # toml-docs-end main
@@ -49,6 +48,9 @@ home = ["HTML", "RSS", "REDIR"]
[taxonomies] [taxonomies]
tag = 'tags' tag = 'tags'
[pagination]
pagerSize = 9
[privacy] [privacy]
[privacy.vimeo] [privacy.vimeo]
disabled = false disabled = false
@@ -95,7 +97,7 @@ home = ["HTML", "RSS", "REDIR"]
[module] [module]
[module.hugoVersion] [module.hugoVersion]
extended = true extended = true
min = "0.120.0" min = "0.134.0"
max = "" max = ""
[[module.mounts]] [[module.mounts]]
source = "archetypes" source = "archetypes"

View File

@@ -24,9 +24,15 @@ defaultMarkdownHandler = "goldmark"
table = true table = true
taskList = true taskList = true
typographer = true typographer = true
[goldmark.extensions.passthrough]
enable = true
[goldmark.extensions.passthrough.delimiters]
block = [['\[', '\]'], ['$$', '$$']]
inline = [['\(', '\)'], ['$', '$']]
[goldmark.parser] [goldmark.parser]
autoHeadingID = true autoHeadingID = true
autoHeadingIDType = 'github' autoHeadingIDType = 'github'
wrapStandAloneImageWithinParagraph = false
[goldmark.parser.attribute] [goldmark.parser.attribute]
block = true block = true
[goldmark.renderer] [goldmark.renderer]

View File

@@ -27,11 +27,24 @@
host = "imgix" host = "imgix"
# toml-docs-end images # toml-docs-end images
# toml-docs-start videos
[videos]
[videos.cloudinary]
host = "cloudinary"
account = "demo"
[videos.vimeo]
host = "vimeo"
[videos.youtube]
host = "youtube"
# toml-docs-end videos
# toml-docs-start debugging # toml-docs-start debugging
[debugging] [debugging]
showJS = false showJS = false
showSCSS = false showSCSS = false
purgeHTMLComments = false purgeHTMLComments = false
includeSVGOrigin = true
# toml-docs-end debugging # toml-docs-end debugging
# toml-docs-start docs # toml-docs-start docs
@@ -171,16 +184,16 @@
# linkedIn = "" # linkedIn = ""
github = "https://github.com/gethinode/hinode" github = "https://github.com/gethinode/hinode"
section = "blog" section = "blog"
[author] [schema.author]
name = "Mark Dumay" name = "Mark Dumay"
# twitter = "https://twitter.com/markdumay" # twitter = "https://twitter.com/markdumay"
linkedin = "https://www.linkedin.com/in/markdumay/" linkedin = "https://www.linkedin.com/in/markdumay/"
github = "https://github.com/markdumay" github = "https://github.com/markdumay"
[logo] [schema.logo]
url = "img/logo512x512.png" url = "img/logo512x512.png"
width = 512 width = 512
height = 512 height = 512
[image] [schema.image]
url = "img/logo1280x640.png" url = "img/logo1280x640.png"
width = 1280 width = 1280
height = 640 height = 640

View File

@@ -14,7 +14,7 @@ for = '/**'
connect-src 'self' connect-src 'self'
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \ https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \
font-src 'self' https://fonts.gstatic.com; \ font-src 'self' https://fonts.gstatic.com; \
frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com; \ frame-src 'self' https://player.cloudinary.com https://player.vimeo.com https://www.youtube-nocookie.com https://www.youtube.com; \
img-src 'self' data: https://*.imgix.net https://*.imagekit.io https://*.cloudinary.com https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \ img-src 'self' data: https://*.imgix.net https://*.imagekit.io https://*.cloudinary.com https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self' \ media-src 'self' \
@@ -29,7 +29,6 @@ for = '/**'
camera=(), \ camera=(), \
magnetometer=(), \ magnetometer=(), \
gyroscope=(), \ gyroscope=(), \
fullscreen=(), \
payment=() \ payment=() \
""" """
cache-control = """\ cache-control = """\

View File

@@ -96,12 +96,14 @@ arguments:
screens. screens.
wrapper: wrapper:
type: string type: string
default: p-0
optional: true optional: true
comment: >- comment: >-
Class attributes of the wrapper element, e.g. `p-4 px-xxl-0`. Class attributes of the wrapper element, e.g. `p-4 px-xxl-0`.
responsive: responsive:
type: bool type: bool
optional: true optional: true
default: true
comment: >- comment: >-
Flag indicating if the number of columns should be responsive, defaults to Flag indicating if the number of columns should be responsive, defaults to
`true`. `true`.
@@ -132,5 +134,33 @@ arguments:
hook: hook:
type: string type: string
optional: true optional: true
default: assets/card.html
comment: Render hook for the card partial. comment: Render hook for the card partial.
group: partial group: partial
bento:
type: bool
optional: true
default: false
comment: >-
Trigger to use a bento-style layout instead of default grid layout.
release: v0.27.0
valign:
type: select
optional: true
comment: >-
Defines the vertical card alignment, only applicable in bento layout.
release: v0.27.0
options:
values:
- start
- center
- end
styles:
type:
- '[]map[string]interface {}'
optional: true
comment: >-
Styles to apply to the individual cards. Supported elements are `ratio`,
`orientation`, `portrait`, and `width`. The styles are rotated when the
amount of cards exceeds the available amount of styles.
release: v0.27.0

View File

@@ -101,6 +101,7 @@ arguments:
options: options:
values: values:
- full - full
- title
- none - none
footer: footer:
type: select type: select
@@ -227,6 +228,7 @@ arguments:
- stacked - stacked
- horizontal - horizontal
- horizontal-sm - horizontal-sm
- overlay
- none - none
subtle: subtle:
type: bool type: bool

View File

@@ -36,6 +36,7 @@ arguments:
page: page:
type: type:
- '*hugolib.pageState' - '*hugolib.pageState'
- '*hugolib.pageForRenderHooks'
- '*hugolib.pageForShortcode' - '*hugolib.pageForShortcode'
optional: true optional: true
comment: Page context, used to match page resources. comment: Page context, used to match page resources.
@@ -109,7 +110,10 @@ arguments:
image set. image set.
group: partial group: partial
title: title:
type: string type:
- string
- hstring.RenderedString
- hstring.HTML
optional: true optional: true
comment: Alternate text of the image. comment: Alternate text of the image.
caption: caption:

View File

@@ -10,6 +10,7 @@ arguments:
page: page:
type: type:
- '*hugolib.pageState' - '*hugolib.pageState'
- '*hugolib.pageForRenderHooks'
- '*hugolib.pageForShortcode' - '*hugolib.pageForShortcode'
optional: false optional: false
group: partial group: partial
@@ -70,11 +71,18 @@ arguments:
type: type:
- string - string
- template.HTML - template.HTML
- hstring.RenderedString
- hstring.HTML
optional: true optional: true
group: partial group: partial
comment: Link description.
title:
type: string
optional: true
comment: Link title. comment: Link title.
release: v0.26.0
body: body:
type: string type: string
optional: true optional: true
group: shortcode group: shortcode
comment: Link title. comment: Link description.

90
data/structures/video.yml Normal file
View File

@@ -0,0 +1,90 @@
comment: >-
Embeds a responsive video player for supported video providers. The video is
embedded in a responsive frame.
arguments:
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: false
group: partial
release: v0.26.5
comment: Context of the current page.
position:
type:
- 'text.Position'
optional: true
group: partial
release: v0.26.5
comment: Filename and position from which the shortcode was called.
host:
type: string
optional: true
default: youtube
release: v0.26.5
comment: >-
Host name of the video provider. It should match one of the registered
providers in the site's parameters under `videos`.
title:
type: string
optional: true
comment: >-
Title of the video. You can also set `autotitle` to retrieve the title
programmatically at build time, if supported by the provider.
class:
type: string
optional: true
position: 1
comment: >-
Class attribute of the video wrapper element.
id:
type: string
optional: false
position: 0
comment: Public ID of the video to be embedded.
account:
type: string
optional: true
comment: >-
Account name of the video asset, required by some digital asset managers.
You can also set the default account name in the site's parameters.
release: v0.26.5
autoplay:
type: bool
optional: true
default: false
comment: >-
Flag indicating the video should start playing immediately when loaded, if
supported by the browser. The audio will be muted.
autotitle:
type: bool
optional: true
default: false
release: v0.25.2
comment: >-
Trigger to retrieve the title from the video metadata, if supported by the
provider.
ratio:
type: select
optional: true
comment: >-
Ratio of the video. If set, determines the padding of the embedded video
frame. When not specified, the video dimensions used to calculate the
padding are retrieved programmatically.
options:
values:
- 1x1
- 3x2
- 4x3
- 16x9
- 21x9
release: v0.26.5
portrait:
type: bool
optional: true
default: false
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

View File

@@ -1,35 +0,0 @@
comment: >-
Embeds a responsive video player for YouTube videos. Only the ID of the video
is required. In privacy-enhanced mode, YouTube will not store information
about visitors on your website unless the user plays the embedded video.
arguments:
title:
type: string
optional: true
comment: >-
Title of the video.
class:
type: string
optional: true
position: 1
comment: >-
Class attribute of the video wrapper element.
id:
type: string
optional: false
position: 0
comment: Identifier of the video to be embedded.
autoplay:
type: bool
optional: true
default: false
comment: >-
Flag indicating the video should start playing immediately when loaded, if
supported by the browser. The audio will be muted.
autotitle:
type: bool
optional: true
default: false
release: v0.25.2
comment: >-
Trigger to retrieve the title from the video metadata.

14
eslint.config.js Normal file
View File

@@ -0,0 +1,14 @@
'use strict'
module.exports = require('neostandard')({
ignores: [
'assets/js/critical/languageSelector.js',
'assets/js/critical/color.js',
'assets/js/analytics.js',
'assets/js/flexsearch.js',
'assets/js/navbar.js',
'assets/js/sharing.js',
'assets/js/vendor',
'node_modules',
]
})

View File

@@ -1,7 +1,6 @@
resourcedir = '../resources/' resourcedir = '../resources/'
title = "Hinode" title = "Hinode"
copyright = "Copyright © 2024 Mark Dumay." copyright = "Copyright © 2024 Mark Dumay."
paginate = 9
enableGitInfo = true enableGitInfo = true
# additional settings # additional settings
@@ -39,6 +38,9 @@ home = ["HTML", "RSS", "REDIR"]
[taxonomies] [taxonomies]
tag = 'tags' tag = 'tags'
[pagination]
pagerSize = 9
[privacy] [privacy]
[privacy.vimeo] [privacy.vimeo]
disabled = false disabled = false

View File

@@ -24,9 +24,15 @@ defaultMarkdownHandler = "goldmark"
table = true table = true
taskList = true taskList = true
typographer = true typographer = true
[goldmark.extensions.passthrough]
enable = true
[goldmark.extensions.passthrough.delimiters]
block = [['\[', '\]'], ['$$', '$$']]
inline = [['\(', '\)'], ['$', '$']]
[goldmark.parser] [goldmark.parser]
autoHeadingID = true autoHeadingID = true
autoHeadingIDType = 'github' autoHeadingIDType = 'github'
wrapStandAloneImageWithinParagraph = false
[goldmark.parser.attribute] [goldmark.parser.attribute]
block = true block = true
[goldmark.renderer] [goldmark.renderer]

View File

@@ -18,6 +18,7 @@
showJS = false showJS = false
showSCSS = false showSCSS = false
purgeHTMLComments = true # prevents a Goldmark warning when processing HTML comments (as used by markdownlint) purgeHTMLComments = true # prevents a Goldmark warning when processing HTML comments (as used by markdownlint)
includeSVGOrigin = true
[docs] [docs]
basePath = "/" # TODO: replace basePath = "/" # TODO: replace
@@ -164,16 +165,16 @@
# linkedIn = "" # linkedIn = ""
github = "https://github.com/gethinode/hinode" github = "https://github.com/gethinode/hinode"
section = "blog" section = "blog"
[author] [schema.author]
name = "Mark Dumay" name = "Mark Dumay"
# twitter = "https://twitter.com/markdumay" # twitter = "https://twitter.com/markdumay"
linkedin = "https://www.linkedin.com/in/markdumay/" linkedin = "https://www.linkedin.com/in/markdumay/"
github = "https://github.com/markdumay" github = "https://github.com/markdumay"
[logo] [schema.logo]
url = "img/logo512x512.png" url = "img/logo512x512.png"
width = 512 width = 512
height = 512 height = 512
[image] [schema.image]
url = "img/logo1280x640.png" url = "img/logo1280x640.png"
width = 1280 width = 1280
height = 640 height = 640

View File

@@ -14,7 +14,7 @@ for = '/**'
connect-src 'self' connect-src 'self'
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \ https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \
font-src 'self' https://fonts.gstatic.com; \ font-src 'self' https://fonts.gstatic.com; \
frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com; \ frame-src 'self' https://player.cloudinary.com https://player.vimeo.com https://www.youtube-nocookie.com https://www.youtube.com; \
img-src 'self' data: https://*.imgix.net https://*.imagekit.io https://*.cloudinary.com https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \ img-src 'self' data: https://*.imgix.net https://*.imagekit.io https://*.cloudinary.com https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self' \ media-src 'self' \
@@ -29,7 +29,6 @@ for = '/**'
camera=(), \ camera=(), \
magnetometer=(), \ magnetometer=(), \
gyroscope=(), \ gyroscope=(), \
fullscreen=(), \
payment=() \ payment=() \
""" """
cache-control = """\ cache-control = """\

View File

@@ -27,6 +27,6 @@ Additional features include:
* Reusable Bootstrap components through configurable shortcodes and partials * Reusable Bootstrap components through configurable shortcodes and partials
* Versioned documentation, including sidebar navigation and version switcher * Versioned documentation, including sidebar navigation and version switcher
* Responsive image handling for multiple screen sizes and resolutions * Responsive image handling for multiple screen sizes and resolutions
* Optimized search results, scoring 100 points for SEO on [PageSpeed Insights]({{< param "links.pagespeed" >}}) * Optimized search results, scoring 100 points for SEO on [PageSpeed Insights]({{% param "links.pagespeed" %}})
* Secure by default, scoring A+ on [Mozilla Observatory test]({{< param "links.observatory" >}}) * Secure by default, scoring A+ on [Mozilla Observatory test]({{% param "links.observatory" %}})
{.tickmark} {.tickmark}

View File

@@ -12,7 +12,7 @@ thumbnail:
originURL: https://unsplash.com/photos/QLPWQvHvmII originURL: https://unsplash.com/photos/QLPWQvHvmII
--- ---
Hinode provides several shortcodes that wrap common Bootstrap components. Refer to the [official documentation]({{< param "links.hinode_docs" >}}) for more details. Hinode provides several shortcodes that wrap common Bootstrap components. Refer to the [official documentation]({{% param "links.hinode_docs" %}}) for more details.
## Abbr ## Abbr
@@ -121,7 +121,7 @@ As an example, the following shortcode displays a group of three buttons.
## Card ## Card
As an example, the following shortcode displays a stacked card that links to the [about]({{< ref "about" >}}) page. It includes a custom header. As an example, the following shortcode displays a stacked card that links to the [about]({{% ref "about" %}}) page. It includes a custom header.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
@@ -264,6 +264,13 @@ As an example, the following shortcode displays an image with rounded corners an
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
The same image, but then using Markdown syntax:
{{< example lang="hugo" >}}
![Flowers](/img/flowers.jpg "Figure caption")
{class="rounded col-md-6" ratio="4x3" portrait=true wrapper="text-center"}
{{< /example >}}
As an example, the following shortcode displays a regular vector image. As an example, the following shortcode displays a regular vector image.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
@@ -411,7 +418,7 @@ As an example, the following shortcode displays superscript text.
As an example, the following shortcode displays a responsive table. As an example, the following shortcode displays a responsive table.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 MD058 -->
{{< example lang="markdown" >}} {{< example lang="markdown" >}}
{{</* table */>}} {{</* table */>}}
| # | Heading | Heading | Heading | Heading | Heading | Heading | Heading | Heading | Heading | | # | Heading | Heading | Heading | Heading | Heading | Heading | Heading | Heading | Heading |
@@ -421,7 +428,7 @@ As an example, the following shortcode displays a responsive table.
| 3. | cell | cel | cel | cel | cel | cel | cel | cel | cel | | 3. | cell | cel | cel | cel | cel | cel | cel | cel | cel |
{{</* /table */>}} {{</* /table */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 MD058 -->
## Timeline ## Timeline
@@ -467,6 +474,26 @@ As an example, the following shortcode displays a tooltip for a colored hyperlin
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
## Video
As an example, the following shortcode displays an Elephants video hosted by Cloudinary.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* video host="cloudinary" account="demo" id="elephants" autoplay=true */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Vimeo
As an example, the following shortcode displays a Vimeo video.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* vimeo id="55073825" autoplay=true autotitle=true */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Youtube ## Youtube
As an example, the following shortcode displays a Hugo quickstart guide. As an example, the following shortcode displays a Hugo quickstart guide.

View File

@@ -10,10 +10,10 @@ thumbnail:
authorURL: https://unsplash.com/@ryoji__iwata authorURL: https://unsplash.com/@ryoji__iwata
origin: Unsplash origin: Unsplash
originURL: https://unsplash.com/photos/5siQcvSxCP8 originURL: https://unsplash.com/photos/5siQcvSxCP8
modules: ["katex", "leaflet", "lottie", "simple-datatables"] modules: ["leaflet", "lottie", "simple-datatables"]
--- ---
Hinode provides several shortcodes on top of the common [Bootstrap elements]({{< relref "bootstrap-elements" >}}). Refer to the [official documentation]({{< param "links.hinode_docs" >}}) for more details. Hinode provides several shortcodes on top of the common [Bootstrap elements]({{% relref "bootstrap-elements" %}}). Refer to the [official documentation]({{% param "links.hinode_docs" %}}) for more details.
## Animation ## Animation
@@ -29,7 +29,7 @@ As an example, the following shortcode shows an animation that plays on hover.
As an example, the following shortcode displays a responsive table that uses advanced controls. As an example, the following shortcode displays a responsive table that uses advanced controls.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 MD058 -->
{{< example lang="markdown" >}} {{< example lang="markdown" >}}
{{</* table sortable="true" paging="true" searchable="true" */>}} {{</* table sortable="true" paging="true" searchable="true" */>}}
| # | Heading | | # | Heading |
@@ -70,7 +70,7 @@ As an example, the following shortcode displays a responsive table that uses adv
## Formula (KaTeX) ## Formula (KaTeX)
As an example, the following markdown renders two formulas using the KaTeX typesetting library. As an example, the following markdown renders two formulas using server-side math rendering using KaTeX.
{{< example lang="markdown" >}} {{< example lang="markdown" >}}
This is an inline $-b \pm \sqrt{b^2 - 4ac} \over 2a$ formula This is an inline $-b \pm \sqrt{b^2 - 4ac} \over 2a$ formula

View File

@@ -28,6 +28,6 @@ Les fonctionnalités supplémentaires incluent:
- Composants bootstrap réutilisables à travers des codes et partiels configurables - Composants bootstrap réutilisables à travers des codes et partiels configurables
- Documentation versionnée, incluant une navigation latérale et un sélecteur de version. - Documentation versionnée, incluant une navigation latérale et un sélecteur de version.
- Gestion d'images adaptatives pour plusieurs tailles d'écran et résolutions. - Gestion d'images adaptatives pour plusieurs tailles d'écran et résolutions.
- Résultats de recherche optimisés, obtenant un score de 100 points pour le référencement (SEO) sur [PageSpeed Insights]({{< param "links.pagespeed" >}}). - Résultats de recherche optimisés, obtenant un score de 100 points pour le référencement (SEO) sur [PageSpeed Insights]({{% param "links.pagespeed" %}}).
- Sécurisé par défaut, obtenant un score A+ au test [Mozilla Observatory]({{< param "links.observatory" >}}) - Sécurisé par défaut, obtenant un score A+ au test [Mozilla Observatory]({{% param "links.observatory" %}})
{.tickmark} {.tickmark}

View File

@@ -13,7 +13,7 @@ thumbnail:
originURL: https://unsplash.com/photos/QLPWQvHvmII originURL: https://unsplash.com/photos/QLPWQvHvmII
--- ---
Hinode propose plusieurs shortcodes qui enveloppent des composants Bootstrap courants. Consultez la [documentation officielle]({{< param "links.hinode_docs" >}}) pour plus de détails. Hinode propose plusieurs shortcodes qui enveloppent des composants Bootstrap courants. Consultez la [documentation officielle]({{% param "links.hinode_docs" %}}) pour plus de détails.
## Abbr ## Abbr
@@ -121,7 +121,7 @@ En-tête 6 {{</* badge title="Nouveau" */>}}
## Carte ## Carte
À titre d'exemple, le shortcode suivant affiche une carte empilée qui renvoie à la page [à propos]({{< ref "about" >}}). Elle inclut un en-tête personnalisé. À titre d'exemple, le shortcode suivant affiche une carte empilée qui renvoie à la page [à propos]({{% ref "about" %}}). Elle inclut un en-tête personnalisé.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}

View File

@@ -14,7 +14,7 @@ thumbnail:
modules: ["katex", "leaflet", "lottie"] modules: ["katex", "leaflet", "lottie"]
--- ---
Hinode propose plusieurs shortcodes en plus des [éléments Bootstrap]({{< relref "bootstrap-elements" >}}) courants. Consultez la [documentation officielle]({{< param "links.hinode_docs" >}}) pour plus de détails. Hinode propose plusieurs shortcodes en plus des [éléments Bootstrap]({{% relref "bootstrap-elements" %}}) courants. Consultez la [documentation officielle]({{% param "links.hinode_docs" %}}) pour plus de détails.
## Animation ## Animation

View File

@@ -29,6 +29,6 @@ Overige functies:
* Herbruikbare Bootstrap componenten via shortcodes en partials * Herbruikbare Bootstrap componenten via shortcodes en partials
* Versiebeheer van documentatiepagina's, inclusief secundaire navigatie en selectie van versies * Versiebeheer van documentatiepagina's, inclusief secundaire navigatie en selectie van versies
* Optimalisering van foto's voor meerdere schermafmetingen en resoluties * Optimalisering van foto's voor meerdere schermafmetingen en resoluties
* Optimale zoekresultaten, met 100 punten voor SEO volgens [PageSpeed Insights]({{< param "links.pagespeed" >}}) * Optimale zoekresultaten, met 100 punten voor SEO volgens [PageSpeed Insights]({{% param "links.pagespeed" %}})
* Veilige communicatie, met een score van A+ volgens [Mozilla Observatory]({{< param "links.observatory" >}}) * Veilige communicatie, met een score van A+ volgens [Mozilla Observatory]({{% param "links.observatory" %}})
{.tickmark} {.tickmark}

View File

@@ -3,8 +3,8 @@
"tags": [ "tags": [
"a", "a",
"abbr", "abbr",
"annotation",
"body", "body",
"br",
"button", "button",
"code", "code",
"div", "div",
@@ -15,7 +15,6 @@
"form", "form",
"h2", "h2",
"h3", "h3",
"h5",
"head", "head",
"hr", "hr",
"html", "html",
@@ -27,7 +26,17 @@
"li", "li",
"link", "link",
"mark", "mark",
"math",
"meta", "meta",
"mfrac",
"mi",
"mn",
"mo",
"mrow",
"mspace",
"msqrt",
"msub",
"msup",
"nav", "nav",
"noscript", "noscript",
"ol", "ol",
@@ -35,12 +44,14 @@
"path", "path",
"pre", "pre",
"script", "script",
"semantics",
"small", "small",
"span", "span",
"strong", "strong",
"sub", "sub",
"sup", "sup",
"svg", "svg",
"symbol",
"table", "table",
"tbody", "tbody",
"td", "td",
@@ -268,6 +279,7 @@
"justify-content-center", "justify-content-center",
"justify-content-end", "justify-content-end",
"justify-content-start", "justify-content-start",
"katex",
"label", "label",
"lead", "lead",
"leaflet-map", "leaflet-map",
@@ -300,6 +312,7 @@
"mt-4", "mt-4",
"mt-5", "mt-5",
"mt-auto", "mt-auto",
"mt-md-0",
"multi-docs-collapse-15", "multi-docs-collapse-15",
"multi-file-collapse-1", "multi-file-collapse-1",
"mx-auto", "mx-auto",
@@ -329,11 +342,6 @@
"navbar-toggler", "navbar-toggler",
"next", "next",
"no-js", "no-js",
"offcanvas",
"offcanvas-body",
"offcanvas-header",
"offcanvas-start",
"offcanvas-title",
"order-0", "order-0",
"order-1", "order-1",
"order-first", "order-first",
@@ -465,11 +473,11 @@
"top-bar", "top-bar",
"translate-middle", "translate-middle",
"translate-middle-y", "translate-middle-y",
"video-embedded",
"visually-hidden", "visually-hidden",
"vr", "vr",
"w-100", "w-100",
"w-50", "w-50"
"youtube-embedded"
], ],
"ids": [ "ids": [
"TableOfContents", "TableOfContents",
@@ -507,11 +515,42 @@
"collapse", "collapse",
"collapse-1", "collapse-1",
"command-prompt", "command-prompt",
"custom-activity",
"data-tables", "data-tables",
"docs", "docs",
"documentation", "documentation",
"example", "example",
"exemple", "exemple",
"fa-face-frown",
"fa-square-check",
"fab-bootstrap",
"fab-docker",
"fab-facebook",
"fab-github",
"fab-linkedin",
"fab-medium",
"fab-whatsapp",
"fab-x-twitter",
"fas-angle-left",
"fas-angle-right",
"fas-angles-left",
"fas-angles-right",
"fas-arrow-left",
"fas-arrow-right",
"fas-circle-check",
"fas-code",
"fas-ellipsis",
"fas-globe",
"fas-heart",
"fas-house",
"fas-link",
"fas-magnifying-glass",
"fas-moon",
"fas-rocket",
"fas-share-nodes",
"fas-sort",
"fas-sun",
"fas-up-right-from-square",
"fichier", "fichier",
"fil-dariane", "fil-dariane",
"file", "file",
@@ -550,8 +589,6 @@
"navbar-sample-collapse", "navbar-sample-collapse",
"navigation", "navigation",
"notification", "notification",
"offcanvas-label",
"offcanvass-sidebar",
"persona", "persona",
"projecten", "projecten",
"projects", "projects",
@@ -572,6 +609,8 @@
"toast-message-email-4", "toast-message-email-4",
"toc-collapse", "toc-collapse",
"tooltip", "tooltip",
"video",
"vimeo",
"youtube" "youtube"
] ]
} }

8
go.mod
View File

@@ -6,12 +6,12 @@ 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.1 // indirect github.com/gethinode/mod-bootstrap v1.3.1 // indirect
github.com/gethinode/mod-flexsearch/v2 v2.0.1 // indirect github.com/gethinode/mod-flexsearch/v2 v2.0.1 // indirect
github.com/gethinode/mod-fontawesome v1.9.1 // indirect github.com/gethinode/mod-fontawesome v1.10.0 // indirect
github.com/gethinode/mod-katex v1.1.2 // indirect github.com/gethinode/mod-katex v1.1.2 // indirect
github.com/gethinode/mod-leaflet v1.1.1 // indirect github.com/gethinode/mod-leaflet v1.1.1 // indirect
github.com/gethinode/mod-lottie v1.5.6 // indirect github.com/gethinode/mod-lottie v1.5.8 // indirect
github.com/gethinode/mod-simple-datatables v1.0.7 // indirect github.com/gethinode/mod-simple-datatables v1.0.10 // indirect
github.com/gethinode/mod-utils/v2 v2.3.10 // indirect github.com/gethinode/mod-utils/v2 v2.7.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
) )

22
go.sum
View File

@@ -116,6 +116,8 @@ github.com/gethinode/mod-fontawesome v1.9.0 h1:xqUB8AnezMHAt8lye4ksqvmHSVPCOkiHs
github.com/gethinode/mod-fontawesome v1.9.0/go.mod h1:xBKsZH3WJtMOItZVlp9SbO51uaBy6IbvUZSKpNu3b6Y= github.com/gethinode/mod-fontawesome v1.9.0/go.mod h1:xBKsZH3WJtMOItZVlp9SbO51uaBy6IbvUZSKpNu3b6Y=
github.com/gethinode/mod-fontawesome v1.9.1 h1:cQk84vriqffM4fuUUoM9j3SSD+3ppeW2j4ta7AiToMU= github.com/gethinode/mod-fontawesome v1.9.1 h1:cQk84vriqffM4fuUUoM9j3SSD+3ppeW2j4ta7AiToMU=
github.com/gethinode/mod-fontawesome v1.9.1/go.mod h1:xBKsZH3WJtMOItZVlp9SbO51uaBy6IbvUZSKpNu3b6Y= github.com/gethinode/mod-fontawesome v1.9.1/go.mod h1:xBKsZH3WJtMOItZVlp9SbO51uaBy6IbvUZSKpNu3b6Y=
github.com/gethinode/mod-fontawesome v1.10.0 h1:Izs2AKc+YVBa1TywcH54OKLTNCUMXRoFIqOs+n0FgOo=
github.com/gethinode/mod-fontawesome v1.10.0/go.mod h1:xBKsZH3WJtMOItZVlp9SbO51uaBy6IbvUZSKpNu3b6Y=
github.com/gethinode/mod-katex v1.0.0 h1:me/3dIIZBkfk1mRIFt8QiAGYwYDoSG5bc2hHRtIutFc= 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.0/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.1 h1:809QUztxmKgMNchU+v03iMO7Ma+ISc3ZzhXYauc21rs= github.com/gethinode/mod-katex v1.0.1 h1:809QUztxmKgMNchU+v03iMO7Ma+ISc3ZzhXYauc21rs=
@@ -200,6 +202,10 @@ github.com/gethinode/mod-lottie v1.5.5 h1:uEJKsz+ovsZtbGkMhPONcIhtG6M3RjYiK+iVoS
github.com/gethinode/mod-lottie v1.5.5/go.mod h1:VTvBxD8VokICwnEqM0VUZFZHBYxLf4/grDFQyEh1DL0= github.com/gethinode/mod-lottie v1.5.5/go.mod h1:VTvBxD8VokICwnEqM0VUZFZHBYxLf4/grDFQyEh1DL0=
github.com/gethinode/mod-lottie v1.5.6 h1:dxz5nmD0XXEt/DAOc1s5fIPynj5bhzDL32EEwLFCSmk= github.com/gethinode/mod-lottie v1.5.6 h1:dxz5nmD0XXEt/DAOc1s5fIPynj5bhzDL32EEwLFCSmk=
github.com/gethinode/mod-lottie v1.5.6/go.mod h1:VTvBxD8VokICwnEqM0VUZFZHBYxLf4/grDFQyEh1DL0= github.com/gethinode/mod-lottie v1.5.6/go.mod h1:VTvBxD8VokICwnEqM0VUZFZHBYxLf4/grDFQyEh1DL0=
github.com/gethinode/mod-lottie v1.5.7 h1:hcf04kmKv7xrI2byxtgHwkScYIHfP9aquInHNZP+qbk=
github.com/gethinode/mod-lottie v1.5.7/go.mod h1:rhWg+MSSnWmqHKNEViE/9/78RjQD6uWWFASgjvFjgyo=
github.com/gethinode/mod-lottie v1.5.8 h1:glg5HcjOBkFt5MoF7p24NN+RzctExPQUDXvdhPx9u6I=
github.com/gethinode/mod-lottie v1.5.8/go.mod h1:Z/FlAcCJWYI1Z9tQnL0yRN4lqhyZl9CqYpfJUPVDaGc=
github.com/gethinode/mod-simple-datatables v1.0.0 h1:Dj4WGw12OkaimwkCpLn5Jhmd49dvNJW9O2P/W9F+HlQ= github.com/gethinode/mod-simple-datatables v1.0.0 h1:Dj4WGw12OkaimwkCpLn5Jhmd49dvNJW9O2P/W9F+HlQ=
github.com/gethinode/mod-simple-datatables v1.0.0/go.mod h1:K8T7fIdb8pMOB+OSW4A5lz5IW99+HyzcTgx764fvOGw= github.com/gethinode/mod-simple-datatables v1.0.0/go.mod h1:K8T7fIdb8pMOB+OSW4A5lz5IW99+HyzcTgx764fvOGw=
github.com/gethinode/mod-simple-datatables v1.0.2 h1:zhqxHet3iLQWYCBbGROALpOY9zQlptMycFkz1Tto5bA= github.com/gethinode/mod-simple-datatables v1.0.2 h1:zhqxHet3iLQWYCBbGROALpOY9zQlptMycFkz1Tto5bA=
@@ -212,6 +218,12 @@ github.com/gethinode/mod-simple-datatables v1.0.6 h1:voKiwLAfC7kfD+atv7ah0sOf8Oc
github.com/gethinode/mod-simple-datatables v1.0.6/go.mod h1:Y7AzIYAWpzDKLvH96eqBA/Gs3jompWCgxadLuoKZ/rc= github.com/gethinode/mod-simple-datatables v1.0.6/go.mod h1:Y7AzIYAWpzDKLvH96eqBA/Gs3jompWCgxadLuoKZ/rc=
github.com/gethinode/mod-simple-datatables v1.0.7 h1:pfxWhgmn/njJcynNIDnUyeOBW0tsy2E4TP21sEYsqRs= github.com/gethinode/mod-simple-datatables v1.0.7 h1:pfxWhgmn/njJcynNIDnUyeOBW0tsy2E4TP21sEYsqRs=
github.com/gethinode/mod-simple-datatables v1.0.7/go.mod h1:Y7AzIYAWpzDKLvH96eqBA/Gs3jompWCgxadLuoKZ/rc= github.com/gethinode/mod-simple-datatables v1.0.7/go.mod h1:Y7AzIYAWpzDKLvH96eqBA/Gs3jompWCgxadLuoKZ/rc=
github.com/gethinode/mod-simple-datatables v1.0.8 h1:J8hA+SXdTLaRNZwN70ZEyADn+VgNoAaxVDMXsMPTZBg=
github.com/gethinode/mod-simple-datatables v1.0.8/go.mod h1:RsTHWAt1J9/m7kzhYNSJB7CDyk+8DrG+46/aFrP6KJw=
github.com/gethinode/mod-simple-datatables v1.0.9 h1:8OnpY/axFkgxJ598DHW4nDtxsCYmgTakAG4ZC2wRS3A=
github.com/gethinode/mod-simple-datatables v1.0.9/go.mod h1:rgQWdDZ6lTR9+08dGY1zBDLZI/UneKPufakAK20+lmI=
github.com/gethinode/mod-simple-datatables v1.0.10 h1:/nYy4oCgooUJhTBgLdQzMnJEjolkD+dp2nkfLNT9Klg=
github.com/gethinode/mod-simple-datatables v1.0.10/go.mod h1:rgQWdDZ6lTR9+08dGY1zBDLZI/UneKPufakAK20+lmI=
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=
@@ -258,6 +270,16 @@ github.com/gethinode/mod-utils/v2 v2.3.9 h1:Z9uAr6S0wunlkfKHa2D/U83fBV6Ivtf+7sjB
github.com/gethinode/mod-utils/v2 v2.3.9/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY= github.com/gethinode/mod-utils/v2 v2.3.9/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
github.com/gethinode/mod-utils/v2 v2.3.10 h1:+coUXdgAbLEE8Tvb3Rfk/1Nr6oDVreXI2sil0pa/n2Q= github.com/gethinode/mod-utils/v2 v2.3.10 h1:+coUXdgAbLEE8Tvb3Rfk/1Nr6oDVreXI2sil0pa/n2Q=
github.com/gethinode/mod-utils/v2 v2.3.10/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY= github.com/gethinode/mod-utils/v2 v2.3.10/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
github.com/gethinode/mod-utils/v2 v2.4.0 h1:mmG4hWaeA4krAg933pibH+TrjFmPHkAi/DUbe3SM38I=
github.com/gethinode/mod-utils/v2 v2.4.0/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
github.com/gethinode/mod-utils/v2 v2.5.0 h1:9QboNU9KTpmJDS9JBjxavbknLVBJilocqo5KhC2FdME=
github.com/gethinode/mod-utils/v2 v2.5.0/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
github.com/gethinode/mod-utils/v2 v2.5.2 h1:URGTpJo0dN4/oF2yL6o2d2pkcSlG1F0hgIF9UqpIs/E=
github.com/gethinode/mod-utils/v2 v2.5.2/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
github.com/gethinode/mod-utils/v2 v2.6.0 h1:r7l/E6fbPZHnjFyJY4T/xzekd7Xp3czNVCMgKoKR8wc=
github.com/gethinode/mod-utils/v2 v2.6.0/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
github.com/gethinode/mod-utils/v2 v2.7.0 h1:5CKygjsc7X4dFtb90ihWyDVvUp2iqoJE8C7M+jeWYus=
github.com/gethinode/mod-utils/v2 v2.7.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

@@ -24,8 +24,10 @@
"span", "span",
"strong", "strong",
"svg", "svg",
"symbol",
"title", "title",
"ul" "ul",
"use"
], ],
"classes": [ "classes": [
"active", "active",
@@ -64,7 +66,6 @@
"display-1", "display-1",
"display-4", "display-4",
"emphasis", "emphasis",
"emphasis-dark",
"end-0", "end-0",
"fa", "fa",
"fa-10x", "fa-10x",
@@ -109,7 +110,9 @@
"ms-auto", "ms-auto",
"ms-md-3", "ms-md-3",
"mt-3", "mt-3",
"mt-4",
"mt-5", "mt-5",
"mt-md-0",
"mx-auto", "mx-auto",
"mx-md-0", "mx-md-0",
"my-auto", "my-auto",
@@ -120,7 +123,6 @@
"navbar-brand", "navbar-brand",
"navbar-collapse", "navbar-collapse",
"navbar-container", "navbar-container",
"navbar-contrast",
"navbar-expand-md", "navbar-expand-md",
"navbar-fixed-top", "navbar-fixed-top",
"navbar-mode-selector", "navbar-mode-selector",
@@ -171,6 +173,14 @@
"top-bar" "top-bar"
], ],
"ids": [ "ids": [
"fa-face-frown",
"fab-github",
"fab-linkedin",
"fab-medium",
"fas-book-open",
"fas-ellipsis",
"fas-moon",
"fas-sun",
"navbar-0-collapse", "navbar-0-collapse",
"navbar-mode", "navbar-mode",
"navbar-mode-checkbox", "navbar-mode-checkbox",

View File

@@ -23,6 +23,22 @@
translation: "Artikel" translation: "Artikel"
- id: more - id: more
translation: "Weitere {{ . }}" translation: "Weitere {{ . }}"
- id: emptyList
translation: "Keine weiteren Artikel gefunden"
- id: emptyTags
translation: "Keine Schlagworte gefunden"
- id: readMore
translation: "Weiterlesen"
# Languages
- id: lang_de
translation: "Deutsch"
- id: lang_en
translation: "Englisch"
- id: lang_nl
translation: "Niederländisch"
- id: lang_fr
translation: "Französisch"
# Sharing # Sharing
- id: shareLink - id: shareLink
@@ -110,6 +126,32 @@
# Comments # Comments
- id: show - id: show
translation: "Zeige" translation: "Anzeigen"
- id: comments - id: comments
translation: "Kommentare" translation: "Kommentare"
# Arguments
- id: name
translation: "Name"
- id: type
translation: "Typ"
- id: required
translation: "Erforderlich"
- id: default
translation: "Standard"
- id: comment
translation: "Kommentar"
- id: supportedValues
translation: "Unterstützte Werte"
# Alerts
- id: caution
translation: Vorsicht
- id: important
translation: Wichtig
- id: note
translation: Hinweis
- id: tip
translation: Tipp
- id: warning
translation: Warnung

View File

@@ -9,10 +9,18 @@
}} }}
{{ if eq .Type "alert" }} {{ if eq .Type "alert" }}
<blockquote class="blockquote-alert blockquote-alert-{{ .AlertType }}"> {{ $alert := .AlertType }}
{{ $icon := (index $icons $alert) }}
<blockquote class="blockquote-alert blockquote-alert-{{ $alert }}">
<p class="blockquote-alert-heading"> <p class="blockquote-alert-heading">
{{ partial "assets/icon.html" (dict "icon" (printf "%s fa-fw" (index $icons .AlertType))) }} {{ with $icon }}
{{ or (i18n .AlertType) (title .AlertType) }} {{ partial "assets/icon.html" (dict "icon" (printf "%s fa-fw" .)) }}
{{ or (i18n $alert) (title $alert) }}
{{ else }}
{{ title $alert }}
{{ warnf "Unsupported alert type: '%s'. See %s" $alert $.Position }}
{{ end }}
</p> </p>
{{ trim .Text "\n\r" | safeHTML }} {{ trim .Text "\n\r" | safeHTML }}
</blockquote> </blockquote>

View File

@@ -0,0 +1,11 @@
{{ with 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>
{{ else }}
{{ . }}
{{ end }}
{{ end }}
{{ end }}

View File

@@ -0,0 +1,15 @@
{{ partial "assets/image.html" (dict
"url" .Destination
"page" .Page
"caption" .Title
"title" .Text
"anchor" .Attributes.anchor
"class" .Attributes.class
"figclass" .Attributes.figclass
"loading" .Attributes.loading
"mode" .Attributes.mode
"plain" .Attributes.plain
"portrait" .Attributes.portrait
"ratio" .Attributes.ratio
"wrapper" .Attributes.wrapper
) }}

View File

@@ -0,0 +1,15 @@
{{ if gt (findRE `^HAHAHUGO` .Destination 1) 0 }}
{{ errorf "Invalid markdown link destination, use '%s' syntax when using shortcodes as input. See '%s'"
("&#123;&#123;% %&#125;&#125;" | htmlUnescape)
.Page.File.Path
}}
{{ else if not .Destination }}
{{ errorf "Missing markdown link destination, see '%s'" .Page.File.Path }}
{{ else }}
{{ partial "assets/link.html" (dict
"destination" .Destination
"page" .Page
"text" .Text
"title" .Title
) }}
{{- end }}

View File

@@ -0,0 +1,13 @@
{{ $opts := dict }}
{{ if eq .Type "block" }}
{{ $opts = dict "displayMode" true }}
{{ end }}
{{ with transform.ToMath .Inner $opts }}
{{ with .Err }}
{{ errorf "Failed to render KaTeX: %q. See %s" . $.Position }}
{{ else }}
{{ . }}
{{ end }}
{{ end }}

View File

@@ -0,0 +1,40 @@
{{/* Adapted from https://gohugo.io/render-hooks/tables/ */}}
<!-- Ensure presence of `.table` class attribute to trigger Bootstrap styling -->
{{ $attr := .Attributes }}
{{ $class := split $attr.class " " }}
{{ if not (in $class "table") }}
{{ $attr = merge $attr (dict "class" (trim (delimit ($class | append "table") " ") " ")) }}
{{ end }}
{{ $align := dict "left" "start" "center" "center" "right" "end" }}
<table
{{- range $k, $v := $attr }}
{{- if $v }}
{{- printf " %s=%q" $k $v | safeHTMLAttr }}
{{- end }}
{{- end }}>
<thead>
{{- range .THead }}
<tr>
{{- range . }}
<th {{ with .Alignment }}class="text-{{ index $align . }}"{{ end }}>
{{- .Text -}}
</th>
{{- end }}
</tr>
{{- end }}
</thead>
<tbody>
{{- range .TBody }}
<tr>
{{- range . }}
<td {{ with .Alignment }}class="text-{{ index $align . }}"{{ end }}>
{{- .Text -}}
</td>
{{- end }}
</tr>
{{- end }}
</tbody>
</table>

View File

@@ -73,6 +73,7 @@
{{ end }} {{ end }}
{{- partial "footer/toast-container.html" . -}} {{- partial "footer/toast-container.html" . -}}
{{- partial "assets/symbols.html" . -}}
{{- partialCached "footer/scripts.html" (dict "header" false "page" . "core" true) }} {{- partialCached "footer/scripts.html" (dict "header" false "page" . "core" true) }}
{{- partial "footer/optional-scripts.html" . -}} {{- partial "footer/optional-scripts.html" . -}}
</body> </body>

View File

@@ -1,6 +1,8 @@
{{ define "main" -}} {{ define "main" -}}
{{- $breakpoint := $.Scratch.Get "breakpoint" -}} {{- $breakpoint := $.Scratch.Get "breakpoint" -}}
{{ $sidebar := .Render "single/sidebar" }} {{- $hasSidebar := .Site.Params.navigation.sidebar | default true -}}
{{ $sidebar := "" }}
{{ if $hasSidebar }}{{ $sidebar = .Render "single/sidebar" }}{{ end }}
{{ $toc := .Render "single/panel-toc" }} {{ $toc := .Render "single/panel-toc" }}
{{ with $sidebar }} {{ with $sidebar }}
@@ -16,7 +18,7 @@
{{ end }} {{ end }}
<div class="container-xxl flex-fill p-4 px-xxl-0"> <div class="container-xxl flex-fill p-4 px-xxl-0">
{{ if $sidebar -}} {{ if $hasSidebar -}}
<div class="row row-cols-1 row-cols-{{ $breakpoint.current }}-2 row-cols-{{ $breakpoint.next }}-3"> <div class="row row-cols-1 row-cols-{{ $breakpoint.current }}-2 row-cols-{{ $breakpoint.next }}-3">
<div class="col col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.next }}-block sidebar-overflow sticky-top pt-5"> <div class="col col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.next }}-block sidebar-overflow sticky-top pt-5">
{{ $sidebar | safeHTML }} {{ $sidebar | safeHTML }}

View File

@@ -1,7 +1,5 @@
{{- $menu := .Scratch.Get "sidebar" -}} {{- $menu := .Scratch.Get "sidebar" -}}
{{- $version := .Scratch.Get "version" -}} {{- $version := .Scratch.Get "version" -}}
{{ $sidebar := "" }} {{ if $menu }}
{{- $hasSidebar := .Site.Params.navigation.sidebar | default true -}}
{{ if and $menu $hasSidebar }}
{{ partial "assets/sidebar.html" (dict "page" . "menu" $menu "version" $version) }} {{ partial "assets/sidebar.html" (dict "page" . "menu" $menu "version" $version) }}
{{ end }} {{ end -}}

View File

@@ -39,8 +39,8 @@
{{ $element := "" }} {{ $element := "" }}
<!-- Split path between upload dir and sub dir --> <!-- Split path between upload dir and sub dir -->
{{ $newdir := urls.JoinPath (index (split $dir "upload") 0) "upload" }} {{ $newdir := partial "utilities/URLJoin.html" (dict "base" (index (split $dir "upload") 0) "path" "upload") }}
{{ $file = urls.JoinPath (index (split $dir "upload") 1) $file }} {{ $file = partial "utilities/URLJoin.html" (dict "base" (index (split $dir "upload") 1) "path" $file) }}
{{ $dir = $newdir }} {{ $dir = $newdir }}
<!-- Generate image URL --> <!-- Generate image URL -->
@@ -55,7 +55,7 @@
{{ with $anchor }} {{ with $anchor }}
{{ $operation = printf "%s,g_%s" $operation . }} {{ $operation = printf "%s,g_%s" $operation . }}
{{ end }} {{ end }}
{{- $element = urls.JoinPath (slice "https://" $host $dir $operation $file) -}} {{- $element = partial "utilities/URLJoin.html" (dict "elements" (slice "https://" $host $dir $operation $file)) -}}
{{ end }} {{ end }}
{{ return $element }} {{ return $element }}

View File

@@ -23,9 +23,9 @@
{{ $anchor := .anchor | default "" }} {{ $anchor := .anchor | default "" }}
{{ $element := "" }} {{ $element := "" }}
{{ $absoluteURL := .absoluteURL }} {{ $absoluteURL := .absoluteURL }}
{{ $url := urls.JoinPath $dir $file }} {{ $url := partial "utilities/URLJoin.html" (dict "elements" (slice $dir $file)) }}
{{ if $host }} {{ if $host }}
{{ $url = urls.JoinPath "https://" $host $url }} {{ $url = partial "utilities/URLJoin.html" (dict "elements" (slice "https://" $host $url)) }}
{{ end }} {{ end }}
<!-- Initialize image if needed, do not raise additional warnings --> <!-- Initialize image if needed, do not raise additional warnings -->

View File

@@ -22,9 +22,9 @@
{{ with $container }}{{ $dir = strings.TrimPrefix (printf "/%s" .) $dir }}{{ end }} {{ with $container }}{{ $dir = strings.TrimPrefix (printf "/%s" .) $dir }}{{ end }}
{{ if ne $host "ik.imagekit.io" }} {{ if ne $host "ik.imagekit.io" }}
{{ $element = urls.JoinPath (slice "https://ik.imagekit.io" $account $dir $file) }} {{ $element = partial "utilities/URLJoin.html" (dict "elements" (slice "https://ik.imagekit.io" $account $dir $file)) }}
{{ else }} {{ else }}
{{ $element = urls.JoinPath (slice "https://" $host $dir $file) }} {{ $element = partial "utilities/URLJoin.html" (dict "elements" (slice "https://" $host $dir $file)) }}
{{ end }} {{ end }}
{{ return $element }} {{ return $element }}

View File

@@ -46,7 +46,7 @@
<!-- Split path between end point and image path --> <!-- Split path between end point and image path -->
{{ $newdir := printf "/%s" (index (split $dir "/") 1) }} {{ $newdir := printf "/%s" (index (split $dir "/") 1) }}
{{ $file = urls.JoinPath (strings.TrimPrefix $newdir $dir) $file }} {{ $file = partial "utilities/URLJoin.html" (dict "elements" (slice (strings.TrimPrefix $newdir $dir) $file)) }}
{{ $dir = $newdir }} {{ $dir = $newdir }}
<!-- Generate image URL --> <!-- Generate image URL -->
@@ -60,7 +60,7 @@
{{ with $anchor }} {{ with $anchor }}
{{ $operation = printf "%s,fo-%s" $operation . }} {{ $operation = printf "%s,fo-%s" $operation . }}
{{ end }} {{ end }}
{{- $element = urls.JoinPath (slice "https://" $host $dir $operation $file) -}} {{- $element = partial "utilities/URLJoin.html" (dict "elements" (slice "https://" $host $dir $operation $file)) -}}
{{ end }} {{ end }}
{{ return $element }} {{ return $element }}

View File

@@ -55,7 +55,7 @@
{{ with $anchor }} {{ with $anchor }}
{{ $operation = printf "%s&crop=%s" $operation . }} {{ $operation = printf "%s&crop=%s" $operation . }}
{{ end }} {{ end }}
{{- $element = printf "%s?%s" (urls.JoinPath (slice "https://" $host $dir $file)) $operation -}} {{- $element = printf "%s?%s" (partial "utilities/URLJoin.html" (dict "elements" (slice "https://" $host $dir $file))) $operation -}}
{{ end }} {{ end }}
{{ return $element }} {{ return $element }}

View File

@@ -4,73 +4,75 @@
Visit gethinode.com/license for more details. Visit gethinode.com/license for more details.
--> -->
<!-- Validate arguments --> <!-- Define inline partials -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "card-group" "child" "card" "args" .) }} {{ define "partials/assets/style.html" }}
{{- errorf "partial [assets/card-group.html] - Invalid arguments" -}} {{ $style := "" }}
{{ end }} {{ if gt (len .styles) 0 }}
{{ $def := index .styles (mod .index (len .styles)) }}
<!-- Initialize arguments and default values --> {{ $style = index $def .key }}
{{- $page := .page -}}
{{- $breakpoint := partial "utilities/GetBreakpoint.html" -}}
{{ $pages := .list }}
{{ $cards := .cards }}
{{- $paginate := .paginate | default false -}}
{{- $moreURL := .href -}}
{{- $moreTitle := .hrefTitle -}}
{{- $gutter := .gutter | default 4 -}}
{{- $separator := .separator | default false -}}
{{- $class := .class -}}
{{- $color := .color -}}
{{- $padding := .padding -}}
{{- $header := .header -}}
{{- $body := .body -}}
{{- $footer := .footer -}}
{{- $orientation := .orientation -}}
{{- $ratio := .ratio -}}
{{- $portrait := .portrait | default false -}}
{{- $wrapper := .wrapper | default "p-0" -}}
{{- $style := .style -}}
{{- $align := .align -}}
{{- $subtle := .subtle }}
{{- $loading := .loading -}}
{{- $button := .button -}}
{{- $buttonLabel := .buttonLabel -}}
{{- $buttonType := .buttonType -}}
{{- $iconRounded := .iconRounded }}
{{- $scroll := .scroll | default false }}
{{- $spacer := .spacer | default false }}
{{- $hook := .hook | default "assets/card.html" }}
{{- $cols := string .cols | default "3" -}}
<!-- Override arguments -->
{{ $isPages := in (slice "page.Pages" "resource.Resources") (printf "%T" $pages) }}
{{ $paginator := "" }}
{{ if and $isPages $paginate }}
{{ with .pagination }}
{{ $paginator = $page.Paginate $pages . }}
{{ else }}
{{ $paginator = $page.Paginate $pages }}
{{ end }} {{ end }}
{{ $pages = first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $pages) }} {{ return ($style | default .default ) }}
{{ end }} {{ end }}
<!-- Initialize arguments -->
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "card-group" "child" "card" "args" .) }}
{{ if $args.err }}
{{ partial "utilities/LogErr.html" (dict
"partial" "assets/card-group.html"
"msg" "Invalid arguments"
"details" $args.errmsg
"file" page.File
)}}
{{ end }}
<!-- Initialize local variables -->
{{ $list := $args.list }}
{{- $class := $args.class -}}
{{- $orientation := $args.orientation -}}
{{ $cardWrapper := "" }} {{ $cardWrapper := "" }}
{{ if $scroll }}
{{ $cardWrapper = printf "card-block card-block-%d" (int $cols) }} {{- $breakpoint := partial "utilities/GetBreakpoint.html" -}}
{{ $colsMap := dict
"auto" ""
"1" "row-cols-1"
"2" (printf "row-cols-1 row-cols-%s-1 row-cols-%s-2" $breakpoint.prev $breakpoint.current)
"3" (printf "row-cols-1 row-cols-%s-2 row-cols-%s-3" $breakpoint.prev $breakpoint.current)
"4" (printf "row-cols-1 row-cols-%s-2 row-cols-%s-4" $breakpoint.prev $breakpoint.current)
"5" (printf "row-cols-1 row-cols-%s-3 row-cols-%s-5" $breakpoint.prev $breakpoint.current)
}}
{{ $sizesMap := dict
"auto" "100vw"
"1" "100vw"
"2" (printf "(min-width: %s) 50vw, 100vw" $breakpoint.currentSize)
"3" (printf "(min-width: %s) 33.3vw, (min-width: %s) 50vw, 100vw" $breakpoint.currentSize $breakpoint.prevSize)
"4" (printf "(min-width: %s) 25vw, (min-width: %s) 50vw, 100vw" $breakpoint.currentSize $breakpoint.prevSize)
"5" (printf "(min-width: %s) 20vw, (min-width: %s) 33.3vw, 100vw" $breakpoint.currentSize $breakpoint.prevSize)
}}
<!-- Apply optional pagination -->
{{ $isPages := in (slice "page.Pages" "resource.Resources") (printf "%T" $list) }}
{{ $paginator := "" }}
{{ if and $isPages $args.paginate }}
{{ with $args.pagination }}
{{ $paginator = $args.page.Paginate $list . }}
{{ else }}
{{ $paginator = $args.page.Paginate $list }}
{{ end }}
{{ $list = first $paginator.PagerSize (after (mul (sub $paginator.PageNumber 1) $paginator.PagerSize) $list) }}
{{ end }} {{ end }}
{{ if not $spacer }}{{ $class = printf "%s h-100" $class }}{{ end }} <!-- Initialize list elements -->
{{ $elements := slice }}
{{ $list := slice }}
{{ if $isPages }} {{ if $isPages }}
{{ range $index, $element := $pages }} {{ range $index, $element := $list }}
{{ $params := dict }} {{ $params := dict }}
<!-- regular page --> <!-- regular page -->
{{- if and $element.RelPermalink $element.File -}} {{- if and $element.RelPermalink $element.File -}}
{{- $params = merge $params (dict "path" $element.File.Path) -}} {{- $params = merge $params (dict "path" $element.File.Path) -}}
<!-- headless page --> <!-- headless page -->
{{- else -}} {{- else -}}
{{- $thumbnail := (or (and (reflect.IsMap $element.Params.Thumbnail) $element.Params.Thumbnail.url) $element.Params.Thumbnail) -}} {{- $thumbnail := "" -}}
{{ if reflect.IsMap $element.Params.Thumbnail }}{{ $thumbnail = $element.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $element.Params.Thumbnail }}{{ end }}
{{- $anchor := (or (and (reflect.IsMap $element.Params.Thumbnail) $element.Params.Thumbnail.anchor) "") -}} {{- $anchor := (or (and (reflect.IsMap $element.Params.Thumbnail) $element.Params.Thumbnail.anchor) "") -}}
{{- $params = merge $params (dict {{- $params = merge $params (dict
"title" $element.Title "title" $element.Title
@@ -82,102 +84,95 @@
) -}} ) -}}
{{- end -}} {{- end -}}
{{- $list = $list | append $params }} {{- $elements = $elements | append $params }}
{{ end }} {{ end }}
{{ else if $pages }} {{ else if $list }}
{{ $list = $list | append $pages }} {{ $elements = $elements | append $list }}
{{ end }} {{ end }}
{{- $count := len $list -}} <!-- Limit list to max elements -->
{{- $count := len $elements -}}
{{- $max := $count -}} {{- $max := $count -}}
{{- $max = math.Min (.max | default $count) $count -}} {{- $max = math.Min ($args.max | default $count) $count -}}
{{- $responsive := .responsive | default true -}} {{- if not $args.paginate -}}
{{- $elements = first $max $elements -}}
{{- $sizes := "100vw" }}
{{- $colGrid := "" -}}
{{ if not $scroll }}
{{ $colGrid = printf "row-cols-%s" $cols }}
{{- if eq $cols "1" }}
{{ $colGrid = "row-cols-1" -}}
{{- else if eq $cols "2" }}
{{ if $responsive }}
{{ $colGrid = printf "row-cols-1 row-cols-%s-1 row-cols-%s-2" $breakpoint.prev $breakpoint.current }}
{{ end -}}
{{ $sizes = printf "(min-width: %s) 50vw, 100vw" $breakpoint.currentSize }}
{{- else if eq $cols "3" }}
{{ if $responsive }}
{{ $colGrid = printf "row-cols-1 row-cols-%s-2 row-cols-%s-3" $breakpoint.prev $breakpoint.current }}
{{ end -}}
{{ $sizes = printf "(min-width: %s) 33.3vw, (min-width: %s) 50vw, 100vw" $breakpoint.currentSize $breakpoint.prevSize }}
{{- else if eq $cols "4" }}
{{ if $responsive }}
{{ $colGrid = printf "row-cols-1 row-cols-%s-2 row-cols-%s-4" $breakpoint.prev $breakpoint.current }}
{{ end -}}
{{ $sizes = printf "(min-width: %s) 25vw, (min-width: %s) 50vw, 100vw" $breakpoint.currentSize $breakpoint.prevSize }}
{{- else if eq $cols "5" }}
{{ if $responsive }}
{{ $colGrid = printf "row-cols-1 row-cols-%s-3 row-cols-%s-5" $breakpoint.prev $breakpoint.current }}
{{ end -}}
{{ $sizes = printf "(min-width: %s) 20vw, (min-width: %s) 33.3vw, 100vw" $breakpoint.currentSize $breakpoint.prevSize }}
{{ end -}}
{{ else }}
{{ if in (slice "2" "3" "4" "5") $cols }}
{{ $sizes = replace (printf "%.1fvw" (div 100.0 (int $cols))) ".0" "" }}
{{ end }}
{{ end }}
{{- if not $paginate -}}
{{- $list = first $max $list -}}
{{- end -}} {{- end -}}
{{- if and (eq $cols "1") (eq $orientation "horizontal") }}{{ $orientation = "horizontal-sm" }}{{ end -}} {{/* Initialize grid and layout */}}
{{- $sizes := "100vw" }}
{{- $colGrid := "" -}}
{{ if not $args.scroll }}
{{ $colGrid = index $colsMap $args.cols }}
{{ if $args.responsive }}{{ $sizes = index $sizesMap $args.cols }}{{ end }}
{{ else }}
{{ if in (slice "2" "3" "4" "5") $args.cols }}
{{ $sizes = replace (printf "%.1fvw" (div 100.0 (int $args.cols))) ".0" "" }}
{{ end }}
{{ end }}
{{- if and (eq $args.cols "1") (eq $orientation "horizontal") }}{{ $orientation = "horizontal-sm" }}{{ end -}}
{{ if not $args.spacer }}
{{ $class = printf "%s h-100" $class }}
{{ end }}
<!-- Main code --> <!-- Main code -->
<div class="container-fluid {{ $wrapper }} {{ if $scroll }}card-container-wrapper{{ end }}"> <div class="{{ $args.wrapper }}">
<div class="row g-{{ $gutter }} {{ if $scroll }}d-flex flex-row flex-nowrap card-container scrollbar-horizontal pb-4 w-100 {{ end }} {{ $colGrid }}"> <div class="container-fluid {{ if $args.scroll }}card-container-wrapper{{ end }} p-0">
{{ range $index, $element := $list }} <div class="row g-{{ $args.gutter }} {{ if $args.scroll }}d-flex flex-row flex-nowrap card-container scrollbar-horizontal pb-4 w-100 {{ end }}
{{- $params := (dict {{ if $args.bento }}{{ with $args.valign }}align-items-{{ . }}{{ end }}{{ else }}{{ $colGrid }}{{ end }}">
"class" (printf " %s" $class) {{ range $index, $element := $elements }}
"color" $color {{- $params := (dict
"footer" $footer "class" (printf " %s" $class)
"body" $body "color" $args.color
"header" $header "footer" $args.footer
"loading" $loading "body" $args.body
"sizes" $sizes "header" $args.header
"orientation" $orientation "loading" $args.loading
"padding" $padding "sizes" $sizes
"ratio" $ratio "orientation" (partial "assets/style.html" (dict "styles" $args.styles "index" $index "key" "orientation" "default" $orientation))
"portrait" $portrait "padding" $args.padding
"subtle" $subtle "ratio" (partial "assets/style.html" (dict "styles" $args.styles "index" $index "key" "ratio" "default" $args.ratio))
"style" $style "portrait" (partial "assets/style.html" (dict "styles" $args.styles "index" $index "key" "portrait" "default" $args.portrait))
"align" $align "subtle" $args.subtle
"button" $button "style" $args.style
"buttonLabel" $buttonLabel "align" $args.align
"buttonType" $buttonType "button" $args.button
"iconRounded" $iconRounded "buttonLabel" $args.buttonLabel
) -}} "buttonType" $args.buttonType
{{- $params = merge $element $params }} "iconRounded" $args.iconRounded
) -}}
{{- $params = merge $element $params }}
<div class="{{ with $cardWrapper }}{{ . }}{{ else }}col{{ end }}"> {{ if $args.scroll }}
{{ if $spacer }}<div class="spacer"></div>{{ end }} {{ $width := (partial "assets/style.html" (dict "styles" $args.styles "index" $index "key" "width" "default" "3")) }}
{{- partial $hook $params -}} {{ $size := $args.cols }}
</div> {{ if and (gt $args.cols 1) (eq $width "6") }}{{ $size = sub (int $args.cols) 1 }}{{ end }}
{{- if and (lt $index (sub $max 1)) $separator -}} {{ $cardWrapper = printf "card-block card-block-%d" (int $size) }}
<div class="col d-block d-sm-none"> {{ end }}
<hr>
<!--add col-$width -->
<div class="{{ with $cardWrapper }}{{ . }}{{ else }}col{{ end }}">
{{ if $args.spacer }}<div class="spacer"></div>{{ end }}
{{- partial $args.hook $params -}}
</div> </div>
{{- if and (lt $index (sub $max 1)) $args.separator -}}
<div class="col d-block d-sm-none">
<hr>
</div>
{{- end -}}
{{- end -}} {{- end -}}
{{- end -}} {{ if $args.cards }}{{- print $args.cards | safeHTML }}{{ end }}
{{ if $cards }}{{- print $cards | safeHTML }}{{ end }} </div>
</div> </div>
{{ if $paginator }} {{ if $paginator }}
{{- if gt $paginator.TotalPages 1 -}} {{- if gt $paginator.TotalPages 1 -}}
<div class="pt-3">{{ partial "assets/pagination.html" (dict "page" $page "format" "terse") }}</div> <div class="pt-3">{{ partial "assets/pagination.html" (dict "page" $args.page "format" "terse") }}</div>
{{- end -}} {{- end -}}
{{ else }} {{ else }}
{{ if and (gt $count $max) $moreTitle }} {{ if and (gt $count $max) $args.hrefTitle }}
<a class="btn btn-outline-primary mt-4" href="{{ $moreURL| safeURL }}" role="button">{{ $moreTitle }}</a> <a class="btn btn-outline-primary mt-4" href="{{ $args.href| safeURL }}" role="button">{{ $args.hrefTitle }}</a>
{{ end }} {{ end }}
{{ end }} {{ end }}
</div> </div>

View File

@@ -51,16 +51,22 @@
<!-- Override arguments --> <!-- Override arguments -->
{{- $page := "" }} {{- $page := "" }}
{{- if .path }} {{- if .path }}
{{- $page = site.GetPage .path }} {{ $page = partial "utilities/GetPage.html" (dict "url" .path "page" page) }}
{{- if not $page }} {{- if not $page }}
{{- errorf "partial [assets/card.html] - Cannot find page: %s" .path -}} {{ if page.File }}
{{- errorf "partial [assets/card.html] - Cannot find target page '%s', see '%s'" .path page.File.Path -}}
{{ else }}
{{- errorf "partial [assets/card.html] - Cannot find target page '%s'" .path -}}
{{ end }}
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- with $page -}} {{- with $page -}}
{{- if not $title }}{{ $title = .Title }}{{ end -}} {{- if not $title }}{{ $title = .Title }}{{ end -}}
{{- if not $href }}{{ $href = .RelPermalink }}{{ end -}} {{- if not $href }}{{ $href = .RelPermalink }}{{ end -}}
{{- if not $description }}{{ $description = partial "utilities/GetDescription.html" (dict "page" .) }}{{ end -}} {{- if not $description }}{{ $description = partial "utilities/GetDescription.html" (dict "page" .) }}{{ end -}}
{{- if and (not $thumbnail) (not $icon) }}{{ $thumbnail = (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.url) .Params.Thumbnail) }}{{ end -}} {{- if and (not $thumbnail) (not $icon) }}
{{ if reflect.IsMap .Params.Thumbnail }}{{ $thumbnail = .Params.Thumbnail.url }}{{ else }}{{ $thumbnail = .Params.Thumbnail }}{{ end }}
{{ end -}}
{{ if not $ratio }} {{ if not $ratio }}
{{- if and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.ratio }}{{ $ratio = .Params.Thumbnail.ratio }}{{ end -}} {{- if and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.ratio }}{{ $ratio = .Params.Thumbnail.ratio }}{{ end -}}
{{ end }} {{ end }}
@@ -76,7 +82,8 @@
{{ end }} {{ end }}
{{- if eq $orientation "none" }}{{ $thumbnail = "" }}{{ $icon = "" }}{{ end -}} {{- if eq $orientation "none" }}{{ $thumbnail = "" }}{{ $icon = "" }}{{ end -}}
{{- if eq $body "none" }}{{ $description = "" }}{{ end -}} {{- if eq $body "title" }}{{ $description = "" }}{{ end -}}
{{- if eq $body "none" }}{{ $title = "" }}{{ $description = "" }}{{ 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" -}}
@@ -190,7 +197,7 @@
{{- partial "card-body.html" (dict "title" $title "href" $href "color" $color "description" $description "button" $button) -}} {{- partial "card-body.html" (dict "title" $title "href" $href "color" $color "description" $description "button" $button) -}}
</div> </div>
{{ if $page }}<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) }}</div>{{ end }} {{ if $page }}<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) }}</div>{{ end }}
{{ if $button }} {{ if and $href $button }}
{{ $label := (or $buttonLabel $title) | default (T "readMore") }} {{ $label := (or $buttonLabel $title) | default (T "readMore") }}
{{ $buttonClass := "card-button mb-n4" }} {{ $buttonClass := "card-button mb-n4" }}
{{ if eq $buttonType "link" }}{{ $buttonClass = "card-button card-button-link mb-n4" }}{{ end }} {{ if eq $buttonType "link" }}{{ $buttonClass = "card-button card-button-link mb-n4" }}{{ end }}
@@ -212,6 +219,7 @@
</div> </div>
{{- else -}} {{- else -}}
<!-- Render stacked / default card --> <!-- Render stacked / default card -->
{{ $overlay := eq $orientation "overlay" }}
<div class="card {{ $colorStyle }} {{ $class }} text-{{ $align }}"> <div class="card {{ $colorStyle }} {{ $class }} text-{{ $align }}">
{{- if $thumbnail -}} {{- if $thumbnail -}}
{{- partial $hook (dict "url" $thumbnail "ratio" (or $ratio "16x9") "portrait" $portrait "anchor" $anchor "sizes" $sizes "wrapper" "card-img-wrap" "class" "card-img-top card-img-bg" "title" (or $alt $title) "loading" $loading) -}} {{- partial $hook (dict "url" $thumbnail "ratio" (or $ratio "16x9") "portrait" $portrait "anchor" $anchor "sizes" $sizes "wrapper" "card-img-wrap" "class" "card-img-top card-img-bg" "title" (or $alt $title) "loading" $loading) -}}
@@ -225,7 +233,8 @@
{{ end }} {{ end }}
</div> </div>
{{- end -}} {{- end -}}
<div class="card-body d-flex flex-column p-{{ $padding }}"> <div class="card-body d-flex flex-column p-{{ $padding }} {{ if $overlay }}card-img-overlay card-overlay-gradient p-4{{ end }}" {{ if $overlay }}data-bs-theme="dark"{{ end }}>
{{ if $overlay }}<div class="flex-grow-1"></div>{{ end }}
{{ if $page }}{{- partial "card-caption.html" (dict "page" $page "keywords" $header "color" $color) -}}{{ end }} {{ if $page }}{{- partial "card-caption.html" (dict "page" $page "keywords" $header "color" $color) -}}{{ end }}
{{- partial "card-body.html" (dict "title" $title "href" $href "color" $color "description" $description) -}} {{- partial "card-body.html" (dict "title" $title "href" $href "color" $color "description" $description) -}}
{{ if $page }}{{- partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) -}}{{ end }} {{ if $page }}{{- partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) -}}{{ end }}

View File

@@ -41,6 +41,7 @@
{{ $imgset := index $target "set" }} {{ $imgset := index $target "set" }}
{{ $height := index $target "height" }} {{ $height := index $target "height" }}
{{ $width := index $target "width" }} {{ $width := index $target "width" }}
{{ $data := index $target "data" }}
<!-- Add color modes --> <!-- Add color modes -->
{{- range $none := $modes -}} {{- range $none := $modes -}}
@@ -55,7 +56,14 @@
{{ else }} {{ else }}
{{ with $wrapper }}<div class="{{ . }}">{{ end }} {{ with $wrapper }}<div class="{{ . }}">{{ end }}
{{ end }} {{ end }}
{{- if not $fileAnchor -}}
{{ if $data }}
{{- if site.Params.debugging.includeSVGOrigin }}
{{ printf "<!-- <svg src=\"%s\"> -->" $.url | safeHTML }}
{{ end -}}
{{- $data = replace $data "<svg" (printf "<svg class=\"%s\"" $class) -}}
{{- $data | safeHTML -}}
{{- else if not $fileAnchor -}}
<img class="img-fluid {{ $class }}" <img class="img-fluid {{ $class }}"
src="{{ $fallbackURL }}" src="{{ $fallbackURL }}"
{{ if $lazy }}loading="lazy"{{ end }} {{ if $lazy }}loading="lazy"{{ end }}

View File

@@ -47,6 +47,7 @@
{{ $dims := slice }} {{ $dims := slice }}
{{- $res := "" -}} {{- $res := "" -}}
{{- $img := "" -}} {{- $img := "" -}}
{{- $data := "" -}}
{{ $transform := "" }} {{ $transform := "" }}
{{- if hasSuffix $url "svg" -}} {{- if hasSuffix $url "svg" -}}
{{- $res = partial "utilities/GetResource.html" (dict "url" $url "page" $page) -}} {{- $res = partial "utilities/GetResource.html" (dict "url" $url "page" $page) -}}
@@ -61,6 +62,10 @@
{{ $dims = $dims | append "500" }} {{ $dims = $dims | append "500" }}
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ else if eq (string $res.MediaType) "image/svg+xml" }}
{{ $data = $res.Content }}
{{ else }}
{{ warnf "Unsupported media type '%s': %q" (string $res.MediaType) $url -}}
{{ end }} {{ end }}
{{ else if $ratio }} {{ else if $ratio }}
{{ $transform = "fill" }} {{ $transform = "fill" }}
@@ -137,4 +142,4 @@
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ return (dict "target" $targetURL "set" $set "height" $height "width" $width) }} {{ return (dict "target" $targetURL "set" $set "height" $height "width" $width "data" $data) }}

View File

@@ -14,6 +14,7 @@
<!-- Initialize arguments --> <!-- Initialize arguments -->
{{ $destination := strings.TrimPrefix (strings.TrimSuffix "/" site.BaseURL) .destination }} {{ $destination := strings.TrimPrefix (strings.TrimSuffix "/" site.BaseURL) .destination }}
{{ if not $destination }}{{ $destination = "/" }}{{ end }}
{{- $target := "" -}} {{- $target := "" -}}
{{- $rel := "" -}} {{- $rel := "" -}}
@@ -22,9 +23,11 @@
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}} {{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}} {{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
{{- $isExternal := or (ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host) $external -}} {{- $isExternal := or (ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host) $external -}}
{{- $isLocal := hasPrefix $destination "#" -}}
{{- $page := .page -}} {{- $page := .page -}}
{{- $anchor := "" -}} {{- $anchor := "" -}}
{{- $text := .text -}} {{- $text := .text -}}
{{- $title := .title -}}
{{- $class := .class -}} {{- $class := .class -}}
<!-- Main code --> <!-- Main code -->
@@ -53,24 +56,50 @@
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ $ref := partial "utilities/GetPage.html" (dict "url" $destination "page" $page) }} {{ if not $isLocal }}
{{- if not $ref -}} {{ $ref := partial "utilities/GetPage.html" (dict "url" $destination "page" $page) }}
{{- errorf "partial [assets/link.html] - Cannot find page: %s" $destination -}} {{- if not $ref -}}
{{- $error = true -}} {{ $pageContext := "" }}
{{- else -}} {{ with $page.File }}{{ $pageContext = path.Join "/content" .Dir }}{{ end }}
{{- $destination = $ref.RelPermalink -}} {{ $isPageRes := fileExists (path.Join $pageContext $destination) }}
{{- with $anchor }}{{ $destination = printf "%s#%s" (strings.TrimSuffix "/" $destination) . -}}{{ end -}} {{ $isStatic := fileExists (path.Join "static" $destination) }}
{{ if and (not $isPageRes) (not $isStatic) }}
{{- errorf "partial [assets/link.html] - Cannot find page or asset: '%s' at '%s'" $destination $page.File.Path -}}
{{- $error = true -}}
{{ else if $isPageRes }}
{{ $destination = partial "utilities/URLJoin.html" (dict "elements" (slice "/" (strings.TrimPrefix "/content" $pageContext) $destination)) }}
{{ else if $isStatic }}
{{ $destination = partial "utilities/URLJoin.html" (dict "base" "/" "path" $destination) }}
{{ end }}
{{- with $anchor }}{{ $destination = printf "%s#%s" (strings.TrimSuffix "/" $destination) . -}}{{ end -}}
{{ end }}
{{- if and $ref (not $error) -}}
{{- $destination = $ref.RelPermalink -}}
{{- with $anchor }}{{ $destination = printf "%s#%s" (strings.TrimSuffix "/" $destination) . -}}{{ end -}}
{{- end -}}
{{- if not $text -}} {{- if not $text -}}
{{- if $anchor -}} {{ if $anchor }}{{ $text = $anchor }}{{ else }}{{ $text = $ref.LinkTitle }}{{ end }}
{{- $text = $anchor -}}
{{- else -}}
{{- $text = $ref.LinkTitle -}}
{{- end -}}
{{ end -}} {{ end -}}
{{- if not $case }}{{ $text = lower $text }}{{ end -}} {{ else }}
{{- end -}} {{ with $anchor }}
{{ $destination = printf "#%s" . }}
{{ if not $text }}{{ $text = . }}{{ end }}
{{ end }}
{{ end }}
{{- if not $case }}{{ $text = lower $text }}{{ end -}}
{{- end -}} {{- end -}}
{{ if not $error -}} {{ if not $error -}}
<a {{ with $class }}class="{{ . }}" {{ end }}href="{{ $destination | safeURL }}"{{ with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end }}>{{ $text }}</a> <a
{{- end }} {{- with $destination }} href="{{ . | safeURL }}"{{ end -}}
{{ with $class }} class="{{ . }}" {{ end -}}
{{ with $target }} target="{{ . }}"{{ end -}}
{{ with $rel }} rel="{{ . }}"{{ end -}}
{{ with $title }} title="{{ . }}"{{ end -}}
>
{{- $text | safeHTML -}}
</a>
{{- end -}}

View File

@@ -47,7 +47,8 @@
<div class="d-none d-md-block p-0"> <div class="d-none d-md-block p-0">
{{- range $index, $item := $list -}} {{- range $index, $item := $list -}}
{{- $odd := eq (mod $index 2) 1 -}} {{- $odd := eq (mod $index 2) 1 -}}
{{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}} {{- $thumbnail := "" -}}
{{ if reflect.IsMap $item.Params.Thumbnail }}{{ $thumbnail = $item.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $item.Params.Thumbnail }}{{ end }}
<div class="container ratio-section d-flex flex-column"> <div class="container ratio-section d-flex flex-column">
<div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2"> <div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2">
<div class="col-6{{ if $odd }} order-last{{ end }}"> <div class="col-6{{ if $odd }} order-last{{ end }}">
@@ -69,7 +70,8 @@
<div class="d-md-none"> <div class="d-md-none">
{{- range $index, $item := $list -}} {{- range $index, $item := $list -}}
{{- $odd := eq (mod $index 2) 1 -}} {{- $odd := eq (mod $index 2) 1 -}}
{{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}} {{- $thumbnail := "" -}}
{{ if reflect.IsMap $item.Params.Thumbnail }}{{ $thumbnail = $item.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $item.Params.Thumbnail }}{{ end }}
<div class="container d-flex flex-column"> <div class="container d-flex flex-column">
<div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2"> <div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2">
<div class="col-12 text-center"> <div class="col-12 text-center">

View File

@@ -66,7 +66,8 @@
{{ $header := $item.Title }} {{ $header := $item.Title }}
{{ $body := $item.Content }} {{ $body := $item.Content }}
{{ $show := eq $index 0}} {{ $show := eq $index 0}}
{{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}} {{- $thumbnail := "" -}}
{{ if reflect.IsMap $item.Params.Thumbnail }}{{ $thumbnail = $item.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $item.Params.Thumbnail }}{{ end }}
<div class="tab-pane{{ if $show }} active{{ end }}" id="nav-{{ $id }}-{{ $index }}" role="tabpanel" aria-labelledby="{{ $id }}-btn-{{ $index }}" tabindex="0"> <div class="tab-pane{{ if $show }} active{{ end }}" id="nav-{{ $id }}-{{ $index }}" role="tabpanel" aria-labelledby="{{ $id }}-btn-{{ $index }}" tabindex="0">
{{- if eq $pane "persona" -}} {{- if eq $pane "persona" -}}
{{- partial "assets/persona.html" (dict {{- partial "assets/persona.html" (dict

View File

@@ -25,10 +25,11 @@
{{ if or (strings.HasPrefix $menu.PageRef "http") (strings.HasPrefix $menu.URL "http") }} {{ if or (strings.HasPrefix $menu.PageRef "http") (strings.HasPrefix $menu.URL "http") }}
{{ $menuURL = or $menu.PageRef $menu.URL }} {{ $menuURL = or $menu.PageRef $menu.URL }}
{{ else if (or $menu.PageRef $menu.URL) }} {{ else if (or $menu.PageRef $menu.URL) }}
{{- $menuURL = urls.JoinPath $baseURL ((or $menu.PageRef $menu.URL) | relLangURL) -}} {{- $menuURL = partial "utilities/URLJoin.html" (dict "base" $baseURL "path" ((or $menu.PageRef $menu.URL) | relLangURL)) -}}
{{ end }} {{ end }}
{{- $pageURL := $page.RelPermalink -}} {{- $pageURL := $page.RelPermalink -}}
{{- $isActive := or (and (hasPrefix $pageURL $menuURL) (ne $menuURL ("/" | relLangURL))) (eq $pageURL $menuURL) -}} {{- $isActive := or (and (hasPrefix $pageURL $menuURL) (ne $menuURL ("/" | relLangURL))) (eq $pageURL $menuURL) -}}
{{ if not $menu.PageRef }}{{ $isActive = false }}{{ end }}
{{- $isAlias := $menu.Params.alias -}} {{- $isAlias := $menu.Params.alias -}}
{{- $isIcon := $menu.Params.icon -}} {{- $isIcon := $menu.Params.icon -}}

View File

@@ -51,7 +51,7 @@
{{- end -}} {{- end -}}
{{ if $item.url }} {{ if $item.url }}
<li> <li>
{{- $url := (urls.JoinPath $baseURL $item.url) | relLangURL -}} {{- $url := partial "utilities/URLJoin.html" (dict "base" $baseURL "path" $item.url) | relLangURL -}}
<a class="pe-5 dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}{{ if $active }} active{{ end }}{{ if $disabled }} disabled{{ end }}" href="{{ $url }}">{{ $item.label }} <a class="pe-5 dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}{{ if $active }} active{{ end }}{{ if $disabled }} disabled{{ end }}" href="{{ $url }}">{{ $item.label }}
{{ if $item.latest }}&nbsp;({{ T "latest" }}){{ end }} {{ if $item.latest }}&nbsp;({{ T "latest" }}){{ end }}
{{ if $active }} {{ if $active }}
@@ -67,7 +67,7 @@
{{- if site.Params.docs.overview -}} {{- if site.Params.docs.overview -}}
{{ if gt (len $list) 0 }}<li><hr class="dropdown-divider"></li>{{ end }} {{ if gt (len $list) 0 }}<li><hr class="dropdown-divider"></li>{{ end }}
<li> <li>
{{- $url := (urls.JoinPath $baseURL site.Params.docs.overview) | relLangURL -}} {{- $url := partial "utilities/URLJoin.html" (dict "base" $baseURL "path" site.Params.docs.overview) | relLangURL -}}
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" href="{{ $url }}">{{ T "allVersions" }}</a> <a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" href="{{ $url }}">{{ T "allVersions" }}</a>
</li> </li>
{{- end -}} {{- end -}}
@@ -107,7 +107,7 @@
{{- $enableVersions = gt (len $list ) 1 -}} {{- $enableVersions = gt (len $list ) 1 -}}
{{ end }} {{ end }}
{{- $enableLanguage := or $page.IsTranslated site.IsMultiLingual -}} {{- $enableLanguage := or $page.IsTranslated hugo.IsMultilingual -}}
{{- $horizontal := default false site.Params.navigation.horizontal -}} {{- $horizontal := default false site.Params.navigation.horizontal -}}
{{- $logo := .logo | default site.Params.navigation.logo -}} {{- $logo := .logo | default site.Params.navigation.logo -}}
@@ -142,9 +142,9 @@
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
{{ if $logo }}{{ $logo = urls.JoinPath $baseURL $logo }}{{ end }} {{ if $logo }}{{ $logo = partial "utilities/URLJoin.html" (dict "base" $baseURL "path" $logo) }}{{ end }}
{{ if $logoLight }}{{ $logoLight = urls.JoinPath $baseURL $logoLight }}{{ end }} {{ if $logoLight }}{{ $logoLight = partial "utilities/URLJoin.html" (dict "base" $baseURL "path" $logoLight) }}{{ end }}
{{ if $logoDark }}{{ $logoDark = urls.JoinPath $baseURL $logoDark }}{{ end }} {{ if $logoDark }}{{ $logoDark = partial "utilities/URLJoin.html" (dict "base" $baseURL "path" $logoDark) }}{{ end }}
{{- $title := site.Title -}} {{- $title := site.Title -}}
{{- if .title -}} {{- if .title -}}
@@ -165,7 +165,7 @@
{{ end }} {{ end }}
<!-- Main code --> <!-- Main code -->
<div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0{{ with $class }} {{ . }}{{ end }}"> <div class="container-fluid {{ if $fixed }}fixed-top{{ else if $overlay }}navbar-overlay{{ end }} p-0{{ with $class }} {{ . }}{{ end }}">
{{- partial "assets/page-alert.html" (dict "page" $page) -}} {{- partial "assets/page-alert.html" (dict "page" $page) -}}
<nav class="navbar p-4 <nav class="navbar p-4
{{- if not $overlay }}{{ with $color }} bg-{{ . }}{{ end }}{{ end -}} {{- if not $overlay }}{{ with $color }} bg-{{ . }}{{ end }}{{ end -}}
@@ -173,9 +173,9 @@
{{ if $contrast }} navbar-contrast{{ end }}" {{ if $contrast }} navbar-contrast{{ end }}"
{{ if $overlay }} {{ if $overlay }}
data-bs-theme="{{ $overlayMode }}" data-bs-theme="{{ $overlayMode }}"
data-bs-overlay="{{ $overlayMode }}" {{ if $fixed }}data-bs-overlay="{{ $overlayMode }}"{{ end }}
{{ end }} {{ if $color }}data-navbar-color="{{ $color }}"{{ end }}
{{ if $overlay }}data-navbar-color="{{ $color }}"{{ end }} {{ end }}
> >
<div class="container-xxl p-0"> <div class="container-xxl p-0">
<div class="d-flex navbar-container justify-content-center"> <div class="d-flex navbar-container justify-content-center">
@@ -222,7 +222,9 @@
<div class="navbar-collapse collapse" id="{{ $id }}-collapse"> <div class="navbar-collapse collapse" id="{{ $id }}-collapse">
<!-- Insert search input --> <!-- Insert search input -->
{{- if and $search (not $searchModal) }}{{ partial "assets/search-input.html" }}{{ end -}} {{- if and $search (not $searchModal) }}
{{ partial "assets/search-input.html" (dict "class" (printf "mt-4 mt-%s-0" $size)) }}
{{ end -}}
<!-- Render top-menu items (maximum depth of 2) --> <!-- Render top-menu items (maximum depth of 2) -->
<ul class="navbar-nav {{ if $flex }}d-flex w-100{{ else }}ms-auto{{ end }}"> <ul class="navbar-nav {{ if $flex }}d-flex w-100{{ else }}ms-auto{{ end }}">
@@ -274,7 +276,7 @@
{{- end -}} {{- end -}}
{{- else -}} {{- else -}}
{{- range site.Languages -}} {{- range site.Languages -}}
<li><a class="dropdown-item" href="{{ urls.JoinPath $baseURL .Lang }}" hreflang="{{.Lang}}">{{ default .Lang .LanguageName }}</a></li> <li><a class="dropdown-item" href="{{ partial "utilities/URLJoin.html" (dict "base" $baseURL "path" .Lang) }}" hreflang="{{.Lang}}">{{ default .Lang .LanguageName }}</a></li>
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
</ul> </ul>

View File

@@ -32,7 +32,9 @@
{{- if not $title }}{{ $title = .Title }}{{ end -}} {{- if not $title }}{{ $title = .Title }}{{ end -}}
{{- if not $href }}{{ $href = .RelPermalink }}{{ end -}} {{- if not $href }}{{ $href = .RelPermalink }}{{ end -}}
{{- if not $content }}{{ $content = .Content }}{{ end -}} {{- if not $content }}{{ $content = .Content }}{{ end -}}
{{- if not $thumbnail }}{{ $thumbnail = (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.url) .Params.Thumbnail) }}{{ end -}} {{- if not $thumbnail }}
{{ if reflect.IsMap .Params.Thumbnail }}{{ $thumbnail = .Params.Thumbnail.url }}{{ else }}{{ $thumbnail = .Params.Thumbnail }}{{ end }}
{{ end -}}
{{- end -}} {{- end -}}
{{- $class := .class -}} {{- $class := .class -}}

View File

@@ -26,7 +26,7 @@
{{- $group := .group -}} {{- $group := .group -}}
{{- $data := .menu -}} {{- $data := .menu -}}
{{- $doc_slug := urls.JoinPath $baseURL ($group.title | urlize) -}} {{- $doc_slug := partial "utilities/URLJoin.html" (dict "base" $baseURL "path" ($group.title | urlize)) -}}
{{- $href := or $group.link $doc_slug -}} {{- $href := or $group.link $doc_slug -}}
{{- $collapsed := strings.HasPrefix $page.RelPermalink $href -}} {{- $collapsed := strings.HasPrefix $page.RelPermalink $href -}}
@@ -78,10 +78,10 @@
{{ if hasPrefix . "http" }} {{ if hasPrefix . "http" }}
{{ $href = . }} {{ $href = . }}
{{ else }} {{ else }}
{{- $href = urls.JoinPath $baseURL . -}} {{- $href = partial "utilities/URLJoin.html" (dict "base" $baseURL "path" .) -}}
{{ end }} {{ end }}
{{ else }} {{ else }}
{{- $href = urls.JoinPath $baseURL ($title | urlize) -}} {{- $href = partial "utilities/URLJoin.html" (dict "base" $baseURL "path" ($title | urlize)) -}}
{{ end }} {{ end }}
{{- $active := eq (strings.TrimSuffix "/" $page.RelPermalink) (strings.TrimSuffix "/" $href) -}} {{- $active := eq (strings.TrimSuffix "/" $page.RelPermalink) (strings.TrimSuffix "/" $href) -}}
@@ -122,7 +122,7 @@
{{- $sectionBreak := false -}} {{- $sectionBreak := false -}}
{{- $level := 0 -}} {{- $level := 0 -}}
{{ $baseURL := $page.Scratch.Get "baseURL" | default "/" -}} {{ $baseURL := $page.Scratch.Get "baseURL" | default "/" -}}
{{ $baseURL = urls.JoinPath "/" (strings.TrimPrefix $baseURL (urls.JoinPath $section $version | relLangURL)) }} {{ $baseURL = partial "utilities/URLJoin.html" (dict "elements" (slice "/" (strings.TrimPrefix $baseURL (urls.JoinPath $section $version | relLangURL)))) }}
<ul class="list-unstyled ps-0"> <ul class="list-unstyled ps-0">
{{- range $index, $item := $data -}} {{- range $index, $item := $data -}}

View File

@@ -24,19 +24,17 @@
{{- $class := delimit $main " " -}} {{- $class := delimit $main " " -}}
{{ if or $sortable $paging $searchable }}{{ $class = trim (printf "%s data-table" $class) " " }}{{ end }} {{ if or $sortable $paging $searchable }}{{ $class = trim (printf "%s data-table" $class) " " }}{{ end }}
{{- $input := $input | $page.RenderString }} {{- $input := $input | $page.RenderString }}
{{- $input = replace $input "style=\"text-align:left\"" "class=\"text-start\"" -}} {{ $regex := `<table\s*class="(.+?)"` }}
{{- $input = replace $input "style=\"text-align:center\"" "class=\"text-center\"" -}} {{ $current := (index (index (findRESubmatch $regex $input) 0) 1) }}
{{- $input = replace $input "style=\"text-align:right\"" "class=\"text-end\"" -}} {{ $target := delimit (((split $current " ") | append "table" | append $class) | uniq) " " }}
{{ $attributes := "" }} {{ $attributes := "" }}
{{ if $sortable }}{{ $attributes = printf "%s data-table-sortable=true" $attributes }}{{ end }} {{ if $sortable }}{{ $attributes = printf "%s data-table-sortable=true" $attributes }}{{ end }}
{{ if $paging }}{{ $attributes = printf "%s data-table-paging=true" $attributes }}{{ end }} {{ if $paging }}{{ $attributes = printf "%s data-table-paging=true" $attributes }}{{ end }}
{{ if $searchable }}{{ $attributes = printf "%s data-table-searchable=true" $attributes }}{{ end }} {{ if $searchable }}{{ $attributes = printf "%s data-table-searchable=true" $attributes }}{{ end }}
{{- $old := "<table>" -}} {{- $new := printf `<table class="%s" %s` $target (trim $attributes " ") -}}
{{- $new := printf "<table class=\"table %s\" %s>" $class (trim $attributes " ") -}} {{ $input := replaceRE $regex $new $input 1 -}}
{{ $input := replace $input $old $new -}}
{{- with $responsive }}<div class="{{ delimit . " " }}">{{ end -}} {{- with $responsive }}<div class="{{ delimit . " " }}">{{ end -}}
{{ $input | safeHTML }} {{ $input | safeHTML }}
{{- with $responsive }}</div>{{ end -}} {{- with $responsive }}</div>{{ end -}}

View File

@@ -0,0 +1,148 @@
<!--
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.
This source code adapts the original embedded shortcode as maintained by the Hugo repository. It introduces the
following modifications:
- Isolated the styles to comply with the Content Security Policy
- Added validation of shortcode arguments
- Added support to retrieve the title from the video metadata
- Adjusted autoplay configuration
- Modified the layout
The original source code is available on:
https://github.com/gohugoio/hugo/tpl/tplimpl/embedded/templates/shortcodes/youtube.html
https://github.com/gohugoio/hugo/tpl/tplimpl/embedded/templates/shortcodes/vimeo.html
Copyright 2022 The Hugo Authors. Licensed under the Apache License, Version 2.0.
-->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "video" "args" . "group" "partial") }}
{{- errorf "partial [assets/video.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $page := .page -}}
{{- $position := .position -}}
{{- $host := .host -}}
{{- $title := .title -}}
{{- $class := .class -}}
{{- $account := .account -}}
{{- $id := .id -}}
{{- $autoplay := .autoplay -}}
{{- $autotitle := .autotitle -}}
{{- $ratio := .ratio -}}
{{- $pc := "" -}}
{{- if eq $host "youtube" }}
{{- $pc = $page.Site.Config.Privacy.YouTube -}}
{{- else if eq $host "vimeo" }}
{{- $pc = $page.Site.Config.Privacy.Vimeo -}}
{{- end -}}
{{ if and (eq $host "youtube") ($pc.Disable) }}
{{- errorf "partial [assets/video.html] - YouTube video disabled in site's privacy settings" -}}
{{ $error = true }}
{{ else if and (eq $host "vimeo") ($pc.Disable) }}
{{- errorf "partial [assets/video.html] - Vimeo video disabled in site's privacy settings" -}}
{{ $error = true }}
{{ end }}
{{ if not $account }}
{{ with index $page.Site.Params.videos $host }}
{{ with index . "account" }}{{ $account = . }}{{ end }}
{{ end }}
{{ end }}
{{ $origin := $position }}
{{ if not $origin }}{{ with $page.File }}{{ $origin = .Path }}{{ end }}{{ end }}
<!-- Main code -->
{{ if not $error -}}
{{ if eq $host "youtube" }}
{{- $host := cond $pc.PrivacyEnhanced "www.youtube-nocookie.com" "www.youtube.com" -}}
{{ $url := printf "https://%s/embed/%s?origin=%s" $host $id $page.Site.BaseURL }}
{{ $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 .Err }}
{{ errorf "Unable to parse video metadata '%q': %s\n %s" $api $origin . }}
{{ else }}
{{ $data := . | transform.Unmarshal }}
{{ if $autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }}
{{ $padding = printf "%.2f%%" (mul (div $data.height $data.width) 100) }}
{{ end }}
{{ else }}
{{ errorf "Unable to get video metadata '%q': %s" $api $origin }}
{{ end }}
<div class="video-embedded {{ $class }}" data-video-padding="{{ $padding }}">
<iframe src="{{ $url }}{{ if $autoplay }}&autoplay=1&mute=1{{ end }}"
allowfullscreen title="{{ $title }}" {{ if $autoplay }}allow="autoplay"{{ end }}>
</iframe>
</div>
{{ else if eq $host "vimeo" }}
{{ $url := printf "https://player.vimeo.com/video/%s" $id }}
{{ $params := "" }}
{{ if $autoplay }}{{ $params = print $params "&autoplay=1&muted=1" }}{{ end }}
{{ if $pc.EnableDNT }}{{ $params = print $params "&dnt=1" }}{{ end }}
{{ $params = strings.TrimPrefix "&" $params }}
{{ with $params }}{{ $url = printf "%s?%s" $url . }}{{ end }}
{{ $padding := "56.25%" }}
{{- $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 .Err }}
{{ errorf "Unable to parse video metadata '%q': %s\n %s" $api $origin . }}
{{ else }}
{{ $data := . | transform.Unmarshal }}
{{ if $autotitle }}{{ with $data.title }}{{ $title = . }}{{ end }}{{ end }}
{{ $padding = printf "%.2f%%" (mul (div $data.height $data.width) 100) }}
{{ end }}
{{- end -}}
<div class="video-embedded {{ $class }}" data-video-padding="{{ $padding }}">
<iframe src="{{ $url | safeHTMLAttr }}" title="{{ $title }}" webkitallowfullscreen mozallowfullscreen allowfullscreen>
</iframe>
</div>
{{ else if eq $host "cloudinary" }}
{{ if not $account }}
{{ errorf "Missing account name for Cloudinary video '%s': %s" $id $origin }}
{{ 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 }}
{{ $padding := "56.25%" }}
{{ $thumbnail := partial "utilities/URLJoin.html" (dict "base" (path.Dir $id) "path" (printf "%s.jpg" (path.BaseName $id))) }}
{{ $metadata := partial "assets/helpers/image-dimension.html" (dict
"page" $page
"url" (printf "https://res.cloudinary.com/%s/video/upload/%s" $account (path.Clean $thumbnail))
"ratio" $ratio
"imageset" false
) }}
{{ $height := index $metadata "height" }}
{{ $width := index $metadata "width" }}
{{ if and $height $width }}
{{ $padding := printf "%.2f%%" (mul (div (float $height) $width) 100) }}
{{ 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>
</div>
{{ else }}
{{ errorf "Cannot retrieve metadata of Cloudinary video '%s' with account '%s': %s" $id $account $origin }}
{{ end }}
{{ else }}
{{ warnf "partial [assets/video.html] - Unsupported video provider: %s" $host }}
{{ end }}
{{ end -}}

View File

@@ -13,7 +13,9 @@
{{ end }} {{ end }}
{{ $.Scratch.Set "description" $description -}} {{ $.Scratch.Set "description" $description -}}
{{- $thumbnail := (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.url) .Params.Thumbnail) -}} {{- $thumbnail := "" -}}
{{ if reflect.IsMap .Params.Thumbnail }}{{ $thumbnail = .Params.Thumbnail.url }}{{ else }}{{ $thumbnail = .Params.Thumbnail }}{{ end }}
{{ if $thumbnail -}} {{ if $thumbnail -}}
{{ $imgURL := index (partial "assets/helpers/image-dimension.html" (dict "url" $thumbnail "width" 1280 "height" 640 "page" .)) "target" }} {{ $imgURL := index (partial "assets/helpers/image-dimension.html" (dict "url" $thumbnail "width" 1280 "height" 640 "page" .)) "target" }}
{{ $.Scratch.Set "thumbnail" ($imgURL | absURL) -}} {{ $.Scratch.Set "thumbnail" ($imgURL | absURL) -}}

View File

@@ -73,7 +73,7 @@
{{ end }} {{ end }}
{{- if site.Params.style.purge -}} {{- if site.Params.style.purge -}}
{{- $post_options := dict "config" "config" "noMap" hugo.IsProduction -}} {{- $post_options := dict "config" "config" "noMap" hugo.IsProduction -}}
{{- $css = $css | resources.PostCSS $post_options -}} {{- $css = $css | css.PostCSS $post_options -}}
{{- end -}} {{- end -}}
{{- if not hugo.IsProduction -}} {{- if not hugo.IsProduction -}}

View File

@@ -40,7 +40,7 @@
{{- $actions = sort $actions "weight" "asc" -}} {{- $actions = sort $actions "weight" "asc" -}}
<div class="hstack{{ if gt (len $actions) 1 }} gap-1{{ end }} justify-content-{{ $align}} pt-5 pt-md-3"> <div class="hstack{{ if gt (len $actions) 1 }} gap-1{{ end }} justify-content-{{ $align}} pt-5 pt-md-3">
{{ range $actions }} {{ range $actions }}
{{ partial "assets/button.html" (dict "href" .url "icon" .icon "title" .title "outline" .outline "order" "last" "justify" "start") }} {{ partial "assets/button.html" (dict "href" .url "icon" .icon "label" .label "title" .title "outline" .outline "order" "last" "justify" "start") }}
{{ end }} {{ end }}
</div> </div>
{{ end }} {{ end }}
@@ -61,7 +61,8 @@
{{ partial "assets/icon.html" (dict "icon" "mode" $mode $icon "wrapper" "col-6 mx-auto text-center")}} {{ partial "assets/icon.html" (dict "icon" "mode" $mode $icon "wrapper" "col-6 mx-auto text-center")}}
{{ end }} {{ end }}
{{ else }} {{ else }}
{{- $thumbnail := (or (and (reflect.IsMap $page.Params.Thumbnail) $page.Params.Thumbnail.url) $page.Params.Thumbnail) -}} {{- $thumbnail := "" -}}
{{ if reflect.IsMap $page.Params.Thumbnail }}{{ $thumbnail = $page.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $page.Params.Thumbnail }}{{ end }}
{{- if $thumbnail }} {{- if $thumbnail }}
{{ partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "sizes" $sizes "wrapper" $style "class" "rounded" "title" $page.Site.Title "priority" "high") }} {{ partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "sizes" $sizes "wrapper" $style "class" "rounded" "title" $page.Site.Title "priority" "high") }}
{{ end }} {{ end }}

View File

@@ -12,7 +12,8 @@
{{ $illustration = partial "assets/icon.html" (dict "icon" "mode" $mode $icon "wrapper" "mx-auto text-center")}} {{ $illustration = partial "assets/icon.html" (dict "icon" "mode" $mode $icon "wrapper" "mx-auto text-center")}}
{{ end }} {{ end }}
{{ else }} {{ else }}
{{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}} {{- $thumbnail := "" -}}
{{ if reflect.IsMap $item.Params.Thumbnail }}{{ $thumbnail = $item.Params.Thumbnail.url }}{{ else }}{{ $thumbnail = $item.Params.Thumbnail }}{{ end }}
{{- if $thumbnail }} {{- if $thumbnail }}
{{ $illustration = partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "wrapper" $style "inner" "rounded" "title" $item.Site.Title) }} {{ $illustration = partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "wrapper" $style "inner" "rounded" "title" $item.Site.Title) }}
{{ end }} {{ end }}

View File

@@ -46,7 +46,8 @@
{{- with index . "title" }}{{ $title = or . $title }}{{ end -}} {{- with index . "title" }}{{ $title = or . $title }}{{ end -}}
{{- end -}} {{- end -}}
{{- $thumbnail := (or (and (reflect.IsMap $sectionPage.Params.Thumbnail) $sectionPage.Params.Thumbnail.url) $sectionPage.Params.Thumbnail) -}} {{- $thumbnail := "" -}}
{{ 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 -}}
{{- $content := "" -}} {{- $content := "" -}}
{{ if not $sectionPage.IsSection }}{{ $content = $sectionPage.Content }}{{ end -}} {{ if not $sectionPage.IsSection }}{{ $content = $sectionPage.Content }}{{ end -}}

View File

@@ -80,8 +80,14 @@
{{- if not $isExternal -}} {{- if not $isExternal -}}
{{ $ref := partial "utilities/GetPage.html" (dict "url" $url "page" .Page) }} {{ $ref := partial "utilities/GetPage.html" (dict "url" $url "page" .Page) }}
{{- if not $ref -}} {{- if not $ref -}}
{{- errorf "Cannot find page: '%s' at %s" $url .Position -}} {{ $pageContext := "" }}
{{- $error = true -}} {{ with .Page.File }}{{ $pageContext = path.Join "/content" .Dir }}{{ end }}
{{ $isPageRes := fileExists (path.Join $pageContext $url) }}
{{ $isStatic := fileExists (path.Join "/static" $url) }}
{{ if and (not $isPageRes) (not $isStatic) }}
{{- errorf "Cannot find page or asset: '%s' at %s" $url .Position -}}
{{- $error = true -}}
{{ end }}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}

View File

@@ -30,20 +30,21 @@
{{ end }} {{ end }}
<!-- Main code --> <!-- Main code -->
{{ if or $sortable $paging $searchable }}{{ $class = trim (printf "%s data-table" $class) " " }}{{ end }} {{ if or $sortable $paging $searchable }}{{ $class = trim (printf "%s data-table" $class) " " }}{{ end }}
{{- $input := .Inner | .Page.RenderString }} {{- $input := .Inner | .Page.RenderString }}
{{- $input = replace $input "style=\"text-align:left\"" "class=\"text-start\"" -}} {{ $regex := `<table\s*class="(.+?)"` }}
{{- $input = replace $input "style=\"text-align:center\"" "class=\"text-center\"" -}} {{ $current := (index (index (findRESubmatch $regex $input) 0) 1) }}
{{- $input = replace $input "style=\"text-align:right\"" "class=\"text-end\"" -}} {{ $target := delimit (((split $current " ") | append "table" | append $class) | uniq) " " }}
{{ $attributes := "" }} {{ $attributes := "" }}
{{ if $sortable }}{{ $attributes = printf "%s data-table-sortable=true" $attributes }}{{ end }} {{ if $sortable }}{{ $attributes = printf "%s data-table-sortable=true" $attributes }}{{ end }}
{{ if $paging }}{{ $attributes = printf "%s data-table-paging=true" $attributes }}{{ end }} {{ if $paging }}{{ $attributes = printf "%s data-table-paging=true" $attributes }}{{ end }}
{{ if $searchable }}{{ $attributes = printf "%s data-table-searchable=true" $attributes }}{{ end }} {{ if $searchable }}{{ $attributes = printf "%s data-table-searchable=true" $attributes }}{{ end }}
{{- $old := "<table>" -}} {{- $new := printf `<table class="%s" %s` $target (trim $attributes " ") -}}
{{- $new := printf "<table class=\"table %s\" %s>" $class (trim $attributes " ") -}} {{ $input := replaceRE $regex $new $input 1 -}}
{{ $input := replace $input $old $new -}}
{{ if not $error }} {{ if not $error }}
{{ if eq $breakpoint "none" }} {{ if eq $breakpoint "none" }}
{{ $input | safeHTML }} {{ $input | safeHTML }}

View File

@@ -0,0 +1,50 @@
<!--
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.
-->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "video" "args" .Params "group" "shortcode") }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $host := "youtube" -}}
{{- $account := "" -}}
{{- $id := "" -}}
{{- $class := "" -}}
{{- $title := "" }}
{{- $autoplay := false }}
{{- $autotitle := false }}
{{- if .IsNamedParams }}
{{ with .Get "host" }}{{ $host = . }}{{ end }}
{{ with .Get "account" }}{{ $account = . }}{{ end }}
{{ with .Get "id" }}{{ $id = . }}{{ end }}
{{ with .Get "class" }}{{ $class = . }}{{ end }}
{{ with .Get "title" }}{{ $title = . }}{{ end }}
{{ if isset .Params "autoplay" }}{{ $autoplay = partial "utilities/CastBool.html" (.Get "autoplay") }}{{ end -}}
{{ if isset .Params "autotitle" }}{{ $autotitle = partial "utilities/CastBool.html" (.Get "autotitle") }}{{ end -}}
{{ else }}
{{- $id = .Get 0 -}}
{{- $class = .Get 1 -}}
{{ end }}
<!-- Main code -->
{{ if not $error -}}
{{ partial "assets/video.html" (dict
"page" .Page
"position" .Position
"account" $account
"host" $host
"id" $id
"class" $class
"title" $title
"autoplay" $autoplay
"autotitle" $autotitle
) }}
{{ end -}}

View File

@@ -0,0 +1,46 @@
<!--
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.
-->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "video" "args" .Params "group" "shortcode") }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $host := "vimeo" -}}
{{- $id := "" -}}
{{- $class := "" -}}
{{- $title := "Vimeo Video" }}
{{- $autoplay := false }}
{{- $autotitle := false }}
{{- if .IsNamedParams }}
{{ with .Get "id" }}{{ $id = . }}{{ end }}
{{ with .Get "class" }}{{ $class = . }}{{ end }}
{{ with .Get "title" }}{{ $title = . }}{{ end }}
{{ if isset .Params "autoplay" }}{{ $autoplay = partial "utilities/CastBool.html" (.Get "autoplay") }}{{ end -}}
{{ if isset .Params "autotitle" }}{{ $autotitle = partial "utilities/CastBool.html" (.Get "autotitle") }}{{ end -}}
{{ else }}
{{- $id = .Get 0 -}}
{{- $class = .Get 1 -}}
{{ end }}
<!-- Main code -->
{{ if not $error -}}
{{ partial "assets/video.html" (dict
"page" .Page
"position" .Position
"host" $host
"id" $id
"class" $class
"title" $title
"autoplay" $autoplay
"autotitle" $autotitle
) }}
{{ end -}}

View File

@@ -2,69 +2,45 @@
Copyright © 2024 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.
This source code adapts the original embedded shortcode as maintained by the Hugo repository. It introduces the
following modifications:
- Isolated the styles to comply with the Content Security Policy
- Added validation of shortcode arguments
- Added support to retrieve the title from the video metadata
- Adjusted autoplay configuration
- Modified the layout
The original source code is available on:
https://github.com/gohugoio/hugo/tpl/tplimpl/embedded/templates/shortcodes/youtube.html
Copyright 2022 The Hugo Authors. Licensed under the Apache License, Version 2.0.
--> -->
{{- $pc := .Page.Site.Config.Privacy.YouTube -}} {{ $error := false }}
{{- if not $pc.Disable -}}
{{ $error := false }}
<!-- Validate arguments --> <!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "youtube" "args" .Params) }} {{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "video" "args" .Params "group" "shortcode") }}
{{ errorf "Invalid arguments: %s" .Position -}} {{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }} {{ $error = true }}
{{ end }} {{ end }}
<!-- Initialize arguments --> <!-- Initialize arguments -->
{{- $id := "" -}} {{- $host := "youtube" -}}
{{- $class := "" -}} {{- $id := "" -}}
{{- $title := "YouTube Video" }} {{- $class := "" -}}
{{- $autoplay := false }} {{- $title := "YouTube Video" }}
{{- $autotitle := false }} {{- $autoplay := false }}
{{- $host := cond $pc.PrivacyEnhanced "www.youtube-nocookie.com" "www.youtube.com" -}} {{- $autotitle := false }}
{{- if .IsNamedParams }} {{- if .IsNamedParams }}
{{ with .Get "id" }}{{ $id = . }}{{ end }} {{ with .Get "id" }}{{ $id = . }}{{ end }}
{{ with .Get "class" }}{{ $class = . }}{{ end }} {{ with .Get "class" }}{{ $class = . }}{{ end }}
{{ with .Get "title" }}{{ $title = . }}{{ end }} {{ with .Get "title" }}{{ $title = . }}{{ end }}
{{ if isset .Params "autoplay" }}{{ $autoplay = partial "utilities/CastBool.html" (.Get "autoplay") }}{{ end -}} {{ if isset .Params "autoplay" }}{{ $autoplay = partial "utilities/CastBool.html" (.Get "autoplay") }}{{ end -}}
{{ if isset .Params "autotitle" }}{{ $autotitle = partial "utilities/CastBool.html" (.Get "autotitle") }}{{ end -}} {{ if isset .Params "autotitle" }}{{ $autotitle = partial "utilities/CastBool.html" (.Get "autotitle") }}{{ end -}}
{{ else }} {{ else }}
{{- $id = .Get 0 -}} {{- $id = .Get 0 -}}
{{- $class = .Get 1 -}} {{- $class = .Get 1 -}}
{{ end }} {{ end }}
{{ $url := printf "https://%s/embed/%s?origin=%s" $host $id .Site.BaseURL }}
{{ $api := printf "https://www.youtube.com/oembed?format=json&url=%s" (printf "https://www.youtube.com/watch?v=%s" $id) }}
{{ if $autotitle }} <!-- Main code -->
{{ with resources.GetRemote $api }} {{ if not $error -}}
{{ with .Err }} {{ partial "assets/video.html" (dict
{{ errorf "Unable to parse video metadata '%q': %s\n %s" $api .Position . }} "page" .Page
{{ else }} "position" .Position
{{ $data := . | transform.Unmarshal }} "host" $host
{{ with $data.title }}{{ $title = . }}{{ end }} "id" $id
{{ end }} "class" $class
{{ else }} "title" $title
{{ errorf "Unable to get video metadata '%q': %s" $api .Position }} "autoplay" $autoplay
{{ end }} "autotitle" $autotitle
{{ end }} ) }}
{{ end -}}
<!-- Main code -->
<div class="youtube-embedded {{ $class }}">
<iframe src="{{ $url }}{{ if $autoplay }}&autoplay=1&mute=1{{ end }}"
allowfullscreen title="{{ $title }}" {{ if $autoplay }}allow="autoplay"{{ end }}>
</iframe>
</div>
{{ end -}}

View File

@@ -4,12 +4,12 @@
command = "npm run build:example" command = "npm run build:example"
[build.environment] [build.environment]
DART_SASS_VERSION = "1.77.5" DART_SASS_VERSION = "1.78.0"
HUGO_VERSION = "0.131.0" HUGO_VERSION = "0.134.1"
HUGO_ENV = "production" HUGO_ENV = "production"
HUGO_ENABLEGITINFO = "true" HUGO_ENABLEGITINFO = "true"
NODE_VERSION = "20.16.0" NODE_VERSION = "20.17.0"
NPM_VERSION = "10.8.1" NPM_VERSION = "10.8.2"
# toml-docs-end netlify # toml-docs-end netlify
[[headers]] [[headers]]
@@ -31,7 +31,7 @@
connect-src 'self' connect-src 'self'
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \ https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \
font-src 'self' https://*.netlify.app https://fonts.gstatic.com; \ font-src 'self' https://*.netlify.app https://fonts.gstatic.com; \
frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com \ frame-src 'self' https://player.cloudinary.com https://player.vimeo.com https://www.youtube-nocookie.com https://www.youtube.com \
app.netlify.com; \ app.netlify.com; \
img-src 'self' data: https://*.imgix.net https://*.imagekit.io https://*.cloudinary.com https://*.netlify.app https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \ img-src 'self' data: https://*.imgix.net https://*.imagekit.io https://*.cloudinary.com https://*.netlify.app https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \
manifest-src 'self'; \ manifest-src 'self'; \
@@ -47,7 +47,6 @@
camera=(), \ camera=(), \
magnetometer=(), \ magnetometer=(), \
gyroscope=(), \ gyroscope=(), \
fullscreen=(), \
payment=() \ payment=() \
""" """
cache-control = """\ cache-control = """\

2359
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.25.6", "version": "0.27.0-alpha5",
"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",
@@ -69,26 +69,23 @@
"dependencies": { "dependencies": {
"@fullhuman/postcss-purgecss": "^6.0.0", "@fullhuman/postcss-purgecss": "^6.0.0",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"cssnano": "^7.0.5", "cssnano": "^7.0.6",
"cssnano-preset-advanced": "^7.0.5", "cssnano-preset-advanced": "^7.0.6",
"hugo-bin": "0.129.1", "hugo-bin": "0.131.1",
"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",
"eslint": "^8.57.0", "eslint": "^9.10.0",
"eslint-config-standard": "^17.1.0", "markdownlint-cli2": "^0.14.0",
"eslint-plugin-import": "^2.29.1", "neostandard": "^0.11.4",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-promise": "^6.6.0",
"markdownlint-cli2": "^0.13.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",
"postcss-cli": "^11.0.0", "postcss-cli": "^11.0.0",
"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.8.1", "stylelint": "^16.9.0",
"stylelint-config-standard-scss": "^13.1.0" "stylelint-config-standard-scss": "^13.1.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.120.0" min_version = "0.134.0"
[author] [author]
name = "Mark Dumay" name = "Mark Dumay"