Compare commits

...

220 Commits

Author SHA1 Message Date
Mark Dumay
325500620a Merge pull request #683 from gethinode/validation
Refactor remaining shortcodes
2023-12-27 17:17:56 +01:00
Mark Dumay
134bfa1a0b Merge branch 'main' into validation 2023-12-27 17:01:06 +01:00
mark
df593859fa Bump package release 2023-12-27 17:00:20 +01:00
mark
4204fae5a0 Fix file 2023-12-27 16:59:51 +01:00
mark
cc12c49143 Update build stats 2023-12-27 16:57:46 +01:00
mark
f09694da70 Remove empty line 2023-12-27 16:57:39 +01:00
mark
d923df2156 Refactor file shortcode 2023-12-27 16:56:08 +01:00
mark
71d1db456a Update comments 2023-12-27 16:45:16 +01:00
mark
ec0eaa2faa Update comments 2023-12-27 16:45:06 +01:00
mark
836cd21df2 Refactor example shortcode 2023-12-27 16:44:57 +01:00
mark
7a4c364b49 Fix indentation 2023-12-27 16:32:20 +01:00
mark
79f10ba724 Improve readability 2023-12-27 16:30:54 +01:00
mark
d0ea4ecd1b Refactor docs shortcode 2023-12-27 16:30:18 +01:00
mark
867e448e21 Refactor command shortcode 2023-12-27 16:01:36 +01:00
mark
50a07d368f Refactor collapse shortcode 2023-12-27 15:44:33 +01:00
mark
21e2435350 Fix error check 2023-12-27 15:37:34 +01:00
mark
0dab66f24c Refactor button-group shortcode 2023-12-27 15:37:25 +01:00
mark
827595ded2 Refactor carousel partial and shortcode 2023-12-27 15:23:12 +01:00
mark
fda99f18e8 Update comments 2023-12-27 15:22:50 +01:00
mark
c9b76c9bc4 Refine comments 2023-12-27 15:22:31 +01:00
mark
3e2e2de482 Refactor kbd shortcode 2023-12-27 14:53:57 +01:00
Mark Dumay
d648873e21 Merge pull request #682 from gethinode/validation
Refactor image partial and shortcode
2023-12-27 14:47:35 +01:00
Mark Dumay
2490b26277 Merge branch 'main' into validation 2023-12-27 14:42:01 +01:00
mark
66ccd7a71d Refactor image partial and shortcode 2023-12-27 14:41:00 +01:00
mark
4ef440d499 Remove comments 2023-12-27 14:40:09 +01:00
Mark Dumay
e334dd1d10 Merge pull request #681 from gethinode/validation
Refactor sub, sup, spinner, release, persona, navbar, nav, mark, and link
2023-12-27 10:01:17 +01:00
Mark Dumay
c7e62acf9d Merge branch 'main' into validation 2023-12-27 09:47:24 +01:00
mark
f44adf92b4 Refactor link partial and shortcode 2023-12-27 09:45:28 +01:00
mark
87cd07801d Adjust indentation 2023-12-27 09:20:39 +01:00
mark
24e96e2724 Refactor mark shortcode 2023-12-27 09:20:29 +01:00
mark
a5f5a9ff24 Refactor nav partial and shortcode 2023-12-27 09:12:24 +01:00
mark
dd19b8a236 Adjust indentation 2023-12-27 09:11:55 +01:00
mark
0a80f40c07 Refactor navbar 2023-12-27 08:04:29 +01:00
mark
772cc97a8b Refine unsupported args test to consider groups 2023-12-27 07:27:27 +01:00
mark
ce7f1d6c26 Add persona example 2023-12-27 07:26:28 +01:00
mark
a41994fc0f Refactor persona shortcode and partial 2023-12-27 07:26:13 +01:00
mark
6e42a729e7 Adjust content padding on smaller screens 2023-12-27 07:25:35 +01:00
mark
33a634e4fc Refactor release shortcode 2023-12-26 17:45:45 +01:00
mark
fc61c52939 Refactor spinner 2023-12-26 17:11:24 +01:00
mark
5e4ff5b780 Fix spacing 2023-12-26 17:00:16 +01:00
mark
2e5903abed Refactor sub and sup shortcodes 2023-12-26 16:44:48 +01:00
Mark Dumay
62db8f574f Merge pull request #680 from gethinode/validation
Refactor table shortcode
2023-12-26 10:09:02 +01:00
Mark Dumay
d44ee41268 Merge branch 'main' into validation 2023-12-26 09:22:13 +01:00
mark
6baadfef75 Refactor table shortcode 2023-12-26 09:21:45 +01:00
Mark Dumay
fbec6a9b35 Merge pull request #679 from gethinode/validation
Refactor youtube, tooltip, toast, and timeline shortcodes / partials
2023-12-26 09:21:18 +01:00
Mark Dumay
197d9359dd Merge branch 'main' into validation 2023-12-26 09:14:00 +01:00
mark
fa083e0bde Update build stats 2023-12-26 09:12:30 +01:00
mark
1cf427fddd Improve display of positional args 2023-12-26 09:12:20 +01:00
mark
819e9e89dc Refine validation of permitted values 2023-12-26 09:12:01 +01:00
mark
900632c5f5 Refactor timeline shortcode 2023-12-26 09:10:20 +01:00
mark
dc66a4334f Refactor toast partial and shortcode 2023-12-26 07:42:16 +01:00
mark
badbe334df Improve layout 2023-12-26 07:42:00 +01:00
mark
fa334d6e84 Add license info 2023-12-26 07:20:08 +01:00
mark
9580d4e72e Add version partial comments 2023-12-26 07:19:55 +01:00
mark
252257be8b Change indentation 2023-12-26 07:19:41 +01:00
mark
04c253995f Refactor tooltip 2023-12-26 07:19:30 +01:00
mark
8c007fd627 Fix rendering of default values 2023-12-26 07:10:22 +01:00
mark
afcd59e1a4 Refactor youtube shortcode 2023-12-26 06:50:36 +01:00
mark
bba0ecad63 Fix typo 2023-12-26 06:50:21 +01:00
Mark Dumay
c1058ac665 Merge pull request #678 from aefly/french-translation
Update French translation
2023-12-26 06:05:41 +01:00
aefly
b891fcdc4f update fourth-post.md 2023-12-25 19:36:39 +01:00
aefly
3bea9dfc8f Update fourth-post.md with the latest hinode version 2023-12-25 19:32:20 +01:00
aefly
4d99d7dfc4 Update fr.yaml with the latest hinode version 2023-12-25 19:32:10 +01:00
Mark Dumay
373b8eddeb Merge pull request #677 from gethinode/validation
Refactor button
2023-12-25 15:49:29 +01:00
Mark Dumay
d463d1feb3 Merge branch 'main' into validation 2023-12-25 15:40:36 +01:00
mark
48a96a8d79 Refactor button 2023-12-25 15:39:57 +01:00
mark
0e1128aba3 Fix error message 2023-12-25 15:39:41 +01:00
Mark Dumay
c3be4957ba Merge pull request #675 from gethinode/validation
Refactor breadcrumb
2023-12-25 15:38:46 +01:00
Mark Dumay
3618aadf74 Merge branch 'main' into validation 2023-12-25 15:31:07 +01:00
github-actions[bot]
74a8c36c74 Merge pull request #676 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.118.0
Bump hugo-bin from 0.117.1 to 0.118.0
2023-12-25 13:59:13 +00:00
dependabot[bot]
49aa52b36f Bump hugo-bin from 0.117.1 to 0.118.0
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.117.1 to 0.118.0.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.117.1...v0.118.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 13:54:02 +00:00
Mark Dumay
ee95a05b48 Merge branch 'main' into validation 2023-12-25 14:46:27 +01:00
mark
134e544718 Refactor breadcrumb 2023-12-25 14:45:30 +01:00
Mark Dumay
306a767686 Merge pull request #674 from gethinode/validation
Refactor badge and card-group
2023-12-25 14:43:49 +01:00
Mark Dumay
47ca9d303a Merge branch 'main' into validation 2023-12-25 14:31:05 +01:00
mark
6fc68fe540 Refactor badge 2023-12-25 14:10:39 +01:00
mark
9195bd7f4e Remove empty line 2023-12-25 14:10:29 +01:00
mark
4ef503e07f Remove unsupported args 2023-12-25 14:03:07 +01:00
mark
4711139513 Refine cascading args 2023-12-25 14:02:55 +01:00
mark
fc56508b91 Update code comments 2023-12-25 14:02:40 +01:00
mark
232c78364f Refactor card group 2023-12-25 14:02:29 +01:00
mark
d85e16f1fa Support child args 2023-12-25 14:02:05 +01:00
mark
562b386cb5 Add option to filter for args with parent 2023-12-25 12:45:47 +01:00
Mark Dumay
daab751299 Merge pull request #673 from gethinode/validation
Refactor alert and args shortcodes
2023-12-25 09:07:31 +01:00
Mark Dumay
9e82ff8de5 Merge branch 'main' into validation 2023-12-25 08:59:10 +01:00
mark
52b2c23565 Bump package release 2023-12-25 08:58:17 +01:00
mark
617fd688db Refactor args shortcode 2023-12-25 08:47:36 +01:00
mark
2cf7fff3ba Refactor alert 2023-12-25 08:31:27 +01:00
Mark Dumay
a34d3fde1f Merge pull request #672 from gethinode/validation
Refactor abbr and accordion shortcodes
2023-12-25 08:29:09 +01:00
Mark Dumay
be054a723e Merge branch 'main' into validation 2023-12-25 08:03:42 +01:00
mark
fc43f6a52e Refine comments 2023-12-25 08:03:13 +01:00
mark
195d3cb69b Refactor accordion 2023-12-25 08:03:06 +01:00
mark
92c69b6011 Fix empty args 2023-12-25 07:27:08 +01:00
mark
ea78805587 Support bool, int, and float represented as string 2023-12-25 06:53:16 +01:00
mark
76e90ea321 Fix required arguments test 2023-12-25 06:52:07 +01:00
mark
b300758aa5 Update build stats 2023-12-25 05:55:56 +01:00
mark
68c44c55d4 Refactor abbr shortcode 2023-12-25 05:55:47 +01:00
mark
228a89f61d Support unnamed args 2023-12-25 05:55:25 +01:00
mark
2645453de2 Update card comments 2023-12-25 04:57:56 +01:00
mark
5ce069a4c0 Improve handling of module args 2023-12-24 14:59:35 +01:00
Mark Dumay
6661434c35 Merge pull request #671 from gethinode/validation
Improve argument validation and documentation
2023-12-24 14:57:51 +01:00
Mark Dumay
aee6b3a32d Merge branch 'main' into validation 2023-12-24 14:50:16 +01:00
mark
4b0cc260cb Bump package release 2023-12-24 14:48:24 +01:00
mark
7611315941 Remove redundant comments 2023-12-24 14:47:47 +01:00
mark
3b1f71a601 Update build stats 2023-12-24 14:47:20 +01:00
mark
fead3555fc Support release info 2023-12-24 14:47:01 +01:00
mark
cd3f99fc90 Fix aria label 2023-12-24 14:27:21 +01:00
mark
a2e6855117 Refactor required args check 2023-12-24 14:27:04 +01:00
mark
1e4cd3a5da Handle empty args 2023-12-24 14:26:51 +01:00
Mark Dumay
865898ac4f Merge pull request #670 from gethinode/validation
Refactor argument validation and documentation
2023-12-24 12:03:50 +01:00
Mark Dumay
44ace26cde Merge branch 'main' into validation 2023-12-24 11:55:17 +01:00
mark
d0350c7672 Bump package release 2023-12-24 11:54:25 +01:00
mark
943a115ef0 Update build stats 2023-12-24 11:53:19 +01:00
mark
745322b3fe Add args shortcode to render structured arguments 2023-12-24 11:53:10 +01:00
mark
90ea2cb760 Refactor card args validation 2023-12-24 11:52:18 +01:00
Mark Dumay
2d6c3c7d64 Merge pull request #667 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-12-22 06:51:30 +01:00
markdumay
4401c49c54 fix: update Hugo module dependencies 2023-12-22 05:46:02 +00:00
github-actions[bot]
fa3bfa7008 Merge pull request #665 from gethinode/dependabot/npm_and_yarn/eslint-plugin-n-16.5.0
Bump eslint-plugin-n from 16.4.0 to 16.5.0
2023-12-20 13:58:37 +00:00
dependabot[bot]
14c2ddc725 Bump eslint-plugin-n from 16.4.0 to 16.5.0
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.4.0 to 16.5.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.4.0...16.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-20 13:52:36 +00:00
Mark Dumay
1e55dc8f65 Merge pull request #664 from uvham521/feature/chinese-support
Add Chinese translation files
2023-12-19 14:09:32 +01:00
uvham521
78980dde3f Add Chinese translation files 2023-12-19 11:59:48 +00:00
github-actions[bot]
3a770b6f40 Merge pull request #662 from gethinode/dependabot/npm_and_yarn/eslint-8.56.0
Bump eslint from 8.55.0 to 8.56.0
2023-12-18 13:25:07 +00:00
dependabot[bot]
b271adef3f Bump eslint from 8.55.0 to 8.56.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.55.0 to 8.56.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.55.0...v8.56.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-12-18 13:19:12 +00:00
Mark Dumay
639c9770b8 Merge pull request #661 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-12-17 06:34:31 +01:00
markdumay
e6b29666ad fix: update Hugo module dependencies 2023-12-17 03:16:31 +00:00
Mark Dumay
dd052250f6 Merge pull request #660 from gethinode/develop
Add support for absolute paths
2023-12-16 08:12:10 +01:00
mark
1223a22d7e Bump package version 2023-12-16 08:03:31 +01:00
mark
b6f034f8e3 Add support for absolute paths 2023-12-16 08:03:07 +01:00
mark
ca01b67396 Mount data folder 2023-12-16 07:53:12 +01:00
Mark Dumay
eb3a2b0bb1 Merge pull request #659 from gethinode/main
Sync with main
2023-12-16 07:42:47 +01:00
Mark Dumay
41711fb527 Merge pull request #658 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-12-16 07:32:09 +01:00
markdumay
6e7a9a8796 fix: update Hugo module dependencies 2023-12-16 06:25:10 +00:00
github-actions[bot]
92838c0572 Merge pull request #657 from gethinode/dependabot/npm_and_yarn/cssnano-6.0.2
Bump cssnano from 6.0.1 to 6.0.2
2023-12-15 13:37:12 +00:00
dependabot[bot]
3f71da19ee Bump cssnano from 6.0.1 to 6.0.2
Bumps [cssnano](https://github.com/cssnano/cssnano) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano@6.0.1...cssnano@6.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-15 13:30:07 +00:00
github-actions[bot]
43a6dd2b79 Merge pull request #655 from gethinode/dependabot/npm_and_yarn/cssnano-preset-advanced-6.0.2
Bump cssnano-preset-advanced from 6.0.1 to 6.0.2
2023-12-15 13:29:26 +00:00
dependabot[bot]
806fac97db Bump cssnano-preset-advanced from 6.0.1 to 6.0.2
Bumps [cssnano-preset-advanced](https://github.com/cssnano/cssnano) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano-preset-advanced@6.0.1...cssnano-preset-advanced@6.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-15 13:24:01 +00:00
github-actions[bot]
9fd07827db Merge pull request #656 from gethinode/dependabot/npm_and_yarn/eslint-plugin-import-2.29.1
Bump eslint-plugin-import from 2.29.0 to 2.29.1
2023-12-15 13:23:20 +00:00
dependabot[bot]
28cdcec7ee Bump eslint-plugin-import from 2.29.0 to 2.29.1
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.29.0 to 2.29.1.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.29.0...v2.29.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-15 13:18:05 +00:00
github-actions[bot]
cb2e946435 Merge pull request #654 from gethinode/dependabot/npm_and_yarn/eslint-plugin-n-16.4.0
Bump eslint-plugin-n from 16.3.1 to 16.4.0
2023-12-11 13:57:51 +00:00
dependabot[bot]
2e7bb50d43 Bump eslint-plugin-n from 16.3.1 to 16.4.0
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.3.1 to 16.4.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.3.1...16.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 13:52:03 +00:00
github-actions[bot]
3d7875ba18 Merge pull request #653 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.117.1
Bump hugo-bin from 0.117.0 to 0.117.1
2023-12-08 13:20:14 +00:00
dependabot[bot]
29ab88d581 Bump hugo-bin from 0.117.0 to 0.117.1
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.117.0 to 0.117.1.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.117.0...v0.117.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-08 13:14:49 +00:00
Mark Dumay
d93bbe4fe3 Merge pull request #652 from gethinode/develop
Update Netlify build environment
2023-12-07 06:20:19 +01:00
mark
3a2d062e22 Update netlify env 2023-12-07 06:01:29 +01:00
mark
c3ef897a71 Bump package version 2023-12-07 05:58:21 +01:00
Mark Dumay
73964e6be4 Merge pull request #651 from gethinode/main
Sync with main
2023-12-07 05:50:40 +01:00
Mark Dumay
520c000d3b Merge pull request #648 from gethinode/nested
Fix nesting behavior
2023-12-07 05:42:43 +01:00
Mark Dumay
e3c1db7b88 Merge branch 'main' into nested 2023-12-07 05:27:09 +01:00
github-actions[bot]
9ba3218f61 Merge pull request #650 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.117.0
Bump hugo-bin from 0.116.4 to 0.117.0
2023-12-06 14:03:21 +00:00
dependabot[bot]
a912d65608 Bump hugo-bin from 0.116.4 to 0.117.0
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.116.4 to 0.117.0.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.116.4...v0.117.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 13:57:08 +00:00
github-actions[bot]
ffd6bb9c46 Merge pull request #649 from gethinode/dependabot/npm_and_yarn/postcss-cli-11.0.0
Bump postcss-cli from 10.1.0 to 11.0.0
2023-12-06 13:55:58 +00:00
dependabot[bot]
6a238c3a11 Bump postcss-cli from 10.1.0 to 11.0.0
Bumps [postcss-cli](https://github.com/postcss/postcss-cli) from 10.1.0 to 11.0.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.1.0...11.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 13:50:57 +00:00
Mark Dumay
3210d72068 Merge branch 'main' into nested 2023-12-06 11:18:25 +01:00
mark
add57592cd Fix default nested behavior 2023-12-06 06:30:04 +01:00
Mark Dumay
584131c8c4 Merge pull request #647 from florianloewen/fix-clipboard-typos
Fix German translations for clipboard interactions
2023-12-05 06:41:39 +01:00
Florian Loewen
9e8a1b4e3d Update German translations for clipboard interactions 2023-12-05 00:32:16 +01:00
github-actions[bot]
61efc2de16 Merge pull request #646 from gethinode/dependabot/npm_and_yarn/eslint-8.55.0
Bump eslint from 8.54.0 to 8.55.0
2023-12-04 14:05:19 +00:00
dependabot[bot]
ce1f688b38 Bump eslint from 8.54.0 to 8.55.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.54.0 to 8.55.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.54.0...v8.55.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-12-04 13:58:36 +00:00
mark
088464bf13 Improve nested behavior 2023-11-25 08:28:28 +01:00
Mark Dumay
936ca3ffc2 Merge pull request #643 from gethinode/develop
Fix flexsearch index
2023-11-24 16:24:01 +01:00
mark
4f6320f7cf Bump package release 2023-11-24 16:15:29 +01:00
mark
ccf3169381 Update build stats 2023-11-24 16:15:21 +01:00
Mark Dumay
54d66d2b02 Merge pull request #642 from gethinode/main
Sync with main
2023-11-24 16:12:12 +01:00
Mark Dumay
25aeb94364 Merge pull request #641 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-11-24 16:03:58 +01:00
markdumay
5657ef5b40 fix: update Hugo module dependencies 2023-11-24 14:32:59 +00:00
Mark Dumay
c8818d104f Merge pull request #640 from gethinode/develop
Add option to exclude pages from search index
2023-11-23 12:15:40 +01:00
mark
ed239034bf Bump package version 2023-11-23 10:53:54 +01:00
mark
774f936d3b Add example to exclude page from search index 2023-11-23 10:53:15 +01:00
Mark Dumay
905c28886a Merge pull request #639 from gethinode/main
Sync with main
2023-11-23 10:46:46 +01:00
Mark Dumay
ad430074f7 Merge pull request #637 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-11-23 10:33:34 +01:00
Mark Dumay
6449f01185 Merge branch 'main' into hugo-mod-dependencies 2023-11-23 07:46:15 +01:00
github-actions[bot]
0c3488472c Merge pull request #634 from gethinode/dependabot/npm_and_yarn/markdownlint-cli2-0.11.0
Bump markdownlint-cli2 from 0.10.0 to 0.11.0
2023-11-23 06:36:39 +00:00
Mark Dumay
ee7990ec1e Merge branch 'main' into dependabot/npm_and_yarn/markdownlint-cli2-0.11.0 2023-11-23 07:30:55 +01:00
Mark Dumay
b892b48388 Merge pull request #638 from gethinode/develop
Fix linting issues
2023-11-23 07:30:43 +01:00
Mark Dumay
340213e4ff Merge branch 'main' into develop 2023-11-23 07:22:06 +01:00
mark
989f2eed4c Fix linting issues 2023-11-23 07:21:16 +01:00
markdumay
4fadb7a6ab fix: update Hugo module dependencies 2023-11-23 03:16:45 +00:00
dependabot[bot]
8f1fd120eb Bump markdownlint-cli2 from 0.10.0 to 0.11.0
Bumps [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) from 0.10.0 to 0.11.0.
- [Changelog](https://github.com/DavidAnson/markdownlint-cli2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/DavidAnson/markdownlint-cli2/compare/v0.10.0...v0.11.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-11-20 13:16:20 +00:00
github-actions[bot]
f2fc3b60a4 Merge pull request #635 from gethinode/dependabot/npm_and_yarn/eslint-8.54.0
Bump eslint from 8.53.0 to 8.54.0
2023-11-20 13:15:34 +00:00
dependabot[bot]
c0735f71ef Bump eslint from 8.53.0 to 8.54.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.53.0 to 8.54.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.53.0...v8.54.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-11-20 13:09:54 +00:00
Mark Dumay
858f9b3430 Merge pull request #632 from gethinode/develop
Make tags page sidebar aware
2023-11-14 14:47:27 +01:00
Mark Dumay
402a7a85b8 Merge branch 'main' into develop 2023-11-14 13:54:26 +01:00
mark
97fbc6087c Make tags page sidebar aware 2023-11-14 13:53:37 +01:00
Mark Dumay
cc4a4766a9 Merge pull request #631 from gethinode/develop
Make page breakpoint configurable
2023-11-14 13:01:08 +01:00
Mark Dumay
6821ac2b60 Merge branch 'main' into develop 2023-11-14 12:10:40 +01:00
mark
06e10655ec Bump package release 2023-11-14 12:10:07 +01:00
mark
d32fdfa987 Make page breakpoint configurable 2023-11-14 12:09:16 +01:00
mark
9e97f063e5 Update build stats 2023-11-14 12:06:41 +01:00
mark
627f174ae4 Fix duplicate rendering of section body 2023-11-14 12:06:26 +01:00
Mark Dumay
c349c28f08 Merge pull request #630 from gethinode/develop
Improve list overview of subsections
2023-11-13 12:49:40 +01:00
Mark Dumay
e73f96ffe9 Merge branch 'main' into develop 2023-11-13 11:53:02 +01:00
mark
bd4ab51aff Improve list overview of subsections 2023-11-13 11:52:15 +01:00
Mark Dumay
81823c35ec Merge pull request #629 from gethinode/develop
Fix variable scope error
2023-11-12 17:55:05 +01:00
Mark Dumay
c567949205 Merge branch 'main' into develop 2023-11-12 15:32:19 +01:00
mark
def136cb1b Fix variable scope error 2023-11-12 15:31:55 +01:00
Mark Dumay
889dc2e5ef Merge pull request #628 from gethinode/develop
Fix spacing of timeline icons
2023-11-11 17:01:08 +01:00
Mark Dumay
371323f929 Merge branch 'main' into develop 2023-11-11 16:56:03 +01:00
mark
1694702d11 Fix spacing of timeline icons 2023-11-11 16:55:36 +01:00
Mark Dumay
048f50ddc4 Merge pull request #627 from gethinode/develop
Add check for vector image availability
2023-11-10 19:34:22 +01:00
Mark Dumay
488cfc576b Merge branch 'main' into develop 2023-11-10 18:25:39 +01:00
mark
1d8e564acf Update package version 2023-11-10 18:25:02 +01:00
mark
6e94bc279b Add check for vector image availability 2023-11-10 18:24:31 +01:00
github-actions[bot]
90ee15cccf Merge pull request #626 from gethinode/dependabot/npm_and_yarn/eslint-plugin-n-16.3.1
Bump eslint-plugin-n from 16.3.0 to 16.3.1
2023-11-10 13:46:56 +00:00
dependabot[bot]
751ff334ac Bump eslint-plugin-n from 16.3.0 to 16.3.1
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.3.0 to 16.3.1.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.3.0...16.3.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-10 13:41:17 +00:00
Mark Dumay
c200af1ad2 Merge pull request #625 from gethinode/develop
Add fetch priority support for images
2023-11-10 07:10:18 +01:00
Mark Dumay
5232afa812 Merge branch 'main' into develop 2023-11-10 06:57:17 +01:00
mark
ad8e2f51d7 Add fetch priority support for images
The priority provides a hint to the browser on how it should prioritize the fetch of an image relative to other
images. The implementation is experimental and currently only supported by Chrome, Edge, and Opera.

Hinode sets a high priority for the thumbnail image. On list pages, this image is included in the featured section. For single pages, the thumbnail is included in the page header. Carousel images that are not active will receive a low fetch priority. All other images are unchanged.

See https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/fetchpriority#browser_compatibility for browser compatibility.
2023-11-10 06:56:30 +01:00
Mark Dumay
ff708cf580 Merge pull request #624 from gethinode/develop
Fix styles of embedded youtube videos
2023-11-09 18:31:19 +01:00
Mark Dumay
f93ee9f01b Merge branch 'main' into develop 2023-11-09 18:18:22 +01:00
mark
611320e661 Bump package release 2023-11-09 18:17:47 +01:00
mark
8a56d82cb9 Fix styles of embedded youtube videos 2023-11-09 18:16:59 +01:00
Mark Dumay
c052086388 Merge pull request #623 from gethinode/develop
Add language to download title if applicable
2023-11-09 17:27:37 +01:00
Mark Dumay
d4bfbf925a Merge branch 'main' into develop 2023-11-09 17:02:28 +01:00
mark
b6b7e7be4f Add language to download title if applicable 2023-11-09 16:59:18 +01:00
github-actions[bot]
61ef48798b Merge pull request #622 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.116.4
Bump hugo-bin from 0.116.3 to 0.116.4
2023-11-09 13:32:04 +00:00
dependabot[bot]
d65382e80d Bump hugo-bin from 0.116.3 to 0.116.4
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.116.3 to 0.116.4.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.116.3...v0.116.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-09 13:24:53 +00:00
Mark Dumay
e97d3e6fe9 Merge pull request #621 from gethinode/develop
Fix incorrect class init of thumbnails
2023-11-07 16:28:01 +01:00
Mark Dumay
5cb189d545 Merge branch 'main' into develop 2023-11-07 16:14:38 +01:00
mark
7897fe5f00 Bump package release 2023-11-07 16:13:45 +01:00
mark
6c4e0e8992 Fix incorrect class init 2023-11-07 16:13:10 +01:00
132 changed files with 4208 additions and 2215 deletions

View File

@@ -9,32 +9,32 @@
<!-- Badges --> <!-- Badges -->
<p align="center"> <p align="center">
<a href="https://gohugo.io" alt="Hugo website"> <a href="https://gohugo.io">
<img src="https://img.shields.io/badge/generator-hugo-brightgreen"> <img src="https://img.shields.io/badge/generator-hugo-brightgreen" alt="Hugo website">
</a> </a>
<a href="https://gethinode.com" alt="Hinode theme"> <a href="https://gethinode.com">
<img src="https://img.shields.io/badge/theme-hinode-blue"> <img src="https://img.shields.io/badge/theme-hinode-blue" alt="Hinode theme">
</a> </a>
<a href="https://www.npmjs.com/package/%40gethinode/hinode" alt="npm package"> <a href="https://www.npmjs.com/package/%40gethinode/hinode">
<img src="https://img.shields.io/npm/v/%40gethinode/hinode"> <img src="https://img.shields.io/npm/v/%40gethinode/hinode" alt="npm package">
</a> </a>
<a href="https://app.netlify.com/sites/gethinode-demo/deploys" alt="Netlify Status"> <a href="https://app.netlify.com/sites/gethinode-demo/deploys">
<img src="https://img.shields.io/netlify/0ad42e3e-fdfa-4d37-8e26-58badd429a67"> <img src="https://img.shields.io/netlify/0ad42e3e-fdfa-4d37-8e26-58badd429a67" alt="Netlify Status">
</a> </a>
<a href="https://stats.uptimerobot.com/xyGVYhLJmV" alt="UptimeRobot Status"> <a href="https://stats.uptimerobot.com/xyGVYhLJmV">
<img src="https://img.shields.io/uptimerobot/status/m791334689-73d9dfc82030f4f955b2d6bb"> <img src="https://img.shields.io/uptimerobot/status/m791334689-73d9dfc82030f4f955b2d6bb" alt="UptimeRobot Status">
</a> </a>
<a href="https://github.com/gethinode/hinode/commits/main" alt="Last commit"> <a href="https://github.com/gethinode/hinode/commits/main">
<img src="https://img.shields.io/github/last-commit/gethinode/hinode.svg"> <img src="https://img.shields.io/github/last-commit/gethinode/hinode.svg" alt="Last commit">
</a> </a>
<a href="https://github.com/gethinode/hinode/issues" alt="Issues"> <a href="https://github.com/gethinode/hinode/issues">
<img src="https://img.shields.io/github/issues/gethinode/hinode.svg"> <img src="https://img.shields.io/github/issues/gethinode/hinode.svg" alt="Issues">
</a> </a>
<a href="https://github.com/gethinode/hinode/pulls" alt="Pulls"> <a href="https://github.com/gethinode/hinode/pulls">
<img src="https://img.shields.io/github/issues-pr-raw/gethinode/hinode.svg"> <img src="https://img.shields.io/github/issues-pr-raw/gethinode/hinode.svg" alt="Pulls">
</a> </a>
<a href="https://github.com/gethinode/hinode/blob/main/LICENSE" alt="License"> <a href="https://github.com/gethinode/hinode/blob/main/LICENSE">
<img src="https://img.shields.io/github/license/gethinode/hinode"> <img src="https://img.shields.io/github/license/gethinode/hinode" alt="License">
</a> </a>
</p> </p>

BIN
assets/img/creator-1x1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 MiB

View File

@@ -38,7 +38,7 @@
@import "components/table.scss"; @import "components/table.scss";
@import "components/timeline.scss"; @import "components/timeline.scss";
@import "components/toc.scss"; @import "components/toc.scss";
@import "components/vimeo.scss"; @import "components/video.scss";
@import "common/animation.scss"; @import "common/animation.scss";
@import "common/styles.scss"; @import "common/styles.scss";
@import "layouts/reboot.scss"; @import "layouts/reboot.scss";

View File

@@ -36,7 +36,7 @@
@import "components/table.scss"; @import "components/table.scss";
@import "components/timeline.scss"; @import "components/timeline.scss";
@import "components/toc.scss"; @import "components/toc.scss";
@import "components/vimeo.scss"; @import "components/video.scss";
@import "common/animation.scss"; @import "common/animation.scss";
@import "common/styles.scss"; @import "common/styles.scss";
@import "layouts/reboot.scss"; @import "layouts/reboot.scss";

View File

@@ -1,3 +1,19 @@
.youtube-embedded {
position: relative;
padding-bottom: 56.25%;
height: 0;
overflow: hidden;
}
.youtube-embedded > iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border:0;
}
// Adapted from https://github.com/gohugoio/hugo/tpl/tplimpl/embedded/templates/shortcodes/vimeo_simple.html // Adapted from https://github.com/gohugoio/hugo/tpl/tplimpl/embedded/templates/shortcodes/vimeo_simple.html
.__h_video { .__h_video {
position: relative; position: relative;

View File

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

View File

@@ -8,6 +8,7 @@
endorse = true endorse = true
footerBelowFold = false footerBelowFold = false
loading = "lazy" loading = "lazy"
breakpoint = "md"
[main.externalLinks] [main.externalLinks]
cue = false cue = false
tab = false tab = false

33
data/structures/abbr.yml Normal file
View File

@@ -0,0 +1,33 @@
comment: >-
Creates an HTML element that shows the long form of an abbrevitation. The abbreviation data is centrally stored in a
data file. By default, the shortcode uses `abbr.yaml` with translation support.
The data file is expected to store key-value pairs, where `id` is the lower-case abbrevation and `long` its long
form. The following example illustrates this using YML:
- id: css
long: `Cascading Style Sheets`
arguments:
key:
type: string
position: 0
optional: false
comment: >-
Case-insensitive key of the abbreviation. In shorthand notation, this is
the first (and only) matched argument. Non-alphanumeric keys must be quoted.
data:
type: string
default: abbr.yaml
optional: true
comment: >-
Filename of the abbrevation input. You can omit the file extension. The
file should reside in the `data` folder. The data supports language
extensions. For example, `abbr.en.yaml` refers to the English translation
of the abbrevation data. The filename `abbr.yaml` is used when no suitable
translation is found.
class:
type: string
optional: true
comment: >-
Class attribute of the abbr element. For example, specify `initialism` for
a slightly smaller font size.

View File

@@ -0,0 +1,19 @@
comment: >-
Defines an individual accordion item.
arguments:
header:
type: string
optional: false
comment: Header of the accordion item.
show:
type: bool
optional: true
comment: Flag to indicate an item should be shown as collapsed.
class:
type: string
optional: true
comment: Class attribute of the accordion item.
body:
optional: false
comment: Content of the accordion item.
group: shortcode

View File

@@ -0,0 +1,18 @@
comment: >-
Use the accordion to show a group of vertically collapsing and expanding
items. Add accordion-item inner elements for each accordion item.
arguments:
id:
type: string
optional: true
comment: >-
ID of the accordion, defaults to “accordion-n” with a sequential number n.
always-open:
type: bool
optional: true
comment: >-
Flag to make accordion items stay open when another item is opened.
class:
type: string
optional: true
comment: Class attribute of the accordion, e.g. “w-50”.

46
data/structures/alert.yml Normal file
View File

@@ -0,0 +1,46 @@
comment: >-
Use the alert shortcode to display a contextual feedback message. The inner
content is used as alert text.
arguments:
class:
type: string
optional: true
comment: Class attribute of the alert element.
color:
type: select
optional: true
default: danger
comment: Theme color of the alert.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
- white
- black
dismissible:
type: bool
optional: true
default: false
comment: Flag to indicate the alert is dismissible.
icon:
type: string
optional: true
comment: Font Awesome icon to include.
type:
type: select
optional: true
comment: Type of the alert, generates an alert with related color and icon.
options:
values:
- danger
- info
body:
optional: false
comment: Alert text.
group: shortcode

27
data/structures/args.yml Normal file
View File

@@ -0,0 +1,27 @@
comment: >-
Generates a markdown table of structured arguments. The argument definitions are
expected to be defined in a data file identified by a provided structure name.
arguments:
structure:
type: string
position: 0
optional: false
comment: >-
Name of the data file that contains argument definitions. Supported data
formats include JSON, TOML, YAML, and XML. You can omit the file
extension. The file should reside in the `data/structures` folder.
group:
type: string
position: 1
optional: true
comment: >-
Name of the group filter. This is typically used when a shortcode and
partial have common arguments. The group filter binds a specific argument
to a particular group. By default, an argument belongs to all groups.
parent:
type: bool
position: 2
optional: true
comment: >-
Flag to filter only arguments that have a parent attribute (either
`cascade` or `merge`).

31
data/structures/badge.yml Normal file
View File

@@ -0,0 +1,31 @@
comment: >-
Use the badge shortcode to enrich headings.
arguments:
title:
type: string
optional: true
comment: >-
Title of the badge.
class:
type: string
optional: true
comment: >-
Class attribute of the badge element.
color:
type: select
optional: true
default: secondary
comment: >-
Theme color of the element.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
- white
- black

View File

@@ -0,0 +1,16 @@
comment: Displays a breadcrumb for a specific page.
arguments:
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: false
comment: Page to display the breadcrumb for.
group: partial
path:
type: string
optional: true
comment: Path of the page to display the breadcrumb for.
group: shortcode

View File

@@ -0,0 +1,15 @@
comment: >-
Displays a group of buttons. Add inner <button> elements for each button.
arguments:
label:
type: string
optional: true
comment: Assistive label for the button group.
aria-label:
type: string
optional: true
comment: Alias for label.
body:
type: string
optional: false
comment: Inner <button> elements for each button.

187
data/structures/button.yml Normal file
View File

@@ -0,0 +1,187 @@
comment: >-
Display a button with a hyperlink.
arguments:
title:
type:
- string
- template.HTML
optional: true
comment: >-
Title of the button, required unless icon is set.
class:
type: string
optional: true
comment: >-
Class attribute of the button element, e.g. “p-5”.
color:
type: select
optional: true
default: primary
comment: >-
Theme color of the element.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
- white
- black
href:
type:
- string
- template.URL
optional: true
comment: >-
Address for the button or hyperlink. Automatically assigned when using
collapse.
relref:
type: string
optional: true
comment: >-
Name of the page to link to. Replaces `href` with a relative link if set.
group: shortcode
id:
type: string
optional: true
comment: ID of the button, to be used in the DOM.
state:
type: select
optional: true
default: enabled
comment: State of the button.
options:
values:
- enabled
- disabled
- active
- inactive
size:
type: string
optional: true
default: md
comment: Size of the button.
options:
values:
- sm
- md
- lg
outline:
type: bool
optional: true
default: false
comment: Flag indicating the button should be outlined.
badge:
type: string
optional: true
comment: Positioned badge to display on top of the button.
label:
type: string
optional: true
comment: >-
Assistive label for the button or badge. The label is applied
to the badge instead of the button when a badge has been defined.
The default value of the button aria-label is its title.
tooltip:
type: string
optional: true
comment: >-
Text to display in a tooltip. Cannot be used together with
collapse. Ignored for active/inactive buttons.
collapse:
type: string
optional: true
comment: >-
Panel to collapse. Cannot be used together with tooltip. Ignored for
active/inactive buttons.
type:
type: select
optional: true
default: button
comment: Type of the element.
options:
values:
- link
- button
placement:
type: string
optional: true
default: top
comment: Position of the tooltip.
options:
values:
- top
- bottom
- left
- right
icon:
type: string
optional: true
comment: >-
Font Awesome icon class attribute, required unless title is set. An
example value is `fas sort`.
order:
type: select
optional: true
default: last
comment: Order of the icon
options:
values:
- first
- last
justify:
type: string
optional: true
default: center
comment: Justification of the button title and icon.
options:
values:
- start
- end
- center
- between
- around
- evenly
toast:
type: string
optional: true
comment: ID of the toast to display when the button is clicked.
clipboard:
type:
- string
- template.URL
optional: true
comment: Text to be copied to the clipboard when the button is clicked.
cue:
type: bool
optional: true
comment: >-
Flag to indicate if an external link should show a visual cue, defaults
to the setting `main.externalLinks.cue` in the site's parameters.
tab:
type: bool
optional: true
comment: >-
Flag to indicate if an external link should open in a new tab, defaults
to setting `main.externalLinks.tab` in the site's parameters.
attributes:
type: map[string]interface {}
optional: true
comment: >-
Dictionary of key-value pairs added as custom attributes to the button
element ('<a>').
spacing:
type: bool
optional: true
default: true
comment: >-
Flag to add spacing to the inline button.
wrapper:
type: string
optional: true
comment: Element class of the button wrapper.
group: shortcode

View File

@@ -0,0 +1,80 @@
comment: >-
Displays a grid of Bootstrap cards with 1 to 5 columns. The cards are rendered
using a provided list of pages. Cards on the same row are aligned to each
other. The grid renders pages up to a provided maximum amount. The remaining
items are accessible via either a paginator or button to a list page (default
behavior). Be aware a page can only contain one paginator at a time.
arguments:
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: true
comment: Context of the current page.
title:
type: string
optional: true
comment: >-
Title of the card, replaces the title of the referenced page (if any).
gutter:
type: int
optional: true
default: 4
comment: Gutter between columns in a group.
options:
min: 0
max: 5
list:
type:
- page.Pages
- resource.Resources
optional: true
comment: Array of pages to be rendered as cards.
cards:
type: string
optional: true
comment: String of rendered cards.
max:
type: int
optional: true
comment: Maximum number of cards to display.
cols:
type: int
optional: true
default: 3
comment: Number of grid columns.
options:
min: 1
max: 5
paginate:
type: bool
optional: true
comment: >-
Flag indicating if pagination should be added to the card group, if the
list exceeds the maximum number of cards to display.
href:
type: string
optional: true
comment: >-
address for the button or hyperlink. If set, a button is added if the
list exceeds the maximum number of cards to display.
hrefTitle:
type: string
optional: true
comment: >-
Title of the button or hyperlink as companion to href.
separator:
type: bool
optional: true
comment: >-
Flag to indicate a horizontal line should be added between items on small screens.
wrapper:
type: string
optional: true
comment: >-
Class attributes of the wrapper element, e.g. `p-4 px-xxl-0`.
responsive:
type: bool
optional: true
comment: >-
Flag indicating if the number of columns should be responsive, defaults to `true`.

180
data/structures/card.yml Normal file
View File

@@ -0,0 +1,180 @@
comment: >-
Displays a Bootstrap card. Either specify a valid path, or set the arguments
title, href, header, description, and thumbnail individually. The latter
arguments override any page attributes.
arguments:
title:
type: string
optional: true
comment: >-
Title of the card, replaces the title of the referenced page (if any).
path:
type: path
optional: true
comment: >-
Path of the page that the card reference to. If omitted, specify the
title, icon, thumbnail, and description (inner content) as needed.
href:
type: url
optional: true
comment: >-
Address for the button or hyperlink.
group: partial
class:
type: string
optional: true
parent: merge
comment: >-
Class attribute of the card element, e.g. “w-50”.
color:
type: select
optional: true
parent: cascade
comment: >-
Theme color of the card. By default, no color is specified.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
- white
- black
- body
- body-tertiary
padding:
type: select
optional: true
default: auto
parent: cascade
comment: >-
Padding of the content.
options:
values:
- "0"
- "1"
- "2"
- "3"
- "4"
- "5"
- "auto"
gutter:
type: select
optional: true
default: "0"
parent: cascade
comment: >-
Gutter between columns in a group.
options:
values:
- "0"
- "1"
- "2"
- "3"
- "4"
- "5"
header:
type: select
optional: true
default: full
parent: cascade
comment: >-
Header components of the card, displayed in small caps.
options:
values:
- full
- publication
- tags
- none
footer:
type: select
optional: true
default: none
parent: cascade
comment: >-
Footer components of the card, displayed in small caps.
options:
values:
- full
- publication
- tags
- none
description:
type:
- string
- template.HTML
optional: true
parent: cascade
comment: >-
Description of the card.
group: partial
loading:
type: select
optional: true
default: eager
parent: cascade
comment: >-
Loading behavior of the image. The loading of lazily loaded images is
deferred until the image is within scrolling range of the viewport. This
should reduce the initial loading time of the website. It is recommended
to lazily load only those images that are below the page fold.
options:
values:
- lazy
- eager
group: partial
thumbnail:
type: path
optional: true
parent: cascade
comment: >-
Thumbnail image url, displayed on top or the left of the card.
ratio:
type: select
optional: true
parent: cascade
comment: >-
Ratio of the thumbnail image, defaults to `16x9` (stacked orientation)
or `1x1` (horizontal orientation).
options:
values:
- 1x1
- 3x2
- 4x3
- 16x9
- 21x9
group: partial
alt:
type: string
optional: true
release: v0.19.0
comment: >-
Alternate text for the thumbnail, uses `title` by default.
icon:
type: string
optional: true
parent: cascade
comment: >-
Font Awesome icon, displayed on top or the left of the card.
orientation:
type: select
optional: true
default: stacked
parent: cascade
comment: >-
Placement of the thumbnail or icon.
options:
values:
- stacked
- horizontal
- horizontal-sm
- none
body:
optional: true
comment: >-
Description of the card.
group: shortcode

View File

@@ -0,0 +1,57 @@
comment: Renders a carousel item with a responsive image.
arguments:
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: false
comment: Context of the current page.
group: partial
src:
type: string
optional: false
comment: Path or url of the image, e.g. `img/example.jpg`.
ratio:
type: string
optional: true
comment: >-
Ratio of the image. If set, the image is resized and cropped to match the
ratio. Else the original aspect ratio of the image is kept.
options:
values:
- 1x1
- 3x2
- 4x3
- 16x9
- 21x9
portrait:
type: bool
optional: true
default: false
comment: >-
Flag to adjust the ratio from landscape to portrait. The image itself
is not rotated, only the crop area is adjusted. Not applicable to vector
graphics.
loading:
type: select
default: eager
optional: true
comment: >-
Loading behavior of the image. The loading of lazily loaded images is
deferred until the image is within scrolling range of the viewport. This
should reduce the initial loading time of the website. It is recommended
to lazily load only those images that are below the pagefold.
options:
values:
- eager
- lazy
caption:
type: string
optional: true
comment: Carousel slide caption.
active:
type: bool
optional: true
comment: >-
Sets the current carousel item as active (only one item at a time). By
default, the first slide is made active.

View File

@@ -0,0 +1,38 @@
comment: >-
Displays a carousel of several responsive images (see the image shortcode for
more details). Add inner <img> elements to define individual image slides.
arguments:
id:
type: string
optional: true
comment: >-
ID of the carousel, defaults to `carousel-` with a sequential number.
ratio:
type: string
optional: true
comment: >-
Ratio of the images. If set, the images are resized and cropped to match the
ratio. Else the original aspect ratio of the image is kept.
options:
values:
- 1x1
- 3x2
- 4x3
- 16x9
- 21x9
portrait:
type: bool
optional: true
default: false
comment: >-
Flag to adjust the ratio from landscape to portrait. The images themselves
are not rotated, only the crop area is adjusted. Not applicable to vector
graphics.
class:
type: string
optional: true
comment: Class attribute of the carousel element, e.g. “w-75”.
body:
type: string
optional: false
comment: Inner <img> elements that define the individual image slides.

View File

@@ -0,0 +1,15 @@
comment: Defines a hidden panel that can be reveiled by a trigger.
arguments:
id:
type: string
optional: false
comment: >-
ID of the collapse element, e.g. `collapse-1`.
class:
type: string
optional: true
comment: Class attribute of the inner panel element, e.g. `p-3`.
body:
type: string
optional: false
comment: Inner <img> elements that define the individual image slides.

View File

@@ -0,0 +1,40 @@
comment: >-
Generates terminal output for either `bash`, `powershell`, or `sql` shell
languages.
arguments:
user:
type: string
optional: true
comment: User to add to the prompt, e.g. `user`.
host:
type: string
optional: true
comment: Host to add to the prompt, e.g. `localhost`.
prompt:
type: string
optional: true
comment: Prompt override, e.g. `PS C:\Users\User>`.
shell:
type: select
optional: true
default: bash
comment: Type of shell
options:
values:
- bash
- powershell
- sql
class:
type: string
optional: true
comment: Class attribute of the command element.
body:
type: string
optional: false
comment: >-
The shell commands and their output. Start a line with `(out)` to specify
an output line. Use the following line continuation characters for each
supported language:
- bash: backslash symbol
- PowerShell: backtick symbol
- sql: `(con)` line suffix

40
data/structures/docs.yml Normal file
View File

@@ -0,0 +1,40 @@
comment: >-
Capture a code snippet from a `toml` or `scss` input file. The shortcode scans for named markers in a local file:
- For `.toml` files, use `# toml-docs-start` and `# toml-docs-end` followed by the snippet name
- For `.scss` files, use `// scss-docs-start` and `// scss-docs-end` followed by the snippet name
The snippet between the two markers is then rendered using syntax highlighting.
arguments:
name:
type: string
optional: false
comment: >-
Name of the code snippet, used to identify the relevant section of the
input file.
file:
type: string
optional: false
comment: >-
Path of the input file. The path is relative to the `basePath` defined in
the `docs` section of the site's parameters. If the file starts with `./`,
the path of the repository is used as base path instead.
show:
type: bool
optional: true
default: true
comment: >-
If unset, shows the panel with the code snippet in collapsed state. By
default, the panel is expanded.
full:
type: bool
optional: true
default: true
comment: >-
If unset, shows the filename only. By default, the full relative path is
shown.
id:
type: string
optional: true
comment: >-
ID of the collapse panel holding the code snippet, defaults to
`docs-collapse-n` with a sequential number `n` starting at `1`.

View File

@@ -0,0 +1,27 @@
comment: >-
Display a code example and render a preview of the same input. The shortcode
accepts the languages supported by Hugo's highlight function.
arguments:
lang:
type: string
optional: true
default: markdown
comment: Language used to display the code.
show_markup:
type: bool
optional: true
default: true
comment: Indicates if the markup should be output in the HTML.
show_preview:
type: bool
optional: true
default: true
comment: Indicates if the preview should be output in the HTML.
class:
type: string
optional: true
comment: Class attributes of the element's container.
body:
type: string
optional: false
comment: The example input.

39
data/structures/file.yml Normal file
View File

@@ -0,0 +1,39 @@
comment: >-
Print the full content of any given file supported by the Chroma syntax
highlighter.
arguments:
path:
type: string
optional: false
comment: >-
Path of the input file. The path is relative to the `basePath` defined in
the `docs` section of the site's parameters. If the file starts with `./`,
the path of the repository is used as base path instead.
lang:
type: string
optional: true
comment: >-
Language to be used by the syntax highlighter. If not set, the
language is derived from the file extension.
show:
type: bool
optional: true
comment: >-
If unset, shows the panel with the code in collapsed state. By default,
the panel is expanded.
full:
type: string
optional: true
comment: >-
If unset, shows the filename only. By default, the full relative path is
shown.
id:
type: string
optional: true
comment: >-
ID of the collapse panel, defaults to `file-collapse-n` with a sequential
number `n` starting at 1.
class:
type: string
optional: true
comment: Class argument of the tab control.

108
data/structures/image.yml Normal file
View File

@@ -0,0 +1,108 @@
comment: >-
Render a local or remote image with responsive image sizing. Images are
resized using default media breakpoints and are converted to webp format. The
image is processed using the quality setting specified in the [imaging]
section of the main config file (defaults to 75). A fallback image is provided
for older browsers. The image is wrapped in a figure if a caption is provided,
else the image is wrapped in a div with a ratio constraint.
If the url starts with `http`, the image is retrieved from an external
location. Else, the url is matched with a page resource and site asset (in
that order). The path of a remote image is rewritten to ensure processed files
are stored in the final '/img' folder.
The partial supports the following bitmap image formats: `png`, `jpeg`, `gif`,
`tiff`, `bmp`, and `webp`. Vector graphics of type `svg` are supported too,
although these images do no support additional processing. This means the
arguments `ratio` and `portrait` have no effect for vector images. Vector
graphics support an optional anchor `#` in their url to denote a symbol
reference.
arguments:
url:
type: string
optional: true
comment: Path or url of the image, e.g. `img/example.jpg`.
src:
type: string
optional: true
position: 0
comment: Alias for url.
group: shortcode
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: true
comment: Page context, used to match page resources.
group: partial
mode:
type: bool
default: false
optional: true
comment: Flag indicating if the image should support color modes.
ratio:
type: string
optional: true
comment: >-
Ratio of the image. If set, the image is resized and cropped to match the
ratio. Else the original aspect ratio of the image is kept. Not applicable
to vector graphics.
options:
values:
- 1x1
- 3x2
- 4x3
- 16x9
- 21x9
portrait:
type: bool
optional: true
default: false
comment: >-
Flag to adjust the ratio from landscape to portrait. The image itself is
not rotated, only the crop area is adjusted. Not applicable to vector
graphics.
loading:
type: select
default: eager
optional: true
comment: >-
Loading behavior of the image. The loading of lazily loaded images is
deferred until the image is within scrolling range of the viewport. This
should reduce the initial loading time of the website. It is recommended
to lazily load only those images that are below the pagefold.
options:
values:
- eager
- lazy
priority:
type: select
default: auto
optional: true
comment: >-
Fetch priority of the image. The priority provides a hint to the browser
on how it should prioritize the fetching of the image relative to other
images. The implementation is experimental and currently only supported by
Chrome, Edge, and Opera.
options:
values:
- high
- low
- auto
group: partial
title:
type: string
optional: true
comment: Alternate text of the image.
caption:
type: string
optional: true
comment: Figure caption.
wrapper:
type: string
optional: true
comment: Class attributes of the wrapper element, e.g. `mx-auto`.
class:
type: string
optional: true
comment: Class attribute of the inner img element, e.g. `rounded`.

30
data/structures/kbd.yml Normal file
View File

@@ -0,0 +1,30 @@
comment: Adds a keyboard input element.
arguments:
title:
type: string
optional: false
position: 0
comment: >-
Title of the keyboard input. In shorthand notation, this is the first (and
only) matched argument.
class:
type: string
optional: true
comment: Class attribute of the keyboard input element.
color:
type: select
default: secondary
optional: true
comment: Theme color of the element.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
- white
- black

74
data/structures/link.yml Normal file
View File

@@ -0,0 +1,74 @@
comment: >-
Generates a link for a given named link or url. The shortcode supports a
single unnamed parameter, or various named parameters. The unnamed parameter
is recognized as a url if it starts with `http`, else it is treated as either
a named link or internal reference (in that order). Any inner text is rendered
as the link title, otherwise it uses the host name (for external links), link
title (for internal links), or anchor name (for any local references
containing a `#`).
arguments:
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: false
group: partial
comment: Context of the current page.
destination:
type: string
optional: false
group: partial
comment: >-
Target destination.
href:
type: string
position: 0
optional: true
comment: >-
Reference to either an external link (if it starts with http), a named
link (if it can be found in params.links), or internal reference.
Both external and internal references may include an anchor `#`.
name:
type: string
optional: true
comment: Alias of href.
url:
type: string
optional: true
comment: Alias of href.
cue:
type: bool
optional: true
comment: >-
Flag to indicate if an external link should show a visual cue, defaults to
setting `main.externalLinks.cue` in the site's parameters.
tab:
type: bool
optional: true
comment: >-
Flag to indicate if an external link should open in a new tab, defaults to
setting `main.externalLinks.tab` in the site's parameters.
case:
type: bool
optional: true
default: true
comment: >-
Flag to indicate if the retrieved title (e.g. no inner text is provided)
of an internal link should use its original case. If false, the title is
set to lower case.
class:
type: string
optional: true
comment: Class attribute of the anchor element.
text:
type:
- string
- template.HTML
optional: true
group: partial
comment: Link title.
body:
type: string
optional: true
group: shortcode
comment: Link title.

27
data/structures/mark.yml Normal file
View File

@@ -0,0 +1,27 @@
comment: Highlights text by applying a background color.
arguments:
class:
type: string
optional: true
comment: Class attribute of the highlight element.
color:
type: select
optional: true
comment: >-
Theme color of the highlight. By default, the highlight uses the color of
the HTML mark function.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
- white
- black
body:
optional: false
comment: Text to be marked.

View File

@@ -0,0 +1,56 @@
comment: >-
Defines an individual nav item.
arguments:
id:
type: string
optional: true
comment: ID of the nav-item.
parent: cascade
parentID:
type: string
optional: false
comment: ID of the parent (e.g. nav control).
group: partial
header:
type: string
optional: false
comment: Header of the nav item.
show:
type: bool
optional: true
comment: >-
Flag to indicate the nav item should be shown. Only one can be shown at a
time.
disabled:
type: bool
optional: true
comment: Flag to indicate the item should be in a disabled state.
fade:
type: bool
optional: true
comment: Flag to make the tab pane fade in.
parent: cascade
class:
type: string
optional: true
comment: Class attribute of the nav item.
body:
type:
- string
- template.HTML
optional: true
comment: The body content of the nav-item, supports Markdown and HTML (if enabled).
group: partial
item_type:
type: select
optional: true
comment: Type of the item to render.
options:
values:
- accordion
- tab-pane
group: partial
body:
optional: false
comment: Content of the nav item.
group: shortcode

82
data/structures/nav.yml Normal file
View File

@@ -0,0 +1,82 @@
comment: >-
Displays a tab group of multiple items. Add nav-item inner elements for each
tab pane.
arguments:
id:
type: string
optional: true
comment: >-
Identifier of the tab group, uses a generated sequence if not specified.
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: false
comment: Context of the current page.
group: partial
list:
type:
- page.Pages
- resource.Resources
optional: true
comment: Array of pages to be rendered as nav items.
group: partial
type:
type: select
optional: true
comment: Type of the tab group.
options:
values:
- tabs
- pills
- underline
- callout
vertical:
type: bool
default: false
optional: true
comment: Flag to show vertical tabs instead of horizontal tabs.
wrap:
type: bool
default: false
optional: true
comment: Flag to enable word wrapping of tab titles.
class:
type: string
optional: true
comment: Class attribute of the tab group, e.g. “nav-fill”.
pane:
type: select
optional: true
default: none
comment: Style of the panes.
options:
values:
- none
- persona
group: partial
width:
type: select
optional: true
default: 100
comment: Responsive width of the tab group.
options:
values:
- 50
- 100
group: partial
loading:
type: select
optional: true
default: eager
parent: cascade
comment: >-
Loading behavior of the image. The loading of lazily loaded images is
deferred until the image is within scrolling range of the viewport. This
should reduce the initial loading time of the website. It is recommended
to lazily load only those images that are below the page fold.
options:
values:
- lazy
- eager
group: partial

102
data/structures/navbar.yml Normal file
View File

@@ -0,0 +1,102 @@
comment: >-
Displays a navigation header with a toggler. The menu items are derived from
the site's configuration. Nested items are supported at one-level depth. The
navigation bar includes a search area and a language switcher if applicable.
arguments:
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: false
comment: Context of the current page.
group: partial
path:
type: path
optional: false
comment: Path of the active page.
group: shortcode
title:
type: string
optional: true
comment: >-
Brand title, displayed when the logo is not set. Defaults to the site's
title.
class:
type: string
optional: true
comment: Class attribute of the navbar container.
color:
type: select
optional: true
comment: Background theme color of the navbar.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
- white
- black
- body
- body-tertiary
id:
type: string
optional: true
comment: >-
ID of the navbar, defaults to `navbar-0`. The id is used by several child
elements, including a color mode switcher, version switcher, and collapse
panel.
menus:
type: string
optional: true
default: main
comment: Name of the menu configuration.
size:
type: select
optional: true
comment: Breakpoint of the navbar toggler.
default: md
options:
values:
- xs
- sm
- md
- lg
- xl
style:
type: select
optional: true
default: light
comment: Style of the navbar.
options:
values:
- light
- dark
mode:
type: bool
optional: true
default: true
comment: >-
Flag to include a color mode switcher, defaults to `true` when dark mode
is enabled.
search:
type: bool
optional: true
default: true
comment: Flag to include a search input.
fixed:
type: bool
optional: true
default: false
comment: Flag to indicate the navbar should stick to the top.
group: partial
logo:
type: path
optional: true
comment: >-
Address of the logo image, defaults to the parameter `logo` set in the
`main` section of the site's parameter configuration.

View File

@@ -0,0 +1,60 @@
comment: >-
Display a custom persona card.
arguments:
path:
type: path
optional: true
comment: >-
Path of the page that defines the card content. You can set `title`,
`href`, `thumbnail` and the inner content individually too.
title:
type:
- string
- template.HTML
optional: true
comment: Title of the card.
class:
type: string
optional: true
comment: Class attribute of the card element, e.g. “w-50”.
color:
type: select
optional: true
default: primary
comment: Theme color of the element.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
- white
- black
- body
- body-tertiary
href:
type:
- string
- template.URL
optional: true
comment: Address for the button or hyperlink.
content:
type:
- string
- template.HTML
optional: true
comment: Content of the card.
group: partial
thumbnail:
type: url
optional: true
comment: Thumbnail image url, displayed on top or the left of the card.
body:
optional: true
comment: >-
Description of the card.
group: shortcode

View File

@@ -0,0 +1,39 @@
comment: >-
Displays a release button that links to a specific release. Use the state to
indicate if it is a new or deprecated feature.
arguments:
version:
type: string
optional: false
comment: Version string, expects semver notation with a `v` prefix.
state:
type: select
optional: true
default: new
comment: State of the feature.
options:
values:
- new
- deprecated
short:
type: bool
optional: true
comment: Flag to indicate the release button should use short notation.
size:
type: select
optional: true
default: md
comment: Size of the button
options:
values:
- sm
- md
- lg
class:
type: string
optional: true
comment: Class attribute of the button element.
inline:
type: bool
optional: true
comment: Flag to render the release button inline (defaults to false).

View File

@@ -0,0 +1,36 @@
comment: >-
Use the spinner shortcode to indicate the loading state of a component or
page. The inner content is used as alternative description.
arguments:
class:
type: string
optional: true
comment: >-
Class attribute of the wrapping element, e.g. “text-center”.
color:
type: select
optional: true
default: primary
comment: >-
Theme color of the element.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
- white
- black
grow:
type: bool
optional: true
default: false
comment: Flag to indicate the spinner is growing instead of rotating.
body:
optional: false
comment: >-
Alternative description.

8
data/structures/sub.yml Normal file
View File

@@ -0,0 +1,8 @@
comment: >-
Displays text in subscript.
arguments:
text:
type: string
optional: false
position: 0
comment: Text to display in subscript.

8
data/structures/sup.yml Normal file
View File

@@ -0,0 +1,8 @@
comment: >-
Displays text in superscript.
arguments:
text:
type: string
optional: false
position: 0
comment: Text to display in superscript.

26
data/structures/table.yml Normal file
View File

@@ -0,0 +1,26 @@
comment: >-
Makes a markdown table responsive. Responsive tables scroll horizontally to
improve their layout on smaller screens.
arguments:
breakpoint:
type: select
optional: true
position: 0
comment: >-
By default, the table shortcode is responsive for all viewports. When a
breakpoint is set, the table will behave normally and not scroll
horizontally from the provided breakpoint and up. Use `none` to disable
this behavior. You can specify multiple breakpoints when using positional
arguments.
options:
values:
- none
- sm
- md
- lg
- xl
- xxl
body:
type: string
optional: false
comment: Table input in markdown format.

View File

@@ -0,0 +1,31 @@
comment: >-
Shows items ordered on a vertical timelime.
arguments:
data:
type: string
optional: false
comment: >-
Filename of the timeline input data. You can omit the file extension. The
file should reside in the data folder.
background:
type: select
optional: true
comment: >-
Border color of the connector dots, defaults to the body background color.
If set, uses a subtle background color that is adaptive to the current
color mode.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
class:
type: string
optional: true
comment: >-
Class attribute of the timeline's container.

28
data/structures/toast.yml Normal file
View File

@@ -0,0 +1,28 @@
comment: >-
Prepares a toast message. Use a trigger to display the message.
arguments:
id:
type: string
optional: true
comment: >-
ID of the toast message, defaults to `toast-message-n` with sequence n.
header:
type: string
optional: true
comment: Header of the toast message. Uses the site title by default.
class:
type: string
optional: true
comment: Class attribute of the toast element.
message:
type:
- string
- template.HTML
optional: false
comment: Toast message.
group: partial
body:
type: string
optional: false
comment: Toast mesage.
group: shortcode

View File

@@ -0,0 +1,50 @@
comment: >-
Displays a tooltip for a link. The inner content is used as hyperlink text.
arguments:
title:
type: string
optional: true
comment: Plain text to display in the tooltip.
href:
type: url
optional: true
comment: Address for the button or hyperlink.
class:
type: string
optional: true
parent: merge
comment: Class attribute of the tooltip's button element.
color:
type: select
optional: true
default: dark
comment: Theme color of the element.
options:
values:
- primary
- secondary
- success
- danger
- warning
- info
- light
- dark
placement:
type: select
optional: true
default: top
comment: Position of the tooltip.
options:
values:
- top
- bottom
- left
- right
spacing:
type: bool
optional: true
default: true
comment: Flag to add spacing to the inline tooltip.
body:
optional: false
comment: Hyperlink text.

View File

@@ -0,0 +1,5 @@
comment: >-
Returns the current version defined in 'package.json` in the repository root,
or in the documentation base path ('params.docs.basePath') if specified. The
returned version includes a 'v' prefix. The partial returns nothing when no
match is found. The partial does not require any arguments.

View File

@@ -0,0 +1,26 @@
comment: >-
Embeds a responsive video player for YouTube videos. Only the ID of the video
is required. In privacy-enhanced mode, YouTube will not store information
about visitors on your website unless the user plays the embedded video.
arguments:
title:
type: string
optional: true
comment: >-
Title of the video.
class:
type: string
optional: true
position: 1
comment: >-
Class attribute of the video wrapper element.
id:
type: string
optional: false
position: 0
comment: ID of the video to be embedded.
autoplay:
type: bool
optional: true
default: false
comment: Flag indicating the video should start playing immediately when loaded.

View File

@@ -6,6 +6,7 @@
canonifyAssetsURLs = false canonifyAssetsURLs = false
footerBelowFold = false footerBelowFold = false
loading = "lazy" loading = "lazy"
breakpoint = "md"
[main.externalLinks] [main.externalLinks]
cue = true cue = true
tab = true tab = true

View File

@@ -344,6 +344,24 @@ As an example, the following shortcode displays a light navigation header.
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->
## Persona
As an example, the following shortcode displays a persona card with a primary color.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* persona thumbnail="/img/creator-1x1.jpg" title="Creators" color="primary" */>}}
As a content creator you value your independence. You like to take control of your
online and offline presence. You want to focus on growing your audience, without
limitations.
Hinode gives you the tools to publish your blog in the way that you want. You have
full ownership and control of your content. That is why content creators choose
Hinode.
{{</* /persona */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Release ## Release
As an example, the following shortcode displays a default release button. As an example, the following shortcode displays a default release button.

View File

@@ -1,9 +1,10 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Fourth post title: Fourth post (excluded from search)
date: 2023-01-01 date: 2023-01-01
description: This is my fourth blog post. description: This is my fourth blog post. It is excluded from the search index.
tags: ["blog"] tags: ["blog"]
searchExclude: true
thumbnail: thumbnail:
url: img/flowers.jpg url: img/flowers.jpg
author: Arvee Marie author: Arvee Marie

View File

@@ -1,10 +1,11 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Quatrième article title: Quatrième article (exclu de la recherche)
slug: quatrieme-article slug: quatrieme-article
date: 2023-01-01 date: 2023-01-01
description: Ceci est mon quatrième article. description: Ceci est mon quatrième article de blog. Il est exclu de l'index de recherche.
tags: ["blog"] tags: ["blog"]
searchExclude: true
thumbnail: thumbnail:
url: img/flowers.jpg url: img/flowers.jpg
author: Arvee Marie author: Arvee Marie

View File

@@ -18,6 +18,10 @@ github.com/gethinode/mod-flexsearch v1.5.1 h1:9fYlnHgiEXckL0EoC0zlSNO7BWZf5yiOro
github.com/gethinode/mod-flexsearch v1.5.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4= github.com/gethinode/mod-flexsearch v1.5.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.6.0 h1:Rjx+GLOByFLmaWD9hZXwmuKN8A89te6BZAIq2c9QBKg= github.com/gethinode/mod-flexsearch v1.6.0 h1:Rjx+GLOByFLmaWD9hZXwmuKN8A89te6BZAIq2c9QBKg=
github.com/gethinode/mod-flexsearch v1.6.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4= github.com/gethinode/mod-flexsearch v1.6.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.7.0 h1:VFTf6iUyT9b47jTDAxh8nVHU1eUBrdxlykaC90lTfqk=
github.com/gethinode/mod-flexsearch v1.7.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.7.1 h1:f4rjKkhleDVzqwUmwP1xZdhjru5VQ9g0MRDz0G6oLyY=
github.com/gethinode/mod-flexsearch v1.7.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-fontawesome v1.2.4 h1:SqE3CQ+boaBIhrVh3MPu4nz0uoHPfEH5t60nNY1CfsI= github.com/gethinode/mod-fontawesome v1.2.4 h1:SqE3CQ+boaBIhrVh3MPu4nz0uoHPfEH5t60nNY1CfsI=
github.com/gethinode/mod-fontawesome v1.2.4/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI= github.com/gethinode/mod-fontawesome v1.2.4/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.2.5 h1:RqkLRj6+s+gM4nKd0IwNMMDA8cRmxfp0fxkVH4FdAGU= github.com/gethinode/mod-fontawesome v1.2.5 h1:RqkLRj6+s+gM4nKd0IwNMMDA8cRmxfp0fxkVH4FdAGU=
@@ -34,6 +38,10 @@ github.com/gethinode/mod-fontawesome v1.5.0 h1:3mW5dnWauuF9wSWXNIY+PPgTNPlc/xQOQ
github.com/gethinode/mod-fontawesome v1.5.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI= github.com/gethinode/mod-fontawesome v1.5.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.5.1 h1:C7goQY4HrEua/lpjC++laydNKBuYo1+307ngn5tyXeM= github.com/gethinode/mod-fontawesome v1.5.1 h1:C7goQY4HrEua/lpjC++laydNKBuYo1+307ngn5tyXeM=
github.com/gethinode/mod-fontawesome v1.5.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI= github.com/gethinode/mod-fontawesome v1.5.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.6.1 h1:iqOgDGdw7Bs4hnzjF/8JsUn10omyKQZTglLqNenT1K0=
github.com/gethinode/mod-fontawesome v1.6.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.7.3 h1:YzRCYSasVRIcImVmTJYjqNJ+KmyNWfm/bMgtM0slvzs=
github.com/gethinode/mod-fontawesome v1.7.3/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-katex v1.0.1/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-katex v1.0.1/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.2 h1:pIG4n3qLl/IVe7BEiwn+GL8r5lOCtF6FDxlcrPKdAXk= github.com/gethinode/mod-katex v1.0.2 h1:pIG4n3qLl/IVe7BEiwn+GL8r5lOCtF6FDxlcrPKdAXk=
github.com/gethinode/mod-katex v1.0.2/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-katex v1.0.2/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
@@ -41,6 +49,8 @@ github.com/gethinode/mod-katex v1.0.3 h1:fvlUWqcUQqv2zRNM2kfmJ6GhXA816Tl1nfVrUkm
github.com/gethinode/mod-katex v1.0.3/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-katex v1.0.3/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.4 h1:NozgWPFnHhx1W+E9DnwMTRpvxPbdqdANEtwp9N3/mj8= github.com/gethinode/mod-katex v1.0.4 h1:NozgWPFnHhx1W+E9DnwMTRpvxPbdqdANEtwp9N3/mj8=
github.com/gethinode/mod-katex v1.0.4/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-katex v1.0.4/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.5 h1:AVhcTINYory0ygChQERf8PcyJkbT1oqhmLRF6ESnWOY=
github.com/gethinode/mod-katex v1.0.5/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-leaflet v0.3.4 h1:oY+YQ0JiJuhFQNrk9XgFdg0NMsTUQPXNfnILp4ia4r4= github.com/gethinode/mod-leaflet v0.3.4 h1:oY+YQ0JiJuhFQNrk9XgFdg0NMsTUQPXNfnILp4ia4r4=
github.com/gethinode/mod-leaflet v0.3.4/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk= github.com/gethinode/mod-leaflet v0.3.4/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
github.com/gethinode/mod-leaflet v0.3.5 h1:69Bv/6zRXhbcTzo7TMr58h3ry47srHRpM1k81LrLbYU= github.com/gethinode/mod-leaflet v0.3.5 h1:69Bv/6zRXhbcTzo7TMr58h3ry47srHRpM1k81LrLbYU=

View File

@@ -14,6 +14,7 @@
"footer", "footer",
"form", "form",
"h2", "h2",
"h3",
"head", "head",
"hr", "hr",
"html", "html",
@@ -38,8 +39,14 @@
"sub", "sub",
"sup", "sup",
"svg", "svg",
"table",
"tbody",
"td",
"th",
"thead",
"time", "time",
"title", "title",
"tr",
"ul", "ul",
"use" "use"
], ],
@@ -113,19 +120,24 @@
"carousel-item", "carousel-item",
"chroma", "chroma",
"col", "col",
"col-10",
"col-12", "col-12",
"col-2",
"col-3", "col-3",
"col-4", "col-4",
"col-6", "col-6",
"col-8", "col-8",
"col-9", "col-9",
"col-auto", "col-auto",
"col-lg-2",
"col-lg-4", "col-lg-4",
"col-lg-8", "col-lg-8",
"col-md-10", "col-md-10",
"col-md-2", "col-md-2",
"col-md-3",
"col-md-4", "col-md-4",
"col-md-8", "col-md-8",
"col-md-9",
"col-md-auto", "col-md-auto",
"col-sm-12", "col-sm-12",
"col-sm-3", "col-sm-3",
@@ -141,6 +153,7 @@
"d-grid", "d-grid",
"d-inline", "d-inline",
"d-inline-flex", "d-inline-flex",
"d-lg-block",
"d-md-block", "d-md-block",
"d-md-flex", "d-md-flex",
"d-md-none", "d-md-none",
@@ -209,6 +222,8 @@
"form-control", "form-control",
"fs-3", "fs-3",
"fs-5", "fs-5",
"fs-6",
"fs-md-5",
"fw-bold", "fw-bold",
"fw-semibold", "fw-semibold",
"g-0", "g-0",
@@ -270,6 +285,7 @@
"mx-md-0", "mx-md-0",
"mx-md-2", "mx-md-2",
"my-2", "my-2",
"my-4",
"my-auto", "my-auto",
"my-md-0", "my-md-0",
"my-md-auto", "my-md-auto",
@@ -305,6 +321,8 @@
"pb-5", "pb-5",
"pb-md-0", "pb-md-0",
"pe-3", "pe-3",
"pe-5",
"persona",
"position-absolute", "position-absolute",
"position-fixed", "position-fixed",
"position-relative", "position-relative",
@@ -315,6 +333,10 @@
"ps-xl-3", "ps-xl-3",
"pt-5", "pt-5",
"pt-md-3", "pt-md-3",
"ptw-3",
"ptw-5",
"ptw-lg-5",
"ptw-sm-4",
"px-4", "px-4",
"px-xxl-0", "px-xxl-0",
"py-1", "py-1",
@@ -326,12 +348,14 @@
"ratio-16x9", "ratio-16x9",
"rounded", "rounded",
"rounded-2", "rounded-2",
"rounded-5",
"rounded-bottom", "rounded-bottom",
"rounded-pill", "rounded-pill",
"rounded-top", "rounded-top",
"row", "row",
"row-cols-1", "row-cols-1",
"row-cols-2", "row-cols-2",
"row-cols-lg-3",
"row-cols-md-2", "row-cols-md-2",
"row-cols-md-3", "row-cols-md-3",
"row-cols-sm-2", "row-cols-sm-2",
@@ -341,10 +365,13 @@
"search-suggestions", "search-suggestions",
"shadow", "shadow",
"show", "show",
"sidebar-overflow",
"slide", "slide",
"small", "small",
"spinner-border", "spinner-border",
"start-0",
"start-100", "start-100",
"start-50",
"sticky-top", "sticky-top",
"stretched-link", "stretched-link",
"svg-inline--fa", "svg-inline--fa",
@@ -352,6 +379,8 @@
"syntax-highlight", "syntax-highlight",
"tab-content", "tab-content",
"tab-pane", "tab-pane",
"table",
"table-responsive",
"tag-link", "tag-link",
"text-bg-body", "text-bg-body",
"text-bg-body-tertiary", "text-bg-body-tertiary",
@@ -403,8 +432,11 @@
"toc-sidebar", "toc-sidebar",
"toggler-icon", "toggler-icon",
"top-0", "top-0",
"top-25",
"top-50",
"top-bar", "top-bar",
"translate-middle", "translate-middle",
"translate-middle-y",
"visually-hidden", "visually-hidden",
"vr", "vr",
"w-100", "w-100",
@@ -484,6 +516,7 @@
"navbar-sample-collapse", "navbar-sample-collapse",
"navigation", "navigation",
"notification", "notification",
"persona",
"projecten", "projecten",
"projects", "projects",
"projets", "projets",

6
go.mod
View File

@@ -5,9 +5,9 @@ go 1.19
require ( require (
github.com/airbnb/lottie-web v5.12.2+incompatible // indirect github.com/airbnb/lottie-web v5.12.2+incompatible // indirect
github.com/gethinode/mod-bootstrap v1.2.2 // indirect github.com/gethinode/mod-bootstrap v1.2.2 // indirect
github.com/gethinode/mod-flexsearch v1.6.0 // indirect github.com/gethinode/mod-flexsearch v1.7.1 // indirect
github.com/gethinode/mod-fontawesome v1.5.1 // indirect github.com/gethinode/mod-fontawesome v1.7.3 // indirect
github.com/gethinode/mod-katex v1.0.4 // indirect github.com/gethinode/mod-katex v1.0.5 // indirect
github.com/gethinode/mod-leaflet v0.3.5 // indirect github.com/gethinode/mod-leaflet v0.3.5 // indirect
github.com/gethinode/mod-lottie v1.3.0 // indirect github.com/gethinode/mod-lottie v1.3.0 // indirect
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3 // indirect github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3 // indirect

10
go.sum
View File

@@ -36,6 +36,10 @@ github.com/gethinode/mod-flexsearch v1.5.1 h1:9fYlnHgiEXckL0EoC0zlSNO7BWZf5yiOro
github.com/gethinode/mod-flexsearch v1.5.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4= github.com/gethinode/mod-flexsearch v1.5.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.6.0 h1:Rjx+GLOByFLmaWD9hZXwmuKN8A89te6BZAIq2c9QBKg= github.com/gethinode/mod-flexsearch v1.6.0 h1:Rjx+GLOByFLmaWD9hZXwmuKN8A89te6BZAIq2c9QBKg=
github.com/gethinode/mod-flexsearch v1.6.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4= github.com/gethinode/mod-flexsearch v1.6.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.7.0 h1:VFTf6iUyT9b47jTDAxh8nVHU1eUBrdxlykaC90lTfqk=
github.com/gethinode/mod-flexsearch v1.7.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.7.1 h1:f4rjKkhleDVzqwUmwP1xZdhjru5VQ9g0MRDz0G6oLyY=
github.com/gethinode/mod-flexsearch v1.7.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-fontawesome v1.0.2 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg= github.com/gethinode/mod-fontawesome v1.0.2 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg=
github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI= github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.1.0 h1:rsDzUI+3ZlS/do2ff3ne8/z3KwHeysmuA+WsXlumXXk= github.com/gethinode/mod-fontawesome v1.1.0 h1:rsDzUI+3ZlS/do2ff3ne8/z3KwHeysmuA+WsXlumXXk=
@@ -64,6 +68,10 @@ github.com/gethinode/mod-fontawesome v1.5.0 h1:3mW5dnWauuF9wSWXNIY+PPgTNPlc/xQOQ
github.com/gethinode/mod-fontawesome v1.5.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI= github.com/gethinode/mod-fontawesome v1.5.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.5.1 h1:C7goQY4HrEua/lpjC++laydNKBuYo1+307ngn5tyXeM= github.com/gethinode/mod-fontawesome v1.5.1 h1:C7goQY4HrEua/lpjC++laydNKBuYo1+307ngn5tyXeM=
github.com/gethinode/mod-fontawesome v1.5.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI= github.com/gethinode/mod-fontawesome v1.5.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.6.1 h1:iqOgDGdw7Bs4hnzjF/8JsUn10omyKQZTglLqNenT1K0=
github.com/gethinode/mod-fontawesome v1.6.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.7.3 h1:YzRCYSasVRIcImVmTJYjqNJ+KmyNWfm/bMgtM0slvzs=
github.com/gethinode/mod-fontawesome v1.7.3/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-katex v1.0.0 h1:me/3dIIZBkfk1mRIFt8QiAGYwYDoSG5bc2hHRtIutFc= github.com/gethinode/mod-katex v1.0.0 h1:me/3dIIZBkfk1mRIFt8QiAGYwYDoSG5bc2hHRtIutFc=
github.com/gethinode/mod-katex v1.0.0/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-katex v1.0.0/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.1 h1:809QUztxmKgMNchU+v03iMO7Ma+ISc3ZzhXYauc21rs= github.com/gethinode/mod-katex v1.0.1 h1:809QUztxmKgMNchU+v03iMO7Ma+ISc3ZzhXYauc21rs=
@@ -74,6 +82,8 @@ github.com/gethinode/mod-katex v1.0.3 h1:fvlUWqcUQqv2zRNM2kfmJ6GhXA816Tl1nfVrUkm
github.com/gethinode/mod-katex v1.0.3/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-katex v1.0.3/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.4 h1:NozgWPFnHhx1W+E9DnwMTRpvxPbdqdANEtwp9N3/mj8= github.com/gethinode/mod-katex v1.0.4 h1:NozgWPFnHhx1W+E9DnwMTRpvxPbdqdANEtwp9N3/mj8=
github.com/gethinode/mod-katex v1.0.4/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-katex v1.0.4/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.5 h1:AVhcTINYory0ygChQERf8PcyJkbT1oqhmLRF6ESnWOY=
github.com/gethinode/mod-katex v1.0.5/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-leaflet v0.2.3 h1:QQI4h+IH0jZ7fx4q0um2YIEiYBoW3OAfW8qHzbRCDPk= github.com/gethinode/mod-leaflet v0.2.3 h1:QQI4h+IH0jZ7fx4q0um2YIEiYBoW3OAfW8qHzbRCDPk=
github.com/gethinode/mod-leaflet v0.2.3/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk= github.com/gethinode/mod-leaflet v0.2.3/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
github.com/gethinode/mod-leaflet v0.3.1 h1:H5MaOa+BB1KuVw7abTqfIn/SNzzRsAyx/WQoSe+2Ykc= github.com/gethinode/mod-leaflet v0.3.1 h1:H5MaOa+BB1KuVw7abTqfIn/SNzzRsAyx/WQoSe+2Ykc=

View File

@@ -45,8 +45,10 @@
"col-12", "col-12",
"col-6", "col-6",
"col-md-2", "col-md-2",
"col-md-3",
"col-md-4", "col-md-4",
"col-md-8", "col-md-8",
"col-md-9",
"col-sm-12", "col-sm-12",
"collapse", "collapse",
"collapsed", "collapsed",
@@ -147,7 +149,6 @@
"row-cols-1", "row-cols-1",
"row-cols-2", "row-cols-2",
"row-cols-md-2", "row-cols-md-2",
"row-cols-sm-2",
"row-cols-sm-3", "row-cols-sm-3",
"search", "search",
"search-input", "search-input",

View File

@@ -30,9 +30,9 @@
- id: shareSystem - id: shareSystem
translation: "Betriebssystem" translation: "Betriebssystem"
- id: copyToClipboard - id: copyToClipboard
translation: "In Zwischenablage kopieren" translation: "In die Zwischenablage kopieren"
- id: copiedToClipboard - id: copiedToClipboard
translation: "Der Text befindet sich in die Zwischenablage" translation: "befindet sich in der Zwischenablage"
- id: link - id: link
translation: "Link zur Webseite" translation: "Link zur Webseite"
- id: code - id: code

View File

@@ -30,6 +30,16 @@
- id: emptyTags - id: emptyTags
translation: "No tags found" translation: "No tags found"
# Languages
- id: lang_de
translation: "German"
- id: lang_en
translation: "English"
- id: lang_nl
translation: "Dutch"
- id: lang_fr
translation: "French"
# Sharing # Sharing
- id: shareLink - id: shareLink
translation: "Share via {{ . }}" translation: "Share via {{ . }}"
@@ -123,3 +133,17 @@
translation: "Show" translation: "Show"
- id: comments - id: comments
translation: "Comments" translation: "Comments"
# Arguments
- id: name
translation: "Name"
- id: type
translation: "Type"
- id: required
translation: "Required"
- id: default
translation: "Default"
- id: comment
translation: "Comment"
- id: supportedValues
translation: "Supported values"

View File

@@ -25,6 +25,20 @@
translation: "Articles" translation: "Articles"
- id: more - id: more
translation: "Plus {{ . }}" translation: "Plus {{ . }}"
- id: emptyList
translation: "Aucun articles trouvé"
- id: emptyTags
translation: "Aucun tags trouvé"
# Languages
- id: lang_de
translation: "Allemand"
- id: lang_en
translation: "Anglais"
- id: lang_nl
translation: "Néerlandais"
- id: lang_fr
translation: "Français"
# Sharing # Sharing
- id: shareLink - id: shareLink
@@ -39,6 +53,8 @@
translation: "Lien" translation: "Lien"
- id: code - id: code
translation: "Code" translation: "Code"
- id: download
translation: "Télécharger l'article"
# Pagination # Pagination
- id: paginationNav - id: paginationNav
@@ -75,6 +91,8 @@
translation: "Sur cette page" translation: "Sur cette page"
- id: seeAlso - id: seeAlso
translation: "Voir également" translation: "Voir également"
- id: sectionMenu
translation: "Selectionner un topic"
# Sidebar # Sidebar
- id: toggleSidebar - id: toggleSidebar
@@ -115,3 +133,17 @@
translation: "Afficher" translation: "Afficher"
- id: comments - id: comments
translation: "Commentaires" translation: "Commentaires"
# Arguments
- id: name
translation: "Name"
- id: type
translation: "Type"
- id: required
translation: "Required"
- id: default
translation: "Default"
- id: comment
translation: "Comment"
- id: supportedValues
translation: "Supported values"

View File

@@ -28,6 +28,16 @@
- id: emptyTags - id: emptyTags
translation: "Geen tags gevonden" translation: "Geen tags gevonden"
# Languages
- id: lang_de
translation: "Duits"
- id: lang_en
translation: "Engels"
- id: lang_nl
translation: "Nederlands"
- id: lang_fr
translation: "Frans"
# Sharing # Sharing
- id: shareLink - id: shareLink
translation: "Delen via {{ . }}" translation: "Delen via {{ . }}"
@@ -121,3 +131,18 @@
translation: "Tonen" translation: "Tonen"
- id: comments - id: comments
translation: "Reacties" translation: "Reacties"
# Arguments
- id: name
translation: "Naam"
- id: type
translation: "Type"
- id: required
translation: "Verplicht"
- id: default
translation: "Standaardwaarde"
- id: comment
translation: "Toelichting"
- id: supportedValues
translation: "Toegestane waarden"

135
i18n/zh-hans.yaml Normal file
View File

@@ -0,0 +1,135 @@
# Single pages
- id: postedOnDate
translation: "发布于 {{ . }}"
- id: lastModified
translation: "最后修改于 {{ . }}"
- id: read
translation: "阅读"
- id: minutesShort
translation: "分钟"
- id: words
translation: "字"
- id: photoFull
translation: "照片由 %s 于 %s 拍摄"
- id: photoShort
translation: "照片由 {{ . }} 拍摄"
- id: photoOn
translation: "于"
- id: draft
translation: "草稿"
# List pages
- id: article
translation: "文章"
- id: articles
translation: "文章"
- id: more
translation: "更多 {{ . }}"
- id: emptyList
translation: "没有找到文章"
- id: emptyTags
translation: "没有找到标签"
# Languages
- id: lang_de
translation: "German"
- id: lang_en
translation: "English"
- id: lang_nl
translation: "Dutch"
- id: lang_fr
translation: "French"
# Sharing
- id: shareLink
translation: "分享至 {{ . }}"
- id: shareSystem
translation: "系统"
- id: copyToClipboard
translation: "复制到剪贴板"
- id: copiedToClipboard
translation: "已复制到剪贴板"
- id: link
translation: "链接"
- id: code
translation: "代码"
- id: download
translation: "下载文章"
# Pagination
- id: paginationNav
translation: "页面导航"
- id: paginationPrevious
translation: "上一页"
- id: paginationNext
translation: "下一页"
- id: paginationFirst
translation: "第一页"
- id: paginationLast
translation: "最后一页"
# Navigation
- id: colorMode
translation: "切换主题"
- id: colorLight
translation: "亮色"
- id: colorDark
translation: "暗色"
- id: colorAuto
translation: "自动"
- id: toggleMainNav
translation: "切换主导航"
- id: home
translation: "首页"
- id: languageSwitcherLabel
translation: "语言"
- id: close
translation: "关闭"
# Table of contents
- id: toc
translation: "本页目录"
- id: seeAlso
translation: "参见"
- id: sectionMenu
translation: "选择一个主题"
# Sidebar
- id: toggleSidebar
translation: "切换侧边栏导航"
# Feature
- id: addedFeature
translation: "新增于 {{ . }}"
- id: deprecatedFeature
translation: "已弃用于 {{ . }}"
# Versioning
- id: latest
translation: "最新"
- id: allVersions
translation: "所有版本"
- id: newerVersionAlert
translation: "有一个更新版本的 {{ . }}!"
# 404 page
- id: pageNotFound
translation: "您访问的页面不存在或发生了其他错误。请返回我们的{{ . }}。"
- id: pageNotFoundTitle
translation: "页面未找到"
- id: pageNotFoundHome
translation: "首页"
# Footer
- id: copyright
translation: "Copyright"
- id: rights
translation: "版权所有"
- id: poweredBy
translation: "由 {{ . }} 提供支持。"
# Comments
- id: show
translation: "显示"
- id: comments
translation: "评论"

135
i18n/zh-hant.yaml Normal file
View File

@@ -0,0 +1,135 @@
# Single pages
- id: postedOnDate
translation: "發佈於 {{ . }}"
- id: lastModified
translation: "最後修改於 {{ . }}"
- id: read
translation: "閱讀"
- id: minutesShort
translation: "分鐘"
- id: words
translation: "字"
- id: photoFull
translation: "照片由 %s 於 %s 拍攝"
- id: photoShort
translation: "照片由 {{ . }} 拍攝"
- id: photoOn
translation: "於"
- id: draft
translation: "草稿"
# List pages
- id: article
translation: "文章"
- id: articles
translation: "文章"
- id: more
translation: "更多 {{ . }}"
- id: emptyList
translation: "沒有找到文章"
- id: emptyTags
translation: "沒有找到標籤"
# Languages
- id: lang_de
translation: "German"
- id: lang_en
translation: "English"
- id: lang_nl
translation: "Dutch"
- id: lang_fr
translation: "French"
# Sharing
- id: shareLink
translation: "分享至 {{ . }}"
- id: shareSystem
translation: "系統"
- id: copyToClipboard
translation: "複製到剪貼板"
- id: copiedToClipboard
translation: "已複製到剪貼板"
- id: link
translation: "連結"
- id: code
translation: "程式碼"
- id: download
translation: "下載文章"
# Pagination
- id: paginationNav
translation: "頁面導航"
- id: paginationPrevious
translation: "上一頁"
- id: paginationNext
translation: "下一頁"
- id: paginationFirst
translation: "第一頁"
- id: paginationLast
translation: "最後一頁"
# Navigation
- id: colorMode
translation: "切換主題"
- id: colorLight
translation: "亮色"
- id: colorDark
translation: "暗色"
- id: colorAuto
translation: "自動"
- id: toggleMainNav
translation: "切換主導航"
- id: home
translation: "首頁"
- id: languageSwitcherLabel
translation: "語言"
- id: close
translation: "關閉"
# Table of contents
- id: toc
translation: "本頁目錄"
- id: seeAlso
translation: "參見"
- id: sectionMenu
translation: "選擇一個主題"
# Sidebar
- id: toggleSidebar
translation: "切換側邊欄導航"
# Feature
- id: addedFeature
translation: "新增於 {{ . }}"
- id: deprecatedFeature
translation: "已棄用於 {{ . }}"
# Versioning
- id: latest
translation: "最新"
- id: allVersions
translation: "所有版本"
- id: newerVersionAlert
translation: "有一個更新版本的 {{ . }}!"
# 404 page
- id: pageNotFound
translation: "您訪問的頁面不存在或發生了其他錯誤。請返回我們的{{ . }}。"
- id: pageNotFoundTitle
translation: "頁面未找到"
- id: pageNotFoundHome
translation: "首頁"
# Footer
- id: copyright
translation: "Copyright"
- id: rights
translation: "版權所有"
- id: poweredBy
translation: "由 {{ . }} 提供支持。"
# Comments
- id: show
translation: "顯示"
- id: comments
translation: "評論"

View File

@@ -1,5 +1,12 @@
{{- define "partials/optional-scripts.html" -}} {{- define "partials/optional-scripts.html" -}}
{{- $modules := site.Params.modules.optional | intersect .Params.modules -}} {{ $page_modules := slice }}
{{ if reflect.IsMap .Params.modules }}
{{ $page_modules = .Params.modules }}
{{ else }}
{{ $page_modules = $page_modules | append .Params.modules }}
{{ end }}
{{- $modules := site.Params.modules.optional | intersect $page_modules -}}
{{- range $index, $mod := $modules -}} {{- range $index, $mod := $modules -}}
{{- $filename := printf "js/%s.bundle.js" $mod -}} {{- $filename := printf "js/%s.bundle.js" $mod -}}
{{- $match := printf "js/modules/%s/**.js" $mod -}} {{- $match := printf "js/modules/%s/**.js" $mod -}}
@@ -48,6 +55,9 @@
{{ $sections := partial "utilities/GetSections.html" (dict "page" . "loading" $loading) }} {{ $sections := partial "utilities/GetSections.html" (dict "page" . "loading" $loading) }}
{{- $.Scratch.Set "sections" $sections -}} {{- $.Scratch.Set "sections" $sections -}}
{{- /* Define main breakpoint */ -}}
{{- $.Scratch.Set "breakpoint" (partial "utilities/GetBreakpoint.html") }}
<!doctype html> <!doctype html>
<html lang="{{ .Site.Language.Lang }}" class="no-js"> <html lang="{{ .Site.Language.Lang }}" class="no-js">
<head> <head>

View File

@@ -11,7 +11,7 @@
<div class="container-xxl p-4 px-xxl-0"> <div class="container-xxl p-4 px-xxl-0">
{{- if ne $layout "featured" -}} {{- if ne $layout "featured" -}}
{{ if and (not $page.IsHome) site.Params.navigation.breadcrumb }} {{ if and (not $page.IsHome) site.Params.navigation.breadcrumb }}
<div>{{ partial "assets/breadcrumb.html" $page }}</div> <div>{{ partial "assets/breadcrumb.html" (dict "page" $page) }}</div>
{{ end -}} {{ end -}}
{{- end -}} {{- end -}}

View File

@@ -1,9 +1,10 @@
{{- $sections := $.Scratch.Get "sections" -}} {{- $sections := $.Scratch.Get "sections" -}}
{{- $fullCover := $.Scratch.Get "fullCover" -}} {{- $fullCover := $.Scratch.Get "fullCover" -}}
{{- $breakpoint := $.Scratch.Get "breakpoint" -}}
{{- $layout := .Params.layout -}} {{- $layout := .Params.layout -}}
<div class="row row-cols-1 row-cols-sm-2"> <div class="row row-cols-1 row-cols-{{ $breakpoint.current }}-2">
<div class="col col-sm-12 col-md-8"> <div class="col-12 col-{{ $breakpoint.current }}-9">
{{ if not .IsHome }} {{ if not .IsHome }}
{{ with .Title }}<p id="{{ anchorize . }}" class="display-4 mt-5{{ if and $.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }} {{ with .Title }}<p id="{{ anchorize . }}" class="display-4 mt-5{{ if and $.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
{{ end }} {{ end }}
@@ -15,9 +16,12 @@
{{- if $fullCover }}{{ $loading = site.Params.main.loading }}{{ end }} {{- if $fullCover }}{{ $loading = site.Params.main.loading }}{{ end }}
{{ end }} {{ end }}
{{- $content := partial "utilities/ProcessContent" (dict "page" . "raw" .RawContent "loading" $loading) -}} {{- $content := partial "utilities/ProcessContent" (dict "page" . "raw" .RawContent "loading" $loading) -}}
{{ $content | safeHTML }} {{- $content | safeHTML -}}
{{ if and (and $sections (eq (len $sections) 1)) (not $content) }} {{ if and (and $sections (eq (len $sections) 1)) (not $content) }}
<p class="pt-4">{{- T "emptyList" }}.</p> <p class="pt-4">{{- T "emptyList" }}.</p>
{{ end }} {{ end }}
</div> </div>
<div class="col col-{{ $breakpoint.current }}-3 d-none d-{{ $breakpoint.current }}-block">
{{/* Empty in default layout */}}
</div>
</div> </div>

View File

@@ -1,10 +1,11 @@
{{- define "partials/single-main.html" -}} {{- define "partials/single-main.html" -}}
{{ if .Site.Params.navigation.breadcrumb }}{{ partial "assets/breadcrumb.html" . }}{{ end -}} {{- $breakpoint := $.Scratch.Get "breakpoint" -}}
{{ if .Site.Params.navigation.breadcrumb }}{{ partial "assets/breadcrumb.html" (dict "page" .) }}{{ end -}}
{{ .Render "single/header" }} {{ .Render "single/header" }}
{{- if and .Site.Params.navigation.toc .Params.includeToc | default true -}} {{- if and .Site.Params.navigation.toc .Params.includeToc | default true -}}
<div class="d-md-none pb-5">{{ partial "assets/toc-dropdown.html" . }}</div> <div class="d-{{ $breakpoint.current }}-none pb-5">{{ partial "assets/toc-dropdown.html" . }}</div>
{{- end -}} {{- end -}}
{{ .Render "single/body" }} {{ .Render "single/body" }}
@@ -18,6 +19,7 @@
{{ define "main" -}} {{ define "main" -}}
{{- $menu := .Scratch.Get "sidebar" -}} {{- $menu := .Scratch.Get "sidebar" -}}
{{- $version := .Scratch.Get "version" -}} {{- $version := .Scratch.Get "version" -}}
{{- $breakpoint := $.Scratch.Get "breakpoint" -}}
{{ $sidebar := "" }} {{ $sidebar := "" }}
{{- $hasSidebar := .Site.Params.navigation.sidebar | default true -}} {{- $hasSidebar := .Site.Params.navigation.sidebar | default true -}}
@@ -38,34 +40,24 @@
{{ end }} {{ end }}
<div class="container-xxl flex-fill p-4 px-xxl-0"> <div class="container-xxl flex-fill p-4 px-xxl-0">
{{ if and $menu $hasSidebar -}} {{ if $hasSidebar -}}
<div class="row row-cols-md-2 row-cols-lg-3"> <div class="row row-cols-1 row-cols-{{ $breakpoint.current }}-2 row-cols-{{ $breakpoint.next }}-3">
<div class="col col-md-3 col-lg-2 d-none pt-5 d-md-block sidebar-overflow sticky-top"> <div class="col col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.next }}-block sidebar-overflow sticky-top pt-5">
{{ $sidebar | safeHTML }} {{ $sidebar | safeHTML }}
</div> </div>
<div class="col col-md-9 col-lg-8 mb-5 p-4"> <div class="col-12 col-{{ $breakpoint.current }}-9 col-{{ $breakpoint.next }}-8 mb-5 p-4">
{{ partial "partials/single-main.html" . }} {{ partial "partials/single-main.html" . }}
</div> </div>
<div class="col col-lg-2 d-none d-lg-block pt-5"> <div class="col col-{{ $breakpoint.current }}-3 col-{{ $breakpoint.next }}-2 d-none d-{{ $breakpoint.current }}-block pt-5">
{{ $toc | safeHTML }}
</div>
</div>
{{ else if $hasSidebar }}
<div class="row row-cols-1 row-cols-sm-3">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-12 col-md-8">
{{ partial "partials/single-main.html" . }}
</div>
<div class="col col-md-2 d-none d-md-block">
{{ $toc | safeHTML }} {{ $toc | safeHTML }}
</div> </div>
</div> </div>
{{ else }} {{ else }}
<div class="row row-cols-1 row-cols-sm-2"> <div class="row row-cols-1 row-cols-{{ $breakpoint.current }}-2">
<div class="col col-sm-12 col-md-9"> <div class="col col-{{ $breakpoint.prev }}-12 col-{{ $breakpoint.current }}-9">
{{ partial "partials/single-main.html" . }} {{ partial "partials/single-main.html" . }}
</div> </div>
<div class="col col-md-3 d-none d-md-block"> <div class="col col-{{ $breakpoint.current }}-3 d-none d-{{ $breakpoint.current }}-block">
{{ $toc | safeHTML }} {{ $toc | safeHTML }}
</div> </div>
</div> </div>

View File

@@ -21,9 +21,18 @@
<div class="toc toc-sidebar mb-5 my-md-0 ps-xl-3 mb-lg-5 p-3 text-body-secondary sticky-top"> <div class="toc toc-sidebar mb-5 my-md-0 ps-xl-3 mb-lg-5 p-3 text-body-secondary sticky-top">
{{ with $download }} {{ with $download }}
{{ $title := (T "download" ) }}
{{ $lang := strings.TrimPrefix "." (path.Ext (path.BaseName .)) }}
{{ if and $lang (ne (string site.LanguageCode) $lang) }}
{{ range site.Languages }}
{{ if eq .LanguageCode $lang }}
{{ $title = printf "%s (%s)" (T "download") (T (printf "lang_%s" .LanguageCode)) }}
{{ end }}
{{ end }}
{{ end }}
<div class="mb-5 text-center"> <div class="mb-5 text-center">
{{ $attr := dict "download" (path.Base .) }} {{ $attr := dict "download" (path.Base .) }}
{{ partial "assets/button.html" (dict "href" . "title" (T "download" ) "color" "primary" "outline" "true" "icon" "fas download" "size" "sm" "attributes" $attr) }} {{ partial "assets/button.html" (dict "href" . "title" $title "color" "primary" "outline" "true" "icon" "fas download" "size" "sm" "attributes" $attr) }}
</div> </div>
{{ end }} {{ end }}

View File

@@ -1,6 +1,24 @@
<!--
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
Visit gethinode.com/license for more details.
-->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "breadcrumb" "args" . "group" "partial") }}
{{- errorf "partial [assets/breadcrumb.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{ $page := .page }}
<!-- Main code -->
<nav aria-label="breadcrumb"> <nav aria-label="breadcrumb">
<ol class="breadcrumb"> <ol class="breadcrumb">
{{- range $index, $item := .Page.Ancestors.Reverse -}} {{- range $index, $item := $page.Ancestors.Reverse -}}
{{- $title := .LinkTitle -}} {{- $title := .LinkTitle -}}
{{- if .IsHome }}{{ $title = T "home" }}{{ end -}} {{- if .IsHome }}{{ $title = T "home" }}{{ end -}}
{{- $address := or .RelPermalink (.Params.Redirect | relLangURL) -}} {{- $address := or .RelPermalink (.Params.Redirect | relLangURL) -}}
@@ -10,6 +28,6 @@
<li class="breadcrumb-item">{{ $title }}</li> <li class="breadcrumb-item">{{ $title }}</li>
{{ end }} {{ end }}
{{- end -}} {{- end -}}
<li class="breadcrumb-item active" aria-current="page">{{ .Page.LinkTitle }}</li> <li class="breadcrumb-item active" aria-current="page">{{ $page.LinkTitle }}</li>
</ol> </ol>
</nav> </nav>

View File

@@ -1,73 +1,32 @@
<!-- <!--
Displays a button. The shortcode supports the following arguments: Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
"title" Title of the button, required unless icon is set. Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
"href" Optional address for the button or hyperlink. Visit gethinode.com/license for more details.
"id" Optional id of the button, to be used in the DOM.
"state" Optional state of the button, either "enabled" (default), "disabled", "active", or "inactive".
"size" Optional size of the button, either "sm", "md" (default), or "lg".
"color" Optional theme color of the element, either "primary" (default), "secondary", "success",
"danger", "warning", "info", "light", "dark", "white", or "black".
"outline" Optional flag indicating the button should be outlined, either "false" (default) or "true".
"badge" Optional positioned badge to display on top of the button.
"label" Optional assistive label for the button or badge. The label is applied to the badge instead of the
button when a badge has been defined. Default value of the button aria-label is its title.
"tooltip" Optional text to display in a tooltip. Cannot be used together with collapse. Ignored for active/
inactive buttons.
"collapse" Optional panel to collapse. Cannot be used together with tooltip. Ignored for active/inactive buttons.
"type" Optional type of the element, either "link" or "button" (default).
"placement" Optional position of the tooltip: "top" (default), "bottom", "left", or "right".
"class" Optional class attribute of the button element, e.g. “toc-button”.
"icon" Font Awesome icon class attribute, required unless title is set. An example value is "fas sort".
"order" Optional order of the icon, either "first" or "last" (default).
"justify" Optional justification of the button title and icon, either "start", "end", "center" (default),
"between", "around", or "evenly".
"toast" Optional id of the toast to display when the button is clicked.
"clipboard" Optional text to be copied to the clipboard when the button is clicked.
"cue" Optional flag to indicate if an external link should show a visual cue, defaults to setting
"main.externalLinks.cue" in the site's parameters.
"tab" Optional flag to indicate if an external link should open in a new tab, defaults to setting
"main.externalLinks.tab" in the site's parameters.
"attributes" Optional dictionary of key-value pairs added as custom attributes to the button element ('<a>').
"spacing" Optional flag to add spacing to the inline button, defaults to "true".
--> -->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "button" "args" . "group" "partial") }}
{{- errorf "partial [assets/button.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $title := trim .title " \r\n" -}} {{- $title := trim .title " \r\n" -}}
{{- $icon := .icon }} {{- $icon := .icon }}
{{- if not (or $title $icon) -}} {{- if not (or $title $icon) -}}
{{- errorf "partial [assets/button.html] - Missing element title or icon" -}} {{- errorf "partial [assets/button.html] - Missing element title or icon" -}}
{{ $error = true }}
{{- end -}} {{- end -}}
{{- $id := .id }} {{- $id := .id }}
{{- $state := .state | default "enabled" -}}
{{- $state := "enabled" -}} {{- $size := .size | default "md" -}}
{{- with .state }}{{ $state = . }}{{ end -}} {{- $color := .color | default "primary" -}}
{{- $supportedStates := slice "enabled" "disabled" "active" "inactive" -}} {{- $outline := .outline | default false -}}
{{- if not (in $supportedStates $state) -}} {{- $badge := .badge | default "" -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'state': %s" $state -}} {{- $label := .label | default $title -}}
{{- end -}}
{{- $size := "md" -}}
{{- with .size }}{{ $size = . }}{{ end -}}
{{- $supportedSizes := slice "sm" "md" "lg" -}}
{{- if not (in $supportedSizes $size) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'size': %s" $size -}}
{{- end -}}
{{- $color := "primary" -}}
{{- with .color }}{{ $color = . }}{{ end -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" -}}
{{- if not (in $supportedColors $color) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'color': %s" $color -}}
{{- end -}}
{{- $outline := false -}}
{{- with .outline }}{{ $outline = . }}{{ end -}}
{{- $badge := "" -}}
{{- with .badge }}{{ $badge = . }}{{ end -}}
{{- $label := "" -}}
{{- with .label }}{{ $label = . }}{{ end -}}
{{- $tooltip := "" -}} {{- $tooltip := "" -}}
{{- if not (strings.HasSuffix $state "active") -}} {{- if not (strings.HasSuffix $state "active") -}}
@@ -75,58 +34,28 @@
{{- end -}} {{- end -}}
{{- $href := .href -}} {{- $href := .href -}}
{{- $collapse := "" -}} {{- $collapse := "" -}}
{{- if not (strings.HasSuffix $state "active") -}} {{- if not (strings.HasSuffix $state "active") -}}
{{- with .collapse }}{{ $collapse = . }}{{ $href = printf "#%s" . }}{{ end -}} {{- with .collapse }}{{ $collapse = . }}{{ $href = printf "#%s" . }}{{ end -}}
{{- end -}} {{- end -}}
{{- if $tooltip -}} {{- if and $tooltip $collapse -}}
{{- if $collapse -}} {{- errorf "partial [assets/button.html] - Cannot use tooltip and collapse at the same time" -}}
{{- errorf "partial [assets/button.html] - Cannot use tooltip and collapse at the same time" -}} {{ $error = true }}
{{- end -}}
{{- end -}} {{- end -}}
{{- $type := .type | default "button" -}}
{{- $type := "button" -}} {{- $placement := .placement | default "top" -}}
{{- with .type }}{{ $type = . }}{{ end -}} {{- $class := .class | default "" }}
{{- $supportedTypes := slice "button" "link" -}}
{{- if not (in $supportedTypes $type) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'type': %s" $type -}}
{{- end -}}
{{- $placement := "top" -}}
{{- with .placement }}{{ $placement = . }}{{ end -}}
{{- $supportedPlacements := slice "top" "bottom" "left" "right" -}}
{{- if not (in $supportedPlacements $placement) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'placement': %s" $placement -}}
{{- end -}}
{{- $class := .class }}
{{ with $badge }}{{ $class = printf "%s me-3" $class }}{{ end }} {{ with $badge }}{{ $class = printf "%s me-3" $class }}{{ end }}
{{- $order := .order | default "last" -}}
{{- $order := "last" -}} {{- $justify := .justify | default "center" -}}
{{- with .order }}{{ $order = . }}{{ end -}}
{{- $supportedOrders := slice "first" "last" -}}
{{- if not (in $supportedOrders $order) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'order': %s" $order -}}
{{- end -}}
{{- $justify := "center" -}}
{{- with .justify }}{{ $justify = . }}{{ end -}}
{{- $supportedJustify := slice "start" "end" "center" "between" "around" "evenly" -}}
{{- if not (in $supportedJustify $justify) -}}
{{- errorf "partial [assets/button.html] - Invalid value for param 'justify': %s" $justify -}}
{{- end -}}
{{- $toast := .toast -}} {{- $toast := .toast -}}
{{- $clipboard := .clipboard -}} {{- $clipboard := .clipboard -}}
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}} {{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}} {{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
{{- $isExternal := ne (urls.Parse (absURL $href)).Host (urls.Parse site.BaseURL).Host -}} {{- $isExternal := ne (urls.Parse (absURL $href)).Host (urls.Parse site.BaseURL).Host -}}
{{- $target := "" -}} {{- $target := "" -}}
{{- $rel := "" -}} {{- $rel := "" -}}
{{- $spacing := .spacing | default true -}} {{- $spacing := .spacing | default true -}}
{{- if $isExternal -}} {{- if $isExternal -}}
@@ -143,31 +72,35 @@
{{- $attributes := .attributes -}} {{- $attributes := .attributes -}}
<a aria-label="{{ (or $label $title) | safeHTML }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end -}} <!-- Main code -->
{{- with $id }} id="{{ . }}"{{ end -}} {{ if not $error }}
{{- with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end -}} <a aria-label="{{ (or $label $title) | safeHTML }}"
{{- with $toast }} data-toast-target="{{ $toast }}"{{ end -}} {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end -}}
{{- with $clipboard }} data-clipboard="{{ $clipboard }}"{{ end -}} {{- with $id }} id="{{ . }}"{{ end -}}
{{- if eq $type "button" }} class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class -}}" {{- with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end -}}
role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end -}} {{- with $toast }} data-toast-target="{{ $toast }}"{{ end -}}
{{- else }} class="link-{{ $color }} position-relative {{ $class }}"{{ end -}} {{- with $clipboard }} data-clipboard="{{ $clipboard }}"{{ end -}}
{{- with $tooltip }} data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end -}} {{- if eq $type "button" }} class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class -}}"
{{- with $collapse }} data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end -}} role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end -}}
{{- if eq $state "active" }} data-bs-toggle="button" aria-pressed="true"{{ end -}} {{- else }} class="link-{{ $color }} position-relative {{ $class }}"{{ end -}}
{{- if eq $state "inactive" }} data-bs-toggle="button" aria-pressed="false"{{ end -}} {{- with $tooltip }} data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end -}}
{{- range $key, $val := $attributes -}} {{- with $collapse }} data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end -}}
{{ printf " %s=\"%s\"" $key $val | safeHTMLAttr }} {{- if eq $state "active" }} data-bs-toggle="button" aria-pressed="true"{{ end -}}
{{- end -}} {{- if eq $state "inactive" }} data-bs-toggle="button" aria-pressed="false"{{ end -}}
> {{- range $key, $val := $attributes -}}
<div class="d-flex justify-content-{{ $justify }}"> {{ printf " %s=\"%s\"" $key $val | safeHTMLAttr }}
<div class="my-auto">{{ $title | safeHTML }}</div> {{- end -}}
{{- with $icon }}<div class="align-self-center{{ if $title }}{{ if eq $order "first" }} order-first pe-1{{ else }} ps-1{{ end }}{{ end }}">{{ partial "assets/icon.html" (dict "icon" $icon "spacing" false) }}</div>{{ end }} >
</div> <div class="d-flex justify-content-{{ $justify }}">
<div class="my-auto">{{ $title | safeHTML }}</div>
{{- with $icon }}<div class="align-self-center{{ if $title }}{{ if eq $order "first" }} order-first pe-1{{ else }} ps-1{{ end }}{{ end }}">{{ partial "assets/icon.html" (dict "icon" $icon "spacing" false) }}</div>{{ end }}
</div>
{{- with $badge }} {{- with $badge }}
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger"> <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">
{{ . }} {{ . }}
{{ with $label }}<span class="visually-hidden">{{ . }}</span>{{ end }} {{ with $label }}<span class="visually-hidden">{{ . }}</span>{{ end }}
</span> </span>
{{- end -}} {{- end -}}
</a>{{ if $spacing }}&nbsp;{{- end }} </a>{{ if $spacing }}&nbsp;{{- end }}
{{ end }}

View File

@@ -1,72 +1,46 @@
<!-- <!--
Displays a grid of Bootstrap cards with 1 to 5 columns. The cards are rendered using a provided list of pages. Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
Cards on the same row are aligned to each other. The grid renders pages up to a provided maximum amount. The Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
remaining items are accessible via either a paginator or button to a list page (default behavior). Be aware a page Visit gethinode.com/license for more details.
can only contain one paginator at a time.
The shortcode supports the following arguments:
"page" Required context of the current page.
"list" Required array of pages.
"cards" Optional string of rendered cards.
"max" Required maximum number of cards to display.
"cols" Required number of columns for the grid, must be a value between 1 and 5.
"gutter" Gutter between columns in a group, either "0", "1", "2", "3", "4" (default), or "5".
"title" Optional title of the card group.
"paginate" Optional flag indicating if pagination should be added to the card group, if the list exceeds the
maximum number of cards to display.
"href" Optional address for the button or hyperlink. If set, a button is added if the list exceeds the
maximum number of cards to display.
"hrefTitle" Optional title of the button or hyperlink as companion to href.
"separator" Optional flag to indicate a horizontal line should be added between items on small screens.
"wrapper" Optional class attributes of the wrapper element, e.g. "p-4 px-xxl-0".
"responsive" Optional flag if the number of columns should be responsive, defaults to "true".
In addition, the following arguments are passed to the individual cards.
"class" Optional class attribute of the card element, e.g. “w-50”.
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", or "body". By default, no color is specified.
"padding": Optional padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default).
"header" Optional header components of the card, displayed in small caps. Supported values are "full"
(default), "publication", "tags", and "none".
"footer" Optional footer components of the card, displayed in small caps. Supported values are "full",
"publication", "tags", and "none" (default).
"orientation" Optional placecement of the thumbnail, either "stacked" (default), "horizontal", or "none".
"ratio" Optional ratio of the thumbnail image, defaults to "16x9" (stacked orientation) or "1x1" (horizontal
orientation).
--> -->
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "card-group" "child" "card" "args" .) }}
{{- errorf "partial [assets/card.html] - Invalid arguments" -}}
{{ end }}
<!-- Initialize arguments and default values -->
{{- $page := .page -}} {{- $page := .page -}}
{{- $breakpoint := partial "utilities/GetBreakpoint.html" -}}
{{- if not (in (slice "*hugolib.pageState" "*hugolib.pageForShortcode") (printf "%T" $page)) -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'page': %T" $page -}}
{{- end -}}
{{- $supportedTypes := slice "page.Pages" "resource.Resources" -}}
{{ $pages := .list }} {{ $pages := .list }}
{{- if and $pages (not (in $supportedTypes (printf "%T" $pages))) -}}
{{ warnf "Type: %T" $pages }}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'list'" -}}
{{- end -}}
{{ $cards := .cards }} {{ $cards := .cards }}
{{- $paginate := .paginate | default false -}}
{{- $moreURL := .href -}}
{{- $moreTitle := .hrefTitle -}}
{{- $gutter := .gutter | default 4 -}}
{{- $separator := .separator | default false -}}
{{- $class := .class -}}
{{- $color := .color -}}
{{- $padding := .padding -}}
{{- $header := .header -}}
{{- $footer := .footer -}}
{{- $orientation := .orientation -}}
{{- $ratio := .ratio -}}
{{- $wrapper := .wrapper | default "p-0" -}}
{{- $loading := .loading -}}
{{- $paginate := false -}} <!-- Override arguments -->
{{- with .paginate -}}
{{- if ne (printf "%T" .) "bool" -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'paginate'" -}}
{{- end -}}
{{- $paginate = . -}}
{{- end -}}
{{ $paginator := "" }} {{ $paginator := "" }}
{{ if $paginate }} {{ if $paginate }}
{{ $paginator = $page.Paginate $pages }} {{ $paginator = $page.Paginate $pages }}
{{ $pages = first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $pages) }} {{ $pages = first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $pages) }}
{{ end }} {{ end }}
{{ $list := slice }} {{ $list := slice }}
{{ range $index, $element := $pages }} {{ range $index, $element := $pages }}
{{ $params := dict }} {{ $params := dict }}
<!-- regular page --> <!-- regular page -->
{{- if $element.RelPermalink -}} {{- if and $element.RelPermalink $element.File -}}
{{- $params = merge $params (dict "path" $element.File.Path) -}} {{- $params = merge $params (dict "path" $element.File.Path) -}}
<!-- headless page --> <!-- headless page -->
{{- else -}} {{- else -}}
@@ -85,75 +59,25 @@
{{- $count := len $list -}} {{- $count := len $list -}}
{{- $max := $count -}} {{- $max := $count -}}
{{- with .max }} {{- $max = math.Min (.max | default $count) $count -}}
{{- if ne (printf "%T" .) "int" -}}
{{- warnf "partial [assets/card-group.html] - Invalid value for param 'max': %s" . -}}
{{- else -}}
{{- $max = . -}}
{{- end -}}
{{- end -}}
{{- $max = math.Min $max $count -}}
{{- $responsive := .responsive | default true -}} {{- $responsive := .responsive | default true -}}
{{- with .responsive -}}
{{- if ne (printf "%T" .) "bool" -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'responsive'" -}}
{{- end -}}
{{- end -}}
{{- $cols := string .cols | default "3" -}} {{- $cols := string .cols | default "3" -}}
{{- $supportedCols := slice "0" "1" "2" "3" "4" "5" "auto" -}}
{{- if not (in $supportedCols $cols) -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'cols': %s" $cols -}}
{{- end -}}
{{- $colGrid := "" -}} {{- $colGrid := "" -}}
{{- if eq $cols "1" }}{{ $colGrid = "row-cols-1" -}} {{- if eq $cols "1" }}{{ $colGrid = "row-cols-1" -}}
{{- else if eq $cols "2" }}{{ if $responsive }}{{ $colGrid = "row-cols-1 row-cols-sm-1 row-cols-md-2" }}{{ else }}{{ $colGrid = "row-cols-2" }}{{ end -}} {{- else if eq $cols "2" }}{{ if $responsive }}{{ $colGrid = printf "row-cols-1 row-cols-%s-1 row-cols-%s-2" $breakpoint.prev $breakpoint.current }}{{ else }}{{ $colGrid = "row-cols-2" }}{{ end -}}
{{- else if eq $cols "3" }}{{ if $responsive }}{{ $colGrid = "row-cols-1 row-cols-sm-2 row-cols-md-3" }}{{ else }}{{ $colGrid = "row-cols-3" }}{{ end -}} {{- else if eq $cols "3" }}{{ if $responsive }}{{ $colGrid = printf "row-cols-1 row-cols-%s-2 row-cols-%s-3" $breakpoint.prev $breakpoint.current }}{{ else }}{{ $colGrid = "row-cols-3" }}{{ end -}}
{{- else if eq $cols "4" }}{{ if $responsive }}{{ $colGrid = "row-cols-1 row-cols-sm-2 row-cols-md-4" }}{{ else }}{{ $colGrid = "row-cols-4" }}{{ end -}} {{- else if eq $cols "4" }}{{ if $responsive }}{{ $colGrid = printf "row-cols-1 row-cols-%s-2 row-cols-%s-4" $breakpoint.prev $breakpoint.current }}{{ else }}{{ $colGrid = "row-cols-4" }}{{ end -}}
{{- else if eq $cols "5" }}{{ if $responsive }}{{ $colGrid = "row-cols-1 row-cols-sm-3 row-cols-md-5" }}{{ else }}{{ $colGrid = "row-cols-5" }}{{ end -}} {{- else if eq $cols "5" }}{{ if $responsive }}{{ $colGrid = printf "row-cols-1 row-cols-%s-3 row-cols-%s-5" $breakpoint.prev $breakpoint.current }}{{ else }}{{ $colGrid = "row-cols-5" }}{{ end -}}
{{ end -}} {{ end -}}
{{- $gutter := .gutter | default "4" -}}
{{- $supportedGutters := slice "0" "1" "2" "3" "4" "5" -}}
{{- if not (in $supportedGutters $gutter) -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'gutter': %s" $gutter -}}
{{- end -}}
{{- if not $paginate -}} {{- if not $paginate -}}
{{- $list = first $max $list -}} {{- $list = first $max $list -}}
{{- end -}} {{- end -}}
{{- $moreURL := .href -}} {{- if and (eq $cols "1") (eq $orientation "horizontal") }}{{ $orientation = "horizontal-sm" }}{{ end -}}
{{- $moreTitle := .hrefTitle -}}
{{- $separator := false -}}
{{- with .separator -}}
{{- if ne (printf "%T" .) "bool" -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'separator'" -}}
{{- end -}}
{{- $separator = . -}}
{{- end -}}
{{- $class := .class -}}
{{- $color := .color -}}
{{- $padding := .padding -}}
{{- $header := .header -}}
{{- $footer := .footer -}}
{{- $orientation := .orientation -}}
{{- $ratio := .ratio -}}
{{- $wrapper := .wrapper | default "p-0" -}}
{{- $loading := .loading -}}
{{- $validSettings := slice "lazy" "eager" -}}
{{- if $loading -}}
{{ if not (in $validSettings $loading) -}}
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'loading': %s" $loading -}}
{{ end -}}
{{- end -}}
{{- if and (eq $cols 1) (eq $orientation "horizontal") }}{{ $orientation = "horizontal-sm" }}{{ end -}}
<!-- Main code -->
<div class="container-fluid {{ $wrapper }}"> <div class="container-fluid {{ $wrapper }}">
<div class="row {{ $colGrid }} g-{{ $gutter }}"> <div class="row {{ $colGrid }} g-{{ $gutter }}">
{{ range $index, $element := $list }} {{ range $index, $element := $list }}

View File

@@ -1,31 +1,49 @@
<!-- <!--
Displays a Bootstrap card. Either specify a valid path, or set the arguments title, href, header, description, and Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
thumbnail individually. The latter arguments override any page attributes. Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
Visit gethinode.com/license for more details.
The shortcode supports the following arguments:
"path" Optional path of the page, override with other parameters.
"title" Required title of the card.
"href" Optional address for the button or hyperlink.
"class" Optional class attribute of the card element, e.g. “w-50”.
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no
color is specified.
"padding": Optional padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default).
"gutter" Gutter between columns in a group, either "0" (default), "1", "2", "3", "4", or "5".
"header" Optional header components of the card, displayed in small caps. Supported values are "full"
(default), "publication", "tags", and "none".
"footer" Optional footer components of the card, displayed in small caps. Supported values are "full",
"publication", "tags", and "none" (default).
"description" Optional description of the card.
"thumbnail" Optional thumbnail image url, displayed on top or the left of the card.
"ratio" Optional ratio of the thumbnail image, defaults to "16x9" (stacked orientation) or "1x1" (horizontal
orientation).
"alt" Optional alternate text for the thumbnail, uses "title" by default.
"icon" Optional Font Awesome icon, displayed on top or the left of the card.
"orientation" Optional placecement of the thumbnail or icon, either "stacked" (default), "horizontal",
"horizontal-sm" or "none".
--> -->
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "card" "args" .) }}
{{- errorf "partial [assets/card.html] - Invalid arguments" -}}
{{ end }}
<!-- Initialize arguments and default values -->
{{- $alt := .alt -}}
{{- $class := .class -}}
{{- $color := .color -}}
{{- $description := .description -}}
{{- $footer := .footer | default "none" -}}
{{- $gutter := .gutter | default "0" -}}
{{- $header := .header | default "full" -}}
{{- $href := .href -}}
{{- $icon := .icon -}}
{{- $loading := .loading -}}
{{- $orientation := .orientation | default "stacked" -}}
{{- $padding := .padding | default "auto" -}}
{{- $ratio := .ratio -}}
{{- $thumbnail := .thumbnail -}}
{{- $title := .title -}}
<!-- Override arguments -->
{{- $page := "" }}
{{- if .path }}
{{- $page = site.GetPage .path }}
{{- if not $page }}
{{- errorf "partial [assets/card.html] - Cannot find page: %s" .path -}}
{{- end }}
{{- end }}
{{- with $page -}}
{{- if not $title }}{{ $title = .Title }}{{ end -}}
{{- if not $href }}{{ $href = .RelPermalink }}{{ end -}}
{{- if not $description }}{{ $description = partial "utilities/GetDescription.html" . }}{{ end -}}
{{- if not $thumbnail }}{{ $thumbnail = (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.url) .Params.Thumbnail) }}{{ end -}}
{{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}}
{{- end -}}
{{- if eq $orientation "none" }}{{ $thumbnail = "" }}{{ $icon = "" }}{{ end -}}
<!-- Inline partial to render the card's body --> <!-- Inline partial to render the card's body -->
{{- define "partials/card-body.html" -}} {{- define "partials/card-body.html" -}}
{{- $title := .title -}} {{- $title := .title -}}
@@ -77,90 +95,16 @@
</small></p> </small></p>
{{- end -}} {{- end -}}
{{- $page := "" }} <!-- Main code -->
{{- if .path }}
{{- $page = site.GetPage .path }}
{{- if not $page }}
{{- errorf "partial [assets/card.html] - Cannot find page: %s" .path -}}
{{- end }}
{{- end }}
{{- $title := .title -}}
{{- $alt := .alt -}}
{{- $href := .href -}}
{{- $description := .description -}}
{{- $thumbnail := .thumbnail -}}
{{- $ratio := .ratio -}}
{{- $icon := .icon -}}
{{- $color := "" -}}
{{- with .color }}{{ $color = . }}{{ end -}}
{{- if $color -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
{{- if not (in $supportedColors $color) -}}
{{- errorf "partial [assets/card.html] - Invalid value for param 'color': %s" $color -}}
{{- end -}}
{{- end -}}
{{- $header := "full" -}}
{{- with .header }}{{ $header = . }}{{ end -}}
{{- $supportedKeywords := slice "full" "publication" "tags" "none" -}}
{{- if not (in $supportedKeywords $header) -}}
{{- errorf "partial [assets/card.html] - Invalid value for param 'header': %s" $header -}}
{{- end -}}
{{- $footer := "none" -}}
{{- with .footer }}{{ $footer = . }}{{ end -}}
{{- if not (in $supportedKeywords $footer) -}}
{{- errorf "partial [assets/card.html] - Invalid value for param 'footer': %s" $footer -}}
{{- end -}}
{{- with $page -}}
{{- if not $title }}{{ $title = .Title }}{{ end -}}
{{- if not $href }}{{ $href = .RelPermalink }}{{ end -}}
{{- if not $description }}{{ $description = partial "utilities/GetDescription.html" . }}{{ end -}}
{{- if not $thumbnail }}{{ $thumbnail = (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.url) .Params.Thumbnail) }}{{ end -}}
{{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}}
{{- end -}}
{{- $class := .class -}}
{{- $padding := "auto" -}}
{{- with .padding }}{{ $padding = . }}{{ end -}}
{{- $supportedPaddings := slice "0" "1" "2" "3" "4" "5" "auto" -}}
{{- if not (in $supportedPaddings $padding) -}}
{{- errorf "partial [assets/card.html] - Invalid value for param 'padding': %s" $padding -}}
{{- end -}}
{{- $gutter := .gutter | default "0" -}}
{{ $supportedGutters:= slice "0" "1" "2" "3" "4" "5" -}}
{{ if not (in $supportedGutters $gutter) -}}
{{- errorf "partial [assets/card.html] - Invalid value for param 'gutter': %s" $gutter -}}
{{ end -}}
{{- $orientation := "stacked" -}}
{{- with .orientation }}{{ $orientation = . }}{{ end -}}
{{- $supportedOrientations := slice "stacked" "horizontal" "horizontal-sm" "none" -}}
{{- if not (in $supportedOrientations $orientation) -}}
{{- errorf "partial [assets/card.html] - Invalid value for param 'orientation': %s" $orientation -}}
{{- end -}}
{{- if eq $orientation "none" }}{{ $thumbnail = "" }}{{ $icon = "" }}{{ end -}}
{{- $loading := .loading -}}
{{- $validSettings := slice "lazy" "eager" -}}
{{- if $loading -}}
{{ if not (in $validSettings $loading) -}}
{{- errorf "partial [assets/card.html] - Invalid value for param 'loading': %s" $loading -}}
{{ end -}}
{{- end -}}
{{ if ne $gutter "0" }}<div class="g-{{ $gutter }}">{{ end }} {{ if ne $gutter "0" }}<div class="g-{{ $gutter }}">{{ end }}
{{- if hasPrefix $orientation "horizontal" -}} {{- if hasPrefix $orientation "horizontal" -}}
<!-- Render horizontal card -->
<div class="card {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}"> <div class="card {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}">
<div class="row g-0 row-cols-1 h-100"> <div class="row g-0 row-cols-1 h-100">
<div class="col-4{{ if eq $orientation "horizontal-sm" }} col-md-2{{ end }}"> <div class="col-4{{ if eq $orientation "horizontal-sm" }} col-md-2{{ end }}">
{{- if $thumbnail -}} {{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" (or $ratio "1x1") "outerClass" "h-100 card-img-wrap" "innerClass" "rounded-start card-img-h100" "title" $title "loading" $loading) -}} {{- partial "assets/image.html" (dict "url" $thumbnail "ratio" (or $ratio "1x1") "wrapper" "h-100 card-img-wrap" "class" "rounded-start card-img-h100" "title" $title "loading" $loading) -}}
{{- else if $icon -}} {{- else if $icon -}}
<div class="card-icon p-{{ $padding }} h-100 fa-wrapper d-flex align-items-center justify-content-center"> <div class="card-icon p-{{ $padding }} h-100 fa-wrapper d-flex align-items-center justify-content-center">
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-fluid fa-fw" $icon)) -}} {{- partial "assets/icon.html" (dict "icon" (printf "%s fa-fluid fa-fw" $icon)) -}}
@@ -179,9 +123,10 @@
</div> </div>
</div> </div>
{{- else -}} {{- else -}}
<!-- Render stacked / default card -->
<div class="card {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}"> <div class="card {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}">
{{- if $thumbnail -}} {{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" (or $ratio "16x9") "outerClass" "card-img-wrap" "innerClass" "card-img-top" "title" (or $alt $title) "loading" $loading) -}} {{- partial "assets/image.html" (dict "url" $thumbnail "ratio" (or $ratio "16x9") "wrapper" "card-img-wrap" "class" "card-img-top" "title" (or $alt $title) "loading" $loading) -}}
{{- else if $icon -}} {{- else if $icon -}}
<div class="card-icon p-{{ $padding }}"> <div class="card-icon p-{{ $padding }}">
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x" $icon)) -}} {{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x" $icon)) -}}
@@ -194,4 +139,5 @@
</div> </div>
</div> </div>
{{- end -}} {{- end -}}
{{ if ne $gutter "0" }}</div>{{ end }} {{ if ne $gutter "0" }}</div>{{ end }}

View File

@@ -1,20 +1,29 @@
<!--
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
Visit gethinode.com/license for more details.
-->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "carousel-item" "args" . "group" "partial") }}
{{- errorf "partial [assets/carousel-item.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $page := .page -}} {{- $page := .page -}}
{{- $active := .active -}} {{- $active := .active -}}
{{- $src := .src -}} {{- $src := .src -}}
{{- $caption := .caption -}} {{- $caption := .caption -}}
{{- $ratio := .ratio -}} {{- $ratio := .ratio -}}
{{- $portrait := .portrait -}} {{- $portrait := .portrait -}}
{{- $loading := .loading | default "eager" -}}
{{- $loading := .loading -}} <!-- Main code -->
{{- $validSettings := slice "lazy" "eager" -}} <div class="carousel-item{{ if $active }} active{{ end }}" {{ if not $active }} fetchpriority="low"{{ end }}>
{{- if $loading -}} {{ partial "assets/image.html" (dict "url" $src "ratio" $ratio "page" $page "class" "d-block w-100" "portrait" $portrait "loading" $loading) }}
{{ if not (in $validSettings $loading) -}}
{{- errorf "partial [assets/carousel-item.html] - Invalid value for param 'loading': %s" $loading -}}
{{ end -}}
{{- end -}}
<div class="carousel-item{{ if $active }} active{{ end }}">
{{ partial "assets/image.html" (dict "url" $src "ratio" $ratio "page" $page "innerClass" "d-block w-100" "portrait" $portrait "loading" $loading) }}
<div class="carousel-caption gradient"></div> <div class="carousel-caption gradient"></div>
{{ with $caption }} {{ with $caption }}
<div class="carousel-caption d-none d-md-block"> <div class="carousel-caption d-none d-md-block">

View File

@@ -1,68 +1,38 @@
<!-- <!--
Render a local or remote image with responsive image sizing. Images are resized using default media breakpoints Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
and are converted to webp format. The image is processed using the quality setting specified in the [imaging] Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
section of the main config file (defaults to 75). A fallback image is provided for older browsers. The image is Visit gethinode.com/license for more details.
wrapped in a figure if a caption is provided, else the image is wrapped in a div with a ratio constraint.
If the url starts with 'http', the image is retrieved from an external location. Else, the url is matched with a
page resource and site asset (in that order). The path of a remote image is rewritten to ensure processed files are
stored in the final '/img' folder.
The partial supports the following bitmap image formats: "png", "jpeg", "gif", "tiff", "bmp", and "webp". Vector
graphics of type "svg" are supported too, although these images do no support additional processing. This means
the arguments "ratio" and "portrait" have no effect for vector images. Vector graphics support an optional anchor
"#" in their url to denote a styling reference.
The partial supports the following arguments:
"url": Required path or url of the image, e.g. "img/example.jpg"
"mode": Optional flag indicating if the image should support color modes.
"ratio": Optional ratio of the image, either "1x1", "3x2", "4x3", "16x9", or "21x9". If set, the image is
resized and cropped to match the ratio. Else the original aspect ratio of the image is kept. Not
applicable to vector graphics.
"portrait": Optional flag to adjust the ratio from landscape to portrait. The image itself is not rotated, only
the crop area is adjusted. Not applicable to vector graphics.
"loading": Optional loading behavior of the image, either "eager" (default) or "lazy". The loading of lazily
loaded images is deferred until the image is within scrolling range of the viewport. This should
reduce the initial loading time of the website. It is recommended to lazily load only those images
that are below the page fold.
"outerClass": Optional class attribute of the outer div element, e.g. "img-wrap".
"innerClass": Optional class attribute of the inner img element, e.g. "rounded".
"title": Optional alternate text of the image.
"caption": Optional figure caption.
"page": Optional page context, used to match page resources.
--> -->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "image" "args" . "group" "partial") }}
{{ errorf "partial [assets/image.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{ $destination := .destination }}
<!-- Initialize arguments -->
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}} {{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $validRatios := slice "1x1" "3x2" "4x3" "16x9" "21x9" -}}
{{- $ratio := .ratio -}} {{- $ratio := .ratio -}}
{{- if $ratio -}}
{{ if not (in $validRatios $ratio) -}}
{{- errorf "partial [assets/image.html] - Invalid value for param 'ratio'" -}}
{{ end -}}
{{- end -}}
{{- $portrait := .portrait -}} {{- $portrait := .portrait -}}
{{- $url := .url -}} {{- $url := .url -}}
{{- $mode := false -}} {{- $mode := .mode -}}
{{- with .mode }}{{ $mode = . }}{{ end -}} {{- $modes := site.Params.main.modes | default (slice "light" "dark") -}}
{{- $outerClass := .outerClass -}} {{- $wrapper := .wrapper -}}
{{- $innerClass := .innerClass -}} {{- $class := .class -}}
{{- $title := .title -}} {{- $title := .title -}}
{{- $caption := .caption -}} {{- $caption := .caption -}}
{{- if ne (printf "%T" $mode) "bool" -}}
{{- errorf "partial [assets/image.html] - Invalid value for param 'mode'" -}}
{{- end -}}
{{- $modes := site.Params.main.modes | default (slice "light" "dark") -}}
{{- $page := .page -}} {{- $page := .page -}}
{{- $loading := .loading -}} {{- $loading := .loading -}}
{{- $validSettings := slice "lazy" "eager" -}}
{{- if $loading -}}
{{ if not (in $validSettings $loading) -}}
{{- errorf "partial [assets/image.html] - Invalid value for param 'loading'" -}}
{{ end -}}
{{- end -}}
{{- $lazy := eq $loading "lazy" -}} {{- $lazy := eq $loading "lazy" -}}
{{- $priority := .priority -}}
{{- if eq $priority "auto" }}{{ $priority = "" }}{{ end -}}
{{- define "partials/image-portrait.html" -}} {{- define "partials/image-portrait.html" -}}
{{- $dimensions := slice }} {{- $dimensions := slice }}
@@ -124,7 +94,6 @@
{{- return $fallback -}} {{- return $fallback -}}
{{- end -}} {{- end -}}
<!-- Generate a image set of type webp --> <!-- Generate a image set of type webp -->
{{- define "partials/image-scaled.html " -}} {{- define "partials/image-scaled.html " -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}} {{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
@@ -185,8 +154,8 @@
{{- $ratio := .ratio -}} {{- $ratio := .ratio -}}
{{- $portrait := .portrait -}} {{- $portrait := .portrait -}}
{{- $url := .url -}} {{- $url := .url -}}
{{- $outerClass := .outerClass -}} {{- $wrapper := .wrapper -}}
{{- $innerClass := .innerClass -}} {{- $class := .class -}}
{{- $title := .title -}} {{- $title := .title -}}
{{- $caption := .caption -}} {{- $caption := .caption -}}
{{- $fallbackURL := "" -}} {{- $fallbackURL := "" -}}
@@ -196,6 +165,7 @@
{{- $modes := .modes -}} {{- $modes := .modes -}}
{{- $lazy := .lazy -}} {{- $lazy := .lazy -}}
{{- $page := .page -}} {{- $page := .page -}}
{{- $priority := .priority -}}
{{- $isVector := false -}} {{- $isVector := false -}}
{{- $segments := split $url "#" -}} {{- $segments := split $url "#" -}}
@@ -209,12 +179,18 @@
{{- if hasSuffix $url "svg" -}} {{- if hasSuffix $url "svg" -}}
{{- $fallbackURL = $url -}} {{- $fallbackURL = $url -}}
{{- $isVector = true -}} {{- $isVector = true -}}
{{- $res := partial "utilities/GetResource.html" (dict "url" $url "page" $page) -}}
{{ if not $res }}
{{- if not (fileExists (path.Join "/static" $url)) -}}
{{ warnf "Cannot find vector image resource: %q" $url -}}
{{ end }}
{{ end }}
{{- else -}} {{- else -}}
{{- $res := partial "utilities/GetImage.html" (dict "url" $url "page" $page) -}} {{- $res := partial "utilities/GetImage.html" (dict "url" $url "page" $page) -}}
{{- $img := "" -}} {{- $img := "" -}}
{{ with $res }} {{ with $res }}
{{ $img = $res.resource }} {{ $img = $res.resource }}
{{ if $res.mirror }}{{ $innerClass = printf "%s mirrorred" $innerClass }}{{ end }} {{ if $res.mirror }}{{ $class = printf "%s mirrorred" $class }}{{ end }}
{{ end }} {{ end }}
{{- if $img -}} {{- if $img -}}
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio "portrait" $portrait) -}} {{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio "portrait" $portrait) -}}
@@ -229,7 +205,7 @@
{{- range $none := $modes -}} {{- range $none := $modes -}}
{{- if ne $none $mode -}} {{- if ne $none $mode -}}
{{- $outerClass = printf "%s d-none-%s" (or $outerClass "") $none -}} {{- $wrapper = printf "%s d-none-%s" (or $wrapper "") $none -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
@@ -248,19 +224,20 @@
{{- end }} {{- end }}
{{- if $caption -}} {{- if $caption -}}
<figure {{ with $outerClass }}class="{{ . }}"{{ end }}> <figure {{ with $wrapper }}class="{{ . }}"{{ end }}>
{{ end }} {{ end }}
<div class="{{ if not $caption }}{{ $outerClass }}{{ end }}"> <div class="{{ if not $caption }}{{ $wrapper }}{{ end }}">
{{- if not $anchor -}} {{- if not $anchor -}}
<img class="img-fluid {{ $innerClass }}" <img class="img-fluid {{ $class }}"
src="{{ $fallbackURL }}" src="{{ $fallbackURL }}"
{{ if $lazy }}loading="lazy"{{ end }} {{ if $lazy }}loading="lazy"{{ end }}
{{ with $priority }}fetchpriority="{{ . }}"{{ end }}
{{ with $imgset -}}srcset="{{ . }}" sizes="100vw"{{- end }} {{ with $imgset -}}srcset="{{ . }}" sizes="100vw"{{- end }}
{{ with $height }}height="{{ . }}"{{ end }} {{ with $height }}height="{{ . }}"{{ end }}
{{ with $width }}width="{{ . }}"{{ end }} {{ with $width }}width="{{ . }}"{{ end }}
{{ with $title }}alt="{{ . }}"{{ end }}> {{ with $title }}alt="{{ . }}"{{ end }}>
{{- else }} {{- else }}
<svg class="{{ $innerClass }}"> <svg class="{{ $class }}">
<use href="{{ $fallbackURL }}#{{ $anchor }}"></use> <use href="{{ $fallbackURL }}#{{ $anchor }}"></use>
</svg> </svg>
{{ end }} {{ end }}
@@ -271,17 +248,17 @@
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
<!-- Initiate the regular or color-mode image --> <!-- Initiate the regular or color-mode image -->
{{ $params := dict }} {{ $params := dict }}
{{- $params = merge $params (dict {{- $params = merge $params (dict
"ratio" $ratio "ratio" $ratio
"portrait" $portrait "portrait" $portrait
"outerClass" $outerClass "wrapper" $wrapper
"innerClass" $innerClass "class" $class
"title" $title "title" $title
"caption" $caption "caption" $caption
"lazy" $lazy "lazy" $lazy
"priority" $priority
"page" $page) "page" $page)
-}} -}}

View File

@@ -1,9 +1,20 @@
{{ $destination := .destination }} <!--
{{- if not $destination -}} Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
{{- errorf "partial [utilities/link.html] - Missing param 'destination'" -}} Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
{{- end -}} Visit gethinode.com/license for more details.
-->
{{ $error := false -}}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "link" "args" . "group" "partial") }}
{{ errorf "partial [assets/link.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{ $destination := .destination }}
{{- $error := false -}}
{{- $target := "" -}} {{- $target := "" -}}
{{- $rel := "" -}} {{- $rel := "" -}}
{{- $case := .case | default true }} {{- $case := .case | default true }}
@@ -15,6 +26,7 @@
{{- $text := .text -}} {{- $text := .text -}}
{{- $class := .class -}} {{- $class := .class -}}
<!-- Main code -->
{{- if $isExternal -}} {{- if $isExternal -}}
{{- if not $text -}} {{- if not $text -}}
{{- $text = (urls.Parse (absURL $destination)).Host -}} {{- $text = (urls.Parse (absURL $destination)).Host -}}
@@ -33,7 +45,7 @@
{{- if strings.Contains $destination "#" }} {{- if strings.Contains $destination "#" }}
{{ $segments := split $destination "#" }} {{ $segments := split $destination "#" }}
{{- if ne (len $segments) 2 }} {{- if ne (len $segments) 2 }}
{{- errorf "partial [utilities/link.html] - Malformed path, expected one anchor '#' only: %s" $destination -}} {{- errorf "partial [assets/link.html] - Malformed path, expected one anchor '#' only: %s" $destination -}}
{{ else }} {{ else }}
{{- $destination = index $segments 0 -}} {{- $destination = index $segments 0 -}}
{{- $anchor = index $segments 1 -}} {{- $anchor = index $segments 1 -}}
@@ -42,7 +54,7 @@
{{ $ref := partial "utilities/GetPage.html" (dict "url" $destination "page" $page) }} {{ $ref := partial "utilities/GetPage.html" (dict "url" $destination "page" $page) }}
{{- if not $ref -}} {{- if not $ref -}}
{{- errorf "partial [utilities/link.html] - Cannot find page: %s" $destination -}} {{- errorf "partial [assets/link.html] - Cannot find page: %s" $destination -}}
{{- $error = true -}} {{- $error = true -}}
{{- else -}} {{- else -}}
{{- $destination = $ref.RelPermalink -}} {{- $destination = $ref.RelPermalink -}}

View File

@@ -1,19 +1,19 @@
<!--
Defines an individual nav item. The shortcode supports the following arguments:
"id" Required unique ID of the nav-item. <!--
"parentID" Required ID of the parent (e.g. nav control). Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
"class" Optional class attributes to be added to the nav-item. Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
"fade" Optional flag to make the tab pane fade in. Visit gethinode.com/license for more details.
"header" Required header of the nav item.
"class" Optional class attribute of the nav item.
"body" The body content of the nav-item, supports Markdown and HTML (if enabled).
"show" Optional flag to indicate the item should be shown as expanded (only one can be shown at a time).
"disabled" Optional flag to indicate the item should be in a disabled state.
"type" Optional type of the item to render, supports "accordion" as alternative format. Defaults to
"tab-pane".
--> -->
{{ $error := false -}}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "nav-item" "args" . "group" "partial") }}
{{ errorf "partial [assets/nav-item.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $id := .id -}} {{- $id := .id -}}
{{- $parentID := .parentID -}} {{- $parentID := .parentID -}}
{{- $class := .class -}} {{- $class := .class -}}
@@ -23,9 +23,10 @@
{{- $body := .body -}} {{- $body := .body -}}
{{- $show := .show -}} {{- $show := .show -}}
{{- $disabled := .disabled -}} {{- $disabled := .disabled -}}
{{- $type := .type -}} {{- $type := .item_type -}}
{{- $illustration := .illustration -}} {{- $illustration := .illustration -}}
<!-- Main code -->
{{ if eq $type "accordion" }} {{ if eq $type "accordion" }}
<div class="accordion-item{{ if $show }} show{{ end }}{{ with $class }} {{ . }}{{ end }}"> <div class="accordion-item{{ if $show }} show{{ end }}{{ with $class }} {{ . }}{{ end }}">
{{- with $header -}} {{- with $header -}}

View File

@@ -1,98 +1,39 @@
<!-- <!--
Displays a tab group of multiple items. Each provided page resource is rendered as a tab pane. The shortcode Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
supports the following arguments: Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
"page" Required context of the current page. Visit gethinode.com/license for more details.
"list" Required array of pages.
"title" Optional title of the tab group.
"type" Optional type of the tab group, either "tabs", "pills" (default), "underline" or "callout".
"vertical" Optional flag to show vertical tabs instead of horizontal tabs (default).
"class" Optional class attribute of the tab group, e.g. “nav-fill”.
"pane" Optional style of the panes, either "none" (default) or "persona".
"width" Optional responsive width of the tab group, either "50" or "100" (default).
"wrap" Optional flag to enable word wrapping of tab titles, defaults to false.
In addition, the following arguments are passed to the individual tabs.
"class" Optional class attribute of the tab element, e.g. “w-50”.
"color": Optional theme color of the tab, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", or "body". By default, no color is specified.
--> -->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "nav" "args" . "group" "partial") }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $page := .page -}} {{- $page := .page -}}
{{- if ne (printf "%T" $page) "*hugolib.pageState" -}} {{- $id := .id | default "0" -}}
{{- errorf "partial [assets/nav.html] - Invalid value for param 'page'" -}}
{{- end -}}
{{- $id := "0" -}}
{{- with .id -}}
{{ $id = . }}
{{ end }}
{{- $supportedTypes := slice "page.Pages" "resource.Resources" -}}
{{ $list := .list }} {{ $list := .list }}
{{- if not (in $supportedTypes (printf "%T" $list)) -}} {{ $pane := .pane | default "none" }}
{{- errorf "partial [assets/nav.html] - Invalid value for param 'list'" -}} {{ $width := .width | default 100 }}
{{- end -}}
{{ $pane := "none" }}
{{ with .pane }}
{{- $supportedPanes := slice "none" "persona" -}}
{{- $pane = . }}
{{- if not (in $supportedPanes $pane) -}}
{{- errorf "partial [assets/nav.html] - Invalid value for param 'pane'" -}}
{{- end -}}
{{ end }}
{{ $supportedWidths := slice 50 100 -}}
{{ $widthParam := 100 -}}
{{ $width := 100 }}
{{ with .width }}{{ $widthParam = . }}{{ end -}}
{{ if in $supportedWidths $widthParam -}}
{{ $width = int $widthParam }}
{{ else -}}
{{ errorf "partial [assets/nav.html] - Invalid value for param 'width': %s" $widthParam -}}
{{ end -}}
{{- $title := .title -}} {{- $title := .title -}}
{{- $class := .class -}} {{- $class := .class -}}
{{- $color := .color -}} {{- $color := .color -}}
{{- $wrap := .wrap | default false -}} {{- $wrap := .wrap | default false -}}
{{ $vertical := .vertical | default false }}
{{ $type := .type | default "pills" }}
{{- $loading := .loading | default "eager" -}}
{{ $supportedFlags := slice "true" "false" -}} <!-- Main code -->
{{ $verticalParam := "false" -}}
{{ $vertical := false }}
{{ with .vertical }}{{ $verticalParam = . }}{{ end -}}
{{ if in $supportedFlags $verticalParam -}}
{{ if eq $verticalParam "true" }}{{ $vertical = true }}{{ else }}{{ $vertical = false }}{{ end -}}
{{ else -}}
{{ errorf "partial [assets/nav.html] - Invalid value for param 'vertical': %s" $verticalParam -}}
{{ end -}}
{{ $type := "pills" }}
{{ with .type }}
{{ $type = . -}}
{{ $supportedNavTypes := slice "tabs" "pills" "underline" "callout" -}}
{{ if $type }}
{{ if not (in $supportedNavTypes $type) -}}
{{ errorf "partial [assets/nav.html] - Invalid value for param 'type': %s" $type -}}
{{ end -}}
{{ end -}}
{{ end -}}
{{- $loading := .loading -}}
{{- $validSettings := slice "lazy" "eager" -}}
{{- if $loading -}}
{{ if not (in $validSettings $loading) -}}
{{- errorf "partial [assets/nav.html] - Invalid value for param 'loading': %s" $loading -}}
{{ end -}}
{{- end -}}
<div class="{{ if eq $width 50 }}col-sm-12 col-md-10 col-lg-8 col-xl-6{{ else }}col-12{{ end }} mx-auto"> <div class="{{ if eq $width 50 }}col-sm-12 col-md-10 col-lg-8 col-xl-6{{ else }}col-12{{ end }} mx-auto">
{{ if $vertical }}<div class="d-flex align-items-start">{{ end }} {{ if $vertical }}<div class="d-flex align-items-start">{{ end }}
{{ if eq $type "callout" }} {{ if eq $type "callout" }}
<div class="d-lg-none"> <div class="d-lg-none">
<div id="accordion-{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }} nav-callout"> <div id="accordion-{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }} nav-callout">
{{- range $index, $item := $list -}} {{- range $index, $item := $list -}}
{{ partial "assets/nav-item" (dict {{ partial "assets/nav-item.html" (dict
"id" $index "id" $index
"parentID" $id "parentID" $id
"fade" false "fade" false
@@ -101,7 +42,7 @@
"body" (or $item.Description $item.Content) "body" (or $item.Description $item.Content)
"show" false "show" false
"disabled" false "disabled" false
"type" "accordion" "item_type" "accordion"
"illustration" (partial "utilities/GetIllustration.html" (dict "item" $item "size" "col-12")) "illustration" (partial "utilities/GetIllustration.html" (dict "item" $item "size" "col-12"))
) )
}} }}

View File

@@ -1,22 +1,17 @@
<!-- <!--
Displays a navigation header with a toggler. The partial supports the following arguments: Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
"id" Optional id of the navbar, defaults to "navbar-0". The id is used by several child elements, Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
including a color mode switcher, version switcher, and collapse panel. Visit gethinode.com/license for more details.
"page" Required object reference to the current page.
"menus" Optional name of the menu configuration, defaults to "main".
"size" Optional breakpoint of the navbar toggler, either "xs", "sm", "md" (default), "lg", or "xl".
"fixed" Optional flag to indicate the navbar should stick to the top, defaults to false.
"color" Optional background color of the navbar, either "primary", "secondary", "success",
"danger", "warning", "info", "white", "black", "body", or "body-tertiary". The default color is
none.
"mode" Optional flag to include a color mode switcher, default is "true" (if dark mode is enabled).
"search" Optional flag to include a search input, default is "true".
"logo" Optional address of the logo image, defaults to the parameter "logo" set in the "main" section of
the site's parameter configuration.
"title" Optional brand title, displayed when the logo is not set. Defaults to the site's title.
"class" Optional class attribute of the navbar container.
--> -->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "navbar" "args" . "group" "partial") }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Inline partial to render the color mode switcher --> <!-- Inline partial to render the color mode switcher -->
{{- define "partials/navbar-mode.html" -}} {{- define "partials/navbar-mode.html" -}}
{{- $size := .size -}} {{- $size := .size -}}
@@ -97,22 +92,13 @@
</li> </li>
{{- end -}} {{- end -}}
<!-- Initialize arguments -->
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}} {{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $supportedFlags := slice "true" "false" -}} {{- $id := .id | default (printf "navbar-%d" 0) -}}
{{- $id := printf "navbar-%d" 0 -}}
{{ with .id }}
{{ $id = . }}
{{ end }}
{{- $page := .page -}} {{- $page := .page -}}
{{- if not $page -}}
{{- errorf "partial [assets/navbar.html] - Missing value for param 'page'" -}}
{{- end -}}
{{- $defaultMenu := "main" }} {{- $defaultMenu := "main" -}}
{{- $menuName := $defaultMenu }} {{- $menuName := .menus | default $defaultMenu }}
{{- with .menus }}{{ $menuName = . }}{{ end -}}
{{- $menus := index site.Menus $menuName -}} {{- $menus := index site.Menus $menuName -}}
{{- if or (ne (printf "%T" $menus) "navigation.Menu") (ne (index $menus 0).Menu $menuName) -}} {{- if or (ne (printf "%T" $menus) "navigation.Menu") (ne (index $menus 0).Menu $menuName) -}}
{{- if ne $menuName $defaultMenu }} {{- if ne $menuName $defaultMenu }}
@@ -120,51 +106,12 @@
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
{{- $size := "md" -}} {{- $size := .size | default "md" -}}
{{- with .size }}{{ $size = . }}{{ end -}} {{- $fixed := .fixed | default false -}}
{{- $supportedSizes := slice "xs" "sm" "md" "lg" "xl" -}} {{- $color := .color | default "" -}}
{{- if not (in $supportedSizes $size) -}} {{- $search := .search | default site.Params.navigation.search -}}
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'size': %s" $size -}}
{{- end -}}
{{- $fixedParam := "false" -}}
{{- $fixed := false -}}
{{- with .fixed }}{{ $fixedParam = . }}{{ end -}}
{{- if in $supportedFlags $fixedParam -}}
{{- if eq $fixedParam "true" }}{{ $fixed = true }}{{ else }}{{ $fixed = false }}{{ end -}}
{{- else -}}
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'fixed': %s" $fixedParam -}}
{{- end -}}
{{- $color := "" -}}
{{- with .color -}}
{{- $color = . -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "white" "black" "body" "body-tertiary" -}}
{{- if not (in $supportedColors $color) -}}
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'color': %s" $color -}}
{{- end -}}
{{- end -}}
{{- $search := default true site.Params.navigation.search -}}
{{- with .search -}}
{{- $searchParam := . -}}
{{- if in $supportedFlags $searchParam -}}
{{- if eq $searchParam "true" }}{{ $search = true }}{{ else }}{{ $search = false }}{{ end -}}
{{- else -}}
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'search': %s" $searchParam -}}
{{- end -}}
{{- end -}}
{{- $searchModal := and $search site.Params.navigation.searchModal -}} {{- $searchModal := and $search site.Params.navigation.searchModal -}}
{{- $enableDarkMode := .mode | default site.Params.main.enableDarkMode -}}
{{- $enableDarkMode := default false site.Params.main.enableDarkMode -}}
{{- with .mode -}}
{{- $darkModeParam := . -}}
{{- if in $supportedFlags $darkModeParam -}}
{{- if eq $darkModeParam "true" }}{{ $enableDarkMode = site.Params.main.enableDarkMode }}{{ else }}{{ $enableDarkMode = false }}{{ end -}}
{{- else -}}
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'darkMode': %s" $darkModeParam -}}
{{- end -}}
{{- end -}}
{{- $enableVersions := false -}} {{- $enableVersions := false -}}
{{ $list := site.Params.docs.releases }} {{ $list := site.Params.docs.releases }}
@@ -173,15 +120,11 @@
{{ end }} {{ end }}
{{- $enableLanguage := or $page.IsTranslated site.IsMultiLingual -}} {{- $enableLanguage := or $page.IsTranslated site.IsMultiLingual -}}
{{- $horizontal := default false site.Params.navigation.horizontal -}} {{- $horizontal := default false site.Params.navigation.horizontal -}}
{{- $logo := site.Params.navigation.logo -}} {{- $logo := .logo | default site.Params.navigation.logo -}}
{{- $logoLight := "" -}} {{- $logoLight := "" -}}
{{- $logoDark := "" -}} {{- $logoDark := "" -}}
{{- with .logo }}
{{ $logo = . }}
{{- end -}}
{{- if $enableDarkMode -}} {{- if $enableDarkMode -}}
{{ $ext := path.Ext $logo -}} {{ $ext := path.Ext $logo -}}
{{- $logoLight = printf "%s-light%s" (strings.TrimSuffix $ext $logo) $ext -}} {{- $logoLight = printf "%s-light%s" (strings.TrimSuffix $ext $logo) $ext -}}
@@ -222,6 +165,7 @@
{{- $contrast := false -}} {{- $contrast := false -}}
{{- if in (slice "primary" "secondary" "success" "danger") $color }}{{ $contrast = true }}{{ end -}} {{- if in (slice "primary" "secondary" "success" "danger") $color }}{{ $contrast = true }}{{ end -}}
<!-- Main code -->
<div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0{{ with $class }} {{ . }}{{ end }}"> <div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0{{ with $class }} {{ . }}{{ end }}">
{{- partial "assets/page-alert.html" (dict "page" $page) -}} {{- partial "assets/page-alert.html" (dict "page" $page) -}}
<nav class="navbar {{ if $fixed }}navbar-fixed-top{{ end }} navbar-expand-{{ $size }}{{ if $contrast }} navbar-contrast{{ end }}{{ with $color }} bg-{{ . }}{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}> <nav class="navbar {{ if $fixed }}navbar-fixed-top{{ end }} navbar-expand-{{ $size }}{{ if $contrast }} navbar-contrast{{ end }}{{ with $color }} bg-{{ . }}{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>

View File

@@ -1,30 +1,18 @@
<!-- <!--
Displays a custom persona card. Either specify a valid path, or set the arguments title, href, content, and Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
thumbnail individually. The latter arguments override any page attributes. Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
Visit gethinode.com/license for more details.
The shortcode supports the following arguments:
"path" Optional path of the page, override with other parameters.
"title" Required title of the card.
"href" Optional address for the button or hyperlink.
"class" Optional class attribute of the card element, e.g. “w-50”.
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no
color is specified.
"content" Optional content of the card.
"thumbnail" Optional thumbnail image url, displayed on top or the left of the card.
--> -->
<!-- Inline partial to render the card's body --> {{ $error := false }}
{{- define "partials/persona-body.html" -}}
{{- $title := .title -}}
{{- $href := .href -}}
{{- $color := .color -}}
{{- $content := .content -}}
<h3>{{ $title }}</h3> <!-- Validate arguments -->
{{ with $content }}<p>{{ . }}</p>{{ end -}} {{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "persona" "args" . "group" "partial") }}
{{- end -}} {{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $page := "" }} {{- $page := "" }}
{{- if .path }} {{- if .path }}
{{- $page = site.GetPage .path }} {{- $page = site.GetPage .path }}
@@ -38,14 +26,7 @@
{{- $content := .content -}} {{- $content := .content -}}
{{- $thumbnail := .thumbnail -}} {{- $thumbnail := .thumbnail -}}
{{- $color := "" -}} {{- $color := .color -}}
{{- with .color }}{{ $color = . }}{{ end -}}
{{- if $color -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
{{- if not (in $supportedColors $color) -}}
{{- errorf "partial [assets/persona.html] - Invalid value for param 'color': %s" $color -}}
{{- end -}}
{{- end -}}
{{- with $page -}} {{- with $page -}}
{{- if not $title }}{{ $title = .Title }}{{ end -}} {{- if not $title }}{{ $title = .Title }}{{ end -}}
@@ -55,48 +36,68 @@
{{- end -}} {{- end -}}
{{- $class := .class -}} {{- $class := .class -}}
{{- $loading := .loading -}} {{- $loading := .loading -}}
{{- $validSettings := slice "lazy" "eager" -}} {{- $tab := site.Params.main.externalLinks.tab -}}
{{- if $loading -}} {{- $isExternal := ne (urls.Parse (absURL $href)).Host (urls.Parse site.BaseURL).Host -}}
{{ if not (in $validSettings $loading) -}} {{- $target := "" -}}
{{- errorf "partial [assets/persona.html] - Invalid value for param 'loading': %s" $loading -}} {{- $rel := "" -}}
{{ end -}} {{- if and $isExternal $tab -}}
{{- $target = "_blank" -}}
{{- $rel = "noopener noreferrer" -}}
{{- end -}} {{- end -}}
<div class="d-none d-md-block"> <!-- Inline partial to render the card's body -->
<div class="persona position-relative row mt-5 align-middle p-3"> {{- define "partials/persona-body.html" -}}
<div class="col-2"> {{- $title := .title -}}
<div class="position-absolute top-50 start-0 translate-middle-y col-4 ps-3"> {{- $content := .content -}}
{{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "title" $title "ratio" "1x1" "innerClass" "rounded-5" "loading" $loading) -}} <h3>{{ $title }}</h3>
{{ end }} {{ with $content }}<p>{{ . }}</p>{{ end -}}
{{- end -}}
<!-- Main code -->
{{- if not $error -}}
{{ with $href }}
<a href="{{ . }}" aria-label="{{ $title | safeHTML }}"
{{- with $target }} target="{{ . }}"{{ end }}
{{ with $rel }} rel="{{ . }}"{{ end -}}
>
{{ end }}
<div class="d-none d-md-block">
<div class="persona position-relative row mt-5 align-middle p-3">
<div class="col-2">
<div class="position-absolute top-50 start-0 translate-middle-y col-4 ps-3">
{{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "title" $title "ratio" "1x1" "class" "rounded-5" "loading" $loading) -}}
{{ end }}
</div>
</div> </div>
</div> <div class="col-10 {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} rounded-5 fs-md-5 fs-6 pe-5 pb-3">
<div class="col-10 {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} rounded-5 fs-md-5 fs-6 pe-5 pb-3"> <div class="row">
<div class="row"> <div class="col-3"></div>
<div class="col-3"></div> <div class="col-9">
<div class="col-9"> {{- partial "persona-body.html" (dict "title" $title "content" $content) -}}
{{- partial "persona-body.html" (dict "title" $title "href" $href "color" $color "content" $content) -}} </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="d-md-none"> <div class="d-md-none">
<div class="persona position-relative row mt-5 align-middle p-3 ptw-5"> <div class="persona position-relative row mt-5 align-middle p-3 ptw-5">
<div class="col-12"> <div class="col-12">
<div class="position-absolute top-25 start-50 translate-middle col-6"> <div class="position-absolute top-25 start-50 translate-middle col-6">
{{- if $thumbnail -}} {{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "title" $title "ratio" "1x1" "innerClass" "rounded-5" "loading" $loading) -}} {{- partial "assets/image.html" (dict "url" $thumbnail "title" $title "ratio" "1x1" "class" "rounded-5" "loading" $loading) -}}
{{ end }} {{ end }}
</div>
</div> </div>
</div> <div class="col-12 {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} rounded-5 ptw-lg-5 ptw-3 ptw-sm-4 fs-md-5 fs-6 pb-3">
<div class="col-12 {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} rounded-5 ptw-lg-5 ptw-3 ptw-sm-4 fs-md-5 fs-6 pb-3"> <div class="p-3">
<div class="p-5"> {{- partial "persona-body.html" (dict "title" $title "content" $content) -}}
{{- partial "persona-body.html" (dict "title" $title "href" $href "color" $color "content" $content) -}} </div>
</div> </div>
</div> </div>
</div> </div>
</div> {{ if $href }}</a>{{ end }}
{{ end }}

View File

@@ -12,7 +12,7 @@
{{ $padding := 5 }} {{ $padding := 5 }}
{{- if $thumbnail -}} {{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "outerClass" "h-100 card-img-wrap" "innerClass" "rounded-start card-img-h100" "title" $title) -}} {{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "wrapper" "h-100 card-img-wrap" "class" "rounded-start card-img-h100" "title" $title) -}}
{{- else if $icon -}} {{- else if $icon -}}
<div class="text-secondary fw-bold"> <div class="text-secondary fw-bold">
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-10x" $icon)) -}} {{- partial "assets/icon.html" (dict "icon" (printf "%s fa-10x" $icon)) -}}

View File

@@ -44,7 +44,7 @@
{{- with index . "sectionHeader" }}{{ $sectionHeader = . }}{{ end -}} {{- with index . "sectionHeader" }}{{ $sectionHeader = . }}{{ end -}}
{{- with index . "sort" }}{{ $sort = . }}{{ end -}} {{- with index . "sort" }}{{ $sort = . }}{{ end -}}
{{- if (index . "reverse") }}{{ $order = "desc" }}{{ else }}{{ $order = "asc" }}{{ end -}} {{- if (index . "reverse") }}{{ $order = "desc" }}{{ else }}{{ $order = "asc" }}{{ end -}}
{{- if $home }}{{- if (isset . "nested") }}{{ $nested = (index . "nested") }}{{ end -}}{{ end -}} {{- if (isset . "nested") }}{{ $nested = (index . "nested") }}{{ end -}}
{{- if (index . "separator") }}{{ $separator = true }}{{ else }}{{ $separator = false }}{{ end -}} {{- if (index . "separator") }}{{ $separator = true }}{{ else }}{{ $separator = false }}{{ end -}}
{{- with index . "orientation" }}{{ $orientation = . }}{{ end -}} {{- with index . "orientation" }}{{ $orientation = . }}{{ end -}}
{{- with index . "cols" }}{{ $cols = . }}{{ end -}} {{- with index . "cols" }}{{ $cols = . }}{{ end -}}
@@ -64,6 +64,10 @@
{{- with index . "ratio" }}{{ $ratio = . }}{{ end -}} {{- with index . "ratio" }}{{ $ratio = . }}{{ end -}}
{{- with index . "wrap" }}{{ $wrap = . }}{{ end -}} {{- with index . "wrap" }}{{ $wrap = . }}{{ end -}}
{{- end -}} {{- end -}}
{{ if isset $page.Params "nested" }}
{{ $nested = $page.Params.nested }}
{{ end }}
{{ if ne (printf "%T" $nested) "bool" }} {{ if ne (printf "%T" $nested) "bool" }}
{{ errorf "partial [assets/section-list.html] - Invalid value for param 'nested'"}} {{ errorf "partial [assets/section-list.html] - Invalid value for param 'nested'"}}
{{ end }} {{ end }}
@@ -84,13 +88,19 @@
{{ $opts := dict "namedSlices" (slice $keywords) }} {{ $opts := dict "namedSlices" (slice $keywords) }}
{{ $list = site.RegularPages.Related $opts }} {{ $list = site.RegularPages.Related $opts }}
{{ end }} {{ end }}
{{ else if $nested }}
{{ $list = where site.RegularPages "Type" "in" $section }}
{{ else if $home }} {{ else if $home }}
{{ $sectionPage := site.GetPage "section" $section }} {{ $sectionPage := site.GetPage "section" $section }}
{{ $list = $sectionPage.RegularPages }} {{ if $nested }}
{{ $list = $sectionPage.RegularPagesRecursive }}
{{ else }}
{{ $list = $sectionPage.Pages }}
{{ end }}
{{ else }} {{ else }}
{{ $list = $page.RegularPages }} {{ if $nested }}
{{ $list = $page.RegularPagesRecursive }}
{{ else }}
{{ $list = $page.Pages }}
{{ end }}
{{ end }} {{ end }}
{{ $max := (len $list) -}} {{ $max := (len $list) -}}
@@ -138,6 +148,20 @@
<div class="container-xxl {{ $wrapper }}"> <div class="container-xxl {{ $wrapper }}">
{{- partial "assets/section-header.html" $params -}} {{- partial "assets/section-header.html" $params -}}
{{- $params := (dict
"page" $page
"list" $list
"title" $title
"icon" $icon
"thumbnail" $thumbnail
"ratio" $ratio
"description" $description
"class" $style
"color" $color
"loading" $loading
)
-}}
{{ if eq $layout "card" }} {{ if eq $layout "card" }}
{{- $partial = "assets/card-group.html" -}} {{- $partial = "assets/card-group.html" -}}
{{- $params = merge $params (dict {{- $params = merge $params (dict

View File

@@ -36,7 +36,7 @@
{{- $target = (printf "toast-message-%s-%d" (anchorize $item.name) $index ) -}} {{- $target = (printf "toast-message-%s-%d" (anchorize $item.name) $index ) -}}
{{- $clipboard = $url -}} {{- $clipboard = $url -}}
{{- $url = "#!" -}} {{- $url = "#!" -}}
{{- partial "assets/toast.html" (dict "id" $target "message" (printf "%s %s" (T "link") (T "copiedToClipboard"))) -}} {{- partial "assets/toast.html" (dict "id" $target "message" (printf "%s %s" (T "link") (T "copiedToClipboard"))) -}}
{{- end -}} {{- end -}}
{{ partial "assets/button.html" (dict "toast" $target "clipboard" $clipboard "href" $url "icon" (printf "%s fa-fw" $item.icon) "class" "btn-social p-0" "label" (T "shareLink" $item.name) "spacing" false) }} {{ partial "assets/button.html" (dict "toast" $target "clipboard" $clipboard "href" $url "icon" (printf "%s fa-fw" $item.icon) "class" "btn-social p-0" "label" (T "shareLink" $item.name) "spacing" false) }}
{{- end -}} {{- end -}}

View File

@@ -71,7 +71,7 @@
<li> <li>
{{ $class := "sidebar-item text-decoration-none rounded" }} {{ $class := "sidebar-item text-decoration-none rounded" }}
{{ if $active }}{{ $class = printf "%s active" $class }}{{ end }} {{ if $active }}{{ $class = printf "%s active" $class }}{{ end }}
{{ $link := partial "utilities/link.html" (dict "destination" $href "text" $title "class" $class "page" $page) }} {{ $link := partial "assets/link.html" (dict "destination" $href "text" $title "class" $class "page" $page) }}
{{ if $link }} {{ if $link }}
{{ print $link | safeHTML }} {{ print $link | safeHTML }}
{{ else }} {{ else }}
@@ -84,7 +84,7 @@
<li> <li>
{{ $class := "sidebar-item text-decoration-none rounded small" }} {{ $class := "sidebar-item text-decoration-none rounded small" }}
{{ if $active }}{{ $class = printf "%s active" $class }}{{ end }} {{ if $active }}{{ $class = printf "%s active" $class }}{{ end }}
{{ $link := partial "utilities/link.html" (dict "destination" $href "text" $title "class" $class "page" $page) }} {{ $link := partial "assets/link.html" (dict "destination" $href "text" $title "class" $class "page" $page) }}
{{ if $link }} {{ if $link }}
{{ print $link | safeHTML }} {{ print $link | safeHTML }}
{{ else }} {{ else }}

View File

@@ -0,0 +1,25 @@
{{ $page := .page }}
{{ $input := .input }}
{{ $args := .args }}
{{- $responsiveVals := slice "table-responsive" "table-responsive-none" "table-responsive-sm" "table-responsive-md" "table-responsive-lg" "table-responsive-xl" "table-responsive-xxl" -}}
{{- $responsive := intersect $args $responsiveVals -}}
{{- $main := complement $responsive $args -}}
{{- if in $responsive "table-responsive-none" -}}
{{- $responsive = "" -}}
{{- else if not $responsive -}}
{{ $responsive = (slice "table-responsive") -}}
{{- end -}}
{{- $input := $input | $page.RenderString }}
{{- $input = replace $input "style=\"text-align:left\"" "class=\"text-start\"" -}}
{{- $input = replace $input "style=\"text-align:center\"" "class=\"text-center\"" -}}
{{- $input = replace $input "style=\"text-align:right\"" "class=\"text-end\"" -}}
{{- $class := delimit $main " " -}}
{{- $old := "<table>" -}}
{{- $new := printf "<table class=\"table %s\">" $class -}}
{{ $input := replace $input $old $new -}}
{{- with $responsive }}<div class="{{ delimit . " " }}">{{ end -}}
{{ $input | safeHTML }}
{{- with $responsive }}</div>{{ end -}}

View File

@@ -1,27 +1,24 @@
<!-- <!--
Prepares a toast message. Use a trigger to display the message. The shortcode supports the following arguments: Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
"id" Optional id of the toast message, defaults to "toast-message-0". Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
"header": Optional header of the toast message. Visit gethinode.com/license for more details.
"message": Required toast message.
"class": Optional class attribute of the toast element.
--> -->
{{- $id := printf "toast-message-%d" 0 -}} {{ $error := false }}
{{ with .id }}
{{ $id = . }} <!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "toast" "args" . "group" "partial") }}
{{- errorf "partial [assets/toast.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }} {{ end }}
{{ $header := .header -}} <!-- Initialize arguments -->
{{ if not $header -}} {{- $id := .id | default (printf "toast-message-%d" 0) -}}
{{ $header = site.Title -}} {{ $header := .header | default site.Title -}}
{{ end -}}
{{- $message := .message -}} {{- $message := .message -}}
{{ if not $message -}}
{{- errorf "partial [assets/toast.html] - Missing message text" -}}
{{ end -}}
{{- $class := .class -}} {{- $class := .class -}}
<!-- Main code -->
<div id="{{ $id }}" class="toast{{ with $class }} {{ . }}{{ end }}" role="alert" aria-live="assertive" aria-atomic="true"> <div id="{{ $id }}" class="toast{{ with $class }} {{ . }}{{ end }}" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header"> <div class="toast-header">
{{ with $header }}<strong class="me-auto">{{ . }}</strong>{{ end }} {{ with $header }}<strong class="me-auto">{{ . }}</strong>{{ end }}

View File

@@ -1,7 +1,7 @@
<!-- <!--
Returns the current version defined in 'package.json` in the repository root, or in the documentation base path Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
('params.docs.basePath') if specified. The returned version includes a 'v' prefix. The partial returns nothing Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
when no match is found. The partial does not require any arguments. Visit gethinode.com/license for more details.
--> -->
{{- $file := "package.json" -}} {{- $file := "package.json" -}}

View File

@@ -5,7 +5,7 @@
{{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }} {{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }}
{{ .Site.Params.footer.license | safeHTML }} {{ .Site.Params.footer.license | safeHTML }}
{{ if .Site.Params.main.endorse }} {{ if .Site.Params.main.endorse }}
{{ $link := partial "utilities/link" (dict "destination" (index site.Params.links "hinode") "text" "Hinode" "class" "link-bg-footer") }} {{ $link := partial "assets/link.html" (dict "destination" (index site.Params.links "hinode") "text" "Hinode" "class" "link-bg-footer" "page" .Page) }}
{{ T "poweredBy" $link | safeHTML }} {{ T "poweredBy" $link | safeHTML }}
{{ end }} {{ end }}
</small> </small>

View File

@@ -56,7 +56,7 @@
{{ else }} {{ else }}
{{- $thumbnail := (or (and (reflect.IsMap $page.Params.Thumbnail) $page.Params.Thumbnail.url) $page.Params.Thumbnail) -}} {{- $thumbnail := (or (and (reflect.IsMap $page.Params.Thumbnail) $page.Params.Thumbnail.url) $page.Params.Thumbnail) -}}
{{- if $thumbnail }} {{- if $thumbnail }}
{{ partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "outerClass" $style "innerClass" "rounded" "title" $page.Site.Title) }} {{ partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "wrapper" $style "class" "rounded" "title" $page.Site.Title "priority" "high") }}
{{ end }} {{ end }}
{{ end }} {{ end }}
{{- end -}} {{- end -}}
@@ -64,7 +64,7 @@
<div class="container-fluid p-0 {{ with site.Params.home.feature.color }} bg-{{ . }} bg-opacity-{{ site.Params.style.themeOpacity | default "25" | safeHTML }}{{ end }}"> <div class="container-fluid p-0 {{ with site.Params.home.feature.color }} bg-{{ . }} bg-opacity-{{ site.Params.style.themeOpacity | default "25" | safeHTML }}{{ end }}">
<div class="container-xxl p-4 px-xxl-0 {{ if site.Params.home.fullCover }} fullcover{{ end }} d-flex flex-column"> <div class="container-xxl p-4 px-xxl-0 {{ if site.Params.home.fullCover }} fullcover{{ end }} d-flex flex-column">
{{ if $breadcrumb }} {{ if $breadcrumb }}
<div>{{ partial "assets/breadcrumb.html" $page }}</div> <div>{{ partial "assets/breadcrumb.html" (dict "page" $page) }}</div>
{{ end -}} {{ end -}}
{{ if eq $orientation "stacked" }} {{ if eq $orientation "stacked" }}

View File

@@ -1,6 +1,6 @@
{{- $page := .page -}} {{- $page := .page -}}
{{- $class := printf "img-wrap" -}} {{- $class := printf "img-wrap" -}}
{{- with .class }}{{ $class := printf "img-wrap %s" . }}{{ end -}} {{- with .class }}{{ $class = printf "img-wrap %s" . }}{{ end -}}
{{- $ratio := .ratio | default "21x9" -}} {{- $ratio := .ratio | default "21x9" -}}
{{- $thumbnail := "" -}} {{- $thumbnail := "" -}}
{{- $credits := "" -}} {{- $credits := "" -}}
@@ -9,14 +9,14 @@
{{- $thumbnail = $page.Params.Thumbnail.url -}} {{- $thumbnail = $page.Params.Thumbnail.url -}}
{{- $author := "" -}} {{- $author := "" -}}
{{- if and $page.Params.Thumbnail.authorURL "text" $page.Params.Thumbnail.author }} {{- if and $page.Params.Thumbnail.authorURL "text" $page.Params.Thumbnail.author }}
{{- $author = partial "utilities/link" (dict "destination" $page.Params.Thumbnail.authorURL "text" $page.Params.Thumbnail.author) -}} {{- $author = partial "assets/link.html" (dict "destination" $page.Params.Thumbnail.authorURL "text" $page.Params.Thumbnail.author "page" $page) -}}
{{- else if $page.Params.Thumbnail.author }} {{- else if $page.Params.Thumbnail.author }}
{{- $author = $page.Params.Thumbnail.author -}} {{- $author = $page.Params.Thumbnail.author -}}
{{- end -}} {{- end -}}
{{- $origin := "" -}} {{- $origin := "" -}}
{{- if and $page.Params.Thumbnail.originURL "text" $page.Params.Thumbnail.origin }} {{- if and $page.Params.Thumbnail.originURL "text" $page.Params.Thumbnail.origin }}
{{- $origin = partial "utilities/link" (dict "destination" $page.Params.Thumbnail.originURL "text" $page.Params.Thumbnail.origin) -}} {{- $origin = partial "assets/link.html" (dict "destination" $page.Params.Thumbnail.originURL "text" $page.Params.Thumbnail.origin "page" $page) -}}
{{- else if $page.Params.Thumbnail.origin }} {{- else if $page.Params.Thumbnail.origin }}
{{- $origin = $page.Params.Thumbnail.origin -}} {{- $origin = $page.Params.Thumbnail.origin -}}
{{- end }} {{- end }}
@@ -35,5 +35,5 @@
{{- end -}} {{- end -}}
{{ if $thumbnail -}} {{ if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" $ratio "outerClass" $class "innerClass" "rounded" "title" $page.Params.title "caption" $credits) -}} {{- partial "assets/image.html" (dict "url" $thumbnail "ratio" $ratio "wrapper" $class "class" "rounded" "title" $page.Params.title "caption" $credits "priority" "high") -}}
{{ end -}} {{ end -}}

View File

@@ -0,0 +1,14 @@
{{ $input := . }}
{{ $output := "" }}
{{ if eq (printf "%T" $input) "bool" }}
{{ $output = $input }}
{{ else if eq $input "true" }}
{{ $output = true }}
{{ else if eq $input "false" }}
{{ $output = false }}
{{ else }}
{{ errorf "Cannot cast '%s' to bool" $input }}
{{ end }}
{{ return $output }}

View File

@@ -0,0 +1,21 @@
{{- /* Define main breakpoint */ -}}
{{ $prev := 0 }}
{{ $next := 0 }}
{{ $result := dict }}
{{- $breakpoints := slice "xs" "sm" "md" "lg" "xl" "xxl" }}
{{- $breakpoint := site.Params.main.breakpoint | default "md" -}}
{{- if not (in $breakpoints $breakpoint) -}}
{{- errorf "layout [_default/baseof.html] - Invalid value for param 'breakpoint': %s" $breakpoint -}}
{{ else }}
{{ range $index, $item := $breakpoints }}
{{ if eq $item $breakpoint }}
{{ $prev = sub $index 1 }}
{{ $next = add $index 1 }}
{{ end }}
{{ end }}
{{ if lt $prev 0 }}{{ $prev = 0 }}{{ end }}
{{ if ge $next (len $breakpoints) }}{{ $next = sub (len $breakpoints) 1 }}{{ end }}
{{ $result = dict "prev" (index $breakpoints $prev) "current" $breakpoint "next" (index $breakpoints $next) }}
{{- end -}}
{{ return $result }}

View File

@@ -0,0 +1,13 @@
{{ $path := .data }}
{{ $page := .page }}
{{/* Try language-specific file first */}}
{{ $i18nPath := path.Join (path.Dir $path) (printf "%s.%s" (path.BaseName $path) $page.Language.Lang) (path.Ext $path) }}
{{ $data := index site.Data $i18nPath }}
{{/* Use exact provided path as backup */}}
{{ if not $data -}}
{{ $data = index site.Data $path }}
{{ end }}
{{ return $data }}

View File

@@ -14,7 +14,7 @@
{{ else }} {{ else }}
{{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}} {{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}}
{{- if $thumbnail }} {{- if $thumbnail }}
{{ $illustration = partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "outerClass" $style "innerClass" "rounded" "title" $item.Site.Title) }} {{ $illustration = partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "wrapper" $style "inner" "rounded" "title" $item.Site.Title) }}
{{ end }} {{ end }}
{{ end }} {{ end }}

View File

@@ -13,18 +13,8 @@
{{ $mirror := false }} {{ $mirror := false }}
{{ $supportedMediaTypes := slice "image/png" "image/jpeg" "image/gif" "image/tiff" "image/bmp" "image/webp" -}} {{ $supportedMediaTypes := slice "image/png" "image/jpeg" "image/gif" "image/tiff" "image/bmp" "image/webp" -}}
{{ $img := "" }}
{{ $remote := hasPrefix (lower $url) "http" }} {{ $remote := hasPrefix (lower $url) "http" }}
{{ if $remote }} {{- $img := partial "utilities/GetResource.html" (dict "url" $url "page" $page) -}}
{{ $img = resources.GetRemote $url -}}
{{ else }}
{{ if $page }}
{{ $img = $page.Resources.Get $url -}}
{{ end }}
{{ if not $img }}
{{ $img = resources.GetMatch $url }}
{{ end }}
{{ end }}
{{ with $img -}} {{ with $img -}}
{{ if in $supportedMediaTypes (string $img.MediaType) -}} {{ if in $supportedMediaTypes (string $img.MediaType) -}}

View File

@@ -0,0 +1,40 @@
<!--
Retrieve a local or remote resource. If the url starts with 'http', the resource is retrieved from an external
location. Else, the url is matched with a page resource and site asset (in that order).
This partial supports both relative and absolute paths. Hugo has different methods to retrieve page bundle assets
and site assets. Absolute paths are converted to a relative path to make them compatible with Hugo's methods. The
prefix of an absolute path is truncated if it matches either with the page bundle folder (starting with "/content/")
or the assets folder ("/assets/").
The partial returns nil if the resource cannot be found. The partial supports the following arguments:
"url" Required path or url of the resource, e.g. "img/example.jpg" or "https://example.com/img.jpg"
"page" Optional page context, used to retrieve a resource from page resources.
-->
{{ $url := .url -}}
{{ $page := .page -}}
{{ if hasPrefix $url "/" }}
{{ $pageContext := (path.Join "/content" $page.File.Dir) -}}
{{ if hasPrefix $url $pageContext }}
{{ $url = strings.TrimPrefix $pageContext $url -}}
{{ else if hasPrefix $url "/assets/" }}
{{ $url = strings.TrimPrefix "/assets/" $url -}}
{{ end }}
{{ $url = strings.TrimPrefix "/" $url -}}
{{ end }}
{{ $res := "" }}
{{ $remote := hasPrefix (lower $url) "http" }}
{{ if $remote }}
{{ $res = resources.GetRemote $url -}}
{{ else }}
{{ if $page }}
{{ $res = $page.Resources.Get $url -}}
{{ end }}
{{ if not $res }}
{{ $res = resources.GetMatch $url }}
{{ end }}
{{ end }}
{{ return $res -}}

View File

@@ -48,7 +48,8 @@
{{- $thumbnail := (or (and (reflect.IsMap $sectionPage.Params.Thumbnail) $sectionPage.Params.Thumbnail.url) $sectionPage.Params.Thumbnail) -}} {{- $thumbnail := (or (and (reflect.IsMap $sectionPage.Params.Thumbnail) $sectionPage.Params.Thumbnail.url) $sectionPage.Params.Thumbnail) -}}
{{- $icon := $sectionPage.Params.Icon -}} {{- $icon := $sectionPage.Params.Icon -}}
{{- $content := $sectionPage.Content -}} {{- $content := "" -}}
{{ if not $sectionPage.IsSection }}{{ $content = $sectionPage.Content }}{{ end -}}
{{- $sectionTitle := strings.FirstUpper $sectionPage.Type -}} {{- $sectionTitle := strings.FirstUpper $sectionPage.Type -}}
{{- $moreTitle := "" -}} {{- $moreTitle := "" -}}
{{- with (index site.Params.sections $section) -}} {{- with (index site.Params.sections $section) -}}
@@ -61,7 +62,6 @@
"section" $section "section" $section
"home" $page.IsHome "home" $page.IsHome
"simple" (eq (len $sections) 1) "simple" (eq (len $sections) 1)
"nested" (and $page.IsHome (eq $section $page.Section))
"thumbnail" $thumbnail "thumbnail" $thumbnail
"icon" $icon "icon" $icon
"content" $content "content" $content

View File

@@ -0,0 +1,146 @@
<!--
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
Visit gethinode.com/license for more details.
-->
{{ $error := false }}
{{ $aliases := dict "path" "string" "select" "string" "url" "string" }}
{{ $structure := .structure }}
{{ if not $structure }}
{{- errorf "partial [utilities/ValidateArgs.html] - Missing value for param 'structure'" -}}
{{ $error = true }}
{{ end }}
{{ $args := .args | default dict }}
{{ $definitions := (index site.Data.structures $structure).arguments }}
{{ if not $definitions }}
{{- errorf "partial [utilities/ValidateArgs.html] - Missing definitions: %s" $structure -}}
{{ $error = true }}
{{ end }}
{{ $child := .child }}
{{ if $child }}
{{ $extra_def := (index site.Data.structures $child).arguments }}
{{ if not $extra_def }}
{{- errorf "partial [utilities/ValidateArgs.html] - Missing definitions: %s" $child -}}
{{ $error = true }}
{{ else }}
{{ range $key, $val := $extra_def }}
{{ if $val.parent }}{{ $definitions = merge $definitions (dict $key $val) }}{{ end }}
{{ end }}
{{ end }}
{{ end }}
{{ $group := .group }}
{{ $namedArgs := true }}
{{ if not $error }}
{{ range $key, $val := $args }}
{{ $def := "" }}
{{ if eq (printf "%T" $key) "string" }}
{{ $def = index $definitions $key }}
{{ else }}
{{ $namedArgs = false }}
{{ range $d := $definitions }}
{{ if eq $d.position $key }}{{ $def = $d }}{{ end }}
{{ end }}
{{ end }}
{{ if $def }}
{{ $groups := slice | append $def.group }}
{{ if and $group $def.group }}
{{ if not (in $groups $group )}}{{ $def = "" }}{{ end }}
{{ end }}
{{ end }}
{{ if not $def }}
{{ if eq (printf "%T" $key) "string" }}
{{ warnf "[%s] unsupported argument '%s'" $structure $key }}
{{ else if eq (printf "%T" $key) "int" }}
{{ warnf "[%s] unsupported argument at index %d (value: '%s')" $structure $key $val }}
{{ else }}
{{ warnf "[%s] unsupported argument value '%s'" $structure $val }}
{{ end }}
{{ $error = true }}
{{ else }}
{{ if and (not $val) $def.default }}{{ $val = $def.default }}{{ end }}
{{/* validate type */}}
{{ $expected := slice | append $def.type }}
{{ $extra := slice }}
{{ range $expected }}
{{ $alias := index $aliases . }}
{{ if $alias }}{{ $extra = $extra | append $alias }}{{ end }}
{{ end }}
{{ if $extra }}{{ $expected = $expected | append $extra }}{{ end }}
{{ $actual := printf "%T" $val }}
{{/* cast supported types from/to string */}}
{{ if and (in $expected "bool") (in (slice "true" "false") $val) }}
{{ $actual = "bool" }}
{{ else if and (in $expected "int") (findRE `^-?\d+$` $val) }}
{{ $actual = "int" }}
{{ else if and (in $expected "float") (findRE `^(?:[1-9]\d*|0)?(?:\.\d+)?$` $val) }}
{{ $actual = "float" }}
{{ else if and (in $expected "string") (in (slice "bool" "int" "float" "float64") $actual) }}
{{ $actual = "string" }}
{{ end }}
{{ if and $val (not (in $expected $actual)) }}
{{ warnf "[%s] argument '%s': expected type '%s', got '%s'" $structure (string $key) (delimit $expected ", ") $actual }}
{{ $error = true }}
{{ end }}
{{/* validate permitted values */}}
{{ if and $def.options.values (eq $actual "string") }}
{{ if and $val (not (in $def.options.values $val)) }}
{{ warnf "[%s] argument '%s': unexpected value '%s'" $structure (string $key) $val }}
{{ $error = true }}
{{ end }}
{{ else if and $def.options.min (in (slice "int" "float" "float64") $actual) }}
{{ if lt $val $def.options.min }}
{{ warnf "[%s] argument '%s': value '%s' out of range [$d, $d]" $structure (string $key) $val $def.options.min $def.options.max}}
{{ $error = true }}
{{ end }}
{{ else if and $def.options.max (in (slice "int" "float" "float64") $actual) }}
{{ if (gt $val $def.options.max) }}
{{ warnf "[%s] argument '%s': value '%s' out of range [$d, $d]" $structure (string $key) $val $def.options.min $def.options.max}}
{{ $error = true }}
{{ end }}
{{ end }}
{{ end }}
{{ end }}
{{/* validate required arguments */}}
{{ $max := len $args }}
{{ $expected := 0 }}
{{ range $key, $val := $definitions }}
{{ $skip := false }}
{{ $groups := slice | append $val.group }}
{{ if and $group $val.group }}
{{ $skip = not (in $groups $group )}}
{{ end }}
{{ if and (not $skip) (not $val.optional) }}
{{ if $namedArgs }}
{{ if not (isset $args $key) }}
{{ warnf "[%s] argument '%s': expected value" $structure $key }}
{{ $error = true }}
{{ end }}
{{ else }}
{{ $expected = add $expected 1 }}
{{ end }}
{{ end }}
{{ end }}
{{ if lt $max $expected }}
{{ warnf "[%s] expected '%d' args, got '%d'" $structure $expected $max }}
{{ $error = true }}
{{ end }}
{{ end }}
{{ return $error }}

View File

@@ -1,46 +1,37 @@
<!-- <!--
Creates an HTML element that shows the long form of an abbrevitation. The abbreviation data is centrally stored in a Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
data file. By default, the shortcode uses "abbr.yaml" with translation support. Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
Visit gethinode.com/license for more details.
The data file is expected to store key-value pairs, where "id" is the lower-case abbrevation and "long" its long
form. The following example illustrates this using YML:
- id: css
long: "Cascading Style Sheets"
The shortcode supports the following arguments:
"key" Required case-insensitive key of the abbreviation. In shorthand notation, this is the first (and
only) matched argument.
"data" Optional filename of the abbrevation input. It defaults to "abbr.yaml" with translation support.
You can omit the file extension. The file should reside in the "data" folder. The data supports
language extensions. For example, "abbr.en.yaml" refers to the English translation of the
abbrevation data. The filename "abbr.yaml" is used when no suitable translation is found.
"class" Optional class attribute of the abbr element. For example, specify "initialism" for a slightly
smaller font size.
--> -->
{{ $error := false }} {{ $error := false }}
<!-- Validate and initialize arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "abbr" "args" .Params) }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments and default values -->
{{ $key := "" }} {{ $key := "" }}
{{- if .IsNamedParams }}{{ $key = .Get "key" }}{{ else }}{{ $key = .Get 0 }}{{ end }} {{ $data := "abbr" }}
{{ $class := "" }}
{{ $title := "" }}
{{ $entries := slice }}
{{ if not $key -}} {{- if .IsNamedParams }}
{{ errorf "Missing param 'key': %s" .Position -}} {{ $key = .Get "key" }}
{{ $error = true }} {{- $data := .Get "data" | default "abbr" -}}
{{ end -}} {{- $class := .Get "class" | default "" -}}
{{ else }}
{{- $data := .Get "data" | default "abbr" -}} {{ $key = .Get 0 }}
{{ if not $data -}} {{ end }}
{{ errorf "Missing param 'data': %s" .Position -}}
{{ $error = true }}
{{ end -}}
{{- $class := .Get "class" | default "" -}}
<!-- Main code -->
{{ if not $error }} {{ if not $error }}
{{/* Try language-specific file first */}} {{/* Try language-specific file first */}}
{{ $path := path.Join (path.Dir $data) (printf "%s.%s" (path.BaseName $data) .Page.Language.Lang) (path.Ext $data) }} {{ $path := path.Join (path.Dir $data) (printf "%s.%s" (path.BaseName $data) .Page.Language.Lang) (path.Ext $data) }}
{{ $entries := index site.Data $path }} {{ $entries = index site.Data $path }}
{{/* Use exact provided path as backup */}} {{/* Use exact provided path as backup */}}
{{ if not $entries -}} {{ if not $entries -}}
{{ $entries = index site.Data $data }} {{ $entries = index site.Data $data }}
@@ -49,20 +40,19 @@
{{ errorf "Invalid abbrevation data '%s': %s" $data .Position -}} {{ errorf "Invalid abbrevation data '%s': %s" $data .Position -}}
{{ $error = true }} {{ $error = true }}
{{ end -}} {{ end -}}
{{ end }}
{{ $title := "" }}
{{ if not $error }} {{ if not $error }}
{{ $elements := (where $entries "id" (lower $key)) }} {{ $elements := (where $entries "id" (lower $key)) }}
{{ if gt (len $elements) 0 }} {{ if gt (len $elements) 0 }}
{{ $title = index (index $elements 0) "long" }} {{ $title = index (index $elements 0) "long" }}
{{ end -}} {{ end -}}
{{ if not $title -}} {{ if not $title -}}
{{ errorf "Cannot find value for '%s': %s" $key .Position -}} {{ errorf "Cannot find value for '%s': %s" $key .Position -}}
{{ $error = true }} {{ $error = true }}
{{ end -}} {{ end -}}
{{ end }} {{ end }}
{{ if not $error }} {{ if not $error }}
<abbr {{ with $class }}class="{{ . }}"{{ end }} title="{{ $title }}" tabindex="0">{{ $key }}</abbr> <abbr {{ with $class }}class="{{ . }}"{{ end }} title="{{ $title }}" tabindex="0">{{ $key }}</abbr>
{{ end }}
{{ end }} {{ end }}

View File

@@ -1,27 +1,41 @@
<!-- <!--
Defines an individual accordion item. The shortcode supports the following arguments: Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
"header" Required header of the accordion element. Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
"class" Optional class attribute of the inner accordion element. Visit gethinode.com/license for more details.
"show" Optional flag to indicate an item should be shown as collapsed.
--> -->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "accordion-item" "args" .Params) }}
{{ if .Parent }}
{{ errorf "Invalid arguments: %s" .Parent.Position -}}
{{ else }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ end }}
{{ $error = true }}
{{ end }}
{{ if not .Parent }}
{{ errorf "Cannot use isolated accordion-item, wrap it in an accordion: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments and default values -->
{{- $id := .Ordinal -}} {{- $id := .Ordinal -}}
{{- $parent := printf "accordion-%d" .Parent.Ordinal -}} {{ $parent := "" }}
{{- with (.Parent.Get "id") -}} {{ if not $error }}
{{- $parent = . -}} {{- $parent = printf "accordion-%d" .Parent.Ordinal -}}
{{- with (.Parent.Get "id") -}}
{{- $parent = . -}}
{{- end -}}
{{- end -}} {{- end -}}
{{- $id := .Ordinal -}} {{- $id := .Ordinal -}}
{{ $header := .Get "header" | default "" -}} {{ $header := .Get "header" -}}
{{ if not $header -}}
{{ if .Parent }}
{{ errorf "Missing value for param 'header': %s" .Parent.Position -}}
{{ else }}
{{ errorf "Missing value for param 'header': %s" .Position -}}
{{ end }}
{{ end -}}
{{ $class := .Get "class" | default "" -}} {{ $class := .Get "class" | default "" -}}
{{ $body := trim .Inner " \r\n" -}} {{ $body := trim .Inner " \r\n" -}}
{{ if not $body -}} {{ if not $body -}}
{{ if .Parent }} {{ if .Parent }}
@@ -29,27 +43,24 @@
{{ else }} {{ else }}
{{ errorf "Missing inner element text: %s" .Position -}} {{ errorf "Missing inner element text: %s" .Position -}}
{{ end }} {{ end }}
{{ $error = true }}
{{ end -}} {{ end -}}
{{ $supportedFlags := slice "true" "false" -}} <!-- Main code -->
{{ $showParam := "false" -}}
{{ $show := false -}} {{ $show := false -}}
{{ with .Get "show" }}{{ $showParam = . }}{{ end -}} {{ if not $error }}
{{ if in $supportedFlags $showParam -}} {{ with .Get "show" }}{{ $show = partial "utilities/CastBool.html" . }}{{ end -}}
{{ if eq $showParam "true" }}{{ $show = true }}{{ else }}{{ $show = false }}{{ end -}}
{{ else -}}
{{ errorf "Invalid value for param 'show': %s" $showParam -}}
{{ end -}}
<div class="accordion-item"> <div class="accordion-item">
{{- with $header -}} {{- with $header -}}
<h2 class="accordion-header m-0" id="{{ $parent }}-heading-{{ $id }}"> <h2 class="accordion-header m-0" id="{{ $parent }}-heading-{{ $id }}">
<button class="accordion-button{{ if not $show }} collapsed{{ end }}" type="button" data-bs-toggle="collapse" data-bs-target="#{{ $parent }}-item-{{ $id }}" aria-expanded="false" aria-controls="{{ $parent }}-item-{{ $id }}"> <button class="accordion-button{{ if not $show }} collapsed{{ end }}" type="button" data-bs-toggle="collapse" data-bs-target="#{{ $parent }}-item-{{ $id }}" aria-expanded="false" aria-controls="{{ $parent }}-item-{{ $id }}">
{{ . }} {{ . }}
</button> </button>
</h2> </h2>
{{- end -}} {{- end -}}
<div id="{{ $parent }}-item-{{ $id }}" class="accordion-collapse collapse{{ if $show }} show{{ end }}{{ with $class }} {{ . }}{{ end }}" aria-labelledby="{{ $parent }}-heading-{{ $id }}" data-bs-parent="#{{ $parent }}"> <div id="{{ $parent }}-item-{{ $id }}" class="accordion-collapse collapse{{ if $show }} show{{ end }}{{ with $class }} {{ . }}{{ end }}" aria-labelledby="{{ $parent }}-heading-{{ $id }}" data-bs-parent="#{{ $parent }}">
<div class="accordion-body">{{ $body | .Page.RenderString | safeHTML }}</div> <div class="accordion-body">{{ $body | .Page.RenderString | safeHTML }}</div>
</div>
</div> </div>
</div> {{ end }}

View File

@@ -1,34 +1,31 @@
<!-- <!--
Displays a group of vertically collapsing and expanding items. Add accordion-item inner elements for each accordion Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
item. The shortcode supports the following arguments: Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
"id": Optional id of the accordion, defaults to "accordion-" with a sequential number. Visit gethinode.com/license for more details.
"always-open": Optional flag to make accordion items stay open when another item is opened.
"class": Optional class attribute of the accordion element, e.g. “w-50”.
--> -->
{{- $id := printf "accordion-%d" .Ordinal -}} {{ $error := false }}
{{ with .Get "id" }}
{{ $id = . }} <!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "accordion" "args" .Params) }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }} {{ end }}
{{- $class := .Get "class" | default "" -}}
{{- $openParam := "false" -}} <!-- Main code -->
{{- $open := false -}} {{ if not $error }}
{{- with .Get "always-open" }}{{ $openParam = . }}{{ end -}} {{- $id := printf "accordion-%d" .Ordinal -}}
{{- $supportedFlags := slice "true" "false" -}} {{ with .Get "id" }}{{ $id = . }}{{ end }}
{{- if in $supportedFlags $openParam -}} {{- $class := .Get "class" | default "" -}}
{{- if eq $openParam "true" }}{{ $open = true }}{{ end -}} {{- $open := false -}}
{{- else -}} {{ with .Get "always-open" }}{{ $open = partial "utilities/CastBool.html" . }}{{ end -}}
{{- errorf "Invalid value for param 'always-open': %s" .Position -}} {{- $body := .Inner -}}
{{- $error = true -}} {{- if $open -}}
{{- end -}} {{- $pattern := printf "data-bs-parent=\"#%s\"" $id -}}
{{- $body = (replace .Inner $pattern "") | .Page.RenderString | safeHTML }}
{{- end -}}
{{- $body := .Inner -}} <div id="{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }}">
{{- if $open -}} {{- $body -}}
{{- $pattern := printf "data-bs-parent=\"#%s\"" $id -}} </div>
{{- $body = (replace .Inner $pattern "") | .Page.RenderString | safeHTML }} {{ end }}
{{- end -}}
<div id="{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }}">
{{- $body -}}
</div>

View File

@@ -1,61 +1,41 @@
<!-- <!--
Displays an alert. The shortcode supports the following arguments: Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
"color": Optional theme color of the alert, either "primary" (default), "secondary", "success", "danger", Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
"warning", "info", "light", "dark", "white" or "black". Visit gethinode.com/license for more details.
"dismissible" Optional flag to indicate the alert is dismissible, defaults to false.
"icon" Optional class and name of a Font Awesome icon to include.
"type" Optional type of the alert, either "danger" or "info". Generates an alert with related color and
icon.
"class": Optional class attribute of the alert element.
--> -->
{{- $error := false -}} {{ $error := false }}
{{ $color := "primary" -}}
{{ $icon := "" }}
{{ $type := "" -}}
{{ with .Get "type" }}{{ $type = . }}{{ end -}} <!-- Validate arguments -->
{{ $supportedTypes := slice "danger" "info" -}} {{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "alert" "args" .Params) }}
{{ if $type }} {{ errorf "Invalid arguments: %s" .Position -}}
{{ if not (in $supportedTypes $type) -}} {{ $error = true }}
{{ errorf "Invalid value for param 'type': %s" .Position -}} {{ end }}
{{ $error = true -}}
{{ else }}
{{ $color = $type }}
{{ if eq $type "danger" }}{{ $icon = "fas triangle-exclamation" }}{{ else }}{{ $icon = "fa lightbulb" }}{{ end }}
{{ end -}}
{{ end -}}
{{ with .Get "color" }}{{ $color = . }}{{ end -}} <!-- Initialize arguments -->
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" -}} {{ $color := .Get "color" | default "danger" -}}
{{ if not (in $supportedColors $color) -}} {{ $icon := .Get "icon" | default "" }}
{{ errorf "Invalid value for param 'color': %s" .Position -}} {{ $type := .Get "type" | default "" -}}
{{ $error = true -}} {{ if eq $type "danger" }}{{ $icon = "fas triangle-exclamation" }}{{ else if eq $type "info" }}{{ $icon = "fa lightbulb" }}{{ end }}
{{ end -}}
{{ with .Get "icon" }}{{ $icon = . }}{{ end }}
{{ with $icon }} {{ with $icon }}
{{ $icon = partial "assets/icon.html" (dict "icon" (printf "%s fa-2x fa-fw" .)) }} {{ $icon = partial "assets/icon.html" (dict "icon" (printf "%s fa-2x fa-fw" .)) }}
{{ end }} {{ end }}
{{ $dismissibleParam := "false" -}}
{{ $dismissible := false -}} {{ $dismissible := false -}}
{{ with .Get "dismissible" }}{{ $dismissibleParam = . }}{{ end -}} {{ with .Get "dismissible" }}{{ $dismissible = partial "utilities/CastBool.html" . }}{{ end -}}
{{ $supportedFlags := slice "true" "false" -}}
{{ if in $supportedFlags $dismissibleParam -}}
{{ if eq $dismissibleParam "true" }}{{ $dismissible = true }}{{ end -}}
{{ else -}}
{{ errorf "Invalid value for param 'dismissible': %s" .Position -}}
{{ $error = true -}}
{{ end -}}
{{- $class := .Get "class" | default "" -}} {{- $class := .Get "class" | default "" -}}
{{ $body := trim .Inner " \r\n" -}}
{{ if not $body -}}
{{ errorf "Missing inner element text: %s" .Position -}}
{{ $error = true }}
{{ end -}}
<!-- Main code -->
{{- if not $error -}} {{- if not $error -}}
<div class="d-flex alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}{{ with $class }} {{ . }}{{ end }}" role="alert"> <div class="d-flex alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}{{ with $class }} {{ . }}{{ end }}" role="alert">
{{ with $icon }}<div class="pt-1 pe-2">{{ . }}</div>{{ end }} {{ with $icon }}<div class="pt-1 pe-2">{{ . }}</div>{{ end }}
<div class="flex-grow-1 my-auto"> <div class="flex-grow-1 my-auto">
{{ trim .Inner " \r\n" | .Page.RenderString | safeHTML -}} {{ $body | .Page.RenderString | safeHTML -}}
{{ if $dismissible }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ T "close" }}"></button>{{ end }} {{ if $dismissible }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ T "close" }}"></button>{{ end }}
</div> </div>
</div> </div>

View File

@@ -0,0 +1,84 @@
<!--
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
Visit gethinode.com/license for more details.
-->
{{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "args" "args" .Params) }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{ $structure := "" }}
{{- if .IsNamedParams }}{{ $structure = .Get "structure" }}{{ else }}{{ $structure = .Get 0 }}{{ end }}
{{ $group := "" }}
{{- if .IsNamedParams }}{{ $group = .Get "group" | default "" }}{{ else }}{{ $group = .Get 1 | default "" }}{{ end }}
{{ $definitions := "" }}
{{ if not $error }}
{{ $definitions = (index site.Data.structures $structure).arguments }}
{{ if not $definitions }}
{{- errorf "Cannot find data structure '%s': %s" $structure .Position -}}
{{ $error = true }}
{{ end }}
{{ end }}
{{ $parent := false -}}
{{ with .Get "parent" }}{{ $parent = partial "utilities/CastBool.html" . }}{{ end -}}
<!-- Main code -->
{{ if not $error }}
{{ $table := printf "| %s | %s | %s | %s | %s |\n| --- | --- | --- | --- | --- |"
(T "name") (T "type") (T "required") (T "default") (T "comment")
}}
{{ range $key, $val := $definitions }}
{{ $skip := false }}
{{ $groups := slice | append $val.group }}
{{ if and $group $val.group }}
{{ $skip = not (in $groups $group )}}
{{ end }}
{{ if $parent }}{{ $skip = not (in (slice "cascade" "merge") $val.parent) }}{{ end }}
{{ if not $skip }}
{{ $type := $val.type }}
{{ if reflect.IsSlice $val.type }}{{ $type = delimit $val.type ", " }}{{ end }}
{{ $required := "" }}
{{ if not $val.optional }}{{ $required = "yes" }}{{ end }}
{{ $comment := $val.comment }}
{{ if $val.deprecated }}
{{ $comment = printf `{{< release version="%s" short="true" size="sm" inline="true" state="deprecated" >}} %s` $val.deprecated $comment }}
{{ end }}
{{ if $val.release }}
{{ $comment = printf `{{< release version="%s" short="true" size="sm" inline="true" >}} %s` $val.release $comment }}
{{ end }}
{{ $min := "" }}
{{ $max := "" }}
{{ if and $val.options.values (eq $type "select") }}
{{ $comment = printf "%s %s: [%s]." $comment (T "supportedValues") (delimit $val.options.values ", ") }}
{{ else if and $val.options.min (in (slice "int" "float" "float64") $type) }}
{{ $min = $val.options.min }}
{{ else if and $val.options.max (in (slice "int" "float" "float64") $type) }}
{{ $max = $val.options.max }}
{{ end }}
{{ if and $min $max }}
{{ $comment = printf "%s %s: [%d, %d]." $comment (T "supportedValues") $min $max }}
{{ else if $min }}
{{ $comment = printf "%s %s: >=%d." $comment (T "supportedValues") $min }}
{{ else if $max }}
{{ $comment = printf "%s %s: <=%d." $comment (T "supportedValues") $max }}
{{ end }}
{{ $table = printf "%s\n| %s | %s | %s | %s | %s |" $table $key $type $required (or (string $val.default) "") $comment }}
{{ end }}
{{ end }}
{{ partial "assets/table.html" (dict "page" .Page "input" $table "args" slice) }}
{{ end }}

View File

@@ -1,23 +1,23 @@
<!-- <!--
Adds an inline badge. The shortcode supports the following arguments: Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
"title" Required title of the badge. Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
"class" Optional class attributes of the badge element. Visit gethinode.com/license for more details.
"color" Optional theme color of the element, either "primary", "secondary" (default), "success",
"danger", "warning", "info", "light", "dark", "white", or "black".
--> -->
{{- $error := false -}} {{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "badge" "args" .Params) }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $title := .Get "title" | default "" -}} {{- $title := .Get "title" | default "" -}}
{{- $class := .Get "class" | default "" -}} {{- $class := .Get "class" | default "" -}}
{{- $color := "secondary" -}} {{- $color := .Get "color" | default "secondary" -}}
{{- with .Get "color" }}{{ $color = . }}{{ end -}}
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" -}}
{{- if not (in $supportedColors $color) -}}
{{- errorf "Invalid value for param 'color': %s" .Position -}}
{{- end -}}
{{- if not $title }} <!-- Main code -->
{{ errorf "Missing title: %s" .Position -}} {{- if not $error }}
{{ else -}}
<span class="badge text-bg-{{ $color }}{{ with $class }} {{ . }}{{ end }}">{{ $title | plainify }}</span> <span class="badge text-bg-{{ $color }}{{ with $class }} {{ . }}{{ end }}">{{ $title | plainify }}</span>
{{ end -}} {{ end -}}

View File

@@ -1,11 +1,20 @@
<!-- <!--
Displays a breadcrum for a specific page. The shortcode supports the following arguments: Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
"path" Optional path of the page, defaults to current page. Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
Visit gethinode.com/license for more details.
--> -->
{{- $error := false -}} {{ $error := false }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "breadcrumb" "args" .Params "group" "shortcode") }}
{{ errorf "Invalid arguments: %s" .Position -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{- $page := . -}} {{- $page := . -}}
{{- $path := .Get "path" | default "" }} {{- $path := .Get "path" }}
{{- if $path -}} {{- if $path -}}
{{- $page = .Site.GetPage $path -}} {{- $page = .Site.GetPage $path -}}
{{- if not $page -}} {{- if not $page -}}
@@ -14,6 +23,7 @@
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
<!-- Main code -->
{{- if not $error -}} {{- if not $error -}}
{{- partial "assets/breadcrumb.html" $page -}} {{- partial "assets/breadcrumb.html" (dict "page" $page) -}}
{{- end -}} {{- end -}}

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