Compare commits

...

243 Commits

Author SHA1 Message Date
Mark Dumay
17973c1090 Merge pull request #462 from gethinode/safehtml
Replace HTML with Markdown and shortcodes
2023-08-24 06:31:03 +02:00
mark
28b5bd8c58 Adjust card-group example 2023-08-24 06:11:37 +02:00
Mark Dumay
62f94369c9 Merge branch 'main' into safehtml 2023-08-24 05:19:09 +02:00
mark
c9fc53a546 Bump package release 2023-08-24 05:18:45 +02:00
mark
946f8ca938 Update build stats 2023-08-23 14:30:58 +02:00
mark
ffbeb3ede7 Replace HTML examples with Markdown syntax 2023-08-23 14:30:53 +02:00
mark
6dd4678339 Support purging of HTML comments 2023-08-23 14:30:18 +02:00
mark
82090571d6 Update build stats 2023-08-23 12:56:38 +02:00
mark
63bfe64e71 Use card-group in about page 2023-08-23 12:56:31 +02:00
mark
5121f92870 Add card closing element 2023-08-23 12:52:14 +02:00
mark
1b95b3a265 Add card-group shortcode 2023-08-23 12:51:38 +02:00
mark
e8d926eca8 Remove hover color for cards without href 2023-08-23 12:49:38 +02:00
mark
2076081405 Add anchor support for vector graphics 2023-08-23 06:30:53 +02:00
mark
da5b898250 Set unsafe html to false by default 2023-08-23 06:30:30 +02:00
Mark Dumay
cf2f806820 Merge pull request #460 from gethinode/develop
Enhance navbar and favicon
2023-08-23 06:27:18 +02:00
Mark Dumay
3ebbea542b Merge branch 'main' into develop 2023-08-23 06:13:47 +02:00
mark
cce963aaba Fix default path for logo 2023-08-23 05:13:57 +02:00
mark
4e6156cae0 Log proper error for missing favicon 2023-08-22 16:16:15 +02:00
github-actions[bot]
457f122861 Merge pull request #457 from gethinode/dependabot/npm_and_yarn/markdownlint-cli2-0.9.0
Bump markdownlint-cli2 from 0.8.1 to 0.9.0
2023-08-22 13:56:25 +00:00
dependabot[bot]
d94b54b90f Bump markdownlint-cli2 from 0.8.1 to 0.9.0
Bumps [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) from 0.8.1 to 0.9.0.
- [Changelog](https://github.com/DavidAnson/markdownlint-cli2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/DavidAnson/markdownlint-cli2/compare/v0.8.1...v0.9.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-08-22 13:50:37 +00:00
github-actions[bot]
834ac4744b Merge pull request #456 from gethinode/dependabot/npm_and_yarn/eslint-plugin-n-16.0.2
Bump eslint-plugin-n from 16.0.1 to 16.0.2
2023-08-22 13:36:49 +00:00
dependabot[bot]
2716af78be Bump eslint-plugin-n from 16.0.1 to 16.0.2
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.0.1 to 16.0.2.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.0.1...16.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-22 13:30:51 +00:00
mark
3d37a93336 Support logos with color mode 2023-08-22 14:52:07 +02:00
mark
1d976cb7df Fix incorrect size docs 2023-08-22 14:50:07 +02:00
mark
4e2a5a39e9 Support configurable navbar size 2023-08-22 14:46:49 +02:00
github-actions[bot]
63ef832ab4 Merge pull request #453 from gethinode/dependabot/npm_and_yarn/eslint-plugin-import-2.28.1
Bump eslint-plugin-import from 2.28.0 to 2.28.1
2023-08-21 13:48:08 +00:00
dependabot[bot]
f480dfa6b4 Bump eslint-plugin-import from 2.28.0 to 2.28.1
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.28.0 to 2.28.1.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.28.0...v2.28.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-21 13:31:42 +00:00
mark
bd85cabce9 Fix wording 2023-08-21 15:12:29 +02:00
mark
76a5408bda Fix wording 2023-08-21 15:06:55 +02:00
mark
61537afb93 Fix wording 2023-08-21 15:05:55 +02:00
Mark Dumay
12417340f2 Merge pull request #452 from gethinode/develop
Refine lint and build cache
2023-08-21 14:49:05 +02:00
Mark Dumay
b7533957b2 Merge branch 'main' into develop 2023-08-21 13:55:16 +02:00
mark
15512c9448 Fix macOS cache 2023-08-21 13:51:53 +02:00
mark
f69efa7ec8 Allow empty input for styles and scripts 2023-08-21 13:07:52 +02:00
Mark Dumay
f3c392760a Merge pull request #451 from gethinode/develop
Streamline workflows
2023-08-21 10:53:39 +02:00
mark
d59e6ea87b Adjust layout 2023-08-21 10:38:08 +02:00
mark
476d36d41c Simplify lint workflow 2023-08-21 10:37:16 +02:00
mark
0ccc0c64f4 Rename to mod-update 2023-08-20 14:02:53 +02:00
mark
c5b4db6141 Rename to lint-build 2023-08-20 14:02:49 +02:00
mark
6d0f917a0e Hold any major dependency update 2023-08-20 14:02:07 +02:00
Mark Dumay
497dbe6bce Merge pull request #449 from gethinode/main
Sync with main
2023-08-20 14:01:04 +02:00
Mark Dumay
1da8133e09 Merge branch 'develop' into main 2023-08-20 13:45:47 +02:00
Mark Dumay
b3354a35ad Merge pull request #448 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-08-20 13:19:55 +02:00
markdumay
827fe5b5e1 fix: update Hugo module dependencies 2023-08-20 10:12:49 +00:00
Mark Dumay
fc98b2d768 Merge pull request #447 from gethinode/refine
Remove draft status
2023-08-20 12:11:42 +02:00
Mark Dumay
dd5c6886cd Merge branch 'main' into refine 2023-08-20 12:03:27 +02:00
mark
72f6f5d260 Remove draft status 2023-08-20 12:02:38 +02:00
Mark Dumay
d54fd6abf8 Delete update-test.yml 2023-08-20 11:32:37 +02:00
Mark Dumay
5c75a78a3d Merge pull request #445 from gethinode/refine
Update author and committer
2023-08-20 11:32:01 +02:00
mark
653c2b9d4b Revert author and committer 2023-08-20 11:20:22 +02:00
mark
dba91ad560 Simplify environment 2023-08-20 11:00:30 +02:00
Mark Dumay
108672e9a1 Merge branch 'main' into refine 2023-08-20 10:53:00 +02:00
mark
18499d12c5 Update author and committer 2023-08-20 10:52:03 +02:00
Mark Dumay
79e97f0b5b Merge pull request #443 from gethinode/refine
Refine update workflow paths and body
2023-08-20 10:40:50 +02:00
Mark Dumay
dba7ad3e09 Merge branch 'main' into refine 2023-08-20 09:49:09 +02:00
mark
d260ada9ec Refine paths and body 2023-08-20 09:47:34 +02:00
Mark Dumay
1503937c48 Merge pull request #441 from gethinode/mod-update
Refactor update workflow
2023-08-20 09:41:11 +02:00
Mark Dumay
585f4d7c5c Merge branch 'main' into mod-update 2023-08-20 09:16:00 +02:00
mark
b125085315 Refactor update workflow 2023-08-20 09:15:10 +02:00
Mark Dumay
ee605fb4eb Update go.mod 2023-08-20 09:11:40 +02:00
Mark Dumay
2e14d200ed Update update-test.yml 2023-08-20 09:08:25 +02:00
Mark Dumay
de28b1b2e3 Update update-test.yml 2023-08-20 07:47:02 +02:00
Mark Dumay
467815e8d5 Update update-test.yml 2023-08-20 07:40:51 +02:00
Mark Dumay
98687a0ec1 Update update-test.yml 2023-08-20 07:29:46 +02:00
Mark Dumay
bc92818c53 Update update-test.yml 2023-08-20 07:20:53 +02:00
Mark Dumay
3fd6806549 Update update-test.yml 2023-08-20 06:01:03 +02:00
Mark Dumay
3f76ed2f59 Update update-test.yml 2023-08-20 05:55:00 +02:00
Mark Dumay
c4b9f91376 Update update-test.yml 2023-08-20 05:50:15 +02:00
Mark Dumay
c797a2f7a8 Update update-test.yml 2023-08-19 17:15:14 +02:00
Mark Dumay
c23ceafddd Update update-test.yml 2023-08-19 17:02:30 +02:00
Mark Dumay
e0b1b0250c Update update-test.yml 2023-08-19 16:10:04 +02:00
Mark Dumay
ce54758f36 Update update-test.yml 2023-08-19 16:06:52 +02:00
Mark Dumay
a80efa9578 Update update-test.yml 2023-08-19 15:31:26 +02:00
Mark Dumay
04bad29146 Update update-test.yml 2023-08-19 15:29:20 +02:00
Mark Dumay
8816c0c40e Update update-test.yml 2023-08-19 15:21:31 +02:00
Mark Dumay
b6c9ce4a9f Create update-test.yml 2023-08-19 15:19:15 +02:00
mark
c8d16104d5 Refine update workflow 2023-08-19 15:16:20 +02:00
mark
215d125032 Standardize update workflow 2023-08-19 14:36:54 +02:00
mark
ccdf4ab391 Refactor module installation and updates 2023-08-19 14:29:09 +02:00
mark
8bd7d68d2e Add ci config for example site 2023-08-19 14:02:55 +02:00
mark
03f1df615e Update build stats 2023-08-19 14:00:25 +02:00
mark
86ee2d3d2f Consolidate resource cache with parent cache 2023-08-19 14:00:12 +02:00
mark
9c608b0583 Update go.sum 2023-08-19 13:10:15 +02:00
mark
bdc84fb36d Update build stats 2023-08-19 13:05:35 +02:00
mark
4dda37ad3d Downgrade mod-katex to trigger update 2023-08-19 12:52:41 +02:00
mark
7559010b83 Downgrade mod-katex to trigger update 2023-08-19 12:51:27 +02:00
Mark Dumay
75644ae046 Merge pull request #438 from gethinode/footer
Suppress social footer when no media are defined
2023-08-19 09:56:38 +02:00
mark
994ffe5ab5 Bump package release 2023-08-19 09:43:20 +02:00
Mark Dumay
1dc016a6f8 Merge branch 'main' into footer 2023-08-19 09:33:45 +02:00
Mark Dumay
44e3b31c67 Adjust cache path
* Adjust env var reference

* Adjust cache path

* Adjust cache path

* Adjust cache path

* Adjust cache dir

* Show cachedir in worklfow log

* Show cachedir in worklfow log

* Update Windows cache dir

* Update Windows cache dir
2023-08-19 09:32:41 +02:00
mark
3cbfd60098 Update Windows cache dir 2023-08-19 09:19:46 +02:00
mark
fc0715aa97 Update Windows cache dir 2023-08-19 09:09:27 +02:00
mark
84fff0fe8b Show cachedir in worklfow log 2023-08-19 09:05:20 +02:00
mark
153ef9bf1f Show cachedir in worklfow log 2023-08-19 09:03:26 +02:00
mark
bbe8f3a32c Adjust cache dir 2023-08-19 08:53:19 +02:00
mark
eb7c9b5c3c Adjust cache path 2023-08-19 07:30:43 +02:00
mark
90e73ed010 Adjust cache path 2023-08-19 07:29:38 +02:00
mark
e613017c13 Adjust cache path 2023-08-19 07:28:22 +02:00
Mark Dumay
6404bb84ed Merge branch 'main' into develop 2023-08-19 07:05:19 +02:00
mark
55ec9acccf Adjust env var reference 2023-08-19 07:04:43 +02:00
Mark Dumay
0197b79427 Merge pull request #436 from gethinode/develop
Refactor workflows
2023-08-19 06:56:54 +02:00
mark
828e531b52 Adjust env var reference 2023-08-19 06:53:53 +02:00
mark
23279d9710 Adjust env var reference 2023-08-19 06:51:27 +02:00
mark
0caf473897 Consolidate env vars 2023-08-19 06:42:47 +02:00
mark
8e68534b28 Suppress social footer when no media are defined 2023-08-19 06:42:11 +02:00
Mark Dumay
0f07ccfd3f Merge branch 'main' into develop 2023-08-19 06:36:02 +02:00
mark
77fad02da7 Add cache to build commands 2023-08-19 06:14:00 +02:00
mark
7a9cb1b2ca Add ci build cache configuration 2023-08-19 06:13:10 +02:00
mark
d82ed79989 Refactor lint and build workflows 2023-08-19 06:12:45 +02:00
mark
ff82ded064 Refactor npm publish workflow 2023-08-19 05:38:56 +02:00
github-actions[bot]
78167f2d03 Merge pull request #434 from gethinode/dependabot/npm_and_yarn/stylelint-15.10.3
Bump stylelint from 15.10.2 to 15.10.3
2023-08-18 13:53:33 +00:00
dependabot[bot]
80f2084822 Bump stylelint from 15.10.2 to 15.10.3
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.10.2 to 15.10.3.
- [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.10.2...15.10.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-18 13:47:50 +00:00
Mark Dumay
a7d67e993f Merge pull request #432 from gethinode/main
Sync with main
2023-08-17 12:10:26 +02:00
Mark Dumay
317eab54f8 Merge pull request #431 from gethinode/relref
Refactor link shortcode
2023-08-17 09:39:36 +02:00
mark
cb90ef363b Bump package version 2023-08-17 09:27:45 +02:00
Mark Dumay
f31309f863 Merge branch 'main' into relref 2023-08-17 09:24:22 +02:00
mark
a76a692075 Update build stats 2023-08-17 09:22:45 +02:00
mark
f52f758962 Refactor link shortcode 2023-08-17 09:22:39 +02:00
mark
bcc3a7877e Use proper page context to render inner content 2023-08-17 09:22:22 +02:00
mark
7b52da5ce0 Add link shortcode 2023-08-17 09:21:29 +02:00
mark
e7403bd1a4 Add multilanguage support 2023-08-17 09:21:09 +02:00
mark
2881eb4546 Trim trailing '/' to improve finding the right page 2023-08-17 09:20:53 +02:00
Mark Dumay
c7cc2269ba Merge pull request #430 from gethinode/develop
Improve references and page resource handling
2023-08-16 16:10:22 +02:00
Mark Dumay
014158bc63 Merge branch 'main' into develop 2023-08-16 16:00:17 +02:00
Mark Dumay
8dcccb17ad Merge pull request #429 from aefly/french-translation
Adjusted spacing in French language
2023-08-16 16:00:05 +02:00
Mark Dumay
325a222386 Merge branch 'main' into develop 2023-08-16 15:55:50 +02:00
mark
9b4f4229f7 Bump package release 2023-08-16 15:52:07 +02:00
mark
3b719bf145 Update build stats 2023-08-16 15:51:18 +02:00
mark
136d5d2e15 Use context to identify references incl anchors 2023-08-16 15:51:07 +02:00
mark
1c10a00089 Use proper page context to render inner content 2023-08-16 15:47:53 +02:00
aefly
a8d9401de3 Adjusted spacing in French error message 2023-08-16 14:43:32 +02:00
mark
e77fa7dfbc Add support for wrapper argument 2023-08-16 13:05:42 +02:00
mark
8d3c0cc4ce Add support for portrait ratio 2023-08-16 13:05:30 +02:00
mark
87e04c8c4b Fix indentation 2023-08-16 13:04:15 +02:00
mark
e1f4228c31 Add support for 3x2 ratio 2023-08-16 13:04:02 +02:00
mark
4cb4bef579 Support page resources 2023-08-16 09:26:37 +02:00
Mark Dumay
744a0f7248 Merge pull request #426 from gethinode/develop
Clean up installation
2023-08-15 14:10:30 +02:00
mark
a1e48ade96 Fix linting issue 2023-08-15 14:01:34 +02:00
Mark Dumay
9a2540cf04 Merge branch 'main' into develop 2023-08-15 13:55:57 +02:00
mark
399f525a3f Bump package version 2023-08-15 13:55:14 +02:00
mark
f1c99b0ed7 Update installation and license 2023-08-15 13:55:07 +02:00
mark
6e14e50dfd Include build stats in repo 2023-08-15 13:18:49 +02:00
mark
a143f90a37 Clean up stylelint config 2023-08-15 13:18:34 +02:00
mark
e60b2ec4a1 Add build stats to repo 2023-08-15 13:18:14 +02:00
mark
0250ef68dd Expand all code lines horizontally 2023-08-15 08:41:38 +02:00
Mark Dumay
71c9c19480 Merge pull request #425 from gethinode/develop
Fix menu identification of home
2023-08-14 16:19:43 +02:00
Mark Dumay
fe108c2621 Merge branch 'main' into develop 2023-08-14 15:50:44 +02:00
github-actions[bot]
aa76036470 Merge pull request #423 from gethinode/dependabot/npm_and_yarn/autoprefixer-10.4.15
Bump autoprefixer from 10.4.14 to 10.4.15
2023-08-14 13:47:55 +00:00
Mark Dumay
1475782fa6 Merge branch 'main' into develop 2023-08-14 15:42:52 +02:00
Mark Dumay
aa201d561d Merge branch 'main' into dependabot/npm_and_yarn/autoprefixer-10.4.15 2023-08-14 15:42:23 +02:00
github-actions[bot]
35a8776bae Merge pull request #424 from gethinode/dependabot/npm_and_yarn/eslint-8.47.0
Bump eslint from 8.46.0 to 8.47.0
2023-08-14 13:42:09 +00:00
mark
1f000d4b23 Fix menu identification of home 2023-08-14 15:36:15 +02:00
dependabot[bot]
fa268f4541 Bump eslint from 8.46.0 to 8.47.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.46.0 to 8.47.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.46.0...v8.47.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-08-14 13:35:07 +00:00
dependabot[bot]
f9c8c85578 Bump autoprefixer from 10.4.14 to 10.4.15
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.14 to 10.4.15.
- [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.14...10.4.15)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-14 13:34:48 +00:00
Mark Dumay
f7274cd43d Merge pull request #422 from gethinode/main
Sync with main
2023-08-14 15:21:56 +02:00
Mark Dumay
b122c40148 Merge pull request #421 from gethinode/highlight
Fix line highlights
2023-08-14 15:14:57 +02:00
Mark Dumay
05fa3b795c Merge branch 'main' into highlight 2023-08-14 15:02:35 +02:00
Mark Dumay
5f329f9271 Merge pull request #420 from gethinode/develop
Mount initial placeholder content
2023-08-14 15:01:40 +02:00
mark
22f9b9ee68 Fix line highlights 2023-08-14 15:00:51 +02:00
Mark Dumay
3713f73da6 Merge branch 'main' into develop 2023-08-14 14:10:13 +02:00
mark
efa4933c77 Bump package version 2023-08-14 14:09:32 +02:00
mark
fc9be4cdcf Mount initial placeholder content 2023-08-14 14:04:34 +02:00
Mark Dumay
9060fe20fe Merge pull request #418 from gethinode/develop
Fix navbar
2023-08-14 13:50:14 +02:00
mark
b4d60df133 Adjust size of timeline on small devices 2023-08-14 13:38:05 +02:00
mark
09d7904654 Fix background color of connector 2023-08-14 13:18:59 +02:00
Mark Dumay
a7d35b7b06 Merge branch 'main' into develop 2023-08-14 12:59:33 +02:00
mark
f22cffcfc4 Bump package release 2023-08-14 12:58:45 +02:00
mark
b6ae910514 Improve accessibility of release button 2023-08-14 12:02:40 +02:00
mark
4486dcc814 Fix navbar collapse 2023-08-14 11:53:21 +02:00
Mark Dumay
1452109194 Merge pull request #416 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-08-14 10:33:29 +02:00
Mark Dumay
512f39ed8a Merge branch 'main' into hugo-mod-dependencies 2023-08-14 10:25:29 +02:00
Mark Dumay
39c6f922fe Merge pull request #417 from gethinode/develop
Fix navbar behavior
2023-08-14 10:23:20 +02:00
Mark Dumay
e8ccd62987 Merge branch 'main' into develop 2023-08-14 09:30:47 +02:00
mark
210237c42f Ensure all elements use the same base id 2023-08-14 09:29:33 +02:00
mark
daa2295cea Bump dependencies 2023-08-14 09:11:14 +02:00
mark
e6d5c16f12 Fix #415 2023-08-14 09:10:48 +02:00
markdumay
e0dea81ef5 fix: update Hugo module dependencies 2023-08-14 03:15:09 +00:00
Mark Dumay
2889f8e8b1 Merge pull request #414 from gethinode/develop
Fix accessibility issues
2023-08-13 13:09:42 +02:00
mark
ac6d3504be Fix stylelint error 2023-08-13 12:52:10 +02:00
mark
fdaf7de75e Improve alert accessibility 2023-08-13 09:08:18 +02:00
Mark Dumay
185b8b5f40 Merge branch 'main' into develop 2023-08-13 08:26:26 +02:00
mark
603590e95b Bump package version 2023-08-13 08:26:04 +02:00
mark
9cf7825384 Fix theme for transparent navbar 2023-08-13 08:23:13 +02:00
mark
d50814ab08 Improve toc accessibility 2023-08-13 08:19:27 +02:00
mark
97d77d0dfc Improve sidebar accessibility 2023-08-13 08:16:48 +02:00
mark
4ec4cf28de Fix background color of primary alert in dark mode 2023-08-13 07:04:32 +02:00
Mark Dumay
89f869a55e Merge pull request #412 from gethinode/develop
Bump dependencies
2023-08-13 06:36:55 +02:00
mark
aaecdb93f8 Fix multilingual date representation 2023-08-13 06:36:21 +02:00
mark
24ce0ed262 Adjust default date format to medium 2023-08-13 06:35:55 +02:00
Mark Dumay
70e2532434 Merge branch 'main' into develop 2023-08-13 06:17:47 +02:00
mark
828e0266fc Bump dependencies 2023-08-13 06:17:13 +02:00
Mark Dumay
21d7117ca1 Merge pull request #411 from aefly/french-translation
Translate 'shareSystem' and 'copyToClipboard'
2023-08-13 05:19:11 +02:00
aefly
13d4be8086 Translate 'shareSystem' and 'copyToClipboard' 2023-08-12 22:16:05 +02:00
Mark Dumay
862f0bb95b Merge pull request #410 from gethinode/develop
Add FR placeholders
2023-08-12 18:05:19 +02:00
mark
2d7e32369c Add placeholders 2023-08-12 17:54:09 +02:00
mark
ac37e4269c Add docs marker 2023-08-12 17:53:59 +02:00
Mark Dumay
5287ab023a Merge pull request #409 from gethinode/main
Sync with main
2023-08-12 17:49:25 +02:00
Mark Dumay
92d1b20678 Merge pull request #405 from aefly/french-translation
Add support for French language
2023-08-12 17:20:07 +02:00
Mark Dumay
7b08b0b0ac Merge branch 'main' into french-translation 2023-08-12 17:09:52 +02:00
Mark Dumay
7047b9c5f5 Merge pull request #408 from gethinode/develop
Improve accessibility
2023-08-12 17:09:37 +02:00
mark
6c9cb40f1e Remove redundant spacing 2023-08-12 16:59:54 +02:00
mark
74901ecbf5 Bump package version 2023-08-12 16:58:52 +02:00
mark
598018feb7 Fix linting issues 2023-08-12 16:57:58 +02:00
Mark Dumay
ca6a2bed82 Merge branch 'main' into develop 2023-08-12 16:52:19 +02:00
Mark Dumay
41cabcffd0 Merge pull request #407 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-08-12 16:51:02 +02:00
mark
3424565e95 Adjust selected path 2023-08-12 16:49:51 +02:00
mark
7b037bae46 Replace underline with bottom border 2023-08-12 16:49:05 +02:00
mark
6d257e1aca Properly wrap each menu item 2023-08-12 14:20:32 +02:00
mark
a3c288fb1d Fix spacing of attributes 2023-08-12 14:19:51 +02:00
mark
3d33aa41da Adjust navbar contrast style 2023-08-12 14:19:38 +02:00
mark
4ba0104dc8 Fix menu toggler color 2023-08-12 13:31:55 +02:00
mark
3ab1d6b123 Remove redundant theme 2023-08-12 13:31:08 +02:00
mark
5cca744f10 Improve accessibility of example shortcode 2023-08-12 11:29:02 +02:00
mark
c56d35b153 Improve toc accessibility 2023-08-12 11:28:48 +02:00
mark
b9df91cad8 Improve pagination accessibility 2023-08-12 11:28:31 +02:00
mark
d05204a61b Improve pagination accessibility 2023-08-12 11:28:21 +02:00
mark
c5376ea8c6 Add contrasting navbar support 2023-08-12 11:28:01 +02:00
mark
ccfb4a8f82 Simplify syntax scripts 2023-08-12 11:25:28 +02:00
mark
b99a9168bd Improve syntax accessibility 2023-08-12 11:17:34 +02:00
mark
26fe455cc3 Remove unnecessary path segment 2023-08-12 11:17:02 +02:00
mark
eb66a24177 Improve navbar accessibility 2023-08-12 11:15:40 +02:00
mark
5610ed67e5 Improve invalid path error 2023-08-12 11:14:56 +02:00
mark
73f14989d8 Change success to primary color 2023-08-12 11:14:38 +02:00
markdumay
dc4ca0e862 fix: update Hugo module dependencies 2023-08-12 03:14:33 +00:00
aefly
40b47bc782 Fixed typo error 'Bootstrap' 2023-08-11 20:29:42 +02:00
aefly
1a1c998f3f Fixed parent 'Projects' to 'Projets' 2023-08-11 20:29:15 +02:00
aefly
f5c44ab79f Updated 'French' to 'Français' 2023-08-11 20:28:28 +02:00
mark
3da6951801 Assign unique id to sample navbar 2023-08-11 16:26:02 +02:00
mark
f80241548a Drop navbar button id to avoid potential clash 2023-08-11 16:25:49 +02:00
Mark Dumay
65793ef70e Merge branch 'main' into french-translation 2023-08-11 15:33:03 +02:00
Mark Dumay
754da19c7c Merge pull request #406 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-08-11 15:32:50 +02:00
mark
73dc16f469 Improve accessibility in dark mode 2023-08-11 14:32:56 +02:00
mark
91be9969e4 Improve accessibility of heading anchor 2023-08-11 14:32:10 +02:00
mark
792d7417b5 Improve accessibility of clipboard button 2023-08-11 14:31:11 +02:00
mark
ee0a50c4c2 Fix aria-label of button 2023-08-11 14:29:06 +02:00
mark
13554854d9 Improve accessibility of sharing buttons 2023-08-11 14:28:20 +02:00
mark
1bdfc42d9e Drop Font Awesome variable moved to module 2023-08-11 05:46:23 +02:00
markdumay
f0ddacabe9 fix: update Hugo module dependencies 2023-08-11 03:14:39 +00:00
aefly
de76908ad9 Updated about.md 2023-08-10 23:58:45 +02:00
aefly
8f2b4d7a36 Add [fr] for French language support 2023-08-10 23:38:44 +02:00
aefly
1e137fa213 Add menus.fr.toml for French language support 2023-08-10 23:38:23 +02:00
aefly
3035caddce Add French language support 2023-08-10 23:37:35 +02:00
aefly
a2fc2ddb4c Add 'fr' folder with French language translations 2023-08-10 23:37:19 +02:00
100 changed files with 3837 additions and 867 deletions

View File

@@ -16,27 +16,24 @@ jobs:
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'}}
- name: Comment on major updates of any dependencies
if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-major'}}
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 comment $PR_URL --body "I'm **not approving** this PR because **it includes a major update of a dependency**"
gh pr edit $PR_URL --add-label "requires-manual-qa"
env:
PR_URL: ${{github.event.pull_request.html_url}}

View File

@@ -1,30 +0,0 @@
name: build
on:
push:
tags:
- v*
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
node-version: [16.x, 18.x, 20.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- run: npm ci
- run: npm run build
- run: npm run build:example

78
.github/workflows/lint-build.yml vendored Normal file
View File

@@ -0,0 +1,78 @@
name: Lint & build
on:
workflow_dispatch:
push:
tags:
- v*
branches: [ main ]
pull_request:
branches: [ main ]
env:
CACHE_KEY: 'hugo-hinode'
CACHE_PATH_DEBIAN: '/tmp/hugo_cache_runner'
CACHE_PATH_WIN: '~\AppData\Local\hugo_cache'
CACHE_PATH_MAC: '/Users/runner/Library/Caches/hugo_cache'
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: lts/*
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Perform clean install of npm
run: npm ci
- name: Lint the source files
run: npm run lint
build:
needs: lint
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
node-version: [16.x, 18.x, 20.x]
runs-on: ${{ matrix.os }}
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Set up Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Perform clean install of npm
run: npm ci
# Cache Hugo cachedir and resourcedir (configured in config/ci/hugo.toml) for each OS
# No additional cache invalidation is needed, Hugo uses checksums itself
- name: Use Hugo cache
uses: actions/cache@v3
with:
path: ${{ runner.os == 'Windows' && env.CACHE_PATH_WIN || runner.os == 'macOS' && env.CACHE_PATH_MAC || env.CACHE_PATH_DEBIAN }}
key: ${{ runner.os }}-${{ env.CACHE_KEY }}
restore-keys: |
${{ runner.os }}-${{ env.CACHE_KEY }}
- name: Build main site
run: npm run build:cache
# The example site is to be published to demo.gethinode.com
- name: Build example site
run: npm run build:example:ci

View File

@@ -1,31 +0,0 @@
name: lint
on:
push:
tags:
- v*
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x, 18.x, 20.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- run: npm ci --ignore-scripts
- run: npm run lint

60
.github/workflows/mod-update.yml vendored Normal file
View File

@@ -0,0 +1,60 @@
name: Update Hugo dependencies
on:
workflow_dispatch:
schedule:
- cron: '0 3 * * *' # run daily at 03:00 AM
permissions:
pull-requests: write
jobs:
update-mod:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: lts/*
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Perform clean install of npm
run: npm ci
- name: Update Hugo module dependencies
id: mod-updates
run: |
MOD_OUTPUT=$(npm run mod:update 2>&1)
echo "$MOD_OUTPUT"
MOD_UPDATES=$(echo "$MOD_OUTPUT" | grep '^go: upgraded' | sed 's/go: / - /' | sort -u)
echo 'MOD_UPDATES<<EOF' >> $GITHUB_OUTPUT
echo "$MOD_UPDATES" >> "$GITHUB_OUTPUT"
echo 'EOF' >> $GITHUB_OUTPUT
- name: Create Pull Request
uses: gethinode-actions/create-pull-request@v5
with:
token: ${{ secrets.HUGO_MOD_PR }}
commit-message: 'fix: update Hugo module dependencies'
committer: GitHub <noreply@github.com>
branch: hugo-mod-dependencies
delete-branch: true
title: 'Update Hugo module dependencies'
body: |
This PR is auto-generated by [create-pull-request][1].
Changes to go.mod:
${{ steps.mod-updates.outputs.MOD_UPDATES }}
[1]: https://github.com/peter-evans/create-pull-request
labels: dependencies
add-paths: |
go.mod
go.sum
**/go.mod
**/go.sum

View File

@@ -1,35 +1,40 @@
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
name: Node.js Package
# This workflow will run tests using node and then publish a package to npmjs.org when a release is created
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
name: Publish package to npmjs
on:
workflow_dispatch:
branches: [ main ]
release:
types: [created]
types: [published]
env:
REGISTRY_URL: 'https://registry.npmjs.org/'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm ci
- run: npm test
strategy:
matrix:
os: [ubuntu-latest]
node-version: [20.x]
runs-on: ${{ matrix.os }}
publish-npm:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup .npmrc file to publish to npm
uses: actions/setup-node@v3
with:
node-version: 16
registry-url: https://registry.npmjs.org/
- run: npm ci
- run: npm publish
node-version: ${{ matrix.node-version }}
registry-url: ${{ env.REGISTRY_URL }}
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Perform clean install of npm
run: npm ci
- name: Publish package to npm
run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

View File

@@ -1,37 +0,0 @@
name: Update Hugo Dependencies
on:
workflow_dispatch:
schedule:
- cron: '0 3 * * *' # run daily at 03:00 AM
permissions:
pull-requests: write
jobs:
update-dep:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "lts/*"
- name: Install dependencies
run: npm ci
- name: Update Hugo module dependencies
run: npm run mod:update
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.HUGO_MOD_PR }}
commit-message: 'fix: update Hugo module dependencies'
branch: hugo-mod-dependencies
delete-branch: true
title: 'Update Hugo module dependencies'
body: >
This PR is auto-generated by
[create-pull-request](https://github.com/peter-evans/create-pull-request).
labels: dependencies

3
.gitignore vendored
View File

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

View File

@@ -1,7 +1,6 @@
assets/scss/common/_variables.scss
assets/scss/components/_syntax-dark.scss
assets/scss/components/_syntax-light.scss
assets/scss/hotfix
assets/scss/vendor
assets/scss/theme/fonts.scss
assets/scss/app.scss

View File

@@ -56,54 +56,42 @@
- [PageSpeed Insights][pagespeed]
- [Mozilla Observatory][observatory]
Hinode is a clean documentation and blog theme for [Hugo][hugo], an open-source static site generator. Based on the [Bootstrap 5][bootstrap] framework, the rendered site is fast, secure, and responsive. Hinode uses [FlexSearch][flexsearch] to enable full text search across your site. Finally, the theme supports [Node Package Manager][npm] to automate the build process and to keep track of dependencies.
Additional features include:
- Flexible configuration of Hugo modules
- Switching between light mode and dark mode
- Support for multiple languages
- Reusable Bootstrap components through configurable shortcodes and partials
- Embedded comments through light-weight integration with GitHub via [utteranc.es][utterances]
- Integrated sidebar navigation for content-heavy sections, such as documentation pages
- Reponsive image handling for multiple screen sizes and resolutions
- Optimized search results, scoring 100 points for SEO on [PageSpeed Insights][pagespeed]
- Secure by default, scoring A+ on [Mozilla Observatory test][observatory]
Hinode is a clean documentation and blog theme for [Hugo][hugo], an open-source static site generator. Based on the [Bootstrap 5][bootstrap] framework, the rendered site is fast, secure, and responsive. Hinode uses [FlexSearch][flexsearch] to enable full text search across your site. Finally, the theme supports [Node Package Manager][npm] (npm) to automate the build process and to keep track of dependencies.
Detailed information about Hinode is available on the [official website][website].
## Prerequisites
Hinode requires Git, Node.js and npm for local development and testing. Download the Git binary from the [official website][git_download]. Next, download and install [Node.js][nodejs] (it includes npm) for your platform.
Hinode is a [Hugo theme that uses modules][hugo_modules] to install and maintain various components. It can be installed using either Hugo or npm. If you would like to take advantage of automation, the npm approach is recommended. Refer to the [Hinode template][repository_template] for installation instructions with npm.
The installation instructions in this readme install Hinode as a regular Hugo theme. Hinode requires the following software to be installed on your local machine.
- [Go binary][golang_download]
- [Hugo][nodejs] (extended version)
[Git][git_download] is recommended, but is not a strict requirement.
## Installation
Start a new Hinode project in three steps:
1. Create a new site
Hinode is available as a [template][repository_template], and a [main repository][repository]. The template [npm][npm] to link to the latest available version of Hinode. Unless you plan to customize a lot, it is recommended to use the template:
1. **Create a new site**
```bash
git clone https://github.com/gethinode/template.git my-hinode-site && cd my-hinode-site
hugo new site my-hinode-site && cd my-hinode-site
```
Use the main theme if you intend to customize the base code:
1. **Initialize the module system**
```bash
git clone https://github.com/gethinode/hinode.git my-hinode-site && cd my-hinode-site
hugo mod init example.com/my-hinode-site
echo "[[module.imports]]\npath = 'github.com/gethinode/hinode'" >> hugo.toml
```
1. Install dependencies
1. **Start a development server**
```bash
npm install
```
1. Start development server
```bash
npm run start
hugo server
```
## Configuration
@@ -127,7 +115,7 @@ Hinode is inspired by the following themes:
## License
The `hinode` and `template` codebase is released under the [MIT license][license]. The documentation (including the "README" and `docs` codebase) is licensed under the Creative Commons [(CC BY-NC 4.0)][cc-by-nc-4.0] license.
The `hinode`, `docs`, and `template` codebase is released under the [MIT license][license]. The documentation of Hinode is licensed under the Creative Commons [(CC BY-NC 4.0)][cc-by-nc-4.0] license. This includes all files within the repository's `/content` and `/exampleSite/content` folders and their children, as well as the "README" in the repository root. This applies to all public repositories maintained by `gethinode` on GitHub, including the `gethinode/hinode`, `gethinode/template`, and `gethinode/docs` repositories, unless specified otherwise.
<!-- MARKDOWN PUBLIC LINKS -->
[blist]: https://github.com/apvarun/blist-hugo-theme
@@ -137,6 +125,8 @@ The `hinode` and `template` codebase is released under the [MIT license][license
[flexsearch]: https://github.com/nextapps-de/flexsearch
[git_download]: https://git-scm.com
[hugo]: https://gohugo.io
[hugo_download]: https://gohugo.io/installation
[hugo_modules]: https://gohugo.io/hugo-modules/
[netlify]: https://www.netlify.com
[nodejs]: https://nodejs.org
[npm]: https://www.npmjs.com
@@ -147,6 +137,7 @@ The `hinode` and `template` codebase is released under the [MIT license][license
<!-- MARKDOWN MAINTAINED LINKS -->
[contribute]: https://gethinode.com/contribute
[getstarted]: https://gethinode.com/docs
[golang_download]: https://go.dev/dl/
[demo]: https://demo.gethinode.com/
[license]: https://github.com/gethinode/hinode/blob/main/LICENSE
[repository]: https://github.com/gethinode/hinode.git

View File

@@ -15,6 +15,7 @@ const addCopyButtons = (clipboard) => {
const button = document.createElement('button')
button.className = 'clipboard-button'
button.setAttribute('data-toast-target', 'toast-copied-code-message')
button.setAttribute('aria-label', '{{ T "copyToClipboard" }}')
button.type = 'button'
button.innerHTML = svgCopy
button.addEventListener('click', () => {

View File

@@ -40,8 +40,7 @@
})
for (let i = 0; i < activeSelectors.length; ++i) {
activeSelectors[i].className = activeIcon.className
activeSelectors[i].className = activeSelectors[i].className.replace('theme-icon', 'theme-icon-active')
activeSelectors[i].innerHTML = activeIcon.innerHTML
}
for (let i = 0; i < activeButtons.length; ++i) {

View File

@@ -1,8 +1,8 @@
const navbar = document.querySelector('.navbar')
const toggler = document.getElementById('main-nav-toggler')
const togglers = document.querySelectorAll('.main-nav-toggler')
const modeSelectors = document.querySelectorAll('.switch-mode-collapsed')
if (navbar !== null && toggler !== null) {
if (navbar !== null && togglers !== null) {
// set the navbar background color to opaque when scrolling past a breakpoint
window.onscroll = () => {
if (window.scrollY > 75) {
@@ -13,14 +13,21 @@ if (navbar !== null && toggler !== null) {
}
// set the navbar background color to opaque when expanded
toggler.onclick = () => {
navbar.classList.toggle('navbar-expanded')
for (let i = 0; i < togglers.length; ++i) {
togglers[i].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()
for (let j = 0; j < togglers.length; ++j) {
const toggler = togglers[j]
if (toggler.getAttribute('aria-expanded') === 'true') {
toggler.click()
}
}
}
}
}

View File

@@ -8,6 +8,9 @@
// Import Bootstrap configuration (mounted by core Bootstrap module)
@import "bootstrap.scss";
// Include dark mode overrides
@import "common/variables-dark.scss";
// Import Hinode theme styles
@import "components/alert.scss";
@import "components/blockquote.scss";
@@ -19,6 +22,7 @@
@import "components/command.scss";
@import "components/comments.scss";
@import "components/feature.scss";
@import "components/footer.scss";
@import "components/navbar.scss";
@import "components/img.scss";
@import "components/pagination.scss";

View File

@@ -0,0 +1,101 @@
@if $enable-dark-mode {
@include color-mode(dark) {
--bs-primary: #{$primary-text-emphasis-dark};
--bs-secondary: #{$secondary-text-emphasis-dark};
--bs-primary-dark: #{$primary-bg-subtle-dark};
--bs-primary-bg-subtle: #{$primary-bg-subtle-dark};
--bg-primary-subtle: rgba(var(--bs-primary-rgb), var(--bs-link-opacity, 0.1));
.bg-primary-subtle {
background-color: var(--bg-primary-subtle) if($enable-important-utilities, !important, null);
}
.accordion-button {
background-color: var(--bg-primary-subtle);
}
.form-check-input:checked {
background-color: var(--bs-primary);
border-color: var(--bs-primary); }
.form-check-input[type="checkbox"]:indeterminate {
background-color: var(--bs-primary);
border-color: var(--bs-primary);
}
.form-range::-webkit-slider-thumb {
background-color: var(--bs-primary);
}
.form-range::-moz-range-thumb {
background-color: var(--bs-primary);
}
.alert-primary {
--bs-alert-bg: var(--bg-primary-subtle);
}
.btn-outline-primary {
--bs-btn-color: var(--bs-primary);
--bs-btn-border-color: var(--bs-primary);
--bs-btn-hover-bg: var(--bs-primary);
--bs-btn-hover-border-color: var(--bs-primary);
--bs-btn-active-bg: var(--bs-primary);
--bs-btn-active-border-color: var(--bs-primary);
--bs-btn-disabled-color: var(--bs-primary);
--bs-btn-disabled-border-color: var(--bs-primary);
}
.btn-outline-secondary {
--bs-btn-color: var(--bs-secondary);
--bs-btn-border-color: var(--bs-secondary);
--bs-btn-hover-bg: var(--bs-secondary);
--bs-btn-hover-border-color: var(--bs-secondary);
--bs-btn-active-bg: var(--bs-secondary);
--bs-btn-active-border-color: var(--bs-secondary);
--bs-btn-disabled-color: var(--bs-secondary);
--bs-btn-disabled-border-color: var(--bs-secondary);
}
.link-primary {
color: var(--bs-primary) if($enable-important-utilities, !important, null);
text-decoration-color: var(--bs-primary) if($enable-important-utilities, !important, null);
&:hover,
&:focus {
color: var(--bs-primary-dark) if($enable-important-utilities, !important, null);
text-decoration-color: var(--bs-primary-dark) if($enable-important-utilities, !important, null);
}
}
.pagination {
--bs-pagination-color: var(--bs-body-bg);
--bs-pagination-bg: var(--bs-primary);
}
.progress,
.progress-stacked {
--bs-progress-bar-bg: var(--bs-primary);
}
.list-group {
--bs-list-group-active-bg: var(--bs-primary);
--bs-list-group-active-border-color: var(--bs-primary);
}
.clipboard-button:hover {
color: var(--bs-primary); }
.clipboard-button:hover > svg {
fill: var(--bs-primary);
}
.toggler-icon {
background-color: var(--bs-primary);
}
.heading:hover .anchor {
color: var(--bs-primary);
}
}
}

View File

@@ -2,9 +2,6 @@
$enable-negative-margins: true;
$enable-important-utilities: true !default;
// Font awesome variables overrides for theme
$fa-font-path: "../fonts";
// Remove the border from the focused navigation toggler
$navbar-toggler-focus-width: 0 !default;
@@ -28,3 +25,11 @@ $btn-toggle-color: $black !default;
$carousel-dark-indicator-active-bg: #ffffff !default;
$carousel-dark-caption-color: #ffffff !default;
$carousel-dark-control-icon-filter: invert(0) grayscale(100) !default;
// scss-docs-start color-mode
$primary-text-emphasis-dark: mix(white, $primary, $dark-mode-tint) !default;
$secondary-text-emphasis-dark: mix(white, $secondary, $dark-mode-tint) !default;
$link-color-dark: mix(white, $primary, $dark-mode-tint) !default;
$primary-bg-subtle-dark: mix(black, $primary, $dark-mode-shade) !default;
$primary-border-subtle-dark: mix(black, $primary, $dark-mode-shade / 2) !default;
// scss-docs-end color-mode

View File

@@ -1,3 +1,18 @@
.alert-no-decoration {
--bs-alert-border-radius: none;
.alert code {
color: inherit;
}
/* stylelint-disable declaration-block-no-redundant-longhand-properties */
.alert a {
color: inherit;
&:link,
&:visited,
&:hover,
&:active {
text-decoration-line: underline;
text-decoration-style: dotted;
text-decoration-color: var(--bs-body);
}
}
/* stylelint-enable declaration-block-no-redundant-longhand-properties */

View File

@@ -8,6 +8,8 @@
}
.btn-social {
background-color: transparent;
--bs-btn-bg: transparent;
--bs-btn-border-width: none;
--bs-btn-color: var(--bs-secondary);
@@ -23,5 +25,6 @@
.btn-social:active,
.btn-social.active,
.open > .dropdown-toggle.btn-primary {
background-color: transparent;
color: var(--bs-primary) if($enable-important-utilities, !important, null);
}

View File

@@ -64,6 +64,18 @@
}
}
@if $enable-dark-mode {
@include color-mode(dark) {
.card-zoom card-body-link,
.card-body-link {
&:hover,
&:focus {
color: $primary-bg-subtle-dark if($enable-important-utilities, !important, null);
}
}
}
}
// stylelint-enable annotation-no-unknown
// make tag-link clickable on top of the stretched-link.

View File

@@ -0,0 +1,30 @@
.footer {
// background-color: $gray-800 if($enable-important-utilities, !important, null);
color: var(--bs-secondary) if($enable-important-utilities, !important, null);
}
.link-bg-footer {
color: var(--bs-secondary) if($enable-important-utilities, !important, null);
&:hover,
&:focus {
color: var(--bs-tertiary-color) if($enable-important-utilities, !important, null);
}
}
@if $enable-dark-mode {
@include color-mode(dark) {
.footer {
color: $gray-500 if($enable-important-utilities, !important, null);
}
.link-bg-footer {
color: $gray-500 if($enable-important-utilities, !important, null);
&:hover,
&:focus {
color: $gray-400 if($enable-important-utilities, !important, null);
}
}
}
}

View File

@@ -11,6 +11,22 @@
background-color: var(--bs-body-bg);
}
.nav-link {
margin: 0 .15rem;
}
.navbar-contrast .nav-link.active, .navbar-contrast .nav-link.show, .navbar-contrast .nav-link:hover {
border-bottom: solid 1px var(--bs-navbar-hover-color);
margin-bottom: -1px;
}
.navbar-contrast {
--bs-navbar-color: white !important;
--bs-navbar-hover-color: white !important;
--bs-navbar-disabled-color: white !important;
--bs-navbar-active-color: white !important;
}
.navbar-expanded {
box-shadow: $box-shadow-sm;
}
@@ -36,7 +52,6 @@
.toggler-icon {
width: 30px;
height: 3px;
background-color: $primary;
display: block;
transition: all 0.2s;
}
@@ -85,15 +100,21 @@
background-color: #777;
}
.emphasis {
.emphasis-light {
background-color: $black if($enable-important-utilities, !important, null);
}
@if $enable-dark-mode {
@include color-mode(dark) {
.emphasis {
background-color: $white if($enable-important-utilities, !important, null);
}
.emphasis-dark {
background-color: $white if($enable-important-utilities, !important, null);
}
.emphasis, {
background-color: $black if($enable-important-utilities, !important, null);
}
@include color-mode(dark) {
.emphasis {
background-color: $white if($enable-important-utilities, !important, null);
}
}

View File

@@ -1,5 +1,6 @@
.pagination {
--bs-pagination-bg: var(--bs-primary-bg-subtle);
--bs-pagination-color: var(--bs-body-color);
--bs-pagination-border-color: none;
--bs-pagination-hover-color: var(--bs-pagination-active-color);
--bs-pagination-hover-bg: var(--bs-pagination-active-bg);

View File

@@ -69,24 +69,25 @@
@if $enable-dark-mode {
@include color-mode(dark) {
.sidebar-item {
color: var(--bs-tertiary-color);
color: var(--bs-body-color);
margin-left: 0 !important;
padding-left: 0.85rem !important;
&.active,
&:hover,
&:focus {
color: var(--bs-secondary-color);
color: white !important;
background-color: transparent;
}
}
.btn-toggle {
color: var(--bs-tertiary-color);
color: var(--bs-body-color);
&:hover,
&:focus {
color: $secondary;
background-color: tint-color($primary, 90%);
color: white !important;
background-color: transparent;
}
&::before {
@@ -105,8 +106,8 @@
&:hover,
&:focus {
color: $secondary;
background-color: tint-color($primary, 90%);
color: white !important;
background-color: transparent;
}
&.active {

View File

@@ -6,9 +6,9 @@
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #b8b800 }
/* LineHighlight */ .chroma .hl { background-color: #373700 }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #64686c }
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #6e7681 }
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #999fa8 }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #ff7b72 }
/* KeywordConstant */ .chroma .kc { color: #79c0ff }
@@ -18,8 +18,8 @@
/* KeywordReserved */ .chroma .kr { color: #ff7b72 }
/* KeywordType */ .chroma .kt { color: #ff7b72 }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { }
/* NameBuiltin */ .chroma .nb { }
/* NameAttribute */ .chroma .na { color: #00cccc }
/* NameBuiltin */ .chroma .nb { color: #00a2d8 }
/* NameBuiltinPseudo */ .chroma .bp { }
/* NameClass */ .chroma .nc { color: #f0883e; font-weight: bold }
/* NameConstant */ .chroma .no { color: #79c0ff; font-weight: bold }
@@ -64,23 +64,23 @@
/* Operator */ .chroma .o { color: #ff7b72; font-weight: bold }
/* OperatorWord */ .chroma .ow { color: #ff7b72; font-weight: bold }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #8b949e; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #8b949e; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #8b949e; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #8b949e; font-style: italic }
/* CommentSpecial */ .chroma .cs { color: #8b949e; font-weight: bold; font-style: italic }
/* CommentPreproc */ .chroma .cp { color: #8b949e; font-weight: bold; font-style: italic }
/* CommentPreprocFile */ .chroma .cpf { color: #8b949e; font-weight: bold; font-style: italic }
/* Comment */ .chroma .c { color: #979fa8; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #979fa8; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #979fa8; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #979fa8; font-style: italic }
/* CommentSpecial */ .chroma .cs { color: #979fa8; font-weight: bold; font-style: italic }
/* CommentPreproc */ .chroma .cp { color: #979fa8; font-weight: bold; font-style: italic }
/* CommentPreprocFile */ .chroma .cpf { color: #979fa8; font-weight: bold; font-style: italic }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { color: #ffa198; background-color: #490202 }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { color: #ffa198 }
/* GenericHeading */ .chroma .gh { color: #79c0ff; font-weight: bold }
/* GenericInserted */ .chroma .gi { color: #56d364; background-color: #0f5323 }
/* GenericOutput */ .chroma .go { color: #8b949e }
/* GenericPrompt */ .chroma .gp { color: #8b949e }
/* GenericOutput */ .chroma .go { color: #979fa8 }
/* GenericPrompt */ .chroma .gp { color: #979fa8 }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #79c0ff }
/* GenericTraceback */ .chroma .gt { color: #ff7b72 }
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
/* TextWhitespace */ .chroma .w { color: #6e7681 }
/* TextWhitespace */ .chroma .w { color: #999fa8 }

View File

@@ -19,7 +19,7 @@
/* KeywordType */ .chroma .kt { color: #445588; font-weight: bold }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { color: #008080 }
/* NameBuiltin */ .chroma .nb { color: #0086b3 }
/* NameBuiltin */ .chroma .nb { color: #006b8f }
/* NameBuiltinPseudo */ .chroma .bp { color: #999999 }
/* NameClass */ .chroma .nc { color: #445588; font-weight: bold }
/* NameConstant */ .chroma .no { color: #008080 }
@@ -54,20 +54,20 @@
/* LiteralStringRegex */ .chroma .sr { color: #009926 }
/* LiteralStringSingle */ .chroma .s1 { color: #dd1144 }
/* LiteralStringSymbol */ .chroma .ss { color: #990073 }
/* LiteralNumber */ .chroma .m { color: #009999 }
/* LiteralNumberBin */ .chroma .mb { color: #009999 }
/* LiteralNumberFloat */ .chroma .mf { color: #009999 }
/* LiteralNumberHex */ .chroma .mh { color: #009999 }
/* LiteralNumberInteger */ .chroma .mi { color: #009999 }
/* LiteralNumberIntegerLong */ .chroma .il { color: #009999 }
/* LiteralNumberOct */ .chroma .mo { color: #009999 }
/* LiteralNumber */ .chroma .m { color: #007a7a }
/* LiteralNumberBin */ .chroma .mb { color: #007a7a }
/* LiteralNumberFloat */ .chroma .mf { color: #007a7a }
/* LiteralNumberHex */ .chroma .mh { color: #007a7a }
/* LiteralNumberInteger */ .chroma .mi { color: #007a7a }
/* LiteralNumberIntegerLong */ .chroma .il { color: #007a7a }
/* LiteralNumberOct */ .chroma .mo { color: #007a7a }
/* Operator */ .chroma .o { color: #000000; font-weight: bold }
/* OperatorWord */ .chroma .ow { color: #000000; font-weight: bold }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #999988; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #999988; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #999988; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #999988; font-style: italic }
/* Comment */ .chroma .c { color: #6d6d5d; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #6d6d5d; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #6d6d5d; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #6d6d5d; font-style: italic }
/* CommentSpecial */ .chroma .cs { color: #999999; font-weight: bold; font-style: italic }
/* CommentPreproc */ .chroma .cp { color: #999999; font-weight: bold; font-style: italic }
/* CommentPreprocFile */ .chroma .cpf { color: #999999; font-weight: bold; font-style: italic }

View File

@@ -1,5 +1,5 @@
// stylelint-disable annotation-no-unknown
@import "components/syntax-light";
@import "syntax-light";
.bg,
.chroma,
@@ -8,18 +8,22 @@
background-color: transparent if($enable-important-utilities, !important, null);
}
.chroma {
display: flex;
}
.chroma code {
flex: 1;
}
.syntax-highlight {
background-color: var(--bs-light) if($enable-important-utilities, !important, null);
overflow-x: auto;
}
.preview-background {
background-color: var(--bs-dark-bg-subtle) if($enable-important-utilities, !important, null);
}
@if $enable-dark-mode {
[data-bs-theme="dark"] {
@import "components/syntax-dark"; // stylelint-disable-line no-invalid-position-at-import-rule
@import "syntax-dark"; // stylelint-disable-line no-invalid-position-at-import-rule
.bg,
.chroma,

View File

@@ -14,11 +14,7 @@ $semi-circle-border: 0.2rem;
.timeline-#{$state} {
--timeline-highlight: var(--#{$prefix}#{$state});
}
.timeline-bg-#{$state} {
--timeline-connector-bg: var(--#{$prefix}#{$state}-bg-subtle);
}
}
}
// scss-docs-end timeline
@@ -27,10 +23,16 @@ $semi-circle-border: 0.2rem;
}
.timeline-sm {
--timeline-icon-radius: calc(#{$semi-circle-radius} / 2);
--timeline-icon-radius: calc(#{$semi-circle-radius} / 2.4);
--timeline-offset: 25%
}
@include media-breakpoint-up(sm) {
.timeline-sm {
--timeline-icon-radius: calc(#{$semi-circle-radius} / 2);
}
}
.timeline::before, .timeline-sm::before {
content: "";
width: 2 * $semi-circle-border;

View File

@@ -48,6 +48,10 @@
font: inherit;
}
#toc-collapse {
border-color: var(--bs-secondary-color) !important;
}
.toc-button {
--bs-btn-hover-color: var(--bs-primary);
--bs-btn-hover-bg: var(--bs-body-bg);
@@ -65,3 +69,24 @@
outline: none;
}
}
@if $enable-dark-mode {
[data-bs-theme="dark"] {
.toc-button {
--bs-btn-color: var(--bs-body-color);
--bs-btn-border-color: var(--bs-body-color);
}
#toc-collapse {
border-color: var(--bs-body-color) !important;
}
.toc nav a {
color: var(--bs-body-color);
&:hover {
color: white;
}
}
}
}

View File

@@ -94,6 +94,9 @@ home = ["HTML", "RSS", "REDIR"]
[[module.mounts]]
source = "assets"
target = "assets"
[[module.mounts]]
source = "content"
target = "content"
[[module.mounts]]
source = "i18n"
target = "i18n"

View File

@@ -31,5 +31,5 @@ defaultMarkdownHandler = "goldmark"
block = true
[goldmark.renderer]
hardWraps = false
unsafe = true
unsafe = false
xhtml = false

View File

@@ -27,6 +27,7 @@
[debugging]
showJS = false
showSCSS = false
purgeHTMLComments = false
# toml-docs-end debugging
# toml-docs-start docs
@@ -55,6 +56,7 @@
breadcrumb = true
toc = true
sidebar = true
size = "md"
# toml-docs-end navigation
# toml-docs-start messages
@@ -135,6 +137,8 @@
dark = "#212529"
# toml-docs-end theme-colors
themeOpacity = "10"
darkModeShade = "20%"
darkModeTint = "40%"
# toml-docs-start font
themeFont = "Inter"
# themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # external path

23
config/ci/hugo.toml Normal file
View File

@@ -0,0 +1,23 @@
# cachedir default on POSIX: '/tmp/hugo_cache_runner'
# cachedir default on Windows: '~\AppData\Local\hugo_cache'
# cachedir default on macOS: '/Users/runner/Library/Caches/hugo_cache'
[caches]
[caches.assets]
dir = ':cacheDir/resources/_gen' # map to cacheDir instead of resourceDir to utilize GitHub action/cache
maxAge = -1
[caches.getcsv]
dir = ':cacheDir/:project'
maxAge = -1
[caches.getjson]
dir = ':cacheDir/:project'
maxAge = -1
[caches.getresource]
dir = ':cacheDir/:project'
maxAge = -1
[caches.images]
dir = ':cacheDir/resources/_gen' # map to cacheDir instead of resourceDir to utilize GitHub action/cache
maxAge = -1
[caches.modules]
dir = ':cacheDir/modules'
maxAge = -1

View File

@@ -1,3 +1,4 @@
resourcedir = '../resources/'
title = "Hinode"
copyright = "Copyright © 2023 Mark Dumay."
paginate = 9

View File

@@ -1,36 +1,53 @@
# toml-docs-start lang-main
[en]
languageName = "English"
contentDir = "content/en"
weight = 1
languageName = "English"
contentDir = "content/en"
weight = 1
# toml-docs-end lang-main
# toml-docs-start lang-param
[en.params.head]
tagline = "A Hugo Theme"
[en.params.social]
title = "Follow me"
caption = "I work on everything coding and tweet developer memes"
[en.params.footer]
# 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>)."
[en.params.head]
tagline = "A Hugo Theme"
[en.params.social]
title = "Follow me"
caption = "I work on everything coding and tweet developer memes"
[en.params.footer]
# 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>)."
# toml-docs-end lang-param
[en.params.sections.blog]
reference = "More Posts"
[en.params.sections.projects]
reference = "More Projects"
[en.params.sections.blog]
reference = "More Posts"
[en.params.sections.projects]
reference = "More Projects"
[nl]
languageName = "Nederlands"
contentDir = "content/nl"
weight = 2
[nl.params.head]
tagline = "Een Hugo Thema"
[nl.params.social]
title = "Volg mij"
caption = "Ik doe aan programmeren en tweet memes"
[nl.params.footer]
# 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>)."
[nl.params.sections.blog]
reference = "Meer artikelen"
[nl.params.sections.projects]
title = "Projecten"
reference = "Meer projecten"
languageName = "Nederlands"
contentDir = "content/nl"
weight = 2
[nl.params.head]
tagline = "Een Hugo Thema"
[nl.params.social]
title = "Volg mij"
caption = "Ik doe aan programmeren en tweet memes"
[nl.params.footer]
# 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>)."
[nl.params.sections.blog]
reference = "Meer artikelen"
[nl.params.sections.projects]
title = "Projecten"
reference = "Meer projecten"
[fr]
languageName = "Français"
contentDir = "content/fr"
weight = 2
[fr.params.head]
tagline = "Un thème Hugo"
[fr.params.social]
title = "Suivez-moi"
caption = "Je code et je tweet des mèmes de développeurs."
[fr.params.footer]
# 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>)."
[fr.params.sections.blog]
reference = "Plus d'articles"
[fr.params.sections.projects]
title = "Projets"
reference = "Plus de projets"

View File

@@ -31,5 +31,5 @@ defaultMarkdownHandler = "goldmark"
block = true
[goldmark.renderer]
hardWraps = false
unsafe = true
unsafe = false
xhtml = false

View File

@@ -0,0 +1,73 @@
[[main]]
name = "À propos"
pageRef = "/a-propos/"
weight = 10
[[main]]
name = "Blog"
pageRef = "/blog/"
weight = 20
[[main]]
name = "Projets"
pageRef = "/projets/"
weight = 30
[[main]]
name = "Exemple de projet"
pageRef = "/projets/exemple-de-projet/"
parent = "Projets"
weight = 1
[[main]]
name = "Autre projet"
pageRef = "/projets/autre-projet/"
parent = "Projets"
weight = 2
[[main]]
name = "Tags"
pageRef = "/tags/"
weight = 40
[[social]]
name = "LinkedIn"
pre = "fab linkedin"
url = "https://linkedin.com/"
weight = 10
[[social]]
name = "GitHub"
pre = "fab fa-github"
url = "https://github.com/"
weight = 20
[[social]]
name = "Medium"
pre = "fab medium"
url = "https://medium.com/"
weight = 30
# toml-docs-start sample-navigation
[[sample]]
name = "Blog"
pageRef = "/blog/"
weight = 10
[[sample]]
name = "Projets"
pageRef = "/projets/"
weight = 20
[[sample]]
name = "Exemple de projet"
pageRef = "/projets/exemple-de-projet/"
parent = "Projets"
weight = 1
[[sample]]
name = "Autre projet"
pageRef = "/projets/autre-projet/"
parent = "Projets"
weight = 2
# toml-docs-end sample-navigation

View File

@@ -21,6 +21,7 @@
[debugging]
showJS = false
showSCSS = false
purgeHTMLComments = true # prevents a Goldmark warning when processing HTML comments (as used by markdownlint)
[docs]
basePath = "/" # TODO: replace
@@ -44,6 +45,7 @@
breadcrumb = true
toc = true
sidebar = true
size = "md"
[messages]
placement = "bottom-right"
@@ -131,6 +133,8 @@
light = "#f8f9fa"
dark = "#212529"
themeOpacity = "10"
darkModeShade = "20%"
darkModeTint = "40%"
themeFont = "Inter"
# themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # external path
themeFontPath = "/fonts" # local path

View File

@@ -0,0 +1,22 @@
# cachedir default on POSIX: '/tmp/hugo_cache_runner'
# cachedir default on Windows: '~\AppData\Local\hugo_cache'
[caches]
[caches.assets]
dir = ':cacheDir/resources/_gen' # map to cacheDir instead of resourceDir to utilize GitHub action/cache
maxAge = -1
[caches.getcsv]
dir = ':cacheDir/:project'
maxAge = -1
[caches.getjson]
dir = ':cacheDir/:project'
maxAge = -1
[caches.getresource]
dir = ':cacheDir/:project'
maxAge = -1
[caches.images]
dir = ':cacheDir/resources/_gen' # map to cacheDir instead of resourceDir to utilize GitHub action/cache
maxAge = -1
[caches.modules]
dir = ':cacheDir/modules'
maxAge = -1

View File

@@ -6,29 +6,19 @@ updated: 2023-08-02
showComments: false
---
<p class="text-center"><svg class="img-fluid w-50"><use href="/img/logo_var.svg#logo"></use></svg></p>
{{< image src="/img/logo_var.svg#logo" class="img-fluid w-50" wrapper="text-center" >}}
<section class="section section-sm mt-5 mb-5">
<div class="container-fluid">
<div class="row justify-content-center text-center">
<div class="col-lg-4">
{{< icon fab bootstrap fa-2xl >}}
<h2 class="h4">Bootstrap framework</h2>
<p>Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source Sass files.</p>
</div>
<div class="col-lg-4">
{{< icon fas magnifying-glass fa-2xl >}}
<h2 class="h4">Full text search</h2>
<p>Search your site with FlexSearch, a full-text search library with zero dependencies.</p>
</div>
<div class="col-lg-4">
{{< icon fas code fa-2xl >}}
<h2 class="h4">Development tools</h2>
<p>Use Node Package Manager to automate the build process and to keep track of dependencies.</p>
</div>
</div>
</div>
</section>
{{< card-group class="text-center border-0" padding="3" >}}
{{< card title="Bootstrap framework" icon="fab bootstrap" >}}
Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source Sass files.
{{< /card >}}
{{< card title="Full text search" icon="fas magnifying-glass" >}}
Search your site with FlexSearch, a full-text search library with zero dependencies.
{{< /card >}}
{{< card title="Development tools" icon="fas code" >}}
Use Node Package Manager to automate the build process and to keep track of dependencies.
{{< /card >}}
{{< /card-group >}}
Additional features include:

View File

@@ -1,7 +1,7 @@
---
author: Mark Dumay
title: Bootstrap elements
date: 2023-08-05
date: 2023-08-12
description: Use shortcodes to add common Bootstrap elements with ease.
tags: ["bootstrap", "shortcode"]
thumbnail:
@@ -22,11 +22,10 @@ As an example, the following shortcode displays an accordion with three elements
{{< example lang="hugo" >}}
{{</* accordion */>}}
{{</* accordion-item header="Accordion Item #1" show="true" */>}}
This is the first item's accordion body. It supports HTML content. The item is shown by adding the value
<code>show</code> to the <code>class</code> argument.
This is the first item's accordion body. It supports HTML content, if enabled in the goldmark renderer. The item is shown by adding the value `show` to the `class` argument.
{{</* /accordion-item */>}}
{{</* accordion-item header="Accordion Item #2" */>}}
This is the second item's accordion body. It supports HTML content too.
This is the second item's accordion body.
{{</* /accordion-item */>}}
{{</* accordion-item header="Accordion Item #3" */>}}
This is the third item's accordion body.
@@ -102,7 +101,28 @@ As an example, the following shortcode displays a stacked card that links to the
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* card path="about" padding="3" class="w-50" color="body-tertiary" header="publication" footer="none" */>}}
{{</* card path="about" padding="3" class="col-6 mx-auto" color="body-tertiary" header="publication" footer="none" /*/>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Card group
As an example, the following shortcode displays a card group of three elements.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* card-group padding="3" */>}}
{{</* card title="Bootstrap framework" icon="fab bootstrap" */>}}
Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source
Sass files.
{{</* /card */>}}
{{</* card title="Full text search" icon="fas magnifying-glass" */>}}
Search your site with FlexSearch, a full-text search library with zero dependencies.
{{</* /card */>}}
{{</* card title="Development tools" icon="fas code" */>}}
Use Node Package Manager to automate the build process and to keep track of dependencies.
{{</* /card */>}}
{{</* /card-group */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
@@ -217,6 +237,31 @@ As an example, the following shortcode displays an image with rounded corners an
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Link
As an example, the following shortcodes render links in different formats.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
- {{</* link hinode >}}Named link with default settings{{< /link */>}}
- {{</* link name=hinode cue=false tab=false >}}Named link opening in current tab w/o icon{{< /link */>}}
- {{</* link name=hinode cue=true tab=true >}}Named link opening in new tab with icon{{< /link */>}}
- {{</* link hinode /*/>}}
- {{</* link href="https://developer.mozilla.org" >}}External link{{< /link */>}}
- {{</* link "./projects/another-project" >}}Internal link with title{{< /link */>}}
- {{</* link url="projects/another-project" /*/>}}
- {{</* link url="/projects/another-project" /*/>}}
- {{</* link url="../projects/another-project" case=false /*/>}}
- {{</* link "/about/" /*/>}}
- {{</* link "/fr/about/" /*/>}}
- {{</* link "/fr/about" >}}About (French){{< /link */>}}
- {{</* link "#image" /*/>}}
- {{</* link "components/#map" /*/>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Nav
As an example, the following shortcode displays a tab group with vertically aligned pills.
@@ -225,11 +270,10 @@ As an example, the following shortcode displays a tab group with vertically alig
{{< 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.
This is the first item's nav body. It supports HTML content, if enabled in the goldmark renderer. The item is shown by adding the value `show` to the `class` argument.
{{</* /nav-item */>}}
{{</* nav-item header="Nav Item #2" */>}}
This is the second item's nav body. It too supports HTML content.
This is the second item's nav body.
{{</* /nav-item */>}}
{{</* nav-item header="Nav Item #3" */>}}
This is the third item's nav body.
@@ -244,7 +288,7 @@ As an example, the following shortcode displays a light navigation header.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* navbar path="about" color="primary" size="md" search="false" menus="sample" title="Brand" mode="false" */>}}
{{</* navbar id="navbar-sample" path="blog" color="primary" size="md" search="false" menus="sample" title="Brand" mode="false" */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,14 @@
---
author: Mark Dumay
title: Bienvenue sur Hinode!
thumbnail:
url: /img/sunrise.jpg
author: Harris Vo
authorURL: https://unsplash.com/@hoanvokim
origin: https://unsplash.com/photos/ZX6BPboJrYk
originName: Unsplash
---
Un thème de blog et de documentation pour Hugo basé sur Bootstrap 5.
{{< button href="a-propos" >}}À propos{{< /button>}}

View File

@@ -0,0 +1,39 @@
---
slug: a-propos
title: À propos
description: Un thème de blog et de documentation pour Hugo basé sur Bootstrap 5.
date: 2023-02-17
updated: 2023-08-02
showComments: false
---
{{< image src="/img/logo_var.svg#logo" class="img-fluid w-50" wrapper="text-center" >}}
{{< card-group class="text-center border-0" padding="3" >}}
{{< card title="Framework Bootstrap" icon="fab bootstrap" >}}
Créez des sites rapides et réactifs avec Bootstrap 5. Personnalisez facilement votre site avec les fichiers source Sass.
{{< /card >}}
{{< card title="Recherche en texte intégral" icon="fas magnifying-glass" >}}
Recherchez votre site avec FlexSearch, une bibliothèque de recherche en texte intégral avec zéro dépendances.
{{< /card >}}
{{< card title="Outils de développement" icon="fas code" >}}
Utilisez Node Package Manager pour automatiser le processus de construction et suivre les dépendances.
{{< /card >}}
{{< /card-group >}}
Les fonctionnalités supplémentaires incluent:
- Passer du mode clair au mode sombre
- Prise en charge de plusieurs langues
- Composants bootstrap réutilisables à travers des codes et partiels configurables
- Documentation versionnée, incluant une navigation latérale et un sélecteur de version.
- Commentaires intégrés via une intégration légère avec GitHub via [utteranc.es]({{< param "links.utterances" >}})
- Gestion d'images adaptatives pour plusieurs tailles d'écran et résolutions.
- Résultats de recherche optimisés, obtenant un score de 100 points pour le référencement (SEO) sur [PageSpeed Insights]({{< param "links.pagespeed" >}}).
- Sécurisé par défaut, obtenant un score A+ au test [Mozilla Observatory]({{< param "links.observatory" >}})
{.tickmark}
Hinode est inspiré par les thèmes suivants:
- [Blist](https://github.com/apvarun/blist-hugo-theme) - Un thème de blog pour Hugo basé sur Tailwind CSS.
- [Doks](https://github.com/h-enk/doks) - Un thème Hugo pour la création de sites de documentation sécurisés, rapides et optimisés pour le référencement (SEO), que vous pouvez facilement mettre à jour et personnaliser.

View File

@@ -0,0 +1,4 @@
---
author: Mark Dumay
title: Blog
---

View File

@@ -0,0 +1,18 @@
---
author: Mark Dumay
title: Premier article
slug: premier-article
date: 2022-10-01
description: Ceci est mon premier article.
tags: ["blog"]
thumbnail:
url: img/notepad.jpg
author: Frederick Medina
authorURL: https://unsplash.com/@frederickjmedina
origin: Unsplash
originURL: https://unsplash.com/photos/PdfRE-xB--s
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vulputate, ante in luctus congue, leo risus semper justo, vel consequat sapien lectus quis ipsum. In imperdiet urna justo. Nulla vel pellentesque ipsum. Cras congue feugiat dolor ac aliquam. Pellentesque eget dui venenatis, ultrices urna ac, vehicula nibh. Curabitur est lectus, dapibus eu vehicula non, malesuada et dui. Nam enim nulla, egestas et nunc non, elementum aliquet justo. Mauris euismod mauris sapien, eget vestibulum odio dictum sit amet. Morbi nisl elit, placerat at auctor in, finibus ac neque. Curabitur placerat feugiat risus non vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis cursus est, nec posuere libero.
In ac lobortis diam. Curabitur id dui ac nunc mattis rhoncus a sed lorem. Sed lobortis sem turpis, at posuere enim dignissim et. Vivamus fermentum justo quis volutpat volutpat. Proin eget vehicula neque, ut tempus urna. Duis ac ex vel leo pharetra lobortis et vitae lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam erat volutpat. Suspendisse ullamcorper ultrices elementum. Suspendisse mi elit, commodo at varius a, cursus a ligula. Sed et mattis elit, eu luctus arcu. Cras a porttitor libero. Vestibulum tincidunt sed magna at dapibus. Sed quis orci eu lacus aliquam tristique. Integer porttitor ultrices ipsum quis porttitor. Etiam a sodales ligula.

View File

@@ -0,0 +1,20 @@
---
author: Mark Dumay
title: Quatrième article
slug: quatrieme-article
date: 2023-01-01
description: Ceci est mon quatrième article.
tags: ["blog"]
thumbnail:
url: img/flowers.jpg
author: Arvee Marie
authorURL: https://unsplash.com/@flutterhappy
origin: Unsplash
originURL: https://unsplash.com/photos/YnfGtpt2gf4
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam finibus libero in felis accumsan, vitae imperdiet metus vehicula. Quisque nec dignissim purus. In id dui porta sapien posuere viverra nec vel nisi. Sed varius tincidunt lectus, quis sagittis felis interdum id. Proin purus odio, ultrices auctor libero convallis, volutpat gravida turpis. Ut commodo metus orci, quis sagittis lectus rhoncus non. Nulla et lectus tortor. Suspendisse quam felis, molestie non odio quis, consequat venenatis orci. Etiam sed turpis sit amet elit scelerisque imperdiet. Sed suscipit felis non nibh suscipit egestas. Nulla sodales libero non rhoncus consequat. Nunc in elit at est cursus congue ut ac velit. Cras luctus libero augue, id semper sapien volutpat ultrices.
Pellentesque sit amet sollicitudin nibh. Cras in dolor eget quam feugiat ultricies in ac lectus. Ut venenatis vitae justo quis pretium. Pellentesque vulputate nulla ac est iaculis vulputate. Proin pellentesque sem nec molestie imperdiet. Duis eu molestie sapien, vel ultricies lacus. Donec in felis tempus, rutrum ipsum at, fermentum felis. Praesent mi odio, semper non vulputate vitae, vulputate quis ex.
Nunc rhoncus eleifend gravida. Aliquam feugiat tristique pellentesque. Pellentesque vel elit sed nulla commodo convallis. Curabitur placerat sapien augue, ac semper metus volutpat non. Sed semper ultricies enim, consequat convallis justo placerat eget. Ut fermentum leo facilisis metus congue commodo. Vestibulum consectetur magna vitae ullamcorper sodales. Nulla lobortis aliquam odio id tincidunt. Suspendisse efficitur auctor tortor non consequat. Quisque sit amet posuere lorem, convallis bibendum nisi. Proin ullamcorper justo tempus dignissim scelerisque. Quisque sit amet sapien libero. Phasellus eget enim velit. Proin ut fermentum dui. Proin gravida tortor in ligula lacinia, id dapibus dui tincidunt. Mauris suscipit nisi et urna consectetur, non venenatis nisi euismod.

View File

@@ -0,0 +1,20 @@
---
author: Mark Dumay
title: Deuxième article
slug: deuxieme-article
date: 2022-11-01
description: Ceci est mon deuxième article.
tags: ["blog"]
thumbnail:
url: img/phone.jpg
author: Thom
authorURL: https://unsplash.com/@thomweerd
origin: Unsplash
originURL: https://unsplash.com/photos/Zdcq3iKly6g
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non sollicitudin sapien. Ut porttitor lectus eu tempor ultricies. Sed semper tincidunt nibh pellentesque condimentum. Vivamus dictum sem eu rhoncus semper. Vestibulum convallis congue tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris magna urna, egestas sit amet ligula quis, viverra semper arcu. Praesent laoreet nunc vitae nulla posuere facilisis.
Nunc eget dignissim ex, sed lobortis leo. Suspendisse mollis posuere tellus, in viverra nunc ullamcorper vitae. Nam vel tempor arcu, in imperdiet odio. Fusce malesuada vehicula odio, in iaculis nulla congue eget. Quisque id odio id nisl facilisis posuere porta sit amet mauris. Curabitur lorem leo, tempus id rhoncus eget, placerat vitae lectus. Morbi eu aliquet enim. Nulla malesuada laoreet sodales.
Nunc volutpat dui in elit euismod, sed egestas purus tristique. Nam in condimentum mauris. Praesent nec suscipit enim. Aliquam dolor ipsum, faucibus vitae purus ac, congue egestas nisi. Donec hendrerit erat eu arcu porttitor rhoncus. Nunc a odio bibendum metus semper pellentesque. Sed at sapien ut est semper eleifend. Aliquam lorem libero, porttitor nec tristique ut, auctor vitae ipsum. Suspendisse pretium pharetra rutrum. Nulla tincidunt tempus enim eu sagittis. Maecenas pulvinar metus a urna mattis dictum sed id tellus.

View File

@@ -0,0 +1,20 @@
---
author: Mark Dumay
title: Troisième article
slug: troisieme-article
date: 2022-12-01
description: Ceci est mon troisième article.
tags: ["blog"]
thumbnail:
url: https://picsum.photos/id/184/4288/2848.jpg
author: Tim de Groot
authorURL: https://unsplash.com/@timdegroot
origin: Unsplash
originURL: https://unsplash.com/photos/yNGQ830uFB4
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id scelerisque ligula. Vestibulum eu lorem tortor. Suspendisse tristique ultrices mauris, non maximus lorem faucibus in. Suspendisse sagittis eleifend dapibus. Curabitur dignissim luctus sapien eu consequat. Proin congue dui vel ipsum bibendum varius. Pellentesque cursus nisi metus, egestas eleifend ipsum sollicitudin vitae. Sed vitae erat elementum, semper turpis sed, molestie nulla.
Nulla molestie ultrices vehicula. Etiam iaculis, erat a blandit blandit, nulla tellus dapibus ligula, vitae venenatis turpis diam non felis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu in justo iaculis egestas. In imperdiet arcu vitae pharetra commodo. Quisque ut erat eget nisl semper laoreet vitae eget ligula. Mauris bibendum purus nec vulputate faucibus. In luctus sagittis ante, quis laoreet orci bibendum vitae. Nam at odio accumsan, tincidunt eros at, lacinia metus. In et ultricies sapien, a mollis est. Nunc convallis orci eu tristique euismod. Proin vel ullamcorper diam. Quisque et semper orci. Proin pharetra lorem justo, id malesuada erat feugiat sit amet. Praesent bibendum mi at lorem volutpat suscipit. Morbi sed libero elit.
Nunc sodales est eu ipsum volutpat, in mollis dui facilisis. Nulla faucibus interdum lectus, a condimentum elit vulputate eu. Nunc ipsum risus, suscipit sit amet nulla ac, pulvinar maximus nulla. In venenatis diam erat, non elementum ante dignissim posuere. Aliquam sem justo, luctus at vestibulum ut, egestas ut quam. Quisque a dolor viverra, aliquam nunc vel, lacinia nulla. In id magna magna. Morbi dapibus pretium sollicitudin. Morbi volutpat augue at felis tristique, quis euismod tellus vulputate. Morbi dui lacus, aliquam eget quam vel, vestibulum faucibus enim. Proin porta pretium metus id venenatis. Aliquam nec tempor lorem. Vivamus euismod est varius sagittis placerat. Maecenas tincidunt elementum libero, at imperdiet elit feugiat vel.

View File

@@ -0,0 +1,6 @@
---
draft: false
outputs:
- xml
url: browserconfig.xml
---

View File

@@ -0,0 +1,5 @@
---
author: Katheryn Fox
title: Projets
url: "projets"
---

View File

@@ -0,0 +1,12 @@
---
author: "Hugo Authors"
slug: "autre-projet"
title: "Autre projet"
url: "projets/autre-projet"
date: 2021-07-15
description: "Un autre projet."
tags: ["javascript", "golang"]
icon: fas rocket
---
Vivamus iaculis metus sed magna porta tincidunt. Aliquam molestie eget orci eu elementum. Integer pellentesque dolor sit amet suscipit maximus. Duis consequat, massa vitae volutpat rhoncus, erat augue venenatis velit, a auctor leo nulla nec turpis. Nunc ut libero sapien. Vivamus aliquam ultrices vestibulum. Sed sit amet vestibulum dolor, ut vehicula diam. Sed felis purus, feugiat vitae vulputate quis, sodales vitae dui. Pellentesque volutpat fringilla sapien varius condimentum. Integer odio massa, pharetra at bibendum vitae, aliquam nec erat.

View File

@@ -0,0 +1,12 @@
---
author: "Hugo Authors"
slug: "exemple-de-projet"
title: "Exemple de projet"
url: "projets/exemple-de-projet"
date: 2021-07-15
description: "Un exemple de projet."
tags: ["html", "css"]
icon: fab docker
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

View File

@@ -7,30 +7,20 @@ updated: 2023-08-02
showComments: false
---
<p class="text-center"><svg class="img-fluid w-50"><use href="/img/logo_var.svg#logo"></use></svg></p>
<section class="section section-sm mt-5">
<div class="container-fluid">
<div class="row justify-content-center text-center">
<div class="row justify-content-center text-center">
<div class="col-lg-4">
{{< icon fab bootstrap fa-2xl >}}
<h2 class="h4">Bootstrap raamwerk</h2>
<p>Bouw snelle websites geschikt voor mobiele en desktop schermen met Bootstrap 5. Pas de site eenvoudig aan met bronbestanden in Sass.</p>
</div>
<div class="col-lg-4">
{{< icon fas magnifying-glass fa-2xl >}}
<h2 class="h4">Volledig doorzoekbaar</h2>
<p>Doorzoek je site met FlexSearch, een software bibliotheek zonder afhankelijkheden.</p>
</div>
<div class="col-lg-4">
{{< icon fas code fa-2xl >}}
<h2 class="h4">Ontwikkelgereedschap</h2>
<p>Gebruik Node Package Manager om het bouwproces inclusief versiebeheer volledig te automatiseren.</p>
</div>
</div>
</div>
</section>
{{< image src="/img/logo_var.svg#logo" class="img-fluid w-50" wrapper="text-center" >}}
{{< card-group class="text-center border-0" padding="3" >}}
{{< card title="Bootstrap raamwerk" icon="fab bootstrap" >}}
Bouw snelle websites geschikt voor mobiele en desktop schermen met Bootstrap 5. Pas de site eenvoudig aan met bronbestanden in Sass.
{{< /card >}}
{{< card title="Volledig doorzoekbaar" icon="fas magnifying-glass" >}}
Doorzoek je site met FlexSearch, een software bibliotheek zonder afhankelijkheden.
{{< /card >}}
{{< card title="Ontwikkelgereedschap" icon="fas code" >}}
Gebruik Node Package Manager om het bouwproces inclusief versiebeheer volledig te automatiseren.
{{< /card >}}
{{< /card-group >}}
Overige functies:

View File

@@ -4,8 +4,8 @@ go 1.19
require (
github.com/gethinode/mod-bootstrap v1.1.1 // indirect
github.com/gethinode/mod-flexsearch v1.2.0 // indirect
github.com/gethinode/mod-fontawesome v1.2.4 // indirect
github.com/gethinode/mod-flexsearch v1.4.0 // indirect
github.com/gethinode/mod-fontawesome v1.2.5 // indirect
github.com/gethinode/mod-katex v1.0.2 // indirect
github.com/gethinode/mod-leaflet v0.3.4 // indirect
)

View File

@@ -2,8 +2,15 @@ github.com/gethinode/mod-bootstrap v1.1.1 h1:Tx4M5hGVOFrEaxnUONDAm6N9xuRi5UphKlT
github.com/gethinode/mod-bootstrap v1.1.1/go.mod h1:DcpPc2cNaXUPGEvhD7npuEEPA7573NvakTlrwFbyjr8=
github.com/gethinode/mod-flexsearch v1.2.0 h1:SSMpWzK9SMbi9QRYfil9PJZLLWWLHWzlTc69UxtSWAA=
github.com/gethinode/mod-flexsearch v1.2.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.3.0 h1:RbfEDw219Y1rOVp9lHmy5ePdF9lyPalDu2J5oVeejrU=
github.com/gethinode/mod-flexsearch v1.3.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.4.0 h1:5e/NVRLyWzUZ9fO/fNsM5o+O7nw+xyln2rfEOtbgfWc=
github.com/gethinode/mod-flexsearch v1.4.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-fontawesome v1.2.4 h1:SqE3CQ+boaBIhrVh3MPu4nz0uoHPfEH5t60nNY1CfsI=
github.com/gethinode/mod-fontawesome v1.2.4/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.2.5 h1:RqkLRj6+s+gM4nKd0IwNMMDA8cRmxfp0fxkVH4FdAGU=
github.com/gethinode/mod-fontawesome v1.2.5/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-katex v1.0.1/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.2 h1:pIG4n3qLl/IVe7BEiwn+GL8r5lOCtF6FDxlcrPKdAXk=
github.com/gethinode/mod-katex v1.0.2/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-leaflet v0.3.4 h1:oY+YQ0JiJuhFQNrk9XgFdg0NMsTUQPXNfnILp4ia4r4=

463
exampleSite/hugo_stats.json Normal file
View File

@@ -0,0 +1,463 @@
{
"htmlElements": {
"tags": [
"a",
"body",
"br",
"button",
"code",
"div",
"figcaption",
"figure",
"footer",
"form",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"head",
"hr",
"html",
"i",
"img",
"input",
"li",
"link",
"meta",
"nav",
"nil",
"noscript",
"ol",
"p",
"path",
"pre",
"script",
"small",
"span",
"strong",
"svg",
"time",
"title",
"ul",
"use"
],
"classes": [
"accordion",
"accordion-body",
"accordion-button",
"accordion-collapse",
"accordion-header",
"accordion-item",
"active",
"alert",
"alert-danger",
"alert-dismissible",
"align-content-center",
"align-items-center",
"align-items-end",
"align-items-start",
"align-middle",
"align-self-center",
"anchor",
"badge",
"bg-body",
"bg-body-tertiary",
"bg-danger",
"bg-info",
"bg-opacity-10",
"bg-primary",
"bg-primary-subtle",
"bg-secondary",
"border",
"border-0",
"border-1",
"border-bottom",
"border-end",
"border-none",
"border-start",
"border-top",
"bottom-0",
"bottom-bar",
"breadcrumb",
"breadcrumb-item",
"btn",
"btn-close",
"btn-group",
"btn-light",
"btn-outline-primary",
"btn-outline-secondary",
"btn-primary",
"btn-secondary",
"btn-sm",
"btn-social",
"card",
"card-body",
"card-body-link",
"card-emphasize",
"card-img-top",
"card-img-wrap",
"card-text",
"card-title",
"card-zoom",
"carousel",
"carousel-caption",
"carousel-control-next",
"carousel-control-next-icon",
"carousel-control-prev",
"carousel-control-prev-icon",
"carousel-indicators",
"carousel-inner",
"carousel-item",
"chroma",
"col",
"col-12",
"col-3",
"col-4",
"col-6",
"col-8",
"col-9",
"col-lg-2",
"col-lg-4",
"col-lg-8",
"col-md-10",
"col-md-2",
"col-md-4",
"col-md-8",
"col-md-auto",
"col-sm-12",
"col-sm-3",
"col-sm-6",
"collapse",
"collapsed",
"container",
"container-fluid",
"container-xxl",
"d-block",
"d-flex",
"d-grid",
"d-inline",
"d-inline-flex",
"d-lg-block",
"d-md-block",
"d-md-flex",
"d-md-none",
"d-none",
"d-none-dark",
"d-none-light",
"d-sm-block",
"d-sm-none",
"display-1",
"display-4",
"dropdown",
"dropdown-divider-bg",
"dropdown-item",
"dropdown-menu",
"dropdown-menu-end",
"dropdown-toggle",
"emphasis",
"emphasis-dark",
"end-0",
"fa",
"fa-10x",
"fa-2x",
"fa-2xs",
"fa-4x",
"fa-arrow-left",
"fa-arrow-right",
"fa-bootstrap",
"fa-circle-check",
"fa-circle-half-stroke",
"fa-code",
"fa-docker",
"fa-ellipsis",
"fa-face-frown",
"fa-facebook",
"fa-fluid",
"fa-fw",
"fa-github",
"fa-globe",
"fa-heart",
"fa-house",
"fa-link",
"fa-linkedin",
"fa-magnifying-glass",
"fa-medium",
"fa-moon",
"fa-rocket",
"fa-share-nodes",
"fa-sort",
"fa-square-check",
"fa-sun",
"fa-up-right-from-square",
"fa-whatsapp",
"fa-wrapper",
"fa-x-twitter",
"fab",
"fade",
"fas",
"feature",
"figure-caption",
"fixed-top",
"flex-column",
"flex-fill",
"flex-grow-1",
"flex-wrap",
"font-monospace",
"footer",
"form-control",
"fs-3",
"fs-5",
"fw-30",
"fw-bold",
"fw-semibold",
"g-0",
"g-3",
"gap-2",
"gap-3",
"gradient",
"h-100",
"h6",
"heading",
"highlight",
"hstack",
"img-fluid",
"img-wrap",
"invisible",
"is-search",
"justify-content-between",
"justify-content-center",
"justify-content-end",
"justify-content-start",
"lead",
"leaflet-map",
"link-bg-body",
"link-bg-body-tertiary",
"link-bg-footer",
"link-primary",
"link-secondary",
"link-success",
"link-warning",
"m-0",
"main-nav-toggler",
"mb-0",
"mb-3",
"mb-4",
"mb-5",
"mb-lg-5",
"me-3",
"me-auto",
"middle-bar",
"min-vh-100",
"ms-1",
"ms-3",
"ms-auto",
"ms-md-3",
"mt-2",
"mt-3",
"mt-5",
"mt-auto",
"multi-docs-collapse-15",
"multi-file-collapse-1",
"mx-auto",
"mx-md-2",
"my-2",
"my-auto",
"my-md-0",
"nav",
"nav-item",
"nav-link",
"nav-pills",
"nav-tabs",
"navbar",
"navbar-brand",
"navbar-collapse",
"navbar-contrast",
"navbar-expand-md",
"navbar-nav",
"navbar-nav-scroll",
"navbar-toggler",
"next",
"no-js",
"order-1",
"order-2",
"order-3",
"order-4",
"order-first",
"order-sm-2",
"order-sm-3",
"p-0",
"p-1",
"p-2",
"p-3",
"p-4",
"pb-2",
"pb-3",
"pb-5",
"pe-3",
"position-absolute",
"position-fixed",
"position-relative",
"post-date",
"previous",
"ps-1",
"ps-3",
"ps-xl-3",
"pt-3",
"px-3",
"px-4",
"px-xxl-0",
"py-1",
"py-2",
"py-3",
"py-5",
"py-md-1",
"ratio",
"ratio-16x9",
"rounded",
"rounded-2",
"rounded-bottom",
"rounded-pill",
"rounded-top",
"row",
"row-cols-1",
"row-cols-2",
"row-cols-md-3",
"row-cols-sm-2",
"row-cols-sm-3",
"row-cols-sm-4",
"search",
"search-input",
"search-suggestions",
"shadow",
"show",
"slide",
"small",
"spinner-border",
"start-100",
"sticky-top",
"stretched-link",
"svg-inline--fa",
"switch-mode-collapsed",
"syntax-highlight",
"tab-content",
"tab-pane",
"tag-link",
"text-bg-body",
"text-bg-body-tertiary",
"text-bg-info",
"text-bg-primary",
"text-bg-success",
"text-bg-warning",
"text-body",
"text-body-secondary",
"text-break",
"text-center",
"text-decoration-none",
"text-end",
"text-info",
"text-nowrap",
"text-right",
"text-secondary",
"text-sm-start",
"text-uppercase",
"theme-icon",
"theme-icon-active",
"tickmark",
"timeline",
"timeline-bg-dark",
"timeline-connector-end",
"timeline-connector-start",
"timeline-description-text-end",
"timeline-description-text-start",
"timeline-dot",
"timeline-info",
"timeline-panel-end",
"timeline-panel-start",
"timeline-primary",
"timeline-semi-circle-end",
"timeline-semi-circle-start",
"timeline-sm",
"timeline-success",
"timeline-warning",
"toast",
"toast-body",
"toast-container",
"toast-header",
"toc",
"toc-button",
"toc-panel",
"toc-sidebar",
"toggler-icon",
"top-0",
"top-bar",
"translate-middle",
"visually-hidden",
"vr",
"w-100",
"w-50"
],
"ids": [
"-theme",
"-theme-collapsed",
"TableOfContents",
"accordion",
"accordion-0",
"accordion-0-heading-0",
"accordion-0-heading-1",
"accordion-0-heading-2",
"accordion-0-item-0",
"accordion-0-item-1",
"accordion-0-item-2",
"alert",
"badge",
"body-docs-collapse-15",
"body-file-collapse-1",
"breadcrumb",
"btn-webshare",
"button",
"button-group",
"card",
"card-group",
"carousel",
"carousel-0",
"collapse",
"collapse-1",
"command-prompt",
"docs",
"example",
"file",
"footer-docs-collapse-15",
"footer-file-collapse-1",
"formula-katex",
"icon",
"image",
"leaflet-map-0",
"link",
"map",
"nav",
"nav-0",
"nav-0-0",
"nav-0-1",
"nav-0-2",
"nav-0-btn-0",
"nav-0-btn-1",
"nav-0-btn-2",
"navbar",
"navbar-0-collapse",
"navbar-sample-collapse",
"release",
"spinner",
"timeline",
"toast",
"toast-container",
"toast-copied-code-message",
"toast-example-1",
"toast-example-2",
"toast-message-email-4",
"toc-collapse",
"tooltip"
]
}
}

2
go.mod
View File

@@ -4,7 +4,7 @@ go 1.19
require (
github.com/gethinode/mod-bootstrap v1.1.1 // indirect
github.com/gethinode/mod-flexsearch v1.2.0 // indirect
github.com/gethinode/mod-flexsearch v1.4.0 // indirect
github.com/gethinode/mod-fontawesome v1.2.5 // indirect
github.com/gethinode/mod-katex v1.0.2 // indirect
github.com/gethinode/mod-leaflet v0.3.4 // indirect

4
go.sum
View File

@@ -18,6 +18,10 @@ github.com/gethinode/mod-flexsearch v1.1.4 h1:dJvwBxYlLe/VGlctLn8k89STJ5toATIjNn
github.com/gethinode/mod-flexsearch v1.1.4/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.2.0 h1:SSMpWzK9SMbi9QRYfil9PJZLLWWLHWzlTc69UxtSWAA=
github.com/gethinode/mod-flexsearch v1.2.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.3.0 h1:RbfEDw219Y1rOVp9lHmy5ePdF9lyPalDu2J5oVeejrU=
github.com/gethinode/mod-flexsearch v1.3.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.4.0 h1:5e/NVRLyWzUZ9fO/fNsM5o+O7nw+xyln2rfEOtbgfWc=
github.com/gethinode/mod-flexsearch v1.4.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-fontawesome v1.0.2 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg=
github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.1.0 h1:rsDzUI+3ZlS/do2ff3ne8/z3KwHeysmuA+WsXlumXXk=

186
hugo_stats.json Normal file
View File

@@ -0,0 +1,186 @@
{
"htmlElements": {
"tags": [
"a",
"body",
"button",
"div",
"footer",
"form",
"head",
"hr",
"html",
"img",
"input",
"li",
"link",
"meta",
"nav",
"p",
"path",
"script",
"small",
"span",
"strong",
"svg",
"title",
"ul"
],
"classes": [
"active",
"align-content-center",
"align-items-center",
"align-self-center",
"bg-body",
"bg-info",
"bg-opacity-10",
"bg-primary",
"bottom-0",
"bottom-bar",
"btn",
"btn-close",
"btn-primary",
"col",
"col-12",
"col-lg-2",
"col-lg-4",
"col-md-2",
"col-md-4",
"col-md-8",
"col-md-auto",
"col-sm-12",
"col-sm-6",
"collapse",
"collapsed",
"container-fluid",
"container-xxl",
"d-block",
"d-flex",
"d-inline",
"d-lg-block",
"d-md-block",
"d-md-flex",
"d-md-none",
"d-none",
"d-sm-none",
"display-1",
"display-4",
"dropdown",
"dropdown-divider-bg",
"dropdown-item",
"dropdown-menu",
"dropdown-menu-end",
"dropdown-toggle",
"emphasis",
"end-0",
"fa",
"fa-10x",
"fa-2x",
"fa-book-open",
"fa-circle-half-stroke",
"fa-ellipsis",
"fa-face-frown",
"fa-fw",
"fa-github",
"fa-linkedin",
"fa-medium",
"fa-moon",
"fa-sun",
"fab",
"fas",
"feature",
"fixed-top",
"flex-column",
"flex-fill",
"flex-grow-1",
"flex-wrap",
"footer",
"form-control",
"fs-3",
"fw-30",
"fw-bold",
"h-100",
"img-fluid",
"img-wrap",
"invisible",
"is-search",
"justify-content-center",
"link-bg-footer",
"link-secondary",
"main-nav-toggler",
"mb-4",
"me-auto",
"middle-bar",
"min-vh-100",
"ms-auto",
"ms-md-3",
"mt-3",
"mt-5",
"mx-auto",
"mx-md-2",
"my-auto",
"nav-item",
"nav-link",
"navbar",
"navbar-brand",
"navbar-collapse",
"navbar-expand-md",
"navbar-nav",
"navbar-toggler",
"no-js",
"order-1",
"order-2",
"order-3",
"order-4",
"order-first",
"order-sm-2",
"order-sm-3",
"p-0",
"p-2",
"p-3",
"p-4",
"pb-5",
"pe-1",
"position-fixed",
"position-relative",
"px-3",
"px-4",
"px-xxl-0",
"py-2",
"py-5",
"py-md-1",
"rounded",
"row",
"row-cols-1",
"row-cols-sm-3",
"row-cols-sm-4",
"search",
"search-input",
"search-suggestions",
"shadow",
"svg-inline--fa",
"switch-mode-collapsed",
"text-center",
"text-decoration-none",
"text-secondary",
"text-sm-start",
"theme-icon",
"theme-icon-active",
"toast",
"toast-body",
"toast-container",
"toast-header",
"toggler-icon",
"top-bar",
"vr",
"w-100"
],
"ids": [
"-theme",
"-theme-collapsed",
"navbar-0-collapse",
"toast-container",
"toast-copied-code-message"
]
}
}

View File

@@ -26,7 +26,11 @@
# Sharing
- id: shareLink
translation: "Diese Seite teilen"
translation: "Diese Seite teilen per {{ . }}"
- id: shareSystem
translation: "Betriebssystem"
- id: copyToClipboard
translation: "In Zwischenablage kopieren"
- id: copiedToClipboard
translation: "Der Text befindet sich in die Zwischenablage"
- id: link

View File

@@ -28,7 +28,11 @@
# Sharing
- id: shareLink
translation: "Share via"
translation: "Share via {{ . }}"
- id: shareSystem
translation: "system"
- id: copyToClipboard
translation: "copy to clipboard"
- id: copiedToClipboard
translation: "copied to clipboard"
- id: link

115
i18n/fr.yaml Normal file
View File

@@ -0,0 +1,115 @@
# Single pages
- id: postedOnDate
translation: "Posté le {{ . }}"
- id: lastModified
translation: "Dernière modification le {{ . }}"
- id: read
translation: "de lecture"
- id: minutesShort
translation: "min"
- id: words
translation: "mots"
- id: photoFull
translation: "Photo par %s sur %s"
- id: photoShort
translation: "Photo par {{ . }}"
- id: photoOn
translation: "sur"
- id: draft
translation: "Brouillon"
# List pages
- id: article
translation: "Article"
- id: articles
translation: "Articles"
- id: more
translation: "Plus {{ . }}"
# Sharing
- id: shareLink
translation: "Partager via {{ . }}"
- id: shareSystem
translation: "système"
- id: copyToClipboard
translation: "copier dans le presse-papier"
- id: copiedToClipboard
translation: "copié dans le presse-papier"
- id: link
translation: "Lien"
- id: code
translation: "Code"
# Pagination
- id: paginationNav
translation: "Navigation de la page"
- id: paginationPrevious
translation: "Page précédente"
- id: paginationNext
translation: "Page suivante"
- id: paginationFirst
translation: "Première page"
- id: paginationLast
translation: "Dernière page"
# Navigation
- id: colorMode
translation: "Changer le thème"
- id: colorLight
translation: "Clair"
- id: colorDark
translation: "Sombre"
- id: colorAuto
translation: "Auto"
- id: toggleMainNav
translation: "Afficher/Masquer la navigation principale"
- id: home
translation: "Accueil"
- id: languageSwitcherLabel
translation: "Langage"
# Table of contents
- id: toc
translation: "Sur cette page"
- id: seeAlso
translation: "Voir également"
# Sidebar
- id: toggleSidebar
translation: "Afficher/Masquer la barre latérale"
# Feature
- id: addedFeature
translation: "Ajouté dans {{ . }}"
- id: deprecatedFeature
translation: "Obsolète dans {{ . }}"
# Versioning
- id: latest
translation: "dernière"
- id: allVersions
translation: "Toutes les versions"
- id: newerVersionAlert
translation: "Il existe une nouvelle version de {{ . }}!"
# 404 page
- id: pageNotFound
translation: "La page que vous recherchez n'existe pas ou une autre erreur s'est produite. Essayez de revenir à notre {{ . }}."
- id: pageNotFoundTitle
translation: "Page non trouvée"
- id: pageNotFoundHome
translation: "page d'accueil"
# Footer
- id: copyright
translation: "Copyright"
- id: rights
translation: "Tous droits réservés"
- id: poweredBy
translation: "Propulsé par {{ . }}."
# Comments
- id: show
translation: "Afficher"
- id: comments
translation: "Commentaires"

View File

@@ -26,7 +26,11 @@
# Sharing
- id: shareLink
translation: "Delen via"
translation: "Delen via {{ . }}"
- id: shareSystem
translation: "systeem"
- id: copyToClipboard
translation: "kopieren naar clipboard"
- id: copiedToClipboard
translation: "gekopieerd naar clipboard"
- id: link

View File

@@ -1,5 +1,5 @@
{{ if site.Params.navigation.anchor }}
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}">{{- partial "assets/icon.html" (dict "icon" "fas link anchor") }}</a></h{{ .Level }}>
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}" aria-labelledby="{{ .Anchor | safeURL }}">{{- partial "assets/icon.html" (dict "icon" "fas link anchor") }}</a></h{{ .Level }}>
{{ else }}
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }}</h{{ .Level }}>
{{ end }}

View File

@@ -30,7 +30,8 @@
"page" .
"fixed" (string .Site.Params.navigation.fixed)
"color" (.Site.Params.navigation.color)
"style" (default "light" .Site.Params.navigation.style))
"style" (default "light" .Site.Params.navigation.style)
"size" (default "md" .Site.Params.navigation.size))
-}}
</div>
{{ if .IsHome -}}

View File

@@ -30,7 +30,7 @@
<div class="hstack gap-3">
{{ range (.GetTerms "tags") -}}
{{- $url := (path.Join .Page.RelPermalink) | relLangURL -}}
{{ partial "assets/button.html" (dict "href" $url "title" .LinkTitle "color" "secondary" "size" "sm" "outline" "true") }}
{{ partial "assets/button.html" (dict "href" $url "title" .LinkTitle "color" "primary" "size" "sm" "outline" "true") }}
{{ end -}}
</div>
</div>
@@ -83,7 +83,8 @@
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "21x9" "outerClass" "img-wrap" "innerClass" "rounded" "title" .Params.title "caption" $credits) -}}
{{ end -}}
{{ end }}
{{ .Content }}
{{ partial "utilities/ProcessContent" (dict "page" .Page "raw" .RawContent )}}
{{ end -}}
{{ define "partials/footer.html" -}}

View File

@@ -9,7 +9,8 @@
"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.
"label" Optional assistive label for the button or badge. The label is applied to the badge instead of the
button when a badge has been defined. Default value of the button aria-label is its title.
"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.
@@ -139,20 +140,20 @@
{{- $attributes := .attributes -}}
<a aria-label="{{ $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end -}}
{{- with $id }}id="{{ . }}"{{ end -}}
{{- with $target }}target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end -}}
{{- with $toast }}data-toast-target="{{ $toast }}"{{ end -}}
{{- with $clipboard }}data-clipboard="{{ $clipboard }}"{{ 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 -}}"
<a aria-label="{{ or $label $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end -}}
{{- with $id }} id="{{ . }}"{{ end -}}
{{- with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end -}}
{{- with $toast }} data-toast-target="{{ $toast }}"{{ end -}}
{{- with $clipboard }} data-clipboard="{{ $clipboard }}"{{ 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 -}}
{{- 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 -}}
{{- range $key, $val := $attributes -}}
{{- print $key | safeHTMLAttr }}="{{ $val }}"
{{ printf " %s=\"%s\"" $key $val | safeHTMLAttr }}
{{- end -}}
>
<div class="d-flex justify-content-{{ $justify }}">

View File

@@ -7,6 +7,7 @@
The shortcode supports the following arguments:
"page" Required context of the current page.
"list" Required array of pages.
"cards" Optional string of rendered cards.
"max" Required maximum number of cards to display.
"cols" Required number of columns for the grid, must be a value between 1 and 5.
"title" Optional title of the card group.
@@ -30,21 +31,61 @@
-->
{{- $page := .page -}}
{{- if ne (printf "%T" $page) "*hugolib.pageState" -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'page'" -}}
{{- if not (in (slice "*hugolib.pageState" "*hugolib.pageForShortcode") (printf "%T" $page)) -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'page': %T" $page -}}
{{- end -}}
{{- $supportedTypes := slice "page.Pages" "resource.Resources" -}}
{{ $list := .list }}
{{- if not (in $supportedTypes (printf "%T" $list)) -}}
{{ warnf "Type: %T" $list }}
{{ $pages := .list }}
{{- if and $pages (not (in $supportedTypes (printf "%T" $pages))) -}}
{{ warnf "Type: %T" $pages }}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'list'" -}}
{{- end -}}
{{ $cards := .cards }}
{{- $paginate := false -}}
{{- with .paginate -}}
{{- if ne (printf "%T" .) "bool" -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'paginate'" -}}
{{- end -}}
{{- $paginate = . -}}
{{- end -}}
{{ $paginator := "" }}
{{ if $paginate }}
{{ $paginator = $page.Paginate $pages }}
{{ $pages = first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $pages) }}
{{ end }}
{{ $list := slice }}
{{ range $index, $element := $pages }}
{{ $params := dict }}
<!-- regular page -->
{{- if $element.RelPermalink -}}
{{- $params = merge $params (dict "path" $element.File.Path) -}}
<!-- headless page -->
{{- else -}}
{{- $thumbnail := (or (and (reflect.IsMap $element.Params.Thumbnail) $element.Params.Thumbnail.url) $element.Params.Thumbnail) -}}
{{- $params = merge $params (dict
"title" $element.Title
"href" $element.RelPermalink
"description" (partial "utilities/GetDescription.html" $element)
"thumbnail" $thumbnail
"icon" $element.Params.icon
) -}}
{{- end -}}
{{- $list = $list | append $params }}
{{ end }}
{{- $count := len $list -}}
{{- $max := .max -}}
{{- if ne (printf "%T" $max) "int" -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'max'" -}}
{{- $max := $count -}}
{{- with .max }}
{{- if ne (printf "%T" .) "int" -}}
{{- warnf "partial [assets/card-group.html] - Invalid value for param 'max': %s" . -}}
{{- else -}}
{{- $max = . -}}
{{- end -}}
{{- end -}}
{{- $max = math.Min $max $count -}}
@@ -58,13 +99,6 @@
{{- 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 -}}
{{- $paginate := false -}}
{{- with .paginate -}}
{{- if ne (printf "%T" .) "bool" -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'paginate'" -}}
{{- end -}}
{{- $paginate = . -}}
{{- end -}}
{{- if not $paginate -}}
{{- $list = first $max $list -}}
{{- end -}}
@@ -89,13 +123,7 @@
{{- if and (eq $cols 1) (eq $orientation "horizontal") }}{{ $orientation = "horizontal-sm" }}{{ end -}}
<div class="container-fluid p-4 px-xxl-0">
{{ $paginator := "" }}
{{ if $paginate }}
{{ $paginator = $page.Paginate $list }}
{{ $list = first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $list) }}
{{ end }}
<div class="container-fluid p-4 px-xxl-0 ">
<div class="row {{ $colGrid }}">
{{ range $index, $element := $list }}
{{- $params := (dict
@@ -106,19 +134,7 @@
"footer" $footer
"orientation" $orientation
) -}}
{{- if $element.RelPermalink -}}
{{- $params = merge $params (dict "path" $element.File.Path) -}}
{{- else -}}
{{- $thumbnail := (or (and (reflect.IsMap $element.Params.Thumbnail) $element.Params.Thumbnail.url) $element.Params.Thumbnail) -}}
{{- $params = merge $params (dict
"title" $element.Title
"href" $element.RelPermalink
"description" (partial "utilities/GetDescription.html" $element)
"thumbnail" $thumbnail
"icon" $element.Params.icon
) -}}
{{- end -}}
{{- $params = merge $params $element }}
<div class="col pt-3 pb-3">
{{- partial "assets/card.html" $params -}}
@@ -129,6 +145,7 @@
</div>
{{- end -}}
{{- end -}}
{{- print $cards | safeHTML }}
</div>
{{ if $paginate }}

View File

@@ -37,7 +37,7 @@
{{- else -}}
<div>
<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">{{ . }}</p>{{ end -}}
</div>
{{- end -}}
{{- end -}}

View File

@@ -2,22 +2,43 @@
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"
wrapped in a figure if a caption is provided, else the image is wrapped in a div with a ratio constraint.
If the url starts with 'http', the image is retrieved from an external location. Else, the url is matched with a
page resource and site asset (in that order). The path of a remote image is rewritten to ensure processed files are
stored in the final '/img' folder.
The partial supports the following bitmap image formats: "png", "jpeg", "gif", "tiff", "bmp", and "webp". Vector
graphics of type "svg" are supported too, although these images do no support additional processing. This means
the arguments "ratio" and "portrait" have no effect for vector images. Vector graphics support an optional anchor
"#" in their url to denote a styling reference.
The partial supports the following arguments:
"url": Required path or 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.
"ratio": Optional ratio of the image, either "1x1", "3x2", "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. Not
applicable to vector graphics.
"portrait": Optional flag to adjust the ratio from landscape to portrait. The image itself is not rotated, only
the crop area is adjusted. Not applicable to vector graphics.
"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.
"page": Optional page context, used to match page resources.
-->
{{- $validRatios := slice "1x1" "4x3" "16x9" "21x9" -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $validRatios := slice "1x1" "3x2" "4x3" "16x9" "21x9" -}}
{{- $ratio := .ratio -}}
{{- if $ratio -}}
{{ if not (in $validRatios $ratio) -}}
{{- errorf "partial [assets/image.html] - Invalid value for param 'ratio'" -}}
{{ end -}}
{{- end -}}
{{- $portrait := .portrait -}}
{{- $url := .url -}}
{{- $mode := false -}}
{{- with .mode -}}
{{ $mode = . -}}
@@ -30,12 +51,37 @@
{{- errorf "partial [assets/image.html] - Invalid value for param 'mode'" -}}
{{- end -}}
{{- $modes := site.Params.main.modes | default (slice "light" "dark") -}}
{{- $page := .page -}}
{{- define "partials/image-portrait.html" -}}
{{- $dimensions := slice }}
{{- $dim := .dim -}}
{{- $dimensions = $dimensions | append $dim -}}
{{- $portraits := slice }}
{{- range $d := $dimensions -}}
{{- $p := split $d "x" }}
{{ if ne (len $p) 2 }}
{{- warnf "partial [assets/image.html] - Invalid dimension: %s" $d -}}
{{- $portraits = $portraits | append $d -}}
{{- else -}}
{{- $portraits = $portraits | append (printf "%sx%s" (index $p 1) (index $p 0)) -}}
{{- end -}}
{{- end -}}
{{- $ret := "" }}
{{- if reflect.IsSlice $dim -}}
{{ $ret = $portraits -}}
{{- else if gt (len $portraits) 0 -}}
{{- $ret = index $portraits 0 -}}
{{- end -}}
{{- return $ret -}}
{{- end -}}
<!-- Generate a fallback image of type jpg -->
{{- define "partials/image-default.html" -}}
{{- $img := .img -}}
{{- $ratio := .ratio -}}
{{- $portrait := and .portrait .ratio -}}
{{- $width := "1400" -}}
{{- $dim := "" -}}
{{- $fallback := "" -}}
@@ -43,6 +89,8 @@
{{- with $img -}}
{{- if eq $ratio "4x3" -}}
{{- $dim = "1400x1050" }}
{{- else if eq $ratio "3x2" -}}
{{- $dim = "1400x933" }}
{{- else if eq $ratio "1x1" -}}
{{- $dim = "1400x1400" }}
{{- else if eq $ratio "16x9" -}}
@@ -53,6 +101,10 @@
{{- $dim = printf "%sx%d" $width (int (math.Round (mul (div (float $width) $img.Width) $img.Height))) -}}
{{- end -}}
{{- if $portrait -}}
{{- $dim = partial "partials/image-portrait.html" (dict "dim" $dim) -}}
{{- end -}}
{{- if $ratio -}}
{{- $fallback = ($img.Fill (printf "%s jpg" $dim)) -}}
{{- else -}}
@@ -72,6 +124,7 @@
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $img := .img -}}
{{- $ratio := .ratio -}}
{{- $portrait := and .portrait .ratio -}}
{{- $imgset := "" -}}
{{- $widths := slice "576" "768" "992" "1200" "1400" -}}
@@ -79,6 +132,8 @@
{{- with $img -}}
{{- if eq $ratio "4x3" -}}
{{- $dims = slice "576x432" "768x576" "992x744" "1200x900" "1400x1050" -}}
{{- else if eq $ratio "3x2" -}}
{{- $dims = slice "576x384" "768x512" "992x661" "1200x800" "1400x933" -}}
{{- else if eq $ratio "1x1" -}}
{{- $dims = slice "576x576" "768x768" "992x992" "1200x1200" "1400x1400" -}}
{{- else if eq $ratio "16x9" -}}
@@ -91,6 +146,10 @@
{{- end -}}
{{- end -}}
{{- if $portrait -}}
{{- $dims = partial "partials/image-portrait.html" (dict "dim" $dims) -}}
{{- end -}}
{{- $scaled := "" -}}
{{- range $index, $dim := $dims -}}
{{- $clean := path.Ext $img.RelPermalink -}}
@@ -116,28 +175,41 @@
{{- define "partials/image-definition.html" -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $ratio := .ratio -}}
{{- $portrait := .portrait -}}
{{- $url := .url -}}
{{- $outerClass := .outerClass -}}
{{- $innerClass := .innerClass -}}
{{- $title := .title -}}
{{- $caption := .caption -}}
{{- $fallbackURL := "" -}}
{{- $anchor := "" -}}
{{- $imgset := "" -}}
{{- $mode := .mode -}}
{{- $modes := .modes -}}
{{- $page := .page -}}
{{- $isVector := false -}}
{{- $segments := split $url "#" -}}
{{- if gt (len $segments) 2 -}}
{{- errorf "Invalid path or url: %q" $url -}}
{{- else if eq (len $segments) 2 }}
{{- $url = index $segments 0 -}}
{{- $anchor = index $segments 1 -}}
{{- end -}}
{{- if hasSuffix $url "svg" -}}
{{- $fallbackURL = $url -}}
{{- $isVector = true -}}
{{- else -}}
{{- $img := partial "utilities/GetImage.html" (dict "url" $url) -}}
{{- $img := partial "utilities/GetImage.html" (dict "url" $url "page" $page) -}}
{{- if $img -}}
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio) -}}
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio "portrait" $portrait) -}}
{{- if $absoluteURL -}}
{{- $fallbackURL = $fallback.Permalink -}}
{{- else -}}
{{- $fallbackURL = $fallback.RelPermalink -}}
{{- end -}}
{{- $imgset = partial "partials/image-scaled.html " (dict "img" $img "ratio" $ratio) -}}
{{- $imgset = partial "partials/image-scaled.html " (dict "img" $img "ratio" $ratio "portrait" $portrait) -}}
{{- end -}}
{{- end -}}
@@ -150,7 +222,8 @@
{{- if $caption -}}
<figure {{ with $outerClass }}class="{{ . }}"{{ end }}>
{{ end }}
<div class="{{ with $ratio }}ratio ratio-{{ . }}{{ end }}{{ if not $caption }} {{ $outerClass }}{{ end }}">
{{- if not $isVector -}}
<div class="{{ if not $caption }}{{ $outerClass }}{{ end }}">
<img class="img-fluid {{ $innerClass }}"
{{ with $imgset -}}
srcset="{{ . }}"
@@ -159,10 +232,17 @@
src="{{ $fallbackURL }}"
alt="{{ $title }}">
</div>
{{ else }}
<div class="{{ if not $caption }}{{ $outerClass }}{{ end }}">
<svg class="{{ $innerClass }}">
<use href="{{ $fallbackURL }}{{ with $anchor }}#{{ . }}{{ end }}"></use>
</svg>
</div>
{{ end }}
{{- if $caption -}}
<figcaption class="figure-caption">{{ $caption | safeHTML }}</figcaption>
</figure>
{{- end -}}
{{- end -}}
{{- end -}}
<!-- Initiate the regular or color-mode image -->
@@ -177,22 +257,26 @@
{{- $image := printf "%s-%s%s" $base $suffix $ext -}}
{{- partial "partials/image-definition.html" (dict
"ratio" $ratio
"portrait" $portrait
"url" $image
"outerClass" $outerClass
"innerClass" $innerClass
"title" $title
"caption" $caption
"mode" $suffix
"modes" $modes)
"modes" $modes
"page" $page)
-}}
{{- end -}}
{{- else -}}
{{- partial "partials/image-definition.html" (dict
"ratio" $ratio
"portrait" $portrait
"url" $url
"outerClass" $outerClass
"innerClass" $innerClass
"title" $title
"caption" $caption)
"caption" $caption
"page" $page)
-}}
{{- end -}}

View File

@@ -6,7 +6,7 @@
{{- $menuURL := (or $menu.PageRef $menu.URL) | relLangURL -}}
{{- $pageURL := $page.RelPermalink | relLangURL -}}
{{- $isActive := hasPrefix $pageURL $menuURL -}}
{{- $isActive := or (and (hasPrefix $pageURL $menuURL) (ne $menuURL ("/" | relLangURL))) (eq $pageURL $menuURL) -}}
{{- $isAlias := $menu.Params.alias -}}
{{- $isIcon := $menu.Params.icon -}}
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}

View File

@@ -1,9 +1,10 @@
<!--
Displays a navigation header with a toggler. The partial supports the following arguments:
"id" Optional id of the navbar toggler, defaults to "navbar-collapse-0".
"id" Optional id of the navbar, defaults to "navbar-0". The id is used by several child elements,
including a color mode switcher, version switcher, and collapse panel.
"page" Required object reference to the current page.
"menus" Optional name of the menu configuration, defaults to "main".
"size" Optional size of the button, either "sm", "md" (default), or "lg".
"size" Optional breakpoint of the navbar toggler, either "xs", "sm", "md" (default), "lg", or "xl".
"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",
"danger", "warning", "info", "white", "black", "body", or "body-tertiary". The default color is
@@ -20,13 +21,14 @@
{{- define "partials/navbar-mode.html" -}}
{{- $size := .size -}}
{{- $collapsed := .collapsed -}}
{{- $id := .id -}}
<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{{ if $collapsed }}-collapsed{{ end }}">
<span class="theme-icon-active">{{- partial "assets/icon.html" (dict "icon" "fas sun fa-fw") }} {{ if $collapsed }} {{ T "colorMode" }} {{ end }}</span>
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-label="{{ T "colorMode" }}" aria-expanded="false" id="{{ $id }}-theme{{ if $collapsed }}-collapsed{{ end }}">
<span class="theme-icon-active">{{- partial "assets/icon.html" (dict "icon" "fas sun fa-fw") }}</span>{{ if $collapsed }} {{ T "colorMode" }} {{ end }}
<span class="d-md-none"></span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-color-theme{{ if $collapsed }}-collapsed{{ end }}">
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="{{ $id }}-theme{{ if $collapsed }}-collapsed{{ end }}">
<li>
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" data-bs-theme-value="light" href="#!">
<span class="theme-icon">{{- partial "assets/icon.html" (dict "icon" "fas sun fa-fw") }}</span>&nbsp;
@@ -55,13 +57,14 @@
{{- $collapsed := .collapsed -}}
{{- $page := .page -}}
{{- $list := site.Params.docs.releases -}}
{{- $id := .id -}}
{{- $version := partial "utilities/GetVersion.html" (dict "page" $page) -}}
<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-version-switch">
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false" id="{{ $id }}-version-switch">
{{ if $collapsed }}{{ site.Title }} {{ end }}{{ $version }}
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-version-switch">
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="{{ $id }}-version-switch">
{{- range $index, $item := $list -}}
{{- $active := eq $item.label $version -}}
{{- $disabled := false -}}
@@ -97,7 +100,7 @@
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $supportedFlags := slice "true" "false" -}}
{{- $id := printf "navbar-collapse-%d" 0 -}}
{{- $id := printf "navbar-%d" 0 -}}
{{ with .id }}
{{ $id = . }}
{{ end }}
@@ -171,7 +174,32 @@
{{- $enableLanguage := or $page.IsTranslated site.IsMultiLingual -}}
{{- $logo := site.Params.navigation.logo -}}
{{- with .logo }}{{ $logo = . }}{{ end -}}
{{- $logoLight := "" -}}
{{- $logoDark := "" -}}
{{- with .logo }}
{{ $logo = . }}
{{- end -}}
{{- if $enableDarkMode -}}
{{ $ext := path.Ext $logo -}}
{{- $logoLight = printf "%s-light%s" (strings.TrimSuffix $ext $logo) $ext -}}
{{- $logoDark = printf "%s-dark%s" (strings.TrimSuffix $ext $logo) $ext -}}
{{- $light := fileExists (path.Join "/static" $logoLight) -}}
{{- $dark := fileExists (path.Join "/static" $logoDark) -}}
{{- if and $light (not $dark) -}}
{{- warnf "partial [assets/navbar.html] - Missing file: %s" $logoDark -}}
{{- $logoLight = "" -}}
{{- $logoDark = "" -}}
{{- end -}}
{{- if and (not $light) $dark -}}
{{- warnf "partial [assets/navbar.html] - Missing file: %s" $logoLight -}}
{{- $logoLight = "" -}}
{{- $logoDark = "" -}}
{{- end -}}
{{- if not (or $light $dark) -}}
{{- $logoLight = "" -}}
{{- $logoDark = "" -}}
{{- end -}}
{{- end -}}
{{- $title := site.Title -}}
{{- if .title -}}
@@ -182,15 +210,18 @@
{{- $pre := .Pre -}}
{{- $post := .Post -}}
{{- $theme := "" -}}
{{- if eq $color "black" }}{{ $theme = "dark" }}{{ end -}}
{{- if eq $color "white" }}{{ $theme = "light" }}{{ end -}}
{{- $theme := "light" -}}
{{- if in (slice "primary" "secondary" "success" "danger" "black") $color }}{{ $theme = "dark" }}{{ end -}}
{{- if in (slice "body" "body-tertiary") $color }}{{ $theme = "" }}{{ end -}}
{{- if not $color }}{{ $theme = "" }}{{ end -}}
{{- $class := .class -}}
<div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0{{ with $class }} {{ . }}{{ end }}"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
{{- $contrast := false -}}
{{- if in (slice "primary" "secondary" "success" "danger") $color }}{{ $contrast = true }}{{ end -}}
<div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0{{ with $class }} {{ . }}{{ end }}">
{{- partial "assets/page-alert.html" (dict "page" $page) -}}
<nav class="navbar navbar-expand-{{ $size }} {{ with $color }}bg-{{ . }}{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
<nav class="navbar navbar-expand-{{ $size }}{{ if $contrast }} navbar-contrast{{ end }}{{ with $color }} bg-{{ . }}{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
<div class="container-xxl p-0">
<!-- Insert sidebar toggler when applicable -->
<div class="d-flex">
@@ -208,7 +239,10 @@
<!-- Insert the brand logo or name -->
<a class="navbar-brand mx-auto" href="{{ site.Home.RelPermalink }}">
{{- if $logo -}}
{{- if (and $logoLight $logoDark) -}}
<img src="{{if $absoluteURL }}{{ absURL $logoLight }}{{ else }}{{ $logoLight }}{{ end }}" class="d-none-dark" alt="{{ $title }} logo" height="30">
<img src="{{if $absoluteURL }}{{ absURL $logoDark }}{{ else }}{{ $logoDark }}{{ end }}" class="d-none-light" alt="{{ $title }} logo" height="30">
{{- else if $logo -}}
<img src="{{if $absoluteURL }}{{ absURL $logo }}{{ else }}{{ $logo }}{{ end }}" alt="{{ $title }} logo" height="30">
{{- else -}}
<span class="fw-bold">{{ $title }}</span>
@@ -217,15 +251,15 @@
<!-- Insert main navigation toggler -->
<div class="d-flex fw-30">
<button id="main-nav-toggler" class="navbar-toggler collapsed p-0" type="button" data-bs-toggle="collapse" data-bs-target="#{{ $id }}"
<button class="navbar-toggler main-nav-toggler collapsed p-0" type="button" data-bs-toggle="collapse" data-bs-target="#{{ $id }}-collapse"
aria-controls="{{ $id }}" aria-expanded="false" aria-label="{{ T "toggleMainNav" }}">
<span class="toggler-icon top-bar emphasis"></span>
<span class="toggler-icon middle-bar emphasis"></span>
<span class="toggler-icon bottom-bar emphasis"></span>
<span class="toggler-icon top-bar emphasis{{ with $theme }}-{{ . }}{{ end }}"></span>
<span class="toggler-icon middle-bar emphasis{{ with $theme }}-{{ . }}{{ end }}"></span>
<span class="toggler-icon bottom-bar emphasis{{ with $theme }}-{{ . }}{{ end }}"></span>
</button>
</div>
<div class="navbar-collapse collapse" id="{{ $id }}">
<div class="navbar-collapse collapse" id="{{ $id }}-collapse">
<!-- Insert search input -->
{{- if $search }}{{ partial "assets/search-input.html" -}}{{ end -}}
@@ -237,7 +271,7 @@
{{- if .HasChildren -}}
<ul class="dropdown-menu dropdown-menu-end">
{{- range .Children -}}
{{- partial "assets/navbar-item.html" (dict "menu" . "parent" $menu "page" $page) -}}
<li>{{- partial "assets/navbar-item.html" (dict "menu" . "parent" $menu "page" $page) -}}</li>
{{- end -}}
</ul>
{{- end -}}
@@ -256,10 +290,10 @@
{{- if $enableLanguage -}}
{{- $currentLang := $page.Language.Lang -}}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle d-{{ $size }}-none" 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-label="{{ T "languageSwitcherLabel" }}" aria-expanded="false">
{{- partial "assets/icon.html" (dict "icon" "fas globe fa-fw") }} {{ T "languageSwitcherLabel" }}
</a>
<a class="nav-link dropdown-toggle d-none d-{{ $size }}-block" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<a class="nav-link dropdown-toggle d-none d-{{ $size }}-block" href="#!" role="button" data-bs-toggle="dropdown" aria-label="{{ T "languageSwitcherLabel" }}" aria-expanded="false">
{{- partial "assets/icon.html" (dict "icon" "fas globe fa-fw") }}
</a>
<ul class="dropdown-menu dropdown-menu-end ">
@@ -278,8 +312,8 @@
<!-- Insert version switcher -->
{{- if $enableVersions -}}
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" true ) -}}
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" false) -}}
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" true "id" .id) -}}
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" false "id" .id) -}}
{{- end -}}
<!-- Insert color mode switcher -->
@@ -290,8 +324,8 @@
</li>
<li><hr class="dropdown-divider-bg"></li>
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" true) -}}
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" false) -}}
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" true "id" .id) -}}
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" false "id" .id) -}}
{{- end -}}
</ul>
</div>

View File

@@ -7,7 +7,7 @@
{{- $sort := .Site.Params.sharing.sort | default "weight" -}}
{{- $list = sort $list $sort $order -}}
<div class="py-3 text-body-secondary hstack gap-2">
{{ T "shareLink" }}
{{ T "shareLink" "" }}
{{- range $index, $item := $list -}}
{{- $url := $item.url -}}
{{- $url = replace $url "{url}" $page.Permalink -}}
@@ -21,11 +21,11 @@
{{- $url = "#!" -}}
{{- partial "assets/toast.html" (dict "id" $target "message" (printf "%s %s" (T "link") (T "copiedToClipboard"))) -}}
{{- end -}}
{{ partial "assets/button.html" (dict "toast" $target "clipboard" $clipboard "href" $url "icon" (printf "%s fa-fw" $item.icon) "class" "btn-social p-0" )}}
{{ partial "assets/button.html" (dict "toast" $target "clipboard" $clipboard "href" $url "icon" (printf "%s fa-fw" $item.icon) "class" "btn-social p-0" "label" (T "shareLink" $item.name)) }}
{{- end -}}
{{ if .Site.Params.sharing.webshare }}
{{ $attr := dict "data-sharing-title" .Title "data-sharing-description" .Description "data-sharing-url" .Permalink }}
{{ partial "assets/button.html" (dict "href" "#!" "icon" "fas share-nodes fa-fw" "id" "btn-webshare" "class" "btn-social p-0" "attributes" $attr )}}
{{ partial "assets/button.html" (dict "href" "#!" "icon" "fas share-nodes fa-fw" "id" "btn-webshare" "class" "btn-social p-0" "attributes" $attr "label" (T "shareLink" (T "shareSystem"))) }}
{{- end -}}
</div>
{{- end -}}

View File

@@ -15,7 +15,7 @@
<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">
<div class="toc toc-panel text-body p-2">
<small>{{ .TableOfContents }}</small>
</div>
</div>

View File

@@ -1,11 +1,11 @@
<footer class="container-fluid text-center p-3">
<footer class="container-fluid footer text-center p-3">
<div class="container-xxl text-center">
<small class="text-secondary">
<small>
{{- $copyright := printf "%s © %s %s %s." (T "copyright") (dateFormat "2006" now) .Site.Title (T "rights") }}
{{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }}
{{ .Site.Params.footer.license | safeHTML }}
{{ if .Site.Params.main.endorse }}
{{ $link := partial "utilities/link" (dict "destination" (index site.Params.links "hinode") "text" "Hinode" "class" "link-secondary") }}
{{ $link := partial "utilities/link" (dict "destination" (index site.Params.links "hinode") "text" "Hinode" "class" "link-bg-footer") }}
{{ T "poweredBy" $link | safeHTML }}
{{ end }}
</small>

View File

@@ -5,27 +5,29 @@
{{ warnf "DEPRECATED: parameter `Params.home.socialCaption` has been deprecated in release v0.18"}}
{{ end }}
{{- $tab := site.Params.main.externalLinks.tab -}}
<div class="container-fluid">
<div class="row row-cols-1 row-cols-sm-4 bg-primary p-3 bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} align-items-center">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-6 col-md-4">
{{ if gt .Site.Menus.social 0 }}
<div class="fs-3 fw-bold">{{ or .Site.Params.footer.socialTitle .Site.Params.social.title }}</div>
<p>{{ or .Site.Params.footer.socialCaption .Site.Params.social.caption }}</p>
{{ end }}
{{ if gt .Site.Menus.social 0 }}
{{- $tab := site.Params.main.externalLinks.tab -}}
<div class="container-fluid">
<div class="row row-cols-1 row-cols-sm-4 bg-primary p-3 bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} align-items-center">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-6 col-md-4">
{{ if gt .Site.Menus.social 0 }}
<div class="fs-3 fw-bold">{{ or .Site.Params.footer.socialTitle .Site.Params.social.title }}</div>
<p>{{ or .Site.Params.footer.socialCaption .Site.Params.social.caption }}</p>
{{ end }}
</div>
<div class="col text-sm-start text-center col-sm-6 col-md-4">
{{ range .Site.Menus.social -}}
<a href="{{ .URL }}" {{ if $tab }} target="_blank" rel="noopener noreferrer"{{ end }} aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
{{ if hasPrefix .Pre "<i" }}
{{ .Pre | safeHTML }}
{{ else }}
{{ partial "assets/icon.html" (dict "icon" (printf "%s fa-2x" .Pre) )}}
{{ end }}
</a>
{{ end -}}
</div>
<div class="col col-md-2 d-none d-md-block"></div>
</div>
<div class="col text-sm-start text-center col-sm-6 col-md-4">
{{ range .Site.Menus.social -}}
<a href="{{ .URL }}" {{ if $tab }} target="_blank" rel="noopener noreferrer"{{ end }} aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
{{ if hasPrefix .Pre "<i" }}
{{ .Pre | safeHTML }}
{{ else }}
{{ partial "assets/icon.html" (dict "icon" (printf "%s fa-2x" .Pre) )}}
{{ end }}
</a>
{{ end -}}
</div>
<div class="col col-md-2 d-none d-md-block"></div>
</div>
</div>
{{ end }}

View File

@@ -2,10 +2,14 @@
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{ if .Site.Params.favicon.logo -}}
{{ $favicon := resources.Get .Site.Params.favicon.logo -}}
{{ range $i := .Site.Params.favicon.sizes -}}
{{ $image := $favicon.Resize (printf "%dx%d CatmullRom" $i $i) -}}
<link rel="icon" type="image/png" sizes="{{$i}}x{{$i}}" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
{{ end -}}
{{ $image := $favicon.Resize "180x CatmullRom" -}}
<link rel="apple-touch-icon" sizes="180x180" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
{{- if $favicon -}}
{{ range $i := .Site.Params.favicon.sizes -}}
{{ $image := $favicon.Resize (printf "%dx%d CatmullRom" $i $i) -}}
<link rel="icon" type="image/png" sizes="{{$i}}x{{$i}}" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
{{ end -}}
{{ $image := $favicon.Resize "180x CatmullRom" -}}
<link rel="apple-touch-icon" sizes="180x180" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
{{ else }}
{{- errorf "partial [head/favicon.html] - Cannot find file: %s" .Site.Params.favicon.logo -}}
{{ end }}
{{ end -}}

View File

@@ -13,6 +13,10 @@
{{ end }}
{{- end -}}
{{ if and site.Params.style.darkModeTint (not (findRE `\d+%` site.Params.style.darkModeTint)) }}
{{- errorf "partial [head/stylesheet.html] - Invalid value for site param 'style.darkModeTint': %s" site.Params.style.darkModeTint -}}
{{ end}}
{{- $navbarOffset := "0em" -}}
{{- if site.Params.navigation.fixed }}{{ $navbarOffset = site.Params.navigation.offset | default "4em" }}{{ end }}
{{- $vars := dict
@@ -28,6 +32,8 @@
"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")))
"dark-mode-shade" (default "0%" site.Params.style.darkModeShade)
"dark-mode-tint" (default "0%" site.Params.style.darkModeTint)
-}}
{{- $options := (dict "transpiler" "libsass" "targetPath" $target "enableSourceMap" (not hugo.IsProduction) "vars" $vars) -}}

View File

@@ -0,0 +1,22 @@
<!--
Retrieve the value from a given argument within the shortcode context. If a parent is set and merge is false, the
value of the parent's argument is retrieved when the current context is unavailable. If merge is true, the parent's
value is merged with the value of the shortcode context, separated by a single space.
-->
{{ $page := .page -}}
{{ $arg := .arg -}}
{{ $merge := .merge -}}
{{ $val := $page.Get $arg }}
{{- with $page.Parent -}}
{{ with .Get $arg }}
{{ if $merge }}
{{ $val = trim (printf "%s %s" . $val) " " }}
{{ else if not $val }}
{{ $val = . }}
{{ end }}
{{ end }}
{{- end -}}
{{- return $val -}}

View File

@@ -1,18 +1,28 @@
<!--
Retrieve a local or remote resource compatible with Hugo's image processing. The path of a remote image is
rewritten to ensure processed files are stored in the final '/img' folder. The partial returns nil if the
resource cannot be found or is incompatibile. The partial supports the following arguments:
"url": Required path or url of the image, e.g. "img/example.jpg" or "https://example.com/img.jpg"
Retrieve a local or remote resource compatible with Hugo's image processing. If the url starts with 'http', the
image is retrieved from an external location. Else, the url is matched with a page resource and site asset (in that
order). The path of a remote image is rewritten to ensure processed files are stored in the final '/img' folder. The
partial returns nil if the resource cannot be found or is incompatibile. The partial supports the following
arguments:
"url" Required path or url of the image, e.g. "img/example.jpg" or "https://example.com/img.jpg"
"page" Optional page context, used to retrieve an image from page resources.
-->
{{ $url := .url -}}
{{ $page := .page -}}
{{ $supportedMediaTypes := slice "image/png" "image/jpeg" "image/gif" "image/tiff" "image/bmp" "image/webp" -}}
{{ $img := "" }}
{{ $remote := hasPrefix (lower $url) "http" }}
{{ if $remote }}
{{ $img = resources.GetRemote $url -}}
{{ else }}
{{ $img = resources.GetMatch $url -}}
{{ if $page }}
{{ $img = $page.Resources.Get $url -}}
{{ end }}
{{ if not $img }}
{{ $img = resources.GetMatch $url }}
{{ end }}
{{ end }}
{{ with $img -}}

View File

@@ -0,0 +1,13 @@
<!--
Purges any HTML comments from raw content, if applicable. The partial supports the following arguments:
"page" Required page context, used to render shortcodes properly.
"raw" Raw page content, e.g. .Page.RawContent.
-->
{{ $page := .page -}}
{{ $raw := .raw -}}
{{- if site.Params.debugging.purgeHTMLComments -}}
{{- $raw = replaceRE "<!--(.|\n)*?-->" "" $raw -}}
{{- end -}}
{{ $content := $raw | $page.RenderString | safeHTML }}
{{ return $content }}

View File

@@ -1 +1 @@
{{ if eq .format "long" }}{{ .date | time.Format ":date_long" }}{{ else }}{{ .date | time.Format ":date_short" }}{{ end }}
{{ if eq .format "long" }}{{ .date | time.Format ":date_long" }}{{ else }}{{ .date | time.Format ":date_medium" }}{{ end }}

View File

@@ -9,24 +9,16 @@
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
{{- $isExternal := ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host -}}
{{ $text := .text }}
{{- if not $text -}}
{{ if $isExternal }}
{{ $text = (urls.Parse (absURL $destination)).Host }}
{{ else }}
{{ $target := site.GetPage $destination }}
{{ if not $target }}
{{- errorf "partial [utilities/link.html] - Cannot find page: %s" $destination -}}
{{ else }}
{{ $text = $target.Title }}
{{ if not $case }}{{ $text = lower $text }}{{ end }}
{{ $destination = $target.RelPermalink }}
{{ end }}
{{ end }}
{{- end -}}
{{- $page := .page -}}
{{- $anchor := "" -}}
{{- $text := .text -}}
{{- $class := .class -}}
{{- if $isExternal -}}
{{- if not $text -}}
{{- $text = (urls.Parse (absURL $destination)).Host -}}
{{- end -}}
{{- if $tab -}}
{{- $target = "_blank" -}}
{{- $rel = "noopener noreferrer" -}}
@@ -36,10 +28,45 @@
{{ $suffix := partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}
{{- $text = printf "%s&nbsp;%s" $text $suffix | safeHTML -}}
{{- end -}}
{{ else }}
{{ $destination = relLangURL $destination }}
{{- else -}}
{{- if strings.Contains $destination "#" }}
{{ $segments := split $destination "#" }}
{{- if ne (len $segments) 2 }}
{{- errorf "partial [utilities/link.html] - Malformed path, expected one anchor '#' only: %s" $destination -}}
{{ else }}
{{- $destination = index $segments 0 -}}
{{- $anchor = index $segments 1 -}}
{{ end }}
{{ end }}
{{- $destination = strings.TrimSuffix "/" $destination -}}
{{- $ref := $page.GetPage $destination -}}
{{- if not $ref }}
{{- $segments := split $destination "/" -}}
{{- if and (hasPrefix $destination "/") (gt (len $segments) 1) -}}
{{- $prefix := index $segments 1 -}}
{{- $page := .Page -}}
{{ with index (where site.Sites "Language.Lang" $prefix) 0 }}
{{- $path := printf "/%s" (strings.TrimPrefix (printf "/%s/" $prefix) $destination) }}
{{- $ref = .GetPage $path -}}
{{ end }}
{{- end -}}
{{- end -}}
{{- if not $ref -}}
{{- errorf "partial [utilities/link.html] - Cannot find page: %s" $destination -}}
{{- else -}}
{{- $destination = $ref.RelPermalink -}}
{{- with $anchor }}{{ $destination = printf "%s#%s" (strings.TrimSuffix "/" $destination) . -}}{{ end -}}
{{- if not $text -}}
{{- if $anchor -}}
{{- $text = $anchor -}}
{{- else -}}
{{- $text = $ref.LinkTitle -}}
{{- end -}}
{{ end -}}
{{- if not $case }}{{ $text = lower $text }}{{ end -}}
{{- end -}}
{{- end -}}
{{- $class := .class -}}
<a {{ with $class }}class="{{ . }}" {{ end }}href="{{ $destination | safeURL }}"{{ with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end }}>{{ $text }}</a>

View File

@@ -50,6 +50,6 @@
</h2>
{{- end -}}
<div id="{{ $parent }}-item-{{ $id }}" class="accordion-collapse collapse{{ if $show }} show{{ end }}{{ with $class }} {{ . }}{{ end }}" aria-labelledby="{{ $parent }}-heading-{{ $id }}" data-bs-parent="#{{ $parent }}">
<div class="accordion-body">{{ $body | markdownify | safeHTML }}</div>
<div class="accordion-body">{{ $body | .Page.RenderString | safeHTML }}</div>
</div>
</div>

View File

@@ -26,7 +26,7 @@
{{- $body := .Inner -}}
{{- if $open -}}
{{- $pattern := printf "data-bs-parent=\"#%s\"" $id -}}
{{- $body = (replace .Inner $pattern "") | markdownify | safeHTML }}
{{- $body = (replace .Inner $pattern "") | .Page.RenderString | safeHTML }}
{{- end -}}
<div id="{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }}">

View File

@@ -55,7 +55,7 @@
<div class="d-flex alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}{{ with $class }} {{ . }}{{ end }}" role="alert">
{{ with $icon }}<div class="pt-1 pe-2">{{ . }}</div>{{ end }}
<div class="flex-grow-1 my-auto">
{{ trim .Inner " \r\n" | markdownify | safeHTML -}}
{{ trim .Inner " \r\n" | .Page.RenderString | safeHTML -}}
{{ if $dismissible }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>{{ end }}
</div>
</div>

View File

@@ -0,0 +1,50 @@
<!--
Displays a grid of Bootstrap cards with 1 to 5 columns. The cards are rendered using a provided list of pages.
Cards on the same row are aligned to each other. The grid renders pages up to a provided maximum amount. The
remaining items are accessible via either a paginator or button to a list page (default behavior). Be aware a page
can only contain one paginator at a time.
The shortcode supports the following arguments:
"cols" Required number of columns for the grid, must be a value between 1 and 5.
"title" Optional title of the card group.
"separator" Optional flag to indicate a horizontal line should be added between items on small screens.
"gutter" Gutter between columns in a group, either "0", "1", "2", "3" (default), "4", or "5".
In addition, the following arguments are passed to the individual cards.
"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", or "body". By default, no color is specified.
"padding": Optional padding of the content, either "0", "1", "2", "3" (default), "4", "5", or "auto".
"header" Optional header components of the card, displayed in small caps. Supported values are "full"
(default), "publication", "tags", and "none".
"footer" Optional footer components of the card, displayed in small caps. Supported values are "full",
"publication", "tags", and "none" (default).
"orientation" Optional placecement of the thumbnail, either "stacked" (default), "horizontal", or "none".
-->
{{- $cols := 3 -}}
{{ with .Get "cols" }}{{ $cols = int . }}{{ end -}}
{{- $title := .Get "title" -}}
{{- $separator := .Get "separator" -}}
{{- $class := .Get "class" -}}
{{- $wrapper := .Get "wrapper" -}}
{{- $color := .Get "color" -}}
{{- $padding := .Get "padding" | default "3" -}}
{{- $header := .Get "header" -}}
{{- $footer := .Get "footer" -}}
{{- $orientation := .Get "orientation" -}}
{{- partial "assets/card-group.html" (dict
"page" .Page
"cards" .Inner
"cols" $cols
"title" $title
"separator" $separator
"class" $class
"color" $color
"padding" $padding
"header" $header
"footer" $footer
"orientation" $orientation
)
-}}

View File

@@ -1,31 +1,37 @@
<!--
Displays a Bootstrap card that links to a page. The shortcode supports the following arguments:
"path" Required path of the page.
Displays a Bootstrap card that links to a page. Any inner text is used as description The shortcode supports the
following arguments:
"path" Optional 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",
"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.
"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).
"gutter" Gutter between columns in a group, either "0", "1", "2", "3" (default), "4", or "5".
"header" Optional header components of the card, displayed in small caps. Supported values are "full"
(default), "publication", "tags", and "none".
"footer" Optional footer components of the card, displayed in small caps. Supported values are "full",
"publication", "tags", and "none" (default).
"orientation" Optional placecement of the thumbnail, either "stacked" (default), "horizontal", or "none".
"thumbnail" Optional thumbnail image url, displayed on top or the left of the card.
"icon" Optional Font Awesome icon, displayed on top or the left of the card.
-->
{{ $error := false }}
{{ $path := .Get "path" }}
{{ $page := .Site.GetPage $path }}
{{ if not $page }}
{{ errorf "Invalid or missing value for param 'path': %s" .Position -}}
{{ $error = true }}
{{ $page := .Page }}
{{ with $path }}
{{ $page = $.Site.GetPage $path }}
{{ if not $page }}
{{ errorf "Invalid or missing value for param 'path': %s" .Position -}}
{{ $error = true }}
{{ end }}
{{ end }}
{{ $class := .Get "class" }}
{{- $class := partial "utilities/GetArg" (dict "page" . "arg" "class" "merge" true) -}}
{{ $color := "" -}}
{{ with .Get "color" }}{{ $color = . }}{{ end -}}
{{- $color := partial "utilities/GetArg" (dict "page" . "arg" "color") -}}
{{ if $color }}
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
{{ if not (in $supportedColors $color) -}}
@@ -34,43 +40,64 @@
{{ end -}}
{{ end -}}
{{ $header := "full" }}
{{ with .Get "header" }}{{ $header = . }}{{ end -}}
{{- $header := partial "utilities/GetArg" (dict "page" . "arg" "header") | default "full" -}}
{{ $supportedKeywords := slice "full" "publication" "tags" "none" -}}
{{ if not (in $supportedKeywords $header) -}}
{{ errorf "Invalid value for param 'header': %s" .Position -}}
{{ end -}}
{{ $footer := "none" }}
{{ with .Get "footer" }}{{ $footer = . }}{{ end -}}
{{- $footer := partial "utilities/GetArg" (dict "page" . "arg" "footer") | default "none" -}}
{{ if not (in $supportedKeywords $footer) -}}
{{ errorf "Invalid value for param 'footer': %s" .Position -}}
{{ end -}}
{{ $padding := "auto" }}
{{ with .Get "padding" }}{{ $padding = . }}{{ end -}}
{{- $padding := partial "utilities/GetArg" (dict "page" . "arg" "padding") | default "auto" -}}
{{ $supportedPaddings := slice "0" "1" "2" "3" "4" "5" "auto" -}}
{{ if not (in $supportedPaddings $padding) -}}
{{ errorf "Invalid value for param 'padding': %s" .Position -}}
{{ $error = true -}}
{{ end -}}
{{ $orientation := "stacked" -}}
{{ with .Get "orientation" }}{{ $orientation = . }}{{ end -}}
{{- $gutter := partial "utilities/GetArg" (dict "page" . "arg" "gutter") | default "3" -}}
{{ $supportedGutters:= slice "0" "1" "2" "3" "4" "5" -}}
{{ if not (in $supportedGutters $gutter) -}}
{{ errorf "Invalid value for param 'gutter': %s" .Position -}}
{{ $error = true -}}
{{ end -}}
{{- $orientation := partial "utilities/GetArg" (dict "page" . "arg" "orientation") | default "stacked" -}}
{{ $supportedOrientations := slice "stacked" "horizontal" "none" -}}
{{ if not (in $supportedOrientations $orientation) -}}
{{ errorf "Invalid value for param 'orientation': %s" .Position -}}
{{ $error = true -}}
{{ end -}}
{{ $layout := "rich" -}}
{{ with .Get "layout" }}{{ $layout = . }}{{ end -}}
{{- $layout := partial "utilities/GetArg" (dict "page" . "arg" "layout") | default "rich" -}}
{{ $supportedLayouts := slice "rich" "minimal" -}}
{{ if not (in $supportedLayouts $layout) -}}
{{ errorf "Invalid value for param 'layout': %s" .Position -}}
{{ $error = true -}}
{{ end -}}
{{ $description := .Inner }}
{{ $title := .Get "title" }}
{{ $icon := .Get "icon" }}
{{ $thumbnail := .Get "thumbnail" }}
{{ if not $error -}}
{{- partial "assets/card.html" (dict "path" $path "class" $class "color" $color "padding" $padding "header" $header "footer" $footer "orientation" $orientation) -}}
<div class="g-{{ $gutter }}">
{{- partial "assets/card.html" (dict
"path" $path
"title" $title
"class" (printf "h-100 %s" $class)
"color" $color
"padding" $padding
"header" $header
"footer" $footer
"orientation" $orientation
"description" $description
"icon" $icon
"thumbnail" $thumbnail
) -}}
</div>
{{ end -}}

View File

@@ -2,8 +2,10 @@
Displays a carousel of several responsive images (see the image shortcode for more details). Add inner <img>
elements to define individual image slides. The shortcode supports the following arguments:
"id": Optional id of the carousel, defaults to "carousel-" with a sequential number.
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". Other values are ignored.
"ratio": Optional ratio of the images, either "1x1", "4x3", "16x9", or "21x9". Other values are ignored.
Instead, the original aspect ratio of the image is preserved.
"portrait": Optional flag to adjust the ratio from landscape to portrait. The images themselves are not rotated,
only the crop area is adjusted.
"class": Optional class attribute of the carousel element, e.g. “w-75”.
-->
@@ -12,7 +14,6 @@
{{ $id = . }}
{{ end }}
{{ $ratio := .Get "ratio" -}}
{{ $class := .Get "class" -}}
{{ $images := .Inner -}}
{{ $items := len (findRE "carousel-item" $images) -}}

View File

@@ -21,11 +21,11 @@
{{ $preprocess := slice "hugo" "markdown" }}
{{- if in $preprocess $lang -}}
{{- $content = (trim $content "\r\n") | markdownify }}
{{- $content = (trim $content "\r\n") | .Page.RenderString }}
{{ $lang = "markdown" }}
{{- end -}}
<div class="rounded border preview-background mb-3">
<div class="rounded border mb-3">
{{- if eq $show_preview true -}}
<div {{ with $id }}id="{{ . }}"{{ end }} class="rounded-top p-3 {{ with $class }} {{ . }}{{ end }}">
{{- $content -}}
@@ -33,7 +33,7 @@
{{- end -}}
{{- if eq $show_markup true -}}
<div class="d-flex align-items-center ps-3 pe-3 py-1{{ if $show_preview }} border-top{{ else }} rounded-top{{ end }} border-bottom syntax-highlight">
<small class="font-monospace text-body-secondary text-uppercase">{{- $lang -}}</small>
<small class="font-monospace text-body text-uppercase">{{- $lang -}}</small>
</div>
<div class="rounded-bottom syntax-highlight border-none">
{{- highlight (trim $input "\r\n") $lang "" -}}

View File

@@ -4,8 +4,11 @@
section of the main config file (defaults to 75). A fallback image is provided for older browsers. The partial
supports the following arguments:
"src": Required relative url of the image, e.g. "img/example.jpg"
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". Leave empty to keep the
"ratio": Optional ratio of the image, either "1x1", "3x2", "4x3", "16x9", or "21x9". Leave empty to keep the
original aspect ratio of the image.
"portrait": Optional flag to adjust the ratio from landscape to portrait. The image itself is not rotated, only
the crop area is adjusted.
"wrapper": Optional class attributes of the wrapper element, e.g. "mx-auto".
"class": Optional class attribute of the inner img element, e.g. "rounded".
"title": Optional alternate text of the image.
"caption": Optional figure caption.
@@ -14,7 +17,7 @@
{{- if isset .Params "src" -}}
{{ $url := .Get "src" -}}
{{- $validRatios := slice "1x1" "4x3" "16x9" "21x9" -}}
{{- $validRatios := slice "1x1" "3x2" "4x3" "16x9" "21x9" -}}
{{ $ratio := .Get "ratio" -}}
{{ if $ratio -}}
{{ if not (in $validRatios $ratio) -}}
@@ -23,6 +26,7 @@
{{ end -}}
{{- $class := .Get "class" -}}
{{- $wrapper := .Get "wrapper" -}}
{{ $title := .Get "title" -}}
{{ $caption := .Get "caption" -}}
{{ $supportedFlags := slice "true" "false" -}}
@@ -34,14 +38,25 @@
{{ else -}}
{{ errorf "Invalid value for param 'mode': %s" $modeParam -}}
{{ end -}}
{{ $portraitParam := "false" -}}
{{ $portrait := false -}}
{{ with .Get "portrait" }}{{ $portraitParam = . }}{{ end -}}
{{ if in $supportedFlags $portraitParam -}}
{{ if eq $portraitParam "true" }}{{ $portrait = true }}{{ else }}{{ $portrait = false }}{{ end -}}
{{ else -}}
{{ errorf "Invalid value for param 'portrait': %s" $portraitParam -}}
{{ end -}}
{{- partial "assets/image.html" (dict
"url" $url
"ratio" $ratio
"outerClass" $wrapper
"innerClass" $class
"title" $title
"caption" $caption
"mode" $mode)
"mode" $mode
"portrait" $portrait
"page" .Page)
-}}
{{ else -}}
{{ errorf "Missing value for param 'src': %s" .Position -}}

View File

@@ -2,8 +2,10 @@
Renders a carousel item with a responsive image (see the image shortcode for more details). The shortcode
supports the following arguments:
"src": Required relative url of the image, e.g. "img/example.jpg"
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". Other values are ignored.
Instead, the original aspect ratio of the image is preserved.
"ratio": Optional ratio of the image, either "1x1", "3x2", "4x3", "16x9", or "21x9". Other values are
ignored. Instead, the original aspect ratio of the image is preserved.
"portrait": Optional flag to adjust the ratio from landscape to portrait. The image itself is not rotated, only
the crop area is adjusted.
"caption": Optional carousel slide caption.
-->
@@ -15,10 +17,16 @@
{{ else }}
{{ with .Get "ratio" }}{{ $ratio = . }}{{ end -}}
{{ end -}}
{{- $portrait := false -}}
{{ with .Parent -}}
{{ with .Get "portrait" }}{{ $portrait = . }}{{ end -}}
{{ else }}
{{ with .Get "portrait" }}{{ $portrait = . }}{{ end -}}
{{ end -}}
{{- if $src -}}
<div class="carousel-item {{ if eq .Ordinal 0 }}active{{ end }}">
{{ partial "assets/image.html" (dict "url" $src "ratio" $ratio "innerClass" "d-block w-100") }}
{{ partial "assets/image.html" (dict "url" $src "ratio" $ratio "page" .Page "innerClass" "d-block w-100" "portrait" $portrait) }}
<div class="carousel-caption gradient"></div>
{{ with $caption }}
<div class="carousel-caption d-none d-md-block">

View File

@@ -1,12 +1,14 @@
<!--
Generates a link for a given named link or url. The shortcode supports a single unnamed parameter, or various named
parameters. The unnamed parameter is recognized as a named link if it does not contain any "/", otherwise it is
treated as a url. Any inner text is rendered as the link title, otherwise it uses the host name (for external links)
or page name (for internal links). The shortcode supports the following named arguments:
"name" Optional name of the link maintained in the "links" section of the site's parameters. If omitted,
the "url" argument should be provided instead.
"url" Optional url of the link, including the scheme ("http" or "https"). If omitted, the "name" argument
should be provided instead.
parameters. The unnamed parameter is recognized as a url if it starts with "http", else it is treated as either a
named link or internal reference (in that order). Any inner text is rendered as the link title, otherwise it uses
the host name (for external links), link title (for internal links), or anchor name (for any local references
containing a `#`). The shortcode supports the following named arguments:
"href" Required reference to either an external link (if it starts with http), a named link (if it can be
found in params.links), or internal reference. External and internal references may include an
anchor "#".
"name" Alias of href.
"url" Alias of href.
"cue" Optional flag to indicate if an external link should show a visual cue, defaults to setting
"main.externalLinks.cue" in the site's parameters.
"tab" Optional flag to indicate if an external link should open in a new tab, defaults to setting
@@ -17,42 +19,92 @@
-->
{{- $error := false -}}
{{ $href := "" }}
{{ $name := "" }}
{{ $url := "" }}
{{ $class := "" }}
{{ $case := true }}
{{ $cue := site.Params.main.externalLinks.cue }}
{{ $tab := site.Params.main.externalLinks.tab }}
{{ $text := trim .Inner " \r\n" | .Page.RenderString | safeHTML }}
{{- $anchor := "" -}}
{{ if .IsNamedParams }}
{{ $href = .Get "href" }}
{{ $name = .Get "name" }}
{{ $url = .Get "url" }}
{{ $cue = .Get "cue" | default site.Params.main.externalLinks.cue }}
{{ $tab = .Get "tab" | default site.Params.main.externalLinks.tab }}
{{ $case = .Get "case" | default true }}
{{ else if strings.Contains (.Get 0) "/" }}
{{ $url = .Get 0 }}
{{- $class := .Get "class" -}}
{{ else }}
{{ $name = .Get 0 }}
{{ $href = .Get 0 }}
{{ end }}
{{ if not (or $name $url) }}
{{ errorf "Expected param 'name' or 'url': %s" .Position -}}
{{- $href = or (or $href $name) $url -}}
{{ if not $href }}
{{ errorf "Expected param 'href': %s" .Position -}}
{{ $error = true -}}
{{ end }}
{{ if $name }}
{{ $url = index site.Params.links $name }}
{{ if not $url }}
{{ errorf "Cannot find link '%s': %s" $name .Position -}}
{{ $error = true -}}
{{- if hasPrefix $href "http" -}}
{{ $url = $href }}
{{- else if not (strings.Contains $href "/") -}}
{{ $url = index site.Params.links $href }}
{{- end -}}
{{ if not $url }}
{{- $href = strings.TrimPrefix "./" $href -}}
{{- if strings.Contains $href "#" }}
{{ $segments := split $href "#" }}
{{- if ne (len $segments) 2 }}
{{ errorf "Malformed path, expected one anchor '#' only: '%s' at %s" $href .Position -}}
{{ else }}
{{- $url = index $segments 0 -}}
{{- $anchor = index $segments 1 -}}
{{ if not $url }}
{{- $url = strings.TrimSuffix "/" .Page.RelPermalink -}}
{{- with .Page.Language }}{{ $url = strings.TrimPrefix (path.Join "/" .Lang) $url}}{{ end -}}
{{ end }}
{{ end }}
{{ else }}
{{- $url = $href -}}
{{ end }}
{{ end }}
{{ $text := trim .Inner " \r\n" | markdownify | safeHTML }}
{{- $isExternal := ne (urls.Parse (absURL $url)).Host (urls.Parse site.BaseURL).Host -}}
{{- if not $isExternal -}}
{{- $url = strings.TrimSuffix "/" $url -}}
{{- $class := .Get "class" -}}
{{- $ref := "" -}}
{{- if not $ref -}}
{{- $ref = .Page.GetPage $url -}}
{{- end -}}
{{- if not $error -}}
{{ partial "utilities/link.html" (dict "destination" $url "text" $text "cue" $cue "tab" $tab "case" $case "class" $class) }}
{{- if not $ref }}
{{- $segments := split $url "/" -}}
{{- if and (hasPrefix $url "/") (gt (len $segments) 1) -}}
{{- $prefix := index $segments 1 -}}
{{- $page := .Page -}}
{{ with index (where site.Sites "Language.Lang" $prefix) 0 }}
{{- $path := printf "/%s" (strings.TrimPrefix (printf "/%s/" $prefix) $url) }}
{{- $ref = .GetPage $path -}}
{{ end }}
{{- end -}}
{{- end -}}
{{- if not $ref -}}
{{- errorf "Cannot find page: '%s' at %s" $href .Position -}}
{{- $error = true -}}
{{- end -}}
{{- end -}}
{{ with $anchor }}
{{ $url = printf "%s#%s" $url .}}
{{ end }}
{{- if not $error -}}
{{ partial "utilities/link.html" (dict "destination" $url "text" $text "cue" $cue "tab" $tab "case" $case "class" $class "page" .Page) }}
{{- end -}}

View File

@@ -50,5 +50,5 @@
<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 }}
{{ $body | .Page.RenderString | safeHTML }}
</div>

View File

@@ -30,7 +30,8 @@
{{ $path := .Get "path" }}
{{ $page := .Site.GetPage $path }}
{{ if not $page }}
{{ errorf "Invalid or missing value for param 'page': %s" .Position -}}
{{ errorf "Invalid or missing value for param 'path': %s" $path -}}
{{ errorf " - Location: %s" .Position -}}
{{ $error = true -}}
{{ end }}

View File

@@ -44,7 +44,7 @@
{{- end -}}
{{- $title := $version -}}
{{- $color := "success" -}}
{{- $color := "primary" -}}
{{- if eq $state "deprecated" -}}
{{- $color = "secondary" -}}
{{- end -}}

View File

@@ -8,7 +8,7 @@
{{ $responsive = (slice "table-responsive") -}}
{{- end -}}
{{- $input := .Inner | markdownify }}
{{- $input := .Inner | .Page.RenderString }}
{{- $input = replace $input "style=\"text-align:left\"" "class=\"text-start\"" -}}
{{- $input = replace $input "style=\"text-align:center\"" "class=\"text-center\"" -}}
{{- $input = replace $input "style=\"text-align:right\"" "class=\"text-end\"" -}}

View File

@@ -79,7 +79,7 @@
{{ $datestr := (partial "utilities/date.html" (dict "date" $date "format" "long")) -}}
<p class="mb-0"><small class="text-body-secondary text-uppercase">{{ $datestr -}}</small></p>
{{ end }}
<p class="mt-3 mb-0">{{ $content | markdownify }}</p>
<p class="mt-3 mb-0">{{ $content | .Page.RenderString }}</p>
</div>
</div>
</div>
@@ -102,7 +102,7 @@
</div>
<!-- Render timeline for smaller devices -->
<div class="container p-0 d-block d-md-none {{ with $background }} timeline-bg-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}">
<div class="container p-0 d-block d-md-none small{{ with $background }} timeline-bg-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}">
{{ range $index, $item := $entries }}
<div class="row timeline-sm timeline-{{ $item.color }} timeline-dot g-0">
{{ partial "partials/timeline-icon.html" (dict "icon" $item.icon "direction" "end" "col" 3) }}

View File

@@ -13,7 +13,7 @@
{{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }}
</div>
<div class="col">
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ .Name | markdownify }}</a>
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ .Name | .Page.RenderString }}</a>
</div>
</div>
{{ end }}
@@ -25,14 +25,16 @@
{{ $lastYear := $.Scratch.Get "lastYear"}}
<div class="row mt-2">
<div class="d-none d-sm-block col-sm-3 mt-auto text-right">
<time class="post-date" datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" | safeHTML }}">{{ .Date.Format "Jan 2, 2006" }}</time>
<time class="post-date" datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" | safeHTML }}">
{{ (partial "utilities/date.html" (dict "date" .Date "format" "medium")) }}
</time>
</div>
<div class="col">
{{ if ne $year $lastYear }}
<p class="text-body-secondary mt-5">{{ $year }}</p>
{{ $.Scratch.Set "lastYear" $year }}
{{ end }}
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ if .Draft }}{{ T "draft" | upper }}: {{end}}{{ .Title | markdownify }}</a>
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ if .Draft }}{{ T "draft" | upper }}: {{end}}{{ .Title | .Page.RenderString }}</a>
</div>
</div>
{{ end }}

1777
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@gethinode/hinode",
"version": "0.18.0-beta",
"version": "0.18.6",
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
"keywords": [
"hugo",
@@ -17,35 +17,43 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
"start": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings",
"start:example": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -s exampleSite",
"start:prod": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -e production",
"prebuild": "npm run clean:public && npm run -s mod:install",
"build": "hugo --gc --minify",
"build:example": "npm run -s prebuild && hugo --gc --minify -s exampleSite",
"build:debug": "hugo -e debug --debug",
"build:preview": "npm run build -D -F",
"clean:public": "rimraf public",
"clean:install": "rimraf package-lock.json node_modules",
"lint": "npm run -s lint:scripts && npm run -s lint:styles && npm run -s lint:markdown",
"lint:scripts": "eslint assets/js",
"lint:styles": "stylelint \"assets/scss/**/*.{css,sass,scss,sss,less}\"",
"lint:markdown": "markdownlint-cli2 \"*.md\" \"content/**/*.md\" \"exampleSite/**/*.md\"",
"lint:markdown-fix": "markdownlint-cli2-fix \"*.md\" \"content/**/*.md\" \"exampleSite/**/*.md\"",
"mod:clean": "hugo mod clean",
"mod:install": "hugo mod get ./... && npm run -s mod:vendor && npm run -s mod:tidy",
"mod:update": "hugo mod get -u ./... && npm run -s mod:vendor && npm run -s mod:tidy",
"mod:tidy": "hugo mod tidy",
"mod:vendor": "rimraf _vendor && hugo mod vendor",
"test": "npm run -s lint",
"env": "hugo env",
"precheck": "npm version",
"check": "hugo version",
"create:syntax": "npm run -s create:syntax-light & npm run -s create:syntax-dark && npm run -s update:syntax-dark",
"create:syntax-light": "hugo gen chromastyles --style=github > ./assets/scss/components/_syntax-light.scss",
"create:syntax-dark": "hugo gen chromastyles --style=github-dark > ./assets/scss/components/_syntax-dark.scss",
"update:syntax-dark": "replace-in-files --string=\"#ffffcc\" --replacement=\"#b8b800\" ./assets/scss/components/_syntax-dark.scss",
"upgrade": "npx npm-check-updates -u && npm run -s mod:update"
"prestart": "npm run -s mod:vendor",
"start": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings",
"start:example": "npm run -s prestart && hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -s exampleSite",
"start:prod": "npm run -s prestart && hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -e production",
"prebuild": "npm run clean:public && npm run -s mod:vendor",
"build": "hugo --gc --minify",
"build:cache": "npm run -s prebuild && hugo config | grep cachedir && hugo --gc --minify -e ci",
"build:example": "npm run -s prebuild && hugo --gc --minify -s exampleSite",
"build:example:ci": "npm run -s prebuild && hugo --gc --minify -s exampleSite -e ci",
"build:debug": "hugo -e debug --debug",
"build:preview": "npm run build -D -F",
"clean:public": "rimraf public exampleSite/public",
"clean:install": "rimraf package-lock.json node_modules",
"lint": "npm-run-all lint:**",
"lint:scripts": "eslint assets/js --no-error-on-unmatched-pattern",
"lint:styles": "stylelint \"assets/scss/**/*.{css,sass,scss,sss,less}\" --allow-empty-input",
"lint:markdown": "markdownlint-cli2 \"*.md\" \"content/**/*.md\" \"exampleSite/**/*.md\"",
"mod:clean": "hugo mod clean",
"mod:update": "rimraf _vendor && hugo mod get -u ./... && hugo mod get -u && npm run -s mod:vendor && npm run -s mod:tidy",
"mod:tidy": "hugo mod tidy && hugo mod tidy -s exampleSite",
"mod:vendor": "rimraf _vendor && hugo mod vendor",
"test": "npm run -s lint",
"env": "hugo env",
"precheck": "npm version",
"check": "hugo version",
"create:syntax": "npm-run-all update:syntax:**",
"update:syntax:light1": "hugo gen chromastyles --style=github > ./assets/scss/components/_syntax-light.scss",
"update:syntax:light2": "replace-in-files --string=\"#0086b3\" --replacement=\"#006b8f\" ./assets/scss/components/_syntax-light.scss",
"update:syntax:light3": "replace-in-files --string=\"#009999\" --replacement=\"#007a7a\" ./assets/scss/components/_syntax-light.scss",
"update:syntax:light4": "replace-in-files --string=\"#999988\" --replacement=\"#6d6d5d\" ./assets/scss/components/_syntax-light.scss",
"update:syntax:dark1": "hugo gen chromastyles --style=github-dark > ./assets/scss/components/_syntax-dark.scss",
"update:syntax:dark2": "replace-in-files --string=\"#ffffcc\" --replacement=\"#373700\" ./assets/scss/components/_syntax-dark.scss",
"update:syntax:dark3": "replace-in-files --string=\"#8b949e\" --replacement=\"#979fa8\" ./assets/scss/components/_syntax-dark.scss",
"update:syntax:dark4": "replace-in-files --string=\".na { }\" --replacement=\".na { color: #00cccc }\" ./assets/scss/components/_syntax-dark.scss",
"update:syntax:dark5": "replace-in-files --string=\".nb { }\" --replacement=\".nb { color: #00a2d8 }\" ./assets/scss/components/_syntax-dark.scss",
"update:syntax:dark6": "replace-in-files --string=\"#6e7681\" --replacement=\"#999fa8\" ./assets/scss/components/_syntax-dark.scss",
"upgrade": "npx npm-check-updates -u && npm run -s mod:update"
},
"repository": {
"type": "git",
@@ -59,22 +67,23 @@
"homepage": "https://gethinode.com",
"devDependencies": {
"@fullhuman/postcss-purgecss": "^5.0.0",
"autoprefixer": "^10.4.14",
"autoprefixer": "^10.4.15",
"cssnano": "^6.0.1",
"cssnano-preset-advanced": "^6.0.1",
"eslint": "^8.46.0",
"eslint": "^8.47.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.28.0",
"eslint-plugin-n": "^16.0.1",
"eslint-plugin-import": "^2.28.1",
"eslint-plugin-n": "^16.0.2",
"eslint-plugin-promise": "^6.1.1",
"hugo-bin": "^0.113.0",
"markdownlint-cli2": "^0.8.1",
"markdownlint-cli2": "^0.9.0",
"npm-run-all": "^4.1.5",
"postcss-cli": "^10.1.0",
"purgecss-whitelister": "^2.4.0",
"replace-in-files-cli": "^2.2.0",
"rimraf": "^5.0.1",
"shx": "^0.3.4",
"stylelint": "^15.10.2",
"stylelint": "^15.10.3",
"stylelint-config-standard-scss": "^10.0.0"
},
"hugo-bin": {