Compare commits

...

371 Commits

Author SHA1 Message Date
Mark Dumay
65e9e57c9e Merge pull request #255 from gethinode/develop
Menu fix
2023-05-15 16:43:17 +02:00
Mark Dumay
ffa4473d25 Merge branch 'main' into develop 2023-05-15 16:10:43 +02:00
mark
6c5fe6f208 Bump release 2023-05-15 16:10:10 +02:00
mark
60efecf946 Retrieve menu data for single pages only 2023-05-15 16:09:39 +02:00
Mark Dumay
70fdf7c4f0 Merge pull request #254 from gethinode/develop
Sections
2023-05-15 15:36:53 +02:00
Mark Dumay
ee4bb45368 Merge branch 'main' into develop 2023-05-15 14:37:05 +02:00
mark
a08695d97e Bump package release 2023-05-15 14:35:28 +02:00
mark
1abeabcacd Refactor section headers 2023-05-15 14:34:53 +02:00
mark
16b2c8b058 Fix detection of headless content 2023-05-15 14:33:57 +02:00
mark
f8eab705fb Make href optional 2023-05-15 14:33:15 +02:00
mark
13b8421893 Enable description and content for list pages 2023-05-15 14:31:15 +02:00
mark
6324a90d77 Add option to push footer below page fold 2023-05-15 14:30:18 +02:00
mark
faccca732b Add thumbnail, icon, and content for sections 2023-05-15 14:29:30 +02:00
mark
04736fd8f1 Adjust color of projects section 2023-05-15 14:27:28 +02:00
mark
9c4378e5af Add moreOpensource translation 2023-05-15 14:17:05 +02:00
mark
0574627010 Refine theme switcher label 2023-05-15 14:16:51 +02:00
Mark Dumay
9e668775db Merge pull request #252 from gethinode/develop
Develop
2023-05-14 05:33:48 +02:00
mark
cefd152430 Bump release version 2023-05-14 05:30:00 +02:00
mark
48d2002d1c Remove docs template from main repository 2023-05-14 05:29:23 +02:00
Mark Dumay
259f0f321c Merge pull request #251 from gethinode/main
Sync
2023-05-13 17:36:29 +02:00
Mark Dumay
d24cb8ccb3 Merge pull request #250 from gethinode/sections
Sections
2023-05-13 17:32:46 +02:00
Mark Dumay
96226e2d8a Merge branch 'main' into sections 2023-05-13 16:48:02 +02:00
mark
27857b7fd5 Bump release version 2023-05-13 16:47:31 +02:00
mark
9a67f7bd4f Support configurable nesting 2023-05-13 16:46:43 +02:00
Mark Dumay
e15cd08bea Merge pull request #249 from gethinode/links
Links
2023-05-11 09:26:04 +02:00
Mark Dumay
dd817bc5ce Merge branch 'main' into links 2023-05-11 09:08:09 +02:00
mark
4b4c9d1711 Bump release version 2023-05-11 09:07:52 +02:00
mark
38e68ac757 Fix potentially unsafe external links 2023-05-11 09:06:55 +02:00
Mark Dumay
c14d3868bb Merge pull request #248 from gethinode/develop
Multilingual
2023-05-11 06:47:51 +02:00
Mark Dumay
067c244770 Merge branch 'main' into develop 2023-05-11 06:40:52 +02:00
mark
d76d275ddb Bump release version 2023-05-11 06:38:57 +02:00
mark
1803759b6b Ensure parsed URLs are language aware 2023-05-11 06:32:31 +02:00
mark
2833cfc15a Remove language URL prefix 2023-05-11 06:28:45 +02:00
mark
0a174def75 Remove language URL prefix 2023-05-11 06:28:24 +02:00
mark
7a7d3a93f9 Translate slug of Dutch blog posts 2023-05-11 06:04:27 +02:00
Mark Dumay
c1afe32344 Merge pull request #245 from gethinode/develop
Navbar
2023-05-08 18:07:14 +02:00
Mark Dumay
749dab16ca Merge branch 'main' into develop 2023-05-08 17:04:05 +02:00
mark
264012eefb Bump release version 2023-05-08 17:03:36 +02:00
mark
fda4efa72b Fix navbar handling 2023-05-08 17:03:08 +02:00
github-actions[bot]
6a0bdf0f61 Merge pull request #244 from gethinode/dependabot/npm_and_yarn/eslint-8.40.0
Bump eslint from 8.39.0 to 8.40.0
2023-05-08 14:14:26 +00:00
dependabot[bot]
1a09879bea Bump eslint from 8.39.0 to 8.40.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.39.0 to 8.40.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/v8.39.0...v8.40.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-08 14:10:33 +00:00
Mark Dumay
81cc8fe02f Merge pull request #243 from gethinode/develop
Search
2023-05-08 10:12:53 +02:00
Mark Dumay
ef3d79f875 Merge branch 'main' into develop 2023-05-08 09:57:23 +02:00
mark
c66bb79ac5 Bump release version 2023-05-08 09:56:43 +02:00
mark
c5c5695541 Remove debug statement 2023-05-08 09:55:34 +02:00
mark
a3343c29dc Fix handling when search input is unavailable 2023-05-08 09:52:50 +02:00
mark
50a697c1fb Fix incorrect translation of no search results 2023-05-08 09:50:33 +02:00
github-actions[bot]
6cf7a410f4 Merge pull request #241 from gethinode/dependabot/npm_and_yarn/cssnano-6.0.1
Bump cssnano from 6.0.0 to 6.0.1
2023-05-03 14:13:19 +00:00
dependabot[bot]
bdade82dea Bump cssnano from 6.0.0 to 6.0.1
Bumps [cssnano](https://github.com/cssnano/cssnano) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano@6.0.0...cssnano@6.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-03 14:09:44 +00:00
github-actions[bot]
38aac9507e Merge pull request #242 from gethinode/dependabot/npm_and_yarn/stylelint-15.6.1
Bump stylelint from 15.6.0 to 15.6.1
2023-05-03 14:08:56 +00:00
dependabot[bot]
0eec1da639 Bump stylelint from 15.6.0 to 15.6.1
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.6.0 to 15.6.1.
- [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/15.6.0...15.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-03 14:05:09 +00:00
github-actions[bot]
1e8bc5f11d Merge pull request #240 from gethinode/dependabot/npm_and_yarn/cssnano-preset-advanced-6.0.1
Bump cssnano-preset-advanced from 6.0.0 to 6.0.1
2023-05-01 14:15:51 +00:00
dependabot[bot]
56f467e02c Bump cssnano-preset-advanced from 6.0.0 to 6.0.1
Bumps [cssnano-preset-advanced](https://github.com/cssnano/cssnano) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano-preset-advanced@6.0.0...cssnano-preset-advanced@6.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-01 14:12:37 +00:00
github-actions[bot]
83049db4bc Merge pull request #239 from gethinode/dependabot/npm_and_yarn/markdownlint-cli2-0.7.1
Bump markdownlint-cli2 from 0.7.0 to 0.7.1
2023-04-28 14:13:01 +00:00
dependabot[bot]
78599c8f76 Bump markdownlint-cli2 from 0.7.0 to 0.7.1
Bumps [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) from 0.7.0 to 0.7.1.
- [Release notes](https://github.com/DavidAnson/markdownlint-cli2/releases)
- [Changelog](https://github.com/DavidAnson/markdownlint-cli2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/DavidAnson/markdownlint-cli2/compare/v0.7.0...v0.7.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-28 14:05:36 +00:00
Mark Dumay
fc6e916fca Merge pull request #238 from gethinode/develop
Git commits
2023-04-28 12:29:10 +02:00
Mark Dumay
a0febc31ee Merge branch 'main' into develop 2023-04-28 12:19:27 +02:00
mark
800c82dba5 Bump release version 2023-04-28 12:18:58 +02:00
mark
8b59f3b6f7 Fix docs git commit link 2023-04-28 12:18:06 +02:00
Mark Dumay
9795e04a9b Merge pull request #237 from gethinode/develop
Tables
2023-04-28 09:23:19 +02:00
mark
6381cb3519 Fix linting issues 2023-04-28 09:18:51 +02:00
mark
01927f22b6 Bump package release 2023-04-28 09:07:52 +02:00
mark
da75210771 Add responsive behavior for tables 2023-04-28 09:00:12 +02:00
mark
b47bf99744 Fix highlight of nav items 2023-04-27 17:46:13 +02:00
Mark Dumay
2a4ba34c51 Merge pull request #236 from gethinode/develop
Add Google Analytics for demo site
2023-04-27 15:00:26 +02:00
mark
fc07cec664 Use cross-domain linking 2023-04-27 14:55:08 +02:00
Mark Dumay
538a1d2de3 Merge branch 'main' into develop 2023-04-27 14:46:22 +02:00
mark
6dda374b73 Add Google Analytics for demo site 2023-04-27 14:45:36 +02:00
Mark Dumay
e53a333ebf Merge pull request #235 from gethinode/develop
Fixes
2023-04-27 12:58:45 +02:00
Mark Dumay
5ed8c28bee Merge branch 'main' into develop 2023-04-27 12:36:22 +02:00
mark
fa47b7d93e Bump release 2023-04-27 12:35:51 +02:00
mark
f1693c8cf0 Refine Netlify CSP headers 2023-04-27 12:34:56 +02:00
mark
740fd91038 Remove empty parameters 2023-04-27 11:44:45 +02:00
mark
9a0dba5ee4 Fix loading tag manager script twice 2023-04-27 11:44:25 +02:00
Mark Dumay
e4b7b252b3 Revert back to macos-latest 2023-04-27 08:29:00 +02:00
Mark Dumay
569562cf24 Merge pull request #234 from gethinode/develop
Server
2023-04-27 08:28:27 +02:00
Mark Dumay
60b53f2fa9 Merge branch 'main' into develop 2023-04-27 08:17:46 +02:00
mark
3e5f23cf89 Bump release version 2023-04-27 08:17:07 +02:00
mark
c7b16cf2f4 Fix Hugo server detection 2023-04-27 08:16:21 +02:00
Mark Dumay
191d6e3d94 Change to macos-latest-xl runner 2023-04-27 08:01:43 +02:00
Mark Dumay
9dd7bf64e1 Merge pull request #233 from gethinode/main
Sync
2023-04-27 08:00:32 +02:00
Mark Dumay
580675f8b1 Merge pull request #232 from gethinode/tooltip
Tooltip
2023-04-27 07:55:02 +02:00
Mark Dumay
b2b43d550b Merge branch 'main' into tooltip 2023-04-27 07:47:08 +02:00
Mark Dumay
f79317b317 Merge pull request #231 from gethinode/develop
Google Analytics
2023-04-27 07:46:14 +02:00
mark
3d7bcc4356 Bump release version 2023-04-27 07:45:56 +02:00
mark
a7256ff270 Fix tooltip justification 2023-04-27 07:45:47 +02:00
mark
8ffc6dbd59 Bump release version 2023-04-27 07:28:46 +02:00
mark
5bb0cf07e6 Add Google Analytics support 2023-04-27 07:28:22 +02:00
Mark Dumay
37e9e70c55 Merge pull request #230 from gethinode/main
Sync
2023-04-26 16:04:43 +02:00
Mark Dumay
b4ddc8c58d Merge pull request #229 from gethinode/TOC
TOC
2023-04-26 16:01:32 +02:00
Mark Dumay
a7c4be508d Merge branch 'main' into TOC 2023-04-26 15:55:39 +02:00
mark
0988e07106 Fix linting issues 2023-04-26 15:50:29 +02:00
mark
7dcbfe8373 Add hover color to sidebar TOC 2023-04-26 15:48:59 +02:00
Mark Dumay
fdebbccfa1 Merge branch 'main' into develop 2023-04-26 13:44:28 +02:00
mark
7d1cd93e87 Bump release version 2023-04-26 13:43:04 +02:00
mark
3a056829c5 Improve configurability of button 2023-04-26 13:40:47 +02:00
mark
0ee0febc15 Adjust TOC button shadow 2023-04-26 13:40:22 +02:00
mark
ac081a3084 Add icon support 2023-04-26 12:07:59 +02:00
mark
9d07b5da5a Add TOC drop-down for small screens 2023-04-26 12:02:52 +02:00
Mark Dumay
67f1708691 Merge pull request #227 from gethinode/develop
Release v0.12.0
2023-04-25 16:48:00 +02:00
Mark Dumay
c5e5ec0f21 Merge branch 'main' into develop 2023-04-25 16:42:28 +02:00
mark
d461333738 Bump dependencies 2023-04-25 16:37:28 +02:00
mark
32c422a2a8 Bump release version 2023-04-25 16:36:49 +02:00
github-actions[bot]
b66660b557 Merge pull request #225 from gethinode/dependabot/npm_and_yarn/stylelint-config-standard-scss-9.0.0
Bump stylelint-config-standard-scss from 8.0.0 to 9.0.0
2023-04-25 14:09:00 +00:00
dependabot[bot]
be95c3cd68 Bump stylelint-config-standard-scss from 8.0.0 to 9.0.0
Bumps [stylelint-config-standard-scss](https://github.com/stylelint-scss/stylelint-config-standard-scss) from 8.0.0 to 9.0.0.
- [Release notes](https://github.com/stylelint-scss/stylelint-config-standard-scss/releases)
- [Changelog](https://github.com/stylelint-scss/stylelint-config-standard-scss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint-scss/stylelint-config-standard-scss/compare/v8.0.0...v9.0.0)

---
updated-dependencies:
- dependency-name: stylelint-config-standard-scss
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-25 14:04:29 +00:00
mark
74aa32e595 Move partials to assets folder 2023-04-25 15:58:45 +02:00
mark
4c305b38a5 Improve partial error messages 2023-04-25 15:31:36 +02:00
mark
63c609c1d3 Improve configurability of nav partial 2023-04-25 15:24:23 +02:00
mark
d7424d26eb Update i18n keywords 2023-04-25 13:22:57 +02:00
mark
1f66740c19 Refine minimal layout 2023-04-25 13:15:40 +02:00
github-actions[bot]
cb032b4fb8 Merge pull request #224 from gethinode/dependabot/npm_and_yarn/eslint-8.39.0
Bump eslint from 8.38.0 to 8.39.0
2023-04-24 14:21:22 +00:00
dependabot[bot]
3889382e19 Bump eslint from 8.38.0 to 8.39.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.38.0 to 8.39.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/v8.38.0...v8.39.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-24 14:17:25 +00:00
github-actions[bot]
86addfd6dd Merge pull request #223 from gethinode/dependabot/npm_and_yarn/stylelint-15.6.0
Bump stylelint from 15.5.0 to 15.6.0
2023-04-24 14:16:22 +00:00
dependabot[bot]
9110fb5ab4 Bump stylelint from 15.5.0 to 15.6.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.5.0 to 15.6.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/15.5.0...15.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-24 14:12:08 +00:00
Mark Dumay
fad4cdbfd2 Merge pull request #221 from gethinode/develop
Sections
2023-04-24 15:00:20 +02:00
Mark Dumay
c403d422d9 Merge branch 'main' into develop 2023-04-24 14:52:03 +02:00
mark
0ecfa72864 Update section config 2023-04-24 14:51:00 +02:00
mark
62af498414 Refactor card group 2023-04-24 14:50:19 +02:00
mark
ee37599ded Fix card header and footer 2023-04-24 14:43:57 +02:00
mark
9a4c7c7776 Merge snippets and lists into sections 2023-04-24 14:17:37 +02:00
mark
c05eeb015c Bump release version 2023-04-24 14:09:23 +02:00
mark
d9f898a2e1 Add unique id to each nav 2023-04-24 06:54:01 +02:00
mark
36f31a57ae Fix id 2023-04-24 06:52:40 +02:00
mark
17b3bbaf80 Add body as supported color 2023-04-24 06:52:30 +02:00
mark
26bc4ebb00 Prioritize page title over param title 2023-04-24 04:52:17 +02:00
mark
d13d80af2f Adjust build timeout 2023-04-23 16:35:43 +02:00
Mark Dumay
64abaf8d1e Merge pull request #220 from gethinode/develop
Fixes
2023-04-23 14:55:05 +02:00
Mark Dumay
ffc9c47b45 Merge branch 'main' into develop 2023-04-23 14:43:04 +02:00
mark
092630b030 Fix layout of figures 2023-04-23 14:39:44 +02:00
mark
2ec60a8b71 Adjust top spacing 2023-04-23 14:39:03 +02:00
mark
9af871fee7 Align layout of tags to single page layout 2023-04-23 14:38:43 +02:00
mark
883ab3f7a0 Bump release version 2023-04-23 14:26:30 +02:00
mark
d6a49ccb90 Refine padding 2023-04-23 14:25:41 +02:00
mark
fdc58d52e9 Fix image caption when ratio is set 2023-04-23 13:55:30 +02:00
Mark Dumay
97a829dfff Merge pull request #219 from gethinode/develop
Fixes
2023-04-23 10:14:54 +02:00
Mark Dumay
c7fbc548bb Merge branch 'main' into develop 2023-04-23 09:46:03 +02:00
mark
794510861c Bump release version 2023-04-23 09:45:34 +02:00
mark
da7c70c444 Fix detection of homepage 2023-04-23 09:45:02 +02:00
mark
1571decb8e Update supported colors 2023-04-23 08:44:53 +02:00
mark
835d3e615e Remove obsolete forestry config 2023-04-23 07:56:56 +02:00
Mark Dumay
393aea46e1 Merge pull request #218 from gethinode/develop
Colors
2023-04-23 07:53:47 +02:00
Mark Dumay
f3347e871e Merge branch 'main' into develop 2023-04-23 07:47:44 +02:00
mark
9d751abbf0 Bump release to 0.12.0-alpha2 2023-04-23 07:47:03 +02:00
mark
ccfc674019 Improve placement of multiple tag buttons 2023-04-23 07:43:49 +02:00
mark
45aa488e37 Set project card color to body-tertiary 2023-04-23 07:38:33 +02:00
mark
5d96fdb3db Make tags color-mode aware 2023-04-23 07:34:54 +02:00
mark
c2faf0d4f6 Update card example 2023-04-23 07:22:12 +02:00
mark
1e8d94e1fb Change tertiary to body-tertiary 2023-04-23 07:21:45 +02:00
mark
3a6edbf2a2 Improve colored links for color modes 2023-04-23 07:13:45 +02:00
Mark Dumay
a52154b531 Merge pull request #217 from gethinode/develop
v0.12.0 prerelease
2023-04-22 13:38:29 +02:00
mark
a27d25737f Add nav example in Dutch 2023-04-22 13:33:50 +02:00
mark
e810df9177 Change color to tertiary 2023-04-22 13:33:32 +02:00
mark
d4dc5d8693 Stretch background color to entire viewport 2023-04-22 13:23:30 +02:00
Mark Dumay
878258796b Merge branch 'main' into develop 2023-04-22 13:10:49 +02:00
mark
0397b66d05 Do not center headlines by default 2023-04-22 13:09:09 +02:00
mark
5ef32bed6d Add option to center headlines on homepage 2023-04-22 13:08:42 +02:00
mark
bbdd8b6c62 Adjust style of header 2023-04-22 13:07:57 +02:00
mark
67a1d58178 Adjust style of header 2023-04-22 13:07:20 +02:00
mark
1bede70fae Fix lint issues 2023-04-22 12:42:00 +02:00
mark
156dbfd3a9 Add section styles 2023-04-22 12:39:44 +02:00
mark
c2a2ffd06d Add reveal animation 2023-04-22 12:39:22 +02:00
mark
6aeb1ae617 Add reveal animation 2023-04-22 12:39:13 +02:00
mark
9fe02aa39b Add snippet list partial 2023-04-22 12:33:40 +02:00
mark
f6f65ef7f3 Set max width of sections 2023-04-22 12:32:08 +02:00
mark
8b8a6b5b36 Add list partial 2023-04-22 12:31:21 +02:00
mark
9fabcbaf13 Adjust style of header 2023-04-22 12:30:30 +02:00
mark
18ad1ebc93 Adjust style of header 2023-04-22 12:28:29 +02:00
mark
f4cde441a0 Set max width of single pages 2023-04-22 12:27:49 +02:00
mark
1baea7f63d Add support for snippets 2023-04-22 12:25:48 +02:00
mark
89b7aa24e9 Set max width of featured section 2023-04-22 12:22:50 +02:00
mark
2ebbf5a370 Set max width of footer 2023-04-22 12:20:16 +02:00
mark
595e562814 Add nav partial 2023-04-22 12:05:08 +02:00
mark
2bf64805dc Adjust maximum width of navbar 2023-04-22 12:04:33 +02:00
mark
0576f78240 Add persona shortcode 2023-04-22 11:58:46 +02:00
mark
0f06571e50 Refine message of 404 page 2023-04-22 11:55:53 +02:00
mark
bb834c9c15 Improve layout of 404 page 2023-04-22 11:52:16 +02:00
mark
f000d95533 Change release to 0.12.0-alpha 2023-04-22 11:47:45 +02:00
mark
d3738657a3 Add "body" and "tertiary" theme colors 2023-04-22 11:46:42 +02:00
Mark Dumay
d2655290b4 Merge pull request #216 from gethinode/develop
Refinement
2023-04-21 18:06:20 +02:00
Mark Dumay
97fd864129 Merge branch 'main' into develop 2023-04-21 16:59:07 +02:00
mark
44d2f3699f Fix indentation of sidebar items 2023-04-21 16:56:41 +02:00
github-actions[bot]
7bc7621996 Merge pull request #215 from gethinode/dependabot/npm_and_yarn/markdownlint-cli2-0.7.0
Bump markdownlint-cli2 from 0.6.0 to 0.7.0
2023-04-20 14:09:55 +00:00
dependabot[bot]
19b6a7817d Bump markdownlint-cli2 from 0.6.0 to 0.7.0
Bumps [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) from 0.6.0 to 0.7.0.
- [Release notes](https://github.com/DavidAnson/markdownlint-cli2/releases)
- [Changelog](https://github.com/DavidAnson/markdownlint-cli2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/DavidAnson/markdownlint-cli2/compare/v0.6.0...v0.7.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>
2023-04-20 14:04:55 +00:00
mark
eddfe93e6e Add persona partial 2023-04-18 15:27:23 +02:00
mark
a5b3b61e23 Remove commented code 2023-04-18 12:02:02 +02:00
mark
6586370d75 Refine nav 2023-04-18 11:58:38 +02:00
Mark Dumay
c1de0a4604 Merge pull request #213 from gethinode/develop
Color mode
2023-04-18 06:07:33 +02:00
Mark Dumay
e71908e2a8 Merge branch 'main' into develop 2023-04-17 16:57:32 +02:00
mark
053b63a580 Add callout styles 2023-04-17 16:54:42 +02:00
mark
276b2e7ab5 Bump release version 2023-04-17 16:54:39 +02:00
mark
db5cadb2ac Add color mode support for images 2023-04-17 16:40:35 +02:00
github-actions[bot]
a6669030d8 Merge pull request #212 from gethinode/dependabot/npm_and_yarn/stylelint-15.5.0
Bump stylelint from 15.4.0 to 15.5.0
2023-04-17 14:12:11 +00:00
dependabot[bot]
8cbd2db6fa Bump stylelint from 15.4.0 to 15.5.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.4.0 to 15.5.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/15.4.0...15.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-17 14:09:16 +00:00
Mark Dumay
b09b411b10 Update and rename auto-approve.yml to auto-merge.yml 2023-04-14 05:15:00 +02:00
Mark Dumay
b4414c9ecb Merge pull request #210 from gethinode/develop
Nav shortcode
2023-04-13 16:57:53 +02:00
Mark Dumay
e6a4d9a643 Merge branch 'main' into develop 2023-04-13 16:52:36 +02:00
mark
4c4bce6e1e Bump release version 2023-04-13 16:51:32 +02:00
mark
5c6c934499 Add nav shortcode 2023-04-13 16:50:58 +02:00
mark
f163c870cd Move auto-approve to workflows 2023-04-13 10:01:04 +02:00
Mark Dumay
b6035d2aa8 Merge pull request #207 from gethinode/dependabot/npm_and_yarn/eslint-8.38.0
Bump eslint from 8.37.0 to 8.38.0
2023-04-13 07:40:37 +02:00
Mark Dumay
2eed95a45d Merge branch 'main' into dependabot/npm_and_yarn/eslint-8.38.0 2023-04-13 07:34:19 +02:00
Mark Dumay
9019ea8d3c Rename auto-approve to auto-approve.yml 2023-04-13 07:34:01 +02:00
Mark Dumay
bd88950647 Create auto-approve 2023-04-13 07:33:37 +02:00
Mark Dumay
7b2d88d9d7 Merge branch 'main' into dependabot/npm_and_yarn/eslint-8.38.0 2023-04-13 07:19:27 +02:00
Mark Dumay
c6cc6e03eb Merge pull request #209 from gethinode/dependabot/npm_and_yarn/stylelint-config-standard-scss-8.0.0
Bump stylelint-config-standard-scss from 7.0.1 to 8.0.0
2023-04-11 17:08:29 +02:00
dependabot[bot]
afc023d580 Bump stylelint-config-standard-scss from 7.0.1 to 8.0.0
Bumps [stylelint-config-standard-scss](https://github.com/stylelint-scss/stylelint-config-standard-scss) from 7.0.1 to 8.0.0.
- [Release notes](https://github.com/stylelint-scss/stylelint-config-standard-scss/releases)
- [Changelog](https://github.com/stylelint-scss/stylelint-config-standard-scss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint-scss/stylelint-config-standard-scss/compare/v7.0.1...v8.0.0)

---
updated-dependencies:
- dependency-name: stylelint-config-standard-scss
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-11 14:05:35 +00:00
Mark Dumay
d3a15b5b1e Merge pull request #208 from gethinode/dependabot/npm_and_yarn/rimraf-5.0.0
Bump rimraf from 4.4.1 to 5.0.0
2023-04-10 16:31:33 +02:00
dependabot[bot]
d928f6d4fd Bump rimraf from 4.4.1 to 5.0.0
Bumps [rimraf](https://github.com/isaacs/rimraf) from 4.4.1 to 5.0.0.
- [Release notes](https://github.com/isaacs/rimraf/releases)
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v4.4.1...v5.0.0)

---
updated-dependencies:
- dependency-name: rimraf
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-10 14:11:48 +00:00
dependabot[bot]
f2559c243f Bump eslint from 8.37.0 to 8.38.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.37.0 to 8.38.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/v8.37.0...v8.38.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-10 14:11:28 +00:00
mark
0e073465ae Remove color mode switcher from navbar example 2023-04-10 15:16:34 +02:00
Mark Dumay
f5dafb50a8 Merge pull request #206 from gethinode/develop
Bump release version
2023-04-10 14:44:06 +02:00
mark
671cd1f0f2 Bump release version 2023-04-10 14:43:38 +02:00
Mark Dumay
e15052db22 Merge pull request #205 from gethinode/develop
Navbar
2023-04-10 14:42:38 +02:00
mark
6be2bb28f8 Fix #204 2023-04-10 14:16:45 +02:00
mark
31e4161258 Apply small drop shadow for expanded navbar 2023-04-10 14:16:20 +02:00
mark
44d018fa7c Fix invalid value 2023-04-10 14:15:32 +02:00
mark
3a49d0ca73 Adjust divider for collapsed and regular navbar 2023-04-10 14:14:45 +02:00
mark
c5ac3bbd3c Fix indent 2023-04-10 14:10:28 +02:00
Mark Dumay
6fe0df9466 Merge pull request #203 from gethinode/develop
Navbar
2023-04-09 15:20:59 +02:00
mark
2fc134503c Bump release version 2023-04-09 15:14:11 +02:00
mark
f11e98367b Change navbar size 2023-04-09 15:13:31 +02:00
mark
0ad4875ee2 Improve mode selector behavior 2023-04-09 15:13:11 +02:00
mark
a227a01407 Hide language label unless collapsed 2023-04-09 15:12:37 +02:00
mark
a8c8546c23 Add mode param 2023-04-09 15:11:20 +02:00
mark
0aa2a0427b Add mode param 2023-04-09 15:10:27 +02:00
mark
3047f8e937 Support multiple selectors 2023-04-09 15:10:01 +02:00
Mark Dumay
d144bd328c Merge pull request #202 from gethinode/develop
Color mode
2023-04-08 09:09:13 +02:00
mark
8815642bea Bump release version 2023-04-08 08:57:30 +02:00
mark
cb862374fd FIx icon path 2023-04-08 08:56:45 +02:00
mark
60265ce7e8 Fix #200 2023-04-08 08:54:25 +02:00
Mark Dumay
eec1c0954a Update bug_report.md
Add Hinode version
2023-04-07 18:44:14 +02:00
mark
8aa0556298 Move stylesheet to folder 2023-04-06 17:49:53 +02:00
mark
c92c1686cd Remove redundant suffix from main js bundle 2023-04-06 17:29:43 +02:00
Mark Dumay
f2509b07af Merge pull request #199 from gethinode/develop
Navigation
2023-04-06 09:49:34 +02:00
mark
4b606deafd Clean up style 2023-04-06 09:40:11 +02:00
mark
d9f805d4a4 Bump release version 2023-04-06 09:33:10 +02:00
mark
a62bea018b Refine TOC offset 2023-04-06 09:31:09 +02:00
mark
2596f2d7ee Refine heading offset 2023-04-06 09:31:02 +02:00
mark
2bcd955402 Fix #154 2023-04-06 09:09:17 +02:00
Mark Dumay
511ad2cb4c Merge pull request #198 from gethinode/develop
Navbar
2023-04-06 06:21:07 +02:00
mark
b87a91f6df Fix #128 2023-04-06 06:17:30 +02:00
mark
11b8bb4c69 Bump release version 2023-04-06 06:05:00 +02:00
mark
84fab6b8a8 Improve alignment of navbar elements 2023-04-06 06:04:29 +02:00
Mark Dumay
656770352a Merge pull request #197 from gethinode/develop
Configurable sidebar version
2023-04-05 13:17:07 +02:00
mark
1dadce3f92 Bump release version 2023-04-05 13:11:57 +02:00
mark
8d428d3b51 Make sidebar version configurable 2023-04-05 13:11:28 +02:00
Mark Dumay
8de8204f0e Merge pull request #196 from gethinode/develop
Clean up
2023-04-05 09:20:30 +02:00
mark
e5d2ece0b7 Bump release version 2023-04-05 09:16:00 +02:00
mark
01159ceea2 Remove debug statement 2023-04-05 09:10:07 +02:00
Mark Dumay
d6357b70ae Merge pull request #195 from gethinode/develop
Multi-level sidebar nav
2023-04-05 09:05:08 +02:00
mark
eb000e9f81 Fix linting issues 2023-04-05 08:51:38 +02:00
mark
efe9c2e06e Bump release version 2023-04-05 08:39:41 +02:00
mark
4c41cbcafb Enable nested sidebar navigation 2023-04-05 08:39:24 +02:00
mark
1910af163d Move API to enable utilities in theme styles 2023-04-05 08:31:21 +02:00
Mark Dumay
cba1566ba1 Merge pull request #194 from gethinode/develop
Bump dependencies
2023-04-03 15:27:27 +02:00
mark
69abe3ec0c Bump dependencies 2023-04-03 15:19:08 +02:00
Mark Dumay
9961d8e364 Merge pull request #193 from gethinode/develop
Dependencies
2023-04-03 15:04:09 +02:00
mark
7b1f81cd9a Bump Bootstrap to v5.3.0-alpha3 2023-04-03 14:17:06 +02:00
mark
1dd91da4f5 Fix dummy links 2023-04-03 14:14:03 +02:00
mark
624d89118d Use hugo-bin to simplify hugo installation 2023-04-03 14:12:52 +02:00
mark
ddab72c463 Fix #189 2023-04-03 13:42:02 +02:00
Mark Dumay
c95ccd22eb Merge pull request #192 from gethinode/main
Sync with main
2023-04-03 11:51:41 +02:00
Mark Dumay
ced7196084 Merge pull request #191 from gethinode/sass
Sidebar
2023-04-03 11:45:39 +02:00
mark
9c726191de Bump release version 2023-04-03 11:39:57 +02:00
mark
93a6fab67f Fix #190 2023-04-03 11:38:48 +02:00
Mark Dumay
923ff12915 Merge pull request #188 from gethinode/sass
Bootstrap 5.3.0-alpha2
2023-04-01 14:36:44 +02:00
mark
aaa299ef1d Bump Bootstrap to v5.3.0-alpha2 2023-04-01 14:22:18 +02:00
mark
e93bfcce8e Add js docs support 2023-04-01 14:19:52 +02:00
mark
d3847186b7 Bump dependencies 2023-04-01 14:12:19 +02:00
mark
ac956333d4 Use shorthand notation 2023-04-01 14:11:49 +02:00
Mark Dumay
08ab28bfea Merge pull request #187 from gethinode/main
Sync with main branch
2023-04-01 14:05:50 +02:00
Mark Dumay
18d4548b8d Merge pull request #186 from gethinode/main
Sync with main branch
2023-04-01 14:02:50 +02:00
Mark Dumay
38f4fe796b Merge pull request #182 from gethinode/dependabot/npm_and_yarn/cssnano-6.0.0
Bump cssnano from 5.1.15 to 6.0.0
2023-04-01 13:56:05 +02:00
Mark Dumay
04e4c37f3e Merge pull request #185 from gethinode/dependabot/npm_and_yarn/eslint-8.37.0
Bump eslint from 8.36.0 to 8.37.0
2023-03-30 17:42:53 +02:00
Mark Dumay
c4695dd771 Merge pull request #184 from gethinode/dependabot/npm_and_yarn/eslint-plugin-n-15.7.0
Bump eslint-plugin-n from 15.6.1 to 15.7.0
2023-03-30 17:42:16 +02:00
dependabot[bot]
cb75b6c777 Bump eslint from 8.36.0 to 8.37.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.36.0 to 8.37.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/v8.36.0...v8.37.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-30 14:12:29 +00:00
dependabot[bot]
827fcd9d4d Bump eslint-plugin-n from 15.6.1 to 15.7.0
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 15.6.1 to 15.7.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/15.6.1...15.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-30 14:11:56 +00:00
dependabot[bot]
21f1678de4 Bump cssnano from 5.1.15 to 6.0.0
Bumps [cssnano](https://github.com/cssnano/cssnano) from 5.1.15 to 6.0.0.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano@5.1.15...cssnano@6.0.0)

---
updated-dependencies:
- dependency-name: cssnano
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-28 14:27:26 +00:00
Mark Dumay
f0cfd49983 Merge pull request #183 from gethinode/dependabot/npm_and_yarn/fortawesome/fontawesome-free-6.4.0
Bump @fortawesome/fontawesome-free from 6.3.0 to 6.4.0
2023-03-28 16:24:37 +02:00
Mark Dumay
61fb294dfd Merge pull request #181 from gethinode/dependabot/npm_and_yarn/cssnano-preset-advanced-6.0.0
Bump cssnano-preset-advanced from 5.3.10 to 6.0.0
2023-03-28 16:23:59 +02:00
dependabot[bot]
7e1843febe Bump @fortawesome/fontawesome-free from 6.3.0 to 6.4.0
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.3.0...6.4.0)

---
updated-dependencies:
- dependency-name: "@fortawesome/fontawesome-free"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-28 14:11:46 +00:00
dependabot[bot]
7ed4693f40 Bump cssnano-preset-advanced from 5.3.10 to 6.0.0
Bumps [cssnano-preset-advanced](https://github.com/cssnano/cssnano) from 5.3.10 to 6.0.0.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano-preset-advanced@5.3.10...cssnano-preset-advanced@6.0.0)

---
updated-dependencies:
- dependency-name: cssnano-preset-advanced
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-28 14:11:09 +00:00
Mark Dumay
6c08d5eda1 Merge pull request #179 from gethinode/dependabot/npm_and_yarn/rimraf-4.4.1
Bump rimraf from 4.4.0 to 4.4.1
2023-03-23 15:33:08 +01:00
dependabot[bot]
79e1b0aae1 Bump rimraf from 4.4.0 to 4.4.1
Bumps [rimraf](https://github.com/isaacs/rimraf) from 4.4.0 to 4.4.1.
- [Release notes](https://github.com/isaacs/rimraf/releases)
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v4.4.0...v4.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-23 14:14:45 +00:00
Mark Dumay
f3225ff139 Merge pull request #177 from gethinode/sass
Sass
2023-03-18 06:33:40 +01:00
mark
f0389f83b7 Add js support 2023-03-18 06:25:54 +01:00
mark
d8271aa83a Bump release version 2023-03-18 06:24:38 +01:00
mark
c523f2b890 Bump dependencies 2023-03-18 06:22:51 +01:00
mark
6a32015d08 Support Bootstrap theme 2023-03-18 06:22:36 +01:00
mark
e576737ff1 Add PostProcess in production 2023-03-18 06:21:36 +01:00
Mark Dumay
08fa4d8c89 Merge pull request #175 from gethinode/dependabot/npm_and_yarn/eslint-8.36.0
Bump eslint from 8.35.0 to 8.36.0
2023-03-13 17:01:46 +01:00
dependabot[bot]
7086700562 Bump eslint from 8.35.0 to 8.36.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.35.0 to 8.36.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/v8.35.0...v8.36.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-13 14:14:57 +00:00
Mark Dumay
a8fbdad172 Merge pull request #173 from gethinode/sass
Sass
2023-03-12 13:11:17 +01:00
mark
d374f50b66 Refine safelist 2023-03-12 12:52:55 +01:00
mark
f0210348c6 Bump release version 2023-03-12 12:52:44 +01:00
mark
d66b093281 Rename duplicate build tag 2023-03-12 12:50:09 +01:00
Mark Dumay
bda9550c16 Merge pull request #172 from gethinode/sass
Sass
2023-03-12 09:25:58 +01:00
mark
36a4d93321 Update lint ignore path 2023-03-12 08:59:36 +01:00
mark
26aeec106a Bump release version 2023-03-12 08:58:08 +01:00
mark
d419bb8f67 Fix import statement 2023-03-12 08:57:36 +01:00
mark
b840ce6cf4 Move files to theme folder to fix downstream mount 2023-03-12 08:57:21 +01:00
mark
816b7ca920 Move files to theme folder to fix downstream mount 2023-03-12 08:56:50 +01:00
mark
3534141678 Add fonts to purge safelist 2023-03-12 08:36:56 +01:00
Mark Dumay
7125033baa Merge pull request #171 from gethinode/dependabot/npm_and_yarn/autoprefixer-10.4.14
Bump autoprefixer from 10.4.13 to 10.4.14
2023-03-10 17:24:15 +01:00
Mark Dumay
042fa303be Merge pull request #170 from gethinode/dependabot/npm_and_yarn/rimraf-4.4.0
Bump rimraf from 4.3.1 to 4.4.0
2023-03-10 17:23:49 +01:00
dependabot[bot]
5bd83f8255 Bump autoprefixer from 10.4.13 to 10.4.14
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.13 to 10.4.14.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.13...10.4.14)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-10 14:08:45 +00:00
dependabot[bot]
f0d18dc909 Bump rimraf from 4.3.1 to 4.4.0
Bumps [rimraf](https://github.com/isaacs/rimraf) from 4.3.1 to 4.4.0.
- [Release notes](https://github.com/isaacs/rimraf/releases)
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v4.3.1...v4.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-10 14:08:15 +00:00
Mark Dumay
128f9d6071 Merge pull request #168 from gethinode/dependabot/npm_and_yarn/rimraf-4.3.1
Bump rimraf from 4.3.0 to 4.3.1
2023-03-07 18:34:53 +01:00
dependabot[bot]
f0be69daf5 Bump rimraf from 4.3.0 to 4.3.1
Bumps [rimraf](https://github.com/isaacs/rimraf) from 4.3.0 to 4.3.1.
- [Release notes](https://github.com/isaacs/rimraf/releases)
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v4.3.0...v4.3.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-07 14:10:03 +00:00
Mark Dumay
d21bc1fe42 Merge pull request #167 from gethinode/dependabot/npm_and_yarn/rimraf-4.3.0
Bump rimraf from 4.2.0 to 4.3.0
2023-03-06 15:31:08 +01:00
Mark Dumay
6da61c23db Merge pull request #166 from gethinode/sass
Adjust default purge settings
2023-03-06 15:30:27 +01:00
dependabot[bot]
454efc5915 Bump rimraf from 4.2.0 to 4.3.0
Bumps [rimraf](https://github.com/isaacs/rimraf) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/isaacs/rimraf/releases)
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v4.2.0...v4.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-06 14:25:49 +00:00
mark
aa139ec51a Adjust default purge settings 2023-03-06 15:23:07 +01:00
Mark Dumay
a7844486bf Merge pull request #165 from gethinode/sass
Sass
2023-03-06 15:16:59 +01:00
mark
221dc23a05 Remove deprecated rules 2023-03-06 07:38:44 +01:00
mark
92d97f7091 Bump release version 2023-03-06 07:37:00 +01:00
mark
51b31cb98a Make reading of site params more consistent 2023-03-06 07:35:06 +01:00
mark
2935b60404 Use isProduction flag 2023-03-06 07:34:24 +01:00
mark
fc74085a7f Add CSS purge 2023-03-06 07:33:54 +01:00
mark
cd6b7332ab Revert back to libsass 2023-03-06 07:30:27 +01:00
mark
ef952f73f8 Ignore hugo_stats.json 2023-03-06 06:57:28 +01:00
mark
4a3a6d5395 Bump Hugo dependency 2023-03-06 06:57:02 +01:00
mark
b4186265ef Remove superfluous trailing forward slash 2023-03-06 06:10:27 +01:00
mark
ac5ae9aeb8 Use Dart Sass syntax 2023-03-04 12:45:57 +01:00
mark
d15eced48c Make Font Awesome fonts configurable 2023-03-04 12:42:26 +01:00
mark
7a66470b67 Use Hugo template variables 2023-03-04 08:54:53 +01:00
mark
1b772f8a18 Use Hugo template variables 2023-03-04 08:53:43 +01:00
mark
29c49350a2 Improve consistency of color definition 2023-03-04 08:39:51 +01:00
mark
6f0e767610 Leverage Sass variables from Hugo templates (v0.109.0) 2023-03-04 08:37:08 +01:00
mark
013937d60f Bump Hugo dependency 2023-03-04 08:32:52 +01:00
Mark Dumay
dc99a35258 Merge pull request #164 from gethinode/dependabot/npm_and_yarn/rimraf-4.2.0
Bump rimraf from 4.1.3 to 4.2.0
2023-03-03 17:26:03 +01:00
dependabot[bot]
3b4c4cb02f Bump rimraf from 4.1.3 to 4.2.0
Bumps [rimraf](https://github.com/isaacs/rimraf) from 4.1.3 to 4.2.0.
- [Release notes](https://github.com/isaacs/rimraf/releases)
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v4.1.3...v4.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-03 14:08:23 +00:00
Mark Dumay
56929c918a Merge pull request #163 from gethinode/dependabot/npm_and_yarn/rimraf-4.1.3
Bump rimraf from 4.1.2 to 4.1.3
2023-03-02 17:26:17 +01:00
dependabot[bot]
696ccbf64b Bump rimraf from 4.1.2 to 4.1.3
Bumps [rimraf](https://github.com/isaacs/rimraf) from 4.1.2 to 4.1.3.
- [Release notes](https://github.com/isaacs/rimraf/releases)
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v4.1.2...v4.1.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-02 14:24:39 +00:00
Mark Dumay
2e5028a612 Merge pull request #162 from gethinode/dependabot/npm_and_yarn/eslint-8.35.0
Bump eslint from 8.34.0 to 8.35.0
2023-02-27 15:39:00 +01:00
dependabot[bot]
89ecf07f23 Bump eslint from 8.34.0 to 8.35.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.34.0 to 8.35.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/v8.34.0...v8.35.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-27 14:22:05 +00:00
Mark Dumay
ea9295da62 Merge pull request #161 from gethinode/develop
Separator
2023-02-26 11:11:10 +01:00
mark
b6b5230cc3 Bump release version 2023-02-26 11:06:43 +01:00
mark
b65110fdcc Add configurable separator for lists 2023-02-26 11:05:55 +01:00
mark
6d3dc7b590 Remove article to fix height alignment 2023-02-26 10:52:50 +01:00
Mark Dumay
7bb479194b Merge pull request #160 from gethinode/develop
Cards
2023-02-26 09:40:45 +01:00
mark
73c1cf8a59 Narrow stylelint hints 2023-02-26 09:35:54 +01:00
mark
20ce3580c7 Fix linting issues 2023-02-26 08:55:57 +01:00
mark
2f733a709d Bump dependencies 2023-02-26 08:54:42 +01:00
mark
96b1eaaa04 Bump package version 2023-02-26 08:54:17 +01:00
mark
f0200f77dc Apply card-zoom animation to blog posts 2023-02-26 08:42:03 +01:00
mark
4ab462750c Ensure tag links take precedence over the card link 2023-02-26 08:41:41 +01:00
mark
597ea2fa2b Refine card-body-link style 2023-02-26 08:41:18 +01:00
mark
82b8228277 Add card-zoom animation 2023-02-26 08:40:48 +01:00
mark
6a025f80c4 Wrap the card in an article 2023-02-26 08:35:28 +01:00
mark
99d4d79537 Wrap the card in an article 2023-02-26 08:34:49 +01:00
mark
e1d1526b10 Ensure tag links take precedence over the card link 2023-02-26 08:33:43 +01:00
mark
8808c10402 Make entire card clickable 2023-02-26 08:32:58 +01:00
mark
87f1733a49 Fix spacing between tags 2023-02-24 06:08:31 +01:00
mark
0da862db93 Fix spacing between date and reading time 2023-02-24 06:05:34 +01:00
Mark Dumay
2bdcce58a7 Merge pull request #159 from gethinode/develop
Fonts
2023-02-23 10:29:17 +01:00
mark
e81456021e Exclude generated font faces from scss lint 2023-02-23 07:44:52 +01:00
mark
2815cda0ed Bump package version 2023-02-23 07:42:54 +01:00
mark
bad3a6fd4b Add autoprefixer and cssnano to postCSS 2023-02-23 06:46:37 +01:00
mark
53a779ca78 Add local fonts support 2023-02-22 04:31:16 +01:00
mark
f559ae17fd Adjust prod script name 2023-02-22 04:16:18 +01:00
Mark Dumay
3bf1cd9ef7 Merge pull request #157 from gethinode/dependabot/npm_and_yarn/stylelint-15.2.0
Bump stylelint from 15.1.0 to 15.2.0
2023-02-20 15:28:31 +01:00
dependabot[bot]
1596b40689 Bump stylelint from 15.1.0 to 15.2.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.1.0 to 15.2.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/15.1.0...15.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-20 14:23:57 +00:00
Mark Dumay
1506281000 Merge pull request #156 from gethinode/develop
SEO
2023-02-18 17:21:32 +01:00
mark
a0a550d070 Fix scss issue 2023-02-18 17:01:03 +01:00
mark
0fe6e477a4 Bump package version 2023-02-18 16:55:24 +01:00
mark
a8618e1da3 Fix SEO issue 2023-02-18 16:54:44 +01:00
mark
e724130159 Refine scss definitions 2023-02-18 07:44:38 +01:00
Mark Dumay
831fc66534 Merge pull request #153 from gethinode/develop
Fix rendering of scss docs
2023-02-18 07:29:48 +01:00
mark
ba8631b6a3 Bump package version 2023-02-18 07:23:26 +01:00
mark
0092588d87 Fix rendering of scss 2023-02-18 07:22:53 +01:00
127 changed files with 7406 additions and 4227 deletions

View File

@@ -1,3 +1,4 @@
assets/js/analytics.js
assets/js/color.js assets/js/color.js
assets/js/flexsearch.js assets/js/flexsearch.js
assets/js/vendor assets/js/vendor

View File

@@ -27,8 +27,9 @@ If applicable, add a copy of Hugo's log messages.
If applicable, add screenshots to help explain your problem. If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):** **Environment (please complete the following information):**
- Host OS: [e.g. macOS Ventura 13.0] - Hinode version: [e.g. v0.11.3]
- Node version: [e.g. node v18.10.0] - Host OS: [e.g. macOS Ventura 13.3]
- Node version: [e.g. node v18.15.0]
- Hugo version: [e.g. hugo v0.109.0-47b12b83e636224e5e601813ff3e6790c191e371+extended darwin/amd64 BuildDate=2022-12-23T10:38:11Z VendorInfo=gohugoio] - Hugo version: [e.g. hugo v0.109.0-47b12b83e636224e5e601813ff3e6790c191e371+extended darwin/amd64 BuildDate=2022-12-23T10:38:11Z VendorInfo=gohugoio]
- Browser: [e.g. Google Chrome Version 108.0.5359.124 (Official Build) (arm64)] - Browser: [e.g. Google Chrome Version 108.0.5359.124 (Official Build) (arm64)]

43
.github/workflows/auto-merge.yml vendored Normal file
View File

@@ -0,0 +1,43 @@
# Source: https://nicolasiensen.github.io/2022-07-23-automating-dependency-updates-with-dependabot-github-auto-merge-and-github-actions/
name: Dependabot auto-merge
on: pull_request_target
permissions:
pull-requests: write
contents: write
jobs:
review-dependabot-pr:
runs-on: ubuntu-latest
if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Enable auto-merge for Dependabot PRs
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Approve patch and minor updates
if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-patch' || steps.dependabot-metadata.outputs.update-type == 'version-update:semver-minor'}}
run: gh pr review $PR_URL --approve -b "I'm **approving** this pull request because **it includes a patch or minor update**"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Approve major updates of development dependencies
if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-major' && steps.dependabot-metadata.outputs.dependency-type == 'direct:development'}}
run: gh pr review $PR_URL --approve -b "I'm **approving** this pull request because **it includes a major update of a dependency used only in development**"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Comment on major updates of non-development dependencies
if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-major' && steps.dependabot-metadata.outputs.dependency-type == 'direct:production'}}
run: |
gh pr comment $PR_URL --body "I'm **not approving** this PR because **it includes a major update of a dependency used in production**"
gh pr edit $PR_URL --add-label "requires-manual-qa"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

3
.gitignore vendored
View File

@@ -3,4 +3,5 @@ resources/
node_modules/ node_modules/
.DS_store .DS_store
.hugo_build.lock .hugo_build.lock
hugo_stats.json

View File

@@ -3,5 +3,6 @@ assets/scss/components/_syntax-dark.scss
assets/scss/components/_syntax-light.scss assets/scss/components/_syntax-light.scss
assets/scss/hotfix assets/scss/hotfix
assets/scss/vendor assets/scss/vendor
assets/scss/theme/fonts.scss
assets/scss/app.scss assets/scss/app.scss
node_modules node_modules

View File

@@ -2,10 +2,7 @@
"extends": "stylelint-config-standard-scss", "extends": "stylelint-config-standard-scss",
"rules": { "rules": {
"no-empty-source": null, "no-empty-source": null,
"indentation": 4,
"string-quotes": "double",
"scss/comment-no-empty": null, "scss/comment-no-empty": null,
"max-line-length": null,
"scss/at-extend-no-missing-placeholder": null, "scss/at-extend-no-missing-placeholder": null,
"scss/dollar-variable-colon-space-after": null, "scss/dollar-variable-colon-space-after": null,
"scss/dollar-variable-empty-line-before": null, "scss/dollar-variable-empty-line-before": null,

View File

@@ -116,7 +116,7 @@ Hinode is inspired by the following themes:
## Donate ## Donate
<a href="https://www.buymeacoffee.com/markdumay" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/lato-orange.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;"></a> <a href="https://www.buymeacoffee.com/markdumay" target="_blank" rel="noopener noreferrer"><img src="https://cdn.buymeacoffee.com/buttons/lato-orange.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;"></a>
## License ## License

69
assets/js/analytics.js Normal file
View File

@@ -0,0 +1,69 @@
// Adapted from https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/google_analytics.html
{{- define "__ga_js_set_doNotTrack" -}}{{/* This is also used in the async version. */}}
{{- $pc := .Site.Config.Privacy.GoogleAnalytics -}}
{{- if not $pc.RespectDoNotTrack -}}
var doNotTrack = false;
{{- else -}}
var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
var doNotTrack = (dnt == "1" || dnt == "yes");
{{- end -}}
{{- end -}}
{{- $pc := .Site.Config.Privacy.GoogleAnalytics -}}
{{- if (and (not .Site.IsServer) (not $pc.Disable)) -}}
{{ with .Site.GoogleAnalytics -}}
{{ if hasPrefix . "G-"}}
{{ template "__ga_js_set_doNotTrack" $ }}
if (!doNotTrack) {
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', '{{ . }}', { 'anonymize_ip': {{- $pc.AnonymizeIP -}} });
}
{{ else if hasPrefix . "UA-" }}
{{ template "__ga_js_set_doNotTrack" $ }}
if (!doNotTrack) {
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
{{- if $pc.UseSessionStorage }}
if (window.sessionStorage) {
var GA_SESSION_STORAGE_KEY = 'ga:clientId';
ga('create', '{{ . }}', {
'storage': 'none',
'clientId': sessionStorage.getItem(GA_SESSION_STORAGE_KEY)
});
ga(function(tracker) {
sessionStorage.setItem(GA_SESSION_STORAGE_KEY, tracker.get('clientId'));
});
}
{{ else }}
ga('create', '{{ . }}', 'auto');
{{ end -}}
{{ if $pc.AnonymizeIP }}
ga('set', 'anonymizeIp', true);
{{ end }}
ga('send', 'pageview');
}
{{- end }}
{{ end -}}
{{- end }}

18
assets/js/animation.js Normal file
View File

@@ -0,0 +1,18 @@
function reveal () {
const reveals = document.querySelectorAll('.reveal')
for (let i = 0; i < reveals.length; i++) {
const windowHeight = window.innerHeight
const elementTop = reveals[i].getBoundingClientRect().top
const elementVisible = 150
if (elementTop < windowHeight - elementVisible) {
reveals[i].classList.add('active')
reveals[i].classList.remove('reveal')
} else {
reveals[i].classList.remove('active')
}
}
}
window.addEventListener('scroll', reveal)

View File

@@ -4,8 +4,6 @@
* Licensed under the Creative Commons Attribution 3.0 Unported License. * Licensed under the Creative Commons Attribution 3.0 Unported License.
*/ */
{{ if site.Params.main.enableDarkMode }}
(() => { (() => {
'use strict' 'use strict'
@@ -30,17 +28,24 @@
setTheme(getPreferredTheme()) setTheme(getPreferredTheme())
const showActiveTheme = theme => { const showActiveTheme = theme => {
const activeSelector = document.querySelector('.theme-icon-active') const activeSelectors = document.querySelectorAll('.theme-icon-active')
const activeButton = document.querySelector(`[data-bs-theme-value="${theme}"]`) const activeButtons = document.querySelectorAll(`[data-bs-theme-value="${theme}"]`)
const activeIcon = activeButton.querySelector('i') if (activeButtons.length > 0) {
const activeIcon = activeButtons[0].querySelector('i')
document.querySelectorAll('[data-bs-theme-value]').forEach(element => { document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active') element.classList.remove('active')
}) })
activeSelector.className = activeIcon.className for (let i = 0; i < activeSelectors.length; ++i) {
activeSelector.className = activeSelector.className.replace('theme-icon', 'theme-icon-active') activeSelectors[i].className = activeIcon.className
activeButton.classList.add('active') activeSelectors[i].className = activeSelectors[i].className.replace('theme-icon', 'theme-icon-active')
}
for (let i = 0; i < activeButtons.length; ++i) {
activeButtons[i].classList.add('active')
}
}
} }
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
@@ -63,5 +68,3 @@
}) })
}) })
})() })()
{{ end }}

View File

@@ -1,89 +1,30 @@
/* {{- $search := default true site.Params.navigation.search -}}
Source: {{- if $search -}}
- https://raw.githubusercontent.com/h-enk/doks/master/assets/js/index.js var search = document.getElementById('search');
*/ var suggestions = document.getElementById('suggestions');
var index = new FlexSearch.Document({
tokenize: "forward",
cache: 100,
document: {
id: "id",
tag: "tag",
store: ["href", "title", "description"],
index: ["title", "description", "content"]
}
});
var suggestions = document.getElementById('suggestions'); /*
var search = document.getElementById('search'); Source:
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
if (search !== null) { - https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
document.addEventListener('keydown', inputFocus); */
} function initIndex() {
function inputFocus(e) {
if (e.ctrlKey && e.key === '/' ) {
e.preventDefault();
search.focus();
}
if (e.key === 'Escape' ) {
search.blur();
suggestions.classList.add('d-none');
}
}
document.addEventListener('click', function(event) {
var isClickInsideElement = suggestions.contains(event.target);
if (!isClickInsideElement) {
suggestions.classList.add('d-none');
}
});
/*
Source:
- https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3
*/
document.addEventListener('keydown',suggestionFocus);
function suggestionFocus(e) {
const suggestionsHidden = suggestions.classList.contains('d-none');
if (suggestionsHidden) return;
const focusableSuggestions= [...suggestions.querySelectorAll('a')];
if (focusableSuggestions.length === 0) return;
const index = focusableSuggestions.indexOf(document.activeElement);
if (e.key === "ArrowUp") {
e.preventDefault();
const nextIndex = index > 0 ? index - 1 : 0;
focusableSuggestions[nextIndex].focus();
}
else if (e.key === "ArrowDown") {
e.preventDefault();
const nextIndex= index + 1 < focusableSuggestions.length ? index + 1 : index;
focusableSuggestions[nextIndex].focus();
}
}
/*
Source:
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
- https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
*/
(function(){
var index = new FlexSearch.Document({
tokenize: "forward",
cache: 100,
document: {
id: "id",
tag: "tag",
store: ["href", "title", "description"],
index: ["title", "description", "content"]
}
});
// https://discourse.gohugo.io/t/range-length-or-last-element/3803/2 // https://discourse.gohugo.io/t/range-length-or-last-element/3803/2
// Note: uses .Site.AllPages as .Site.RegularPages only returns content for the current language // Note: uses .Site.AllPages as .Site.RegularPages only returns content for the current language;
// pages without a title (such as browserconfig.xml) are excluded // pages without a title (such as browserconfig.xml) are excluded
{{ $list := where (where .Site.AllPages "Kind" "in" "page") "Title" "!=" "" }} {{ $list := where (where site.AllPages "Kind" "in" "page") "Title" "!=" "" }}
{{ $len := (len $list) -}} {{ $len := (len $list) -}}
index.add( index.add(
{{ range $index, $element := $list -}} {{ range $index, $element := $list -}}
{ {
@@ -103,59 +44,121 @@ Source:
{{ end -}} {{ end -}}
{{ end -}} {{ end -}}
; ;
search.addEventListener('input', show_results, true); search.addEventListener('input', showResults, true);
}
function show_results(){
const maxResult = 5; function hideSuggestions(e) {
var searchQuery = this.value; var isClickInsideElement = suggestions.contains(e.target);
// filter the results for the currently tagged language
const lang = document.documentElement.lang; if (!isClickInsideElement) {
var results = index.search(searchQuery, { index: ['title', 'description', 'content'], limit: maxResult, tag: lang, enrich: true }); suggestions.classList.add('d-none');
// flatten results since index.search() returns results for each indexed field
const flatResults = new Map(); // keyed by href to dedupe results
for (const result of results.flatMap(r => r.result)) {
if (flatResults.has(result.doc.href)) continue;
flatResults.set(result.doc.href, result.doc);
}
suggestions.innerHTML = "";
suggestions.classList.remove('d-none');
// inform user that no results were found
if (flatResults.size === 0 && searchQuery) {
const noResultsMessage = document.createElement('div')
noResultsMessage.innerHTML = `{{ T "ui_no_results" }} "<strong>${searchQuery}</strong>"`
noResultsMessage.classList.add("suggestion__no-results");
suggestions.appendChild(noResultsMessage);
return;
}
// construct a list of suggestions
for(const [href, doc] of flatResults) {
const entry = document.createElement('div');
suggestions.appendChild(entry);
const a = document.createElement('a');
a.href = href;
entry.appendChild(a);
const title = document.createElement('span');
title.classList.add('text-start');
title.textContent = doc.title;
title.classList.add("suggestion__title");
a.appendChild(title);
const description = document.createElement('span');
description.textContent = doc.description;
description.classList.add("suggestion__description");
a.appendChild(description);
suggestions.appendChild(entry);
if(suggestions.childElementCount == maxResult) break;
}
} }
}()); }
/*
Source:
- https://raw.githubusercontent.com/h-enk/doks/master/assets/js/index.js
*/
function inputFocus(e) {
if (e.ctrlKey && e.key === '/' ) {
e.preventDefault();
search.focus();
}
if (e.key === 'Escape' ) {
search.blur();
suggestions.classList.add('d-none');
}
}
/*
Source:
- https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3
*/
function suggestionFocus(e) {
const suggestionsHidden = suggestions.classList.contains('d-none');
if (suggestionsHidden) return;
const focusableSuggestions= [...suggestions.querySelectorAll('a')];
if (focusableSuggestions.length === 0) return;
const index = focusableSuggestions.indexOf(document.activeElement);
if (e.key === "ArrowUp") {
e.preventDefault();
const nextIndex = index > 0 ? index - 1 : 0;
focusableSuggestions[nextIndex].focus();
}
else if (e.key === "ArrowDown") {
e.preventDefault();
const nextIndex= index + 1 < focusableSuggestions.length ? index + 1 : index;
focusableSuggestions[nextIndex].focus();
}
}
/*
Source:
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
- https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
*/
function showResults() {
const maxResult = 5;
var searchQuery = this.value;
// filter the results for the currently tagged language
const lang = document.documentElement.lang;
var results = index.search(searchQuery, { index: ['title', 'description', 'content'], limit: maxResult, tag: lang, enrich: true });
// flatten results since index.search() returns results for each indexed field
const flatResults = new Map(); // keyed by href to dedupe results
for (const result of results.flatMap(r => r.result)) {
if (flatResults.has(result.doc.href)) continue;
flatResults.set(result.doc.href, result.doc);
}
suggestions.innerHTML = "";
suggestions.classList.remove('d-none');
// inform user that no results were found
if (flatResults.size === 0 && searchQuery) {
const msg = suggestions.dataset.noResults;
const noResultsMessage = document.createElement('div')
noResultsMessage.innerHTML = `${msg} "<strong>${searchQuery}</strong>"`
noResultsMessage.classList.add("suggestion__no-results");
suggestions.appendChild(noResultsMessage);
return;
}
// construct a list of suggestions
for (const [href, doc] of flatResults) {
const entry = document.createElement('div');
suggestions.appendChild(entry);
const a = document.createElement('a');
a.href = href;
entry.appendChild(a);
const title = document.createElement('span');
title.classList.add('text-start');
title.textContent = doc.title;
title.classList.add("suggestion__title");
a.appendChild(title);
const description = document.createElement('span');
description.textContent = doc.description;
description.classList.add("suggestion__description");
a.appendChild(description);
suggestions.appendChild(entry);
if (suggestions.childElementCount == maxResult) break;
}
}
if (search !== null && suggestions !== null) {
document.addEventListener('keydown', inputFocus);
document.addEventListener('keydown', suggestionFocus);
document.addEventListener('click', hideSuggestions);
initIndex();
}
{{- end -}}

View File

@@ -1,16 +1,26 @@
const navbar = document.querySelector('.navbar') const navbar = document.querySelector('.navbar')
const toggler = document.getElementById('main-nav-toggler') const toggler = document.getElementById('main-nav-toggler')
const modeSelectors = document.querySelectorAll('.switch-mode-collapsed')
// set the navbar background color to opaque when scrolling past a breakpoint if (navbar !== null && toggler !== null) {
window.onscroll = () => { // set the navbar background color to opaque when scrolling past a breakpoint
if (window.scrollY > 75) { window.onscroll = () => {
navbar.classList.add('nav-active') if (window.scrollY > 75) {
} else { navbar.classList.add('nav-active')
navbar.classList.remove('nav-active') } else {
navbar.classList.remove('nav-active')
}
}
// set the navbar background color to opaque when expanded
toggler.onclick = () => {
navbar.classList.toggle('navbar-expanded')
}
// invoke the navbar toggler for each mode switcher to collapse the main menu afterwards
for (let i = 0; i < modeSelectors.length; ++i) {
modeSelectors[i].onclick = () => {
toggler.click()
}
} }
} }
// set the navbar background color to opaque when expanded
toggler.onclick = () => {
navbar.classList.toggle('navbar-expanded')
}

View File

@@ -1,17 +1,5 @@
// Define template variables // Define template variables
// TODO: optimize, see https://discourse.gohugo.io/t/initialize-sass-variables-from-hugo-templates/42053 @import "hugo:vars";
// requires installation of dart-sass, no cross-platform installation available yet
$themeFont: {{ site.Params.style.themeFont | default "Inter" }};
$primary: {{ site.Params.style.primary | default "#007bff" }};
$secondary: {{ site.Params.style.secondary | default "#6c757d" }};
$success: {{ site.Params.style.success | default "#198754" }};
$info: {{ site.Params.style.info | default "#0dcaf0" }};
$warning: {{ site.Params.style.warning | default "#ffc107" }};
$danger: {{ site.Params.style.danger | default "#dc3545" }};
$light: {{ site.Params.style.light | default "#f8f9fa" }};
$dark: {{ site.Params.style.dark | default "#212529" }};
$navbar-offset: {{ if site.Params.navigation.fixed }}{{ site.Params.navigation.offset | default "4em" }}{{ else }}0em{{ end }};
$enable-dark-mode: {{ site.Params.main.enableDarkMode | default true }} !default;
// Include default variable overrides // Include default variable overrides
@import "common/variables.scss"; @import "common/variables.scss";
@@ -23,14 +11,14 @@ $enable-dark-mode: {{ site.Params.main.enableDarkMode | default tru
@import "bootstrap/scss/functions"; @import "bootstrap/scss/functions";
// Import Bootstrap configuration // Import Bootstrap configuration
@import "hotfix/variables"; @import "bootstrap/scss/variables";
@import "hotfix/variables-dark.scss"; @import "bootstrap/scss/variables-dark.scss";
@import "hotfix/maps"; @import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins"; @import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities"; @import "bootstrap/scss/utilities";
// Import Bootstrap layout & components // Import Bootstrap layout & components
@import "hotfix/root"; @import "bootstrap/scss/root";
@import "bootstrap/scss/reboot"; @import "bootstrap/scss/reboot";
@import "bootstrap/scss/type"; @import "bootstrap/scss/type";
@import "bootstrap/scss/images"; @import "bootstrap/scss/images";
@@ -65,9 +53,6 @@ $enable-dark-mode: {{ site.Params.main.enableDarkMode | default tru
// Import Bootstrap helpers // Import Bootstrap helpers
@import "bootstrap/scss/helpers"; @import "bootstrap/scss/helpers";
// Import Bootstrap utilities
@import "bootstrap/scss/utilities/api";
// Import Font Awesome // Import Font Awesome
// scss-docs-start awesome // scss-docs-start awesome
@import "@fortawesome/fontawesome-free/scss/fontawesome"; @import "@fortawesome/fontawesome-free/scss/fontawesome";
@@ -86,12 +71,14 @@ $enable-dark-mode: {{ site.Params.main.enableDarkMode | default tru
@import "components/comments.scss"; @import "components/comments.scss";
@import "components/navbar.scss"; @import "components/navbar.scss";
@import "components/img.scss"; @import "components/img.scss";
@import "components/persona.scss";
@import "components/popover.scss"; @import "components/popover.scss";
@import "components/search.scss"; @import "components/search.scss";
@import "components/sidebar.scss"; @import "components/sidebar.scss";
@import "components/syntax.scss"; @import "components/syntax.scss";
@import "components/toc.scss"; @import "components/toc.scss";
@import "components/vimeo.scss"; @import "components/vimeo.scss";
@import "common/animation.scss";
@import "common/styles.scss"; @import "common/styles.scss";
@import "layouts/reboot.scss"; @import "layouts/reboot.scss";
@import "layouts/type.scss"; @import "layouts/type.scss";
@@ -99,5 +86,17 @@ $enable-dark-mode: {{ site.Params.main.enableDarkMode | default tru
@import "helpers/colored-links.scss"; @import "helpers/colored-links.scss";
@import "helpers/display.scss"; @import "helpers/display.scss";
// TODO: include fonts with following statement in Dart Sass
// @if $import-fonts {
// @include meta.load-css(theme/fonts);
// }
{{ if (not (hasPrefix (lower site.Params.style.themeFontPath) "http")) }}
@import "theme/fonts.scss";
{{ end }}
// Import theme placeholder // Import theme placeholder
@import "theme.scss"; @import "theme/theme.scss";
// Import Bootstrap utilities API
@import "bootstrap/scss/utilities/api";

View File

@@ -0,0 +1,99 @@
.rotate-5 {
transform: rotate(5deg);
}
.rotate-n5 {
transform: rotate(-5deg);
}
@media (prefers-reduced-motion: no-preference) {
.reveal {
position: relative;
opacity: 0;
animation-iteration-count: 1;
}
.reveal.active {
opacity: 1;
}
.active.fade-bottom {
animation: fade-bottom 1s ease-in;
}
.active.fade-bottom-5 {
animation: fade-bottom-5 1s ease-in;
}
.active.fade-bottom-n5 {
animation: fade-bottom-n5 1s ease-in;
}
.active.fade-left {
animation: fade-left 1s ease-in;
}
.active.fade-right {
animation: fade-right 1s ease-in;
}
@keyframes fade-bottom {
0% {
transform: translateY(50px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes fade-bottom-5 {
0% {
transform: translateY(50px) rotate(5deg);
opacity: 0;
}
100% {
transform: translateY(0) rotate(5deg);
opacity: 1;
}
}
@keyframes fade-bottom-n5 {
0% {
transform: translateY(50px) rotate(-5deg);
opacity: 0;
}
100% {
transform: translateY(0) rotate(-5deg);
opacity: 1;
}
}
@keyframes fade-left {
0% {
transform: translateX(-100px);
opacity: 0;
}
100% {
transform: translateX(0);
opacity: 1;
}
}
@keyframes fade-right {
0% {
transform: translateX(100px);
opacity: 0;
}
100% {
transform: translateX(0);
opacity: 1;
}
}
}

View File

@@ -25,3 +25,4 @@
} }
// scss-docs-end export // scss-docs-end export
// stylelint-enable selector-pseudo-class-no-unknown

View File

@@ -1,25 +1,25 @@
// scss-docs-start icons // scss-docs-start icons
$form-check-input-checked-bg-image: url("icons/form-check-input-checked-bg-image.svg") !default; $form-check-input-checked-bg-image: url("/icons/form-check-input-checked-bg-image.svg") !default;
$form-check-radio-checked-bg-image: url("icons/form-check-radio-checked-bg-image.svg") !default; $form-check-radio-checked-bg-image: url("/icons/form-check-radio-checked-bg-image.svg") !default;
$form-check-input-indeterminate-bg-image: url("icons/form-check-input-indeterminate-bg-image.svg") !default; $form-check-input-indeterminate-bg-image: url("/icons/form-check-input-indeterminate-bg-image.svg") !default;
$form-switch-bg-image: url("icons/form-switch-bg-image.svg") !default; $form-switch-bg-image: url("/icons/form-switch-bg-image.svg") !default;
$form-switch-bg-image-dark: url("icons/form-switch-bg-image-dark.svg") !default; $form-switch-bg-image-dark: url("/icons/form-switch-bg-image-dark.svg") !default;
$form-switch-focus-bg-image: url("icons/form-switch-focus-bg-image.svg") !default; $form-switch-focus-bg-image: url("/icons/form-switch-focus-bg-image.svg") !default;
$form-switch-checked-bg-image: url("icons/form-switch-checked-bg-image.svg") !default; $form-switch-checked-bg-image: url("/icons/form-switch-checked-bg-image.svg") !default;
$form-select-indicator: url("icons/form-select-indicator.svg") !default; $form-select-indicator: url("/icons/form-select-indicator.svg") !default;
$form-select-indicator-dark: url("icons/form-select-indicator-dark.svg") !default; $form-select-indicator-dark: url("/icons/form-select-indicator-dark.svg") !default;
$form-feedback-icon-valid: url("icons/form-feedback-icon-valid.svg") !default; $form-feedback-icon-valid: url("/icons/form-feedback-icon-valid.svg") !default;
$form-feedback-icon-invalid: url("icons/form-feedback-icon-invalid.svg") !default; $form-feedback-icon-invalid: url("/icons/form-feedback-icon-invalid.svg") !default;
$navbar-light-toggler-icon-bg: url("icons/navbar-light-toggler-icon-bg.svg") !default; $navbar-light-toggler-icon-bg: url("/icons/navbar-light-toggler-icon-bg.svg") !default;
$navbar-dark-toggler-icon-bg: url("icons/navbar-dark-toggler-icon-bg.svg") !default; $navbar-dark-toggler-icon-bg: url("/icons/navbar-dark-toggler-icon-bg.svg") !default;
$accordion-button-icon: url("icons/accordion-button-icon.svg") !default; $accordion-button-icon: url("/icons/accordion-button-icon.svg") !default;
$accordion-button-icon-dark: url("icons/accordion-button-icon-dark.svg") !default; $accordion-button-icon-dark: url("/icons/accordion-button-icon-dark.svg") !default;
$accordion-button-active-icon: url("icons/accordion-button-active-icon.svg") !default; $accordion-button-active-icon: url("/icons/accordion-button-active-icon.svg") !default;
$accordion-button-active-icon-dark: url("icons/accordion-button-active-icon-dark.svg") !default; $accordion-button-active-icon-dark: url("/icons/accordion-button-active-icon-dark.svg") !default;
$carousel-control-prev-icon-bg: url("icons/carousel-control-prev-icon-bg.svg") !default; $carousel-control-prev-icon-bg: url("/icons/carousel-control-prev-icon-bg.svg") !default;
$carousel-control-next-icon-bg: url("icons/carousel-control-next-icon-bg.svg") !default; $carousel-control-next-icon-bg: url("/icons/carousel-control-next-icon-bg.svg") !default;
$btn-close-bg: url("icons/btn-close-bg.svg") !default; $btn-close-bg: url("/icons/btn-close-bg.svg") !default;
$btn-toggle: url("icons/btn-toggle.svg") !default; $btn-toggle: url("/icons/btn-toggle.svg") !default;
$btn-toggle-dark: url("icons/btn-toggle-dark.svg") !default; $btn-toggle-dark: url("/icons/btn-toggle-dark.svg") !default;
// scss-docs-end icons // scss-docs-end icons

View File

@@ -18,3 +18,132 @@ a:active {
.tickmark li::marker { .tickmark li::marker {
content: ""; content: "";
} }
.anchor
{
color: transparent;
}
.heading:hover .anchor
{
transition: 0.25s ease-in-out;
color: $primary;
}
$utilities: map-merge(
$utilities,
(
"padding-start-wide": (
property: padding-left,
responsive: true,
class: psw,
values: (
0: 0,
1: 1.5 * $spacer,
2: 3 * $spacer,
3: 6 * $spacer,
4: 9 * $spacer,
5: 12 * $spacer,
)
),
"padding-top-wide": (
property: padding-top,
responsive: true,
class: ptw,
values: (
0: 0,
1: 1.5 * $spacer,
2: 3 * $spacer,
3: 6 * $spacer,
4: 9 * $spacer,
5: 12 * $spacer,
)
),
"font-size": map-merge(
map-get($utilities, "font-size"),
( responsive: true ),
),
)
);
@media screen and (orientation: portrait) {
.min-vh-custom {
min-height: 25vh !important
}
}
@media screen and (orientation: landscape) {
.min-vh-custom {
min-height: 50vh !important
}
}
:root {
--nav-height: 90px;
}
@include media-breakpoint-up(sm) {
.ratio-section {
min-height: calc(min(100vh, 576px) - var(--nav-height));
}
}
@include media-breakpoint-up(md) {
.ratio-section {
min-height: calc(min(100vh, 768px) - var(--nav-height));
}
}
@include media-breakpoint-up(lg) {
.ratio-section {
min-height: calc(min(100vh, 992px) - var(--nav-height));
}
}
@include media-breakpoint-up(xl) {
.ratio-section {
min-height: calc(min(100vh, 1200px) - var(--nav-height));
}
}
@include media-breakpoint-up(xxl) {
.ratio-section {
min-height: calc(min(100vh, 1400px) - var(--nav-height));
}
}
$utilities: map-merge(
$utilities,
(
"padding-start-wide": (
property: padding-left,
responsive: true,
class: psw,
values: (
0: 0,
1: 1.5 * $spacer,
2: 3 * $spacer,
3: 6 * $spacer,
4: 9 * $spacer,
5: 12 * $spacer,
)
),
"padding-top-wide": (
property: padding-top,
responsive: true,
class: ptw,
values: (
0: 0,
1: 1.5 * $spacer,
2: 3 * $spacer,
3: 6 * $spacer,
4: 9 * $spacer,
5: 12 * $spacer,
)
),
"font-size": map-merge(
map-get($utilities, "font-size"),
( responsive: true ),
)
)
);

View File

@@ -1,5 +1,6 @@
// Bootstrap variables overrides for theme // Bootstrap variables overrides for theme
$enable-negative-margins: true; $enable-negative-margins: true;
$enable-important-utilities: true !default;
// Font awesome variables overrides for theme // Font awesome variables overrides for theme
$fa-font-path: "../fonts"; $fa-font-path: "../fonts";
@@ -8,7 +9,7 @@ $fa-font-path: "../fonts";
$navbar-toggler-focus-width: 0 !default; $navbar-toggler-focus-width: 0 !default;
// scss-docs-start font // scss-docs-start font
$font-family-sans-serif: $themeFont, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; $font-family-sans-serif: $theme-font, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
$headings-font-weight: 600 !default; $headings-font-weight: 600 !default;
$font-weight-lighter: lighter !default; $font-weight-lighter: lighter !default;
$font-weight-light: 200 !default; $font-weight-light: 200 !default;
@@ -17,7 +18,7 @@ $font-weight-bold: 600 !default;
$font-weight-bolder: bolder !default; $font-weight-bolder: bolder !default;
strong { strong {
font-weight: 600 !important; font-weight: 600 if($enable-important-utilities, !important, null);
} }
// scss-docs-end font // scss-docs-end font

View File

@@ -4,5 +4,5 @@
.btn-primary:active, .btn-primary:active,
.btn-primary.active, .btn-primary.active,
.open > .dropdown-toggle.btn-primary { .open > .dropdown-toggle.btn-primary {
color: #fff !important; color: #fff if($enable-important-utilities, !important, null);
} }

View File

@@ -1,5 +1,3 @@
// stylelint-disable annotation-no-unknown
// add zoom animation with opacity change on card img hover // add zoom animation with opacity change on card img hover
// source: https://stackoverflow.com/a/43816376 // source: https://stackoverflow.com/a/43816376
@@ -8,16 +6,8 @@
position: relative; position: relative;
} }
.card-img-wrap::after { .card-zoom {
content: ""; cursor: pointer;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.3);
opacity: 0;
transition: opacity 0.25s;
} }
.card-img-wrap img { .card-img-wrap img {
@@ -25,11 +15,21 @@
width: 100%; width: 100%;
} }
.card-img-wrap:hover img { .card-zoom::after .card-img-wrap img {
transform: scale(1.1); content: "";
position: absolute;
inset: 0;
background: rgba(255, 255, 255, 0.3);
opacity: 0;
transition: opacity 0.25s;
} }
.card-img-wrap:hover::after { .card-zoom:hover .card-img-wrap img {
transform: scale(1.1);
opacity: 0.5;
}
.card-zoom:hover::after .card-img-wrap img {
opacity: 1; opacity: 1;
} }
@@ -43,29 +43,31 @@
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06);
} }
// stylelint-disable annotation-no-unknown
.card-body-link { .card-body-link {
color: $body-color if($enable-important-utilities, !important, null); color: $body-color if($enable-important-utilities, !important, null);
@if $link-shade-percentage != 0 {
&:hover,
&:focus {
color: tint-color($body-color, $link-shade-percentage) if($enable-important-utilities, !important, null);
}
}
} }
@if $enable-dark-mode { @if $enable-dark-mode {
@include color-mode(dark) { @include color-mode(dark) {
.card-body-link { .card-body-link {
color: $gray-500 if($enable-important-utilities, !important, null); color: $gray-500 if($enable-important-utilities, !important, null);
@if $link-shade-percentage != 0 {
&:hover,
&:focus {
color: shade-color($gray-500, $link-shade-percentage) if($enable-important-utilities, !important, null);
}
}
} }
} }
} }
.card-zoom card-body-link,
.card-body-link {
&:hover,
&:focus {
color: shade-color($primary, $link-shade-percentage) if($enable-important-utilities, !important, null);
}
}
// stylelint-enable annotation-no-unknown // stylelint-enable annotation-no-unknown
// make tag-link clickable on top of the stretched-link.
.card .tag-link {
z-index: 2;
position: relative;
}

View File

@@ -4,24 +4,32 @@
.navbar { .navbar {
transition: 0.5s ease-in-out; transition: 0.5s ease-in-out;
background-color: none; background-color: transparent;
} }
.nav-active, .navbar-expanded { .nav-active, .navbar-expanded {
background-color: var(--bs-body-bg); background-color: var(--bs-body-bg);
} }
.navbar-expanded {
box-shadow: $box-shadow-sm;
}
/* Remove border from toggler */ /* Remove border from toggler */
.navbar-toggler { .navbar-toggler {
border: 0 !important; border: 0 if($enable-important-utilities, !important, null);
} }
.navbar-toggler:focus, .navbar-toggler:focus,
.navbar-toggler:active, .navbar-toggler:active,
.navbar-toggler-icon:focus { .navbar-toggler-icon:focus {
outline: none !important; outline: none if($enable-important-utilities, !important, null);
box-shadow: none !important; box-shadow: none if($enable-important-utilities, !important, null);
border: 0 !important; border: 0 if($enable-important-utilities, !important, null);
}
.fw-30 {
width: 30px !important;
} }
/* Lines of the Toggler */ /* Lines of the Toggler */

View File

@@ -0,0 +1,3 @@
.persona {
min-height: 320px !important
}

View File

@@ -3,8 +3,23 @@
top: $navbar-offset; top: $navbar-offset;
} }
.sidebar-overflow {
top: $navbar-offset;
max-height: 90vh;
overflow-y: auto;
}
.sidebar-item { .sidebar-item {
color: black; color: rgba(0, 0, 0, 0.65);
margin-left: 0 !important;
padding-left: 0.85rem !important;
display: inline-block;
&.active,
&:hover,
&:focus {
color: black;
}
} }
.btn-toggle { .btn-toggle {
@@ -55,6 +70,14 @@
@include color-mode(dark) { @include color-mode(dark) {
.sidebar-item { .sidebar-item {
color: var(--bs-tertiary-color); color: var(--bs-tertiary-color);
margin-left: 0 !important;
padding-left: 0.85rem !important;
&.active,
&:hover,
&:focus {
color: var(--bs-secondary-color);
}
} }
.btn-toggle { .btn-toggle {

View File

@@ -1,20 +1,21 @@
// //
// Table of contents sidebar // Table of contents sidebar & drop-down panel
// //
// scss-docs-start toc // scss-docs-start toc
.toc { .toc-sidebar {
grid-area: toc; grid-area: toc;
right: 0; right: 0;
z-index: 2; z-index: 2;
height: calc(100vh - 7rem); height: calc(100vh - 5rem);
overflow-y: auto; overflow-y: auto;
top: $navbar-offset; top: 5rem;
} }
// scss-docs-end toc // scss-docs-end toc
.toc nav { .toc nav {
font-size: 0.875rem; font-size: 0.875rem;
margin-bottom: -0.875rem;
} }
.toc nav ul { .toc nav ul {
@@ -33,6 +34,10 @@
.toc nav a { .toc nav a {
color: inherit; color: inherit;
&:hover {
color: var(--bs-primary);
}
} }
.toc nav a:not(:hover) { .toc nav a:not(:hover) {
@@ -42,3 +47,21 @@
.toc nav a code { .toc nav a code {
font: inherit; font: inherit;
} }
.toc-button {
--bs-btn-hover-color: var(--bs-primary);
--bs-btn-hover-bg: var(--bs-body-bg);
--bs-btn-hover-border-color: var(--bs-primary);
--bs-btn-active-color: var(--bs-primary);
--bs-btn-active-bg: var(--bs-body-bg);
--bs-btn-active-border-color: var(--bs-primary);
&.active,
&:hover,
&:focus {
color: var(--bs-primary);
border-color: var(--bs-primary);
box-shadow: 0 0 0 4px var(--bs-primary-border-subtle);
outline: none;
}
}

View File

@@ -1,19 +1,37 @@
// stylelint-disable function-name-case
// scss-docs-start colored-links // scss-docs-start colored-links
@each $color, $value in $theme-colors { $custom-colors: (
$contrast-color: color-contrast($value); "primary": "light",
$color-rgb: to-rgb($value); "secondary": "light",
"success": "light",
"danger": "light",
"dark": "light",
"black": "light",
"info": "dark",
"warning": "dark",
"light": "dark",
"white": "dark",
"body": "adaptive",
"body-tertiary": "adaptive"
);
@each $color, $value in $custom-colors {
$main-color: var(--bs-body-color);
$emphasize-color: var(--bs-secondary-color);
@if $value == "light" {
$main-color: $white;
$emphasize-color: shade-color($main-color, $link-shade-percentage);
} @else if $value == "dark" {
$main-color: $black;
$emphasize-color: tint-color($main-color, $link-shade-percentage);
}
.link-bg-#{$color} { .link-bg-#{$color} {
color: $contrast-color !important; // stylelint-disable-line declaration-no-important color: $main-color if($enable-important-utilities, !important, null);
background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null); // stylelint-disable-line annotation-no-unknown
@if $link-shade-percentage != 0 { &:hover,
&:hover, &:focus {
&:focus { color: $emphasize-color if($enable-important-utilities, !important, null);
color: if($contrast-color == $color-contrast-light, shade-color($contrast-color, $link-shade-percentage), tint-color($contrast-color, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important
}
} }
} }
} }

View File

@@ -1,176 +0,0 @@
// Copied from https://github.com/twbs/bootstrap/commit/15744ee1d04bcca03155c3bb37ee7e65a7b011c6
//
// Re-assigned maps
//
// Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.
// scss-docs-start theme-colors-rgb
$theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value") !default;
// scss-docs-end theme-colors-rgb
// scss-docs-start theme-text-map
$theme-colors-text: (
"primary": $primary-text-emphasis,
"secondary": $secondary-text-emphasis,
"success": $success-text-emphasis,
"info": $info-text-emphasis,
"warning": $warning-text-emphasis,
"danger": $danger-text-emphasis,
"light": $light-text-emphasis,
"dark": $dark-text-emphasis,
) !default;
// scss-docs-end theme-text-map
// scss-docs-start theme-bg-subtle-map
$theme-colors-bg-subtle: (
"primary": $primary-bg-subtle,
"secondary": $secondary-bg-subtle,
"success": $success-bg-subtle,
"info": $info-bg-subtle,
"warning": $warning-bg-subtle,
"danger": $danger-bg-subtle,
"light": $light-bg-subtle,
"dark": $dark-bg-subtle,
) !default;
// scss-docs-end theme-bg-subtle-map
// scss-docs-start theme-border-subtle-map
$theme-colors-border-subtle: (
"primary": $primary-border-subtle,
"secondary": $secondary-border-subtle,
"success": $success-border-subtle,
"info": $info-border-subtle,
"warning": $warning-border-subtle,
"danger": $danger-border-subtle,
"light": $light-border-subtle,
"dark": $dark-border-subtle,
) !default;
// scss-docs-end theme-border-subtle-map
$theme-colors-text-dark: null !default;
$theme-colors-bg-subtle-dark: null !default;
$theme-colors-border-subtle-dark: null !default;
@if $enable-dark-mode {
// scss-docs-start theme-text-dark-map
$theme-colors-text-dark: (
"primary": $primary-text-emphasis-dark,
"secondary": $secondary-text-emphasis-dark,
"success": $success-text-emphasis-dark,
"info": $info-text-emphasis-dark,
"warning": $warning-text-emphasis-dark,
"danger": $danger-text-emphasis-dark,
"light": $light-text-emphasis-dark,
"dark": $dark-text-emphasis-dark,
) !default;
// scss-docs-end theme-text-dark-map
// scss-docs-start theme-bg-subtle-dark-map
$theme-colors-bg-subtle-dark: (
"primary": $primary-bg-subtle-dark,
"secondary": $secondary-bg-subtle-dark,
"success": $success-bg-subtle-dark,
"info": $info-bg-subtle-dark,
"warning": $warning-bg-subtle-dark,
"danger": $danger-bg-subtle-dark,
"light": $light-bg-subtle-dark,
"dark": $dark-bg-subtle-dark,
) !default;
// scss-docs-end theme-bg-subtle-dark-map
// scss-docs-start theme-border-subtle-dark-map
$theme-colors-border-subtle-dark: (
"primary": $primary-border-subtle-dark,
"secondary": $secondary-border-subtle-dark,
"success": $success-border-subtle-dark,
"info": $info-border-subtle-dark,
"warning": $warning-border-subtle-dark,
"danger": $danger-border-subtle-dark,
"light": $light-border-subtle-dark,
"dark": $dark-border-subtle-dark,
) !default;
// scss-docs-end theme-border-subtle-dark-map
}
// Utilities maps
//
// Extends the default `$theme-colors` maps to help create our utilities.
// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.
// scss-docs-start utilities-colors
$utilities-colors: $theme-colors-rgb !default;
// scss-docs-end utilities-colors
// scss-docs-start utilities-text-colors
$utilities-text: map-merge(
$utilities-colors,
(
"black": to-rgb($black),
"white": to-rgb($white),
"body": to-rgb($body-color)
)
) !default;
$utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$key", "text") !default;
$utilities-text-emphasis-colors: (
"primary-emphasis": var(--#{$prefix}primary-text-emphasis),
"secondary-emphasis": var(--#{$prefix}secondary-text-emphasis),
"success-emphasis": var(--#{$prefix}success-text-emphasis),
"info-emphasis": var(--#{$prefix}info-text-emphasis),
"warning-emphasis": var(--#{$prefix}warning-text-emphasis),
"danger-emphasis": var(--#{$prefix}danger-text-emphasis),
"light-emphasis": var(--#{$prefix}light-text-emphasis),
"dark-emphasis": var(--#{$prefix}dark-text-emphasis)
) !default;
// scss-docs-end utilities-text-colors
// scss-docs-start utilities-bg-colors
$utilities-bg: map-merge(
$utilities-colors,
(
"black": to-rgb($black),
"white": to-rgb($white),
"body": to-rgb($body-bg)
)
) !default;
$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$key", "bg") !default;
$utilities-bg-subtle: (
"primary-subtle": var(--#{$prefix}primary-bg-subtle),
"secondary-subtle": var(--#{$prefix}secondary-bg-subtle),
"success-subtle": var(--#{$prefix}success-bg-subtle),
"info-subtle": var(--#{$prefix}info-bg-subtle),
"warning-subtle": var(--#{$prefix}warning-bg-subtle),
"danger-subtle": var(--#{$prefix}danger-bg-subtle),
"light-subtle": var(--#{$prefix}light-bg-subtle),
"dark-subtle": var(--#{$prefix}dark-bg-subtle)
) !default;
// scss-docs-end utilities-bg-colors
// scss-docs-start utilities-border-colors
$utilities-border: map-merge(
$utilities-colors,
(
"black": to-rgb($black),
"white": to-rgb($white)
)
) !default;
$utilities-border-colors: map-loop($utilities-border, rgba-css-var, "$key", "border") !default;
$utilities-border-subtle: (
"primary-subtle": var(--#{$prefix}primary-border-subtle),
"secondary-subtle": var(--#{$prefix}secondary-border-subtle),
"success-subtle": var(--#{$prefix}success-border-subtle),
"info-subtle": var(--#{$prefix}info-border-subtle),
"warning-subtle": var(--#{$prefix}warning-border-subtle),
"danger-subtle": var(--#{$prefix}danger-border-subtle),
"light-subtle": var(--#{$prefix}light-border-subtle),
"dark-subtle": var(--#{$prefix}dark-border-subtle)
) !default;
// scss-docs-end utilities-border-colors
$utilities-links-underline: map-loop($utilities-colors, rgba-css-var, "$key", "link-underline") !default;
$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;
$gutters: $spacers !default;

View File

@@ -1,180 +0,0 @@
// Copied from https://github.com/twbs/bootstrap/commit/15744ee1d04bcca03155c3bb37ee7e65a7b011c6
:root,
[data-bs-theme="light"] {
// Note: Custom variable values only support SassScript inside `#{}`.
// Colors
//
// Generate palettes for full colors, grays, and theme colors.
@each $color, $value in $colors {
--#{$prefix}#{$color}: #{$value};
}
@each $color, $value in $grays {
--#{$prefix}gray-#{$color}: #{$value};
}
@each $color, $value in $theme-colors {
--#{$prefix}#{$color}: #{$value};
}
@each $color, $value in $theme-colors-rgb {
--#{$prefix}#{$color}-rgb: #{$value};
}
@each $color, $value in $theme-colors-text {
--#{$prefix}#{$color}-text-emphasis: #{$value};
}
@each $color, $value in $theme-colors-bg-subtle {
--#{$prefix}#{$color}-bg-subtle: #{$value};
}
@each $color, $value in $theme-colors-border-subtle {
--#{$prefix}#{$color}-border-subtle: #{$value};
}
--#{$prefix}white-rgb: #{to-rgb($white)};
--#{$prefix}black-rgb: #{to-rgb($black)};
// Fonts
// Note: Use `inspect` for lists so that quoted items keep the quotes.
// See https://github.com/sass/sass/issues/2383#issuecomment-336349172
--#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};
--#{$prefix}font-monospace: #{inspect($font-family-monospace)};
--#{$prefix}gradient: #{$gradient};
// Root and body
// scss-docs-start root-body-variables
@if $font-size-root != null {
--#{$prefix}root-font-size: #{$font-size-root};
}
--#{$prefix}body-font-family: #{inspect($font-family-base)};
@include rfs($font-size-base, --#{$prefix}body-font-size);
--#{$prefix}body-font-weight: #{$font-weight-base};
--#{$prefix}body-line-height: #{$line-height-base};
@if $body-text-align != null {
--#{$prefix}body-text-align: #{$body-text-align};
}
--#{$prefix}body-color: #{$body-color};
--#{$prefix}body-color-rgb: #{to-rgb($body-color)};
--#{$prefix}body-bg: #{$body-bg};
--#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};
--#{$prefix}emphasis-color: #{$body-emphasis-color};
--#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};
--#{$prefix}secondary-color: #{$body-secondary-color};
--#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};
--#{$prefix}secondary-bg: #{$body-secondary-bg};
--#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};
--#{$prefix}tertiary-color: #{$body-tertiary-color};
--#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};
--#{$prefix}tertiary-bg: #{$body-tertiary-bg};
--#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};
// scss-docs-end root-body-variables
@if $headings-color != null {
--#{$prefix}heading-color: #{$headings-color};
}
--#{$prefix}link-color: #{$link-color};
--#{$prefix}link-color-rgb: #{to-rgb($link-color)};
--#{$prefix}link-decoration: #{$link-decoration};
--#{$prefix}link-hover-color: #{$link-hover-color};
--#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};
@if $link-hover-decoration != null {
--#{$prefix}link-hover-decoration: #{$link-hover-decoration};
}
--#{$prefix}code-color: #{$code-color};
--#{$prefix}highlight-bg: #{$mark-bg};
// scss-docs-start root-border-var
--#{$prefix}border-width: #{$border-width};
--#{$prefix}border-style: #{$border-style};
--#{$prefix}border-color: #{$border-color};
--#{$prefix}border-color-translucent: #{$border-color-translucent};
--#{$prefix}border-radius: #{$border-radius};
--#{$prefix}border-radius-sm: #{$border-radius-sm};
--#{$prefix}border-radius-lg: #{$border-radius-lg};
--#{$prefix}border-radius-xl: #{$border-radius-xl};
--#{$prefix}border-radius-xxl: #{$border-radius-xxl};
--#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency
--#{$prefix}border-radius-pill: #{$border-radius-pill};
// scss-docs-end root-border-var
--#{$prefix}box-shadow: #{$box-shadow};
--#{$prefix}box-shadow-sm: #{$box-shadow-sm};
--#{$prefix}box-shadow-lg: #{$box-shadow-lg};
--#{$prefix}box-shadow-inset: #{$box-shadow-inset};
// Focus styles
// scss-docs-start root-focus-variables
--#{$prefix}focus-ring-width: #{$focus-ring-width};
--#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};
--#{$prefix}focus-ring-color: #{$focus-ring-color};
// By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values
--#{$prefix}focus-ring-box-shadow: var(--#{$prefix}focus-ring-x, 0) var(--#{$prefix}focus-ring-y, 0) var(--#{$prefix}focus-ring-blur, 0) var(--#{$prefix}focus-ring-width) var(--#{$prefix}focus-ring-color);
// scss-docs-end root-focus-variables
}
@if $enable-dark-mode {
@include color-mode(dark, true) {
color-scheme: dark;
// scss-docs-start root-dark-mode-vars
--#{$prefix}body-color: #{$body-color-dark};
--#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};
--#{$prefix}body-bg: #{$body-bg-dark};
--#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};
--#{$prefix}emphasis-color: #{$body-emphasis-color-dark};
--#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};
--#{$prefix}secondary-color: #{$body-secondary-color-dark};
--#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};
--#{$prefix}secondary-bg: #{$body-secondary-bg-dark};
--#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};
--#{$prefix}tertiary-color: #{$body-tertiary-color-dark};
--#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};
--#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};
--#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};
@each $color, $value in $theme-colors-text-dark {
--#{$prefix}#{$color}-text-emphasis: #{$value};
}
@each $color, $value in $theme-colors-bg-subtle-dark {
--#{$prefix}#{$color}-bg-subtle: #{$value};
}
@each $color, $value in $theme-colors-border-subtle-dark {
--#{$prefix}#{$color}-border-subtle: #{$value};
}
@if $headings-color-dark != null {
--#{$prefix}heading-color: #{$headings-color-dark};
}
--#{$prefix}link-color: #{$link-color-dark};
--#{$prefix}link-hover-color: #{$link-hover-color-dark};
--#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};
--#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};
--#{$prefix}code-color: #{$code-color-dark};
--#{$prefix}border-color: #{$border-color-dark};
--#{$prefix}border-color-translucent: #{$border-color-translucent-dark};
// scss-docs-end root-dark-mode-vars
}
}

View File

@@ -1,77 +0,0 @@
// Copied from https://github.com/twbs/bootstrap/pull/37953
// Dark color mode variables
//
// Custom variables for the `[data-bs-theme="dark"]` theme. Use this as a starting point for your own custom color modes by creating a new theme-specific file like `_variables-dark.scss` and adding the variables you need.
//
// Global colors
//
// scss-docs-start sass-dark-mode-vars
// scss-docs-start theme-text-dark-variables
$primary-text-emphasis-dark: tint-color($primary, 40%) !default;
$secondary-text-emphasis-dark: tint-color($secondary, 40%) !default;
$success-text-emphasis-dark: tint-color($success, 40%) !default;
$info-text-emphasis-dark: tint-color($info, 40%) !default;
$warning-text-emphasis-dark: tint-color($warning, 40%) !default;
$danger-text-emphasis-dark: tint-color($danger, 40%) !default;
$light-text-emphasis-dark: $gray-100 !default;
$dark-text-emphasis-dark: $gray-300 !default;
// scss-docs-end theme-text-dark-variables
// scss-docs-start theme-bg-subtle-dark-variables
$primary-bg-subtle-dark: shade-color($primary, 80%) !default;
$secondary-bg-subtle-dark: shade-color($secondary, 80%) !default;
$success-bg-subtle-dark: shade-color($success, 80%) !default;
$info-bg-subtle-dark: shade-color($info, 80%) !default;
$warning-bg-subtle-dark: shade-color($warning, 80%) !default;
$danger-bg-subtle-dark: shade-color($danger, 80%) !default;
$light-bg-subtle-dark: $gray-800 !default;
$dark-bg-subtle-dark: mix($gray-800, $black) !default;
// scss-docs-end theme-bg-subtle-dark-variables
// scss-docs-start theme-border-subtle-dark-variables
$primary-border-subtle-dark: shade-color($primary, 40%) !default;
$secondary-border-subtle-dark: shade-color($secondary, 40%) !default;
$success-border-subtle-dark: shade-color($success, 40%) !default;
$info-border-subtle-dark: shade-color($info, 40%) !default;
$warning-border-subtle-dark: shade-color($warning, 40%) !default;
$danger-border-subtle-dark: shade-color($danger, 40%) !default;
$light-border-subtle-dark: $gray-700 !default;
$dark-border-subtle-dark: $gray-800 !default;
// scss-docs-end theme-border-subtle-dark-variables
$body-color-dark: $gray-500 !default;
$body-bg-dark: $gray-900 !default;
$body-secondary-color-dark: rgba($body-color-dark, .75) !default;
$body-secondary-bg-dark: $gray-800 !default;
$body-tertiary-color-dark: rgba($body-color-dark, .5) !default;
$body-tertiary-bg-dark: mix($gray-800, $gray-900, 50%) !default;
$body-emphasis-color-dark: $white !default;
$border-color-dark: $gray-700 !default;
$border-color-translucent-dark: rgba($white, .15) !default;
$headings-color-dark: null !default;
$link-color-dark: tint-color($primary, 40%) !default;
$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage) !default;
$code-color-dark: tint-color($code-color, 40%) !default;
//
// Forms
//
$form-select-indicator-color-dark: $body-color-dark !default;
$form-select-indicator-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color-dark}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>") !default;
$form-switch-color-dark: rgba($white, .25) !default;
$form-switch-bg-image-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color-dark}'/></svg>") !default;
//
// Accordion
//
$accordion-button-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$primary-text-emphasis-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
$accordion-button-active-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$primary-text-emphasis-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
// scss-docs-end sass-dark-mode-vars

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,62 @@
/*!
* Copyright (c) 2016-2020 The Inter Project Authors.
* "Inter" is trademark of Rasmus Andersson.
* https://github.com/rsms/inter
* This Font Software is licensed under the SIL Open Font License, Version 1.1.
* This license is copied below, and is also available with a FAQ at:
* http://scripts.sil.org/OFL
*/
/* inter-200 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Inter';
font-style: normal;
font-weight: 200;
src: url('../fonts/inter-v12-latin-200.eot'); /* IE9 Compat Modes */
src: url('../fonts/inter-v12-latin-200.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('../fonts/inter-v12-latin-200.woff2') format('woff2'), /* Super Modern Browsers */
url('../fonts/inter-v12-latin-200.woff') format('woff'), /* Modern Browsers */
url('../fonts/inter-v12-latin-200.ttf') format('truetype'), /* Safari, Android, iOS */
url('../fonts/inter-v12-latin-200.svg#Inter') format('svg'); /* Legacy iOS */
}
/* inter-300 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Inter';
font-style: normal;
font-weight: 300;
src: url('../fonts/inter-v12-latin-300.eot'); /* IE9 Compat Modes */
src: url('../fonts/inter-v12-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('../fonts/inter-v12-latin-300.woff2') format('woff2'), /* Super Modern Browsers */
url('../fonts/inter-v12-latin-300.woff') format('woff'), /* Modern Browsers */
url('../fonts/inter-v12-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */
url('../fonts/inter-v12-latin-300.svg#Inter') format('svg'); /* Legacy iOS */
}
/* inter-regular - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Inter';
font-style: normal;
font-weight: 400;
src: url('../fonts/inter-v12-latin-regular.eot'); /* IE9 Compat Modes */
src: url('../fonts/inter-v12-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('../fonts/inter-v12-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
url('../fonts/inter-v12-latin-regular.woff') format('woff'), /* Modern Browsers */
url('../fonts/inter-v12-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
url('../fonts/inter-v12-latin-regular.svg#Inter') format('svg'); /* Legacy iOS */
}
/* inter-600 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Inter';
font-style: normal;
font-weight: 600;
src: url('../fonts/inter-v12-latin-600.eot'); /* IE9 Compat Modes */
src: url('../fonts/inter-v12-latin-600.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('../fonts/inter-v12-latin-600.woff2') format('woff2'), /* Super Modern Browsers */
url('../fonts/inter-v12-latin-600.woff') format('woff'), /* Modern Browsers */
url('../fonts/inter-v12-latin-600.ttf') format('truetype'), /* Safari, Android, iOS */
url('../fonts/inter-v12-latin-600.svg#Inter') format('svg'); /* Legacy iOS */
}

View File

@@ -1,25 +0,0 @@
---
label: Blog post
hide_body: false
fields:
- type: text
name: author
label: author
- type: text
name: title
label: title
- type: text
name: description
label: description
- type: list
name: tags
label: tags
- type: datetime
name: date
label: date
- type: file
name: thumbnail
label: thumbnail
- type: textarea
name: credits
label: credits

View File

@@ -1,25 +0,0 @@
---
label: Project
hide_body: false
fields:
- type: text
name: author
label: author
- type: text
name: title
label: title
- type: datetime
name: date
label: date
- type: text
name: description
label: description
- type: list
name: tags
label: tags
- type: file
name: thumbnail
label: thumbnail
- type: textarea
name: credits
label: credits

View File

@@ -1,40 +0,0 @@
---
new_page_extension: md
auto_deploy: false
admin_path:
webhook_url:
sections:
- type: directory
path: content/en/blog
label: Blog
create: all
match: "**/*"
templates:
- blog-post
- type: directory
path: content/en/projects
label: Projects
create: all
match: "**/*"
templates:
- project
- type: document
path: content/en/about.md
label: About
upload_dir: assets/img
public_path: "/img"
front_matter_path: ''
use_front_matter_path: false
file_template: ":filename:"
build:
preview_env:
- HUGO_ENV=staging
- HUGO_VERSION=0.92.2
- HUGO_ENABLEGITINFO=true
preview_output_directory: public
install_dependencies_command: npm install
preview_docker_image: forestryio/hugo:node16
mount_path: "/srv"
working_dir: "/srv"
instant_preview_command: npm run start
version: 0.81.0

View File

@@ -6,6 +6,7 @@ enableGitInfo = true
# toml-docs-end main # toml-docs-end main
# additional settings # additional settings
googleAnalytics = "G-T85PPZ36GN"
baseURL = "https://demo.gethinode.com/" baseURL = "https://demo.gethinode.com/"
canonifyURLs = false canonifyURLs = false
enableEmoji = true enableEmoji = true
@@ -16,9 +17,9 @@ enableInlineShortcodes = true
# See https://github.com/gohugoio/hugo/issues/7228#issuecomment-714490456 # See https://github.com/gohugoio/hugo/issues/7228#issuecomment-714490456
ignoreErrors = ["error-remote-getjson"] ignoreErrors = ["error-remote-getjson"]
# toml-docs-start build # toml-docs-start timeout
timeout = "60s" timeout = "180s"
# toml-docs-end build # toml-docs-end timeout
# toml-docs-start language # toml-docs-start language
languageCode = "en-us" languageCode = "en-us"
@@ -26,6 +27,11 @@ defaultContentLanguage = "en"
defaultContentLanguageInSubdir = true defaultContentLanguageInSubdir = true
# toml-docs-end language # toml-docs-end language
# toml-docs-start build
[build]
writeStats = true
# toml-docs-end build
[taxonomies] [taxonomies]
tag = 'tags' tag = 'tags'

View File

@@ -8,10 +8,10 @@
[en.params.head] [en.params.head]
tagline = "A Hugo Theme" tagline = "A Hugo Theme"
[en.params.feature] [en.params.feature]
link = "/en/about" link = "about"
caption = "About" caption = "About"
[en.params.footer] [en.params.footer]
license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank'>CC BY-NC-SA 4.0</a>)." license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
socialTitle = "Follow me" socialTitle = "Follow me"
socialCaption = "I work on everything coding and tweet developer memes" socialCaption = "I work on everything coding and tweet developer memes"
# toml-docs-end lang-param # toml-docs-end lang-param
@@ -23,9 +23,9 @@
[nl.params.head] [nl.params.head]
tagline = "Een Hugo Thema" tagline = "Een Hugo Thema"
[nl.params.feature] [nl.params.feature]
link = "/nl/over-mij" link = "over-mij"
caption = "Over mij" caption = "Over mij"
[nl.params.footer] [nl.params.footer]
license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank'>CC BY-NC-SA 4.0</a>)." license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
socialTitle = "Volg mij" socialTitle = "Volg mij"
socialCaption = "Ik doe aan programmeren en tweet memes" socialCaption = "Ik doe aan programmeren en tweet memes"

View File

@@ -15,13 +15,13 @@
[[main]] [[main]]
name = "Sample project" name = "Sample project"
url = "/en/projects/sample-project/" url = "/projects/sample-project/"
parent = "Projects" parent = "Projects"
weight = 1 weight = 1
[[main]] [[main]]
name = "Another project" name = "Another project"
url = "/en/projects/another-project/" url = "/projects/another-project/"
parent = "Projects" parent = "Projects"
weight = 2 weight = 2
@@ -61,13 +61,13 @@
[[sample]] [[sample]]
name = "Sample project" name = "Sample project"
url = "/en/projects/sample-project/" url = "/projects/sample-project/"
parent = "Projects" parent = "Projects"
weight = 1 weight = 1
[[sample]] [[sample]]
name = "Another project" name = "Another project"
url = "/en/projects/another-project/" url = "/projects/another-project/"
parent = "Projects" parent = "Projects"
weight = 2 weight = 2
# toml-docs-end sample-navigation # toml-docs-end sample-navigation

View File

@@ -15,13 +15,13 @@
[[main]] [[main]]
name = "Voorbeeldproject" name = "Voorbeeldproject"
url = "/nl/projecten/voorbeeldproject/" url = "/projecten/voorbeeldproject/"
parent = "Projecten" parent = "Projecten"
weight = 1 weight = 1
[[main]] [[main]]
name = "Ander project" name = "Ander project"
url = "/nl/projecten/ander-project/" url = "/projecten/ander-project/"
parent = "Projecten" parent = "Projecten"
weight = 2 weight = 2
@@ -61,13 +61,13 @@
[[sample]] [[sample]]
name = "Voorbeeldproject" name = "Voorbeeldproject"
url = "/nl/projecten/voorbeeldproject/" url = "/projecten/voorbeeldproject/"
parent = "Projecten" parent = "Projecten"
weight = 1 weight = 1
[[sample]] [[sample]]
name = "Ander project" name = "Ander project"
url = "/nl/projecten/ander-project/" url = "/projecten/ander-project/"
parent = "Projecten" parent = "Projecten"
weight = 2 weight = 2
# toml-docs-end sample-navigation # toml-docs-end sample-navigation

View File

@@ -3,6 +3,7 @@
separator = "-" separator = "-"
description = "Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5." description = "Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5."
enableDarkMode = true enableDarkMode = true
modes = ["light", "dark"]
# toml-docs-end main # toml-docs-end main
# toml-docs-start docs # toml-docs-start docs
@@ -16,48 +17,55 @@
sections = ["blog", "projects"] sections = ["blog", "projects"]
featurePhoto = "/img/sunrise.jpg" # source: https://unsplash.com/photos/ZX6BPboJrYk featurePhoto = "/img/sunrise.jpg" # source: https://unsplash.com/photos/ZX6BPboJrYk
fullCover = false fullCover = false
centerHeadline = false
style = "" style = ""
# toml-docs-end home # toml-docs-end home
# toml-docs-start navigation # toml-docs-start navigation
[navigation] [navigation]
anchor = true
logo = "/img/logo_icon.svg" logo = "/img/logo_icon.svg"
color = "body" color = "body"
fixed = true fixed = true
offset = "4em" offset = "3.8em"
search = true search = true
breadcrumb = false breadcrumb = false
toc = true toc = true
sidebar = true sidebar = true
# toml-docs-end navigation # toml-docs-end navigation
# toml-docs-start list # toml-docs-start sections
[list] [sections]
[blog] [sections.blog]
title = "Blog" title = "Blog"
sort = "date" sort = "date"
reverse = false reverse = true
nested = true
cols = 3 cols = 3
color = "" color = ""
padding = "0" padding = "0"
header = "full" header = "full"
footer = "none" footer = "none"
orientation = "stacked" orientation = "stacked"
style = "border-0" style = "border-0 card-zoom"
homepage = 3 homepage = 3
[projects] separator = true
[sections.projects]
title = "Projects" title = "Projects"
sort = "title" sort = "title"
reverse = false reverse = false
nested = true
cols = 1 cols = 1
color = "" background = "body-tertiary"
color = "body"
padding = "3" padding = "3"
header = "none" header = "none"
footer = "tags" footer = "tags"
orientation = "none" orientation = "none"
style = "border-1 card-emphasize" style = "border-1 card-emphasize"
homepage = 3 homepage = 3
# toml-docs-end list separator = false
# toml-docs-end sections
[favicon] [favicon]
logo = "img/favicon.png" logo = "img/favicon.png"
@@ -65,7 +73,7 @@
# toml-docs-start theme-colors # toml-docs-start theme-colors
[style] [style]
primary = "#D43900" primary = "#d43900"
secondary = "#6c757d" secondary = "#6c757d"
success = "#198754" success = "#198754"
info = "#0dcaf0" info = "#0dcaf0"
@@ -77,8 +85,12 @@
themeOpacity = "10" themeOpacity = "10"
# toml-docs-start font # toml-docs-start font
themeFont = "Inter" themeFont = "Inter"
themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # external path
themeFontPath = "/fonts" # local path
# toml-docs-end font # toml-docs-end font
# toml-docs-start build
purge = false
# toml-docs-end build
[schema] [schema]
type = "Organization" type = "Organization"

View File

@@ -8,14 +8,15 @@ for = '/**'
Content-Security-Policy = """\ Content-Security-Policy = """\
default-src 'self'; \ default-src 'self'; \
script-src 'self' \ script-src 'self' \
https://utteranc.es/client.js; \ https://utteranc.es/client.js https://*.google-analytics.com https://*.googletagmanager.com; \
style-src 'self' https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \ style-src 'self' https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \
object-src 'none'; \ object-src 'none'; \
base-uri 'self'; \ base-uri 'self'; \
connect-src 'self'; \ connect-src 'self'
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://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com; \ frame-src 'self' https://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com; \
img-src 'self' https://i.vimeocdn.com https://i.ytimg.com; \ img-src 'self' https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self' \ media-src 'self' \
""" """

View File

@@ -1,47 +1,40 @@
const autoprefixer = require('autoprefixer'); const autoprefixer = require('autoprefixer')({})
const purgecss = require('@fullhuman/postcss-purgecss'); const cssnano = require('cssnano')({
const whitelister = require('purgecss-whitelister'); preset: 'advanced'
})
const whitelister = require('purgecss-whitelister')
const purgecss = require('@fullhuman/postcss-purgecss')({
content: ['./hugo_stats.json'],
defaultExtractor: (content) => {
const els = JSON.parse(content).htmlElements
return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])]
},
dynamicAttributes: ['data-bs-theme'],
safelist: [
...whitelister([
'./assets/scss/components/_clipboard.scss',
'./assets/scss/components/_command.scss',
'./assets/scss/components/_navbar.scss',
'./assets/scss/components/_search.scss',
'./assets/scss/components/_syntax.scss',
'./assets/scss/components/_syntax-dark.scss',
'./assets/scss/components/_syntax-light.scss',
'./assets/scss/theme/fonts.scss',
'./assets/scss/theme/theme.scss',
'./node_modules/bootstrap/scss/_carousel.scss',
'./node_modules/bootstrap/scss/_dropdown.scss',
'./node_modules/bootstrap/scss/_reboot.scss',
'./node_modules/bootstrap/scss/_tooltip.scss',
'./node_modules/bootstrap/scss/_transitions.scss',
'./node_modules/bootstrap/scss/_utilities.scss'
])
]
})
module.exports = { module.exports = {
plugins: [ plugins: [
autoprefixer(), autoprefixer,
purgecss({ cssnano,
content: [ purgecss
'./layouts/**/*.html', ]
'./content/**/*.md',
],
safelist: [
/lazyloaded/,
/table/,
/thead/,
/tbody/,
/tr/,
/th/,
/td/,
/h5/,
/alert-link/,
/container-xxl/,
/container-fluid/,
/^bg-opacity-\d+/,
/svg.*/,
/fa.*/,
/ratio.*/,
/suggestion.*/,
...whitelister([
'./assets/scss/components/_blockquote.scss',
'./assets/scss/components/_buttons.scss',
'./assets/scss/components/_card.scss',
'./assets/scss/components/_clipboard.scss',
'./assets/scss/components/_img.scss',
'./assets/scss/components/_navbar.scss',
'./assets/scss/components/_search.scss',
'./assets/scss/components/_syntax.scss',
'./assets/scss/layouts/_reboot.scss',
'./assets/scss/layouts/type.scss',
'./node_modules/bootstrap/scss/_dropdown.scss',
'./node_modules/bootstrap/scss/_utilities.scss',
]),
],
}),
],
} }

View File

@@ -1,4 +1,5 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Blog title: Blog
nested: true
--- ---

View File

@@ -73,7 +73,7 @@ As an example, the following shortcode displays a tooltip for a dark button with
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* button color="secondary" tooltip="Click on the inbox to view your unread messages" href="#" badge="99+" */>}} {{</* button color="secondary" tooltip="Click on the inbox to view your unread messages" href="#!" badge="99+" */>}}
Inbox Inbox
{{</* /button */>}} {{</* /button */>}}
{{< /example>}} {{< /example>}}
@@ -86,20 +86,20 @@ As an example, the following shortcode displays a group of three buttons.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* button-group aria-label="Basic example" */>}} {{</* button-group aria-label="Basic example" */>}}
{{</* button color="primary" href="#" */>}}Left{{</* /button */>}} {{</* button color="primary" href="#!" */>}}Left{{</* /button */>}}
{{</* button color="primary" href="#" */>}}Middle{{</* /button */>}} {{</* button color="primary" href="#!" */>}}Middle{{</* /button */>}}
{{</* button color="primary" href="#" */>}}Right{{</* /button */>}} {{</* button color="primary" href="#!" */>}}Right{{</* /button */>}}
{{</* /button-group */>}} {{</* /button-group */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
## Card ## Card
As an example, the following shortcode displays a stacked card with icon 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" >}}
{{</* card path="about" padding="3" class="w-50" color="light" header="publication" footer="none" */>}} {{</* card path="about" padding="3" class="w-50" color="body-tertiary" header="publication" footer="none" */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
@@ -166,7 +166,7 @@ echo "goodbye"
## Docs ## Docs
Use the `docs` shortcode to display the content of a `toml` or `scss` file: Use the `docs` shortcode to display the content of a `js`, `scss` or `toml` file:
{{< docs name="theme-colors" file="config/_default/params.toml" >}} {{< docs name="theme-colors" file="config/_default/params.toml" >}}
@@ -192,13 +192,34 @@ As an example, the following shortcode displays an image with rounded corners an
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
## Nav
As an example, the following shortcode displays a tab group with vertically aligned pills.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* nav type="pills" vertical="true" */>}}
{{</* nav-item header="Nav Item #1" show="true" */>}}
This is the first item's nav body. It supports HTML content. The item is shown by adding the value
<code>show</code> to the <code>class</code> argument.
{{</* /nav-item */>}}
{{</* nav-item header="Nav Item #2" */>}}
This is the second item's nav body. It too supports HTML content.
{{</* /nav-item */>}}
{{</* nav-item header="Nav Item #3" */>}}
This is the third item's nav body.
{{</* /nav-item */>}}
{{</* /nav */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Navbar ## Navbar
As an example, the following shortcode displays a light navigation header. As an example, the following shortcode displays a light navigation header.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* navbar path="about" color="primary" size="sm" search="false" menus="sample" title="Brand" */>}} {{</* navbar path="about" color="primary" size="md" search="false" menus="sample" title="Brand" mode="false" */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
@@ -236,8 +257,6 @@ As an example, the following shortcode displays a tooltip for a colored hyperlin
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* tooltip color="primary" title="Tooltip" href="#" */>}} {{</* tooltip color="primary" title="Tooltip" href="#!" */>}}Tooltip{{</* /tooltip */>}} demonstration
Tooltip demonstration
{{</* /tooltip */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Bootstrap elementen title: Bootstrap elementen
slug: bootstrap-elementen
date: 2023-02-17 date: 2023-02-17
description: Gebruik shortcodes om eenvoudig Bootstrap elementen toe te voegen. description: Gebruik shortcodes om eenvoudig Bootstrap elementen toe te voegen.
tags: ["bootstrap", "shortcode"] tags: ["bootstrap", "shortcode"]
@@ -73,7 +74,7 @@ De volgende shortcode toont een knop met een label en een aanwijzing.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* button color="secondary" tooltip="Toon je ongelezen berichten" href="#" badge="99+" */>}} {{</* button color="secondary" tooltip="Toon je ongelezen berichten" href="#!" badge="99+" */>}}
Inbox Inbox
{{</* /button */>}} {{</* /button */>}}
{{< /example>}} {{< /example>}}
@@ -86,20 +87,20 @@ De volgende shortcode toont een groep van drie knoppen.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* button-group aria-label="Basic example" */>}} {{</* button-group aria-label="Basic example" */>}}
{{</* button color="primary" href="#" */>}}Links{{</* /button */>}} {{</* button color="primary" href="#!" */>}}Links{{</* /button */>}}
{{</* button color="primary" href="#" */>}}Midden{{</* /button */>}} {{</* button color="primary" href="#!" */>}}Midden{{</* /button */>}}
{{</* button color="primary" href="#" */>}}Rechts{{</* /button */>}} {{</* button color="primary" href="#!" */>}}Rechts{{</* /button */>}}
{{</* /button-group */>}} {{</* /button-group */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
## Card ## Card
De volgende shortcode toont een kaart met een icoon dat linkt naar de [over mij]({{< ref "about" >}}) pagina. De kaart bevat een titel. De volgende shortcode toont een kaart dat linkt naar de [over mij]({{< ref "about" >}}) pagina. De kaart bevat een titel.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* card path="about" padding="3" class="w-50" color="light" header="publication" footer="none" */>}} {{</* card path="about" padding="3" class="w-50" color="body-tertiary" header="publication" footer="none" */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
@@ -192,13 +193,34 @@ De volgende shortcode toont een plaatje met afgeronde hoeken en een 21x9 verhoud
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
## Nav
De volgende shortcode toont een groep met verticale tabbladen.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* nav type="pills" vertical="true" */>}}
{{</* nav-item header="Nav Item #1" show="true" */>}}
Dit is de inhoud van het eerste element met ondersteuning voor HTML. De waarde <code>show</code>
voor het argument <code>class</code> geeft aan dat het element uitgeklapt moet worden.
{{</* /nav-item */>}}
{{</* nav-item header="Nav Item #2" */>}}
Dit is de inhoud van het tweede element. Het ondersteunt ook HTML.
{{</* /nav-item */>}}
{{</* nav-item header="Nav Item #3" */>}}
Dit is de inhoud van het derde element.
{{</* /nav-item */>}}
{{</* /nav */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Navbar ## Navbar
De volgende shortcode toont een navigatiemenu. De volgende shortcode toont een navigatiemenu.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* navbar path="about" color="primary" size="sm" search="false" menus="sample" title="Brand" */>}} {{</* navbar path="about" color="primary" size="md" search="false" menus="sample" title="Brand" mode="false" */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
@@ -236,8 +258,6 @@ De volgende shortcode toont een uitleg voor een gekleurde link.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* tooltip color="primary" title="Tooltip" href="#" */>}} {{</* tooltip color="primary" title="Tooltip" href="#!" */>}}Tooltip{{</* /tooltip */>}} demonstratie
Tooltip demonstration
{{</* /tooltip */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Eerste artikel title: Eerste artikel
slug: eerste-artikel
date: 2022-10-01 date: 2022-10-01
description: Dit is mijn eerste artikel. description: Dit is mijn eerste artikel.
tags: ["blog"] tags: ["blog"]

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Vierde artikel title: Vierde artikel
slug: vierde-artikel
date: 2023-01-01 date: 2023-01-01
description: Dit is mijn vierde artikel. description: Dit is mijn vierde artikel.
tags: ["blog"] tags: ["blog"]

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Tweede artikel title: Tweede artikel
slug: tweede-artikel
date: 2022-11-01 date: 2022-11-01
description: Dit is mijn tweede artikel. description: Dit is mijn tweede artikel.
tags: ["blog"] tags: ["blog"]

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Derde artikel title: Derde artikel
slug: derde-artikel
date: 2022-12-01 date: 2022-12-01
description: Dit is mijn derde artikel. description: Dit is mijn derde artikel.
tags: ["blog"] tags: ["blog"]

View File

@@ -68,7 +68,7 @@
# 404 page # 404 page
- id: pageNotFound - id: pageNotFound
translation: "Ups! Diese Seite existiert nicht. Versuche es über die" translation: "Diese Seite existiert nicht. Versuche es über die"
- id: pageNotFoundTitle - id: pageNotFoundTitle
translation: "Nicht gefunden" translation: "Nicht gefunden"
- id: pageNotFoundHome - id: pageNotFoundHome

View File

@@ -27,8 +27,16 @@
translation: "Next Post" translation: "Next Post"
- id: recentProjects - id: recentProjects
translation: "Projects" translation: "Projects"
- id: moreFeatures
translation: "More Features"
- id: moreGuides
translation: "More Guides"
- id: moreOpensource
translation: "More Features"
- id: moreProjects - id: moreProjects
translation: "More Projects" translation: "More Projects"
- id: moreUsers
translation: "More Users"
- id: read - id: read
translation: "read" translation: "read"
- id: minutesShort - id: minutesShort
@@ -56,7 +64,7 @@
- id: toggleSidebar - id: toggleSidebar
translation: "Toggle sidebar navigation" translation: "Toggle sidebar navigation"
- id: colorMode - id: colorMode
translation: "Color mode" translation: "Toggle theme"
- id: colorLight - id: colorLight
translation: "Light" translation: "Light"
- id: colorDark - id: colorDark
@@ -65,12 +73,14 @@
translation: "Auto" translation: "Auto"
- id: toggleMainNav - id: toggleMainNav
translation: "Toggle main navigation" translation: "Toggle main navigation"
- id: demo
translation: "Demo"
# 404 page # 404 page
- id: pageNotFound - id: pageNotFound
translation: "Oops! This page doesn't exist. Try going back to our" translation: "The page you are looking for does not exist or another error occurred. Try going back to our"
- id: pageNotFoundTitle - id: pageNotFoundTitle
translation: "Not found" translation: "Page not found"
- id: pageNotFoundHome - id: pageNotFoundHome
translation: "home page" translation: "home page"

View File

@@ -56,7 +56,7 @@
- id: toggleSidebar - id: toggleSidebar
translation: "Toon of verberg navigatie" translation: "Toon of verberg navigatie"
- id: colorMode - id: colorMode
translation: "Modus" translation: "Pas modus aan"
- id: colorLight - id: colorLight
translation: "Licht" translation: "Licht"
- id: colorDark - id: colorDark
@@ -68,7 +68,7 @@
# 404 page # 404 page
- id: pageNotFound - id: pageNotFound
translation: "Oeps, deze pagina bestaat niet. Ga terug naar het" translation: "Deze pagina bestaat niet of er is een andere fout opgetreden. Ga terug naar het"
- id: pageNotFoundTitle - id: pageNotFoundTitle
translation: "Niet gevonden" translation: "Niet gevonden"
- id: pageNotFoundHome - id: pageNotFoundHome

View File

@@ -1,8 +1,12 @@
{{ define "main"}} {{ define "main"}}
<main id="main"> <div class="container-xxl flex-fill d-flex align-content-center flex-wrap">
<div> <div class="w-100 text-center">
<h1 id="title">{{ T "pageNotFoundTitle" }}</h1> <span class="text-secondary fw-bold">
<p>{{ T "pageNotFound" }} <a href="{{ "/" | relURL }}">{{ T "pageNotFoundHome" }}</a>.</p> <i class="fa-regular fa-face-frown fa-10x"></i>
</div> <p class="display-1 mt-3 fw-bold">404</p>
</main> <p class="fs-3">{{ T "pageNotFoundTitle" }}</p>
</span>
<p>{{ T "pageNotFound" }} <a href="{{ "/" | relLangURL }}">{{ T "pageNotFoundHome" }}</a>.</p>
</div>
</div>
{{ end }} {{ end }}

View File

@@ -0,0 +1,5 @@
{{ if site.Params.navigation.anchor }}
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}"><i class="fa-solid fa-link anchor"></i></a></h{{ .Level }}>
{{ else }}
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }}</h{{ .Level }}>
{{ end }}

View File

@@ -1,12 +1,17 @@
{{- $section := .Section }}
{{- with partial "utilities/GetMenu" . }}{{ $.Scratch.Set "sidebar" . }}{{ end -}} {{- with partial "utilities/GetMenu" . }}{{ $.Scratch.Set "sidebar" . }}{{ end -}}
{{ $.Scratch.Set "version" (site.Param (printf "%s.version" .Section)) }}
<!doctype html> <!doctype html>
<html lang="{{ .Site.Language.Lang }}" class="no-js" data-bs-theme="dark"> <html lang="{{ .Site.Language.Lang }}" class="no-js">
<head> <head>
{{ block "head" . }}{{ end -}} {{ block "head" . }}{{ end -}}
</head> </head>
<body> <body>
{{- if site.Params.main.enableDarkMode -}}
{{- partial "footer/scripts.html" (dict "filename" "js/critical.bundle.js" "match" "js/critical/**.js" "header" true "page" .) -}}
{{- end -}}
<div class="d-flex flex-column min-vh-100{{ if and .IsHome .Site.Params.home.style }} {{ .Site.Params.home.style }}{{ end }}"> <div class="d-flex flex-column min-vh-100{{ if and .IsHome .Site.Params.home.style }} {{ .Site.Params.home.style }}{{ end }}">
<div class="{{ if .Site.Params.navigation.fixed }}mb-4{{ end }}"> <div class="{{ if .Site.Params.navigation.fixed }}mb-4{{ end }}">
{{- partial "assets/navbar.html" (dict {{- partial "assets/navbar.html" (dict
@@ -28,19 +33,23 @@
<div class="d-flex flex-column flex-fill"> <div class="d-flex flex-column flex-fill">
{{ block "main" . }}{{ end -}} {{ block "main" . }}{{ end -}}
</div> </div>
<div class=""> {{ if not .Site.Params.main.footerBelowFold }}
{{- partial "footer/social.html" . -}} <div class="">
{{- partial "footer/footer.html" . -}} {{- partial "footer/social.html" . -}}
</div> {{- partial "footer/footer.html" . -}}
</div>
{{ end }}
{{ end -}} {{ end -}}
{{ else -}} {{ else -}}
<div class="d-flex flex-column flex-fill {{ if .Site.Params.navigation.fixed }}mt-5{{ end }}"> <div class="d-flex flex-column flex-fill {{ if .Site.Params.navigation.fixed }}mt-5{{ end }}">
{{ block "main" . }}{{ end -}} {{ block "main" . }}{{ end -}}
</div> </div>
<div class=""> {{ if not .Site.Params.main.footerBelowFold }}
{{- partial "footer/social.html" . -}} <div class="">
{{- partial "footer/footer.html" . -}} {{- partial "footer/social.html" . -}}
</div> {{- partial "footer/footer.html" . -}}
</div>
{{ end }}
{{ end -}} {{ end -}}
</div> </div>
@@ -48,10 +57,17 @@
<div class=""> <div class="">
{{ block "main" . }}{{ end -}} {{ block "main" . }}{{ end -}}
</div> </div>
{{- partial "footer/social.html" . -}} <div class="">
{{- partial "footer/footer.html" . -}} {{- partial "footer/social.html" . -}}
{{ end -}} {{- partial "footer/footer.html" . -}}
</div>
{{ else if .Site.Params.main.footerBelowFold }}
<div class="">
{{- partial "footer/social.html" . -}}
{{- partial "footer/footer.html" . -}}
</div>
{{ end }}
{{- partialCached "footer/scripts.html" . -}} {{- partialCached "footer/scripts.html" (dict "header" false "page" .) }}
</body> </body>
</html> </html>

View File

@@ -1,9 +1,12 @@
{{- define "main" -}} {{- define "main" -}}
{{- partial "assets/section-list.html" (dict {{- partial "assets/section-list.html" (dict
"page" . "page" .
"section" .Section "section" .Type
"home" false "home" false
"nested" .Params.Nested
"title" .Title "title" .Title
"description" .Description
"content" .Content
"paginate" true) "paginate" true)
-}} -}}
{{- end -}} {{- end -}}

View File

@@ -1,11 +1,12 @@
{{- define "partials/header.html" -}} {{- define "partials/header.html" -}}
{{ if site.Params.navigation.breadcrumb }}{{ partial "breadcrumb.html" . }}{{ end -}} {{ if site.Params.navigation.breadcrumb }}{{ partial "assets/breadcrumb.html" . }}{{ end -}}
{{ if in (slice "docs" "minimal") .Layout }} {{ if in (slice "docs" "minimal") .Layout }}
<h1>{{ .Title }}</h1> {{ with .Title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
<p class="lead mb-5">{{ .Description }}</p>
{{ else }} {{ else }}
{{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}} {{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}}
{{ $datestr := (partial "utilities/date.html" (dict "date" .Date "format" "long")) -}} {{ $datestr := (partial "utilities/date.html" (dict "date" .Date "format" "long")) -}}
<h1>{{ .Title }}</h1> {{ with .Title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
<small class="text-body-secondary text-uppercase"> <small class="text-body-secondary text-uppercase">
{{ $datestr | i18n "postedOnDate" -}} {{ $datestr | i18n "postedOnDate" -}}
{{ if ne $datestr $lastmodstr -}}&nbsp;({{ $lastmodstr | i18n "lastModified" }}){{ end }} &bull; {{ if ne $datestr $lastmodstr -}}&nbsp;({{ $lastmodstr | i18n "lastModified" }}){{ end }} &bull;
@@ -14,34 +15,45 @@
</small> </small>
<div class="mt-3"> <div class="mt-3">
{{ range (.GetTerms "tags") -}} <div class="d-none-dark">
<a class="btn btn-light btn-sm" href="{{ (path.Join .Page.RelPermalink) | relURL }}" role="button">{{ .LinkTitle }}</a> {{ range (.GetTerms "tags") -}}
{{ end -}} <a class="btn btn-light btn-sm" href="{{ (path.Join .Page.RelPermalink) | relLangURL }}" role="button">{{ .LinkTitle }}</a>
&nbsp;
{{ end -}}
</div>
<div class="d-none-light">
{{ range (.GetTerms "tags") -}}
<a class="btn btn-outline-secondary btn-sm" href="{{ (path.Join .Page.RelPermalink) | relLangURL }}" role="button">{{ .LinkTitle }}</a>
&nbsp;
{{ end -}}
</div>
</div> </div>
<p class="lead mb-5 mt-3">{{ .Description }}</p>
{{ end }} {{ end }}
{{ end -}} {{ end -}}
{{ define "partials/body.html" -}} {{ define "partials/body.html" -}}
{{ if eq .Layout "docs"}} {{- if and .Site.Params.navigation.toc .Params.includeToc | default true -}}
<p class="lead mb-5">{{ .Description }}</p> <div class="d-md-none pb-5">{{ partial "assets/toc-dropdown.html" . }}</div>
{{ .Content }} {{- end -}}
{{ else }}
<p class="lead mb-5 mt-3">{{ .Description }}</p> {{ if not (in (slice "docs" "minimal") .Layout) }}
{{ if .Params.thumbnail -}} {{ if .Params.thumbnail -}}
{{- $credits := "" -}} {{- $credits := "" -}}
{{- if .Params.photoCredits }}{{ if .Params.PhotoSource }}{{ $credits = printf "%s %s %s %s" (T "photoBy") .Params.photoCredits (T "photoOn") .Params.PhotoSource }}{{ end }}{{ end -}} {{- if .Params.photoCredits }}{{ if .Params.PhotoSource }}{{ $credits = printf "%s %s %s %s" (T "photoBy") .Params.photoCredits (T "photoOn") .Params.PhotoSource }}{{ end }}{{ end -}}
{{- partial "image.html" (dict "url" .Params.thumbnail "ratio" "21x9" "outerClass" "img-wrap" "innerClass" "rounded" "title" .Params.title "caption" $credits) -}} {{- partial "assets/image.html" (dict "url" .Params.thumbnail "ratio" "21x9" "outerClass" "img-wrap" "innerClass" "rounded" "title" .Params.title "caption" $credits) -}}
{{ end -}} {{ end -}}
{{ .Content }} {{ end }}
{{ end }} {{ .Content }}
{{ end -}} {{ end -}}
{{ define "partials/footer.html" -}} {{ define "partials/footer.html" -}}
{{ if eq .Layout "docs"}} {{ if eq .Layout "docs" }}
<div class="mt-5 small"> <div class="mt-5 small">
{{ partial "utilities/git.html" . }} {{ partial "utilities/git.html" . }}
</div> </div>
{{ else }} {{ else if ne .Layout "minimal" }}
<div class="row row-cols-2 mt-5 mb-3"> <div class="row row-cols-2 mt-5 mb-3">
<div class="col"> <div class="col">
{{ with .NextInSection -}} {{ with .NextInSection -}}
@@ -69,29 +81,30 @@
{{ define "main" -}} {{ define "main" -}}
{{- $menu := .Scratch.Get "sidebar" -}} {{- $menu := .Scratch.Get "sidebar" -}}
{{- $version := .Scratch.Get "version" -}}
{{- $sidebar := .Site.Params.navigation.sidebar | default true -}} {{- $sidebar := .Site.Params.navigation.sidebar | default true -}}
{{ if and $menu $sidebar -}} {{ if and $menu $sidebar -}}
<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvass-sidebar" aria-labelledby="offcanvas-label"> <div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvass-sidebar" aria-inledby="offcanvas-label">
<div class="offcanvas-header"> <div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvas-label">{{ strings.FirstUpper .Section }}</h5> <h5 class="offcanvas-title" id="offcanvas-label">{{ strings.FirstUpper .Section }}</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div> </div>
<div class="offcanvas-body"> <div class="offcanvas-body">
{{ partial "assets/sidebar" (dict "page" . "menu" $menu) }} {{ partial "assets/sidebar" (dict "page" . "menu" $menu "version" $version) }}
</div> </div>
</div> </div>
<div class="container-fluid"> <div class="container-xxl px-3 px-xxl-0">
<div class="row row-cols-md-2 row-cols-lg-3"> <div class="row row-cols-md-2 row-cols-lg-3">
<div class="col col-md-3 col-lg-2 d-none mt-5 d-md-block"> <div class="col col-md-3 col-lg-2 d-none pt-5 d-md-block sidebar-overflow sticky-top">
{{ partial "assets/sidebar" (dict "page" . "menu" $menu) }} {{ partial "assets/sidebar" (dict "page" . "menu" $menu "version" $version) }}
</div> </div>
<div class="col col-md-9 col-lg-8 mb-5 p-4"> <div class="col col-md-9 col-lg-8 mb-5 p-4">
{{ partial "partials/header.html" . }} {{ partial "partials/header.html" . }}
{{ partial "partials/body.html" . }} {{ partial "partials/body.html" . }}
{{ partial "partials/footer.html" . }} {{ partial "partials/footer.html" . }}
</div> </div>
<div class="col col-lg-2 d-none d-lg-block mt-5"> <div class="col col-lg-2 d-none d-lg-block pt-5">
{{- if and .Site.Params.navigation.toc .Params.includeToc | default true -}} {{- if and .Site.Params.navigation.toc .Params.includeToc | default true -}}
{{ partial "assets/toc.html" . -}} {{ partial "assets/toc.html" . -}}
{{ end -}} {{ end -}}
@@ -99,7 +112,7 @@
</div> </div>
</div> </div>
{{ else }} {{ else }}
<div class="container-fluid"> <div class="container-xxl px-3 px-xxl-0">
<div class="row row-cols-1 row-cols-sm-3"> <div class="row row-cols-1 row-cols-sm-3">
<div class="col col-md-2 d-none d-md-block"></div> <div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-12 col-md-8"> <div class="col col-sm-12 col-md-8">

View File

@@ -1,10 +0,0 @@
<!-- Hugo considers all first-level directories to be a root section. As such, as "/en/docs/" is considered to be a
branch bundle, despite it not having an "_index.md" page. Being a branch bundle, Hugo uses a list template to
render the "/en/docs/" page. This overwrites the alias defined in "/en/docs/<ver>/getting-started/introduction/".
This empty list template is deliberately added to the "/layouts/docs/" directory to prevent Hugo from generating
a list page for "/en/docs/" (all other nested sections). This enables the alias defined in
"/en/docs/<version>/getting-started/introduction/".
See https://gohugo.io/content-management/sections/ for more details.
-->

View File

@@ -4,12 +4,15 @@
{{- define "main" -}} {{- define "main" -}}
{{- $page := . -}} {{- $page := . -}}
{{- range $index, $section := site.Params.home.sections -}} {{- range $index, $section := site.Params.home.sections -}}
{{- $pages := where site.RegularPages "Type" "in" $section -}} {{- $sectionPage := site.GetPage "section" $section -}}
{{- $sectionURL := "" -}} {{- $sectionURL := $sectionPage.RelPermalink -}}
{{- range $page := first 1 $pages -}} {{- $title := $sectionPage.Title -}}
{{- $sectionURL = $page.Parent.RelPermalink -}} {{- $thumbnail := $sectionPage.Params.Thumbnail -}}
{{- end -}} {{- $icon := $sectionPage.Params.Icon -}}
{{- $description := $sectionPage.Description -}}
{{- $content := $sectionPage.Content -}}
{{- $moreTitle := (T (printf "more%s" (strings.FirstUpper $section))) -}} {{- $moreTitle := (T (printf "more%s" (strings.FirstUpper $section))) -}}
@@ -17,6 +20,10 @@
"page" $page "page" $page
"section" $section "section" $section
"home" true "home" true
"nested" true
"thumbnail" $thumbnail
"icon" $icon
"content" $content
"moreTitle" $moreTitle "moreTitle" $moreTitle
"sectionURL" $sectionURL) "sectionURL" $sectionURL)
-}} -}}

View File

@@ -0,0 +1,132 @@
<!--
Displays a button. The shortcode supports the following arguments:
"title" Required title of the button.
"href" Optional address for the button or hyperlink.
"id" Optional id of the button, to be used in the DOM.
"state" Optional state of the button, either "enabled" (default), "disabled", "active", or "inactive".
"size" Optional size of the button, either "sm", "md" (default), or "lg".
"color" Optional theme color of the element, either "primary" (default), "secondary", "success",
"danger", "warning", "info", "light", "dark", "white", or "black".
"outline" Optional flag indicating the button should be outlined, either "false" (default) or "true".
"badge" Optional positioned badge to display on top of the button.
"aria-label" Optional assistive label for the badge.
"tooltip" Optional text to display in a tooltip. Cannot be used together with collapse. Ignored for active/
inactive buttons.
"collapse" Optional panel to collapse. Cannot be used together with tooltip. Ignored for active/inactive buttons.
"type" Optional type of the element, either "link" or "button" (default).
"placement" Optional position of the tooltip: "top" (default), "bottom", "left", or "right".
"class" Optional class attribute of the button element, e.g. “toc-button”.
"icon" Optional Font Awesome icon class attribute, e.g. "fas sort".
"order" Optional order of the icon, either "first" or "last" (default).
"justify" Optional justification of the button title and icon, either "start", "end", "center" (default),
"between", "around", or "evenly".
-->
{{- $title := trim .title " \r\n" -}}
{{- if not $title -}}
{{- errorf "partial [assets/button.html] - Missing element title" -}}
{{- end -}}
{{- $id := .id }}
{{- $state := "enabled" -}}
{{- with .state }}{{ $state = . }}{{ end -}}
{{- $supportedStates := slice "enabled" "disabled" "active" "inactive" -}}
{{- if not (in $supportedStates $state) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'state': %s" $state -}}
{{- end -}}
{{- $size := "md" -}}
{{- with .size }}{{ $size = . }}{{ end -}}
{{- $supportedSizes := slice "sm" "md" "lg" -}}
{{- if not (in $supportedSizes $size) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'size': %s" $size -}}
{{- end -}}
{{- $color := "primary" -}}
{{- with .color }}{{ $color = . }}{{ end -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" -}}
{{- if not (in $supportedColors $color) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'color': %s" $color -}}
{{- end -}}
{{- $outline := false -}}
{{- with .outline }}{{ $outline = . }}{{ end -}}
{{- $badge := "" -}}
{{- with .badge }}{{ $badge = . }}{{ end -}}
{{- $label := "" -}}
{{- with .label }}{{ $label = . }}{{ end -}}
{{- $tooltip := "" -}}
{{- if not (strings.HasSuffix $state "active") -}}
{{- with .tooltip }}{{ $tooltip = . }}{{ end -}}
{{- end -}}
{{- $href := .href -}}
{{- $collapse := "" -}}
{{- if not (strings.HasSuffix $state "active") -}}
{{- with .collapse }}{{ $collapse = . }}{{ $href = printf "#%s" . }}{{ end -}}
{{- end -}}
{{- if $tooltip -}}
{{- if $collapse -}}
{{- errorf "partial [assets/button.html] - Cannot use tooltip and collapse at the same time" -}}
{{- end -}}
{{- end -}}
{{- $type := "button" -}}
{{- with .type }}{{ $type = . }}{{ end -}}
{{- $supportedTypes := slice "button" "link" -}}
{{- if not (in $supportedTypes $type) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'type': %s" $type -}}
{{- end -}}
{{- $placement := "top" -}}
{{- with .placement }}{{ $placement = . }}{{ end -}}
{{- $supportedPlacements := slice "top" "bottom" "left" "right" -}}
{{- if not (in $supportedPlacements $placement) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'placement': %s" $placement -}}
{{- end -}}
{{- $class := .class }}
{{- $icon := .icon }}
{{- $order := "last" -}}
{{- with .order }}{{ $order = . }}{{ end -}}
{{- $supportedOrders := slice "first" "last" -}}
{{- if not (in $supportedOrders $order) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'order': %s" $order -}}
{{- end -}}
{{- $justify := "center" -}}
{{- with .justify }}{{ $justify = . }}{{ end -}}
{{- $supportedJustify := slice "start" "end" "center" "between" "around" "evenly" -}}
{{- if not (in $supportedJustify $justify) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'justify': %s" $justify -}}
{{- end -}}
<a aria-label="{{ $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end -}}
{{- with $id }}id="{{ . }}"{{ end -}}
{{- if eq $type "button" }}class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class }}" role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end -}}
{{- else }}class="link-{{ $color }} position-relative {{ $class }}"{{ end -}}
{{- with $tooltip }}data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end -}}
{{- with $collapse }}data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end -}}
{{- if eq $state "active" }}data-bs-toggle="button" aria-pressed="true"{{ end -}}
{{- if eq $state "inactive" }}data-bs-toggle="button" aria-pressed="false"{{ end -}}
>
<div class="d-flex justify-content-{{ $justify }}">
<div>{{ $title }}</div>
{{- with $icon }}<div class="align-self-center{{ if eq $order "first" }} order-first pe-1{{ else }} ps-1{{ end }}">{{ partial "assets/icon.html" (dict "icon" $icon) }}</div>{{ end }}
</div>
{{- with $badge }}
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">
{{ . }}
{{ with $label }}<span class="visually-hidden">{{ . }}</span>{{ end }}
</span>
{{- end -}}
</a>

View File

@@ -15,6 +15,7 @@
"href" Optional address for the button or hyperlink. If set, a button is added if the list exceeds the "href" Optional address for the button or hyperlink. If set, a button is added if the list exceeds the
maximum number of cards to display. maximum number of cards to display.
"hrefTitle" Optional title of the button or hyperlink as companion to href. "hrefTitle" Optional title of the button or hyperlink as companion to href.
"separator" Optional flag to indicate a horizontal line should be added between items on small screens.
In addition, the following arguments are passed to the individual cards. In addition, the following arguments are passed to the individual cards.
"class" Optional class attribute of the card element, e.g. “w-50”. "class" Optional class attribute of the card element, e.g. “w-50”.
@@ -30,24 +31,26 @@
{{- $page := .page -}} {{- $page := .page -}}
{{- if ne (printf "%T" $page) "*hugolib.pageState" -}} {{- if ne (printf "%T" $page) "*hugolib.pageState" -}}
{{- errorf "Invalid value for param 'page'" -}} {{- errorf "partial [assets/card-group.html] - Invalid value for param 'page'" -}}
{{- end -}} {{- end -}}
{{- $supportedTypes := slice "page.Pages" "resource.Resources" -}}
{{ $list := .list }} {{ $list := .list }}
{{- if ne (printf "%T" $list) "page.Pages" -}} {{- if not (in $supportedTypes (printf "%T" $list)) -}}
{{- errorf "Invalid value for param 'items'" -}} {{ warnf "Type: %T" $list }}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'list'" -}}
{{- end -}} {{- end -}}
{{- $count := len $list -}} {{- $count := len $list -}}
{{- $max := .max -}} {{- $max := .max -}}
{{- if ne (printf "%T" $max) "int" -}} {{- if ne (printf "%T" $max) "int" -}}
{{- errorf "Invalid value for param 'max'" -}} {{- errorf "partial [assets/card-group.html] - Invalid value for param 'max'" -}}
{{- end -}} {{- end -}}
{{- $max = math.Min $max $count -}} {{- $max = math.Min $max $count -}}
{{- $cols := .cols -}} {{- $cols := .cols -}}
{{- if or (lt $cols 1) (gt $cols 5) -}} {{- if or (lt $cols 1) (gt $cols 5) -}}
{{- errorf "Invalid value for param 'cols': %d" $cols -}} {{- errorf "partial [assets/card-group.html] - Invalid value for param 'cols': %d" $cols -}}
{{- end -}} {{- end -}}
{{- $colGrid := "row-cols-1" -}} {{- $colGrid := "row-cols-1" -}}
{{- if eq $cols 2 }}{{ $colGrid = "row-cols-1 row-cols-sm-1 row-cols-md-2" -}} {{- if eq $cols 2 }}{{ $colGrid = "row-cols-1 row-cols-sm-1 row-cols-md-2" -}}
@@ -55,22 +58,28 @@
{{- else if eq $cols 4 }}{{ $colGrid = "row-cols-1 row-cols-sm-2 row-cols-md-4" -}} {{- else if eq $cols 4 }}{{ $colGrid = "row-cols-1 row-cols-sm-2 row-cols-md-4" -}}
{{- else if eq $cols 5 }}{{ $colGrid = "row-cols-1 row-cols-sm-3 row-cols-md-5" }}{{ end -}} {{- else if eq $cols 5 }}{{ $colGrid = "row-cols-1 row-cols-sm-3 row-cols-md-5" }}{{ end -}}
{{- $title := .title -}} {{- $paginate := false -}}
{{- with .paginate -}}
{{ $paginate := false }} {{- if ne (printf "%T" .) "bool" -}}
{{ with .paginate }} {{- errorf "partial [assets/card-group.html] - Invalid value for param 'paginate'" -}}
{{ if ne (printf "%T" .) "bool" }} {{- end -}}
{{ errorf "Invalid value for param 'paginate'"}} {{- $paginate = . -}}
{{ end }} {{- end -}}
{{ $paginate = . }} {{- if not $paginate -}}
{{ end }} {{- $list = first $max $list -}}
{{ if not $paginate }} {{- end -}}
{{ $list = first $max $list }}
{{ end }}
{{- $moreURL := .href -}} {{- $moreURL := .href -}}
{{- $moreTitle := .hrefTitle -}} {{- $moreTitle := .hrefTitle -}}
{{- $separator := false -}}
{{- with .separator -}}
{{- if ne (printf "%T" .) "bool" -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'separator'" -}}
{{- end -}}
{{- $separator = . -}}
{{- end -}}
{{- $class := .class -}} {{- $class := .class -}}
{{- $color := .color -}} {{- $color := .color -}}
{{- $padding := .padding -}} {{- $padding := .padding -}}
@@ -78,56 +87,52 @@
{{- $footer := .footer -}} {{- $footer := .footer -}}
{{- $orientation := .orientation -}} {{- $orientation := .orientation -}}
<div class="container-fluid p-4"> <div class="container-fluid p-4 px-xxl-0">
{{ with $title }}<h1>{{ . }}</h1>{{ end }} {{ $paginator := "" }}
{{ if $paginate }} {{ if $paginate }}
<div class="row {{ $colGrid }}"> {{ $paginator = $page.Paginate $list }}
{{ $paginator := $page.Paginate $list }} {{ $list = first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $list) }}
{{ range $index, $element := first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $list) }} {{ end }}
<div class="col pt-3 pb-3">
{{- partial "assets/card.html" (dict <div class="row {{ $colGrid }}">
"path" $element.File.Path {{ range $index, $element := $list }}
"class" (printf "h-100 %s" $class) {{- $params := (dict
"color" $color "class" (printf "h-100 %s" $class)
"padding" $padding "color" $color
"header" $header "padding" $padding
"footer" $footer "header" $header
"orientation" $orientation "footer" $footer
) "orientation" $orientation
-}} ) -}}
{{- if $element.Permalink -}}
{{- $params = merge $params (dict "path" $element.File.Path) -}}
{{- else -}}
{{- $params = merge $params (dict
"title" $element.Title
"href" $element.Permalink
"description" (or $element.Description $element.Content)
"thumbnail" $element.Params.thumbnail
"icon" $element.Params.icon
) -}}
{{- end -}}
<div class="col pt-3 pb-3">
{{- partial "assets/card.html" $params -}}
</div>
{{- if and (lt $index (sub $max 1)) $separator -}}
<div class="col d-block d-sm-none">
<hr>
</div> </div>
{{- if (lt $index (sub $max 1)) -}} {{- end -}}
<div class="col d-block d-sm-none"> {{- end -}}
<hr> </div>
</div>
{{- end -}} {{ if $paginate }}
{{ end }}
</div>
{{- if gt $paginator.TotalPages 1 -}} {{- if gt $paginator.TotalPages 1 -}}
{{- partial "assets/pagination.html" $page -}} <div class="pt-3">{{ partial "assets/pagination.html" $page }}</div>
{{- end -}} {{- end -}}
{{ else }} {{ else }}
<div class="row {{ $colGrid }}">
{{ range $index, $element := $list }}
<div class="col pt-3 pb-3">
{{- partial "assets/card.html" (dict
"path" $element.File.Path
"class" (printf "h-100 %s" $class)
"color" $color
"padding" $padding
"header" $header
"footer" $footer
"orientation" $orientation
)
-}}
</div>
{{- if (lt $index (sub $max 1)) -}}
<div class="col d-block d-sm-none">
<hr>
</div>
{{- end -}}
{{ end }}
</div>
{{ if gt $count $max }} {{ if gt $count $max }}
<a class="btn btn-outline-primary" href="{{ $moreURL| safeURL }}" role="button">{{ $moreTitle }}</a> <a class="btn btn-outline-primary" href="{{ $moreURL| safeURL }}" role="button">{{ $moreTitle }}</a>
{{ end }} {{ end }}

View File

@@ -5,10 +5,11 @@
The shortcode supports the following arguments: The shortcode supports the following arguments:
"path" Optional path of the page, override with other parameters. "path" Optional path of the page, override with other parameters.
"title" Required title of the card. "title" Required title of the card.
"href" Required address for the button or hyperlink. "href" Optional address for the button or hyperlink.
"class" Optional class attribute of the card element, e.g. “w-50”. "class" Optional class attribute of the card element, e.g. “w-50”.
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger", "color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", "white", "black", or "body". By default, no color is specified. "warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no
color is specified.
"padding": Optional padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default). "padding": Optional padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default).
"header" Optional header components of the card, displayed in small caps. Supported values are "full" "header" Optional header components of the card, displayed in small caps. Supported values are "full"
(default), "publication", "tags", and "none". (default), "publication", "tags", and "none".
@@ -27,10 +28,17 @@
{{- $color := .color -}} {{- $color := .color -}}
{{- $description := .description -}} {{- $description := .description -}}
<a href="{{ $href }}" class="{{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}"> {{- if $href -}}
<a href="{{ $href }}" class="{{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }} stretched-link">
<p class="card-title fs-5 fw-bold">{{ $title }}</p>
{{ with $description }}<p class="card-text mb-4 {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}">{{ . }}</p>{{ end -}}
</a>
{{- else -}}
<div>
<p class="card-title fs-5 fw-bold">{{ $title }}</p> <p class="card-title fs-5 fw-bold">{{ $title }}</p>
{{ with $description }}<p class="card-text mb-4 {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}">{{ . }}</p>{{ end -}} {{ with $description }}<p class="card-text mb-4 {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}">{{ . }}</p>{{ end -}}
</a> </div>
{{- end -}}
{{- end -}} {{- end -}}
<!-- Inline partial to render the card's header or footer --> <!-- Inline partial to render the card's header or footer -->
@@ -47,7 +55,7 @@
<p class="card-text"><small class="{{ if $color }}text-bg-{{ $color }}{{ else }}text-body-secondary{{ end }} text-uppercase"> <p class="card-text"><small class="{{ if $color }}text-bg-{{ $color }}{{ else }}text-body-secondary{{ end }} text-uppercase">
{{- if in (slice "full" "publication") $keywords -}} {{- if in (slice "full" "publication") $keywords -}}
{{- partial "utilities/date.html" (dict "date" $page.Date "format" "long") -}}&nbsp;&bull; {{- partial "utilities/date.html" (dict "date" $page.Date "format" "long") -}}&nbsp;&bull;
{{- $page.ReadingTime | lang.FormatNumber 0 }} {{ i18n "minutesShort" }} {{ i18n "read" -}} {{ $page.ReadingTime | lang.FormatNumber 0 }} {{ i18n "minutesShort" }} {{ i18n "read" -}}
{{- end -}} {{- end -}}
{{- if eq $keywords "full" -}} {{- if eq $keywords "full" -}}
@@ -58,8 +66,8 @@
{{- if $color }}{{ $link = printf "link-bg-%s" $color }}{{ end -}} {{- if $color }}{{ $link = printf "link-bg-%s" $color }}{{ end -}}
{{- range $index, $tag := first $maxTags ($page.GetTerms "tags") -}} {{- range $index, $tag := first $maxTags ($page.GetTerms "tags") -}}
{{- if gt $index 0 }}&bull;&nbsp;{{ end -}} {{- if gt $index 0 }}&nbsp;&bull;&nbsp;{{ end -}}
<a href="{{ (path.Join $tag.Page.RelPermalink) | relURL }}" class="{{ $link }}" aria-label="tag: {{ $tag.LinkTitle }}">{{ $tag.LinkTitle }}</a> <a href="{{ (path.Join $tag.Page.RelPermalink) | relLangURL }}" class="{{ $link }} tag-link" aria-label="tag: {{ $tag.LinkTitle }}">{{ $tag.LinkTitle }}</a>
{{- end -}} {{- end -}}
</small></p> </small></p>
{{- end -}} {{- end -}}
@@ -68,7 +76,7 @@
{{- if .path }} {{- if .path }}
{{- $page = site.GetPage .path }} {{- $page = site.GetPage .path }}
{{- if not $page }} {{- if not $page }}
{{- errorf "Cannot find page: %s" .path -}} {{- errorf "partial [assets/card.html] - Cannot find page: %s" .path -}}
{{- end }} {{- end }}
{{- end }} {{- end }}
@@ -81,9 +89,9 @@
{{- $color := "" -}} {{- $color := "" -}}
{{- with .color }}{{ $color = . }}{{ end -}} {{- with .color }}{{ $color = . }}{{ end -}}
{{- if $color -}} {{- if $color -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" -}} {{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
{{- if not (in $supportedColors $color) -}} {{- if not (in $supportedColors $color) -}}
{{- errorf "Invalid value for param 'color': %s" $color -}} {{- errorf "partial [assets/card.html] - Invalid value for param 'color': %s" $color -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
@@ -91,13 +99,13 @@
{{- with .header }}{{ $header = . }}{{ end -}} {{- with .header }}{{ $header = . }}{{ end -}}
{{- $supportedKeywords := slice "full" "publication" "tags" "none" -}} {{- $supportedKeywords := slice "full" "publication" "tags" "none" -}}
{{- if not (in $supportedKeywords $header) -}} {{- if not (in $supportedKeywords $header) -}}
{{- errorf "Invalid value for param 'header': %s" $header -}} {{- errorf "partial [assets/card.html] - Invalid value for param 'header': %s" $header -}}
{{- end -}} {{- end -}}
{{- $footer := "none" -}} {{- $footer := "none" -}}
{{- with .footer }}{{ $footer = . }}{{ end -}} {{- with .footer }}{{ $footer = . }}{{ end -}}
{{- if not (in $supportedKeywords $footer) -}} {{- if not (in $supportedKeywords $footer) -}}
{{- errorf "Invalid value for param 'footer': %s" $footer -}} {{- errorf "partial [assets/card.html] - Invalid value for param 'footer': %s" $footer -}}
{{- end -}} {{- end -}}
{{- with $page -}} {{- with $page -}}
@@ -108,24 +116,20 @@
{{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}} {{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}}
{{- end -}} {{- end -}}
{{- if not $href -}}
{{- errorf "Missing value for param 'href'" -}}
{{- end -}}
{{- $class := .class -}} {{- $class := .class -}}
{{- $padding := "auto" -}} {{- $padding := "auto" -}}
{{- with .padding }}{{ $padding = . }}{{ end -}} {{- with .padding }}{{ $padding = . }}{{ end -}}
{{- $supportedPaddings := slice "0" "1" "2" "3" "4" "5" "auto" -}} {{- $supportedPaddings := slice "0" "1" "2" "3" "4" "5" "auto" -}}
{{- if not (in $supportedPaddings $padding) -}} {{- if not (in $supportedPaddings $padding) -}}
{{- errorf "Invalid value for param 'padding': %s" $padding -}} {{- errorf "partial [assets/card.html] - Invalid value for param 'padding': %s" $padding -}}
{{- end -}} {{- end -}}
{{- $orientation := "stacked" -}} {{- $orientation := "stacked" -}}
{{- with .orientation }}{{ $orientation = . }}{{ end -}} {{- with .orientation }}{{ $orientation = . }}{{ end -}}
{{- $supportedOrientations := slice "stacked" "horizontal" "none" -}} {{- $supportedOrientations := slice "stacked" "horizontal" "none" -}}
{{- if not (in $supportedOrientations $orientation) -}} {{- if not (in $supportedOrientations $orientation) -}}
{{- errorf "Invalid value for param 'orientation': %s" $orientation -}} {{- errorf "partial [assets/card.html] - Invalid value for param 'orientation': %s" $orientation -}}
{{- end -}} {{- end -}}
{{- if eq $orientation "none" }}{{ $thumbnail = "" }}{{ $icon = "" }}{{ end -}} {{- if eq $orientation "none" }}{{ $thumbnail = "" }}{{ $icon = "" }}{{ end -}}
@@ -134,24 +138,20 @@
<div class="row g-0"> <div class="row g-0">
<div class="col-4"> <div class="col-4">
{{- if $thumbnail -}} {{- if $thumbnail -}}
<a href="{{ $href }}"> {{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "outerClass" "h-100 card-img-wrap" "innerClass" "rounded-start card-img-h100" "title" $title) -}}
{{- partial "image.html" (dict "url" $thumbnail "ratio" "1x1" "outerClass" "h-100 card-img-wrap" "innerClass" "rounded-start card-img-h100" "title" $title) -}}
</a>
{{- else if $icon -}} {{- else if $icon -}}
<div class="pt-{{ $padding }} ps-{{ $padding }} pe-{{ $padding }}"> <div class="pt-{{ $padding }} ps-{{ $padding }} pe-{{ $padding }}">
<a href="{{ $href }}"> {{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x text-secondary" $icon)) -}}
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x text-secondary" $icon)) -}}
</a>
</div> </div>
{{- end -}} {{- end -}}
</div> </div>
<div class="col-8"> <div class="col-8">
<div class="card-body d-flex p-{{ $padding }} flex-column h-100"> <div class="card-body d-flex p-{{ $padding }} flex-column h-100">
<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $header "color" $color) }}</div> {{ if $page }}<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $header "color" $color) }}</div>{{ end }}
<div class="h-100"> <div class="h-100">
{{- 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) -}}
</div> </div>
<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) }}</div> {{ if $page }}<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) }}</div>{{ end }}
</div> </div>
</div> </div>
</div> </div>
@@ -159,20 +159,16 @@
{{- else -}} {{- else -}}
<div class="card {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}"> <div class="card {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}">
{{- if $thumbnail -}} {{- if $thumbnail -}}
<a href="{{ $href }}"> {{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "outerClass" "card-img-wrap" "innerClass" "card-img-top" "title" $title) -}}
{{- partial "image.html" (dict "url" $thumbnail "ratio" "16x9" "outerClass" "card-img-wrap" "innerClass" "card-img-top" "title" $title) -}}
</a>
{{- else if $icon -}} {{- else if $icon -}}
<div class="pt-{{ $padding }} ps-{{ $padding }} pe-{{ $padding }}"> <div class="pt-{{ $padding }} ps-{{ $padding }} pe-{{ $padding }}">
<a href="{{ $href }}"> {{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x text-secondary" $icon)) -}}
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x text-secondary" $icon)) -}}
</a>
</div> </div>
{{- end -}} {{- end -}}
<div class="card-body d-flex flex-column p-{{ $padding }}"> <div class="card-body d-flex flex-column p-{{ $padding }}">
{{- partial "card-caption.html" (dict "page" $page "keywords" $header "color" $color) -}} {{ 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) -}}
{{- partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) -}} {{ if $page }}{{- partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) -}}{{ end }}
</div> </div>
</div> </div>
{{- end -}} {{- end -}}

View File

@@ -1,6 +1,6 @@
{{- $icon := .icon -}} {{- $icon := .icon -}}
{{- if not $icon -}} {{- if not $icon -}}
{{- errorf "Expected value for param 'icon'" -}} {{- errorf "partial [assets/icon.html] - Expected value for param 'icon'" -}}
{{- end -}} {{- end -}}
{{- $icon_class := split $icon " " -}} {{- $icon_class := split $icon " " -}}
@@ -12,5 +12,5 @@
{{- else if eq (index $icon_class 0) "fa" -}} {{- else if eq (index $icon_class 0) "fa" -}}
<i class="fa-regular fa-{{ $attr }}"></i> <i class="fa-regular fa-{{ $attr }}"></i>
{{- else -}} {{- else -}}
{{- errorf "Unrecognized icon class: %s" $icon_class -}} {{- errorf "partial [assets/icon.html] - Unrecognized icon class: %s" $icon_class -}}
{{- end -}} {{- end -}}

View File

@@ -0,0 +1,187 @@
<!--
Render a local or remote image with responsive image sizing. Images are resized using default media breakpoints
and are converted to webp format. The image is processed using the quality setting specified in the [imaging]
section of the main config file (defaults to 75). A fallback image is provided for older browsers. The image is
wrapped in a figure if a caption is provided, else the image is wrapped in a div with a ratio constraint. The
partial supports the following arguments:
"url": Required relative url of the image, e.g. "img/example.jpg"
"mode": Optional flag indicating if the image should support color modes.
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". If set, the image is
resized and cropped to match the ratio. Else the original aspect ratio of the image is kept.
"outerClass": Optional class attribute of the outer div element, e.g. "img-wrap".
"innerClass": Optional class attribute of the inner img element, e.g. "rounded".
"title": Optional alternate text of the image.
"caption": Optional figure caption.
-->
{{- $validRatios := slice "1x1" "4x3" "16x9" "21x9" -}}
{{- $ratio := .ratio -}}
{{- $url := .url -}}
{{- $mode := false -}}
{{- with .mode -}}
{{ $mode = . -}}
{{- end -}}
{{- $outerClass := .outerClass -}}
{{- $innerClass := .innerClass -}}
{{- $title := .title -}}
{{- $caption := .caption -}}
{{- if ne (printf "%T" $mode) "bool" -}}
{{- errorf "partial [assets/image.html] - Invalid value for param 'mode'" -}}
{{- end -}}
{{- $modes := site.Params.main.modes | default (slice "light" "dark") -}}
<!-- Generate a fallback image of type jpg -->
{{- define "partials/image-default.html" -}}
{{- $img := .img -}}
{{- $ratio := .ratio -}}
{{- $width := "1400" -}}
{{- $dim := "" -}}
{{- $fallback := "" -}}
{{- with $img -}}
{{- if eq $ratio "4x3" -}}
{{- $dim = "1400x1050" }}
{{- else if eq $ratio "1x1" -}}
{{- $dim = "1400x1400" }}
{{- else if eq $ratio "16x9" -}}
{{- $dim = "1400x788" -}}
{{- else if eq $ratio "21x9" -}}
{{- $dim = "1400x600" -}}
{{- else -}}
{{- $dim = printf "%sx%d" $width (int (math.Round (mul (div (float $width) $img.Width) $img.Height))) -}}
{{- end -}}
{{- if $ratio -}}
{{- $fallback = ($img.Fill (printf "%s jpg" $dim)) -}}
{{- else -}}
{{- $fallback = ($img.Fit (printf "%s jpg" $dim)) -}}
{{- end -}}
{{- $clean := path.Ext $img.RelPermalink -}}
{{- $ext := path.Ext $img.RelPermalink -}}
{{- $fallback = $fallback | resources.Copy (replace $img.RelPermalink $clean (printf "-%s%s" $dim $ext)) -}}
{{- end -}}
{{- return $fallback -}}
{{- end -}}
<!-- Generate a image set of type webp -->
{{- define "partials/image-scaled.html " -}}
{{- $img := .img -}}
{{- $ratio := .ratio -}}
{{- $imgset := "" -}}
{{- $widths := slice "576" "768" "992" "1200" "1400" -}}
{{- $dims := slice -}}
{{- with $img -}}
{{- if eq $ratio "4x3" -}}
{{- $dims = slice "576x432" "768x576" "992x744" "1200x900" "1400x1050" -}}
{{- else if eq $ratio "1x1" -}}
{{- $dims = slice "576x576" "768x768" "992x992" "1200x1200" "1400x1400" -}}
{{- else if eq $ratio "16x9" -}}
{{- $dims = slice "576x324" "768x432" "992x558" "1200x675" "1400x788" -}}
{{- else if eq $ratio "21x9" -}}
{{- $dims = slice "576x247" "768x329" "992x425" "1200x514" "1400x600" -}}
{{- else -}}
{{- range $width := $widths -}}
{{- $dims = $dims | append (printf "%sx%d" $width (int (math.Round (mul (div (float $width) $img.Width) $img.Height)))) -}}
{{- end -}}
{{- end -}}
{{- $scaled := "" -}}
{{- range $index, $dim := $dims -}}
{{- $clean := path.Ext $img.RelPermalink -}}
{{- if $ratio -}}
{{- $scaled = $img.Fill (printf "%s webp" $dim) -}}
{{- else -}}
{{- $scaled = $img.Fit (printf "%s webp" $dim) -}}
{{- end -}}
{{- $scaled = $scaled | resources.Copy (replace $img.RelPermalink $clean (printf "-%s.webp" $dim)) -}}
{{- $imgset = printf "%s, %s %sw" $imgset $scaled.RelPermalink (index $widths $index) -}}
{{- end -}}
{{- $imgset = strings.TrimPrefix ", " $imgset -}}
{{- end -}}
{{- return $imgset -}}
{{- end -}}
<!-- Define the img with optional caption -->
{{- define "partials/image-definition.html" -}}
{{- $ratio := .ratio -}}
{{- $url := .url -}}
{{- $outerClass := .outerClass -}}
{{- $innerClass := .innerClass -}}
{{- $title := .title -}}
{{- $caption := .caption -}}
{{- $fallbackURL := "" -}}
{{- $imgset := "" -}}
{{- $mode := .mode -}}
{{- $modes := .modes -}}
{{- if hasSuffix $url "svg" -}}
{{- $fallbackURL = $url -}}
{{- else -}}
{{- $img := partial "utilities/GetImage.html" (dict "url" $url) -}}
{{- if $img -}}
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio) -}}
{{- $fallbackURL = $fallback.RelPermalink -}}
{{- $imgset = partial "partials/image-scaled.html " (dict "img" $img "ratio" $ratio) -}}
{{- end -}}
{{- end -}}
{{- range $none := $modes -}}
{{- if ne $none $mode -}}
{{- $outerClass = printf "%s d-none-%s" (or $outerClass "") $none -}}
{{- end -}}
{{- end -}}
{{- if $caption -}}
<figure {{ with $outerClass }}class="{{ . }}"{{ end }}>
{{ end }}
<div class="{{ with $ratio }}ratio ratio-{{ . }}{{ end }}{{ if not $caption }} {{ $outerClass }}{{ end }}">
<img class="img-fluid {{ $innerClass }}"
{{ with $imgset -}}
srcset="{{ . }}"
sizes="100vw"
{{- end }}
src="{{ $fallbackURL }}"
alt="{{ $title }}">
</div>
{{- if $caption -}}
<figcaption class="figure-caption">{{ $caption | safeHTML }}</figcaption>
</figure>
{{- end -}}
{{- end -}}
<!-- Initiate the regular or color-mode image -->
{{- if $mode -}}
{{- $ext := path.Ext $url -}}
{{- $base := strings.TrimSuffix $ext $url -}}
{{- range $suffix := $modes -}}
{{- $base = strings.TrimSuffix (printf "-%s" $suffix) $base -}}
{{- end -}}
{{- range $suffix := $modes -}}
{{- $image := printf "%s-%s%s" $base $suffix $ext -}}
{{- partial "partials/image-definition.html" (dict
"ratio" $ratio
"url" $image
"outerClass" $outerClass
"innerClass" $innerClass
"title" $title
"caption" $caption
"mode" $suffix
"modes" $modes)
-}}
{{- end -}}
{{- else -}}
{{- partial "partials/image-definition.html" (dict
"ratio" $ratio
"url" $url
"outerClass" $outerClass
"innerClass" $innerClass
"title" $title
"caption" $caption)
-}}
{{- end -}}

View File

@@ -0,0 +1,87 @@
<!--
Displays a list items with a thumbnail alternating between left and right alignment. The partial supports the
following arguments:
"page" Required context of the current page.
"list" Required array of pages.
"title" Optional title of the card group.
"type" Optional type of the tab group, either "tabs", "pills", or "underline".
"vertical" Optional flag to show vertical tabs instead of horizontal tabs (default).
"class": Optional class attribute of the tab group, e.g. “nav-fill”.
In addition, the following arguments are passed to the individual tabs.
"class" Optional class attribute of the tab element, e.g. “w-50”.
"color": Optional theme color of the tab, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", or "body". By default, no color is specified.
-->
<!-- Inline partial to render the list item's content -->
{{- define "partials/list-content.html" -}}
{{- $title := .title -}}
{{- $content := .content -}}
<h2>{{ $title }}</h2>
<div class="fs-md-5 fs-6">{{ $content }}</div>
{{- end -}}
<!-- Inline partial to render the list item's thumbnail -->
{{- define "partials/list-img.html" -}}
{{- $thumbnail := .thumbnail -}}
{{- $style := .style -}}
{{- $mode := .mode -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "outerClass" $style "mode" $mode) -}}
{{- end -}}
{{- $page := .page -}}
{{- if ne (printf "%T" $page) "*hugolib.pageState" -}}
{{- errorf "partial [assets/list.html] - Invalid value for param 'page'" -}}
{{- end -}}
{{- $supportedTypes := slice "page.Pages" "resource.Resources" -}}
{{ $list := .list }}
{{- if not (in $supportedTypes (printf "%T" $list)) -}}
{{- errorf "partial [assets/list.html] - Invalid value for param 'list'" -}}
{{- end -}}
{{- $title := .title -}}
{{- $class := .class -}}
{{- $color := .color -}}
{{ $vertical := false }}
{{ $type := "pills" }}
<div class="d-none d-md-block p-0">
{{- range $index, $item := $list -}}
{{- $odd := eq (mod $index 2) 1 -}}
<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="col-6{{ if $odd }} order-last{{ end }}">
{{- $style := "reveal fade-bottom" -}}
{{ if $item.Params.tilted }}
{{- $style = "reveal fade-bottom-n5 rotate-n5 ps-3" -}}
{{- if $odd }}{{ $style = "reveal fade-bottom-5 rotate-5 pe-3" }}{{ end }}
{{ end }}
{{ partial "partials/list-img.html" (dict "thumbnail" $item.Params.Thumbnail "style" $style "mode" $item.Params.colormode) }}
</div>
<div class="col-6{{ if $odd }} order-first{{ end }} psw-lg-5 p-5">
{{ partial "partials/list-content.html" (dict "title" $item.Title "content" (or $item.Description $item.Content)) }}
</div>
</div>
</div>
{{ end -}}
</div>
<div class="d-md-none">
{{- range $index, $item := $list -}}
{{- $odd := eq (mod $index 2) 1 -}}
<div class="container d-flex flex-column">
<div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2">
<div class="col-12 text-center">
{{ partial "partials/list-img.html" (dict "thumbnail" $item.Params.Thumbnail "mode" $item.Params.colormode) }}
</div>
<div class="col-12 p-3">
{{ partial "partials/list-content.html" (dict "title" $item.Title "content" (or $item.Description $item.Content)) }}
</div>
</div>
</div>
{{ end -}}
</div>

View File

@@ -0,0 +1,112 @@
<!--
Displays a tab group of multiple items. Each provided page resource is rendered as a tab pane. The shortcode
supports the following arguments:
"page" Required context of the current page.
"list" Required array of pages.
"title" Optional title of the tab group.
"type" Optional type of the tab group, either "tabs", "pills" (default), or "underline".
"vertical" Optional flag to show vertical tabs instead of horizontal tabs (default).
"class" Optional class attribute of the tab group, e.g. “nav-fill”.
"pane" Optional style of the panes, either "none" (default) or "persona".
"width" Optional responsive width of the tab group, either "50" or "100" (default).
In addition, the following arguments are passed to the individual tabs.
"class" Optional class attribute of the tab element, e.g. “w-50”.
"color": Optional theme color of the tab, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", or "body". By default, no color is specified.
-->
{{- $page := .page -}}
{{- if ne (printf "%T" $page) "*hugolib.pageState" -}}
{{- errorf "partial [assets/nav.html] - Invalid value for param 'page'" -}}
{{- end -}}
{{- $id := "0" -}}
{{- with .id -}}
{{ $id = . }}
{{ end }}
{{- $supportedTypes := slice "page.Pages" "resource.Resources" -}}
{{ $list := .list }}
{{- if not (in $supportedTypes (printf "%T" $list)) -}}
{{- errorf "partial [assets/nav.html] - Invalid value for param 'list'" -}}
{{- end -}}
{{ $pane := "none" }}
{{ with .pane }}
{{- $supportedPanes := slice "none" "persona" -}}
{{- $pane = . }}
{{- if not (in $supportedPanes $pane) -}}
{{- errorf "partial [assets/nav.html] - Invalid value for param 'pane'" -}}
{{- end -}}
{{ end }}
{{ $supportedWidths := slice 50 100 -}}
{{ $widthParam := 100 -}}
{{ $width := 100 }}
{{ with .width }}{{ $widthParam = . }}{{ end -}}
{{ if in $supportedWidths $widthParam -}}
{{ $width = int $widthParam }}
{{ else -}}
{{ errorf "partial [assets/nav.html] - Invalid value for param 'width': %s" $widthParam -}}
{{ end -}}
{{- $title := .title -}}
{{- $class := .class -}}
{{- $color := .color -}}
{{ $supportedFlags := slice "true" "false" -}}
{{ $verticalParam := "false" -}}
{{ $vertical := false }}
{{ with .vertical }}{{ $verticalParam = . }}{{ end -}}
{{ if in $supportedFlags $verticalParam -}}
{{ if eq $verticalParam "true" }}{{ $vertical = true }}{{ else }}{{ $vertical = false }}{{ end -}}
{{ else -}}
{{ errorf "partial [assets/nav.html] - Invalid value for param 'vertical': %s" $verticalParam -}}
{{ end -}}
{{ $type := "pills" }}
{{ with .type }}
{{ $type = . -}}
{{ $supportedNavTypes := slice "tabs" "pills" "underline" -}}
{{ if $type }}
{{ if not (in $supportedNavTypes $type) -}}
{{ errorf "partial [assets/nav.html] - Invalid value for param 'type': %s" $type -}}
{{ end -}}
{{ end -}}
{{ end -}}
<div class="{{ if eq $width 50 }}col-sm-12 col-md-10 col-lg-8 col-xl-6{{ else }}col-12{{ end }} mx-auto pt-5 pb-5">
{{ if $vertical }}<div class="d-flex align-items-start">{{ end }}
<div class="nav{{ with $type }} nav-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}{{ if $vertical }} flex-column{{ end }}" id="nav-{{ $id }}" role="tablist"{{ if $vertical }} aria-orientation="vertical"{{ end }}>
{{- range $index, $item := $list -}}
{{ $show := eq $index 0}}
<button class="nav-link text-nowrap{{ if $show }} active{{ end }}" id="nav-{{ $id }}-btn-{{ $index }}" data-bs-toggle="pill" data-bs-target="#nav-{{ $id }}-{{ $index }}"
type="button" role="tab" aria-controls="nav-{{ $id }}-{{ $index }}" aria-selected="{{ if eq $index 0 }}true{{ else }}false{{ end }}">
{{ $item.Title }}
</button>
{{ end -}}
</div>
<div class="tab-content {{ if eq $type "tabs" }}border border-top-0 p-3{{ else if $vertical }}ms-3{{ else }}mt-3{{ end }}">
{{ range $index, $item := $list }}
{{ $header := $item.Title }}
{{ $body := $item.Content }}
{{ $show := eq $index 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" -}}
{{- partial "assets/persona.html" (dict
"title" $item.Title
"class" $class
"color" $color
"content" (or $item.Description $item.Content)
"thumbnail" $item.Params.Thumbnail
) -}}
{{- else -}}
{{- (or $item.Description $item.Content) -}}
{{- end -}}
</div>
{{ end }}
</div>
{{ if $vertical }}</div>{{ end }}
</div>

View File

@@ -5,13 +5,49 @@
"size" Optional size of the button, either "sm", "md" (default), or "lg". "size" Optional size of the button, either "sm", "md" (default), or "lg".
"fixed" Optional flag to indicate the navbar should stick to the top, defaults to false. "fixed" Optional flag to indicate the navbar should stick to the top, defaults to false.
"color" Optional background color of the navbar, either "primary", "secondary", "success", "color" Optional background color of the navbar, either "primary", "secondary", "success",
"danger", "warning", "info", "light", "dark", "white" or "black". The default color is none. "danger", "warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". The
default color is none.
"mode" Optional flag to include a color mode switcher, default is "true" (if dark mode is enabled).
"search" Optional flag to include a search input, default is "true". "search" Optional flag to include a search input, default is "true".
"logo" Optional address of the logo image, defaults to the parameter "logo" set in the "main" section of "logo" Optional address of the logo image, defaults to the parameter "logo" set in the "main" section of
the site's parameter configuration. the site's parameter configuration.
"title" Optional brand title, displayed when the logo is not set. Defaults to the site's title. "title" Optional brand title, displayed when the logo is not set. Defaults to the site's title.
--> -->
<!-- Inline partial to render the color mode switcher -->
{{- define "partials/navbar-mode.html" -}}
{{- $id := .id -}}
{{- $size := .size -}}
{{- $collapsed := .collapsed -}}
<li class="nav-item dropdown {{ if $collapsed }}d-{{ $size }}-none{{ else }}d-none d-{{ $size }}-block{{ end }}">
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false" id="navbar-color-theme">
{{- partial "assets/icon.html" (dict "icon" "fas sun theme-icon-active") }} {{ if $collapsed }} {{ T "colorMode" }} {{ end }}
<span class="d-md-none"></span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-color-theme">
<li>
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" data-bs-theme-value="light" href="#!">
{{- partial "assets/icon.html" (dict "icon" "fas sun theme-icon") }}
{{ T "colorLight" }}
</a>
</li>
<li>
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" data-bs-theme-value="dark" href="#!">
{{- partial "assets/icon.html" (dict "icon" "fas moon theme-icon") }}
{{ T "colorDark" }}
</a>
</li>
<li>
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" data-bs-theme-value="auto" href="#!">
{{- partial "assets/icon.html" (dict "icon" "fas circle-half-stroke theme-icon" ) }}
{{ T "colorAuto" }}
</a>
</li>
</ul>
</li>
{{- end -}}
{{- $supportedFlags := slice "true" "false" -}} {{- $supportedFlags := slice "true" "false" -}}
{{- $id := 0 -}} {{- $id := 0 -}}
@@ -19,21 +55,21 @@
{{- $page := .page -}} {{- $page := .page -}}
{{- if not $page -}} {{- if not $page -}}
{{- errorf "Missing value for param 'page'" -}} {{- errorf "partial [assets/navbar.html] - Missing value for param 'page'" -}}
{{- end -}} {{- end -}}
{{- $menuName := "main" }} {{- $menuName := "main" }}
{{- with .menus }}{{ $menuName = .}}{{ end -}} {{- with .menus }}{{ $menuName = .}}{{ end -}}
{{- $menus := index site.Menus $menuName -}} {{- $menus := index site.Menus $menuName -}}
{{- if or (ne (printf "%T" $menus) "navigation.Menu") (ne (index $menus 0).Menu $menuName) -}} {{- if or (ne (printf "%T" $menus) "navigation.Menu") (ne (index $menus 0).Menu $menuName) -}}
{{- errorf "Invalid value for param 'menus': %s" $menuName -}} {{- errorf "partial [assets/navbar.html] - Invalid value for param 'menus': %s" $menuName -}}
{{- end -}} {{- end -}}
{{- $size := "md" -}} {{- $size := "md" -}}
{{- with .size }}{{ $size = . }}{{ end -}} {{- with .size }}{{ $size = . }}{{ end -}}
{{- $supportedSizes := slice "xs" "sm" "md" "lg" "xl" -}} {{- $supportedSizes := slice "xs" "sm" "md" "lg" "xl" -}}
{{- if not (in $supportedSizes $size) -}} {{- if not (in $supportedSizes $size) -}}
{{- errorf "Invalid value for param 'size': %s" $size -}} {{- errorf "partial [assets/navbar.html] - Invalid value for param 'size': %s" $size -}}
{{- end -}} {{- end -}}
{{- $fixedParam := "false" -}} {{- $fixedParam := "false" -}}
@@ -42,15 +78,15 @@
{{- if in $supportedFlags $fixedParam -}} {{- if in $supportedFlags $fixedParam -}}
{{- if eq $fixedParam "true" }}{{ $fixed = true }}{{ else }}{{ $fixed = false }}{{ end -}} {{- if eq $fixedParam "true" }}{{ $fixed = true }}{{ else }}{{ $fixed = false }}{{ end -}}
{{- else -}} {{- else -}}
{{- errorf "Invalid value for param 'fixed': %s" $fixedParam -}} {{- errorf "partial [assets/navbar.html] - Invalid value for param 'fixed': %s" $fixedParam -}}
{{- end -}} {{- end -}}
{{- $color := "" -}} {{- $color := "" -}}
{{- with .color -}} {{- with .color -}}
{{- $color = . -}} {{- $color = . -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" -}} {{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
{{- if not (in $supportedColors $color) -}} {{- if not (in $supportedColors $color) -}}
{{- errorf "Invalid value for param 'color': %s" $color -}} {{- errorf "partial [assets/navbar.html] - Invalid value for param 'color': %s" $color -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
@@ -60,11 +96,20 @@
{{- if in $supportedFlags $searchParam -}} {{- if in $supportedFlags $searchParam -}}
{{- if eq $searchParam "true" }}{{ $search = true }}{{ else }}{{ $search = false }}{{ end -}} {{- if eq $searchParam "true" }}{{ $search = true }}{{ else }}{{ $search = false }}{{ end -}}
{{- else -}} {{- else -}}
{{- errorf "Invalid value for param 'search': %s" $searchParam -}} {{- errorf "partial [assets/navbar.html] - Invalid value for param 'search': %s" $searchParam -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
{{- $enableDarkMode := default true site.Params.main.enableDarkMode -}} {{- $enableDarkMode := default true site.Params.main.enableDarkMode -}}
{{- with .mode -}}
{{- $darkModeParam := . -}}
{{- if in $supportedFlags $darkModeParam -}}
{{- if eq $darkModeParam "true" }}{{ $enableDarkMode = site.Params.main.enableDarkMode }}{{ else }}{{ $enableDarkMode = false }}{{ end -}}
{{- else -}}
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'darkMode': %s" $darkModeParam -}}
{{- end -}}
{{- end -}}
{{- $enableLanguage := or $page.IsTranslated site.IsMultiLingual -}} {{- $enableLanguage := or $page.IsTranslated site.IsMultiLingual -}}
{{- $logo := site.Params.navigation.logo -}} {{- $logo := site.Params.navigation.logo -}}
@@ -79,19 +124,21 @@
{{- $pre := .Pre -}} {{- $pre := .Pre -}}
{{- $post := .Post -}} {{- $post := .Post -}}
<nav class="navbar navbar-expand-{{ $size }} {{ with $color }}bg-{{ . }}{{ end }} {{ if $fixed }}fixed-top{{ end }} p-3"> <nav class="navbar navbar-expand-{{ $size }} {{ with $color }}bg-{{ . }}{{ end }} {{ if $fixed }}fixed-top{{ end }} p-4">
<div class="container-fluid"> <div class="container-xxl p-0">
<!-- Insert sidebar toggler when applicable --> <!-- Insert sidebar toggler when applicable -->
{{- if $page.Scratch.Get "sidebar" -}} <div class="d-flex">
<button class="navbar-toggler collapsed ms-n3" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvass-sidebar" aria-controls="offcanvass-sidebar" aria-label="{{ T "toggleSidebar" }}"> {{- if $page.Scratch.Get "sidebar" -}}
{{- partial "assets/icon.html" (dict "icon" "fas ellipsis") -}} <button class="navbar-toggler fw-30 collapsed p-0 mx-auto" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvass-sidebar" aria-controls="offcanvass-sidebar" aria-label="{{ T "toggleSidebar" }}">
</button> {{- partial "assets/icon.html" (dict "icon" "fas ellipsis") -}}
{{- else -}} </button>
<!-- Insert invisible sidebar toggler to center logo correctly on smaller screens --> {{- else -}}
<button class="navbar-toggler collapsed ms-n3 invisible" type="button"> <!-- Insert invisible sidebar toggler to center logo correctly on smaller screens -->
{{- partial "assets/icon.html" (dict "icon" "fas ellipsis") -}} <button class="navbar-toggler fw-30 collapsed p-0 mx-auto invisible" type="button">
</button> {{- partial "assets/icon.html" (dict "icon" "fas ellipsis") -}}
{{- end -}} </button>
{{- end -}}
</div>
<!-- Insert the brand logo or name --> <!-- Insert the brand logo or name -->
<a class="navbar-brand mx-auto" href="{{ site.Home.RelPermalink }}"> <a class="navbar-brand mx-auto" href="{{ site.Home.RelPermalink }}">
@@ -103,12 +150,14 @@
</a> </a>
<!-- Insert main navigation toggler --> <!-- Insert main navigation toggler -->
<button id="main-nav-toggler" class="navbar-toggler collapsed me-n3" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent-{{ $id }}" <div class="d-flex fw-30">
aria-controls="navbarSupportedContent-{{ $id }}" aria-expanded="false" aria-label="{{ T "toggleMainNav" }}"> <button id="main-nav-toggler" class="navbar-toggler collapsed p-0" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent-{{ $id }}"
<span class="toggler-icon top-bar emphasis"></span> aria-controls="navbarSupportedContent-{{ $id }}" aria-expanded="false" aria-label="{{ T "toggleMainNav" }}">
<span class="toggler-icon middle-bar emphasis"></span> <span class="toggler-icon top-bar emphasis"></span>
<span class="toggler-icon bottom-bar emphasis"></span> <span class="toggler-icon middle-bar emphasis"></span>
</button> <span class="toggler-icon bottom-bar emphasis"></span>
</button>
</div>
<div class="navbar-collapse collapse" id="navbarSupportedContent-{{ $id }}"> <div class="navbar-collapse collapse" id="navbarSupportedContent-{{ $id }}">
<!-- Insert search input --> <!-- Insert search input -->
@@ -125,20 +174,21 @@
{{- $baseurl := urls.Parse $.Site.Params.Baseurl -}} {{- $baseurl := urls.Parse $.Site.Params.Baseurl -}}
{{- if .HasChildren -}} {{- if .HasChildren -}}
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link {{ if $active }}active{{ end }} dropdown-toggle" href="{{ .URL }}" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <a class="nav-link {{ if $active }}active{{ end }} dropdown-toggle" href="{{ .URL | relLangURL }}" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{{ if $active }}<span class="active">{{ .Name }}</span>{{ else }}{{ .Name }}{{ end }} {{ if $active }}<span class="active">{{ .Name }}</span>{{ else }}{{ .Name }}{{ end }}
</a> </a>
<ul class="dropdown-menu dropdown-menu-end"> <ul class="dropdown-menu dropdown-menu-end">
{{- range .Children -}} {{- range .Children -}}
<li><a class="dropdown-item" href="{{ .URL }}">{{ .Name }}</a></li> {{- $child_active := eq $page_url (.URL | relLangURL) -}}
<li><a class="dropdown-item {{ if $child_active }}active{{ end }}" href="{{ .URL | relLangURL }}">{{ .Name }}</a></li>
{{- end -}} {{- end -}}
</ul> </ul>
</li> </li>
{{- else -}} {{- else -}}
<li class="nav-item"> <li class="nav-item">
{{- $external := ne $url.Host $baseurl.Host -}} {{- $external := ne $url.Host $baseurl.Host -}}
<a class="nav-link {{ if $active }}active{{ end }}" <a class="nav-link {{ if $active }}active{{ end }}"
href="{{ with .Page }}{{ .RelPermalink }}{{ else }}{{ .URL | relLangURL }}{{ end }}" {{ if $external }}target="_blank" {{ end }}> href="{{ with .Page }}{{ .RelPermalink }}{{ else }}{{ .URL | relLangURL }}{{ end }}" {{ if $external }}target="_blank" rel="noopener noreferrer" {{ end }}>
{{- with $pre}}{{ . }}{{ end -}} {{- with $pre}}{{ . }}{{ end -}}
<span {{if $active }} class="active"{{end}}>{{ .Name }}</span> <span {{if $active }} class="active"{{end}}>{{ .Name }}</span>
{{- with $post}}{{ . }}{{ end -}} {{- with $post}}{{ . }}{{ end -}}
@@ -150,18 +200,22 @@
{{- if or $enableLanguage $enableDarkMode -}} {{- if or $enableLanguage $enableDarkMode -}}
<li class="nav-item py-2 py-md-1 col-12 col-md-auto"> <li class="nav-item py-2 py-md-1 col-12 col-md-auto d-none d-{{ $size }}-block">
<div class="vr d-none d-md-flex h-100 mx-md-2"></div> <div class="vr d-none d-md-flex h-100 mx-md-2"></div>
</li> </li>
<li><hr class="dropdown-divider-bg"></li>
{{- end -}} {{- end -}}
<!-- Insert language switcher if applicable --> <!-- Insert language switcher if applicable -->
{{- if $enableLanguage -}} {{- if $enableLanguage -}}
{{- $currentLang := $page.Language.Lang -}} {{- $currentLang := $page.Language.Lang -}}
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <a class="nav-link dropdown-toggle d-{{ $size }}-none" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{{- partial "assets/icon.html" (dict "icon" "fas globe") }} {{ T "languageSwitcherLabel" }} {{- partial "assets/icon.html" (dict "icon" "fas globe") }} {{ T "languageSwitcherLabel" }}
</a> </a>
<a class="nav-link dropdown-toggle d-none d-{{ $size }}-block" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{{- partial "assets/icon.html" (dict "icon" "fas globe") }}
</a>
<ul class="dropdown-menu dropdown-menu-end "> <ul class="dropdown-menu dropdown-menu-end ">
{{- if $page.IsTranslated -}} {{- if $page.IsTranslated -}}
{{- range $page.AllTranslations -}} {{- range $page.AllTranslations -}}
@@ -178,32 +232,8 @@
<!-- Insert color mode switcher --> <!-- Insert color mode switcher -->
{{- if $enableDarkMode -}} {{- if $enableDarkMode -}}
<li class="nav-item dropdown"> {{- partial "partials/navbar-mode.html" (dict "id" $id "size" $size "collapsed" true) -}}
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false" id="navbar-color-theme"> {{- partial "partials/navbar-mode.html" (dict "id" $id "size" $size "collapsed" false) -}}
{{- partial "assets/icon.html" (dict "icon" "fas sun theme-icon-active") }}
<span class="d-md-none"></span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-color-theme">
<li>
<a class="dropdown-item" data-bs-theme-value="light">
{{- partial "assets/icon.html" (dict "icon" "fas sun theme-icon") }}
{{ T "colorLight" }}
</a>
</li>
<li>
<a class="dropdown-item" data-bs-theme-value="dark">
{{- partial "assets/icon.html" (dict "icon" "fas moon theme-icon") }}
{{ T "colorDark" }}
</a>
</li>
<li>
<a class="dropdown-item" data-bs-theme-value="auto">
{{- partial "assets/icon.html" (dict "icon" "fas circle-half-stroke theme-icon" ) }}
{{ T "colorAuto" }}
</a>
</li>
</ul>
</li>
{{- end -}} {{- end -}}
</ul> </ul>
</div> </div>

View File

@@ -0,0 +1,94 @@
<!--
Displays a custom persona card. Either specify a valid path, or set the arguments title, href, content, and
thumbnail individually. The latter arguments override any page attributes.
The shortcode supports the following arguments:
"path" Optional path of the page, override with other parameters.
"title" Required title of the card.
"href" Optional address for the button or hyperlink.
"class" Optional class attribute of the card element, e.g. “w-50”.
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no
color is specified.
"content" Optional content of the card.
"thumbnail" Optional thumbnail image url, displayed on top or the left of the card.
-->
<!-- Inline partial to render the card's body -->
{{- define "partials/persona-body.html" -}}
{{- $title := .title -}}
{{- $href := .href -}}
{{- $color := .color -}}
{{- $content := .content -}}
<h3>{{ $title }}</h3>
{{ with $content }}<p>{{ . }}</p>{{ end -}}
{{- end -}}
{{- $page := "" }}
{{- if .path }}
{{- $page = site.GetPage .path }}
{{- if not $page }}
{{- errorf "partial [assets/persona.html] - Cannot find page: %s" .path -}}
{{- end }}
{{- end }}
{{- $title := .title -}}
{{- $href := .href -}}
{{- $content := .content -}}
{{- $thumbnail := .thumbnail -}}
{{- $color := "" -}}
{{- with .color }}{{ $color = . }}{{ end -}}
{{- if $color -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
{{- if not (in $supportedColors $color) -}}
{{- errorf "partial [assets/persona.html] - Invalid value for param 'color': %s" $color -}}
{{- end -}}
{{- end -}}
{{- with $page -}}
{{- if not $title }}{{ $title = .Title }}{{ end -}}
{{- if not $href }}{{ $href = .Permalink }}{{ end -}}
{{- if not $content }}{{ $content = .Content }}{{ end -}}
{{- if not $thumbnail }}{{ $thumbnail = .Params.thumbnail }}{{ end -}}
{{- end -}}
{{- $class := .class -}}
<div class="d-none d-md-block">
<div class="persona position-relative row mt-5 align-middle p-3">
<div class="col-2">
<div class="position-absolute top-50 start-0 translate-middle-y col-4 ps-3">
{{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "innerClass" "rounded-5") -}}
{{ end }}
</div>
</div>
<div class="col-10 {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} rounded-5 fs-md-5 fs-6 pe-5 pb-3">
<div class="row">
<div class="col-3"></div>
<div class="col-9">
{{- partial "persona-body.html" (dict "title" $title "href" $href "color" $color "content" $content) -}}
</div>
</div>
</div>
</div>
</div>
<div class="d-md-none">
<div class="persona position-relative row mt-5 align-middle p-3 ptw-5">
<div class="col-12">
<div class="position-absolute top-25 start-50 translate-middle col-6">
{{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "innerClass" "rounded-5") -}}
{{ end }}
</div>
</div>
<div class="col-12 {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} rounded-5 ptw-lg-5 ptw-3 ptw-sm-4 fs-md-5 fs-6 pb-3">
<div class="p-5">
{{- partial "persona-body.html" (dict "title" $title "href" $href "color" $color "content" $content) -}}
</div>
</div>
</div>
</div>

View File

@@ -1,6 +1,6 @@
<div class="d-flex ms-md-3"> <div class="d-flex ms-md-3">
<form class="search position-relative flex-grow-1 me-auto"> <form class="search position-relative flex-grow-1 me-auto">
<input id="search" class="form-control is-search" type="search" placeholder="{{ T "ui_search" }}" aria-label="{{ T "ui_search" }}" autocomplete="off"> <input id="search" class="form-control is-search" type="search" placeholder="{{ T "ui_search" }}" aria-label="{{ T "ui_search" }}" autocomplete="off">
<div id="suggestions" class="shadow bg-body rounded d-none"></div> <div id="suggestions" class="shadow bg-body rounded d-none" data-no-results="{{ T "ui_no_results" }}"></div>
</form> </form>
</div> </div>

View File

@@ -0,0 +1,46 @@
{{- $title := .title -}}
{{- $thumbnail := .thumbnail -}}
{{- $icon := .icon -}}
{{- $sectionHeader := .sectionHeader -}}
{{- $description := .description -}}
{{- $content := .content -}}
{{- define "partials/section-header-img.html" -}}
{{- $title := .title -}}
{{- $thumbnail := .thumbnail -}}
{{- $icon := .icon -}}
{{ $padding := 5 }}
{{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "outerClass" "h-100 card-img-wrap" "innerClass" "rounded-start card-img-h100" "title" $title) -}}
{{- else if $icon -}}
<div class="text-secondary fw-bold">
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-10x" $icon)) -}}
</div>
{{- end -}}
{{- end -}}
<div class="container-fluid p-4 px-xxl-0">
{{ with $title }}<p class="display-4 mt-3{{ if and page.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
{{ with $description }} <p class="lead mb-5">{{ . }}</p>{{ end }}
{{- if $content -}}
<div class="row row-cols-1 row-cols-lg-3 pt-5">
<div class="col col-lg-3 d-none d-lg-block"></div>
<div class="col col-sm-12 col-lg-6 text-center">
<div class="row row-cols-1{{ if ne $sectionHeader "justify-content-center" }} row-cols-sm-2{{ end }} row-gap-5 p-0 align-items-center flex-fill">
{{- if eq $sectionHeader "justify-content-center" -}}
<div class="col p-0 w-50 mx-auto pb-5">{{ partial "partials/section-header-img.html" (dict "title" $title "thumbnail" $thumbnail "icon" $icon )}}</div>
<div class="col fs-md-5 fs-6">{{ $content }}</div>
{{- else if eq $sectionHeader "justify-content-end" -}}
<div class="col p-0">{{ partial "partials/section-header-img.html" (dict "title" $title "thumbnail" $thumbnail "icon" $icon )}}</div>
<div class="col fs-md-5 fs-6 text-sm-start">{{ $content }}</div>
{{- else -}}
<div class="col fs-md-5 fs-6 text-sm-start">{{ $content }}</div>
<div class="col p-0">{{ partial "partials/section-header-img.html" (dict "title" $title "thumbnail" $thumbnail "icon" $icon )}}</div>
{{- end -}}
</div>
</div>
<div class="col col-lg-3 d-none d-lg-block"></div>
</div>
{{- end -}}
</div>

View File

@@ -1,17 +1,23 @@
{{- $page := .page }} {{- $page := .page }}
{{- $section := .section }} {{- $section := .section }}
{{- if not $section }}{{ errorf "Missing value for param 'section'" }}{{ end -}} {{- if not $section }}{{ errorf "partial [assets/section-list.html] - Missing value for param 'section'" }}{{ end -}}
{{- $home := .home }} {{- $home := .home }}
{{ if ne (printf "%T" $home) "bool" }} {{ if ne (printf "%T" $home) "bool" }}
{{ errorf "Invalid value for param 'home'"}} {{ errorf "partial [assets/section-list.html] - Invalid value for param 'home'"}}
{{ end }} {{ end }}
{{- $title := .title -}} {{- $title := .title -}}
{{- $icon := .icon -}}
{{- $thumbnail := .thumbnail -}}
{{- $sectionHeader := .sectionHeader -}}
{{- $description := .description -}}
{{- $content := .content -}}
{{- $moreTitle := .moreTitle -}} {{- $moreTitle := .moreTitle -}}
{{- $sectionURL := .sectionURL -}} {{- $sectionURL := .sectionURL -}}
{{- $nested := .nested | default true -}}
{{- $paginate := true -}} {{- $paginate := true -}}
{{- $sort := "date" -}} {{- $sort := "date" -}}
{{- $reverse := true -}} {{- $order := "desc" -}}
{{- $separator := false -}}
{{- $orientation := "stacked" -}} {{- $orientation := "stacked" -}}
{{- $cols := 3 -}} {{- $cols := 3 -}}
{{- $color := "" -}} {{- $color := "" -}}
@@ -21,11 +27,19 @@
{{- $style := "" -}} {{- $style := "" -}}
{{- $homepage := 3 -}} {{- $homepage := 3 -}}
{{- $background := "" -}} {{- $background := "" -}}
{{- $layout := "card" -}}
{{- $pane := "none" -}}
{{- $type := "pills" -}}
{{- $vertical := "false" -}}
{{- $width := 100 -}}
{{- with (index site.Params $section) -}} {{- with (index site.Params.sections $section) -}}
{{- with index . "title" }}{{ $title = . }}{{ end -}} {{- with index . "title" }}{{ $title = or $.title . }}{{ end -}}
{{- with index . "sectionHeader" }}{{ $sectionHeader = . }}{{ end -}}
{{- with index . "sort" }}{{ $sort = . }}{{ end -}} {{- with index . "sort" }}{{ $sort = . }}{{ end -}}
{{- if (index . "reverse") }}{{ $reverse = true }}{{ else }}{{ $reverse = false }}{{ end -}} {{- if (index . "reverse") }}{{ $order = "desc" }}{{ else }}{{ $order = "asc" }}{{ end -}}
{{- if $home }}{{- if (isset . "nested") }}{{ $nested = (index . "nested") }}{{ end -}}{{ end -}}
{{- if (index . "separator") }}{{ $separator = true }}{{ else }}{{ $separator = false }}{{ end -}}
{{- with index . "orientation" }}{{ $orientation = . }}{{ end -}} {{- with index . "orientation" }}{{ $orientation = . }}{{ end -}}
{{- with index . "cols" }}{{ $cols = . }}{{ end -}} {{- with index . "cols" }}{{ $cols = . }}{{ end -}}
{{- with index . "color" }}{{ $color = . }}{{ end -}} {{- with index . "color" }}{{ $color = . }}{{ end -}}
@@ -35,52 +49,99 @@
{{- with index . "style" }}{{ $style = . }}{{ end -}} {{- with index . "style" }}{{ $style = . }}{{ end -}}
{{- with index . "homepage" }}{{ $homepage = . }}{{ end -}} {{- with index . "homepage" }}{{ $homepage = . }}{{ end -}}
{{- with index . "background" }}{{ $background = . }}{{ end -}} {{- with index . "background" }}{{ $background = . }}{{ end -}}
{{- with index . "layout" }}{{ $layout = . }}{{ end -}}
{{- with index . "pane" }}{{ $pane = . }}{{ end -}}
{{- with index . "type" }}{{ $type = . }}{{ end -}}
{{- with index . "vertical" }}{{ $vertical = . }}{{ end -}}
{{- with index . "width" }}{{ $width = . }}{{ end -}}
{{- end -}}
{{ if ne (printf "%T" $nested) "bool" }}
{{ errorf "partial [assets/section-list.html] - Invalid value for param 'nested'"}}
{{ end }}
{{ $list := "" }}
{{ if $nested }}
{{ $list = where site.RegularPages "Type" "in" $section }}
{{ else if $home }}
{{ $sectionPage := site.GetPage "section" $section }}
{{ $list = $sectionPage.RegularPages }}
{{ else }}
{{ $list = $page.RegularPages }}
{{ end }}
{{ $max := (len $list) -}}
{{ if eq $max 0 }}
{{- $bundle := site.GetPage $section -}}
{{- $list = $bundle.Resources.Match "*" -}}
{{- $max = len $list -}}
{{ end }}
{{- $list = sort $list (printf "Params.%s" $sort) $order -}}
{{- $supportedLayouts := slice "card" "list" "nav" -}}
{{- if not (in $supportedLayouts $layout) -}}
{{- errorf "partial [assets/section-list.html] - Invalid value for param 'layout': %s" $layout -}}
{{- end -}} {{- end -}}
{{- $list := where site.RegularPages "Type" "in" $section -}} {{ if gt $max 0 }}
{{- $max := (len $list) -}} {{- if $home -}}
{{- if $home -}} {{- $paginate = false -}}
{{- $paginate = false -}} {{- $max = int (math.Min $homepage $max) -}}
{{- $max = int (math.Min $homepage $max) -}} {{ end -}}
{{ end -}} {{- $cols = int (math.Min $cols $max) -}}
{{- $cols = int (math.Min $cols $max) -}} {{- $params := (dict
{{- if eq $sort "weight" -}}
{{- $list = $list.ByWeight -}}
{{- else if eq $sort "publication" -}}
{{- $list = $list.ByPublishDate -}}
{{- else if eq $sort "expiration" -}}
{{- $list = $list.ByExpiryDate -}}
{{- else if eq $sort "lastmod" -}}
{{- $list = $list.ByLastmod -}}
{{- else if eq $sort "length" -}}
{{- $list = $list.ByLength -}}
{{- else if eq $sort "title" -}}
{{- $list = $list.ByTitle -}}
{{- else if eq $sort "linktitle" -}}
{{- $list = $list.ByLinkTitle -}}
{{- else if ne $sort "date" -}}
{{- $list = $list.ByParam $sort -}}
{{- end -}}
{{- if $reverse -}}{{- $list = $list.Reverse -}}{{ end -}}
<div class="container-fluid flex-fill p-0{{ with $background }} bg-{{ . }}{{ end }}">
{{- partial "assets/card-group.html" (dict
"page" $page "page" $page
"list" $list "list" $list
"max" $max
"cols" $cols
"title" $title "title" $title
"href" $sectionURL "icon" $icon
"hrefTitle" $moreTitle "thumbnail" $thumbnail
"paginate" $paginate "sectionHeader" $sectionHeader
"description" $description
"content" $content
"class" $style "class" $style
"orientation" $orientation
"color" $color "color" $color
"padding" $padding )
"header" $header
"footer" $footer
)
-}} -}}
</div> {{- $partial := "" -}}
<div class="container-fluid {{ with $background }} bg-{{ . }}{{ end }}">
<div class="container-xxl flex-fill p-0">
{{- partial "assets/section-header.html" $params -}}
{{ if eq $layout "card" }}
{{- $partial = "assets/card-group.html" -}}
{{- $params = merge $params (dict
"max" $max
"cols" $cols
"href" $sectionURL
"hrefTitle" $moreTitle
"separator" $separator
"paginate" $paginate
"orientation" $orientation
"padding" $padding
"header" $header
"footer" $footer
)
-}}
{{ else if eq $layout "nav" }}
{{- $partial = "assets/nav.html" -}}
{{- $params = merge $params (dict
"layout" $layout
"id" $section
"pane" $pane
"type" $type
"vertical" $vertical
"width" $width
)
-}}
{{- else -}}
{{- $partial = "assets/list.html" -}}
{{- $params = merge $params (dict
"layout" $layout
)
-}}
{{- end -}}
{{- partial $partial $params -}}
</div>
</div>
{{- end -}}

View File

@@ -1,58 +1,110 @@
{{- $page := .page }} {{- $page := .page }}
{{- $section := $page.Section }} {{- $section := $page.Section }}
{{- $data := .menu -}} {{- $data := .menu -}}
{{- $version := .version -}}
{{- define "partials/sidebar/group.html" -}}
{{- $page := .page -}}
{{- $index := .index -}}
{{- $level := .level -}}
{{- $baseURL := .baseURL -}}
{{- $group := .group -}}
{{- $doc_slug := $group.title | urlize -}}
{{- $href := printf "%s/" (relLangURL (path.Join $baseURL $doc_slug)) -}}
{{- $collapsed := strings.HasPrefix $page.RelPermalink $href -}}
<li class="mb-1">
<button class="btn btn-toggle d-inline-flex align-items-center rounded border-0 collapsed" data-bs-toggle="collapse" data-bs-target="#sidebar-collapse-{{ $index }}-{{ $level }}" aria-expanded="{{ if $collapsed }}true{{ else }}false{{ end }}">
<div class="text-start flex-fill">{{ $group.title }}</div>
</button>
<div class="collapse {{ if $collapsed }}show{{ end }}" id="sidebar-collapse-{{ $index }}-{{ $level }}">
<ul class="btn-toggle-nav list-unstyled fw-normal {{ if eq $level 0}} pb-1 {{ end }}ps-3">
{{- range $item := $group.pages -}}
{{- if $item.pages -}}
{{ partial "partials/sidebar/group.html" (dict
"page" $page
"index" $index
"level" (add $level 1)
"baseURL" $href
"group" $item
)
}}
{{- else -}}
{{ partial "partials/sidebar/item.html" (dict
"page" $page
"sectionBreak" false
"level" $level
"baseURL" $href
"title" $item.title
)
}}
{{ end -}}
{{- end }}
</ul>
</div>
</li>
{{ end -}}
{{- define "partials/sidebar/item.html" -}}
{{ $page := .page }}
{{ $sectionBreak := .sectionBreak }}
{{- $level := .level -}}
{{ $baseURL := .baseURL}}
{{ $title := .title}}
{{- $doc_slug := $title | urlize -}}
{{- $href := printf "%s/" (relLangURL (path.Join $baseURL $doc_slug)) -}}
{{ $active := eq $page.RelPermalink $href }}
{{ if eq $level 0}}
<li class="mt-1 mb-1 {{ if $sectionBreak }}border-top{{ end }}"></li>
{{- $sectionBreak = false }}
<li>
<ul class="btn-toggle-nav list-unstyled fw-bold pb-1">
<li>
<a href="{{ $href }}" class="sidebar-item text-decoration-none rounded {{ if $active }}active{{ end }}">
{{ $title }}
</a>
</li>
</ul>
</li>
{{ else }}
<li>
<a href="{{ $href }}" class="sidebar-item text-decoration-none rounded small {{ if $active }}active{{ end }}">
{{ $title }}
</a>
</li>
{{ end }}
{{ end -}}
{{ if $data }} {{ if $data }}
<nav class="sidebar flex-shrink-0 ps-1 pt-3 sticky-top" aria-label="{{ (strings.FirstUpper $section) }} navigation"> <nav class="sidebar flex-shrink-0 ps-1 pt-3" aria-label="{{ (strings.FirstUpper $section) }} navigation">
{{- $url := split $page.Permalink "/" -}} {{- $sectionBreak := false -}}
{{- $page_slug := index $url (sub (len $url) 2) -}} {{- $level := 0 -}}
{{- $sectionBreak := false }} {{- $baseURL := relLangURL (path.Join $section $version) }}
<ul class="list-unstyled ps-0"> <ul class="list-unstyled ps-0">
{{- range $index, $group := $data -}} {{- range $index, $item := $data -}}
{{- $link := $group.title -}} {{- if $item.pages }}
{{- $link_slug := $link | urlize -}}
{{- if $group.pages -}}
{{- $link = index $group.pages 0 -}}
{{- $link_slug = $link.title | urlize -}}
{{- end -}}
{{- $group_slug := $group.title | urlize -}}
{{- $is_active_group := eq $page.Params.group $group_slug -}}
{{- if $group.pages }}
{{- $sectionBreak = true }} {{- $sectionBreak = true }}
<li class="mb-1"> {{ partial "partials/sidebar/group.html" (dict
<button class="btn btn-toggle d-inline-flex align-items-center rounded border-0 collapsed" data-bs-toggle="collapse" data-bs-target="#sidebar-collapse-{{ $index }}" aria-expanded="{{ if $is_active_group }}true{{ else }}false{{ end }}"> "page" $page
<div class="text-start flex-fill">{{ $group.title }}</div> "index" $index
</button> "level" (add $level 1)
<div class="collapse {{ if $is_active_group }}show{{ end }}" id="sidebar-collapse-{{ $index }}"> "baseURL" $baseURL
<ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small"> "group" $item
{{- range $doc := $group.pages -}} )
{{- $doc_slug := $doc.title | urlize -}} }}
{{- $is_active := and $is_active_group (eq $page_slug $doc_slug) -}}
{{- $href := relLangURL (path.Join $section site.Params.docs.version $group_slug $doc_slug) -}}
<li><a href="{{ $href }}" class="d-inline-flex sidebar-item text-decoration-none rounded {{ if $is_active }}active{{ end }}">{{ $doc.title }}</a></li>
{{- end }}
</ul>
</div>
</li>
{{- else }} {{- else }}
<li class="mt-1 mb-1 {{ if $sectionBreak }}border-top{{ end }}"></li> {{ partial "partials/sidebar/item.html" (dict
{{- $sectionBreak = false }} "page" $page
<li> "sectionBreak" $sectionBreak
<ul class="btn-toggle-nav list-unstyled fw-bold pb-1"> "level" $level
<li> "baseURL" $baseURL
{{- $doc_slug := $group.title | urlize -}} "title" $item.title
{{- $is_active := and $is_active_group (eq $page_slug $doc_slug) -}} )
{{- $href := relLangURL (path.Join $section site.Params.docs.version $doc_slug) -}} }}
<a href="{{ $href }}" class="d-inline-flex sidebar-item text-decoration-none rounded {{ if $is_active }}active{{ end }}">
{{ $group.title }}
</a>
</li>
</ul>
</li>
{{- end }} {{- end }}
{{- end }} {{- end }}
</ul> </ul>

View File

@@ -0,0 +1,23 @@
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" .TableOfContents) -}}
{{ if (gt $items 1) -}}
<div class="d-grid gap-2 mx-auto">
{{ partial "assets/button.html" (dict
"title" (T "toc")
"color" "secondary"
"outline" "true"
"class" "toc-button"
"icon" "fas sort"
"justify" "between"
"collapse" "toc-collapse"
"order" "last")
-}}
</div>
<p>
<div class="collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll" id="toc-collapse">
<div class="toc toc-panel text-body-secondary p-2">
<small>{{ .TableOfContents }}</small>
</div>
</div>
</p>
{{ end -}}

View File

@@ -1,6 +1,6 @@
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" .TableOfContents) -}} {{ $items := len (findRE "<li.*?>(.|\n)*?</li>" .TableOfContents) -}}
{{ if (gt $items 1) -}} {{ if (gt $items 1) -}}
<div class="toc mb-5 my-md-0 ps-xl-3 mb-lg-5 p-3 text-body-secondary sticky-top"> <div class="toc toc-sidebar mb-5 my-md-0 ps-xl-3 mb-lg-5 p-3 text-body-secondary sticky-top">
<strong class="d-block h6 my-2 pb-2 border-bottom">{{ T "toc" }}</strong> <strong class="d-block h6 my-2 pb-2 border-bottom">{{ T "toc" }}</strong>
{{ .TableOfContents }} {{ .TableOfContents }}
</div> </div>

View File

@@ -1,105 +0,0 @@
<!--
Displays a button. The shortcode supports the following arguments:
"title" Required title of the button.
"href" Optional address for the button or hyperlink.
"id" Optional id of the button, to be used in the DOM.
"state" Optional state of the button, either "enabled" (default), "disabled", "active", or "inactive".
"size" Optional size of the button, either "sm", "md" (default), or "lg".
"color" Optional theme color of the element, either "primary" (default), "secondary", "success",
"danger", "warning", "info", "light", "dark", "white" or "black".
"outline" Optional flag indicating the button should be outlined, either "false" (default) or "true".
"badge" Optional positioned badge to display on top of the button.
"aria-label" Optional assistive label for the badge.
"tooltip" Optional text to display in a tooltip. Cannot be used together with collapse. Ignored for active/
inactive buttons.
"collapse" Optional panel to collapse. Cannot be used together with tooltip. Ignored for active/inactive buttons.
"type" Optional type of the element, either "link" or "button" (default).
"placement" Optional position of the tooltip: "top" (default), "bottom", "left", or "right".
-->
{{ $title := trim .title " \r\n" -}}
{{ if not $title -}}
{{ errorf "Missing element title" -}}
{{ end -}}
{{ $id := .id }}
{{ $state := "enabled" -}}
{{ with .state }}{{ $state = . }}{{ end -}}
{{ $supportedStates := slice "enabled" "disabled" "active" "inactive" -}}
{{ if not (in $supportedStates $state) -}}
{{ errorf "Invalid value for param 'state': %s" $state -}}
{{ end -}}
{{ $size := "md" -}}
{{ with .size }}{{ $size = . }}{{ end -}}
{{ $supportedSizes := slice "sm" "md" "lg" -}}
{{ if not (in $supportedSizes $size) -}}
{{ errorf "Invalid value for param 'size': %s" $size -}}
{{ end -}}
{{ $color := "primary" -}}
{{ with .color }}{{ $color = . }}{{ end -}}
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" -}}
{{ if not (in $supportedColors $color) -}}
{{ errorf "Invalid value for param 'color': %s" $color -}}
{{ end -}}
{{ $outline := false -}}
{{ with .outline }}{{ $outline = . }}{{ end -}}
{{ $badge := "" -}}
{{ with .badge }}{{ $badge = . }}{{ end -}}
{{ $label := "" -}}
{{ with .label }}{{ $label = . }}{{ end -}}
{{ $tooltip := "" -}}
{{ if not (strings.HasSuffix $state "active") -}}
{{ with .tooltip }}{{ $tooltip = . }}{{ end -}}
{{ end -}}
{{ $href := .href -}}
{{ $collapse := "" -}}
{{ if not (strings.HasSuffix $state "active") -}}
{{ with .collapse }}{{ $collapse = . }}{{ $href = printf "#%s" . }}{{ end -}}
{{ end -}}
{{ if $tooltip -}}
{{ if $collapse -}}
{{ errorf "Cannot use tooltip and collapse at the same time" -}}
{{ end -}}
{{ end -}}
{{ $type := "button" -}}
{{ with .type }}{{ $type = . }}{{ end -}}
{{ $supportedTypes := slice "button" "link" -}}
{{ if not (in $supportedTypes $type) -}}
{{ errorf "Invalid value for param 'type': %s" $type -}}
{{ end -}}
{{ $placement := "top" -}}
{{ with .placement }}{{ $placement = . }}{{ end -}}
{{ $supportedPlacements := slice "top" "bottom" "left" "right" -}}
{{ if not (in $supportedPlacements $placement) -}}
{{ errorf "Invalid value for param 'placement': %s" $placement -}}
{{ end -}}
<a {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end }}
{{ with $id }}id="{{ . }}"{{ end }}
{{ if eq $type "button" }}class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }}" role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end }}
{{ else }}class="link-{{ $color }} position-relative"{{ end }}
{{ with $tooltip }}data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end }}
{{ with $collapse }}data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end }}
{{ if eq $state "active" }}data-bs-toggle="button" aria-pressed="true"{{ end }}
{{ if eq $state "inactive" }}data-bs-toggle="button" aria-pressed="false"{{ end }}
>
{{ $title -}}
{{ with $badge }}
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">
{{ . }}
{{ with $label }}<span class="visually-hidden">{{ . }}</span>{{ end }}
</span>
{{ end }}
</a>

View File

@@ -1,7 +1,9 @@
<footer class="container-fluid text-center p-3"> <footer class="container-fluid text-center p-3">
<small class="text-secondary"> <div class="container-xxl text-center">
{{- $copyright := printf "%s © %s %s All rights reserved." (i18n "copyright") (dateFormat "2006" now) .Site.Title }} <small class="text-secondary">
{{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }} {{- $copyright := printf "%s © %s %s All rights reserved." (i18n "copyright") (dateFormat "2006" now) .Site.Title }}
{{ .Site.Params.footer.license | safeHTML }} {{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }}
</small> {{ .Site.Params.footer.license | safeHTML }}
</small>
</div>
</footer> </footer>

View File

@@ -1,15 +1,28 @@
{{ $filename := "js/main.bundle.js" -}} {{ $filename := .filename | default "js/main.bundle.js" -}}
{{ if hugo.IsProduction }}{{ $filename = "js/main.bundle.min.js" }}{{ end -}} {{ $match := .match | default "{js/*.js,js/vendor/**.js}" }}
{{ $page := .page }}
{{ $header := .header }}
{{ $files := slice -}} {{ $files := slice -}}
{{ range $index, $file := resources.Match "js/**.js" -}} {{ range $index, $file := resources.Match $match -}}
{{ $files = $files | append $file -}} {{ $files = $files | append $file -}}
{{ end -}} {{ end -}}
{{ $bundle := $files | resources.Concat $filename -}}
{{ $js := $bundle | resources.ExecuteAsTemplate $filename . -}}
{{- if not hugo.IsProduction -}} {{ if gt (len $files) 0 }}
<script src="{{ $js.RelPermalink }}"></script> {{ $bundle := $files | resources.Concat $filename -}}
{{ else -}} {{ $js := $bundle | resources.ExecuteAsTemplate $filename $page -}}
{{ $js = $js | minify | fingerprint -}}
<script src="{{ $js.RelPermalink }}" integrity="{{ $js.Data.Integrity }}" crossorigin="anonymous"></script> {{- if and (not site.IsServer) $header -}}
{{- $pc := site.Config.Privacy.GoogleAnalytics -}}
{{- if and (not $pc.Disable) (hasPrefix site.GoogleAnalytics "G-") }}
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.GoogleAnalytics }}"></script>
{{- end }}
{{- end -}}
{{- if not hugo.IsProduction -}}
<script src="{{ $js.RelPermalink }}"></script>
{{ else -}}
{{ $js = $js | minify | fingerprint -}}
<script src="{{ $js.RelPermalink }}" integrity="{{ $js.Data.Integrity }}" crossorigin="anonymous"></script>
{{ end -}}
{{ end -}} {{ end -}}

View File

@@ -7,7 +7,7 @@
</div> </div>
<div class="col text-sm-start text-center col-sm-6 col-md-4"> <div class="col text-sm-start text-center col-sm-6 col-md-4">
{{ range .Site.Menus.social -}} {{ range .Site.Menus.social -}}
<a href="{{ .URL | relURL }}" target="_blank" rel="noopener" aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2"> <a href="{{ .URL | relLangURL }}" target="_blank" rel="noopener noreferrer" aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
{{ .Pre | safeHTML }} {{ .Pre | safeHTML }}
</a> </a>
{{ end -}} {{ end -}}

View File

@@ -3,10 +3,10 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
{{ hugo.Generator}} {{ hugo.Generator}}
{{ partial "head/stylesheet.html" -}} {{ partial "head/stylesheet.html" . -}}
{{ partial "head/seo.html" . }} {{ partial "head/seo.html" . }}
{{ partialCached "head/favicon.html" . -}} {{ partialCached "head/favicon.html" . -}}
{{ if gt (len .Site.Languages) 1}} {{ if gt (len .Site.Languages) 1}}
<meta name="lang" content="{{ .Site.Language }}" /> <meta name="lang" content="{{ .Site.Language }}">
{{ end }} {{ end }}
{{ end }} {{ end }}

View File

@@ -1,16 +1,42 @@
{{- $options := (dict "targetPath" "main.css" "enableSourceMap" (not hugo.IsProduction) "includePaths" (slice "node_modules")) -}} {{- $navbarOffset := "0em" -}}
{{- if hugo.IsProduction }}{{ $options = merge $options (dict "outputStyle" "compressed") }}{{ end -}} {{- if .Site.Params.navigation.fixed }}{{ $navbarOffset = site.Params.navigation.offset | default "4em" }}{{ end }}
{{- $vars := dict
"theme-font" (default "Inter" .Site.Params.style.themeFont)
"primary" (default "#007bff" .Site.Params.style.primary)
"secondary" (default "#6c757d" .Site.Params.style.secondary)
"success" (default "#198754" .Site.Params.style.success)
"info" (default "#0dcaf0" .Site.Params.style.info)
"warning" (default "#ffc107" .Site.Params.style.warning)
"danger" (default "#dc3545" .Site.Params.style.danger)
"light" (default "#f8f9fa" .Site.Params.style.light)
"dark" (default "#212529" .Site.Params.style.dark)
"navbar-offset" $navbarOffset
"enable-dark-mode" (printf "%t" ((default true .Site.Params.main.enableDarkMode)))
"import-fonts" (printf "%t" (not (hasPrefix (lower .Site.Params.style.themeFontPath) "http")))
-}}
{{- $options := (dict "transpiler" "libsass" "targetPath" "css/main.css" "enableSourceMap" (not hugo.IsProduction) "includePaths" (slice "node_modules") "vars" $vars) -}}
{{/*- $options := (dict "transpiler" "dartsass" "targetPath" "css/main.css" "enableSourceMap" (not hugo.IsProduction) "includePaths" (slice "node_modules") "vars" $vars) -*/}}
{{- if hugo.IsProduction -}}
{{- $options = merge $options (dict "outputStyle" "compressed") -}}
{{- else -}}
{{- $options = merge $options (dict "outputStyle" "expanded") -}}
{{- end -}}
{{- $css := resources.Get "scss/app.scss" | resources.ExecuteAsTemplate "style.app.scss" . | toCSS $options -}} {{- $css := resources.Get "scss/app.scss" | resources.ExecuteAsTemplate "style.app.scss" . | toCSS $options -}}
{{- partial "head/icons.html" (dict "css" $css) -}} {{- partial "head/icons.html" (dict "css" $css) -}}
{{- if .Site.Params.style.purge -}}
{{- $post_options := dict "config" "config" -}}
{{- $css = $css | resources.PostCSS $post_options -}}
{{- end -}}
<!-- TODO: add proper postCSS purge --> {{- if not hugo.IsProduction -}}
<link rel="stylesheet" href="{{ $css.Permalink | relLangURL }}">
{{- if eq (hugo.Environment) "development" -}}
<link rel="stylesheet" href="{{ $css.Permalink | relURL }}">
{{- else -}} {{- else -}}
{{- $css = $css | fingerprint -}} {{- $css = $css | fingerprint | resources.PostProcess -}}
<link rel="stylesheet" href="{{ $css.Permalink }}" integrity="{{ $css.Data.Integrity }}" crossorigin="anonymous"> <link rel="stylesheet" href="{{ $css.Permalink }}" integrity="{{ $css.Data.Integrity }}" crossorigin="anonymous">
{{- end -}} {{- end -}}
{{- if hasPrefix (lower .Site.Params.style.themeFontPath) "http" -}}
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="{{ site.Params.style.themeFontPath | default "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" }}"> <link rel="stylesheet" href="{{ .Site.Params.style.themeFontPath | default "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" }}">
{{- end -}}

View File

@@ -1,7 +1,7 @@
<!-- Copied from doks --> <!-- Copied from doks -->
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="{{ .Site.Params.twitterSite }}"> {{ with .Site.Params.twitterSite }}<meta name="twitter:site" content="{{ . }}">{{ end }}
<meta name="twitter:creator" content="{{ .Site.Params.twitterCreator }}"> {{ with .Site.Params.twitterCreator }}<meta name="twitter:creator" content="{{ . }}">{{ end }}
<meta name="twitter:title" content="{{ $.Scratch.Get "title" }}"> <meta name="twitter:title" content="{{ $.Scratch.Get "title" }}">
<meta name="twitter:description" content="{{ $.Scratch.Get "description" }}"> <meta name="twitter:description" content="{{ $.Scratch.Get "description" }}">
<meta name="twitter:image" content="{{ $.Scratch.Get "thumbnail" }}"> <meta name="twitter:image" content="{{ $.Scratch.Get "thumbnail" }}">

View File

@@ -1,18 +1,20 @@
<div class="container-fluid flex-fill bg-primary bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} p-4"> <div class="container-fluid flex-fill bg-primary bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }}">
<div class="row row-cols-1 row-cols-sm-3 align-items-center pt-5 pb-5 h-100"> <div class="container-xxl p-4">
<div class="col col-md-2 d-none d-md-block"></div> <div class="row row-cols-1 row-cols-sm-3 align-items-center pt-5 pb-5 h-100">
<div class="col col-sm-6 col-md-4 text-center text-sm-start"> <div class="col col-md-2 d-none d-md-block"></div>
<p class="fs-1 fw-bold">{{ .Title }}</p> <div class="col col-sm-6 col-md-4 text-center text-sm-start">
<p>{{ .Content }}</p> <p class="display-4">{{ .Title }}</p>
{{ if .Site.Params.feature.link }} <p>{{ .Content }}</p>
<p><a class="btn btn-primary" href="{{ .Site.Params.feature.link | safeURL }}" role="button">{{ .Site.Params.feature.caption | default (T "about") }}</a></p> {{ if .Site.Params.feature.link }}
{{ end }} <p><a class="btn btn-primary" href="{{ .Site.Params.feature.link | safeURL }}" role="button">{{ .Site.Params.feature.caption | default (T "about") }}</a></p>
{{ end }}
</div>
<div class="col col-sm-6 col-md-4">
{{ if .Site.Params.home.featurePhoto }}
{{- partial "assets/image.html" (dict "url" .Site.Params.home.featurePhoto "ratio" "4x3" "outerClass" "img-wrap" "innerClass" "rounded" "title" .Site.Title) -}}
{{ end }}
</div>
<div class="col col-md-2 d-none d-md-block"></div>
</div> </div>
<div class="col col-sm-6 col-md-4">
{{ if .Site.Params.home.featurePhoto }}
{{- partial "image.html" (dict "url" .Site.Params.home.featurePhoto "ratio" "4x3" "outerClass" "img-wrap" "innerClass" "rounded" "title" .Site.Title) -}}
{{ end }}
</div>
<div class="col col-md-2 d-none d-md-block"></div>
</div> </div>
</div> </div>

View File

@@ -1,117 +0,0 @@
<!--
Render a local or remote image with responsive image sizing. Images are resized using default media breakpoints
and are converted to webp format. The image is processed using the quality setting specified in the [imaging]
section of the main config file (defaults to 75). A fallback image is provided for older browsers. The image is
wrapped in a figure if a caption is provided, else the image is wrapped in a div with a ratio constraint. The
partial supports the following arguments:
"url": Required relative url of the image, e.g. "img/example.jpg"
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". If set, the image is
resized and cropped to match the ratio. Else the original aspect ratio of the image is kept.
"outerClass": Optional class attribute of the outer div element, e.g. "img-wrap".
"innerClass": Optional class attribute of the inner img element, e.g. "rounded".
"title": Optional alternate text of the image.
"caption": Optional figure caption.
-->
{{- $validRatios := slice "1x1" "4x3" "16x9" "21x9" }}
{{ $ratio := .ratio -}}
{{ $url := .url -}}
{{ $outerClass := .outerClass -}}
{{ $innerClass := .innerClass -}}
{{ $title := .title -}}
{{ $caption := .caption -}}
{{ $inner := .inner -}}
{{- $img := partial "utilities/GetImage.html" (dict "url" $url) -}}
{{ with $img -}}
{{ $smDim := "" -}}
{{ $mdDim := "" -}}
{{ $lgDim := "" -}}
{{ $xlDim := "" -}}
{{ $xxlDim := "" -}}
{{ if eq $ratio "4x3" -}}
{{ $smDim = "576x432" -}}
{{ $mdDim = "768x576" -}}
{{ $lgDim = "992x744" -}}
{{ $xlDim = "1200x900" -}}
{{ $xxlDim = "1400x1050" -}}
{{ else if eq $ratio "1x1" -}}
{{ $smDim = "576x576" -}}
{{ $mdDim = "768x768" -}}
{{ $lgDim = "992x992" -}}
{{ $xlDim = "1200x1200" -}}
{{ $xxlDim = "1400x1400" -}}
{{ else if eq $ratio "16x9" -}}
{{ $smDim = "576x324" -}}
{{ $mdDim = "768x432" -}}
{{ $lgDim = "992x558" -}}
{{ $xlDim = "1200x675" -}}
{{ $xxlDim = "1400x788" -}}
{{ else if eq $ratio "21x9" -}}
{{ $smDim = "576x247" -}}
{{ $mdDim = "768x329" -}}
{{ $lgDim = "992x425" -}}
{{ $xlDim = "1200x514" -}}
{{ $xxlDim = "1400x600" -}}
{{ else }}
{{ $smDim = printf "576x%d" (int (math.Round (mul (div 576.0 $img.Width) $img.Height))) -}}
{{ $mdDim = printf "768x%d" (int (math.Round (mul (div 768.0 $img.Width) $img.Height))) -}}
{{ $lgDim = printf "992x%d" (int (math.Round (mul (div 992.0 $img.Width) $img.Height))) -}}
{{ $xlDim = printf "1200x%d" (int (math.Round (mul (div 1200.0 $img.Width) $img.Height))) -}}
{{ $xxlDim = printf "1400x%d" (int (math.Round (mul (div 1400.0 $img.Width) $img.Height))) -}}
{{ end -}}
{{- $sm := "" -}}
{{ $md := "" -}}
{{ $lg := "" -}}
{{ $xl := "" -}}
{{ $xxl := "" -}}
{{ $fallback := "" -}}
{{ if $ratio }}
{{- $sm = ($img.Fill (printf "%s webp" $smDim)) -}}
{{ $md = ($img.Fill (printf "%s webp" $mdDim)) -}}
{{ $lg = ($img.Fill (printf "%s webp" $lgDim)) -}}
{{ $xl = ($img.Fill (printf "%s webp" $xlDim)) -}}
{{ $xxl = ($img.Fill (printf "%s webp" $xxlDim)) -}}
{{ $fallback = ($img.Fill (printf "%s jpg" $xxlDim)) -}}
{{ else }}
{{- $sm = ($img.Fit (printf "%s webp" $smDim)) -}}
{{ $md = ($img.Fit (printf "%s webp" $mdDim)) -}}
{{ $lg = ($img.Fit (printf "%s webp" $lgDim)) -}}
{{ $xl = ($img.Fit (printf "%s webp" $xlDim)) -}}
{{ $xxl = ($img.Fit (printf "%s webp" $xxlDim)) -}}
{{ $fallback = ($img.Fit (printf "%s jpg" $xxlDim)) -}}
{{ end}}
{{- with $caption -}}
<figure class="figure">
<img class="figure-img img-fluid {{ $innerClass }}"
srcset="
{{- with $xxl.RelPermalink -}}{{.}} 1400w{{- end -}}
{{- with $xl.RelPermalink -}}, {{.}} 1200w{{- end -}}
{{- with $lg.RelPermalink -}}, {{.}} 992w{{- end -}}
{{- with $md.RelPermalink -}}, {{.}} 768w{{- end -}}
{{- with $sm.RelPermalink -}}, {{.}} 576w{{- end -}}"
sizes="100vw"
src="{{ $fallback.RelPermalink }}"
alt="{{ $title }}">
<figcaption class="figure-caption">{{ . | safeHTML }}</figcaption>
{{ $inner }}
</figure>
{{- else -}}
<div class="{{ with $ratio }}ratio ratio-{{ . }}{{ end }} {{ $outerClass }}">
<img class="img-fluid {{ $innerClass }}"
srcset="
{{- with $xxl.RelPermalink -}}{{.}} 1400w{{- end -}}
{{- with $xl.RelPermalink -}}, {{.}} 1200w{{- end -}}
{{- with $lg.RelPermalink -}}, {{.}} 992w{{- end -}}
{{- with $md.RelPermalink -}}, {{.}} 768w{{- end -}}
{{- with $sm.RelPermalink -}}, {{.}} 576w{{- end -}}"
sizes="100vw"
src="{{ $fallback.RelPermalink }}"
alt="{{ $title }}">
{{ $inner }}
</div>
{{- end -}}
{{- end -}}

View File

@@ -1 +1,6 @@
{{ return index .Site.Data .Section }} {{- $menu := "" -}}
{{- if .IsPage -}}
{{- $menu = index .Site.Data .Section -}}
{{- end -}}
{{- return $menu -}}

View File

@@ -0,0 +1,12 @@
<!--
Retrieve the value from a key-value pair. The expected format is 'key="value"', including double quotes for the
value. Returns -1 when no valid value is found.
-->
{{- $input := (split . "=") -}}
{{- $val := -1 -}}
{{- if gt (len $input) 1 -}}
{{- $val = trim (index $input 1) "\"" -}}
{{- end -}}
{{- return $val -}}

View File

@@ -1,5 +1,5 @@
{{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}} {{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}}
Last updated: {{ $lastmodstr }} Last updated: {{ $lastmodstr }}
{{ with .GitInfo }} {{ with .GitInfo }}
&bull;&nbsp;<a href="{{ site.Params.schema.gitHub }}/commit/{{ .Hash }}">{{ .Subject }} ({{ .AbbreviatedHash }})</a> &bull;&nbsp;<a href="{{ site.Params.docs.github | default site.Params.schema.github }}/commit/{{ .Hash }}">{{ .Subject }} ({{ .AbbreviatedHash }})</a>
{{ end -}} {{ end -}}

View File

@@ -11,7 +11,7 @@
{{ if .Parent }} {{ if .Parent }}
{{ errorf "Missing value for param 'header': %s" .Parent.Position -}} {{ errorf "Missing value for param 'header': %s" .Parent.Position -}}
{{ else }} {{ else }}
{{ errorf "Missing value for param 'header': %s" .Position -}} {{ errorf "Missing value for param 'header': %s" .Position -}}
{{ end }} {{ end }}
{{ end -}} {{ end -}}

View File

@@ -15,5 +15,5 @@
{{- end -}} {{- end -}}
{{- if not $error -}} {{- if not $error -}}
{{- partial "breadcrumb.html" $page -}} {{- partial "assets/breadcrumb.html" $page -}}
{{- end -}} {{- end -}}

View File

@@ -6,7 +6,7 @@
"state" Optional state of the button, either "enabled" (default), "disabled", "active", or "inactive". "state" Optional state of the button, either "enabled" (default), "disabled", "active", or "inactive".
"size" Optional size of the button, either "sm", "md" (default), or "lg". "size" Optional size of the button, either "sm", "md" (default), or "lg".
"color": Optional theme color of the element, either "primary" (default), "secondary", "success", "color": Optional theme color of the element, either "primary" (default), "secondary", "success",
"danger", "warning", "info", "light", "dark", "white" or "black". "danger", "warning", "info", "light", "dark", "white", or "black".
"outline" Optional flag indicating the button should be outlined, either "false" (default) or "true". "outline" Optional flag indicating the button should be outlined, either "false" (default) or "true".
"badge" Optional positioned badge to display on top of the button. "badge" Optional positioned badge to display on top of the button.
"aria-label" Optional label for the badge. "aria-label" Optional label for the badge.
@@ -78,5 +78,19 @@
{{ end -}} {{ end -}}
{{ if not $error }} {{ if not $error }}
{{- partial "button.html" (dict "type" $type "title" $title "size" $size "color" $color "outline" $outline "badge" $badge "label" $label "tooltip" $tooltip "collapse" $collapse "href" $href "id" $id "state" $state "placement" $placement) -}} {{- partial "assets/button.html" (dict
"type" $type
"title" $title
"size" $size
"color" $color
"outline" $outline
"badge" $badge
"label" $label
"tooltip" $tooltip
"collapse" $collapse
"href" $href
"id" $id
"state" $state
"placement" $placement)
-}}
{{ end }} {{ end }}

View File

@@ -3,7 +3,8 @@
"path" Required path of the page. "path" Required path of the page.
"class" Optional class attribute of the card element, e.g. “w-50”. "class" Optional class attribute of the card element, e.g. “w-50”.
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger", "color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", "white" or "black". By default, no color is specified. "warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no
color is specified.
"padding": Optional padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default). "padding": Optional padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default).
"header" Optional header components of the card, displayed in small caps. Supported values are "full" "header" Optional header components of the card, displayed in small caps. Supported values are "full"
(default), "publication", "tags", and "none". (default), "publication", "tags", and "none".
@@ -26,7 +27,7 @@
{{ $color := "" -}} {{ $color := "" -}}
{{ with .Get "color" }}{{ $color = . }}{{ end -}} {{ with .Get "color" }}{{ $color = . }}{{ end -}}
{{ if $color }} {{ if $color }}
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" -}} {{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
{{ if not (in $supportedColors $color) -}} {{ if not (in $supportedColors $color) -}}
{{ errorf "Invalid value for param 'color': %s" .Position -}} {{ errorf "Invalid value for param 'color': %s" .Position -}}
{{ $error = true -}} {{ $error = true -}}

View File

@@ -9,21 +9,26 @@
{{- $name := .Get "name" -}} {{- $name := .Get "name" -}}
{{- $basePath := .Site.Params.docs.basePath -}} {{- $basePath := .Site.Params.docs.basePath -}}
{{- $file := path.Join $basePath (path.Clean (.Get "file")) -}} {{- $file := .Get "file" }}
{{- $extension := path.Ext $file -}} {{- if hasPrefix $file "./" -}}
{{- $file = path.Clean $file -}}
{{- else -}}
{{- $file = path.Join $basePath (path.Clean $file) -}}
{{- end -}}
{{- $extension := strings.TrimLeft "." (path.Ext $file) }}
{{- $capture_start := "" -}} {{- $capture_start := "" -}}
{{- $capture_end := "" -}} {{- $capture_end := "" -}}
{{- $id := printf "docs-collapse-%d" .Ordinal -}} {{- $id := printf "docs-collapse-%d" .Ordinal -}}
{{- $supportedExtensions := slice ".scss" ".toml" -}} {{- $supportedExtensions := slice "js" "scss" "toml" -}}
{{- if in $supportedExtensions $extension -}} {{- if in $supportedExtensions $extension -}}
{{- if eq $extension ".toml" }} {{- if eq $extension "toml" }}
{{- $capture_start = printf "# toml-docs-start %s" $name -}} {{- $capture_start = printf "# toml-docs-start %s" $name -}}
{{- $capture_end = printf "# toml-docs-end %s" $name -}} {{- $capture_end = printf "# toml-docs-end %s" $name -}}
{{- else -}} {{- else -}}
{{- $capture_start = printf "// scss-docs-start %s" $name -}} {{- $capture_start = printf "// %s-docs-start %s" $extension $name -}}
{{- $capture_end = printf "// scss-docs-end %s" $name -}} {{- $capture_end = printf "// %s-docs-end %s" $extension $name -}}
{{- end -}} {{- end -}}
{{- else -}} {{- else -}}
{{- errorf "File format not supported (line %s): %s" .Position $file -}} {{- errorf "File format not supported (line %s): %s" .Position $file -}}
@@ -71,7 +76,7 @@
</ul> </ul>
<div class="border-start border-end border-bottom mb-3"> <div class="border-start border-end border-bottom mb-3">
<div class="collapse multi-{{ $id }}{{ if $show }} show{{ end }} syntax-highlight" id="body-{{ $id }}"> <div class="collapse multi-{{ $id }}{{ if $show }} show{{ end }} syntax-highlight" id="body-{{ $id }}">
{{- highlight (trim $match "\r\n") "toml" "" -}} {{- highlight (trim $match "\r\n") $extension "" -}}
</div> </div>
<div class="collapse multi-{{ $id }}{{ if not $show }} show{{ end }} p-3" id="footer-{{ $id }}"><i>...</i></div> <div class="collapse multi-{{ $id }}{{ if not $show }} show{{ end }} p-3" id="footer-{{ $id }}"><i>...</i></div>
</div> </div>

View File

@@ -33,11 +33,6 @@
{{- end -}} {{- end -}}
<div class="d-flex align-items-center ps-3 pe-3 py-1 border-top border-bottom syntax-highlight"> <div class="d-flex align-items-center ps-3 pe-3 py-1 border-top border-bottom syntax-highlight">
<small class="font-monospace text-body-secondary text-uppercase">{{- $lang -}}</small> <small class="font-monospace text-body-secondary text-uppercase">{{- $lang -}}</small>
<!-- <div class="d-flex ms-auto">
<button type="button" class="mt-0 me-0 border-0" title="Copy to clipboard">
<i class="fa-regular fa-clipboard"></i>
</button>
</div> -->
</div> </div>
<div class="rounded-bottom syntax-highlight"> <div class="rounded-bottom syntax-highlight">
{{- if eq $show_markup true -}} {{- if eq $show_markup true -}}

View File

@@ -9,6 +9,7 @@
"class": Optional class attribute of the inner img element, e.g. "rounded". "class": Optional class attribute of the inner img element, e.g. "rounded".
"title": Optional alternate text of the image. "title": Optional alternate text of the image.
"caption": Optional figure caption. "caption": Optional figure caption.
"mode": Optional flag indicating if the image should support color modes.
--> -->
{{- if isset .Params "src" -}} {{- if isset .Params "src" -}}
@@ -24,8 +25,24 @@
{{- $class := .Get "class" -}} {{- $class := .Get "class" -}}
{{ $title := .Get "title" -}} {{ $title := .Get "title" -}}
{{ $caption := .Get "caption" -}} {{ $caption := .Get "caption" -}}
{{ $supportedFlags := slice "true" "false" -}}
{{- partial "image.html" (dict "url" $url "ratio" $ratio "innerClass" $class "title" $title "caption" $caption) -}} {{ $modeParam := "false" -}}
{{ $mode := false -}}
{{ with .Get "mode" }}{{ $modeParam = . }}{{ end -}}
{{ if in $supportedFlags $modeParam -}}
{{ if eq $modeParam "true" }}{{ $mode = true }}{{ else }}{{ $mode = false }}{{ end -}}
{{ else -}}
{{ errorf "Invalid value for param 'mode': %s" $modeParam -}}
{{ end -}}
{{- partial "assets/image.html" (dict
"url" $url
"ratio" $ratio
"innerClass" $class
"title" $title
"caption" $caption
"mode" $mode)
-}}
{{ else -}} {{ else -}}
{{ errorf "Missing value for param 'src': %s" .Position -}} {{ errorf "Missing value for param 'src': %s" .Position -}}
{{ end -}} {{ end -}}

View File

@@ -18,9 +18,10 @@
{{- if $src -}} {{- if $src -}}
<div class="carousel-item {{ if eq .Ordinal 0 }}active{{ end }}"> <div class="carousel-item {{ if eq .Ordinal 0 }}active{{ end }}">
{{ partial "image.html" (dict "url" $src "ratio" $ratio "innerClass" "d-block w-100") }} {{ partial "assets/image.html" (dict "url" $src "ratio" $ratio "innerClass" "d-block w-100") }}
<div class="carousel-caption gradient"></div>
{{ with $caption }} {{ with $caption }}
<div class="carousel-caption d-none d-md-block gradient"> <div class="carousel-caption d-none d-md-block">
<div class="d-flex justify-content-center align-items-end h-100 w-100 p-4">{{ . }}</div> <div class="d-flex justify-content-center align-items-end h-100 w-100 p-4">{{ . }}</div>
</div> </div>
{{ end }} {{ end }}

View File

@@ -0,0 +1,54 @@
<!--
Defines an individual nav item. The shortcode supports the following arguments:
"header" Required header of the nav item.
"class" Optional class attribute of the inner nav item.
"show" Optional flag to indicate an item should be shown.
-->
{{- $id := .Ordinal -}}
{{- $parent := printf "nav-%d" .Parent.Ordinal -}}
{{- with (.Parent.Get "id") -}}
{{- $parent = . -}}
{{- end -}}
{{- $fade := false -}}
{{- if eq (.Parent.Get "fade") "true" -}}
{{- $fade = true -}}
{{- end -}}
{{- $header := .Get "header" -}}
{{- if not $header -}}
{{- if .Parent -}}
{{- errorf "Missing value for param 'header': %s" .Parent.Position -}}
{{- else -}}
{{- errorf "Missing value for param 'header': %s" .Position -}}
{{- end -}}
{{- end -}}
{{- $class := .Get "class" -}}
{{- $body := trim .Inner " \r\n" -}}
{{- $supportedFlags := slice "true" "false" -}}
{{- $showParam := "false" -}}
{{- $show := false -}}
{{- with .Get "show" }}{{ $showParam = . }}{{ end -}}
{{- if in $supportedFlags $showParam -}}
{{- if eq $showParam "true" }}{{ $show = true }}{{ else }}{{ $show = false }}{{ end -}}
{{- else -}}
{{- errorf "Invalid value for param 'show': %s" $showParam -}}
{{- end -}}
{{- $disabledParam := "false" -}}
{{- $disabled := false -}}
{{- with .Get "disabled" }}{{ $disabledParam = . }}{{ end -}}
{{- if in $supportedFlags $disabledParam -}}
{{- if eq $disabledParam "true" }}{{ $disabled = true }}{{ else }}{{ $disabled = false }}{{ end -}}
{{- else -}}
{{- errorf "Invalid value for param 'disabled': %s" $disabledParam -}}
{{- end -}}
<div class="tab-pane{{ if $show }} active {{ if $fade}}show{{ end }}{{ end }} {{ if $fade}}fade{{ end }}" id="{{ $parent }}-{{ $id }}"
role="tabpanel" aria-labelledby="{{ $parent }}-btn-{{ $id }}" tabindex="0" data-header="{{ $header }}" {{ if $show }}data-show-id="{{ $id }}"{{ end }}
data-has-content="{{ gt (len $body) 0 }}" {{ if $disabled }} data-disabled-id="{{ $id }}"{{ end }}>
{{ $body | markdownify | safeHTML }}
</div>

View File

@@ -0,0 +1,77 @@
<!--
Displays a tab group of multiple items. Add nav-item inner elements for each tab pane. The shortcode supports the
following arguments:
"type" Optional type of the tab group, either "tabs", "pills", or "underline".
"vertical" Optional flag to show vertical tabs instead of horizontal tabs (default).
"fade" Optional flag to make tab panes fade in.
"class": Optional class attribute of the tab group, e.g. “nav-fill”.
-->
{{- $id := printf "nav-%d" .Ordinal -}}
{{ with .Get "id" }}
{{ $id = . }}
{{ end }}
{{- $class := .Get "class" -}}
{{ $type := .Get "type" -}}
{{ $supportedNavTypes := slice "tabs" "pills" "underline" -}}
{{ if $type }}
{{ if not (in $supportedNavTypes $type) -}}
{{ errorf "Invalid value for param 'type': %s" $type -}}
{{ end -}}
{{ end -}}
{{ $supportedFlags := slice "true" "false" -}}
{{ $verticalParam := "false" -}}
{{ $vertical := false -}}
{{ with .Get "vertical" }}{{ $verticalParam = . }}{{ end -}}
{{ if in $supportedFlags $verticalParam -}}
{{ if eq $verticalParam "true" }}{{ $vertical = true }}{{ else }}{{ $vertical = false }}{{ end -}}
{{ else -}}
{{ errorf "Invalid value for param 'vertical': %s" $verticalParam -}}
{{- end -}}
{{ $fadeParam := "false" -}}
{{ with .Get "fade" }}{{ $fadeParam = . }}{{ end -}}
{{ if not (in $supportedFlags $fadeParam) -}}
{{ errorf "Invalid value for param 'fade': %s" $fadeParam -}}
{{- end -}}
{{- if and (eq $type "tabs") $vertical -}}
{{- errorf "Tabs do not support vertical layout" -}}
{{- end -}}
{{- $inner := .Inner -}}
{{- $items := findRE "data-header=\"(.+?)\"" $inner -}}
{{- $showVal := findRE "data-show-id=\"(.+?)\"" $inner -}}
{{- $showID := -1 -}}
{{- if gt (len $showVal) 0 -}}
{{- $showID = int (partial "utilities/GetVal.html" (index $showVal 0)) -}}
{{- end -}}
{{ $disabled := slice -}}
{{- $disabledVal := findRE "data-disabled-id=\"(.+?)\"" $inner -}}
{{- range $item := $disabledVal -}}
{{- $disabled = $disabled | append (int (partial "utilities/GetVal.html" $item)) -}}
{{- end -}}
{{- $hasContent := gt (len (findRE "data-has-content=\"true\"" $inner)) 0 -}}
{{ if $vertical }}<div class="d-flex align-items-start">{{ end }}
<div class="nav{{ with $type }} nav-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}{{ if $vertical }} flex-column{{ end }}" id="{{ $id }}" role="tablist"{{ if $vertical }} aria-orientation="vertical"{{ end }}>
{{- range $index, $item := $items -}}
{{- $header := partial "utilities/GetVal.html" $item -}}
{{- $itemDisabled := in $disabled $index -}}
<button class="nav-link text-nowrap{{ if eq $index $showID }} active{{ end }} {{ if $itemDisabled}} disabled {{end }}" id="{{ $id }}-btn-{{ $index }}" data-bs-toggle="pill" data-bs-target="#{{ $id }}-{{ $index }}"
type="button" role="tab" aria-controls="{{ $id }}-{{ $index }}" aria-selected="{{ if eq $index 0 }}true{{ else }}false{{ end }}">
{{ $header }}
</button>
{{ end -}}
</div>
{{- if $hasContent -}}
<div class="tab-content {{ if eq $type "tabs" }}border border-top-0 p-3{{ else if $vertical }}ms-3{{ else }}mt-3{{ end }}">
{{- $inner -}}
</div>
{{- end -}}
{{ if $vertical }}</div>{{ end }}

View File

@@ -7,13 +7,17 @@
"size" Optional breakpoint of the navbar toggler, either "xs", "sm", "md" (default), "lg", or "xl". "size" Optional breakpoint of the navbar toggler, either "xs", "sm", "md" (default), "lg", or "xl".
"style" Optional style of the navbar, either "light" (default) or "dark". "style" Optional style of the navbar, either "light" (default) or "dark".
"color" Optional background color of the navbar, either "primary", "secondary", "success", "color" Optional background color of the navbar, either "primary", "secondary", "success",
"danger", "warning", "info", "light", "dark", "white" or "black". The default color is none. "danger", "warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". The
default color is none.
"mode" Optional flag to include a color mode switcher, default is "true" (if dark mode is enabled).
"search" Optional flag to include a search input, default is "true". "search" Optional flag to include a search input, default is "true".
"logo" Optional address of the logo image. "logo" Optional address of the logo image.
"title" Optional brand title, displayed when the logo is not set. "title" Optional brand title, displayed when the logo is not set.
--> -->
{{ $error := false }} {{ $error := false }}
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body" "body-tertiary" -}}
{{ $supportedFlags := slice "true" "false" -}}
{{ $id := add .Ordinal 1 }} {{ $id := add .Ordinal 1 }}
@@ -49,7 +53,6 @@
{{ $color := "" -}} {{ $color := "" -}}
{{ with .Get "color" }} {{ with .Get "color" }}
{{ $color = . }} {{ $color = . }}
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" -}}
{{ if not (in $supportedColors $color) -}} {{ if not (in $supportedColors $color) -}}
{{ errorf "Invalid value for param 'color': %s" $color -}} {{ errorf "Invalid value for param 'color': %s" $color -}}
{{ $error = true -}} {{ $error = true -}}
@@ -58,12 +61,18 @@
{{ $searchParam := "true" -}} {{ $searchParam := "true" -}}
{{ with .Get "search" }}{{ $searchParam = . }}{{ end -}} {{ with .Get "search" }}{{ $searchParam = . }}{{ end -}}
{{ $supportedFlags := slice "true" "false" -}}
{{ if not (in $supportedFlags $searchParam) -}} {{ if not (in $supportedFlags $searchParam) -}}
{{ errorf "Invalid value for param 'search': %s" .Position -}} {{ errorf "Invalid value for param 'search': %s" .Position -}}
{{ $error = true -}} {{ $error = true -}}
{{ end -}} {{ end -}}
{{ $modeParam := "true" -}}
{{ with .Get "mode" }}{{ $modeParam = . }}{{ end -}}
{{ if not (in $supportedFlags $modeParam) -}}
{{ errorf "Invalid value for param 'mode': %s" .Position -}}
{{ $error = true -}}
{{ end -}}
{{ $logo := "" -}} {{ $logo := "" -}}
{{ with .Get "logo" }}{{ $logo = . }}{{ end -}} {{ with .Get "logo" }}{{ $logo = . }}{{ end -}}
@@ -71,5 +80,17 @@
{{ with .Get "title" }}{{ $title = . }}{{ end -}} {{ with .Get "title" }}{{ $title = . }}{{ end -}}
{{ if not $error -}} {{ if not $error -}}
{{- partial "assets/navbar.html" (dict "id" $id "page" $page "size" $size "style" $style "color" $color "search" $searchParam "menus" $menus "logo" $logo "title" $title) -}} {{- partial "assets/navbar.html" (dict
"id" $id
"page" $page
"size" $size
"style" $style
"color" $color
"search" $searchParam
"mode" $modeParam
"menus" $menus
"logo" $logo
"title" $title
)
-}}
{{ end -}} {{ end -}}

View File

@@ -0,0 +1,33 @@
<!--
Displays a custom persona card. The shortcode supports the following arguments:
"path" Required path of the page.
"class" Optional class attribute of the card element, e.g. “w-50”.
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no
color is specified.
-->
{{- $error := false -}}
{{- $path := .Get "path" -}}
{{- $page := .Site.GetPage $path -}}
{{- if not $page -}}
{{- errorf "Invalid or missing value for param 'path': %s" .Position -}}
{{- $error = true -}}
{{- end -}}
{{- $class := .Get "class" -}}
{{- $color := "" -}}
{{- with .Get "color" }}{{ $color = . }}{{ end -}}
{{- if $color -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
{{- if not (in $supportedColors $color) -}}
{{- errorf "Invalid value for param 'color': %s" .Position -}}
{{- $error = true -}}
{{- end -}}
{{- end -}}
{{- if not $error -}}
{{- partial "assets/persona.html" (dict "path" $path "class" $class "color" $color) -}}
{{- end -}}

View File

@@ -1,7 +1,7 @@
<!-- <!--
Displays a spinner. The shortcode supports the following arguments: Displays a spinner. The shortcode supports the following arguments:
"color": Optional theme color of the alert, either "primary" (default), "secondary", "success", "danger", "color": Optional theme color of the alert, either "primary" (default), "secondary", "success", "danger",
"warning", "info", "light", "dark", "white" or "black". "warning", "info", "light", "dark", "white", or "black".
"grow" Optional flag to indicate the spinner is growing instead of rotating, defaults to false. "grow" Optional flag to indicate the spinner is growing instead of rotating, defaults to false.
"class": Optional class attribute of the spinner wrapping element, e.g. “text-center”. "class": Optional class attribute of the spinner wrapping element, e.g. “text-center”.
--> -->

Some files were not shown because too many files have changed in this diff Show More