Compare commits

...

381 Commits

Author SHA1 Message Date
Mark Dumay
cb8f4cfe36 Merge pull request #111 from markdumay/dependabot/npm_and_yarn/rimraf-4.1.2
Bump rimraf from 4.1.1 to 4.1.2
2023-01-27 17:20:11 +01:00
dependabot[bot]
0420aedb32 Bump rimraf from 4.1.1 to 4.1.2
Bumps [rimraf](https://github.com/isaacs/rimraf) from 4.1.1 to 4.1.2.
- [Release notes](https://github.com/isaacs/rimraf/releases)
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v4.1.1...v4.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-27 13:12:39 +00:00
Mark Dumay
57991ed86f Merge pull request #110 from markdumay/csp
Icons
2023-01-27 10:35:59 +01:00
mark
b4a761d9ae Fix rendering of icons in production 2023-01-27 10:31:11 +01:00
mark
de97ce712a Remove empty space 2023-01-27 10:27:16 +01:00
Mark Dumay
56d950d8b3 Merge pull request #109 from markdumay/csp
Content Security Policy
2023-01-27 07:41:53 +01:00
mark
36f1895ef0 Improve trim on Windows 2023-01-27 07:37:29 +01:00
mark
e26b140185 Fix regex on Windows 2023-01-27 07:22:20 +01:00
mark
b021836322 Clean file path 2023-01-27 06:37:35 +01:00
mark
35dc525cbc Clean file path 2023-01-27 06:37:30 +01:00
mark
154bea7f34 Fix linting issues 2023-01-27 06:24:05 +01:00
mark
d644d0009a Adjust package version 2023-01-26 19:09:26 +01:00
mark
21391c5062 Clean up old content 2023-01-26 19:07:13 +01:00
mark
9e004b053b Hide work in progress content 2023-01-26 19:06:07 +01:00
mark
cdb0583cfa Add preliminary icon support 2023-01-26 18:57:28 +01:00
mark
80c45ae937 Remove icon 2023-01-26 18:57:05 +01:00
mark
34186b4a3a Hide work in progress content 2023-01-26 18:55:51 +01:00
mark
5b3bc65044 Fix font reference 2023-01-26 18:55:37 +01:00
mark
4cb4d71c29 Add deployment placeholder 2023-01-26 06:34:12 +01:00
mark
63c340388a Add custom header 2023-01-26 06:32:38 +01:00
mark
f1eca1820a Use indentation 2023-01-25 19:46:53 +01:00
mark
7e3e1d5f3c Fix globe logo 2023-01-25 19:44:54 +01:00
mark
91894368bd Use example shortcode 2023-01-25 19:44:43 +01:00
mark
240ab445fd Trim content 2023-01-25 19:39:08 +01:00
mark
14d3f87433 Fix error message 2023-01-25 19:38:54 +01:00
mark
de23b953b8 Add path arg 2023-01-25 19:38:39 +01:00
mark
bab08f2645 Remove whitespace 2023-01-25 19:38:29 +01:00
mark
52c6fa27b1 Use example shortcode 2023-01-25 19:38:09 +01:00
mark
fba194e0c4 Hide copy button placeholder 2023-01-25 12:37:17 +01:00
mark
9b6da30281 Add shortcode to show code examples incl output 2023-01-25 12:28:08 +01:00
mark
628e6d0a82 Add missing regular icons 2023-01-25 12:26:13 +01:00
mark
0cd6fefac6 Remove overview from content section 2023-01-24 09:43:16 +01:00
mark
0639ea4f8e Add external links 2023-01-24 09:42:52 +01:00
mark
0d6804ae6b Fix linting issues 2023-01-24 07:37:20 +01:00
mark
eceb98923c Add link to content section about icons 2023-01-24 07:35:25 +01:00
mark
7b1ea3bb48 Add icon documentation 2023-01-24 07:31:20 +01:00
mark
0dc7887e99 Add icon documentation 2023-01-24 07:31:12 +01:00
mark
fe6f49b516 Refine and add Font Awesome 2023-01-23 19:11:13 +01:00
mark
2632c690ea Add placeholder 2023-01-23 18:55:52 +01:00
mark
62dee1a440 Add initial icons documentation 2023-01-23 07:27:43 +01:00
mark
4257ff2e37 Add initial icons documentation 2023-01-23 07:27:35 +01:00
mark
17f72ec5fd Add icons placeholder 2023-01-22 17:11:54 +01:00
mark
197505e79d Add links placeholder 2023-01-22 17:11:42 +01:00
mark
5e6f878606 Fix linting issues 2023-01-22 17:11:19 +01:00
mark
9cf568cd40 Refine intro 2023-01-22 16:45:37 +01:00
mark
bdff2c24df Add table shortcode 2023-01-22 16:45:24 +01:00
mark
11b95e35a4 Add table documentation 2023-01-22 16:45:17 +01:00
mark
214b667409 Hide placeholder content 2023-01-22 09:52:22 +01:00
mark
daf881a6ad Change file description 2023-01-22 09:52:02 +01:00
mark
6cf89f5c59 Add typography documentation 2023-01-22 09:51:44 +01:00
mark
24be96a4a7 Add typography documentation 2023-01-22 09:51:32 +01:00
mark
9221a05c8f Fix typo in example 2023-01-21 20:41:18 +01:00
mark
859b62d460 Fix git link 2023-01-21 20:35:52 +01:00
mark
f458b2250c Fix lint issue 2023-01-21 20:32:03 +01:00
mark
ca798c391d Clean npm scripts 2023-01-21 20:30:18 +01:00
mark
ea14e90901 Add font docs 2023-01-21 20:30:00 +01:00
mark
058ec3f1df Fix bold font 2023-01-21 20:29:48 +01:00
mark
d239ec482d Add font docs 2023-01-21 20:29:35 +01:00
mark
779fcfbda1 Fix typo 2023-01-21 19:05:47 +01:00
mark
b326a0c121 Simplify local server headers 2023-01-21 19:05:24 +01:00
mark
e4ef15b702 Update package versions in example 2023-01-21 15:36:54 +01:00
mark
24ba30acb0 Refine wording 2023-01-21 15:36:27 +01:00
mark
3884e32245 Add scripts documentation 2023-01-21 15:36:07 +01:00
mark
49733cc31c Add dart-sass comment 2023-01-21 15:01:38 +01:00
mark
0bc440c640 Use cross-platform rimraf 2023-01-21 15:01:09 +01:00
mark
dec5269f56 Add dart-sass comment 2023-01-21 15:00:42 +01:00
mark
33a55ef9f3 Use cross-platform rimraf 2023-01-21 14:57:47 +01:00
mark
4c3920abbc Use cross-platform rimraf 2023-01-21 14:57:32 +01:00
mark
664d9fa9b0 Add docs tag 2023-01-21 14:55:22 +01:00
Mark Dumay
644fdaefca Merge pull request #107 from markdumay/main
Sync with main branch
2023-01-21 08:13:38 +01:00
mark
7c6d9bc7a3 Fix linting issues 2023-01-21 08:10:32 +01:00
Mark Dumay
ec50c950bb Merge branch 'csp' into main 2023-01-21 08:05:14 +01:00
mark
4015b923a7 Refine comments 2023-01-21 07:54:06 +01:00
mark
cd0786e82c Add fonts placeholder 2023-01-21 07:52:57 +01:00
mark
a2762ebf4b Define styles documentation 2023-01-21 07:52:35 +01:00
mark
0dda1af72d Add language documentation 2023-01-21 06:39:41 +01:00
mark
af792bf385 Simplify frontmatter 2023-01-21 06:39:27 +01:00
mark
4a77d9cafd Simplify frontmatter 2023-01-21 06:38:48 +01:00
mark
db1b0efd04 Add language documentation 2023-01-21 06:38:29 +01:00
mark
0b273a0bb7 Finalize layout documentation for single pages 2023-01-21 05:57:41 +01:00
mark
3c22cda509 Document language configuration 2023-01-21 05:20:52 +01:00
mark
5b7645797b Extend list page configuration 2023-01-21 05:20:11 +01:00
mark
dcb0d27883 Fix a typo 2023-01-21 05:19:44 +01:00
mark
76622657dd Expand base layout configuration settings 2023-01-21 05:19:27 +01:00
mark
3ef9622c9a Add about i18n 2023-01-21 04:46:39 +01:00
mark
1dbc144fbc Refine documentation 2023-01-21 04:46:09 +01:00
mark
a5d5ddc5e6 Reuse section list for home page and list pages 2023-01-21 04:45:51 +01:00
mark
cfe4cc8505 Reuse section list for home page and list pages 2023-01-21 04:45:23 +01:00
mark
4d98627e21 Streamline site parameters 2023-01-21 04:43:37 +01:00
Mark Dumay
d31c1cdd92 Merge pull request #90 from dgrammlich/fix-missing-bullet
Add bullet after modified time entry
2023-01-20 05:37:00 +01:00
Daniela Grammlich
3fb9f43969 Refactor code to ensure whitespaces around every bullet 2023-01-19 17:34:42 +01:00
Daniela Grammlich
58422ae631 Add missing non-breaking space 2023-01-19 17:34:42 +01:00
Daniela Grammlich
28801aeef7 Refactor code 2023-01-19 17:34:42 +01:00
Daniela Grammlich
294928c254 Add bullet after modified time entry 2023-01-19 17:34:42 +01:00
mark
cd40afe6e4 Add initial layout content 2023-01-18 10:46:29 +01:00
mark
bf1728b88f Support list page parameterization 2023-01-18 10:43:26 +01:00
mark
1c9e8166a8 Refine default settings 2023-01-18 10:42:39 +01:00
mark
5492032128 Streamline configuration parameters 2023-01-18 10:39:55 +01:00
mark
070fe64d82 Fix title argument 2023-01-18 10:37:21 +01:00
mark
d3c45aff32 Bump dependency 2023-01-18 10:36:48 +01:00
mark
1c60dfa023 Add metadata placeholder 2023-01-18 10:36:38 +01:00
Mark Dumay
976f437949 Merge pull request #104 from markdumay/dependabot/npm_and_yarn/eslint-plugin-import-2.27.5
Bump eslint-plugin-import from 2.27.4 to 2.27.5
2023-01-17 15:28:03 +01:00
dependabot[bot]
e2db1af696 Bump eslint-plugin-import from 2.27.4 to 2.27.5
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.27.4 to 2.27.5.
- [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.27.4...v2.27.5)

---
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-01-17 13:14:40 +00:00
Mark Dumay
7b2cf91811 Merge pull request #103 from markdumay/dependabot/npm_and_yarn/eslint-8.32.0
Bump eslint from 8.31.0 to 8.32.0
2023-01-16 14:49:06 +01:00
dependabot[bot]
83adf87e5b Bump eslint from 8.31.0 to 8.32.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.31.0 to 8.32.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.31.0...v8.32.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-01-16 13:21:37 +00:00
mark
7769d58ad9 Fix scroll position of anchors with fixed nav 2023-01-16 06:28:28 +01:00
mark
d79be40cae Refactor positioning of navigation elements 2023-01-16 06:27:33 +01:00
mark
849d60d4f8 Refactor positioning of navigation elements 2023-01-16 06:27:16 +01:00
mark
781bc8678b Refactor positioning of navigation elements 2023-01-16 06:26:56 +01:00
mark
314fd94eeb Disable breadcrumb 2023-01-15 15:49:51 +01:00
mark
e0fbacc57d Add placeholder 2023-01-15 15:48:27 +01:00
mark
87ed025a87 Remove redundant frontmatter argument 2023-01-15 15:48:14 +01:00
mark
b31e2cac82 Improve markup 2023-01-15 15:44:20 +01:00
mark
acc96631cf Standardize navigation configuration 2023-01-15 15:43:53 +01:00
mark
d49a17c015 Add navigation page 2023-01-15 15:43:38 +01:00
mark
3b4813d65a Refine breadcrumb layout 2023-01-15 15:42:23 +01:00
mark
91da9eaecf Add layout page 2023-01-15 15:41:40 +01:00
mark
b8c555449b Improve single page menus 2023-01-15 15:41:23 +01:00
mark
73364ae305 Standardize navigation configuration 2023-01-15 15:41:00 +01:00
mark
c138b5999f Address linting issues 2023-01-15 15:38:01 +01:00
mark
963100834e Refine colored links example 2023-01-15 05:00:06 +01:00
mark
4a4ee8d2fc Use scss-docs to add generator example 2023-01-15 04:59:49 +01:00
mark
ca60f7e2c3 Use toml-docs to add config example 2023-01-15 04:59:08 +01:00
mark
e28a6086b8 Use toml-docs to add config example 2023-01-15 04:58:36 +01:00
mark
010b0e8b04 Add server configuration 2023-01-14 17:47:39 +01:00
mark
c83c5ccb48 Add color configuration 2023-01-14 17:15:27 +01:00
mark
bb3edcc0b9 Add configuration overview 2023-01-14 16:52:26 +01:00
mark
b7e4ec2465 Add keywords and author 2023-01-14 16:51:50 +01:00
mark
5b7f2d33ca Add repo owner 2023-01-14 12:55:38 +01:00
mark
0f401bf345 Update features 2023-01-14 12:55:09 +01:00
mark
b77215f7b6 Add license overview for code and documentation 2023-01-14 12:54:49 +01:00
mark
5e5d8d8338 Remove overview from about section 2023-01-14 12:54:11 +01:00
mark
cbb7713737 Add team, core components, and inspiration 2023-01-14 11:52:35 +01:00
mark
17f63f93e4 Add initial credits 2023-01-14 08:57:09 +01:00
mark
3755c20a55 Simplify reference to Hinode 2023-01-14 08:47:13 +01:00
mark
0a8ec00c90 Simplify reference to Hinode 2023-01-14 08:46:45 +01:00
mark
8aabb262ca Add placeholders 2023-01-14 08:43:13 +01:00
mark
9d26a7386c Add documentation keyword to theme summary 2023-01-14 08:10:39 +01:00
mark
b61c68ce68 Centralize external links 2023-01-14 07:44:47 +01:00
mark
8bb66ff0cd Align padding to main content 2023-01-14 06:39:52 +01:00
mark
d038ef2590 Change author 2023-01-14 06:39:26 +01:00
mark
175f726e3c Fix /docs redirect 2023-01-14 06:39:11 +01:00
mark
03b665f273 Address linting issues 2023-01-13 07:34:32 +01:00
mark
786dbbab1e Use command shortcode 2023-01-13 07:34:21 +01:00
mark
13c7e4e9a4 Add link comment 2023-01-13 07:33:06 +01:00
mark
c4d8665e10 Remove unused links 2023-01-13 07:32:52 +01:00
mark
06f739dc79 Rewrite contribution guidelines 2023-01-13 07:31:48 +01:00
Mark Dumay
aff07f0392 Update issue templates 2023-01-13 05:41:53 +01:00
Mark Dumay
20061058bf Update issue templates 2023-01-13 05:36:15 +01:00
Mark Dumay
318abf8f19 Merge pull request #102 from markdumay/dependabot/npm_and_yarn/eslint-plugin-import-2.27.4
Bump eslint-plugin-import from 2.26.0 to 2.27.4
2023-01-12 15:11:27 +01:00
dependabot[bot]
7ad9f428ab Bump eslint-plugin-import from 2.26.0 to 2.27.4
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.26.0 to 2.27.4.
- [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.26.0...v2.27.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-12 13:30:56 +00:00
mark
b5d6c2dc8f Add initial version 2023-01-11 17:12:14 +01:00
mark
59e6b6c789 Fix linting issues 2023-01-11 15:20:27 +01:00
mark
cdaa9a97ed Apply docs layout 2023-01-11 15:07:25 +01:00
mark
6f1a22172a Fix toggle with multiple navbars 2023-01-11 15:01:54 +01:00
mark
6f26c0257e Add badge documentation 2023-01-11 14:44:44 +01:00
mark
393b4d0324 Generalize sidebar support 2023-01-11 14:12:47 +01:00
mark
c78b4daa75 Fix layout of cards 2023-01-11 14:10:13 +01:00
Mark Dumay
2a3a236025 Merge pull request #101 from markdumay/image-win
Fix image handling on Windows
2023-01-11 13:14:26 +01:00
mark
d19cec8547 Bump dependencies 2023-01-11 13:09:31 +01:00
mark
6800125faa Bump package version 2023-01-11 13:08:41 +01:00
mark
7b6966c48f Fix #100 2023-01-11 10:27:19 +01:00
Mark Dumay
f8c25163c6 Update build.yml 2023-01-11 05:06:47 +01:00
Mark Dumay
79aae2c355 Merge pull request #99 from markdumay/dependabot/npm_and_yarn/json5-1.0.2
Bump json5 from 1.0.1 to 1.0.2
2023-01-11 05:01:53 +01:00
Mark Dumay
1adb480281 Create build.yml 2023-01-11 05:00:57 +01:00
dependabot[bot]
801733ac98 Bump json5 from 1.0.1 to 1.0.2
Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-08 18:37:33 +00:00
mark
8de92ae0c0 Add sidebar toggle button 2023-01-08 12:31:52 +01:00
mark
3aa9e5eee3 Add initial content 2023-01-08 12:04:16 +01:00
mark
e95262d887 Add initial content 2023-01-08 12:04:00 +01:00
mark
e6dac64a66 Refine description 2023-01-08 12:02:43 +01:00
mark
1b23707d68 Add support for fixed-top navbar 2023-01-08 12:02:22 +01:00
mark
38fbdfe0dd Add initial docs menu 2023-01-08 12:00:07 +01:00
mark
17123df07f Extend supported colors 2023-01-08 11:56:16 +01:00
mark
ac663e4300 Add sidebar navigation support 2023-01-08 11:53:36 +01:00
mark
d6931e08b0 Fix alignment of suggestions on overflow 2023-01-08 11:07:30 +01:00
mark
8d9f9126ba Refine navbar component 2023-01-07 11:25:12 +01:00
mark
6174f6902d Add initial component documentation 2023-01-06 16:32:42 +01:00
mark
3a48245e47 Fix Dutch url 2023-01-06 16:31:10 +01:00
mark
5e41528313 Add git partial 2023-01-06 16:30:14 +01:00
mark
a1c8571883 Fix active item identification 2023-01-06 16:29:27 +01:00
mark
b6e4f1c9e8 Add placeholder content 2023-01-06 16:27:44 +01:00
mark
3396edd49d Add placeholder content 2023-01-06 16:27:09 +01:00
mark
2935b19918 Fix layout 2023-01-05 10:38:44 +01:00
mark
fb9a3198e3 Add nested menu example 2023-01-05 10:37:53 +01:00
mark
572bff160a Introduce reusable card group 2023-01-05 10:37:19 +01:00
mark
49c6f2e722 Align card height to grid 2023-01-05 10:35:03 +01:00
mark
842706b39b Add search option 2023-01-05 10:34:03 +01:00
mark
221888a9df Remove debug statements 2023-01-05 10:33:36 +01:00
mark
85b52116a0 Remove rendered space 2023-01-03 16:56:26 +01:00
mark
b371b0f162 Add support for full cover page 2023-01-03 16:56:04 +01:00
Mark Dumay
9f30ce0dfa Merge pull request #97 from markdumay/dependabot/npm_and_yarn/markdownlint-cli2-0.6.0
Bump markdownlint-cli2 from 0.5.1 to 0.6.0
2023-01-02 17:50:45 +01:00
Mark Dumay
7ed1309e67 Merge pull request #98 from markdumay/dependabot/npm_and_yarn/eslint-8.31.0
Bump eslint from 8.30.0 to 8.31.0
2023-01-02 17:48:29 +01:00
mark
fe7c7af9e9 Fix #86 2023-01-02 15:03:38 +01:00
mark
77986aea12 Fix #86 2023-01-02 15:02:27 +01:00
dependabot[bot]
0ed4e12eec Bump eslint from 8.30.0 to 8.31.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.30.0 to 8.31.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.30.0...v8.31.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-01-02 13:32:13 +00:00
dependabot[bot]
29ae08aca8 Bump markdownlint-cli2 from 0.5.1 to 0.6.0
Bumps [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) from 0.5.1 to 0.6.0.
- [Release notes](https://github.com/DavidAnson/markdownlint-cli2/releases)
- [Commits](https://github.com/DavidAnson/markdownlint-cli2/compare/v0.5.1...v0.6.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-01-02 13:31:50 +00:00
mark
fc98cb27cb Address linting issues 2023-01-02 08:30:39 +01:00
mark
f31f67bc38 Address linting issues 2023-01-02 07:56:45 +01:00
mark
ced65e93f2 Adsd collapse shortcode 2023-01-02 07:56:26 +01:00
mark
ccabca0e44 Refine close button documentation 2023-01-02 07:52:40 +01:00
mark
ac36334e46 Refine badge documentation 2023-01-02 07:52:16 +01:00
mark
8e65ad0d9b Fix popover 2023-01-01 17:12:35 +01:00
mark
b88536991c Add accordion shortcode 2023-01-01 16:33:41 +01:00
mark
609ead6929 Simplify argument init 2023-01-01 16:33:22 +01:00
mark
42f2d40782 Make href optional and add id 2023-01-01 11:32:57 +01:00
mark
414f635da0 Add toast shortcode 2023-01-01 11:31:24 +01:00
mark
7f883265bf Remove generated newline 2023-01-01 10:42:07 +01:00
mark
a76d144961 Add css compression in production 2023-01-01 10:40:34 +01:00
mark
89546e97a9 Reuse existing variable 2023-01-01 10:39:49 +01:00
mark
266dfeb378 Remove debug statement 2023-01-01 10:29:46 +01:00
mark
a2a9c5cced Center card 2023-01-01 09:46:28 +01:00
mark
9eb3eb45d8 Bundle primary scripts 2023-01-01 09:40:35 +01:00
mark
7235f804cf Update copyright notice 2023-01-01 09:39:28 +01:00
mark
6ee2903e1f Fix more button translation 2022-12-31 15:56:40 +01:00
mark
94519ebab7 Remove obsolete partials 2022-12-31 15:46:57 +01:00
mark
bdb383971f Remove redundant spaces 2022-12-31 15:44:45 +01:00
mark
28ccceb4e7 Add modified date 2022-12-31 15:43:40 +01:00
mark
44c7effd84 Refine modification date 2022-12-31 15:43:29 +01:00
mark
c35f4af315 Prettify number formatting 2022-12-31 15:42:46 +01:00
mark
b9f4ad7dd4 Make descriptions consistent 2022-12-31 15:42:13 +01:00
mark
cca17670df Fix linting issues 2022-12-31 15:15:07 +01:00
mark
6b0c5cbbf3 Rename project-card to card-emphasize 2022-12-31 14:49:57 +01:00
mark
059870d86b Refactor card partial 2022-12-31 14:22:57 +01:00
mark
adf10a184c Add header and footer 2022-12-31 14:22:43 +01:00
mark
8e26e8ef7f Reuse card partial 2022-12-31 14:22:24 +01:00
mark
840fbd42af Update documentation 2022-12-31 14:21:47 +01:00
mark
3945be2871 Add support for link-bg-* classes 2022-12-31 14:21:28 +01:00
mark
eb8422e277 Change thumbnails 2022-12-31 06:55:52 +01:00
mark
60a5a87990 Refine intro 2022-12-30 16:54:48 +01:00
mark
7a689eb6c5 Reuse card partial 2022-12-30 16:49:20 +01:00
mark
9f47ce8f23 Reuse card partial 2022-12-30 16:49:00 +01:00
mark
09ce9835fb Add card shortcode 2022-12-30 16:48:26 +01:00
mark
06cedc7285 Refactor card shortcode and partial 2022-12-30 16:48:09 +01:00
mark
95dba924e3 Rename text param to title 2022-12-30 07:28:33 +01:00
mark
abb09b91ea Add card shortcode and partial 2022-12-30 07:28:04 +01:00
Mark Dumay
793eaeaab1 Merge pull request #96 from markdumay/dependabot/npm_and_yarn/stylelint-14.16.1
Bump stylelint from 14.16.0 to 14.16.1
2022-12-29 15:01:38 +01:00
dependabot[bot]
a2b28da988 Bump stylelint from 14.16.0 to 14.16.1
Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.16.0 to 14.16.1.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/14.16.0...14.16.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-29 13:15:40 +00:00
mark
1ec9690fe1 Add breadcrumb partial and shortcode 2022-12-27 16:55:53 +01:00
mark
9ba31ad1c3 Add button group shortcode 2022-12-27 16:30:32 +01:00
mark
3cc530b3f6 Include shortcode references and examples 2022-12-27 16:10:42 +01:00
mark
c19a0d1b06 Refine examples 2022-12-27 15:54:54 +01:00
mark
1cd1bfe463 Reuse button partial 2022-12-27 15:54:18 +01:00
mark
fed06d16d5 Add button partial and shortcode 2022-12-27 15:54:07 +01:00
mark
ffeaeb47f6 Add alert, spinner, and tooltip shortcode 2022-12-26 19:29:49 +01:00
mark
7c7331a219 Remove redundant whitespace 2022-12-26 19:29:04 +01:00
mark
9138fae240 Improve documentation 2022-12-26 19:28:47 +01:00
mark
155c1c6e68 Add alert shortcode 2022-12-26 19:28:19 +01:00
mark
1fa374c7e6 Add spinner shortcode 2022-12-26 19:28:11 +01:00
mark
98e95bf03e Add tooltip shortcode 2022-12-26 19:27:59 +01:00
mark
e28ed2283c Remove test file 2022-12-26 11:49:16 +01:00
mark
a651d0e14d Refine indentation 2022-12-26 11:46:51 +01:00
mark
81b2f8fd1f Refine summary 2022-12-26 11:46:49 +01:00
mark
125e2b011b Support parameterized vector icons 2022-12-26 11:32:40 +01:00
mark
d1c26f8321 Add example bootstrap components 2022-12-26 11:30:31 +01:00
mark
66e619af96 Add parameterized vector images 2022-12-26 11:29:36 +01:00
mark
5a8bf71cd6 Add parameterized vector images 2022-12-26 11:29:05 +01:00
mark
820aa45a58 Update theme color style 2022-12-26 11:27:35 +01:00
mark
50b712cf9c Remove redundant space 2022-12-26 11:25:54 +01:00
mark
2c8097bbb8 Bump dependency 2022-12-26 11:25:38 +01:00
mark
f89dfd23ef Add banner mixin placeholder 2022-12-21 05:26:35 +01:00
Mark Dumay
0999eb451b Merge pull request #94 from markdumay/dependabot/npm_and_yarn/eslint-8.30.0
Bump eslint from 8.29.0 to 8.30.0
2022-12-19 15:02:26 +01:00
dependabot[bot]
152a955597 Bump eslint from 8.29.0 to 8.30.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.29.0 to 8.30.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.29.0...v8.30.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-19 13:19:58 +00:00
mark
f72cd1de3c Remove trailing slash on void elements 2022-12-14 16:57:34 +01:00
Mark Dumay
482a9bfe26 Merge pull request #93 from markdumay/main
Synchronize branch
2022-12-12 07:10:09 +01:00
Mark Dumay
a0fb57d7d3 Merge pull request #92 from markdumay/develop
Fix spacing of blog captions #87
2022-12-12 07:04:03 +01:00
mark
c6c686ec65 Fix spacing of blog captions #87 2022-12-12 07:01:13 +01:00
Mark Dumay
48f967ad92 Merge pull request #91 from markdumay/develop
Bump package version
2022-12-12 06:54:53 +01:00
mark
ba3af4f031 Bump package version 2022-12-12 06:52:14 +01:00
Mark Dumay
70a175bdaa Merge pull request #89 from dgrammlich/enhance-i18n-labels
Translate pagination buttons
2022-12-12 06:47:03 +01:00
Daniela Grammlich
fdc0750f13 Translate first and last button of pagination 2022-12-12 00:20:21 +01:00
Daniela Grammlich
43db7912d0 Provide translations for aria-label 2022-12-12 00:19:35 +01:00
Daniela Grammlich
5a4f0dc14d Merge branch 'markdumay:main' into enhance-i18n-labels 2022-12-12 00:07:19 +01:00
Daniela Grammlich
c93b62817e Use proper Dutch translation for pagination 2022-12-11 19:32:39 +01:00
Mark Dumay
3a6ab9df76 Merge pull request #88 from dgrammlich/german-language-support
Add German translation
2022-12-11 19:07:32 +01:00
Daniela Grammlich
ad5989d80f Provide labels for pagination 2022-12-11 19:02:38 +01:00
Daniela Grammlich
0b9eadffb6 Translate pagination buttons 2022-12-11 18:56:55 +01:00
Daniela Grammlich
9963b746b1 Add German translation 2022-12-11 18:22:39 +01:00
Mark Dumay
836ef99122 Merge pull request #85 from markdumay/develop
Configurable font
2022-12-10 07:23:26 +01:00
mark
156b444582 Bump package version 2022-12-10 07:20:58 +01:00
mark
aa27ab0f2c Make default font configurable 2022-12-10 07:18:56 +01:00
Mark Dumay
76e0040505 Merge pull request #84 from markdumay/develop
Develop
2022-12-09 19:33:19 +01:00
mark
d3baf1a86a Upgrade version 2022-12-09 19:30:22 +01:00
mark
681bf636dc Fix #83 2022-12-09 19:29:14 +01:00
mark
607b5e3fec Align shortcode tag 2022-12-09 18:49:20 +01:00
Mark Dumay
5f4192a639 Merge pull request #82 from markdumay/develop
Develop
2022-12-09 07:40:25 +01:00
mark
220cd05f6d Bump package version 2022-12-09 07:34:46 +01:00
mark
3cfc732dff Update ratio behavior 2022-12-09 07:33:35 +01:00
mark
f04b37e0d3 Update ratio behavior 2022-12-09 07:31:51 +01:00
mark
05274cef64 Fix resizing of images 2022-12-09 07:30:43 +01:00
Mark Dumay
8f5ac20310 Merge pull request #81 from markdumay/develop
Develop
2022-12-09 06:50:59 +01:00
mark
db65425c06 Bump package version 2022-12-09 06:48:30 +01:00
mark
e475460a48 Remove default ratio 2022-12-09 06:48:19 +01:00
Mark Dumay
6dfe7a7045 Merge pull request #80 from markdumay/develop
Develop
2022-12-09 06:11:57 +01:00
mark
9b23079fe1 Bump package version 2022-12-09 06:10:05 +01:00
mark
c5c9d6404c Fix linting issues 2022-12-09 06:09:51 +01:00
mark
42cb871283 Move command shortcode to different page 2022-12-09 06:05:56 +01:00
mark
39778b9c5b Rephrase shortcode 2022-12-09 06:05:08 +01:00
mark
8bb7c354c7 Rephrase shortcode 2022-12-09 06:04:55 +01:00
mark
37b76f8816 Update Dutch translation 2022-12-09 05:45:04 +01:00
mark
5164413ab8 Refine description of image shortcode behavior 2022-12-09 05:39:16 +01:00
mark
857ce9e811 Support original aspect ratio 2022-12-09 05:38:20 +01:00
mark
3d6bd7ae3a Validate aspect ratio 2022-12-09 05:37:22 +01:00
Mark Dumay
87529a9d55 Merge pull request #78 from markdumay/develop
Dependencies
2022-12-07 05:39:43 +01:00
mark
7dbf1e09a3 Upgrade dependencies 2022-12-07 05:39:08 +01:00
Mark Dumay
991596d368 Merge pull request #77 from markdumay/main
Synchronize branch
2022-12-07 05:35:20 +01:00
Mark Dumay
72b319323c Merge pull request #76 from markdumay/dependabot/npm_and_yarn/eslint-plugin-n-15.6.0
Bump eslint-plugin-n from 15.5.1 to 15.6.0
2022-12-06 14:32:32 +01:00
Mark Dumay
2170bed0be Merge pull request #75 from markdumay/dependabot/npm_and_yarn/eslint-8.29.0
Bump eslint from 8.28.0 to 8.29.0
2022-12-06 14:32:04 +01:00
Mark Dumay
517185039d Merge pull request #74 from markdumay/dependabot/npm_and_yarn/stylelint-14.16.0
Bump stylelint from 14.15.0 to 14.16.0
2022-12-06 14:31:35 +01:00
dependabot[bot]
8d9eecc4c2 Bump eslint-plugin-n from 15.5.1 to 15.6.0
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 15.5.1 to 15.6.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/15.5.1...15.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-06 13:18:17 +00:00
dependabot[bot]
c94b4b75ea Bump eslint from 8.28.0 to 8.29.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.28.0 to 8.29.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.28.0...v8.29.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-06 13:18:07 +00:00
dependabot[bot]
2487a4740d Bump stylelint from 14.15.0 to 14.16.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.15.0 to 14.16.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/14.15.0...14.16.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-06 13:17:54 +00:00
Mark Dumay
b0239c614a Merge pull request #73 from markdumay/develop
Develop
2022-12-05 10:26:01 +01:00
mark
a1b692965a Fix #71 2022-12-05 10:22:56 +01:00
Mark Dumay
a2149c8966 Merge pull request #72 from markdumay/main
Synchronize branch
2022-12-05 10:01:36 +01:00
Mark Dumay
8bc980d1b7 Merge pull request #70 from markdumay/carousel
Carousel
2022-12-05 09:41:43 +01:00
mark
97864fe177 Extend build timeout 2022-12-05 09:39:57 +01:00
mark
f676190178 Bump version 2022-12-05 09:15:01 +01:00
Mark Dumay
0130aa39ee Merge pull request #69 from markdumay/main
Synchronize branch
2022-12-05 09:14:26 +01:00
Mark Dumay
cc3584d82f Merge branch 'carousel' into main 2022-12-05 09:13:33 +01:00
Mark Dumay
5a6a662eb0 Merge pull request #68 from markdumay/develop
Fixes
2022-12-05 09:06:01 +01:00
mark
d32dd7ec26 Bump version 2022-12-05 08:53:02 +01:00
mark
ff355a56d5 Fix #63 2022-12-05 08:52:54 +01:00
mark
a76b5f34c8 Fix #64 2022-12-05 08:44:15 +01:00
mark
d7cffa69da Fix #66 2022-12-05 08:42:26 +01:00
Mark Dumay
bb24bd4e5e Merge pull request #67 from markdumay/main
Synchronize branch
2022-12-05 08:38:08 +01:00
mark
92aefe5ef7 Bump version 2022-12-05 08:36:28 +01:00
mark
b8540aacc5 Add shortcode description 2022-12-05 08:36:09 +01:00
mark
2bfee732e0 Add carousel shortcode 2022-12-05 08:35:49 +01:00
mark
dbfccb7593 Remove redundant whitespace 2022-12-05 08:35:31 +01:00
mark
f8ae07e536 Add gradient filter for carousel images 2022-12-05 08:34:57 +01:00
mark
b48d4c5c9d Add support for inner html code snippet 2022-12-03 14:38:46 +01:00
mark
4e4ea9d552 Fix typo 2022-12-03 08:24:33 +01:00
Mark Dumay
7ae605a78a Merge pull request #62 from markdumay/language
Language switching
2022-12-03 07:20:31 +01:00
Mark Dumay
7604fd8eb0 Merge pull request #61 from markdumay/dependabot/npm_and_yarn/postcss-cli-10.1.0
Bump postcss-cli from 10.0.0 to 10.1.0
2022-12-01 15:03:30 +01:00
dependabot[bot]
4dbd820f6a Bump postcss-cli from 10.0.0 to 10.1.0
Bumps [postcss-cli](https://github.com/postcss/postcss-cli) from 10.0.0 to 10.1.0.
- [Release notes](https://github.com/postcss/postcss-cli/releases)
- [Changelog](https://github.com/postcss/postcss-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss-cli/compare/10.0.0...10.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-01 13:16:23 +00:00
mark
9975795b94 Add Hugo badge 2022-11-27 10:14:24 +01:00
mark
82de138569 Update CDN script references 2022-11-27 09:58:44 +01:00
mark
0c1f4984dd Upgrade dependencies 2022-11-27 08:19:24 +01:00
Mark Dumay
91dbd725b9 Merge pull request #60 from markdumay/main
Synchronize language branch
2022-11-27 08:18:17 +01:00
mark
9aba69838a Bump minor version 2022-11-27 08:15:19 +01:00
mark
dd65f959da Update hugo dependency 2022-11-27 08:13:34 +01:00
mark
441a6de8e1 Bump minor version 2022-11-27 08:09:44 +01:00
mark
cdf5cf88f7 Fix linting issue 2022-11-27 08:09:00 +01:00
mark
27599f8cc4 Make search language aware 2022-11-27 07:42:15 +01:00
mark
37901579b8 Add debug build 2022-11-27 07:41:17 +01:00
mark
787fc7bfb8 Remove redundant config 2022-11-27 07:40:57 +01:00
mark
69400ecbd4 Translate description 2022-11-26 13:46:52 +01:00
mark
055b1c50b2 Add multilingual configuration 2022-11-26 13:26:07 +01:00
mark
9823ec410e Add i8n support for photo credits 2022-11-26 13:20:12 +01:00
mark
ae8181d889 Fix missing i8n support 2022-11-26 13:19:50 +01:00
mark
c1a8624422 Fix missing i8n support 2022-11-26 13:19:32 +01:00
mark
e0d90e5d98 Add i8n support for photo credits 2022-11-26 13:18:53 +01:00
mark
510af56cc0 Add language switcher 2022-11-26 13:18:28 +01:00
mark
c999e1c9e7 Adjust spacing 2022-11-26 13:18:07 +01:00
mark
766961b3a8 Adjust photo credits to support i8n 2022-11-26 13:16:20 +01:00
mark
36fe901504 Add Dutch sample content 2022-11-26 13:15:25 +01:00
mark
0317555d61 Support localized tags 2022-11-26 13:13:29 +01:00
mark
91aebdfc98 Fix missing i8n keyword 2022-11-26 13:12:46 +01:00
mark
933c9d7114 Add Dutch language strings 2022-11-24 06:00:43 +01:00
mark
1bcc11b9a8 Refine English language strings 2022-11-24 06:00:23 +01:00
mark
3063bc51ee Add language meta tag 2022-11-24 05:59:19 +01:00
mark
615b894d0b Simplify date partial 2022-11-24 05:58:44 +01:00
Mark Dumay
242a9662d9 Merge pull request #59 from markdumay/dependabot/npm_and_yarn/bootstrap-5.2.3
Bump bootstrap from 5.2.2 to 5.2.3
2022-11-23 19:57:47 +01:00
dependabot[bot]
c4d6f498f6 Bump bootstrap from 5.2.2 to 5.2.3
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 5.2.2 to 5.2.3.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v5.2.2...v5.2.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-23 13:11:35 +00:00
Mark Dumay
814d447d8c Merge pull request #58 from markdumay/dependabot/npm_and_yarn/eslint-8.28.0
Bump eslint from 8.27.0 to 8.28.0
2022-11-21 15:18:01 +01:00
dependabot[bot]
d5e0064a68 Bump eslint from 8.27.0 to 8.28.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.27.0 to 8.28.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.27.0...v8.28.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 13:59:35 +00:00
Mark Dumay
23a51fd1d8 Merge pull request #55 from markdumay/develop
Add npm badge
2022-11-16 06:51:16 +01:00
mark
686397a671 Add npm badge 2022-11-16 06:50:31 +01:00
Mark Dumay
a2e3f8625a Merge pull request #54 from markdumay/develop
Develop
2022-11-16 06:24:46 +01:00
mark
0b8dabe195 Update dependencies 2022-11-16 06:22:25 +01:00
mark
20accdb6b9 Fix indentation 2022-11-16 06:20:08 +01:00
Mark Dumay
22234b15b5 Merge pull request #53 from markdumay/main
Synchronize branch
2022-11-16 06:14:05 +01:00
Mark Dumay
33903c5df8 Merge pull request #52 from markdumay/image-test
Image handling
2022-11-16 06:13:19 +01:00
Mark Dumay
35902ed071 Merge pull request #51 from markdumay/main
Synchronize branch
2022-11-16 06:10:29 +01:00
Mark Dumay
1add0050b6 Merge pull request #50 from markdumay/dependabot/npm_and_yarn/stylelint-14.15.0
Bump stylelint from 14.14.1 to 14.15.0
2022-11-14 14:58:06 +01:00
dependabot[bot]
959c874630 Bump stylelint from 14.14.1 to 14.15.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.14.1 to 14.15.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/14.14.1...14.15.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-14 13:12:49 +00:00
mark
c15ac68a6f Bump package version 2022-11-14 09:35:22 +01:00
mark
f7e81d2ab9 Reuse partial 2022-11-14 08:55:53 +01:00
mark
1f539bf724 Strip query parameters from external images 2022-11-14 08:55:15 +01:00
Mark Dumay
2e9a26d84a Merge pull request #49 from markdumay/main
Synchronize branch
2022-11-14 05:43:32 +01:00
Mark Dumay
a36890d61d Configure dependabot version updates 2022-11-09 09:47:17 +01:00
182 changed files with 7150 additions and 1797 deletions

View File

@@ -1,3 +1,3 @@
assets/js/index.js assets/js/flexsearch.js
assets/js/vendor assets/js/vendor
node_modules node_modules

36
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,36 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Log file**
If applicable, add a copy of Hugo's log messages.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):**
- Host OS: [e.g. macOS Ventura 13.0]
- Node version: [e.g. node v18.10.0]
- Hugo version: [e.g. hugo v0.109.0-47b12b83e636224e5e601813ff3e6790c191e371+extended darwin/amd64 BuildDate=2022-12-23T10:38:11Z VendorInfo=gohugoio]
- Browser: [e.g. Google Chrome Version 108.0.5359.124 (Official Build) (arm64)]
**Additional context**
Add any other context about the problem here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

9
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,9 @@
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"

28
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,28 @@
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: [14.x, 16.x, 18.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'
- run: npm ci
- run: npm run build

View File

@@ -5,7 +5,9 @@
"MD024": false, "MD024": false,
"MD026": false, "MD026": false,
"MD033": false, "MD033": false,
"MD034": false "MD034": false,
"MD051": false,
"MD053": false
}, },
"ignores": ["node_modules", "CHANGELOG.md"] "ignores": ["node_modules", "CHANGELOG.md"]
} }

View File

@@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2022 Mark Dumay Copyright (c) 2023 Mark Dumay
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,12 +2,15 @@
<!-- Tagline --> <!-- Tagline -->
<p align="center"> <p align="center">
<b>A clean blog theme for your Hugo site based on Bootstrap 5</b> <b>A clean documentation and blog theme for your Hugo site based on Bootstrap 5</b>
<br /> <br />
</p> </p>
<!-- Badges --> <!-- Badges -->
<p align="center"> <p align="center">
<a href="https://gohugo.io" alt="Hugo website">
<img src="https://img.shields.io/badge/generator-hugo-brightgreen" />
</a>
<a href="https://app.netlify.com/sites/hinode-demo/deploys" alt="Netlify Status"> <a href="https://app.netlify.com/sites/hinode-demo/deploys" alt="Netlify Status">
<img src="https://img.shields.io/netlify/151e88a3-d161-4045-856d-778fea43fc2f" /> <img src="https://img.shields.io/netlify/151e88a3-d161-4045-856d-778fea43fc2f" />
</a> </a>
@@ -47,7 +50,7 @@
- [PageSpeed Insights][pagespeed] - [PageSpeed Insights][pagespeed]
- [Mozilla Observatory][observatory] - [Mozilla Observatory][observatory]
Hinode is a clean 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 uses [Node Package Manager][npm] to automate the build process and to keep track of dependencies. 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 uses [Node Package Manager][npm] to automate the build process and to keep track of dependencies.
Additional features include: Additional features include:
@@ -57,7 +60,7 @@ Additional features include:
- Code highlighting - Code highlighting
- Command prompt - Command prompt
- Color customization - Color customization
- i18n support - Language switcher
<!-- TODO: add tutorial deep-link <!-- TODO: add tutorial deep-link
Detailed background information is available on the author's [personal blog][blog]. Detailed background information is available on the author's [personal blog][blog].
@@ -73,7 +76,7 @@ Start a new Hinode project in three steps:
### 1. Create a new site ### 1. Create a new site
Hinode is available as a [child theme][repository_child], and a [main theme][repository]. The child theme uses [npm][npm] to link to the latest available version of the Hinode theme. As such, it is less applicable if you plan to customize a lot. Vice versa, the main theme allows for heavy customization, but is not synchronized with the latest available Hinode theme automatically. Hinode is available as a [child theme][repository_child], and a [main theme][repository]. The child theme uses [npm][npm] to link to the latest available version of Hinode. As such, it is less applicable if you plan to customize a lot. Vice versa, the main theme allows for heavy customization, but is not synchronized with the latest available Hinode theme automatically.
Not quite sure? Use the Hinode child theme. Not quite sure? Use the Hinode child theme.
@@ -107,7 +110,7 @@ The main site configuration is available in `./config/_default`. Some remarks:
- **Menu items** - `menus/menus.en.toml` contains language-specific items for the navigation bar and social media links for the home page's footer. - **Menu items** - `menus/menus.en.toml` contains language-specific items for the navigation bar and social media links for the home page's footer.
- **Content** - Ensure the `mainSections` in `config.toml` is synchronized with the `content` folder, default values are `["blog", "projects"]`. - **Content** - Ensure the `mainSections` in `config.toml` is synchronized with the `content` folder, default values are `["blog", "projects"]`.
- **Theme color** - Update `themeColor` and `themeOpacity` within the `[style]` section of `params.toml` to update the site's primary color and opacity. You can use the [WCAG Color Contrast Checker][contrast_checker] to validate the contrast ratio of your color to improve accessibility. - **Theme style** - Update `primary` and `themeOpacity` within the `[style]` section of `params.toml` to update the site's primary color and opacity. Bootstrap's other key colors can be changed too. You can use the [WCAG Color Contrast Checker][contrast_checker] to validate the contrast ratio of your color to improve accessibility. Additionally, set `themeFont` and `themeFontPath` to override the default font.
- **Comments** - Comments are powered by [utterances][utterances], a lightweight comments widget built on GitHub issues. Update the `repo` of the `[comments]` section of `params.toml`. - **Comments** - Comments are powered by [utterances][utterances], a lightweight comments widget built on GitHub issues. Update the `repo` of the `[comments]` section of `params.toml`.
- **Security policy** - The theme uses rather strict security policies by default. Be sure to include references to external sources in the header configuration to avoid broken links. The settings of the local development server are defined in `server.toml`. Similar settings are defined in the `netlify.toml` file provided in the repository's root when deploying to [Netlify][netlify]. - **Security policy** - The theme uses rather strict security policies by default. Be sure to include references to external sources in the header configuration to avoid broken links. The settings of the local development server are defined in `server.toml`. Similar settings are defined in the `netlify.toml` file provided in the repository's root when deploying to [Netlify][netlify].
@@ -124,7 +127,7 @@ The main site configuration is available in `./config/_default`. Some remarks:
## Credits ## Credits
The Hinode theme is inspired by the following themes: Hinode is inspired by the following themes:
- [Blist][blist] - a clean and fast blog theme for your Hugo site using Tailwind CSS. - [Blist][blist] - a clean and fast blog theme for your Hugo site using Tailwind CSS.
- [Doks][doks] - a Hugo theme for building secure, fast, and SEO-ready documentation websites, which you can easily update and customize. - [Doks][doks] - a Hugo theme for building secure, fast, and SEO-ready documentation websites, which you can easily update and customize.

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='{{ .accordion_icon_active_color }}'>
<path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/>
</svg>

After

Width:  |  Height:  |  Size: 264 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='{{ .accordion_icon_color }}'>
<path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/>
</svg>

After

Width:  |  Height:  |  Size: 257 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='{{ .btn_close_color }}'>
<path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/>
</svg>

After

Width:  |  Height:  |  Size: 305 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 320 512' fill='{{ .btn_toggle_color }}'>
<path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/>
</svg>

After

Width:  |  Height:  |  Size: 309 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='{{ .carousel_control_color }} '>
<path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/>
</svg>

After

Width:  |  Height:  |  Size: 240 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='{{ .carousel_control_color }}'>
<path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/>
</svg>

After

Width:  |  Height:  |  Size: 238 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
<path fill='none' stroke='{{ .form_check_input_checked_color }}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
</svg>

After

Width:  |  Height:  |  Size: 220 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
<path fill='none' stroke='{{ .form_check_input_indeterminate_color }}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/>
</svg>

After

Width:  |  Height:  |  Size: 220 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
<circle r='2' fill='{{ .form_check_input_checked_color }}'/>
</svg>

After

Width:  |  Height:  |  Size: 132 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='{{ .form_feedback_icon_invalid_color }}'>
<circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='{{ .form_feedback_icon_invalid_color }}' stroke='none'/>
</svg>

After

Width:  |  Height:  |  Size: 334 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'>
<path fill='{{ .form_feedback_icon_valid_color }}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/>
</svg>

After

Width:  |  Height:  |  Size: 229 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'>
<path fill='none' stroke='{{ .form_select_indicator_color }}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/>
</svg>

After

Width:  |  Height:  |  Size: 216 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
<circle r='3' fill='{{ .form_switch_color }}' />
</svg>

After

Width:  |  Height:  |  Size: 120 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
<circle r='3' fill='{{ .form_switch_checked_color }}'/>
</svg>

After

Width:  |  Height:  |  Size: 127 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
<circle r='3' fill='{{ .form_switch_focus_color }}'/>
</svg>

After

Width:  |  Height:  |  Size: 125 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'>
<path stroke="{{ .navbar_dark_color }}" stroke-opacity="0.55" stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/>
</svg>

After

Width:  |  Height:  |  Size: 226 B

View File

@@ -0,0 +1,3 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'>
<path stroke='{{ .navbar_light_icon_color }}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/>
</svg>

After

Width:  |  Height:  |  Size: 210 B

BIN
assets/img/boots.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

BIN
assets/img/sketch.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 KiB

View File

@@ -1 +0,0 @@
import 'bootstrap/dist/js/bootstrap.bundle.min.js'

38
assets/js/clipboard.js Normal file
View File

@@ -0,0 +1,38 @@
/*
Source:
- https://simplernerd.com/hugo-add-copy-to-clipboard-button/
*/
const svgCopy =
'<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16"><path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/><path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/></svg>'
const svgCheck =
'<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true"><path fill-rule="evenodd" fill="rgb(63, 185, 80)" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>'
const addCopyButtons = (clipboard) => {
// 1. Look for pre > code elements in the DOM
document.querySelectorAll('pre > code').forEach((codeBlock) => {
// 2. Create a button that will trigger a copy operation
const button = document.createElement('button')
button.className = 'clipboard-button'
button.type = 'button'
button.innerHTML = svgCopy
button.addEventListener('click', () => {
clipboard.writeText(codeBlock.innerText).then(
() => {
button.blur()
button.innerHTML = svgCheck
setTimeout(() => (button.innerHTML = svgCopy), 2000)
},
// eslint-disable-next-line n/handle-callback-err
(error) => (button.innerHTML = 'Error')
)
})
// 3. Append the button directly before the pre tag
const pre = codeBlock.parentNode
pre.parentNode.insertBefore(button, pre)
})
}
if (navigator && navigator.clipboard) {
addCopyButtons(navigator.clipboard)
}

161
assets/js/flexsearch.js Normal file
View File

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

View File

@@ -1,196 +0,0 @@
/*
Source:
- https://raw.githubusercontent.com/h-enk/doks/master/assets/js/index.js
*/
var suggestions = document.getElementById('suggestions');
var search = document.getElementById('search');
if (search !== null) {
document.addEventListener('keydown', inputFocus);
}
function inputFocus(e) {
if (e.ctrlKey && e.key === '/' ) {
e.preventDefault();
search.focus();
}
if (e.key === 'Escape' ) {
search.blur();
suggestions.classList.add('d-none');
}
}
document.addEventListener('click', function(event) {
var isClickInsideElement = suggestions.contains(event.target);
if (!isClickInsideElement) {
suggestions.classList.add('d-none');
}
});
/*
Source:
- https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3
*/
document.addEventListener('keydown',suggestionFocus);
function suggestionFocus(e) {
const suggestionsHidden = suggestions.classList.contains('d-none');
if (suggestionsHidden) return;
const focusableSuggestions= [...suggestions.querySelectorAll('a')];
if (focusableSuggestions.length === 0) return;
const index = focusableSuggestions.indexOf(document.activeElement);
if (e.key === "ArrowUp") {
e.preventDefault();
const nextIndex = index > 0 ? index - 1 : 0;
focusableSuggestions[nextIndex].focus();
}
else if (e.key === "ArrowDown") {
e.preventDefault();
const nextIndex= index + 1 < focusableSuggestions.length ? index + 1 : index;
focusableSuggestions[nextIndex].focus();
}
}
/*
Source:
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
- https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
*/
(function(){
var index = new FlexSearch.Document({
tokenize: "forward",
cache: 100,
document: {
id: 'id',
store: [
"href", "title", "description"
],
index: ["title", "description", "content"]
}
});
// https://discourse.gohugo.io/t/range-length-or-last-element/3803/2
{{ $list := (site.RegularPages) -}}
{{ $len := (len $list) -}}
index.add(
{{ range $index, $element := $list -}}
{
id: {{ $index }},
href: "{{ .RelPermalink }}",
title: {{ .Title | jsonify }},
{{ with .Description -}}
description: {{ . | jsonify }},
{{ else -}}
description: {{ .Summary | plainify | jsonify }},
{{ end -}}
content: {{ .Plain | jsonify }}
})
{{ if ne (add $index 1) $len -}}
.add(
{{ end -}}
{{ end -}}
;
search.addEventListener('input', show_results, true);
function show_results(){
const maxResult = 5;
var searchQuery = this.value;
var results = index.search(searchQuery, {limit: maxResult, enrich: true});
// flatten results since index.search() returns results for each indexed field
const flatResults = new Map(); // keyed by href to dedupe results
for (const result of results.flatMap(r => r.result)) {
if (flatResults.has(result.doc.href)) continue;
flatResults.set(result.doc.href, result.doc);
}
suggestions.innerHTML = "";
suggestions.classList.remove('d-none');
// inform user that no results were found
if (flatResults.size === 0 && searchQuery) {
const noResultsMessage = document.createElement('div')
noResultsMessage.innerHTML = `{{ T "ui_no_results" }} "<strong>${searchQuery}</strong>"`
noResultsMessage.classList.add("suggestion__no-results");
suggestions.appendChild(noResultsMessage);
return;
}
// construct a list of suggestions
for(const [href, doc] of flatResults) {
const entry = document.createElement('div');
suggestions.appendChild(entry);
const a = document.createElement('a');
a.href = href;
entry.appendChild(a);
const title = document.createElement('span');
title.textContent = doc.title;
title.classList.add("suggestion__title");
a.appendChild(title);
const description = document.createElement('span');
description.textContent = doc.description;
description.classList.add("suggestion__description");
a.appendChild(description);
suggestions.appendChild(entry);
if(suggestions.childElementCount == maxResult) break;
}
}
}());
/*
Source:
- https://simplernerd.com/hugo-add-copy-to-clipboard-button/
*/
const svgCopy =
'<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16"><path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/><path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/></svg>';
const svgCheck =
'<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true"><path fill-rule="evenodd" fill="rgb(63, 185, 80)" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>';
const addCopyButtons = (clipboard) => {
// 1. Look for pre > code elements in the DOM
document.querySelectorAll("pre > code").forEach((codeBlock) => {
// 2. Create a button that will trigger a copy operation
const button = document.createElement("button");
button.className = "clipboard-button";
button.type = "button";
button.innerHTML = svgCopy;
button.addEventListener("click", () => {
clipboard.writeText(codeBlock.innerText).then(
() => {
button.blur();
button.innerHTML = svgCheck;
setTimeout(() => (button.innerHTML = svgCopy), 2000);
},
(error) => (button.innerHTML = "Error")
);
});
// 3. Append the button directly before the pre tag
const pre = codeBlock.parentNode;
pre.parentNode.insertBefore(button, pre);
});
};
if (navigator && navigator.clipboard) {
addCopyButtons(navigator.clipboard);
}

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

@@ -0,0 +1,3 @@
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
// eslint-disable-next-line no-undef, no-unused-vars
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))

10
assets/js/toast.js Normal file
View File

@@ -0,0 +1,10 @@
// Bootstrap toast example: https://getbootstrap.com/docs/5.2/components/toasts/
const toastTrigger = document.getElementById('toastButton')
const toastLiveExample = document.getElementById('toastMessage')
if (toastTrigger) {
toastTrigger.addEventListener('click', () => {
// eslint-disable-next-line no-undef
const toast = new bootstrap.Toast(toastLiveExample)
toast.show()
})
}

4
assets/js/tooltip.js Normal file
View File

@@ -0,0 +1,4 @@
// Bootstrap tooltip example: https://getbootstrap.com/docs/5.2/components/tooltips/
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
// eslint-disable-next-line no-unused-vars, no-undef
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))

View File

@@ -1,11 +1,26 @@
// Define template variables // Define template variables
// TODO: optimize, see https://discourse.gohugo.io/t/initialize-sass-variables-from-hugo-templates/42053
// requires installation of dart-sass, no cross-platform installation available yet
$themeColor: {{ site.Params.style.themeColor | default "#007bff" }}; $themeColor: {{ site.Params.style.themeColor | default "#007bff" }};
$themeFont: {{ site.Params.style.themeFont | default "Inter" }};
// Import Bootstrap functions $primary: {{ site.Params.style.primary | default "#007bff" }};
@import "bootstrap/scss/functions"; $secondary: {{ site.Params.style.secondary | default "#6c757d" }};
$success: {{ site.Params.style.success | default "#198754" }};
$info: {{ site.Params.style.info | default "#0dcaf0" }};
$warning: {{ site.Params.style.warning | default "#ffc107" }};
$danger: {{ site.Params.style.danger | default "#dc3545" }};
$light: {{ site.Params.style.light | default "#f8f9fa" }};
$dark: {{ site.Params.style.dark | default "#212529" }};
$navbar-offset: {{ if site.Params.navigation.fixed }}{{ site.Params.navigation.offset | default "3em" }}{{ else }}0em{{ end }};
// Include default variable overrides // Include default variable overrides
@import "common/variables.scss"; @import "common/variables.scss";
@import "common/icons.scss";
// Import Bootstrap banner and functions
@import "bootstrap/scss/mixins/banner";
@include bsBanner("");
@import "bootstrap/scss/functions";
// Import Bootstrap configuration // Import Bootstrap configuration
@import "bootstrap/scss/variables"; @import "bootstrap/scss/variables";
@@ -53,22 +68,31 @@ $themeColor: {{ site.Params.style.themeColor | default "#007bff" }};
@import "bootstrap/scss/utilities/api"; @import "bootstrap/scss/utilities/api";
// Import Font Awesome // Import Font Awesome
// scss-docs-start awesome
@import "@fortawesome/fontawesome-free/scss/fontawesome"; @import "@fortawesome/fontawesome-free/scss/fontawesome";
@import "@fortawesome/fontawesome-free/scss/regular";
@import "@fortawesome/fontawesome-free/scss/solid"; @import "@fortawesome/fontawesome-free/scss/solid";
@import "@fortawesome/fontawesome-free/scss/brands"; @import "@fortawesome/fontawesome-free/scss/brands";
// scss-docs-end awesome
// Import theme styles // Import Hinode theme styles
@import "components/blockquote.scss"; @import "components/blockquote.scss";
@import "components/buttons.scss"; @import "components/buttons.scss";
@import "components/card.scss"; @import "components/card.scss";
@import "components/carousel.scss";
@import "components/clipboard.scss"; @import "components/clipboard.scss";
@import "components/command.scss"; @import "components/command.scss";
@import "components/comments.scss"; @import "components/comments.scss";
@import "components/navbar.scss"; @import "components/navbar.scss";
@import "components/img.scss"; @import "components/img.scss";
@import "components/popover.scss";
@import "components/search.scss"; @import "components/search.scss";
@import "components/sidebar.scss";
@import "components/syntax.scss"; @import "components/syntax.scss";
@import "components/toc.scss";
@import "components/vimeo.scss"; @import "components/vimeo.scss";
@import "common/styles.scss"; @import "common/styles.scss";
@import "layouts/reboot.scss"; @import "layouts/reboot.scss";
@import "layouts/type.scss"; @import "layouts/type.scss";
@import "common/export.scss";
@import "helpers/colored-links.scss";

View File

@@ -0,0 +1,22 @@
// stylelint-disable selector-pseudo-class-no-unknown
// scss-docs-start export
:hinode-theme {
--accordion-icon-active-color: #{$accordion-icon-active-color};
--accordion-icon-color: #{$accordion-icon-color};
--btn-close-color: #{$btn-close-color};
--btn-toggle-color: #{$btn-toggle-color};
--carousel-control-color: #{$carousel-control-color};
--form-check-input-checked-color: #{$form-check-input-checked-color};
--form-check-input-indeterminate-color: #{$form-check-input-indeterminate-color};
--form-feedback-icon-invalid-color: #{$form-feedback-icon-invalid-color};
--form-feedback-icon-valid-color: #{$form-feedback-icon-valid-color};
--form-select-indicator-color: #{$form-select-indicator-color};
--form-switch-checked-color: #{$form-switch-checked-color};
--form-switch-color: #{$form-switch-color};
--form-switch-focus-color: #{$form-switch-focus-color};
--navbar-dark-color: #{$navbar-dark-color};
--navbar-light-icon-color: rgba($body-color, 0.75); // TODO: See https://github.com/twbs/bootstrap/pull/37720
}
// scss-docs-end export

View File

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

View File

@@ -15,44 +15,6 @@ a:active {
min-height: 100vh; min-height: 100vh;
} }
// .tickmark li::marker {
// Table of contents sidebar content: "";
//
.toc {
grid-area: toc;
top: 5rem;
right: 0;
z-index: 2;
height: calc(100vh - 7rem);
overflow-y: auto;
}
.toc nav {
font-size: 0.875rem;
}
.toc nav ul {
padding-left: 0;
list-style: none;
}
.toc nav ul ul {
padding-left: 1rem;
margin-top: 0.25rem;
}
.toc nav li {
margin-bottom: 0.25rem;
}
.toc nav a {
color: inherit;
}
.toc nav a:not(:hover) {
text-decoration: none;
}
.toc nav a code {
font: inherit;
} }

View File

@@ -1,5 +1,4 @@
// Bootstrap variables overrides for theme // Bootstrap variables overrides for theme
$primary: $themeColor;
$enable-negative-margins: true; $enable-negative-margins: true;
// Font awesome variables overrides for theme // Font awesome variables overrides for theme
@@ -8,10 +7,19 @@ $fa-font-path: "../fonts";
// Remove the border from the focused navigation toggler // Remove the border from the focused navigation toggler
$navbar-toggler-focus-width: 0 !default; $navbar-toggler-focus-width: 0 !default;
$font-family-sans-serif: "Inter", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; // scss-docs-start font
$font-family-sans-serif: $themeFont, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
$headings-font-weight: 600 !default; $headings-font-weight: 600 !default;
$font-weight-lighter: lighter !default; $font-weight-lighter: lighter !default;
$font-weight-light: 200 !default; $font-weight-light: 200 !default;
$font-weight-normal: 300 !default; $font-weight-normal: 300 !default;
$font-weight-bold: 600 !default; $font-weight-bold: 600 !default;
$font-weight-bolder: bolder !default; $font-weight-bolder: bolder !default;
strong {
font-weight: 600 !important;
}
// scss-docs-end font
$black: #000 !default;
$btn-toggle-color: $black !default;

View File

@@ -31,12 +31,12 @@
opacity: 1; opacity: 1;
} }
.project-card { .card-emphasize {
transition: 0.3s transform cubic-bezier(0.155, 1.105, 0.295, 1.12), 0.3s box-shadow, 0.3s -webkit-transform cubic-bezier(0.155, 1.105, 0.295, 1.12); transition: 0.3s transform cubic-bezier(0.155, 1.105, 0.295, 1.12), 0.3s box-shadow, 0.3s -webkit-transform cubic-bezier(0.155, 1.105, 0.295, 1.12);
cursor: pointer; cursor: pointer;
} }
.project-card:hover { .card-emphasize:hover {
transform: scale(1.01); transform: scale(1.01);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06);
} }

View File

@@ -0,0 +1,8 @@
.gradient {
width: 100%;
height: 100%;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.3);
}

View File

@@ -8,3 +8,9 @@
width: 100%; width: 100%;
object-fit: cover; object-fit: cover;
} }
.card-img-h100 {
width: auto;
height: 100%;
object-fit: cover;
}

View File

@@ -0,0 +1,3 @@
.popover-header {
margin-top: 0;
}

View File

@@ -0,0 +1,54 @@
// scss-docs-start sidebar
.sidebar {
top: $navbar-offset;
}
.btn-toggle {
padding: 0.25rem 0.5rem;
font-weight: 600;
color: rgba(0, 0, 0, 0.65);
background-color: transparent;
&:hover,
&:focus {
color: rgba(0, 0, 0, 0.85);
background-color: tint-color($primary, 90%);
}
&::before {
width: 1.25em;
line-height: 0;
content: $btn-toggle;
transition: transform 0.35s ease;
transform-origin: 0.5em 50%;
}
}
// scss-docs-end sidebar
.btn-toggle[aria-expanded="true"] {
color: rgba(0, 0, 0, 0.85);
&::before {
transform: rotate(90deg);
}
}
.btn-toggle-nav a {
padding: 0.1875rem 0.5rem;
margin-top: 0.125rem;
margin-left: 1.25rem;
&:hover,
&:focus {
background-color: tint-color($primary, 90%);
}
&.active {
font-weight: bold;
}
}
.dropdown-toggle {
outline: 0;
}

View File

@@ -0,0 +1,44 @@
//
// Table of contents sidebar
//
// scss-docs-start toc
.toc {
grid-area: toc;
right: 0;
z-index: 2;
height: calc(100vh - 7rem);
overflow-y: auto;
top: $navbar-offset;
}
// scss-docs-end toc
.toc nav {
font-size: 0.875rem;
}
.toc nav ul {
padding-left: 0;
list-style: none;
}
.toc nav ul ul {
padding-left: 1rem;
margin-top: 0.25rem;
}
.toc nav li {
margin-bottom: 0.25rem;
}
.toc nav a {
color: inherit;
}
.toc nav a:not(:hover) {
text-decoration: none;
}
.toc nav a code {
font: inherit;
}

View File

@@ -0,0 +1,21 @@
// stylelint-disable function-name-case
// scss-docs-start colored-links
@each $color, $value in $theme-colors {
$contrast-color: color-contrast($value);
$color-rgb: to-rgb($value);
.link-bg-#{$color} {
color: $contrast-color !important; // stylelint-disable-line declaration-no-important
background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null); // stylelint-disable-line annotation-no-unknown
@if $link-shade-percentage != 0 {
&:hover,
&:focus {
color: if($contrast-color == $color-contrast-light, shade-color($contrast-color, $link-shade-percentage), tint-color($contrast-color, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important
}
}
}
}
// scss-docs-end colored-links

View File

@@ -3,24 +3,30 @@
// //
h1 { h1 {
margin-top: $spacer * 2.5; margin-top: $spacer * 2.5;
scroll-margin-top: $navbar-offset;
} }
h2 { h2 {
margin-top: $spacer * 2; margin-top: $spacer * 2;
scroll-margin-top: $navbar-offset;
} }
h3 { h3 {
margin-top: $spacer * 1.75; margin-top: $spacer * 1.75;
scroll-margin-top: $navbar-offset;
} }
h4 { h4 {
margin-top: $spacer * 1.5; margin-top: $spacer * 1.5;
scroll-margin-top: $navbar-offset;
} }
h5 { h5 {
margin-top: $spacer * 1.25; margin-top: $spacer * 1.25;
scroll-margin-top: $navbar-offset;
} }
h6 { h6 {
margin-top: $spacer; margin-top: $spacer;
scroll-margin-top: $navbar-offset;
} }

View File

@@ -1,25 +1,30 @@
# toml-docs-start main
title = "Hinode"
copyright = "Copyright © 2023 Mark Dumay."
paginate = 9
enableGitInfo = true
# toml-docs-end main
# additional settings
baseURL = "https://hinode-demo.markdumay.org/" baseURL = "https://hinode-demo.markdumay.org/"
canonifyURLs = false canonifyURLs = false
enableEmoji = true
title = "Hinode"
author = "Mark Dumay"
copyright = "Copyright © 2022 Mark Dumay."
paginate = 9
enableRobotsTXT = true enableRobotsTXT = true
languageCode = "en-us"
enableInlineShortcodes = true enableInlineShortcodes = true
# prevent build failures when using Hugo's Instagram shortcode due to deprecated Instagram API. # prevent build failures when using Hugo's Instagram shortcode due to deprecated Instagram API.
# See https://github.com/gohugoio/hugo/issues/7228#issuecomment-714490456 # See https://github.com/gohugoio/hugo/issues/7228#issuecomment-714490456
ignoreErrors = ["error-remote-getjson"] ignoreErrors = ["error-remote-getjson"]
enableEmoji = true
# Multilingual # toml-docs-start build
timeout = "60s"
# toml-docs-end build
# toml-docs-start language
languageCode = "en-us"
defaultContentLanguage = "en" defaultContentLanguage = "en"
disableLanguages = ["nl"] defaultContentLanguageInSubdir = true
# toml-docs-end language
mainSections = ["blog", "projects"]
[taxonomies] [taxonomies]
tag = 'tags' tag = 'tags'
@@ -69,6 +74,13 @@ mainSections = ["blog", "projects"]
[[module.mounts]] [[module.mounts]]
source = "static" source = "static"
target = "static" target = "static"
# toml-docs-start javascript
[[module.mounts]] [[module.mounts]]
source = "node_modules/flexsearch" source = "node_modules/bootstrap/dist/js"
target = "assets/js/vendor/bootstrap"
includeFiles = "*.bundle.js"
[[module.mounts]]
source = "node_modules/flexsearch/dist"
target = "assets/js/vendor/flexsearch" target = "assets/js/vendor/flexsearch"
includeFiles = "*.bundle.js"
# toml-docs-end javascript

View File

@@ -1,12 +1,35 @@
# toml-docs-start lang-main
[en] [en]
languageName = "English" languageName = "English"
contentDir = "content/en" contentDir = "content/en"
weight = 1 weight = 1
[en.params] # toml-docs-end lang-main
introTitle = "Welcome to Hinode!" # toml-docs-start lang-param
introCaption = "A clean blog theme for your Hugo site based on Bootstrap 5." [en.params.head]
introLink = "/about" tagline = "A Hugo Theme"
introLinkTitle = "About" [en.params.feature]
message = "Welcome to Hinode!"
tagline = "A clean documentation and blog theme for your Hugo site based on Bootstrap 5."
link = "/en/about"
caption = "About"
[en.params.footer]
license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank'>CC BY-NC-SA 4.0</a>)." license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank'>CC BY-NC-SA 4.0</a>)."
socialTitle = "Follow me" socialTitle = "Follow me"
socialCaption = "I work on everything coding and tweet developer memes" socialCaption = "I work on everything coding and tweet developer memes"
# toml-docs-end lang-param
[nl]
languageName = "Nederlands"
contentDir = "content/nl"
weight = 2
[nl.params.head]
tagline = "Een Hugo Thema"
[nl.params.feature]
message = "Welkom bij Hinode!"
tagline = "Een documentatie en blog thema voor Hugo gebaseerd op Bootstrap 5."
link = "/nl/over-mij"
caption = "Over mij"
[nl.params.footer]
license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank'>CC BY-NC-SA 4.0</a>)."
socialTitle = "Volg mij"
socialCaption = "Ik doe aan programmeren en tweet memes"

View File

@@ -3,20 +3,37 @@
url = "/about/" url = "/about/"
weight = 10 weight = 10
[[main]]
name = "Docs"
url = "/docs/"
weight = 20
[[main]] [[main]]
name = "Blog" name = "Blog"
url = "/blog/" url = "/blog/"
weight = 20 weight = 30
[[main]] [[main]]
name = "Projects" name = "Projects"
url = "/projects/" url = "/projects/"
weight = 30 weight = 40
[[main]]
name = "Sample project"
url = "/en/projects/sample-project/"
parent = "Projects"
weight = 1
[[main]]
name = "Another project"
url = "/en/projects/another-project/"
parent = "Projects"
weight = 2
[[main]] [[main]]
name = "Tags" name = "Tags"
url = "/tags/" url = "/tags/"
weight = 40 weight = 50
[[social]] [[social]]
name = "LinkedIn" name = "LinkedIn"
@@ -35,3 +52,27 @@
pre = "<i class=\"fab fa-medium fa-2x\"></i>" pre = "<i class=\"fab fa-medium fa-2x\"></i>"
url = "https://medium.com/" url = "https://medium.com/"
weight = 30 weight = 30
# toml-docs-start sample-navigation
[[sample]]
name = "Blog"
url = "/blog/"
weight = 10
[[sample]]
name = "Projects"
url = "/projects/"
weight = 20
[[sample]]
name = "Sample project"
url = "/en/projects/sample-project/"
parent = "Projects"
weight = 1
[[sample]]
name = "Another project"
url = "/en/projects/another-project/"
parent = "Projects"
weight = 2
# toml-docs-end sample-navigation

View File

@@ -0,0 +1,37 @@
[[main]]
name = "Over mij"
url = "/over-mij/"
weight = 10
[[main]]
name = "Blog"
url = "/blog/"
weight = 20
[[main]]
name = "Projecten"
url = "/projecten/"
weight = 30
[[main]]
name = "Tags"
url = "/tags/"
weight = 40
[[social]]
name = "LinkedIn"
pre = "<i class=\"fab fa-linkedin fa-2x\"></i>"
url = "https://linkedin.com/"
weight = 10
[[social]]
name = "GitHub"
pre = "<i class=\"fab fa-github fa-2x\"></i>"
url = "https://github.com/"
weight = 20
[[social]]
name = "Medium"
pre = "<i class=\"fab fa-medium fa-2x\"></i>"
url = "https://medium.com/"
weight = 30

View File

@@ -1,56 +1,108 @@
## Homepage # toml-docs-start main
title = "Hinode" [main]
titleSeparator = "-" separator = "-"
titleAddition = "Clean Blog Theme" description = "Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5."
description = "Hinode is a clean blog theme for your Hugo site based on Bootstrap 5." # toml-docs-end main
## Open Graph # toml-docs-start docs
images = ["logo.png"] [docs]
ogLocale = "en_US" version = "0.8"
domainTLD = "hinode-demo.markdumay.org" # toml-docs-end docs
## Twitter Cards # toml-docs-start home
# twitterSite = "@gethinode" [home]
# twitterCreator = "@markdumay" sections = ["blog", "projects"]
featurePhoto = "/img/sunrise.jpg" # source: https://unsplash.com/photos/ZX6BPboJrYk
fullCover = false
# toml-docs-end home
## JSON-LD # toml-docs-start navigation
schemaType = "Organization" [navigation]
schemaName = "Hinode" logo = "/img/logo_embedded.svg"
schemaAuthor = "Mark Dumay" color = "white"
schemaAuthorTwitter = "https://twitter.com/markdumay" style = "light"
schemaAuthorLinkedIn = "https://www.linkedin.com/in/markdumay/" fixed = true
schemaAuthorGitHub = "https://github.com/markdumay" offset = "3em"
schemaLocale = "en-US" search = true
schemaLogo = "img/logo512x512.png" breadcrumb = false
schemaLogoWidth = 512 toc = true
schemaLogoHeight = 512 sidebar = true
schemaImage = "img/logo1280x640.png" # toml-docs-end navigation
schemaImageWidth = 1280
schemaImageHeight = 640
# schemaTwitter = "https://twitter.com/gethinode"
# schemaLinkedIn = ""
schemaGitHub = "https://github.com/markdumay/hugo-theme-hinode"
schemaSection = "blog"
# toml-docs-start list
[list]
[blog]
title = "Blog"
sort = "date"
reverse = false
cols = 3
color = ""
padding = "0"
header = "full"
footer = "none"
orientation = "stacked"
style = "border-0"
homepage = 3
[projects]
title = "Projects"
sort = "title"
reverse = false
cols = 1
color = ""
padding = "3"
header = "none"
footer = "tags"
orientation = "none"
style = "border-1 card-emphasize"
homepage = 3
# toml-docs-end list
[favicon] [favicon]
logo = "img/favicon.png" logo = "img/favicon.png"
sizes = [16, 32, 48] sizes = [16, 32, 48]
[search] # toml-docs-start theme-colors
enabled = true
[toc]
enabled = true
[style] [style]
themeColor = "#D43900" #00b0f0 primary = "#D43900"
secondary = "#6c757d"
success = "#198754"
info = "#0dcaf0"
warning = "#ffc107"
danger = "#dc3545"
light = "#f8f9fa"
dark = "#212529"
# toml-docs-end theme-colors
themeOpacity = "10" themeOpacity = "10"
# toml-docs-start font
themeFont = "Inter"
themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap"
# toml-docs-end font
[main] [schema]
featurePhoto = "/img/sunrise.jpg" # source: https://unsplash.com/photos/ZX6BPboJrYk type = "Organization"
logo = "/img/logo_embedded.svg" name = "Hinode"
locale = "en-US"
# twitter = "https://twitter.com/gethinode"
# linkedIn = ""
github = "https://github.com/markdumay/hugo-theme-hinode"
section = "blog"
[author]
name = "Mark Dumay"
twitter = "https://twitter.com/markdumay"
linkedin = "https://www.linkedin.com/in/markdumay/"
github = "https://github.com/markdumay"
[logo]
url = "img/logo512x512.png"
width = 512
height = 512
[image]
url = "img/logo1280x640.png"
width = 1280
height = 640
[opengraph]
images = ["logo.png"]
locale = "en_US"
[comments] [comments]
enabled = false enabled = false
@@ -60,3 +112,70 @@ schemaSection = "blog"
# By default, light and dark mode correspond to github-light and github-dark, respectively. # By default, light and dark mode correspond to github-light and github-dark, respectively.
# Optional values: github-light, github-dark, preferred-color-scheme, github-dark-orange, icy-dark, dark-blue, photon-dark. # Optional values: github-light, github-dark, preferred-color-scheme, github-dark-orange, icy-dark, dark-blue, photon-dark.
#theme = "" #theme = ""
[links]
blist = "https://github.com/apvarun/blist-hugo-theme"
bootstrap = "https://getbootstrap.com"
bs_badge_heading = "https://getbootstrap.com/docs/5.2/components/badge/#headings"
bs_breakpoints = "https://getbootstrap.com/docs/5.3/layout/breakpoints"
bs_grid = "https://getbootstrap.com/docs/5.3/layout/grid"
bs_offcanvas = "https://getbootstrap.com/docs/5.3/components/offcanvas"
bs_navbar_placement = "https://getbootstrap.com/docs/5.3/components/navbar/#placement"
bs_tables = "https://getbootstrap.com/docs/5.3/content/tables"
cc_by_nc_4_0 = "https://creativecommons.org/licenses/by-nc/4.0/"
commit_message = "https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html"
contrast_checker = "https://accessibleweb.com/color-contrast-checker/"
css_codeguide = "https://codeguide.co/#css"
doks = "https://github.com/h-enk/doks"
eslint = "https://eslint.org"
flexsearch = "https://github.com/nextapps-de/flexsearch"
fontawesome = "https://fontawesome.com"
fa_icons = "https://fontawesome.com/icons"
fa_styling = "https://fontawesome.com/docs/web/style/styling"
fa_animation = "https://fontawesome.com/docs/web/style/animate"
git_download = "https://git-scm.com"
github_pr = "https://help.github.com/articles/about-pull-requests/"
github_rebase = "https://help.github.com/articles/about-git-rebase/"
google_fonts = "https://fonts.google.com"
html_codeguide = "https://codeguide.co/#html"
hugo = "https://gohugo.io"
hugo_config = "https://gohugo.io/getting-started/configuration/#all-configuration-settings"
hugo_config_dir = "https://gohugo.io/getting-started/configuration/#configuration-directory"
hugo_content = "https://gohugo.io/content-management/formats"
hugo_chroma = "https://gohugo.io/content-management/syntax-highlighting/#list-of-chroma-highlighting-languages"
hugo_fingerprint = "https://gohugo.io/hugo-pipes/fingerprint"
hugo_frontmatter = "https://gohugo.io/content-management/front-matter"
hugo_i18n = "https://gohugo.io/functions/i18n"
hugo_lang = "https://gohugo.io/content-management/multilingual"
hugo_lang_config = "https://gohugo.io/content-management/multilingual/#configure-languages"
hugo_menus = "https://gohugo.io/content-management/menus/"
hugo_imaging = "https://gohugo.io/content-management/image-processing/#imaging-configuration"
hugo_ordering = "https://gohugo.io/templates/lists/#order-content"
hugo_templates = "https://gohugo.io/templates/introduction/"
hugo_toc = "https://gohugo.io/content-management/toc"
issue_tracker = "https://github.com/markdumay/hugo-theme-hinode/issues"
license = "https://github.com/markdumay/hugo-theme-hinode/blob/main/LICENSE"
markdown_emoji = "https://gist.github.com/rxaviers/7360908"
markdown_md013 = "https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md013---line-length"
markdown_md024 = "https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md024---multiple-headings-with-the-same-content"
markdown_md026 = "https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md026---trailing-punctuation-in-heading"
markdown_md033 = "https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md033---inline-html"
markdown_md034 = "https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md034---bare-url-used"
markdown_md051 = "https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md051---link-fragments-should-be-valid"
markdown_md053 = "https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md053---link-and-image-reference-definitions-should-be-needed"
markdown_rules = "https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md"
markdownlint = "https://github.com/DavidAnson/markdownlint-cli2"
mozilla_image = "https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images"
netlify = "https://www.netlify.com"
nodejs = "https://nodejs.org"
npm = "https://www.npmjs.com"
observatory = "https://observatory.mozilla.org/analyze/hinode-demo.markdumay.org"
package_npm = "https://www.npmjs.com/package/@markdumay/hugo-theme-hinode"
pagespeed = "https://pagespeed.web.dev/report?url=https%3A%2F%2Fhinode-demo.markdumay.org%2F"
repository = "https://github.com/markdumay/hugo-theme-hinode"
repository_child = "https://github.com/markdumay/hugo-theme-hinode-child.git"
repository_owner = "https://github.com/markdumay/"
semver = "https://semver.org"
stylelint = "https://stylelint.io"
utterances = "https://utteranc.es"
wcag_contrast = "https://www.w3.org/TR/WCAG20/#visual-audio-contrast"

View File

@@ -1,3 +1,4 @@
# toml-docs-start server-config
[[headers]] [[headers]]
for = '/**' for = '/**'
[headers.values] [headers.values]
@@ -7,16 +8,14 @@ for = '/**'
Content-Security-Policy = """\ Content-Security-Policy = """\
default-src 'self'; \ default-src 'self'; \
script-src 'self' \ script-src 'self' \
https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js \
https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js \
https://utteranc.es/client.js; \ https://utteranc.es/client.js; \
style-src 'self' localhost:1313 https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \ style-src 'self' https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \
object-src 'none'; \ object-src 'none'; \
base-uri 'self'; \ base-uri 'self'; \
connect-src 'self' localhost:1313 ws://localhost:1313/livereload; \ connect-src 'self'; \
font-src 'self' https://fonts.gstatic.com; \ font-src 'self' https://fonts.gstatic.com; \
frame-src 'self' localhost:1313 https://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com; \ frame-src 'self' https://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com; \
img-src 'self' https: data:; \ img-src 'self' https://i.vimeocdn.com https://i.ytimg.com; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self' \ media-src 'self' \
""" """
@@ -35,3 +34,4 @@ for = '/**'
""" """
Cache-Control = "public, max-age=31536000" Cache-Control = "public, max-age=31536000"
Access-Control-Allow-Origin = "*" Access-Control-Allow-Origin = "*"
# toml-docs-end server-config

View File

@@ -1,3 +1,4 @@
--- ---
author: "Hugo Authors" author: Mark Dumay
title: A Clean Theme for Hugo
--- ---

View File

@@ -1,17 +1,15 @@
--- ---
title: "About" title: About
description: "A clean blog theme for your Hugo site based on Bootstrap 5." description: Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5.
date: "2022-04-11" date: 2022-04-11
updated: 2023-01-14
showComments: false showComments: false
--- ---
<p class="text-center"><img src="/img/logo_embedded.svg" class="img-fluid w-50" alt="Logo"></p> <p class="text-center"><img src="/img/logo_embedded.svg" class="img-fluid w-50" alt="Logo"></p>
<center>Hinode is a clean blog theme for Hugo, an open-source static site generator.</center> <section class="section section-sm mt-5 mb-5">
<section class="section section-sm mt-5">
<div class="container-fluid"> <div class="container-fluid">
<div class="row justify-content-center text-center">
<div class="row justify-content-center text-center"> <div class="row justify-content-center text-center">
<div class="col-lg-4"> <div class="col-lg-4">
<i class="fa-brands fa-bootstrap fa-2xl"></i> <i class="fa-brands fa-bootstrap fa-2xl"></i>
@@ -34,15 +32,11 @@ showComments: false
Additional features include: Additional features include:
* Comments * Support for multiple languages
* Social links * Reusable Bootstrap components through configurable shortcodes and partials
* Blog pagination * Embedded comments through light-weight integration with GitHub via [utteranc.es]({{< param "links.utterances" >}})
* Scrollspy * Integrated sidebar navigation for content-heavy sections, such as documentation pages
* Code highlighting * Reponsive image handling for multiple screen sizes and resolutions
* Color customization * Optimized search results, scoring 100 points for SEO on [PageSpeed Insights]({{< param "links.pagespeed" >}})
* i18n support * Secure by default, scoring A+ on [Mozilla Observatory test]({{< param "links.observatory" >}})
{.tickmark}
The Hinode theme is inspired by the following themes:
* [Blist](https://github.com/apvarun/blist-hugo-theme) - a clean and fast blog theme for your Hugo site using Tailwind CSS.
* [Doks](https://github.com/h-enk/doks) - a Hugo theme for building secure, fast, and SEO-ready documentation websites, which you can easily update and customize.

View File

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

View File

@@ -0,0 +1,13 @@
---
author: Mark Dumay
title: Javascript bundling
date: 2023-01-23
description:
status: draft
tags: ["code"]
thumbnail: img/notepad.jpg
photoCredits: <a href="https://unsplash.com/@frederickjmedina">Frederick Medina</a>
photoSource: <a href="https://unsplash.com/photos/PdfRE-xB--s">Unsplash</a>
---
<!-- https://blog.wesleyac.com/posts/why-not-javascript-cdn -->

View File

@@ -2,10 +2,11 @@
author: "Mark Dumay" author: "Mark Dumay"
title: "Code Highlighting" title: "Code Highlighting"
date: 2022-04-16 date: 2022-04-16
description: "Examples on how to enable code highlighting" description: "Examples on how to enable code highlighting."
tags: ["code"] tags: ["code"]
thumbnail: img/notepad.jpg thumbnail: img/notepad.jpg
credits: Photo by <a href="https://unsplash.com/@frederickjmedina">Frederick Medina</a> on <a href="https://unsplash.com/photos/PdfRE-xB--s">Unsplash</a> photoCredits: <a href="https://unsplash.com/@frederickjmedina">Frederick Medina</a>
photoSource: <a href="https://unsplash.com/photos/PdfRE-xB--s">Unsplash</a>
--- ---
## Code Fencing ## Code Fencing
@@ -29,9 +30,9 @@ Use code fencing to highlight the syntax of a specific language.
</div> </div>
``` ```
## Highlight Partial ## Highlight Shortcode
Use the `highlight` partial to customize the layout of a specific code block. Use the `highlight` shortcode to customize the layout of a specific code block.
{{< highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" >}} {{< highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" >}}
// GetTitleFunc returns a func that can be used to transform a string to // GetTitleFunc returns a func that can be used to transform a string to
@@ -55,129 +56,3 @@ func GetTitleFunc(style string) func(s string) string {
} }
} }
{{< / highlight >}} {{< / highlight >}}
## Command Prompt Shortcode
The `command` shortcode generates terminal output for either `bash`, `powershell`, or `sql` shell languages.
### Bash (default shell)
Use the `command` shortcode to generate a block with a default bash command prompt.
```html
{{%/* command */%}}
export MY_VAR=123
{{%/* /command */%}}
```
The result looks like this:
{{% command %}}
export MY_VAR=123
{{% /command %}}
Specify `user` and `host` to add the user context to the prompt. In addition, use `(out)` to specify an output line and use `\` to denote a line continuation.
```html
{{%/* command user="user" host="localhost" */%}}
export MY_VAR=123
echo "hello"
(out)hello
echo one \
two \
three
(out)one two three
echo "goodbye"
(out)goodbye
{{%/* /command */%}}
```
The result looks like this:
{{% command user="user" host="localhost" %}}
export MY_VAR=123
echo "hello"
(out)hello
echo one \
two \
three
(out)one two three
echo "goodbye"
(out)goodbye
{{% /command %}}
### PowerShell
Set the `shell` argument to `powershell` to generate a PowerShell terminal. Override the `prompt` to add a directory if needed. Use the backtick `` ` `` symbol to denote a line continuation.
```html
{{%/* command prompt="PS C:\Users\User>" shell="powershell" */%}}
Write-Host `
'Hello' `
'from' `
'PowerShell!'
(out)Hello from PowerShell!
Write-Host 'Goodbye from PowerShell!'
(out)Goodbye from PowerShell!
{{%/* /command */%}}
```
The result looks like this:
{{% command prompt="PS C:\Users\User>" shell="powershell" %}}
Write-Host `
'Hello' `
'from' `
'PowerShell!'
(out)Hello from PowerShell!
Write-Host 'Goodbye from PowerShell!'
(out)Goodbye from PowerShell!
{{% /command %}}
### SQL
Set the `shell` argument to `sql` to generate a SQL terminal. Use the `(con)` suffix to denote a line continuation.
```html
{{%/* command prompt="mysql>" shell="sql" */%}}
set @my_var = 'foo';
set @my_other_var = 'bar';
CREATE TABLE people ((con)
first_name VARCHAR(30) NOT NULL,(con)
last_name VARCHAR(30) NOT NULL(con)
);
(out)Query OK, 0 rows affected (0.09 sec)
insert into people(con)
values ('John', 'Doe');
(out)Query OK, 1 row affected (0.02 sec)
select *(con)
from people(con)
order by last_name;
(out)+------------+-----------+
(out)| first_name | last_name |
(out)+------------+-----------+
(out)| John | Doe |
(out)+------------+-----------+
(out)1 row in set (0.00 sec)
{{%/* /command */%}}
```
The result looks like this:
{{% command prompt="mysql>" shell="sql" %}}
set @my_var = 'foo';
set @my_other_var = 'bar';
CREATE TABLE people ((con)
first_name VARCHAR(30) NOT NULL,(con)
last_name VARCHAR(30) NOT NULL(con)
);
(out)Query OK, 0 rows affected (0.09 sec)
insert into people(con)
values ('John', 'Doe');
(out)Query OK, 1 row affected (0.02 sec)
select *(con)
from people(con)
order by last_name;
(out)+------------+-----------+
(out)| first_name | last_name |
(out)+------------+-----------+
(out)| John | Doe |
(out)+------------+-----------+
(out)1 row in set (0.00 sec)
{{% /command %}}

View File

@@ -2,11 +2,12 @@
author: "Hugo Authors" author: "Hugo Authors"
title: "Emoji Support" title: "Emoji Support"
date: 2021-07-15 date: 2021-07-15
description: "Guide to emoji usage in Hugo" description: "Guide to emoji usage in Hugo."
tags: ["emoji"] tags: ["emoji"]
# thumbnail: img/dunes.jpg # thumbnail: img/dunes.jpg
thumbnail: https://picsum.photos/id/184/4288/2848.jpg thumbnail: https://picsum.photos/id/184/4288/2848.jpg
credits: Photo by <a href="https://unsplash.com/@timdegroot">Tim de Groot</a> on <a href="https://unsplash.com/photos/yNGQ830uFB4">Unsplash</a> photoCredits: <a href="https://unsplash.com/@timdegroot">Tim de Groot</a>
photoSource: <a href="https://unsplash.com/photos/yNGQ830uFB4">Unsplash</a>
--- ---
Emoji can be enabled in a Hugo project in a number of ways. Emoji can be enabled in a Hugo project in a number of ways.

View File

@@ -1,11 +1,12 @@
--- ---
author: "Hugo Authors" author: Hugo Authors
title: "Markdown Syntax Guide" title: Markdown Syntax Guide
description: "Sample article showcasing basic Markdown syntax and formatting for HTML elements." description: Use Markdown syntax and basic HTML elements to style your Hugo content files.
tags: ["markdown", "css", "html"] tags: ["markdown", "css", "html"]
date: 2022-01-14 date: 2022-01-14
thumbnail: img/phone.jpg # https://picsum.photos/id/160/3200/2119 thumbnail: img/phone.jpg # https://picsum.photos/id/160/3200/2119
credits: Photo by <a href="https://unsplash.com/@thomweerd">Thom</a> on <a href="https://unsplash.com/photos/Zdcq3iKly6g">Unsplash</a> photoCredits: <a href="https://unsplash.com/@thomweerd">Thom</a>
photoSource: <a href="https://unsplash.com/photos/Zdcq3iKly6g">Unsplash</a>
--- ---
This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme. This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.
@@ -87,7 +88,7 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8">
<title>Example HTML5 Document</title> <title>Example HTML5 Document</title>
</head> </head>
<body> <body>

View File

@@ -1,40 +0,0 @@
---
author: "Hugo Authors"
title: "Placeholder Text"
date: 2021-07-13
description: "Lorem Ipsum Dolor Si Amet"
tags: ["markdown", "text"]
thumbnail: img/city.jpg # https://picsum.photos/id/1067/5760/3840
credits: Photo by <a href="https://unsplash.com/@kevinjyoung">Kevin Young</a> on <a href="https://unsplash.com/photos/-icmOdYWXuQ">Unsplash</a>
---
Lorem est tota propiore conpellat pectoribus de pectora summo. <!--more-->Redit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.
{{< image src="img/flowers.jpg" ratio="21x9" caption="Figure caption" class="rounded">}}
1. Exierant elisi ambit vivere dedere
2. Duce pollice
3. Eris modo
4. Spargitque ferrea quos palude
Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.
1. Comas hunc haec pietate fetum procerum dixit
2. Post torum vates letum Tiresia
3. Flumen querellas
4. Arcanaque montibus omnes
5. Quidem et
## Vagus elidunt
<svg xmlns="http://www.w3.org/2000/svg" overflow="visible" viewBox="0 0 496 373" height="373" width="496"><g fill="none"><path stroke="#000" stroke-width=".75" d="M.599 372.348L495.263 1.206M.312.633l494.95 370.853M.312 372.633L247.643.92M248.502.92l246.76 370.566M330.828 123.869V1.134M330.396 1.134L165.104 124.515"></path><path stroke="#ED1C24" stroke-width=".75" d="M275.73 41.616h166.224v249.05H275.73zM54.478 41.616h166.225v249.052H54.478z"></path><path stroke="#000" stroke-width=".75" d="M.479.375h495v372h-495zM247.979.875v372"></path><ellipse cx="498.729" cy="177.625" rx=".75" ry="1.25"></ellipse><ellipse cx="247.229" cy="377.375" rx=".75" ry="1.25"></ellipse></g></svg>
[The Van de Graaf Canon](https://en.wikipedia.org/wiki/Canons_of_page_construction#Van_de_Graaf_canon)
## Mane refeci capiebant unda mulcebat
Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.
Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.
Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, _oculos nomen_ non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides **parte**.

View File

@@ -2,10 +2,11 @@
author: "Hugo Authors" author: "Hugo Authors"
title: "Rich Content" title: "Rich Content"
date: 2021-07-13 date: 2021-07-13
description: "A brief description of Hugo Shortcodes" description: "A brief description of Hugo Shortcodes."
tags: ["shortcodes", "privacy"] tags: ["shortcode", "privacy"]
thumbnail: img/flowers.jpg # https://picsum.photos/id/106/2592/1728 thumbnail: img/flowers.jpg # https://picsum.photos/id/106/2592/1728
credits: Photo by <a href="https://unsplash.com/@flutterhappy">Arvee Marie</a> on <a href="https://unsplash.com/photos/YnfGtpt2gf4">Unsplash</a> photoCredits: <a href="https://unsplash.com/@flutterhappy">Arvee Marie</a>
photoSource: <a href="https://unsplash.com/photos/YnfGtpt2gf4">Unsplash</a>
--- ---
Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugos-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds. Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugos-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.

View File

@@ -0,0 +1,26 @@
---
title: Credits
description: Hinode is fully open source and uses several open-source frameworks and libraries.
date: "2023-01-14"
group: about
layout: docs
---
## Team
Hinode is maintained by [Mark Dumay]({{< param "links.repository_owner" >}}) and several contributors as an open-source repository on GitHub. You are more than welcome to contribute. Get involved in the development by [opening an issue]({{< param "links.issue_tracker" >}}) or submitting a pull request. Read our [contributing guidelines]({{< ref "contribute" >}}) for information on how we develop.
## Core components
Hinode is based on the following core components:
- [Hugo]({{< param "links.hugo" >}}) is a fast and modern static site generator written in Go. It is a so-called static site generator, meaning that the website is created when you update its content. This is a different approach to systems that dynamically build a page upon request.
- [Bootstrap]({{< param "links.bootstrap" >}}) is a popular, open-source web development framework. Using a mobile-first approach, it provides several functions and components to simplify the creation of responsive websites.
- [npm]({{< param "links.npm" >}}) is a software registry that enables the sharing and reuse of both open-source and private software packages. By taking advantage of its version management, software dependencies are easily tracked and updated.
## Themes
Hinode is inspired by the following themes:
- [Blist]({{< param "links.blist" >}}) is a clean and fast blog theme for your Hugo site using Tailwind CSS.
- [Doks]({{< param "links.doks" >}}) is a Hugo theme for building secure, fast, and SEO-ready documentation websites, which you can easily update and customize.

View File

@@ -0,0 +1,15 @@
---
title: License
description: Hinode's open-source license for the codebase and documentation.
date: "2023-01-14"
group: about
layout: docs
---
## Codebase
The codebase of Hinode is open source under the conditions of the [MIT license]({{< param "links.license" >}}) and is copyright &copy; 2023 by Mark Dumay. In short, the MIT license allows you to use the Hinode codebase for both personal and commercial use, as long as you include the original license and copyright notice. Licensed works, modifications, and larger works may be distributed under different terms and without source code. No liability or warranty is given.
## Documentation
The documentation of Hinode is licensed under the Creative Commons ([CC BY-NC 4.0)]({{< param "links.cc_by_nc_4_0" >}}) license. This includes all files within the repository's `/content` folder and its children, as well as the "README" in the repository root. The license allows you to share and adapt the materials, as long as you give appropriate credit and do not use the materials for commercial purposes. No warranties are given.

View File

@@ -0,0 +1,50 @@
---
author: "Mark Dumay"
title: "Accordion"
date: 2023-01-27
description: "Use the accordion shortcode to show a group of vertically collapsing and expanding items."
group: components
layout: docs
---
## Overview
Use the `accordion` shortcode to show a group of vertically collapsing and expanding items. Add `accordion-item` inner elements for each accordion item.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| class | No | Optional class attribute of the accordion element, e.g. “w-50”. |
{.table}
Add an inner `accordion-item` element for each item of the accordion. The `accordion-item` element supports the following arguments:
| Argument | Required | Description |
|-----------|----------|-------------|
| header | Yes | Required header of the accordion element. |
| class | No | Optional class attribute of the inner accordion element, e.g. “show”. |
{.table}
## Example
As an example, the following shortcode displays an accordion with three elements, of which the first element is expanded.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* accordion */>}}
{{</* accordion-item header="Accordion Item #1" class="show" */>}}
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.
{{</* /accordion-item */>}}
{{</* accordion-item header="Accordion Item #2" */>}}
This is the second item's accordion body. It too supports HTML content.
{{</* /accordion-item */>}}
{{</* accordion-item header="Accordion Item #3" */>}}
This is the third item's accordion body.
{{</* /accordion-item */>}}
{{</* /accordion */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,34 @@
---
author: "Mark Dumay"
title: "Alert"
date: 2023-01-27
description: "Use the alert shortcode to display a contextual feedback message."
group: components
layout: docs
---
## Overview
Use the `alert` shortcode to display a contextual feedback message. The inner content is used as alert text.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| color | No | Optional theme color of the alert, either "primary" (default), "secondary", "success", "danger", "warning", "info", "light", "dark", "white" or "black". |
| dismissible | No | Optional flag to indicate the alert is dismissible, defaults to false. |
{.table}
## Example
As an example, the following shortcode displays a simple alert.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* alert color="danger" */>}}
A simple danger alert—check it out!
{{</* /alert */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,29 @@
---
author: "Mark Dumay"
title: "Badge"
date: 2023-01-25
description: "Use the badge to enrich headings and buttons."
group: components
layout: docs
---
## Overview
Badges can be added to headings and buttons. The badge for a button is part of a [custom shortcode]({{< ref "button" >}} "custom shortcode"). The example below illustrates the HTML code for a heading.
## Arguments
The shortcode requires no arguments.
## Example
Use HTML code to display a badge for a heading. See the Bootstrap [documentation]({{< param "links.bs_badge_heading" >}}) for more options. The following example displays a badge for a heading of size four.
{{< example >}}
<h1>Example heading of size one <span class="badge bg-secondary">New</span></h1>
<h2>Example heading of size two <span class="badge bg-secondary">New</span></h2>
<h3>Example heading of size three <span class="badge bg-secondary">New</span></h3>
<h4>Example heading of size four <span class="badge bg-secondary">New</span></h4>
<h5>Example heading of size five <span class="badge bg-secondary">New</span></h5>
<h6>Example heading of size six <span class="badge bg-secondary">New</span></h6>
{{< /example >}}

View File

@@ -0,0 +1,31 @@
---
author: "Mark Dumay"
title: "Breadcrumb"
date: 2023-01-27
description: "Use the breadcrumb shortcode to display the current pages location within the site's navigational hierarchy."
group: components
layout: docs
---
## Overview
Use the `breadcrumb` shortcode to display the current pages location within the site's navigational hierarchy.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| path | No | Optional path of the page, defaults to current page.
{.table}
## Example
As an example, the following shortcode displays a breadcrumb for the current page.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* breadcrumb path="breadcrumb" */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,35 @@
---
author: "Mark Dumay"
title: "Button Group"
date: 2023-01-27
description: "Use the button-group shortcode to display a group of buttons."
group: components
layout: docs
---
## Overview
Use the `button-group` shortcode to display a group of buttons. Add inner `<button>` elements for each [button]({{< ref "button" >}} "button").
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| aria-label | No | Optional assistive label for the button group. |
{.table}
## Example
As an example, the following shortcode displays a group of three buttons.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* button-group aria-label="Basic example" */>}}
{{</* button color="primary" href="#" */>}}Left{{</* /button */>}}
{{</* button color="primary" href="#" */>}}Middle{{</* /button */>}}
{{</* button color="primary" href="#" */>}}Right{{</* /button */>}}
{{</* /button-group */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,42 @@
---
author: "Mark Dumay"
title: "Button"
date: 2023-01-27
description: "Use the button shortcode to display a button with a hyperlink."
group: components
layout: docs
---
## Overview
Use the `button` shortcode to display a button with a hyperlink. The inner content is used as button title. The button supports an optional badge and tooltip.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| href | No | Optional address for the button or hyperlink. Automatically assigned when using collapse. |
| state | No | Optional state of the button, either "enabled" (default), "disabled", "active", or "inactive". |
| size | No | Optional size of the button, either "sm", "md" (default), or "lg". |
| color | No | Optional theme color of the element, either "primary" (default), "secondary", "success", "danger", "warning", "info", "light", "dark", "white" or "black". |
| badge | No | Optional positioned badge to display on top of the button. |
| outline | No | Optional flag indicating the button should be outlined, either "false" (default) or "true". |
| aria-label | No | Optional label for the badge. |
| tooltip | No | Optional text to display in a tooltip. Cannot be used together with collapse. Ignored for active/inactive buttons. |
| collapse | No | Optional panel to collapse. Cannot be used together with tooltip. Ignored for active/inactive buttons. |
| placement | No | How to position the tooltip: "top" (default), "bottom", "left", or "right". |
{.table}
## Example
As an example, the following shortcode displays a tooltip for a dark button with a badge.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* button color="dark" tooltip="Click on the inbox to view your unread messages" href="#" badge="99+" */>}}
Inbox
{{</* /button */>}}
{{< /example>}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,37 @@
---
author: "Mark Dumay"
title: "Card"
date: 2023-01-27
description: "Use the card shortcode to display a card that links to a content page."
group: components
layout: docs
---
## Overview
Use the `card` shortcode to display a card that links to a content page. When using a rich layout, the card includes a thumbnail and a header.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| path | Yes | Required path of the page. |
| class | No | Optional class attribute of the card element, e.g. “w-50”. |
| color | No | Optional theme color of the card, either "primary", "secondary", "success", "danger", "warning", "info", "light", "dark", "white" or "black". By default, no color is specified. |
| padding | No | Optional padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default). |
| header | No | Optional header components of the card, displayed in small caps. Supported values are "full" (default), "publication", "tags", and "none". |
| footer | No | Optional footer components of the card, displayed in small caps. Supported values are "full", "publication", "tags", and "none" (default). |
| orientation | No | Optional placecement of the thumbnail, either "stacked" (default), "horizontal", or "none". |
{.table}
## Example
As an example, the following shortcode displays a colored, borderless horizontal card that links to the [Rich Content]({{< ref "rich-content" >}} "Rich Content") page. It includes a custom header and footer.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* card path="rich-content" class="w-100 border-0" orientation="horizontal" color="info" header="publication" footer="tags" */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,44 @@
---
author: "Mark Dumay"
title: "Carousel"
date: 2023-01-27
description: "Use the carousel shortcode to display a carousel of several images."
group: components
layout: docs
---
## Overview
Use the `carousel` shortcode to display a carousel of several images, with similar behavior as the [image]({{< ref "image" >}} "image")
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-----------|----------|-------------|
| ratio | No | Aspect ratio of the image, either "1x1", "4x3" (default), "16x9", or "21x9". |
| class | No | Optional class attribute of the `carousel` element, e.g. "w-75". |
{.table}
Add an inner `img` element for each slide of the carousel. The `img` element supports the following arguments:
| Argument | Required | Description |
|-----------|----------|-------------|
| src | Yes | Required url of the image, e.g. "img/boots.jpg". |
| caption | No | Optional image caption. If set, the image is darkened to improve the contrast. The caption is hidden on smaller screens. |
{.table}
## Example
As an example, the following shortcode displays a centered carousel with three slides, 16x9 aspect ratio, and a relative width of 67% on large screens.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* carousel ratio="16x9" class="col-sm-12 col-lg-8 mx-auto" */>}}
{{</* img src="img/coffee.jpg" caption="slide 1" */>}}
{{</* img src="img/phone.jpg" caption="slide 2" */>}}
{{</* img src="img/dunes.jpg" caption="slide 3" */>}}
{{</* /carousel */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,39 @@
---
author: "Mark Dumay"
title: "Collapse"
date: 2023-01-27
description: "Use the collapse shortcode to reveil or hide a panel."
group: components
layout: docs
---
## Overview
Use the `collapse` shortcode to reveil or hide a panel. The panel can contain both HTML code and plain text. Link a button to the panel by assigning it's ID to the `collapse` attribute.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| id | Yes | Required unique id of the collapse element, e.g. "collapse-1". |
| class | No | Optional class attribute of the inner panel element, e.g. “p-3”. |
{.table}
## Example
As an example, the following shortcode displays a button that, when clicked, triggers a panel to appear or disappear.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* button collapse="collapse-1" */>}}
Trigger panel
{{</* /button */>}}
{{</* collapse id="collapse-1" class="p-3 border rounded" */>}}
Some placeholder content for the collapse component. This panel is <i>hidden by default</i> but
revealed when the user activates the relevant trigger.
{{</* /collapse */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,104 @@
---
author: "Mark Dumay"
title: "Command Prompt"
date: 2023-01-27
description: "The command shortcode generates terminal output for either Bash, PowerShell, or SQL shell languages."
group: components
layout: docs
---
## Overview
The `command` shortcode generates terminal output for either `bash`, `powershell`, or `sql` shell languages.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-----------|----------|-------------|
| user | No | Optional user to add to the prompt, e.g. "user". |
| host | No | Optional host to add to the prompt, e.g. "localhost". |
| prompt | No | Optional prompt override, e.g. "PS C:\Users\User>". |
| shell | No | Type of shell, either "bash" (default), "powershell", or "sql". |
{.table}
## Examples
### Bash (default shell)
Use the `command` shortcode to generate a block with a default bash command prompt.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* command */>}}
export MY_VAR=123
{{</* /command */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
Specify `user` and `host` to add the user context to the prompt. In addition, use `(out)` to specify an output line and use `\` to denote a line continuation.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* command user="user" host="localhost" */>}}
export MY_VAR=123
echo "hello"
(out)hello
echo one \
two \
three
(out)one two three
echo "goodbye"
(out)goodbye
{{</* /command */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
### PowerShell
Set the `shell` argument to `powershell` to generate a PowerShell terminal. Override the `prompt` to add a directory if needed. Use the backtick `` ` `` symbol to denote a line continuation.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* command prompt="PS C:\Users\User>" shell="powershell" */>}}
Write-Host `
'Hello' `
'from' `
'PowerShell!'
(out)Hello from PowerShell!
Write-Host 'Goodbye from PowerShell!'
(out)Goodbye from PowerShell!
{{</* /command */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
### SQL
Set the `shell` argument to `sql` to generate a SQL terminal. Use the `(con)` suffix to denote a line continuation.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* command prompt="mysql>" shell="sql" */>}}
set @my_var = 'foo';
set @my_other_var = 'bar';
CREATE TABLE people ((con)
first_name VARCHAR(30) NOT NULL,(con)
last_name VARCHAR(30) NOT NULL(con)
);
(out)Query OK, 0 rows affected (0.09 sec)
insert into people(con)
values ('John', 'Doe');
(out)Query OK, 1 row affected (0.02 sec)
select *(con)
from people(con)
order by last_name;
(out)+------------+-----------+
(out)| first_name | last_name |
(out)+------------+-----------+
(out)| John | Doe |
(out)+------------+-----------+
(out)1 row in set (0.00 sec)
{{</* /command */>}}
{{< /example >}}
<!-- markdownlint-ensable MD037 -->

View File

@@ -0,0 +1,36 @@
---
author: "Mark Dumay"
title: "Image"
date: 2023-01-05
description: "Use the image shortcode to display a responsive image with a specific aspect ratio."
group: components
layout: docs
---
## Overview
Use the `image` shortcode to display a responsive image with a specific aspect ratio. The source link can refer to either an image available in the `/assets/img` folder of your site or a public web location. The shortcode renders the image as a so-called [image set]({{< param "links.mozilla_image" >}}) to optimize the image for different screen sizes and resolutions. Behind the scenes, Hugo renders the images in `WebP` format and stores them in a local folder (`resources` or `public`). The images are processed using the quality setting specified in the `[imaging]` section of the main [config file]({{< param "links.hugo_imaging" >}}) (defaults to 75). Supported image types are `.png`, `.jpeg`, `.gif`, `.tiff`, `.bmp`, and `.webp`. A fallback image of type `.jpeg` is provided for older browsers.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-----------|----------|-------------|
| src | Yes | Required url of the image, e.g. "img/boots.jpg". |
| ratio | No | Optional aspect 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. |
| class | No | Optional class attribute of the inner `img` element, e.g. "rounded". |
| title | No | Optional alternate text of the image. |
| caption | No | Optional figure caption. |
{.table}
## Example
As an example, the following shortcode displays an image with rounded corners and a 21x9 aspect ratio.
```html
{{</* image src="img/flowers.jpg" ratio="21x9" caption="Figure caption" class="rounded" */>}}
```
The result looks like this:
{{< image src="img/flowers.jpg" ratio="21x9" caption="Figure caption" class="rounded">}}

View File

@@ -0,0 +1,40 @@
---
author: "Mark Dumay"
title: "Navbar"
date: 2023-01-27
description: "Use the navbar shortcode to display a navigation header with a toggler."
group: components
layout: docs
---
## Overview
Use the `navbar` shortcode to display a navigation header with a toggler. The menu items are derived from the site's configuration, which defaults to the menus defined under `main`. Nested items are supported at one-level depth. The navigation bar includes a search area and a language switcher if applicable. The items in the navigation header are accentuated if the current page or any of its descendants is active.
<!-- TODO: add sidebar -->
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-----------|----------|-------------|
| path | Yes | Required path of the active page. |
| menus | No | Optional name of the menu configuration, defaults to "main". |
| size | No | Optional breakpoint of the navbar toggler, either "xs", "sm", "md" (default), "lg", or "xl". |
| style | No | Optional style of the navbar, either "light" (default) or "dark". |
| color | No | Optional background color of the navbar, either "primary", "secondary", "success", "danger", "warning", "info", "light", "dark", "white" or "black". The default color is none. |
| search | No | Optional flag to include a search input, defaults to the parameter "logo" set in the "navigation" section of the site's parameter configuration. |
| logo | No | Optional address of the logo image, defaults to the parameter "logo" set in the "navigation" section of the site's parameter configuration. |
| title | No | Optional brand title, displayed when the logo is not set. Defaults to the site's title. |
{.table}
## Example
As an example, the following shortcode displays a light navigation header.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* navbar path="blog" color="light" size="sm" search="false" menus="sample" title="Brand" */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,10 @@
---
author: Mark Dumay
title: Overview
date: 2023-01-14
description: Use predefined shortcodes to embed Bootstrap components in your content.
group: components
layout: docs
---
<!-- TODO: expand -->

View File

@@ -0,0 +1,35 @@
---
author: "Mark Dumay"
title: "Spinner"
date: 2023-01-27
description: "Use the spinner shortcode to indicate the loading state of a component or page."
group: components
layout: docs
---
## Overview
Use the `spinner` shortcode to indicate the loading state of a component or page. The inner content is used as alternative description.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| color | No | Optional theme color of the spinner, either "primary" (default), "secondary", "success", "danger", "warning", "info", "light", "dark", "white" or "black". |
| grow | No | Optional flag to indicate the spinner is growing instead of rotating, defaults to false. |
| class | No | Optional class attribute of the spinner wrapping element, e.g. “text-center”. |
{.table}
## Example
As an example, the following shortcode displays a centered spinner.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* spinner color="info" class="text-center" */>}}
Loading...
{{</* /spinner */>}}
{{< /example>}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,37 @@
---
author: "Mark Dumay"
title: "Toast"
date: 2023-01-27
description: "Use the toast shortcode to display a dismissable message in the bottom-right corner of the screen."
group: components
layout: docs
---
## Overview
Use the `toast` shortcode to display a dismissable message in the bottom-right corner of the screen. Hinode defines a click event for a button with id `toastButton`. Modify the file `assets/js/toast.js` if needed.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| header | No | Optional header of the toast message. Uses the site title by default. |
{.table}
## Example
As an example, the following shortcode displays a button that, when clicked, triggers the toast message.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* button id="toastButton" */>}}
Show toast
{{</* /button */>}}
{{</* toast header="Custom title" */>}}
This is a toast message.
{{</* /toast */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,36 @@
---
author: "Mark Dumay"
title: "Tooltip"
date: 2023-01-27
description: "Use the toast shortcode to display a dismissable message in the bottom-right corner of the screen."
group: components
layout: docs
---
## Overview
Use the `tooltip` shortcode to display a tooltip for a hyperlink. Refer to the [button]({{< ref "#button" >}} "button") on how to display a tooltip for a button instead. The inner content is used as hyperlink text.
## Arguments
The shortcode supports the following arguments:
| Argument | Required | Description |
|-------------|----------|-------------|
| color | No | Optional theme color of the element, either "primary" (default), "secondary", "success", "danger", "warning", "info", "light", "dark", "white" or "black". |
| title | Yes | Title to display in the tooltip. |
| href | Yes | Address for the button or hyperlink. |
| placement | No | How to position the tooltip: "top" (default), "bottom", "left", or "right". |
{.table}
## Example
As an example, the following shortcode displays a tooltip for a colored hyperlink.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* tooltip color="warning" title="Tooltip" href="#" */>}}
Tooltip demonstration
{{</* /tooltip */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,99 @@
---
title: Colors
description: Use Bootstrap's color system to easily adjust your website's colors.
date: 2023-01-14
group: configuration
layout: docs
---
## Theme colors
Hinode uses Bootstrap's color system. You can adjust them in the `/config/_default/params.toml` file in the `style` section.
{{< toml-docs name="theme-colors" file="config/_default/params.toml" >}}
In addition, the background colors `black` and `white` are available too. Below is an overview of the rendered colors.
<div class="row">
<div class="col-md-4">
<div class="p-3 mb-3 text-bg-primary rounded-3">Primary</div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 text-bg-secondary rounded-3">Secondary</div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 text-bg-success rounded-3">Success</div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 text-bg-danger rounded-3">Danger</div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 text-bg-warning rounded-3">Warning</div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 text-bg-info rounded-3">Info</div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 text-bg-light rounded-3">Light</div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 text-bg-dark rounded-3">Dark</div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 text-bg-white rounded-3">White</div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 bg-black text-white rounded-3">Black</div>
</div>
</div>
## Colored contrasting links
Hinode defines additional classes to render links that contrast with their background. Simply add `link-bg-<color>` to the class of an `<a>` anchor element. The next example adds a link constrasting with the background color `bg-success`.
```html
<div class="col-md-2">
<div class="p-3 mb-3 bg-success rounded-3 text-center"><a class="link-bg-success" href="#">Success</a></div>
</div>
```
The result looks like this.
<div class="col-md-2">
<div class="p-3 mb-3 bg-success rounded-3 text-center"><a class="link-bg-success" href="#">Success</a></div>
</div>
Below grid illustrates the contrasting colors for each background.
<div class="row">
<div class="col-md-4">
<div class="p-3 mb-3 bg-primary rounded-3"><a class="link-bg-primary" href="#">Primary</a></div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 bg-secondary rounded-3"><a class="link-bg-secondary" href="#">Secondary</a></div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 bg-success rounded-3"><a class="link-bg-success" href="#">Success</a></div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 bg-danger rounded-3"><a class="link-bg-danger" href="#">Danger</a></div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 bg-warning rounded-3"><a class="link-bg-warning" href="#">Warning</a></div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 bg-info rounded-3"><a class="link-bg-info" href="#">Info</a></div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 bg-light rounded-3"><a class="link-bg-light" href="#">Light</a></div>
</div>
<div class="col-md-4">
<div class="p-3 mb-3 bg-dark rounded-3"><a class="link-bg-dark" href="#">Dark</a></div>
</div>
</div>
## Generating helper
The SCSS generator for the colored links is defined in `assets/scss/helpers/_colored-links.scss`.
{{< scss-docs name="colored-links" file="assets/scss/helpers/_colored-links.scss" >}}

View File

@@ -0,0 +1,9 @@
---
title: Comments
description:
date: 2023-01-14
group: configuration
layout: docs
---
<!-- TODO: expand -->

View File

@@ -0,0 +1,9 @@
---
title: Deployment
description:
date: 2023-01-26
group: configuration
layout: docs
---
<!-- TODO: expand -->

View File

@@ -0,0 +1,23 @@
---
title: Fonts
description: Configure a specific font to style your website.
date: 2023-01-21
group: configuration
layout: docs
---
Hinode uses a configurable font stack that includes support for Emoji across browsers and devices. Review the configuration settings on how to update the font.
## Font configuration
Hinode uses Bootstrap's font configuration. The font stack includes support for Emoji across browsers and devices. You can adjust the main font in the `/config/_default/params.toml` file in the `style` section.
{{< toml-docs name="font" file="config/_default/params.toml" >}}
By default, Hinode configures the `Inter` font provided by [Google Fonts]({{< param "links.google_fonts" >}}) with the weights 200, 300, and 600. If you use a different font provider, be sure to adjust the Content Security Policy in the [server configuration]({{< ref "server" >}}).
## Customization
The font stack is defined in the `assets/scss/common/_variables.scss` file. The variable `$themeFont` is initialized to the value in the [font configuration](#font-configuration).
{{< scss-docs name="font" file="assets/scss/common/_variables.scss" >}}

View File

@@ -0,0 +1,67 @@
---
title: Icons
description: Configure secure access to icons from Bootstrap and Font Awesome.
date: 2023-01-23
group: configuration
layout: docs
---
Hinode processes the Bootstrap icons to ensure they adhere to the strict [content security policy]({{< ref "server" >}}). In addition, it provides access to the free icons of [Font Awesome]({{< param "links.fontawesome" >}}).
## Bootstrap icons
Bootstrap uses various embedded vector images (in <abbr title="Scalable Vector Graphics">SVG</abbr> format) throughout its Sass source files. Hinode replaces these embedded images with file-based vector images, as the [content security policy]({{< ref "server" >}}) prohibits loading of embedded images. To ensure the images are consistent with the [theme colors]({{< ref "colors" >}}), the images are postprocessed using [Hugo templating]({{< param "links.hugo_templates">}}).
### Build pipeline
Hinodes uses npm and mounted folders to create a flexibile virtual file system that is automatically kept up to date. Review the [overview]({{< ref "overview" >}}) for a detailed explanation. The build pipeline of the Bootstrap icons consists of four steps. It is intertwined with the [build process for the stylesheets]({{< ref "styles" >}}).
1. Override the inline Bootstrap icon definitions
Replace the default inline icon definitions within the Bootstrap Sass files with references to local vector images. Use the file `assets/scss/common/_icons.scss` to ensure the definitions take precedence over the default Bootstrap values. For example, the following statement updates the value of the `$form-switch-focus-bg-image`:
```scss
$form-switch-focus-bg-image: url("icons/form-switch-focus-bg-image.svg") !default;
```
2. Export the Sass variables
Export the required Sass variables by defining them in the `assets/scss/common/_export.scss` file. Hinode converts the variable names from kebab case to snake case to make them compatible with Hugo's variable naming convention. For example, the css variable `--form-switch-focus-color` is exposed as `.form_switch_focus_color` to the Hugo templates.
```scss
:hinode-theme {
--form-switch-focus-color: #{$form-switch-focus-color};
}
```
3. Reference the Sass variables within each icon file
Use [Hugo templating]({{< param "links.hugo_templates">}}) to reference the Sass variables for fill colors and stroke colors. For example, the file `assets/icons/form-switch-focus-bg-image.svg` defines the fill color as `{{ .form_switch_focus_color }}`. The entire vector definition is as such:
```html
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
<circle r='3' fill='{{ .form_switch_focus_color }}'/>
</svg>
```
4. Process the icon files
Add the local icon files to the `assets/icons` folder with a filename as defined in step 1. The partial `partials/head/stylesheet.html` calls the partial `partials/head/icons.html` to process all icon files with the `.svg` extension recursively. The output is stored in the `icons` folder within the output directory (usually `public` when building the site). The icon files are referenced in the main stylesheet automatically.
### Icons definitions
The icons are defined in the file `assets/scss/common/_icons.scss`. The current configuration is the following:
{{< scss-docs name="icons" file="assets/scss/common/_icons.scss" >}}
### Export definitions
The exported variables are defined in the file `assets/scss/common/_export.scss`. The current configuration is the following:
{{< scss-docs name="export" file="assets/scss/common/_export.scss" >}}
## Font Awesome icons
[Font Awesome]({{< param "links.fontawesome" >}}) provides a collection of icons to be used freely on websites and other media. See the [icons documentation]({{< relref "../content/icons" >}}) in the content section on how to use them to style your website. Hinode uses the <abbr title="Cascading Style Sheets">CSS</abbr> files and web fonts of Font Awesome, as the [content security policy]({{< ref "server" >}}) prohibits the inline execution of stylesheets by the JavaScripts of Font Awesome. The CSS files are bundled with the main stylesheet. The web fonts are copied to the `/static/fonts` folder with the repository. Use the npm command `npm run copy:fonts` to copy the latest version of the files. The CSS files are referenced in the `assets/scss/app.scss` file. This is the current configuration:
{{< scss-docs name="awesome" file="assets/scss/app.scss" >}}

View File

@@ -0,0 +1,43 @@
---
title: Languages
description: Configure multiple languages to enable multilingual sites.
date: 2023-01-21
group: configuration
layout: docs
---
Hinode supports Hugo's [multilingual mode]({{< param "links.hugo_lang" >}}) to create websites with multiple languages side by side. The next paragraphs explain how to configure multiple languages, how to provide content translations, and how to define multilingual messages and keywords.
## Language configuration
Define the languages available to your site in the main site configuration. The below configuration shows the default configuration set in `config/_default/languages.toml` for the English language.
{{< toml-docs name="lang-main" file="config/_default/languages.toml" >}}
The default behavior is set in `config/_default/config.toml`. For example, you can set the `defaultContentLanguageInSubdir` to `false` to remove the language slug `/en` from your site entirely.
{{< toml-docs name="language" file="config/_default/config.toml" >}}
## Content translation
Hugo supports multiple ways to define translated content. Hinode uses an approach to define translations in separate directories for each language. In the default settings, content for the English language is defined in the folder `content/en`. It is recommended to use the same filename for each page translation. This enables Hugo to recognize if a page translation is available. Hinode links to this translation in the main navigation bar.
For example, consider the `About` page. It is available in both English and Dutch. The content files are defined in `content/en/about.md` and `content/nl/about.md`. Hugo now recognizes the page is available in two languages. To translate the URL for the Dutch page, a `slug` is defined the page's frontmatter:
```yml
---
slug: "over-mij"
---
```
The English page is available by navigating to `/en/about` and the Dutch translation is available on `/nl/over-mij`. The [main navigation]({{< ref "navigation#main-navigation" >}}) item shows a language switcher for both translations.
## Internationalization
Hinode uses Hugo's [internationalization function]({{< param "links.hugo_i18n" >}}) to translate keywords and messages. Translations are available in English, Dutch, and German. For example, the translation for the word `about` in the Dutch language is defined in `i18n/nl.yaml` (strictly speaking, it translates to `about me`).
```yml
# Content
- id: about
translation: "Over mij"
```

View File

@@ -0,0 +1,321 @@
---
title: Layout
description: Hinode uses a grid-based, responsive design for the home page, single pages and list pages.
date: 2023-01-21
group: configuration
layout: docs
---
Hinode uses Bootstrap's [grid system]({{< param "links.bs_grid" >}}) and [breakpoints]({{< param "links.bs_breakpoints" >}}) to create a responsive layout across devices or viewport sizes. All pages follow the same base layout, which includes headers and footers. The next paragraphs explain the layout styles in more detail.
## Base layout
The base layout defines a page skeleton of which all other pages are derived. It consists of four major sections, being a header, body, social footer, and bottom footer. It also loads sytlesheets, scripts, and generates the metadata. The header includes the [main navigation]({{< ref "navigation#main-navigation" >}}) and can be optionally fixed to the top. By default, the base layout is expanded to fill the entire available viewport. This means that all elements stretch horizontally across the entire viewport. The body also expands vertically, where the footers align to the bottom of the viewport.
### Example
The following diagram illustrates the conceptual base design:
<div class="container-fluid text-center bg-light border rounded-3 bg-opacity-10 p-3">
<div class="row g-3">
<div class="col-12">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Header .col-12 <i>(optionally fixed)</i></div>
</div>
<div class="col-12">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">
<p class="mb-5">Body .col-12 .flex-fill</p>
<i>expands to fill viewport</i>
</div>
</div>
<div class="col-12">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Social .col-12</div>
</div>
<div class="col-12">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Footer .col-12</div>
</div>
</div>
</div>
### Configuration
Hinode uses several settings from Hugo's [main configuration]({{< param "links.hugo_config" >}}). Several extensions are defined in the [custom site parameters]({{< param "links.hugo_config_dir" >}}) and [language-specific configuration]({{< param "links.hugo_lang_config" >}}).
#### Main configuration
The base layout uses the [main configuration]({{< param "links.hugo_config" >}}) of Hugo. The settings below are actively used by Hinode:
| Setting | Default | Description |
|---------------|---------|-------------|
| title | - | Title of the website, joined with the separator and title of the current page. |
| copyright | - | Copyright notice added to the page footer. |
| paginate | 9 | Maximum number of elements to display on a [list page](#list-pages) before pagination. |
| enableGitInfo | - | Enables git information, which is used by [documentation pages](#documentation-layout). |
{.table}
The below configuration shows the default configuration set in `config/_default/config.toml`.
{{< toml-docs name="main" file="config/_default/config.toml" >}}
#### Extended configuration
Hinode uses the following extended settings in the `main` section of the `site parameters`:
| Setting | Default | Description |
|--------------|---------|-------------|
| separator | "-" | Seperator to join the website title and page title. |
| description | - | Short description of the website that is added to the page metadata. |
{.table}
The below configuration shows the default configuration set in `config/_default/params.toml`.
{{< toml-docs name="main" file="config/_default/params.toml" >}}
#### Language-specific configuration
Hinode supports [multilingual content]({{< param "links.hugo_lang_config" >}}). The following parameters are used in the site's footer, header, and meta data. Refer to the [languages]{{< ref "languages" >}}) section to review the various configuration options to enable multilingual content.
| Section | Setting | Default | Description |
|---------|---------------|---------|-------------|
| head | tagline | - | Tagline used on the site's title for the home page. |
| feature | message | - | Welcome message used in the featured section on the home page. |
| feature | tagline | - | Tagline used below the welcome message in the featured section on the home page. |
| feature | link | - | Call to action link in the featured section on the home page. |
| feature | caption | "About" | Call to action title in the featured section on the home page. |
| footer | license | - | License displayed on the site's footer. |
| footer | socialTitle | - | Title displayed in the site's social footer. |
| footer | socialCaption | - | Caption displayed in the site's social footer. |
{.table}
The below configuration shows the default configuration set in `config/_default/languages.toml` for the English language.
{{< toml-docs name="lang-param" file="config/_default/languages.toml" >}}
## Home page
The home page introduces a feature element and provides a selection of the three most recent items in a section, such as blog posts and project descriptions. The items are displayed as card groups and alternate between a vertical grid and a horizontal grid. A button that links to the related section is added below each group. The feature element can optionally cover the entire viewscreen.
### Example
The following diagram illustrates the conceptual layout of the home page:
<div class="container-fluid text-center bg-light border rounded-3 bg-opacity-10 p-3">
<div class="row g-3">
<div class="col-12">
<div class="p-3 bg-secondary bg-opacity-10 rounded-3">Header .col-12</div>
</div>
<div class="col-12">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">
<p>Feature .col-12</p>
<i>optionally spans viewport</i>
</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card .col-4</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card .col-4</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card .col-4</div>
</div>
<div class="col-12">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card .col-12</div>
</div>
<div class="col-12">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card .col-12</div>
</div>
<div class="col-12">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card .col-12</div>
</div>
<div class="col-12">
<div class="p-3 bg-secondary bg-opacity-10 rounded-3">Social .col-12</div>
</div>
<div class="col-12">
<div class="p-3 bg-secondary bg-opacity-10 rounded-3">Footer .col-12</div>
</div>
</div>
</div>
### Configuration
The configuration of the home page is set in the `home` section of the `site parameters`. The folllowing settings are supported:
| Setting | Default | Description |
|--------------|---------|-------------|
| sections | - | Sections to include on the home page, e.g. ["blog", "projects"]. |
| featurePhoto | - | Url of the photo to include in the feature element. |
| fullCover | false | Flag to indicate if the feature element should cover the entire front page. |
{.table}
The below configuration shows the default configuration set in `config/_default/params.toml`.
{{< toml-docs name="home" file="config/_default/params.toml" >}}
## List pages
List pages provide an overview of available content within a section as a card group. By default, the most recent nine items are displayed. Adjust the setting `paginate` in the [main configuration](#configuration) as needed. If the section contains more items, a paginator is added below the card group.
### Example
The following diagram illustrates the conceptual layout of a list page:
<div class="container-fluid text-center bg-light border rounded-3 bg-opacity-10 p-3">
<div class="row g-3">
<div class="col-12">
<div class="p-3 bg-secondary bg-opacity-10 rounded-3">Header .col-12</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card</div>
</div>
<div class="col-4">
<div class="p-3 bg-primary bg-opacity-10 rounded-3">Card</div>
</div>
<div class="col-12">
<div class="p-3 bg-secondary bg-opacity-10 rounded-3">Social .col-12</div>
</div>
<div class="col-12">
<div class="p-3 bg-secondary bg-opacity-10 rounded-3">Footer .col-12</div>
</div>
</div>
</div>
### Configuration
The configuration of the list pages is set in the `list` section of the `site parameters`. You can specify the settings for each section of your content. The entire configuration is fully optional and uses default settings if omitted. The folllowing settings are supported per section:
| Setting | Default | Description |
|--------------|--------------|-------------|
| title | Section name | Title of the list page, displayed above the card group. By default, the title defined in the page's frontmatter is used. |
| sort | "date" | Type of sorting to be used, either "date" (default), "weight", "publication", "expiration", "lastmod", "length", "title", "linktitle", or "&lt;param&gt;". See Hugo's [content ordering]({{< param "links.hugo_ordering" >}}) for more details. |
| reverse | true | Flag to indicate the sorting of the section content should be reversed, defaults to true. |
| cols | 3 | Number of columns to display in the card group, defaults to 3. |
| color | - | Theme color of the card, either "primary", "secondary", "success", "danger", "warning", "info", "light", "dark", "white" or "black". By default, no color is specified. |
| padding | "auto" | Padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default). |
| header | "full" | Header components of the card, displayed in small caps. Supported values are "full" (default), "publication", "tags", and "none". |
| footer | "none" | Footer components of the card, displayed in small caps. Supported values are "full", "publication", "tags", and "none" (default). |
| orientation | "stacked" | Placecement of the thumbnail, either "stacked" (default), "horizontal", or "none". |
| style | - | Optional styling attributes added to card class, e.g. "border-0" to remove the borders. |
| homepage | 3 | Number of items to display on the home page (if defined in the [configuration](#configuration-1)), defaults to 3. |
{.table}
The below configuration shows the default configuration set in `config/_default/params.toml`.
{{< toml-docs name="list" file="config/_default/params.toml" >}}
## Single pages
Single pages follow the base layout but introduce two columns next to the body content. The left column shows a [sidebar navigation]({{< ref "navigation#sidebar-navigation" >}}) if applicable and is left empty otherwise. The right column shows a [table of contents]({{< ref "navigation#table-of-contents" >}}) for the current page if applicable. On smaller viewscreens, the sidebar navigation folds into an offcanvas element, whilst the table of contents is hidden. On medium-sized screens the sidebar navigation takes precedence over the table of contents.
### Default layout
By default, single pages, such as a blog page, include the following elements in the body:
- **Title** - the title of the page as set in the page's frontmatter.
- **Metadata** - the date of the page, the modification date (if applicable), the read time, and the amount of words on the page.
- **Tags** - links to any tags defined in the page's frontmatter.
- **Description** - the description as defined in the page's frontmatter, or as summarized by Hugo if omitted in the frontmatter.
- **Thumbnail** - a thumbnail image with figure caption that links to the photo credits (if defined in the frontmatter).
- **Navigation links** - links on the bottom of the page that link to the previoud and next page within the current section.
The below example illustrates the parameters used in the page's frontmatter:
```yaml
---
author: Mark Dumay
title: Another project
date: 2021-07-15
description: Another project.
tags: ["javascript", "golang"]
thumbnail: img/coffee.jpg
photoCredits: <a href="https://unsplash.com/@kfred">Karl Fredrickson</a>
photoSource: <a href="https://unsplash.com/photos/TYIzeCiZ_60">Unsplash</a>
---
```
### Documentation layout
Documentation pages use a more straightforward, simplified layout compared to the default layout. They include the following elements in their body:
- **Title** - the title of the page as set in the page's frontmatter.
- **Description** - the description as defined in the page's frontmatter, or as summarized by Hugo if omitted in the frontmatter.
- **Metadata** - a revision date and link to the latest git commit on the bottom of the page. Enable `enableGitInfo` in the [main configuration](#main-configuration) for the git commit message to work.
Be sure to select the `docs` layout in the page's frontmatter to enable the documentation layout:
```yml
---
layout: docs
---
```
### Example
<div class="container-fluid text-center bg-light border rounded-3 bg-opacity-10 p-3">
<div class="row g-3">
<div class="col-12">
<div class="p-3 bg-secondary bg-opacity-10 rounded-3">Header .col-12</div>
</div>
<div class="col-12">
<div class="row">
<div class="col-3">
<div class="bg-primary bg-opacity-10 rounded-3">
<p>Sidebar</p>
<i>sticky</i>
</div>
</div>
<div class="col-6">
<div class="bg-primary bg-opacity-10 rounded-3">
<p>Body .col-8 .flex-fill</p>
<i>expands to fill viewport</i>
</div>
</div>
<div class="col-3">
<div class="bg-primary bg-opacity-10 rounded-3">
<p>TOC</p>
<i>sticky</i>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="p-3 bg-secondary bg-opacity-10 rounded-3">Social .col-12</div>
</div>
<div class="col-12">
<div class="p-3 bg-secondary bg-opacity-10 rounded-3">Footer .col-12</div>
</div>
</div>
</div>
### Configuration
The configuration of the documentation pages is set in the `docs` section of the site parameters. The folllowing settings are supported:
| Setting | Default | Description |
|--------------|---------|-------------|
| docs_version | - | Default version to use in documentation links. |
{.table}
The below configuration shows the default configuration set in `config/_default/params.toml`.
{{< toml-docs name="docs" file="config/_default/params.toml" >}}

View File

@@ -0,0 +1,9 @@
---
title: Metadata
description:
date: 2023-01-18
group: configuration
layout: docs
---
<!-- TODO: expand -->

View File

@@ -0,0 +1,106 @@
---
title: Navigation
description: Help the user navigate your website using configurable navigation elements.
date: 2023-01-15
group: configuration
layout: docs
---
Hinode supports several types of navigation that utilize Bootstrap elements. The main navigation is positioned on the top of the screen and includes a search input element. An optional secondary navigation is available as sidebar. Next to these navigation items, pages may optionally include a breadcrumb to indicate the current page's location within the site's navigational hierarchy. Finally, pages may also include a table of contents element that is linked to the scroll position of the current page.
## Basic configuration
The basic configuration of the navigation elements is set in the `navigation` section of the site parameters. The folllowing settings are supported:
| Setting | Default | Description |
|------------|---------|-------------|
| logo | - | Address of the brand logo image, e.g. "/img/logo_embedded.svg". |
| color | "white" | [Theme color]({{< ref "colors" >}}) of the navigation bar. Set the style to set the correct contrast of the menu items. |
| style | "light" | Style of the navigation bar, either "light" or "dark". It changes the colors of the menu items accordingly. |
| fixed | false | Flag indicating to keep the navigation bar fixed at the top of the screen. |
| offset | "3em" | Applies an [offset to main elements]({{< param "links.bs_navbar_placement" >}}) when `fixed` is set to true. |
| search | true | Flag indicating to include a search input. |
| breadcrumb | false | Flag indicating to add breadcrumb navigation to the top of any single page. List pages are excluded. |
| toc | true | Flag indicating to enable table of contents globally. Individual pages can override this setting in the frontmatter using the value `includeToc`. |
| sidebar | true | Flag indicating to enable sidebar navigation globally. If set, a sidebar is displayed when applicable. |
{.table}
The below configuration shows the default configuration set in `config/_default/params.toml`.
{{< toml-docs name="navigation" file="config/_default/params.toml" >}}
## Main navigation
The main navigation uses [Hugo's menu system]({{< param "links.hugo_menus" >}}) to generate a responsive navigation bar at the top of the page. The navigation bar uses a breakpoint to add a toggler for smaller screens. A language switcher is added automatically if your site supports multiple languages. The language switcher links to the currently translated page if available.
### Menus
The navigation bar uses [Hugo's menu system]({{< param "links.hugo_menus" >}}) to generate the menu items. The navigation supports nesting at one level depth. The following example defines an example menu configuration called `sample` (the main configuration is called `main`).
{{< toml-docs name="sample-navigation" file="config/_default/menus/menus.en.toml" >}}
### Example
Using the sample configuration defined in the previous paragraph, the navigation bar looks like this:
{{< navbar color="light" size="sm" search="false" menus="sample" title="Sample" >}}
### Customization
Hinode includes a navigation bar at the top of the screen by default. You can modify the configuration in the `layouts/_default/baseof.html` file. The navigation bar is also available as [shortcode]({{< ref "navbar" >}}).
## Sidebar navigation
Hinode supports optional sidebar navigation. It is intended to be used as companion to the main navigation and is typically used in content-heavy sections, such as documentation pages. On smaller screens, the sidebar is replaced with an [offcanvas element]({{< param "links.bs_offcanvas" >}}). In this case, the main navigation receives an additional toggler on the left of the screen.
### Menus
Inspired by Bootstrap's documentation site, Hinode uses a separate configuration file for the sidebar menus. A sidebar can be configured for each main section of the site. For example, the sidebar menus of the `Docs` section are defined in `data/docs.yml`. The menus support group items and single page items. Below example defines a group section called `Getting started` with three siblings. A single page `About` is added next.
```yml
- title: Getting started
pages:
- title: Introduction
- title: Commands
- title: Contribute
- title: About
```
An entry in the page's [frontmatter]({{< param "links.hugo_frontmatter" >}}) is needed to link the page to the correct entry in the sidebar. Below example highlights the relevant frontmatter elements from the `Introduction` page, which is part of the `Getting started` group. Please notice the group name needs to be defined in kebab-case, e.g. `getting-started`. You can omit the group name for single page entries, such as the `About` page in the example configuration above.
```yml
---
title: Introduction
group: getting-started
---
```
### Customization
The file `assets/scss/components/_sidebar.scss` contains the styling of the sidebar. It refers to a button `$btn-toggle` that is defined in `assets/scss/common/_icons.scss`. It also defines the spacing to be added to the page's main content section when using a fixed navigation bar:
{{< scss-docs name="sidebar" file="assets/scss/components/_sidebar.scss" >}}
## Breadcrumb
Hinode supports optional breadcrumb navigation. The breadcrumb indicates the current page's location within the site's navigational hierarchy. It is automatically populated by Hugo. Enable the breadcrumb in the [basic navigation configuration](#basic-configuration). If enabled, all single pages will add breadcrumb navigation to the top of the page.
### Example
When enabled, the breadcrumb looks like this:
{{< breadcrumb >}}
### Customization
The breadcrumb is also available as [shortcode]({{< ref "breadcrumb" >}}).
## Table of contents
Single pages can optionally show an [table of contents]({{< param "links.hugo_toc" >}}) on the right of the screen. The table of contents is automatically popuplated based on the headings within the page content (two levels deep). The table of contents is hidden on smaller screens or if it has less than two items. Enable the table of contents in the [basic navigation configuration](#basic-configuration). If enabled, all single pages will show the element, unless disabled in the page's frontmatter.
### Customization
The file `assets/scss/components/_toc.scss` defines the styling of the table of contents element. It adds spacing to align the element to the sidebar, amongst other styling:
{{< scss-docs name="toc" file="assets/scss/components/_toc.scss" >}}

View File

@@ -0,0 +1,66 @@
---
title: Overview
description: Configure and customize Hinode to your liking using Hugo Templating and npm dependencies.
date: 2023-01-14
group: configuration
layout: docs
---
As a theme for Hugo, Hinode is highly configurable and customizable. Based on Go's template libraries, Hugo enriches plain Markdown content with powerful features to generate websites. More information is available in [Hugo's documentation]({{< param "links.hugo_templates" >}}). To take advantage of package versioning and dependency management, Hinode takes a slightly different approach compared to most themes. The below paragraphs clarify the build system.
## npm packages
Both the [main theme]({{< param "links.repository" >}}) and [child theme]({{< param "links.repository_child" >}}) packages of Hinode are defined in the file `package.json` in the repository root. The extract below defines the key elements of the package configuration. The `name` is a unique identifier to identify the [package on npm]({{< param "links.package_npm" >}}). The `version` tag uses [semantic versioning]({{< param "links.semver" >}}), consisting of a `MAJOR` version, `MINOR` version, and `PATCH` version. In short, anything below `MAJOR` version `1` is considered to be in development and may not be backwards compatible. Starting from `1`, each `MAJOR` version may introduce breaking changes, whilst `MINOR` version usually introduce new features that are compatible with the `MAJOR` version. Lastly, `PATCH` usually indicates a bug fix or small revision.
The other two sections of interest are `devDependencies` and `otherDependencies`. As an Hugo theme, Hinode does not require any packages in production. Instead the development dependencies are used to generate the static site and its assets. For example, Bootstrap's JavaScript distribution file `/node_modules/bootstrap/dist/js` is bundled into the `js/main.bundle<.min>.js` file during build. The path `/node_modules/bootstrap/` refers to the Bootstap package defined as dependency. Lastly, the Hugo binary is installed as version-controlled dependency too. This ensures the build process is transparent and traceable, which simplifies debugging. Please refer to the [commands]({{< ref "commands" >}}) section to review the various npm commands available.
```yml
{
"name": "@markdumay/hugo-theme-hinode",
"version": "0.8.0",
"scripts": {
[...]
},
[...]
"devDependencies": {
"bootstrap": "^5.2.3",
[...]
},
"otherDependencies": {
"hugo": "0.110.0"
}
}
```
## Mounted folders
Hugo supports the mounting of folders since version 0.56.0. Hinode takes advantage of this feature to create a virtual file system, combining assets from multiple sources. For example, the below section of the `/config/_default/config.toml` instructs Hugo to make Bootstrap's JavaScript distribution file `/node_modules/bootstrap/dist/js` available in the `/assets/js` folder. This file is then bundled with the JavaScript files defined in the `/assets/js` folder of Hinode.
{{< alert color="primary" >}}
When you add a mount, the default mount for the concerned target root is ignored: be sure to explicitly add it.
{{< /alert >}}
```toml
[module]
[...]
[[module.mounts]]
source = "assets"
target = "assets"
[[module.mounts]]
source = "node_modules/bootstrap/dist/js"
target = "assets/js/vendor/bootstrap"
includeFiles = "*.bundle.js"
```
As another example, the Hinode child theme merges the key folders of the main theme with its own folder. This simplifies the modification of any base files, as the files in the local repository take precedence over the files of the main theme.
```toml
[module]
[...]
[[module.mounts]]
source = "node_modules/@markdumay/hugo-theme-hinode/i18n"
target = "i18n"
[[module.mounts]]
source = "i18n"
target = "i18n"
```

View File

@@ -0,0 +1,35 @@
---
title: Scripts
description: Automatically bundle local and external JavaScript files into a single file.
date: 2023-01-21
group: configuration
layout: docs
---
Hinode bundles local and external JavaScript into a single file. By utilizing [npm]({{< ref "overview" >}}), external JavaScript files are automatically ingested and kept up to date.
## Build pipeline
Hinodes uses npm and mounted folders to create a flexibile virtual file system that is automatically kept up to date. Review the [overview]({{< ref "overview" >}}) for a detailed explanation. The build pipeline of the JavaScript files consists of four steps.
1. Add the local JavaScript files
Add the local JavaScript files to the `assets/js` folder with a recognizable filename.
2. Mount the JavaScript files maintained within a node package
Make JavaScripts defined in node packages available by mounting them into the `assets/js/vendor` folder. Define the mount points in `config/_default/config.toml`.
3. Bundle the JavaScript files
The partial `partials/footer/scripts.html` bundles all files that end with `.js` recursively into a single file called `js/main.bundle.js`. In production mode, the output is minified and linked to with a [fingerprint]({{< param "links.hugo_fingerprint" >}}).
4. Link to the JavaScript in the base layout
Hinode's base layout `layouts/_default/baseof.html` imports the bundled JavaScript file in the footer. The file is cached to improve performance.
## Example
Mount the external JavaScript files to Hugo's virtual file system within the file `config/_default/config.toml`. The current configuration imports the relevant files of [Bootstrap]({{< param "links.bootstrap" >}}) and [FlexSearch]({{< param "links.flexsearch" >}}).
{{< toml-docs name="javascript" file="config/_default/config.toml" >}}

View File

@@ -0,0 +1,15 @@
---
title: Server
description: Configure the server headers to refine the content security policy.
date: 2023-01-21
group: configuration
layout: docs
---
<!-- TODO: expand -->
## Server headers
Hinode uses rather strict security policies by default. This ensures the site is [secure by default]({{< param "links.observatory" >}}). However, if you want to include external resources, such as images and videos, you will need to explicity add these sources to the server headers. If omitted, the browser will refuse to load these resources, resulting in broken links or missing elements. The settings of the local development server are defined in `server.toml`. See the below configuration, which captures the external resources currently used by Hinode. Refine these settings as needed. Similar settings are defined in the `netlify.toml` file provided in the repository's root when deploying to [Netlify]({{< param "links.netlify" >}}).
{{< toml-docs name="server-config" file="config/_default/server.toml" >}}

View File

@@ -0,0 +1,59 @@
---
title: Styles
description: Use extensible Sass files to generate the stylesheets for your website.
date: 2023-01-21
group: configuration
layout: docs
---
<!-- TODO: include dartsass -->
Hinode uses Sass files to take advantage of variables, maps, and functions to generate the cascading style sheets of the website. By utilizing [npm]({{< ref "overview" >}}), Bootstrap's source Sass file are automatically ingested and kept up to date.
## Build pipeline
Hinodes uses npm and mounted folders to create a flexibile virtual file system that is automatically kept up to date. Review the [overview]({{< ref "overview" >}}) for a detailed explanation. The build pipeline of the stylesheet consists of five steps.
1. Define the Sass entrypoint
The main entrypoint for the Sass files is defined in `assets/scss/app.scss`. It supports Hugo templating. For example, it defines a variable `$themeFont` that links to the [font configuration]({{< ref "fonts" >}}). The variable is available within all source Sass files.
2. Import the source Sass files
The application entrypoint imports the various source Sass files defined in `assets/scss`, which are combined with the Sass files of [Bootstrap]({{< param "links.bootstrap" >}}) and [Font Awesome (Free)]({{< param "links.fontawesome" >}}). The vendor paths are relative to the `node_modules` folder, which are installed by [npm]({{< ref "commands" >}}).
3. Override and expand the Sass configuration
The import order of the source files defines which variables and functions to use. In Sass, the first definition of a variable or function takes precedence. For example, to override the setting for the variable `$primary`, is needs to be defined prior to Bootstrap's definition in `_variables.scss`.
4. Transpile the Sass files
The partial `partials/head/stylesheet.html` reads the application entrypoint, configures the `node_modules` folder as import path, and transpiles the stylesheet into a single file `main.css`. In production mode, the output is minified and linked to with a [fingerprint]({{< param "links.hugo_fingerprint" >}}).
5. Link to the stylesheet in the base layout
Hinode's base layout `layouts/_default/baseof.html` imports the generated stylesheet in the header section of the webpage via the partial `layouts/partials/head/head.html`.
## Example
The below Sass file defines a skeleton configuration for the main entrypoint. The full configuration is defined in `assets/scss/app.scss`.
```scss
// 1) Define template variables (linking to Hugo config)
$primary: {{ site.Params.style.primary | default "#007bff" }};
// 2) Include default variable overrides
@import "common/variables.scss";
// 3) Import Bootstrap configuration
@import "bootstrap/scss/variables";
// 4) Import Bootstrap layout & components
@import "bootstrap/scss/root";
// 5) Import Font Awesome
@import "@fortawesome/fontawesome-free/scss/fontawesome";
// 6) Import Hinode theme styles
@import "common/styles.scss";
```

View File

@@ -0,0 +1,9 @@
---
title: Figures
description:
date: 2023-01-06
group: content
layout: docs
---
<!-- TODO: expand -->

View File

@@ -0,0 +1,340 @@
---
title: Icons
description: Use out-of-the-box Font Awesome icons to style your website.
date: 2023-01-24
group: content
layout: docs
---
Hinode provides out-of-the box access to the free icons of [Font Awesome]({{< param "links.fontawesome" >}}). The icon library provides various [styling options]({{< param "links.fa_styling" >}}). The below paragraphs illustrate how to apply the styling options compatible with Markdown, Bootstrap, and the [content security policy]({{< ref "server" >}}).
## Styling basics
The [Font Awesome icon library]({{< param "links.fa_icons" >}}) provides access to more than 2.000 free and open-source icons. Simply search for a keyword and review the presented options. For example, searching for the keyword `music` and filtering for `free` returns a list of nearly 30 icons. Simply add the HTML statement to your Markdown content.
```html
<i class="fa-solid fa-music"></i>
```
The result looks like this:
<i class="fa-solid fa-music"></i>
The icons inherit the current styling options and as such blend in with text inline. For example, appply the [theme color]({{< ref "colors" >}}) `text-primary` to change the color of the icon.
```html
<span class="text-primary">
<i class="fa-solid fa-music text-primary"></i>
</span>
```
The result looks like this:
<span class="text-primary">
<i class="fa-solid fa-music"></i>
</span>
## Sizing icons
Font Awesome supports both relative and absolute sizing. The following two section explain how to apply the sizing to an icon.
### Relative sizing
Font Awesome includes a range of t-shirt based sizes that are relative to the browser's default font size of 16px. The icons align to the inline text. The following example illustrative the available relative sizes.
```html
<p><i class="fa-solid fa-coffee fa-2xs"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-xs"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-sm"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-lg"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-xl"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-2xl"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
```
The result looks like this:
<p><i class="fa-solid fa-coffee fa-2xs"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-xs"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-sm"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-lg"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-xl"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
<p><i class="fa-solid fa-coffee fa-2xl"></i> When my six oclock alarm buzzes, I require a pot of good java.</p>
The table below illustrates the relative sizing classes and their equivalent relative and absolute font size.
{{< table "table-striped w-auto" >}}
| Relative Sizing Class | Font Size | Equivalent in Pixels |
|----------|--------:|-----:|
| `fa-2x` | 0.625em | 10px |
| `fa-xs` | 0.75em | 12px |
| `fa-sm` | 0.875em | 14px |
| `fa-lg` | 1.25em | 20px |
| `fa-xl` | 1.5em | 24px |
| `fa-2xl` | 2em | 32px |
{{< /table >}}
### Absolute sizing
Font Awesome also supports absolute sizing on a scale of 1x to 10x. The icons do not necessarily align to their surrounding text. The following example illustrative the various absolute sizes.
```html
<i class="fa-solid fa-camera fa-1x"></i>
<i class="fa-solid fa-camera fa-2x"></i>
<i class="fa-solid fa-camera fa-3x"></i>
<i class="fa-solid fa-camera fa-4x"></i>
<i class="fa-solid fa-camera fa-5x"></i>
<i class="fa-solid fa-camera fa-6x"></i>
<i class="fa-solid fa-camera fa-7x"></i>
<i class="fa-solid fa-camera fa-8x"></i>
<i class="fa-solid fa-camera fa-9x"></i>
<i class="fa-solid fa-camera fa-10x"></i>
```
The result looks like this:
<i class="fa-solid fa-camera fa-1x"></i>
<i class="fa-solid fa-camera fa-2x"></i>
<i class="fa-solid fa-camera fa-3x"></i>
<i class="fa-solid fa-camera fa-4x"></i>
<i class="fa-solid fa-camera fa-5x"></i>
<i class="fa-solid fa-camera fa-6x"></i>
<i class="fa-solid fa-camera fa-7x"></i>
<i class="fa-solid fa-camera fa-8x"></i>
<i class="fa-solid fa-camera fa-9x"></i>
<i class="fa-solid fa-camera fa-10x"></i>
The table below illustrates the absolute sizing classes and their equivalent font size.
{{< table "table-striped w-auto" >}}
| Absolute Sizing Class | Font Size |
|---------|--------:|
| `fa-1x` | 1em |
| `fa-2x` | 2em |
| `fa-3x` | 3em |
| `fa-4x` | 4em |
| `fa-5x` | 5em |
| `fa-6x` | 6em |
| `fa-7x` | 7em |
| `fa-8x` | 8em |
| `fa-9x` | 9em |
| `fa-10x` | 10em |
{{< /table >}}
## Fixed width
Add `fa-fw` to the class of the HTML element referencing your icon to apply a fixed width. This ensures icons of varying icon width are properly aligned to each other. The following example illustrates how this works.
```html
<div class="h1">
<div><i class="fa-solid fa-skating fa-fw bg-info"></i> Skating</div>
<div><i class="fa-solid fa-skiing fa-fw bg-info"></i> Skiing</div>
<div><i class="fa-solid fa-skiing-nordic fa-fw bg-info"></i> Nordic Skiing</div>
<div><i class="fa-solid fa-snowboarding fa-fw bg-info"></i> Snowboarding</div>
<div><i class="fa-solid fa-snowplow fa-fw bg-info"></i> Snowplow</div>
</div>
```
The result looks like this:
<div class="h1">
<div><i class="fa-solid fa-skating fa-fw bg-info"></i> Skating</div>
<div><i class="fa-solid fa-skiing fa-fw bg-info"></i> Skiing</div>
<div><i class="fa-solid fa-skiing-nordic fa-fw bg-info"></i> Nordic Skiing</div>
<div><i class="fa-solid fa-snowboarding fa-fw bg-info"></i> Snowboarding</div>
<div><i class="fa-solid fa-snowplow fa-fw bg-info"></i> Snowplow</div>
</div>
## Lists
Use the classes `fa-ul` and `fa-li` to replace default bullets in unordered lists. The following example illustrates how this works.
```html
<ul class="fa-ul">
<li><span class="fa-li"><i class="fa-solid fa-check-square"></i></span>List icons can</li>
<li><span class="fa-li"><i class="fa-solid fa-check-square"></i></span>be used to</li>
<li><span class="fa-li"><i class="fa-solid fa-spinner fa-pulse"></i></span>replace bullets</li>
<li><span class="fa-li"><i class="fa-regular fa-square"></i></span>in lists</li>
</ul>
```
The result looks like this:
<ul class="fa-ul">
<li><span class="fa-li"><i class="fa-solid fa-check-square"></i></span>List icons can</li>
<li><span class="fa-li"><i class="fa-solid fa-check-square"></i></span>be used to</li>
<li><span class="fa-li"><i class="fa-solid fa-spinner fa-pulse"></i></span>replace bullets</li>
<li><span class="fa-li"><i class="fa-regular fa-square"></i></span>in lists</li>
</ul>
## Rotating icons
Use specific classes to rotate the icon with a specific degree. The following example illustrates how this works.
```html
<div class="fa-3x">
<i class="fa-solid fa-snowboarding"></i>
<i class="fa-solid fa-snowboarding fa-rotate-90"></i>
<i class="fa-solid fa-snowboarding fa-rotate-180"></i>
<i class="fa-solid fa-snowboarding fa-rotate-270"></i>
<i class="fa-solid fa-snowboarding fa-flip-horizontal"></i>
<i class="fa-solid fa-snowboarding fa-flip-vertical"></i>
<i class="fa-solid fa-snowboarding fa-flip-both"></i>
</div>
```
The result looks like this:
<div class="fa-3x">
<i class="fa-solid fa-snowboarding"></i>
<i class="fa-solid fa-snowboarding fa-rotate-90"></i>
<i class="fa-solid fa-snowboarding fa-rotate-180"></i>
<i class="fa-solid fa-snowboarding fa-rotate-270"></i>
<i class="fa-solid fa-snowboarding fa-flip-horizontal"></i>
<i class="fa-solid fa-snowboarding fa-flip-vertical"></i>
<i class="fa-solid fa-snowboarding fa-flip-both"></i>
</div>
The following classes are available:
{{< table "table-striped w-auto" >}}
| Class | Details |
|---------|--------|
| `fa-rotate-90` | Rotates an icon 90° |
| `fa-rotate-180` | Rotates an icon 180° |
| `fa-rotate-270` | Rotates an icon 270° |
| `fa-flip-horizontal` | Mirrors an icon horizontally |
| `fa-flip-vertical` | Mirrors an icon vertically |
| `fa-flip-both` | Mirrors an icon both vertically and horizontally |
{{< /table >}}
## Animating icons
Font Awesome supports various animations by simply adding a animation class to the HTML element. The following example illustrates the available basic animations. Add custom styles to your [Sass files]({{< ref "styles" >}}) to apply additional [animation utilities]({{< param "links.fa_animation" >}}).
```html
<div class="fa-3x">
<i class="fa-solid fa-heart fa-beat"></i>
<i class="fa-solid fa-triangle-exclamation fa-fade"></i>
<i class="fa-solid fa-circle-info fa-beat-fade"></i>
<i class="fa-solid fa-basketball fa-bounce"></i>
<i class="fa-solid fa-camera-rotate fa-flip"></i>
<i class="fa-solid fa-bell fa-shake"></i>
<i class="fa-solid fa-sync fa-spin"></i>
</div>
```
The result looks like this:
<div class="fa-3x">
<i class="fa-solid fa-heart fa-beat"></i>
<i class="fa-solid fa-triangle-exclamation fa-fade"></i>
<i class="fa-solid fa-circle-info fa-beat-fade"></i>
<i class="fa-solid fa-basketball fa-bounce"></i>
<i class="fa-solid fa-camera-rotate fa-flip"></i>
<i class="fa-solid fa-bell fa-shake"></i>
<i class="fa-solid fa-sync fa-spin"></i>
</div>
The following table describes the available basic animation classes.
{{< table "table-striped w-auto" >}}
| Class | Details |
|---------|--------|
| `fa-beat` | Scales an icon up or down |
| `fa-fade` | Fades an icon in and out |
| `fa-beat-fade` | Scales and pulses an icon in and out |
| `fa-bounce` | Bounces an icon up and down |
| `fa-flip` | Rotates an icon about the Y axis 180 degrees |
| `fa-shake` | Shakes an icon back and forth |
| `fa-spin` | Roates an icon |
{{< /table >}}
## Bordered and pulled icons
Use `fa-border` and `fa-pull-right` or `fa-pull-left` for easy pull quotes or article icons. The following example illustrates a quote.
```html
<i class="fa-solid fa-quote-left fa-2x fa-pull-left"></i>
Gatsby believed in the green light, the orgastic future that year by year recedes before us.
It eluded us then, but thats no matter — tomorrow we will run faster, stretch our arms further...
And one fine morning — So we beat on, boats against the current, borne back ceaselessly into the past.
```
The result looks like this:
<i class="fa-solid fa-quote-left fa-2x fa-pull-left"></i>
Gatsby believed in the green light, the orgastic future that year by year recedes before us.
It eluded us then, but thats no matter — tomorrow we will run faster, stretch our arms further...
And one fine morning — So we beat on, boats against the current, borne back ceaselessly into the past.
The following table describes the available classes.
{{< table "table-striped w-auto" >}}
| Class | Details |
|-------|---------|
| `fa-border` | Creates a border with border-radius and padding applied around an icons |
| `fa-pull-left` | Pulls an icon by floating it left and applying a margin-right |
| `fa-pull-right` | Pulls an icon by floating it right and applying a margin-left |
{{< /table >}}
## Stacking icons
Use the `fa-stack` class on the parent HTML element of the two icons you want to stack. Then add the `fa-stack-1x` class for the regularly sized icon and add the `fa-stack-2x` class for the larger icon. `fa-inverse` can be added to the icon with the `fa-stack-1x` to help with a knock-out looking effect. Add a [theme color]({{< ref "colors" >}}) such as `text-primary` to change the color of the icon. The following example illustrates the available options.
```html
<span class="fa-stack fa-2x">
<i class="fa-solid fa-square fa-stack-2x"></i>
<i class="fab fa-twitter fa-stack-1x fa-inverse"></i>
</span>
<span class="fa-stack fa-2x">
<i class="fa-solid fa-circle fa-stack-2x"></i>
<i class="fa-solid fa-flag fa-stack-1x fa-inverse"></i>
</span>
<span class="fa-stack fa-2x">
<i class="fa-solid fa-camera fa-stack-1x"></i>
<i class="fa-solid fa-ban fa-stack-2x text-danger"></i>
</span>
<span class="fa-stack fa-2x">
<i class="fa-solid fa-square fa-stack-2x"></i>
<i class="fa-solid fa-terminal fa-stack-1x fa-inverse"></i>
</span>
<span class="fa-stack fa-4x">
<i class="fa-solid fa-square fa-stack-2x"></i>
<i class="fa-solid fa-terminal fa-stack-1x fa-inverse"></i>
</span>
```
The result looks like this:
<span class="fa-stack fa-2x">
<i class="fa-solid fa-square fa-stack-2x"></i>
<i class="fab fa-twitter fa-stack-1x fa-inverse"></i>
</span>
<span class="fa-stack fa-2x">
<i class="fa-solid fa-circle fa-stack-2x"></i>
<i class="fa-solid fa-flag fa-stack-1x fa-inverse"></i>
</span>
<span class="fa-stack fa-2x">
<i class="fa-solid fa-camera fa-stack-1x"></i>
<i class="fa-solid fa-ban fa-stack-2x text-danger"></i>
</span>
<span class="fa-stack fa-2x">
<i class="fa-solid fa-square fa-stack-2x"></i>
<i class="fa-solid fa-terminal fa-stack-1x fa-inverse"></i>
</span>
<span class="fa-stack fa-4x">
<i class="fa-solid fa-square fa-stack-2x"></i>
<i class="fa-solid fa-terminal fa-stack-1x fa-inverse"></i>
</span>
The following table describes the available classes.
{{< table "table-striped w-auto" >}}
| Class | Details |
|-------|---------|
| `fa-stack` | Used on a parent HTML element of the two icons to be stacked |
| `fa-stack-1x` | Used on the icon which should be displayed at base size when stacked |
| `fa-stack-2x` | Used on the icon which should be displayed larger when stacked |
| `fa-inverse` | Inverts the color of the icon displayed at base size when stacked |

View File

@@ -0,0 +1,9 @@
---
title: Images
description:
date: 2023-01-06
group: content
layout: docs
---
<!-- TODO: expand -->

View File

@@ -0,0 +1,77 @@
---
title: Links and cross-references
description:
date: 2023-01-22
group: content
layout: docs
---
<!-- TODO: expand -->
## Internal links
## Cross-references
## External links
### Basic links
Hugo supports basic Markdown to create links to external websites. To create a link, enclose the link text in brackets (e.g., `[Duck Duck Go]`) and then follow it immediately with the URL in parentheses (e.g., `(https://duckduckgo.com)`).
```markdown
My favorite search engine is [Duck Duck Go](https://duckduckgo.com).
```
The result looks like this:
My favorite search engine is [Duck Duck Go](https://duckduckgo.com).
## URLs and email addresses
To quickly turn a URL or email address into a link, enclose it in angle brackets.
```markdown
<https://www.markdownguide.org>
<fake@example.com>
```
The result looks like this:
<https://www.markdownguide.org>
<fake@example.com>
## Reference-style links
Instead of using parentheses, you can use brackets to link to a predefined address. The following example uses a named reference to link to the website of Font Awesome.
```markdown
[Font Awesome][fontawesome]
[fontawesome]: https://fontawesome.com
```
The result looks like this:
[Font Awesome][fontawesome]
[fontawesome]: https://fontawesome.com
## Managed links
Hinode uses `config/default/params.toml` to manage links to external addresses in a single place. You can use a combination of Markdown and Hugo shortcodes to generate a managed link. The following snippet of `config/default/params.toml` defines the link address for `fontawesome`:
```toml
[links]
fontawesome = "https://fontawesome.com"
```
You can then use the following statement to generate the link.
```markdown
[Font Awesome]({{</* param "links.fontawesome" */>}})
```
The result looks like this:
[Font Awesome]({{< param "links.fontawesome" >}})

View File

@@ -0,0 +1,217 @@
---
title: Tables
description: Enhance out-of-the-box Markdown tables with Bootstrap styling.
date: 2023-01-22
group: content
layout: docs
---
Hugo supports out-of-the box Markdown tables. Hinode enhances the basic tables with optional styling features provided by Bootstrap. The following paragraphs illustrate how to use basic tables, how to accent them, how to adjust the borders, and how to make the table more compact.
## Basic tables
Hugo supports tables out-of-the-box with extended Markdown. Use an optional shortcode as wrapper to align the table cells.
### Default alignment
Hugo supports tables out-of-the-box by using the `|` and `-` characters. Add `{.table}` at the bottom of the block to apply the correct styling. You can mix the content with inline Markdown.
```markdown
| Italics | Bold | Code |
| --------- | -------- | ------ |
| _italics_ | **bold** | `code` |
{.table}
```
The result looks like this:
| Italics | Bold | Code |
| --------- | -------- | ------ |
| _italics_ | **bold** | `code` |
{.table}
### Aligned cells and headers
Hugo's Markdown processor applies inline styles to align cells in a table, which is blocked by Hinode's [Content Security Policy]({{< ref "server" >}}). Use the `table` shortcode to wrap your Markdown input instead. You can then align header and cell data to the left, center, or right of a column using the `:` character. Pass additional class attributes between double quotes, e.g. `"table-striped"`. See the [next section](#accented-tables) for more options.
```markdown
{{</* table "table-striped" */>}}
| # | Item | Left aligned | Center aligned | Right aligned|
| -- | ----------- |:-------------|:--------------:| --------------:|
| 1. | First item | some text | more text | even more text |
| 2. | Second item | some text | more text | even more text |
| 3. | Third item | some text | more text | even more text |
{{</* /table */>}}
```
The result looks like this:
{{< table "table-striped" >}}
| # | Item | Left aligned | Center aligned | Right aligned|
| -- | ----------- |:-------------|:--------------:| --------------:|
| 1. | First item | some text | more text | even more text |
| 2. | Second item | some text | more text | even more text |
| 3. | Third item | some text | more text | even more text |
{{< /table >}}
## Accented tables
Add optional class attributes to style the table using Bootstrap.
### Striped rows
Use `.table-striped` to add zebra-striping to any table row.
```markdown
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-striped}
```
The result looks like this:
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-striped}
### Striped columns
Use `.table-striped-columns` to add zebra-striping to any table column.
```markdown
| # | Item | Description |
| -- | ----------- | ---------------------- |
| 1. | First item | This is the first row |
| 2. | Second item | This is the second row |
| 3. | Third item | This is the third row |
{.table .table-striped-columns}
```
The result looks like this:
| # | Item | Description |
| -- | ----------- | ---------------------- |
| 1. | First item | This is the first row |
| 2. | Second item | This is the second row |
| 3. | Third item | This is the third row |
{.table .table-striped-columns}
### Hoverable rows
Add `.table-hover` to enable a hover state on the table rows.
```markdown
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-hover}
```
The result looks like this:
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-hover}
### Colored tables
Add `table-<theme>` to apply [theme colors]({{< ref "colors" >}}) to your table. You can mix them with other classes, such as `.table-striped`.
```markdown
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-success .table-striped}
```
The result looks like this:
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-success .table-striped}
## Table borders
Adjust the borders of a table to match your style preferences.
### Bordered tables
Add `.table-bordered` for borders on all sides of the table and cells. Add an optional `border-<theme>` class to apply [theme colors]({{< ref "colors" >}}) to the table borders.
```markdown
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-bordered .border-primary}
```
The result looks like this:
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-bordered .border-primary}
### Tables without borders
Add `.table-borderless` for a table without borders.
```markdown
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-borderless}
```
The result looks like this:
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-borderless}
## Small tables
Add `.table-sm` to make any table more compact by cutting all cell padding in half.
```markdown
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-sm}
```
The result looks like this:
| # | Item |
| -- | ----------- |
| 1. | First item |
| 2. | Second item |
| 3. | Third item |
{.table .table-sm}

View File

@@ -0,0 +1,313 @@
---
title: Typography
description: Use a mix of Markdown and HTML syntax to style your content.
date: 2023-01-22
group: content
layout: docs
---
Hinode uses a mix of basic Markdown syntax enriched with Bootstrap styling for the typography. The following paragraphs illustrate the most common applications. Refer to the Hugo documentation to review the extended description of supported [content formats]({{< param "links.hugo_content" >}}). It also contains links to external resource about Markdown.
## Headings
Use the native Markdown character `#` to generate headings for your content. The following input represents six levels of section headings. They are generated as HTML `<h1>``<h6>` elements. `<h1>` is the highest section level while `<h6>` is the lowest.
```markdown
# H1. Heading
## H2. Heading
### H3. Heading
#### H4. Heading
##### H5. Heading
###### H6. Heading
```
The result looks like this:
<p class="h1">H1. Heading</p>
<p class="h2">H2. Heading</p>
<p class="h3">H3. Heading</p>
<p class="h4">H4. Heading</p>
<p class="h5">H5. Heading</p>
<p class="h6 pb-2">H6. Heading</p>
Alternatively, you can use `.h1` through `.h6` classes, for when you want to match the font styling of a heading but cannot use the associated HTML element. For example, using a `.h2` class will exclude the section heading from the generated [table of contents]({{< ref "navigation#table-of-contents" >}}).
```html
<p class="h1">H1</p>
<p class="h2">H2</p>
<p class="h3">H3</p>
<p class="h4">H4</p>
<p class="h5">H5</p>
<p class="h6">H6</p>
```
## Display headings
Display a larger, slightly more opinionated heading style by adding the `.display` class in HTML.
```html
<h1 class="display-1">Display 1</h1>
<h1 class="display-2">Display 2</h1>
<h1 class="display-3">Display 3</h1>
<h1 class="display-4">Display 4</h1>
<h1 class="display-5">Display 5</h1>
<h1 class="display-6">Display 6</h1>
```
The result looks like this:
<h1 class="display-1">Display 1</h1>
<h1 class="display-2">Display 2</h1>
<h1 class="display-3">Display 3</h1>
<h1 class="display-4">Display 4</h1>
<h1 class="display-5">Display 5</h1>
<h1 class="display-6">Display 6</h1>
## Lead
Make a paragraph stand out by adding `.lead` class in HTML.
```html
<p class="lead">
This is a lead paragraph. It stands out from regular paragraphs.
</p>
```
The result looks like this:
<p class="lead">
This is a lead paragraph. It stands out from regular paragraphs.
</p>
## Inline text elements
You can use native Markdown to apply basic styling. Use HTML elements for additional formatting options.
### Native Markdown
Use native Markdown apply basic styling to your text.
```markdown
~~This line of text is meant to be treated as deleted text.~~
_This line of text renders as underlined._
**This line of text renders as bold text.**
*This line of text renders as italicized text.*
```
The result looks like this:
~~This line of text is meant to be treated as deleted text.~~
_This line of text renders as underlined._
**This line of text renders as bold text.**
<!-- markdownlint-disable-next-line -->
*This line of text renders as italicized text.*
### HTML Styling
Use HTML tags for additional styling options. The following example illustrates highlighting, fine print, subscript, and superscript.
```html
<p>You can use the mark tag to <mark>highlight</mark> text.</p>
<p><small>This line of text is meant to be treated as fine print.</small></p>
<p>H<sub>2</sub>O is a liquid.</p>
<p>2<sup>10</sup> is 1024.</p>
```
The result looks like this:
<p>You can use the mark tag to <mark>highlight</mark> text.</p>
<p><small>This line of text is meant to be treated as fine print.</small></p>
<p>H<sub>2</sub>O is a liquid.</p>
<p>2<sup>10</sup> is 1024.</p>
## Emoji
Use shortcodes to insert Emoji into your content. You can use this [list of emoji]({{< param "links.markdown_emoji" >}}) shortcodes as a reference, although the results may vary across browsers and devices. The following example inserts an inline smiley.
<div class="bg-light p-3 mb-3">
That is so funny! <code>:<zero-width space>smiley:<zero-width space></code>
</div>
The result looks like this:
That is so funny! :smiley:
## Abbreviations
Use the HTML element `<abbr>` for abbreviations and acronyms to show the expanded version on hover. Abbreviations have a default underline and gain a help cursor to provide additional context on hover and to users of assistive technologies.
```html
<p><abbr title="HyperText Markup Language">HTML</abbr></p>
```
The result looks like this:
<p><abbr title="HyperText Markup Language">HTML</abbr></p>
## Blockquotes
The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations. Use the `>` Markdown character to generate a blockquote and add `{.blockquote}` at the bottom of the block to apply the correct styling.
### Blockquote without attribution
The following Markdown generates a blockquote without attribution.
```markdown
> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
> **Note** that you can use _Markdown syntax_ within a blockquote.
{.blockquote}
```
The result looks like this:
> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
> **Note** that you can use _Markdown syntax_ within a blockquote.
{.blockquote}
### Blockquote with attribution
The following Markdown generates a blockquote with attribution. The citation itself is added to the bottom of the page.
```markdown
> Don't communicate by sharing memory, share memory by communicating.<br>
> — <cite>Rob Pike[^1]</cite>
{.blockquote}
[^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c) during Gopherfest, November 18, 2015.
```
The result looks like this:
> Don't communicate by sharing memory, share memory by communicating.<br>
> — <cite>Rob Pike[^1]</cite>
{.blockquote}
[^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c) during Gopherfest, November 18, 2015.
## Code Blocks
Use a single backtick `` ` `` character to denote an inline code element. Use triple backticks `` ``` `` to denote the start and end of a code block. Add the language to the openeing backticks to specify the syntax. Hugo uses Chroma highlighting to style the syntax of [supported languages]({{< param "links.hugo_chroma" >}}). The following example defines an `HTML` code block.
<!-- markdownlint-disable MD040 MD048 -->
~~~
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Example HTML5 Document</title>
</head>
<body>
<p>Test</p>
</body>
</html>
```
~~~
<!-- markdownlint-enable MD040 MD048 -->
The result looks like this:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Example HTML5 Document</title>
</head>
<body>
<p>Test</p>
</body>
</html>
```
## List Types
Use native Markdown to define ordered lists, unordered lists, and nested lists.
### Ordered List
The following Markdown defines an ordered list of three items. The sequence is automatically determined, so simply add `1.` at the start of each element. The [linting rules]({{< ref "contribute#markdown" >}}) will raise an error if you add the sequence numbering yourself.
```markdown
1. First item
1. Second item
1. Third item
```
The result looks like this:
1. First item
1. Second item
1. Third item
### Unordered List
Use the `-` character to denote an unordered list.
```markdown
- List item
- Another item
- And another item
```
The result looks like this:
- List item
- Another item
- And another item
### Nested list
Use indendation and the `-` character to denote a nested list.
```markdown
- Fruit
- Apple
- Orange
- Banana
- Dairy
- Milk
- Cheese
```
The result looks like this:
- Fruit
- Apple
- Orange
- Banana
- Dairy
- Milk
- Cheese
### Task list
Use the `-` character followed by either `[x]` or `[ ]` to indicate a (completed) task.
```markdown
- [x] Write the press release
- [ ] Update the website
- [ ] Contact the media
```
The result looks like this:
- [x] Write the press release
- [ ] Update the website
- [ ] Contact the media

View File

@@ -0,0 +1,75 @@
---
title: Commands
description: Use npm commands to automate the build process and to keep track of dependencies.
date: "2023-01-11"
group: getting-started
layout: docs
---
Hinode uses [Node Package Manager]({{< param "links.npm" >}}) to automate the build process and to keep track of dependencies. The `package.json` file in the repository root defines several commands to simplify local development and testing. The following paragraphs describe the main commands.
## Starting a local server
Use the following command from the command prompt to start a local **development server**. The command removes any previous build artifacts in the `public` and `resources` folders. The command invokes the local web server from Hugo, which watches for changes in the key system files and configuration directory. By default the generated site is available at `http://localhost:1313/` and is responsive to changes. This alllows for interactive development and testing. When in development mode, the generated assets (such as javascripts and CSS files) are not minified to simplify debugging.
{{% command %}}
npm run start
{{% /command %}}
Use the following command to mimick the site in **production mode**. In this setting, generated assets are minified and compliant with the Content Security Policy. Although Hugo's web server is not meant to be run in a real production environment, it does allow validation of the site in an environment close to production.
{{% command %}}
npm run prod
{{% /command %}}
## Generating a web site
Use the following command to generate the static site. The build artifacts are stored in the local `public` folder. You can deploy these files to your **production** server.
{{% command %}}
npm run build
{{% /command %}}
Add the prefix `debug` to generate a site suitable for **debugging**. The build artifacts are not minified to simplify review and testing.
{{% command %}}
npm run build:debug
{{% /command %}}
## Validating linting rules
Use the the following command to analyze the source code and to test for any stylistic errors. The lint command validates three types of files in the `assets` folder and `content` folder:
* Javascript (`assets/*.js`) using [eslint]({{< param "links.eslint" >}}).
* CSS and SASS (`assets/scss/**/*.{css,sass,scss,sss,less}`) using [stylelint]({{< param "links.stylelint" >}}).
* Markdown (`*.md` and `content/**/*.md`) using [markdownlint-cli2]({{< param "links.markdownlint" >}}).
The basic configuration of these linting tools is defined in the repository root.
{{% command %}}
npm run lint
{{% /command %}}
Be sure to adhere to the linting rules before submitting any code changes / Pull Requests to Hinode's repository.
## Upgrading dependencies
Use the following command to test for any available upgrades of used packages. The command runs `npx` to validate the dependencies and to upgrade the dependency versions in `package.json`.
{{% command %}}
npm run upgrade
{{% /command %}}
The `npx` command does not validate the version of the Hugo binary. The version needs to be manually updated in the `package.json` file.
```json
"otherDependencies": {
"hugo": "0.109.0"
}
```
Be sure to install the upgraded dependencies if needed:
{{% command %}}
npm install
{{% /command %}}

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