Compare commits

...

141 Commits

Author SHA1 Message Date
Mark Dumay
f9eedc7835 Merge pull request #390 from gethinode/refinement
Standardize shortcodes
2023-08-05 17:33:29 +02:00
Mark Dumay
cbfb33faf0 Merge branch 'main' into refinement 2023-08-05 17:26:22 +02:00
mark
2d9e89d40a Update shortcode examples 2023-08-05 17:24:34 +02:00
mark
266b3978fc Bump package version 2023-08-05 16:09:16 +02:00
mark
d2bfd1c48f Update dependencies 2023-08-05 16:08:27 +02:00
mark
633da32df5 Add id argument 2023-08-05 15:41:39 +02:00
mark
ea2c28f3fd Adjust indendation 2023-08-05 15:41:22 +02:00
mark
f66b519f51 Standardize header 2023-08-05 15:41:08 +02:00
mark
6bfb558f73 Standardize header 2023-08-05 13:26:04 +02:00
mark
f0a894091c Standardize header 2023-08-05 13:25:50 +02:00
mark
3bc14eb232 Add class argument 2023-08-05 13:19:09 +02:00
mark
e428666750 Standardize header 2023-08-05 13:18:55 +02:00
mark
2301ea8df6 Add class argument 2023-08-05 13:18:23 +02:00
mark
e9434b327a Standardize header 2023-08-05 13:09:41 +02:00
mark
3b1d5d838e Add class argument 2023-08-05 13:09:29 +02:00
mark
4e5ea23b66 Add class argument 2023-08-05 13:03:30 +02:00
mark
3ad19673a4 Improve rendering of example shortcode 2023-08-05 12:55:52 +02:00
mark
bb58394a43 Refine caching 2023-08-04 13:52:15 +02:00
mark
f574888563 Sanitize SEO thumbnail 2023-08-04 13:47:10 +02:00
mark
7339c262b5 Improve build cache 2023-08-04 13:46:53 +02:00
mark
51f9d204b9 Fix indentation 2023-08-04 13:46:01 +02:00
Mark Dumay
3d082a51a3 Merge pull request #388 from gethinode/develop
Update dependencies
2023-08-04 11:28:48 +02:00
mark
db6b6238c5 Update twitter logo 2023-08-04 10:21:32 +02:00
mark
6011e5637a Update package version 2023-08-04 10:13:43 +02:00
mark
855bf85be6 Bump dependencies 2023-08-04 10:13:01 +02:00
mark
ec37884f7a Clean up fontawesome package 2023-08-04 10:12:21 +02:00
mark
057720bca8 Bump dependencies 2023-08-04 10:11:22 +02:00
Mark Dumay
e3d607bd25 Merge pull request #387 from gethinode/main
Sync with main
2023-08-04 10:10:33 +02:00
Mark Dumay
a9e3a5ecbb Merge pull request #386 from gethinode/markdumay-patch-1
Update dependabot.yml
2023-08-04 08:45:27 +02:00
Mark Dumay
f9a3edbf30 Update dependabot.yml 2023-08-04 08:31:38 +02:00
github-actions[bot]
c199aa0902 Merge pull request #384 from gethinode/dependabot/npm_and_yarn/fortawesome/fontawesome-free-6.4.2
Bump @fortawesome/fontawesome-free from 6.4.0 to 6.4.2
2023-08-03 13:56:37 +00:00
dependabot[bot]
dfafdbb8af Bump @fortawesome/fontawesome-free from 6.4.0 to 6.4.2
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 6.4.0 to 6.4.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.0...6.4.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-03 13:51:18 +00:00
Mark Dumay
c4d8507638 Merge pull request #381 from gethinode/develop
Fix spacing for external link icons
2023-08-02 14:55:03 +02:00
Mark Dumay
44d5cfa4de Merge branch 'main' into develop 2023-08-02 14:41:00 +02:00
mark
5aa3cfb80f Bump package version 2023-08-02 14:40:28 +02:00
mark
22b83dbcf9 Fix spacing for external link icons 2023-08-02 14:37:51 +02:00
Mark Dumay
0a88ae04b9 Merge pull request #380 from gethinode/develop
Refine icon support
2023-08-02 13:57:47 +02:00
Mark Dumay
bf068977a6 Merge branch 'main' into develop 2023-08-02 13:51:20 +02:00
mark
5dfc99efa0 Bump package version 2023-08-02 13:50:16 +02:00
mark
84f09f0dcb Bump dependencies 2023-08-02 13:49:51 +02:00
mark
65d9635f61 Shift fa-fluid to mod-fontawesome 2023-08-02 13:49:39 +02:00
mark
452bd92029 Adjust layout 2023-08-02 13:33:20 +02:00
mark
87fc26e289 Support shorthand notation for menu icons 2023-08-02 13:33:11 +02:00
Mark Dumay
aad1335523 Merge pull request #378 from gethinode/develop
Enable inline icons
2023-08-02 09:24:07 +02:00
mark
a216b26857 Adjust spacing of theme icons 2023-08-02 09:10:45 +02:00
mark
2c121c6cde Adjust spacing of prev/next navigation 2023-08-02 09:02:07 +02:00
mark
2bc4ff0233 Remove superfluous closing tag 2023-08-02 08:59:55 +02:00
mark
a76c80ba17 Fix spacing of icons 2023-08-02 08:52:31 +02:00
mark
6580955770 Bump package version 2023-08-02 08:39:52 +02:00
mark
38d6c01983 Update icon references 2023-08-02 08:39:21 +02:00
Mark Dumay
af2ba38a86 Merge branch 'main' into develop 2023-08-02 07:38:57 +02:00
mark
0242d388b5 Bump package version 2023-08-02 07:38:04 +02:00
mark
5a78dda34f Enable inline icons 2023-08-02 07:37:22 +02:00
github-actions[bot]
8564e3e2fc Merge pull request #377 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.112.1
Bump hugo-bin from 0.112.0 to 0.112.1
2023-08-01 13:59:31 +00:00
dependabot[bot]
913c6ad158 Bump hugo-bin from 0.112.0 to 0.112.1
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.112.0 to 0.112.1.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.112.0...v0.112.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-08-01 13:55:10 +00:00
github-actions[bot]
5e676ee5fa Merge pull request #375 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.112.0
Bump hugo-bin from 0.111.4 to 0.112.0
2023-08-01 06:42:51 +00:00
dependabot[bot]
f1b4e556c4 Bump hugo-bin from 0.111.4 to 0.112.0
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.111.4 to 0.112.0.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.111.4...v0.112.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-07-31 13:42:22 +00:00
github-actions[bot]
9856b670e6 Merge pull request #374 from gethinode/dependabot/npm_and_yarn/eslint-8.46.0
Bump eslint from 8.45.0 to 8.46.0
2023-07-31 13:41:36 +00:00
dependabot[bot]
88ff187891 Bump eslint from 8.45.0 to 8.46.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.45.0 to 8.46.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.45.0...v8.46.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-07-31 13:36:55 +00:00
Mark Dumay
5c54291eb8 Merge pull request #372 from gethinode/develop
Implement web sharing
2023-07-31 07:57:59 +02:00
Mark Dumay
2a862034aa Merge branch 'main' into develop 2023-07-31 07:40:43 +02:00
mark
56e0713582 Exclude sharing.js from linting 2023-07-31 07:39:58 +02:00
mark
23a3f7ef71 Bump package version 2023-07-31 07:39:02 +02:00
mark
3418ac8d1d Implement Support Web Share API #294 2023-07-31 07:38:29 +02:00
mark
c645024474 Support custom attributes 2023-07-31 07:37:53 +02:00
Mark Dumay
f35c66c0ae Merge pull request #371 from gethinode/markdumay-patch-2
Update tested nodejs versions
2023-07-30 15:00:39 +02:00
Mark Dumay
f479764542 Update tested nodejs versions 2023-07-30 14:53:42 +02:00
Mark Dumay
ab7cc04821 Merge pull request #370 from gethinode/markdumay-patch-1
Update tested nodejs versions
2023-07-30 14:53:06 +02:00
Mark Dumay
6dd208f671 Merge pull request #369 from gethinode/main
Sync with main
2023-07-30 14:45:38 +02:00
Mark Dumay
833e438a23 Update tested nodejs versions 2023-07-30 14:44:02 +02:00
Mark Dumay
9d829b6d94 Merge pull request #368 from gethinode/link
Improve support for managed links
2023-07-30 14:38:33 +02:00
Mark Dumay
0f42fae2c4 Merge branch 'main' into link 2023-07-30 14:29:21 +02:00
mark
a2f7749aa2 Bump package version 2023-07-30 14:28:24 +02:00
mark
ba87ccd4a5 Set cue and tab to false by default 2023-07-30 14:19:04 +02:00
mark
1c68399313 Rename icon to cue 2023-07-30 14:18:25 +02:00
mark
30714ef6da Support class arg 2023-07-30 14:17:21 +02:00
mark
1ef92a0928 Adjust margin when using badges 2023-07-30 14:15:35 +02:00
mark
8331a6ce7c Sync button shortcode with partial 2023-07-30 12:05:05 +02:00
mark
fd34766ffb Add support for tab and cue args 2023-07-30 12:04:22 +02:00
mark
78573f8e51 Fix text and icon alignment 2023-07-30 12:03:40 +02:00
mark
4a0cc8bc88 Rename icon to cue 2023-07-30 12:02:38 +02:00
mark
8fd6f2af4e Support external links config 2023-07-29 14:00:26 +02:00
mark
0191e14a69 Add link shortcode and partial 2023-07-29 13:35:25 +02:00
github-actions[bot]
1f8fb26278 Merge pull request #367 from gethinode/dependabot/npm_and_yarn/eslint-plugin-import-2.28.0
Bump eslint-plugin-import from 2.27.5 to 2.28.0
2023-07-28 14:08:06 +00:00
dependabot[bot]
50548237c6 Bump eslint-plugin-import from 2.27.5 to 2.28.0
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.27.5 to 2.28.0.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.27.5...v2.28.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-28 14:04:01 +00:00
mark
7f35cf45ef Fix navbar aria ID 2023-07-28 12:42:56 +02:00
Mark Dumay
528f84c8c6 Merge pull request #366 from gethinode/develop
Add typed alerts
2023-07-28 12:21:35 +02:00
Mark Dumay
33ab75ed84 Merge branch 'main' into develop 2023-07-28 12:01:30 +02:00
mark
3010136585 Bump package version 2023-07-28 12:00:45 +02:00
Mark Dumay
676a28c322 Merge pull request #365 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-07-28 12:00:04 +02:00
mark
a04ec4d73e Support typed alerts 2023-07-28 11:59:33 +02:00
markdumay
fcc93788a9 fix: update Hugo module dependencies 2023-07-28 06:38:30 +00:00
mark
f949a785a1 Fix upgrade command 2023-07-26 17:53:23 +02:00
Mark Dumay
becba931bc Merge pull request #364 from gethinode/develop
Fix sharing links
2023-07-26 17:49:23 +02:00
Mark Dumay
03e3c5b3ee Merge branch 'main' into develop 2023-07-26 17:41:40 +02:00
mark
311aa3b957 Bump package release 2023-07-26 17:40:56 +02:00
mark
62db3eb9db Fix sharing links 2023-07-26 17:40:24 +02:00
Mark Dumay
56ea9eec47 Merge pull request #363 from gethinode/develop
Add canonifyAssetsURLs option
2023-07-26 17:31:55 +02:00
mark
b845e210b7 Add canonifyAssetsURLs option 2023-07-26 17:13:53 +02:00
Mark Dumay
e8bba05213 Merge pull request #362 from gethinode/main
Sync with main
2023-07-26 15:19:14 +02:00
Mark Dumay
74d0d625c6 Merge pull request #361 from gethinode/permalink
Use relative permalinks by default
2023-07-26 15:04:36 +02:00
mark
9d98a3568c Bump package release 2023-07-26 14:58:01 +02:00
Mark Dumay
dc55571f7a Merge pull request #360 from gethinode/main
Sync with main
2023-07-26 14:55:57 +02:00
Mark Dumay
b7ab9d5690 Merge pull request #359 from gethinode/develop
Refinement
2023-07-26 14:49:44 +02:00
mark
5d20be19a8 Update path for color script 2023-07-26 14:43:15 +02:00
mark
ecae077e2d Use relative permalinks by default 2023-07-26 14:41:55 +02:00
Mark Dumay
132c316ff0 Merge branch 'main' into develop 2023-07-26 14:38:08 +02:00
mark
a3b9081b4d Bump package version 2023-07-26 14:03:25 +02:00
mark
8a689a95de Bump dependencies 2023-07-26 14:02:44 +02:00
mark
9bd04a5b2a Fix complement error for undefined core modules 2023-07-26 09:19:30 +02:00
mark
8dc884f846 Add npm install command 2023-07-26 09:02:31 +02:00
Mark Dumay
4cb558440b Merge pull request #357 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-07-24 20:01:52 +02:00
mark
0d78918aa4 Set dark mode to disabled by default 2023-07-24 17:18:23 +02:00
mark
ba7ab907ef Fix behavior of critical scripts 2023-07-24 17:18:06 +02:00
markdumay
af557ac054 fix: update Hugo module dependencies 2023-07-23 03:15:51 +00:00
Mark Dumay
9ada0eee80 Merge pull request #355 from gethinode/develop
Fix behavior in default state
2023-07-22 14:57:41 +02:00
Mark Dumay
ae3e20b596 Merge branch 'main' into develop 2023-07-22 14:46:19 +02:00
mark
c49e6f14c1 Bump package version 2023-07-22 14:45:17 +02:00
mark
b4f6b1aa3d Move bootstrap mod check to base template 2023-07-22 14:44:46 +02:00
mark
962549f2ae Allow undefined main menu 2023-07-22 13:13:40 +02:00
Mark Dumay
28601323c4 Update README.md 2023-07-22 07:52:46 +02:00
Mark Dumay
a11ee72174 Merge pull request #354 from gethinode/develop
Bump package version
2023-07-22 06:31:01 +02:00
Mark Dumay
8e91440261 Merge branch 'main' into develop 2023-07-22 06:21:36 +02:00
mark
19879c4ecc Bump package version 2023-07-22 06:21:01 +02:00
Mark Dumay
810dfef311 Merge pull request #353 from gethinode/develop
Fix overflow of syntax highlight
2023-07-22 06:19:56 +02:00
Mark Dumay
c42fcefa73 Merge branch 'main' into develop 2023-07-22 06:12:58 +02:00
mark
a3c417e378 Fix overflow of syntax highlight 2023-07-22 06:10:11 +02:00
Mark Dumay
2bee381906 Merge pull request #352 from gethinode/develop
Enable filename-only in file and docs shortcode
2023-07-21 16:15:34 +02:00
Mark Dumay
244a3f7496 Merge branch 'main' into develop 2023-07-21 16:08:16 +02:00
mark
563b526cea Bump package release 2023-07-21 16:07:09 +02:00
mark
fa7fad67b5 Add full arg to shortcode 2023-07-21 16:06:32 +02:00
Mark Dumay
966906778d Merge pull request #350 from gethinode/develop
Clean-up after modules
2023-07-21 15:48:58 +02:00
mark
135128a5f9 Promote to v0.16 release 2023-07-21 15:27:07 +02:00
Mark Dumay
25663974ce Merge branch 'main' into develop 2023-07-21 15:11:26 +02:00
mark
af5643f98f fix #336 2023-07-21 14:59:18 +02:00
mark
743126d9b9 Remove obsolete files now part of mod-fontawesome 2023-07-21 14:51:27 +02:00
mark
b0187e3a75 Bump dependencies 2023-07-21 14:50:56 +02:00
mark
c7613ab7a8 Add force-check if file exists 2023-07-21 14:47:59 +02:00
mark
2a6a119762 Fix docs typo 2023-07-21 14:47:44 +02:00
mark
b556f4f4ec feat: add file shortcode 2023-07-21 14:47:29 +02:00
mark
9fa95da778 Add katex to safelist for css purge 2023-07-21 11:30:57 +02:00
66 changed files with 1434 additions and 413 deletions

View File

@@ -1,5 +1,6 @@
assets/js/critical/color.js
assets/js/analytics.js
assets/js/color.js
assets/js/flexsearch.js
assets/js/sharing.js
assets/js/vendor
node_modules

View File

@@ -7,3 +7,4 @@ updates:
directory: "/"
schedule:
interval: "daily"
versioning-strategy: increase

View File

@@ -12,7 +12,7 @@ jobs:
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
node-version: [14.x, 16.x, 18.x]
node-version: [16.x, 18.x, 20.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
runs-on: ${{ matrix.os }}
@@ -24,5 +24,6 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- run: npm ci
- run: npm run build

View File

@@ -14,15 +14,18 @@ jobs:
strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
node-version: [16.x, 18.x, 20.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- run: npm ci --ignore-scripts
- run: npm run lint

View File

@@ -56,10 +56,11 @@
- [PageSpeed Insights][pagespeed]
- [Mozilla Observatory][observatory]
Hinode is a clean documentation and blog theme for [Hugo][hugo], an open-source static site generator. Based on the [Bootstrap 5][bootstrap] framework, the rendered site is fast, secure, and responsive. Hinode uses [FlexSearch][flexsearch] to enable full text search across your site. Finally, the theme uses [Node Package Manager][npm] to automate the build process and to keep track of dependencies.
Hinode is a clean documentation and blog theme for [Hugo][hugo], an open-source static site generator. Based on the [Bootstrap 5][bootstrap] framework, the rendered site is fast, secure, and responsive. Hinode uses [FlexSearch][flexsearch] to enable full text search across your site. Finally, the theme supports [Node Package Manager][npm] to automate the build process and to keep track of dependencies.
Additional features include:
- Flexible configuration of Hugo modules
- Switching between light mode and dark mode
- Support for multiple languages
- Reusable Bootstrap components through configurable shortcodes and partials

View File

@@ -1,3 +1,5 @@
{{- if site.Params.main.enableDarkMode -}}
/*!
* Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
@@ -31,7 +33,7 @@
const activeSelectors = document.querySelectorAll('.theme-icon-active')
const activeButtons = document.querySelectorAll(`[data-bs-theme-value="${theme}"]`)
if (activeButtons.length > 0) {
const activeIcon = activeButtons[0].querySelector('i')
const activeIcon = activeButtons[0].querySelector('span')
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active')
@@ -68,3 +70,5 @@
})
})
})()
{{- end -}}

36
assets/js/sharing.js Normal file
View File

@@ -0,0 +1,36 @@
{{- if site.Params.sharing.webshare -}}
// Adapted from: https://dev.to/j471n/how-to-share-anything-from-your-website-by-web-share-api-1h5g
// function for Web Share API
function webShareAPI (title, description, link) {
navigator
.share({
title,
text: description,
url: link
})
.then(() => console.log('Successful share'))
.catch((error) => console.log('Error sharing', error))
}
const shareBtn = document.getElementById('btn-webshare')
if (shareBtn !== null) {
if (navigator.share) {
const title = shareBtn.getAttribute('data-sharing-title')
const description = shareBtn.getAttribute('data-sharing-description')
const url = shareBtn.getAttribute('data-sharing-url')
// show button if it supports webShareAPI
shareBtn.style.display = 'block'
shareBtn.addEventListener('click', () =>
webShareAPI(title, description, url)
)
} else {
// hide button if host does not support Web Share API
shareBtn.style.display = 'none'
}
}
{{- end -}}

View File

@@ -5,10 +5,6 @@
@import "common/variables.scss";
@import "common/icons.scss";
{{ if not (in site.Params.modules.core "bootstrap") }}
{{ errorf "Bootstrap is a required module, please add it to 'modules.core' in your site parameters" }}
{{ end }}
// Import Bootstrap configuration (mounted by core Bootstrap module)
@import "bootstrap.scss";

View File

@@ -23,19 +23,3 @@ $btn-toggle: url("/icons/btn-toggle.svg") !de
$btn-toggle-dark: url("/icons/btn-toggle-dark.svg") !default;
// scss-docs-end icons
.fa-wrapper {
container: wrapper / inline-size;
}
// define fallback size for browsers not supporting containers
.fa-fluid {
font-size: 5rem;
}
// set size based on container width
@container (min-width: 0) {
.fa-wrapper .fa-fluid {
font-size: 60cqi;
}
}

View File

@@ -10,6 +10,7 @@
.syntax-highlight {
background-color: var(--bs-light) if($enable-important-utilities, !important, null);
overflow-x: auto;
}
.preview-background {
@@ -29,6 +30,7 @@
.syntax-highlight {
background-color: var(--bs-tertiary-bg) if($enable-important-utilities, !important, null);
overflow-x: auto;
}
.bg,

View File

@@ -32,19 +32,19 @@
[[social]]
name = "LinkedIn"
pre = "<i class=\"fab fa-linkedin fa-2x\"></i>"
pre = "fab linkedin"
url = "https://linkedin.com/"
weight = 10
[[social]]
name = "GitHub"
pre = "<i class=\"fab fa-github fa-2x\"></i>"
pre = "fab fa-github"
url = "https://github.com/"
weight = 20
[[social]]
name = "Medium"
pre = "<i class=\"fab fa-medium fa-2x\"></i>"
pre = "fab medium"
url = "https://medium.com/"
weight = 30

View File

@@ -32,19 +32,19 @@
[[social]]
name = "LinkedIn"
pre = "<i class=\"fab fa-linkedin fa-2x\"></i>"
pre = "fab linkedin"
url = "https://linkedin.com/"
weight = 10
[[social]]
name = "GitHub"
pre = "<i class=\"fab fa-github fa-2x\"></i>"
pre = "fab github"
url = "https://github.com/"
weight = 20
[[social]]
name = "Medium"
pre = "<i class=\"fab fa-medium fa-2x\"></i>"
pre = "fab medium"
url = "https://medium.com/"
weight = 30

View File

@@ -4,6 +4,10 @@
description = "Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5."
enableDarkMode = true
modes = ["light", "dark"]
canonifyAssetsURLs = false
[main.externalLinks]
cue = false
tab = false
# toml-docs-end main
# toml-docs-start modules
@@ -12,6 +16,10 @@
optional = ["leaflet", "katex"]
excludeSCSS = ["bootstrap"]
disableTemplate = ["katex"]
[modules.fontawesome]
inline = true
debug = true
skipMissing = false
# toml-docs-end modules
# toml-docs-start debugging
@@ -59,6 +67,7 @@
enabled = true
sort = "weight"
reverse = false
webshare = true
[[sharing.providers]]
name = "LinkedIn"
@@ -69,7 +78,7 @@
[[sharing.providers]]
name = "Twitter"
url = "https://twitter.com/home?status={url}"
icon = "fab twitter"
icon = "fab x-twitter"
weight = 20
[[sharing.providers]]

View File

@@ -22,6 +22,7 @@ const purgecss = require('@fullhuman/postcss-purgecss')({
'./assets/scss/theme/fonts.scss',
'./assets/scss/theme/theme.scss',
'./_vendor/github.com/gethinode/mod-flexsearch/assets/scss/modules/flexsearch/flexsearch.scss',
'./_vendor/github.com/gethinode/mod-katex/dist/katex.scss',
'./_vendor/github.com/gethinode/mod-leaflet/dist/leaflet.scss',
'./_vendor/github.com/twbs/bootstrap/scss/_carousel.scss',
'./_vendor/github.com/twbs/bootstrap/scss/_dropdown.scss',

View File

@@ -2,7 +2,7 @@
title: About
description: Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5.
date: 2022-04-11
updated: 2023-06-26
updated: 2023-08-02
showComments: false
---
@@ -12,17 +12,17 @@ showComments: false
<div class="container-fluid">
<div class="row justify-content-center text-center">
<div class="col-lg-4">
<i class="fa-brands fa-bootstrap fa-2xl"></i>
{{< icon fab bootstrap fa-2xl >}}
<h2 class="h4">Bootstrap framework</h2>
<p>Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source Sass files.</p>
</div>
<div class="col-lg-4">
<i class="fa-solid fa-magnifying-glass fa-2xl"></i>
{{< icon fas magnifying-glass fa-2xl >}}
<h2 class="h4">Full text search</h2>
<p>Search your site with FlexSearch, a full-text search library with zero dependencies.</p>
</div>
<div class="col-lg-4">
<i class="fa-solid fa-code fa-2xl"></i>
{{< icon fas code fa-2xl >}}
<h2 class="h4">Development tools</h2>
<p>Use Node Package Manager to automate the build process and to keep track of dependencies.</p>
</div>

View File

@@ -1,7 +1,7 @@
---
author: Mark Dumay
title: Bootstrap elements
date: 2023-05-20
date: 2023-08-05
description: Use shortcodes to add common Bootstrap elements with ease.
tags: ["bootstrap", "shortcode"]
thumbnail: img/boots.jpg
@@ -170,6 +170,28 @@ Use the `docs` shortcode to display the content of a `js`, `scss` or `toml` file
{{< docs name="theme-colors" file="config/_default/params.toml" >}}
## Example
Use the `example` shortcode to display a code example and to render a preview of the same input.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* command */>}}
export MY_VAR=123
{{</* /command */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## File
Use the `file` shortcode to print and highlight the full content of a given input file.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* file path="./config/_default/languages.toml" id="file-collapse-1" */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Icon
As an example, the following shortcodes show a square check, a brand logo, and a circle check.

View File

@@ -3,7 +3,7 @@ slug: over-mij
title: Over mij
description: Een blog en documentatie thema voor Hugo gebaseerd op Bootstrap 5.
date: 2023-02-17
updated: 2023-06-26
updated: 2023-08-02
showComments: false
---
@@ -14,17 +14,17 @@ showComments: false
<div class="row justify-content-center text-center">
<div class="row justify-content-center text-center">
<div class="col-lg-4">
<i class="fa-brands fa-bootstrap fa-2xl"></i>
{{< icon fab bootstrap fa-2xl >}}
<h2 class="h4">Bootstrap raamwerk</h2>
<p>Bouw snelle websites geschikt voor mobiele en desktop schermen met Bootstrap 5. Pas de site eenvoudig aan met bronbestanden in Sass.</p>
</div>
<div class="col-lg-4">
<i class="fa-solid fa-magnifying-glass fa-2xl"></i>
{{< icon fas magnifying-glass fa-2xl >}}
<h2 class="h4">Volledig doorzoekbaar</h2>
<p>Doorzoek je site met FlexSearch, een software bibliotheek zonder afhankelijkheden.</p>
</div>
<div class="col-lg-4">
<i class="fa-solid fa-code fa-2xl"></i>
{{< icon fas code fa-2xl >}}
<h2 class="h4">Ontwikkelgereedschap</h2>
<p>Gebruik Node Package Manager om het bouwproces inclusief versiebeheer volledig te automatiseren.</p>
</div>

View File

@@ -2,7 +2,7 @@
author: Mark Dumay
title: Bootstrap elementen
slug: bootstrap-elementen
date: 2023-02-17
date: 2023-08-05
description: Gebruik shortcodes om eenvoudig Bootstrap elementen toe te voegen.
tags: ["bootstrap", "shortcode"]
thumbnail: img/boots.jpg
@@ -171,6 +171,28 @@ Gebruik de volgende shortcode om de inhoud van een `toml` of `scss` bestand te t
{{< docs name="theme-colors" file="config/_default/params.toml" >}}
## Example
Gebruik de `example` shortcode om zowel de input als een voorbeeld van code te tonen.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* command */>}}
export MY_VAR=123
{{</* /command */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## File
Gebruik de `file` shortcode om de volledige inhoud van een bestand te tonen, inclusief taalafhankelijke opmaak.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* file path="./config/_default/languages.toml" id="file-collapse-1" */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Icon
De volgende shortcodes tonen drie verschillende iconen:

8
go.mod
View File

@@ -3,9 +3,9 @@ module github.com/gethinode/hinode
go 1.19
require (
github.com/gethinode/mod-bootstrap v1.1.0 // indirect
github.com/gethinode/mod-flexsearch v1.1.1 // indirect
github.com/gethinode/mod-fontawesome v1.2.0 // indirect
github.com/gethinode/mod-bootstrap v1.1.1 // indirect
github.com/gethinode/mod-flexsearch v1.2.0 // indirect
github.com/gethinode/mod-fontawesome v1.2.4 // indirect
github.com/gethinode/mod-katex v1.0.2 // indirect
github.com/gethinode/mod-leaflet v0.3.1 // indirect
github.com/gethinode/mod-leaflet v0.3.4 // indirect
)

22
go.sum
View File

@@ -2,18 +2,36 @@ github.com/gethinode/mod-bootstrap v1.0.1 h1:NDZar+UEL42YHCvzzO+jVgqkZU5INA12Bpj
github.com/gethinode/mod-bootstrap v1.0.1/go.mod h1:DcpPc2cNaXUPGEvhD7npuEEPA7573NvakTlrwFbyjr8=
github.com/gethinode/mod-bootstrap v1.1.0 h1:BbalsW8kmFhv+J+dcc41TGcjIlM/p69AB0h0oGhAXIU=
github.com/gethinode/mod-bootstrap v1.1.0/go.mod h1:DcpPc2cNaXUPGEvhD7npuEEPA7573NvakTlrwFbyjr8=
github.com/gethinode/mod-bootstrap v1.1.1 h1:Tx4M5hGVOFrEaxnUONDAm6N9xuRi5UphKlT7F26HujU=
github.com/gethinode/mod-bootstrap v1.1.1/go.mod h1:DcpPc2cNaXUPGEvhD7npuEEPA7573NvakTlrwFbyjr8=
github.com/gethinode/mod-flexsearch v1.0.1 h1:FJkRsUzSnQTXl3MWCigT4E6vfff870UWTnkGqaDGIhA=
github.com/gethinode/mod-flexsearch v1.0.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.1.0 h1:7BCMyQDlYlskNXuazt8Jg/jg9WREexu2xVkYqThkAX4=
github.com/gethinode/mod-flexsearch v1.1.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.1.1 h1:zHypfKR/rWPAwqNXvo09Pp3vGqU4w3r7d2VtMudIzkI=
github.com/gethinode/mod-flexsearch v1.1.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.1.2 h1:vA/jHxLq9xxkYGS9cmAoLNIkEBW+iLVCcQ8qKyEa+R4=
github.com/gethinode/mod-flexsearch v1.1.2/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.1.3 h1:lzmSvnJL6ABjp03avYzSvJJ7hw01CpHap1JGUbDIELg=
github.com/gethinode/mod-flexsearch v1.1.3/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.1.4 h1:dJvwBxYlLe/VGlctLn8k89STJ5toATIjNnXIlNeanOY=
github.com/gethinode/mod-flexsearch v1.1.4/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.2.0 h1:SSMpWzK9SMbi9QRYfil9PJZLLWWLHWzlTc69UxtSWAA=
github.com/gethinode/mod-flexsearch v1.2.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-fontawesome v1.0.2 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg=
github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.1.0 h1:rsDzUI+3ZlS/do2ff3ne8/z3KwHeysmuA+WsXlumXXk=
github.com/gethinode/mod-fontawesome v1.1.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.2.0 h1:2nWYEjpUKu6IJ6kOh2WDlDUqRQ/dUGw6mJWIdMTA3O0=
github.com/gethinode/mod-fontawesome v1.2.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.2.1 h1:k7z5ZRsNxCohZjlZm8jVAzmTPk17c6xMYBAjAXHs13I=
github.com/gethinode/mod-fontawesome v1.2.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.2.2 h1:rA9EtuE/LeFQmKSA7ampfUknxsR1mu7hpi4wpA89gX8=
github.com/gethinode/mod-fontawesome v1.2.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.2.3 h1:RHWd+E72+m29xaC45m/3CF35C201jehw0dcozVBdPrI=
github.com/gethinode/mod-fontawesome v1.2.3/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
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-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.1 h1:809QUztxmKgMNchU+v03iMO7Ma+ISc3ZzhXYauc21rs=
@@ -24,3 +42,7 @@ github.com/gethinode/mod-leaflet v0.2.3 h1:QQI4h+IH0jZ7fx4q0um2YIEiYBoW3OAfW8qHz
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/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
github.com/gethinode/mod-leaflet v0.3.3 h1:isnjja6VRFvVWBatYSouh46TXSJg2C4/E2BQTrQw+yI=
github.com/gethinode/mod-leaflet v0.3.3/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
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=

View File

@@ -37,6 +37,8 @@
translation: "Wörter"
- id: copyright
translation: "Copyright"
- id: rights
translation: "Alle Rechte vorbehalten"
- id: photoBy
translation: "Foto von"
- id: photoOn

View File

@@ -45,6 +45,8 @@
translation: "words"
- id: copyright
translation: "Copyright"
- id: rights
translation: "All rights reserved"
- id: photoBy
translation: "Photo by"
- id: photoOn
@@ -138,7 +140,7 @@
- id: show
translation: "Show"
- id: comments
translation: "comments"
translation: "Comments"
# Related posts
- id: seeAlso

View File

@@ -37,6 +37,8 @@
translation: "woorden"
- id: copyright
translation: "Copyright"
- id: rights
translation: "Alle rechten voorbehouden"
- id: photoBy
translation: "Foto van"
- id: photoOn
@@ -129,7 +131,7 @@
- id: show
translation: "Tonen"
- id: comments
translation: "commentaar"
translation: "Reacties"
# Related posts
- id: seeAlso

View File

@@ -2,7 +2,7 @@
<div class="container-xxl flex-fill d-flex align-content-center flex-wrap">
<div class="w-100 text-center">
<span class="text-secondary fw-bold">
<i class="fa-regular fa-face-frown fa-10x"></i>
{{ partial "assets/icon.html" (dict "icon" "fa face-frown fa-10x") }}
<p class="display-1 mt-3 fw-bold">404</p>
<p class="fs-3">{{ T "pageNotFoundTitle" }}</p>
</span>

View File

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

View File

@@ -12,6 +12,10 @@
{{- end -}}
{{- end -}}
{{- if and .IsPage (not (in .Site.Params.modules.core "bootstrap")) -}}
{{- errorf "Bootstrap is a required module, please add it to 'modules.core' in your site parameters" -}}
{{- end -}}
<!doctype html>
<html lang="{{ .Site.Language.Lang }}" class="no-js">
<head>
@@ -19,9 +23,7 @@
</head>
<body>
{{- if site.Params.main.enableDarkMode -}}
{{- partial "footer/scripts.html" (dict "filename" "js/critical.bundle.js" "match" "js/critical/**.js" "header" true "page" .) -}}
{{- end -}}
{{- partial "footer/scripts.html" (dict "filename" "js/critical.bundle.js" "match" "js/critical/**.js" "header" true "page" .) -}}
<div class="d-flex flex-column min-vh-100{{ if and .IsHome .Site.Params.home.style }} {{ .Site.Params.home.style }}{{ end }}">
<div class="{{ if .Site.Params.navigation.fixed }}mb-4{{ end }}">
{{- partial "assets/navbar.html" (dict

View File

@@ -67,7 +67,8 @@
{{ with .NextInSection -}}
{{ $next := . -}}
{{ with .OutputFormats.Get "html" -}}
<a class="next" href="{{ $next.Permalink }}"><i class="fas fa-arrow-left"></i> {{ $next.Title }}</a>
<a class="next" href="{{ $next.RelPermalink }}">
{{- partial "assets/icon.html" (dict "icon" "fas arrow-left") }}&nbsp;{{ $next.Title }}</a>
{{- end -}}
{{ end -}}
</div>
@@ -75,7 +76,7 @@
{{ with .PrevInSection -}}
{{ $prev := . -}}
{{ with .OutputFormats.Get "html" -}}
<a class="previous" href="{{ $prev.Permalink }}">{{ $prev.Title }} <i class="fas fa-arrow-right"></i></a>
<a class="previous" href="{{ $prev.RelPermalink }}">{{ $prev.Title }}&nbsp;{{- partial "assets/icon.html" (dict "icon" "fas arrow-right") }}</a>
{{- end -}}
{{ end -}}
</div>

View File

@@ -7,10 +7,10 @@
{{ $square150 := .Resize "150x150 CatmullRom" }}
{{ $wide310 := .Fill "310x150 CatmullRom" }}
{{ $square310 := .Resize "310x310 CatmullRom" }}
<square70x70logo src="{{ $square70.Permalink }}" />
<square150x150logo src="{{ $square150.Permalink }}" />
<wide310x150logo src="{{ $wide310.Permalink }}" />
<square310x310logo src="{{ $square310.Permalink }}" />
<square70x70logo src="{{ $square70.RelPermalink }}" />
<square150x150logo src="{{ $square150.RelPermalink }}" />
<wide310x150logo src="{{ $wide310.RelPermalink }}" />
<square310x310logo src="{{ $square310.RelPermalink }}" />
{{ end }}
<TileColor>#000000</TileColor>
</tile>

View File

@@ -3,7 +3,7 @@
{{- range $index, $item := .Page.Ancestors.Reverse -}}
{{- $title := .Title -}}
{{- if .IsHome }}{{ $title = T "home" }}{{ end -}}
{{- $address := or .Permalink (.Params.Redirect | absLangURL) -}}
{{- $address := or .RelPermalink (.Params.Redirect | relLangURL) -}}
{{ if $address }}
<li class="breadcrumb-item"><a href="{{ $address }}">{{ $title }}</a></li>
{{ else }}

View File

@@ -22,6 +22,11 @@
"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>').
-->
{{- $title := trim .title " \r\n" -}}
@@ -95,6 +100,7 @@
{{- end -}}
{{- $class := .class }}
{{ with $badge }}{{ $class = printf "%s me-3" $class }}{{ end }}
{{- $order := "last" -}}
{{- with .order }}{{ $order = . }}{{ end -}}
@@ -113,8 +119,29 @@
{{- $toast := .toast -}}
{{- $clipboard := .clipboard -}}
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
{{- $isExternal := ne (urls.Parse (absURL $href)).Host (urls.Parse site.BaseURL).Host -}}
{{- $target := "" -}}
{{- $rel := "" -}}
{{- if $isExternal -}}
{{- if $tab -}}
{{- $target = "_blank" -}}
{{- $rel = "noopener noreferrer" -}}
{{- end -}}
{{- if and $title $cue -}}
{{ $suffix := partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}
{{- $title = printf "%s&nbsp;%s" $title $suffix | safeHTML -}}
{{- end -}}
{{- end -}}
{{- $attributes := .attributes -}}
<a aria-label="{{ $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end }}
{{ with $id }}id="{{ . }}"{{ end }}
{{ with $target }}target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end }}
{{ with $toast }}data-toast-target="{{ $toast }}"{{ end }}
{{ with $clipboard }}data-clipboard="{{ $clipboard }}"{{ end }}
{{ if eq $type "button" }}class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class }}"
@@ -124,11 +151,14 @@
{{ with $collapse }}data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end }}
{{ if eq $state "active" }}data-bs-toggle="button" aria-pressed="true"{{ end }}
{{ if eq $state "inactive" }}data-bs-toggle="button" aria-pressed="false"{{ end }}
{{ range $key, $val := $attributes }}
{{ print $key | safeHTMLAttr }}="{{ $val }}"
{{ end }}
>
<div class="d-flex justify-content-{{ $justify }}">
<div>{{ $title }}</div>
{{- with $icon }}<div class="align-self-center{{ if eq $order "first" }} order-first pe-1{{ else }} ps-1{{ end }}">{{ partial "assets/icon.html" (dict "icon" $icon) }}</div>{{ end }}
<div class="my-auto">{{ $title }}</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) }}</div>{{ end }}
</div>
{{- with $badge }}

View File

@@ -107,12 +107,12 @@
"orientation" $orientation
) -}}
{{- if $element.Permalink -}}
{{- if $element.RelPermalink -}}
{{- $params = merge $params (dict "path" $element.File.Path) -}}
{{- else -}}
{{- $params = merge $params (dict
"title" $element.Title
"href" $element.Permalink
"href" $element.RelPermalink
"description" (or $element.Description $element.Content)
"thumbnail" $element.Params.thumbnail
"icon" $element.Params.icon

View File

@@ -111,7 +111,7 @@
{{- with $page -}}
{{- if not $title }}{{ $title = .Title }}{{ end -}}
{{- if not $href }}{{ $href = .Permalink }}{{ end -}}
{{- if not $href }}{{ $href = .RelPermalink }}{{ end -}}
{{- if not $description }}{{ $description = .Description }}{{ end -}}
{{- if not $thumbnail }}{{ $thumbnail = .Params.thumbnail }}{{ end -}}
{{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}}

View File

@@ -1,6 +1,6 @@
{{- $params := .Site.Params.comments -}}
{{- with $params -}}
<h2>Comments</h2>
<h2>{{ T "comments" }}</h2>
<script src="https://utteranc.es/client.js"
repo="{{ $params.repo }}"
issue-term="{{ default "pathname" $params.issueTerm }}"

View File

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

View File

@@ -15,6 +15,7 @@
-->
{{- $validRatios := slice "1x1" "4x3" "16x9" "21x9" -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $ratio := .ratio -}}
{{- $url := .url -}}
{{- $mode := false -}}
@@ -68,6 +69,7 @@
<!-- Generate a image set of type webp -->
{{- define "partials/image-scaled.html " -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $img := .img -}}
{{- $ratio := .ratio -}}
{{- $imgset := "" -}}
@@ -98,7 +100,11 @@
{{- $scaled = $img.Fit (printf "%s webp" $dim) -}}
{{- end -}}
{{- $scaled = $scaled | resources.Copy (replace $img.RelPermalink $clean (printf "-%s.webp" $dim)) -}}
{{- $imgset = printf "%s, %s %sw" $imgset $scaled.Permalink (index $widths $index) -}}
{{- if $absoluteURL -}}
{{- $imgset = printf "%s, %s %sw" $imgset $scaled.Permalink (index $widths $index) -}}
{{- else -}}
{{- $imgset = printf "%s, %s %sw" $imgset $scaled.RelPermalink (index $widths $index) -}}
{{- end -}}
{{- end -}}
{{- $imgset = strings.TrimPrefix ", " $imgset -}}
{{- end -}}
@@ -108,6 +114,7 @@
<!-- Define the img with optional caption -->
{{- define "partials/image-definition.html" -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $ratio := .ratio -}}
{{- $url := .url -}}
{{- $outerClass := .outerClass -}}
@@ -125,7 +132,11 @@
{{- $img := partial "utilities/GetImage.html" (dict "url" $url) -}}
{{- if $img -}}
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio) -}}
{{- $fallbackURL = $fallback.RelPermalink -}}
{{- if $absoluteURL -}}
{{- $fallbackURL = $fallback.Permalink -}}
{{- else -}}
{{- $fallbackURL = $fallback.RelPermalink -}}
{{- end -}}
{{- $imgset = partial "partials/image-scaled.html " (dict "img" $img "ratio" $ratio) -}}
{{- end -}}
{{- end -}}
@@ -145,7 +156,7 @@
srcset="{{ . }}"
sizes="100vw"
{{- end }}
src="{{ absURL $fallbackURL }}"
src="{{ $fallbackURL }}"
alt="{{ $title }}">
</div>
{{- if $caption -}}

View File

@@ -9,12 +9,24 @@
{{- $isActive := hasPrefix $pageURL $menuURL -}}
{{- $isAlias := $menu.Params.alias -}}
{{- $isIcon := $menu.Params.icon -}}
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
{{- $url := urls.Parse $menuURL -}}
{{- $baseURL := urls.Parse $.Site.Params.Baseurl -}}
{{- $isExternal := ne $url.Host $baseURL.Host -}}
{{- $externalHref := "" }}
{{- if $isExternal }}{{ $externalHref = "target=\"_blank\" rel=\"noopener noreferrer\"" }}{{ end -}}
{{- $suffix := "" }}
{{- if $isExternal }}
{{- if $tab -}}
{{ $externalHref = "target=\"_blank\" rel=\"noopener noreferrer\"" }}
{{- end -}}
{{- if $cue -}}
{{ $suffix = partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}
{{- end -}}
{{ end -}}
{{- $mainNav := urlize (lower $menu.Name) -}}
{{- $childNav := "" -}}
@@ -40,9 +52,14 @@
{{ if $isIcon }}aria-label="{{ $menu.Name }}"{{ end }}
data-nav="main" data-nav-main="{{ $mainNav }}"{{ with $childNav }} data-nav-child="{{ . }}"{{ end }}
href="{{ $menuURL }}{{ $params | safeHTMLAttr }}"{{ with $externalHref }} {{ . | safeHTMLAttr }}{{ end }} {{ $button | safeHTMLAttr }}>
{{- with $menu.Pre }}{{ . }}{{ end -}}
{{- with $menu.Pre }}
{{ if hasPrefix . "<i" }}
{{ . | safeHTML }}
{{ else }}
{{ partial "assets/icon.html" (dict "icon" . )}}
{{ end }}
{{ end -}}
<span {{ if $isActive }} class="active"{{ end }}>{{ if not $isIcon }}{{ $menu.Name }}{{ end }}</span>
{{- with $menu.Post }}{{ . }}{{ end -}}
{{- if and $isExternal (not $isIcon)}} {{ partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}{{ end -}}
{{- if not $isIcon }}&nbsp;{{ $suffix }}{{ end -}}
</a>

View File

@@ -13,6 +13,7 @@
"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.
-->
<!-- Inline partial to render the color mode switcher -->
@@ -21,26 +22,26 @@
{{- $collapsed := .collapsed -}}
<li class="nav-item dropdown {{ if $collapsed }}d-{{ $size }}-none{{ else }}d-none d-{{ $size }}-block{{ end }}">
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false" id="navbar-color-theme">
{{- partial "assets/icon.html" (dict "icon" "fas sun theme-icon-active") }} {{ if $collapsed }} {{ T "colorMode" }} {{ end }}
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false" id="navbar-color-theme{{ if $collapsed }}-collapsed{{ end }}">
<span class="theme-icon-active">{{- partial "assets/icon.html" (dict "icon" "fas sun fa-fw") }} {{ if $collapsed }} {{ T "colorMode" }} {{ end }}</span>
<span class="d-md-none"></span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-color-theme">
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-color-theme{{ if $collapsed }}-collapsed{{ end }}">
<li>
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" data-bs-theme-value="light" href="#!">
{{- partial "assets/icon.html" (dict "icon" "fas sun theme-icon") }}
<span class="theme-icon">{{- partial "assets/icon.html" (dict "icon" "fas sun fa-fw") }}</span>&nbsp;
{{ T "colorLight" }}
</a>
</li>
<li>
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" data-bs-theme-value="dark" href="#!">
{{- partial "assets/icon.html" (dict "icon" "fas moon theme-icon") }}
<span class="theme-icon">{{- partial "assets/icon.html" (dict "icon" "fas moon fa-fw") }}</span>&nbsp;
{{ T "colorDark" }}
</a>
</li>
<li>
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" data-bs-theme-value="auto" href="#!">
{{- partial "assets/icon.html" (dict "icon" "fas circle-half-stroke theme-icon" ) }}
<span class="theme-icon">{{- partial "assets/icon.html" (dict "icon" "fas circle-half-stroke fa-fw" ) }}</span>&nbsp;
{{ T "colorAuto" }}
</a>
</li>
@@ -73,7 +74,7 @@
<a class="pe-5 dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}{{ if $active }} active{{ end }}{{ if $disabled }} disabled{{ end }}" href="{{ $url }}">{{ $item.label }}
{{ if $item.latest }} ({{ T "latest" }}){{ end }}
{{ if $active }}
<span class="position-absolute end-0 me-3">{{- partial "assets/icon.html" (dict "icon" "fas check") }}</span>
<span class="position-absolute end-0 me-3">{{- partial "assets/icon.html" (dict "icon" "fas check fa-fw") }}</span>
{{ end }}
</a>
</li>
@@ -93,6 +94,7 @@
</li>
{{- end -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $supportedFlags := slice "true" "false" -}}
{{- $id := printf "navbar-collapse-%d" 0 -}}
@@ -105,11 +107,14 @@
{{- errorf "partial [assets/navbar.html] - Missing value for param 'page'" -}}
{{- end -}}
{{- $menuName := "main" }}
{{- with .menus }}{{ $menuName = .}}{{ end -}}
{{- $defaultMenu := "main" }}
{{- $menuName := $defaultMenu }}
{{- with .menus }}{{ $menuName = . }}{{ end -}}
{{- $menus := index site.Menus $menuName -}}
{{- if or (ne (printf "%T" $menus) "navigation.Menu") (ne (index $menus 0).Menu $menuName) -}}
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'menus': %s" $menuName -}}
{{- if ne $menuName $defaultMenu }}
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'menus': %s" $menuName -}}
{{- end -}}
{{- end -}}
{{- $size := "md" -}}
@@ -147,7 +152,7 @@
{{- end -}}
{{- end -}}
{{- $enableDarkMode := default true site.Params.main.enableDarkMode -}}
{{- $enableDarkMode := default false site.Params.main.enableDarkMode -}}
{{- with .mode -}}
{{- $darkModeParam := . -}}
{{- if in $supportedFlags $darkModeParam -}}
@@ -181,7 +186,9 @@
{{- if eq $color "black" }}{{ $theme = "dark" }}{{ end -}}
{{- if eq $color "white" }}{{ $theme = "light" }}{{ end -}}
<div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
{{- $class := .class -}}
<div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0{{ with $class }} {{ . }}{{ end }}"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
{{- partial "assets/page-alert.html" (dict "page" $page) -}}
<nav class="navbar navbar-expand-{{ $size }} {{ with $color }}bg-{{ . }}{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
<div class="container-xxl p-0">
@@ -189,12 +196,12 @@
<div class="d-flex">
{{- if $page.Scratch.Get "sidebar" -}}
<button class="navbar-toggler fw-30 collapsed p-0 mx-auto" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvass-sidebar" aria-controls="offcanvass-sidebar" aria-label="{{ T "toggleSidebar" }}">
{{- partial "assets/icon.html" (dict "icon" "fas ellipsis") -}}
{{- partial "assets/icon.html" (dict "icon" "fas ellipsis fa-fw") -}}
</button>
{{- else -}}
<!-- Insert invisible sidebar toggler to center logo correctly on smaller screens -->
<button class="navbar-toggler fw-30 collapsed p-0 mx-auto invisible" type="button">
{{- partial "assets/icon.html" (dict "icon" "fas ellipsis") -}}
{{- partial "assets/icon.html" (dict "icon" "fas ellipsis fa-fw") -}}
</button>
{{- end -}}
</div>
@@ -202,7 +209,7 @@
<!-- Insert the brand logo or name -->
<a class="navbar-brand mx-auto" href="{{ site.Home.RelPermalink }}">
{{- if $logo -}}
<img src="{{ $logo }}" alt="{{ $title }} logo" height="30">
<img src="{{if $absoluteURL }}{{ absURL $logo }}{{ else }}{{ $logo }}{{ end }}" alt="{{ $title }} logo" height="30">
{{- else -}}
<span class="fw-bold">{{ $title }}</span>
{{- end -}}
@@ -238,7 +245,7 @@
{{- end -}}
<!-- Insert divider if applicable -->
{{- if or $enableLanguage $enableVersions -}}
{{- if and $menus (or $enableLanguage $enableVersions) -}}
<li class="nav-item py-2 py-md-1 col-12 col-md-auto d-none d-{{ $size }}-block">
<div class="vr d-none d-md-flex h-100 mx-md-2"></div>
</li>
@@ -250,15 +257,15 @@
{{- $currentLang := $page.Language.Lang -}}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle d-{{ $size }}-none" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{{- partial "assets/icon.html" (dict "icon" "fas globe") }} {{ T "languageSwitcherLabel" }}
{{- partial "assets/icon.html" (dict "icon" "fas globe fa-fw") }} {{ T "languageSwitcherLabel" }}
</a>
<a class="nav-link dropdown-toggle d-none d-{{ $size }}-block" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{{- partial "assets/icon.html" (dict "icon" "fas globe") }}
{{- partial "assets/icon.html" (dict "icon" "fas globe fa-fw") }}
</a>
<ul class="dropdown-menu dropdown-menu-end ">
{{- if $page.IsTranslated -}}
{{- range $page.AllTranslations -}}
<li><a class="dropdown-item {{ if eq .Language.Lang $currentLang }}active{{ end }}" href="{{ .Permalink }}">{{ .Language.LanguageName }}</a></li>
<li><a class="dropdown-item {{ if eq .Language.Lang $currentLang }}active{{ end }}" href="{{ .RelPermalink }}">{{ .Language.LanguageName }}</a></li>
{{- end -}}
{{- else -}}
{{- range site.Languages -}}

View File

@@ -41,22 +41,22 @@
{{- with .First }}
{{- if ne $currentPageNumber .PageNumber }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="{{ T "paginationFirst" }}" class="page-link" role="button"><span aria-hidden="true"><i class="fas fa-angle-double-left"></i></span></a>
<a href="{{ .URL }}" aria-label="{{ T "paginationFirst" }}" class="page-link" role="button"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angles-left") }}</span></a>
</li>
{{- else }}
<li class="page-item disabled">
<a aria-disabled="true" aria-label="{{ T "paginationFirst" }}" class="page-link" role="button" tabindex="-1"><span aria-hidden="true"><i class="fas fa-angle-double-left"></i></span></a>
<a aria-disabled="true" aria-label="{{ T "paginationFirst" }}" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angles-left") }}</span></a>
</li>
{{- end }}
{{- end }}
{{- with .Prev }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="{{ T "paginationPrevious" }}" class="page-link" role="button"><span aria-hidden="true"><i class="fas fa-angle-left"></i></span></a>
<a href="{{ .URL }}" aria-label="{{ T "paginationPrevious" }}" class="page-link" role="button"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angle-left") }}</span></a>
</li>
{{- else }}
<li class="page-item disabled">
<a aria-disabled="true" aria-label="{{ T "paginationPrevious" }}" class="page-link" role="button" tabindex="-1"><span aria-hidden="true"><i class="fas fa-angle-left"></i></span></a>
<a aria-disabled="true" aria-label="{{ T "paginationPrevious" }}" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angle-left") }}</span></a>
</li>
{{- end }}
@@ -81,22 +81,22 @@
{{- with .Next }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="{{ T "paginationNext" }}" class="page-link" role="button"><span aria-hidden="true"><i class="fas fa-angle-right"></i></span></a>
<a href="{{ .URL }}" aria-label="{{ T "paginationNext" }}" class="page-link" role="button"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angle-right") }}</span></a>
</li>
{{- else }}
<li class="page-item disabled">
<a aria-disabled="true" aria-label="{{ T "paginationNext" }}" class="page-link" role="button" tabindex="-1"><span aria-hidden="true"><i class="fas fa-angle-right"></i></span></a>
<a aria-disabled="true" aria-label="{{ T "paginationNext" }}" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angle-right") }}</span></a>
</li>
{{- end }}
{{- with .Last }}
{{- if ne $currentPageNumber .PageNumber }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="{{ T "paginationLast" }}" class="page-link" role="button"><span aria-hidden="true"><i class="fas fa-angle-double-right"></i></span></a>
<a href="{{ .URL }}" aria-label="{{ T "paginationLast" }}" class="page-link" role="button"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angles-right") }}</span></a>
</li>
{{- else }}
<li class="page-item disabled">
<a aria-disabled="true" aria-label="{{ T "paginationLast" }}" class="page-link" role="button" tabindex="-1"><span aria-hidden="true"><i class="fas fa-angle-double-right"></i></span></a>
<a aria-disabled="true" aria-label="{{ T "paginationLast" }}" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angles-right") }}</span></a>
</li>
{{- end }}
{{- end }}
@@ -112,14 +112,14 @@
{{- with .First }}
{{- if ne $currentPageNumber .PageNumber }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="{{ T "paginationFirst" }}" class="page-link" role="button"><span aria-hidden="true"><i class="fas fa-angle-double-left"></i></span></a>
<a href="{{ .URL }}" aria-label="{{ T "paginationFirst" }}" class="page-link" role="button"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angles-left") }}</span></a>
</li>
{{- end }}
{{- end }}
{{- with .Prev }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="{{ T "paginationPrevious" }}" class="page-link" role="button"><span aria-hidden="true"><i class="fas fa-angle-left"></i></span></a>
<a href="{{ .URL }}" aria-label="{{ T "paginationPrevious" }}" class="page-link" role="button"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angle-left") }}</span></a>
</li>
{{- end }}
@@ -144,14 +144,14 @@
{{- with .Next }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="{{ T "paginationNext" }}" class="page-link" role="button"><span aria-hidden="true"><i class="fas fa-angle-right"></i></span></a>
<a href="{{ .URL }}" aria-label="{{ T "paginationNext" }}" class="page-link" role="button"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angle-right") }}</span></a>
</li>
{{- end }}
{{- with .Last }}
{{- if ne $currentPageNumber .PageNumber }}
<li class="page-item">
<a href="{{ .URL }}" aria-label="{{ T "paginationLast" }}" class="page-link" role="button"><span aria-hidden="true"><i class="fas fa-angle-double-right"></i></span></a>
<a href="{{ .URL }}" aria-label="{{ T "paginationLast" }}" class="page-link" role="button"><span aria-hidden="true">{{ partial "assets/icon.html" (dict "icon" "fas angles-right") }}</span></a>
</li>
{{- end }}
{{- end }}

View File

@@ -49,7 +49,7 @@
{{- with $page -}}
{{- if not $title }}{{ $title = .Title }}{{ end -}}
{{- if not $href }}{{ $href = .Permalink }}{{ end -}}
{{- if not $href }}{{ $href = .RelPermalink }}{{ end -}}
{{- if not $content }}{{ $content = .Content }}{{ end -}}
{{- if not $thumbnail }}{{ $thumbnail = .Params.thumbnail }}{{ end -}}
{{- end -}}

View File

@@ -23,6 +23,10 @@
{{- end -}}
{{ partial "assets/button.html" (dict "toast" $target "clipboard" $clipboard "href" $url "icon" (printf "%s fa-fw" $item.icon) "class" "btn-social p-0" )}}
{{- end -}}
{{ if .Site.Params.sharing.webshare }}
{{ $attr := dict "data-sharing-title" .Title "data-sharing-description" .Description "data-sharing-url" .Permalink }}
{{ partial "assets/button.html" (dict "href" "#!" "icon" "fas share-nodes fa-fw" "id" "btn-webshare" "class" "btn-social p-0" "attributes" $attr )}}
{{- end -}}
</div>
{{- end -}}
{{- end -}}

View File

@@ -3,6 +3,7 @@
"id" Optional id of the toast message, defaults to "toast-message-0".
"header": Optional header of the toast message.
"message": Required toast message.
"class": Optional class attribute of the toast element.
-->
{{- $id := printf "toast-message-%d" 0 -}}
@@ -19,7 +20,9 @@
{{- errorf "partial [assets/toast.html] - Missing message text" -}}
{{ end -}}
<div id="{{ $id }}" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
{{- $class := .class -}}
<div id="{{ $id }}" class="toast{{ with $class }} {{ . }}{{ end }}" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
{{ with $header }}<strong class="me-auto">{{ . }}</strong>{{ end }}
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>

View File

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

View File

@@ -1,3 +1,4 @@
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $filename := .filename | default "js/main.bundle.js" -}}
{{- $match := .match | default "{js/*.js,js/vendor/**.js}" -}}
{{- $page := .page -}}
@@ -23,9 +24,11 @@
{{- end }}
{{- end -}}
{{- if not hugo.IsProduction -}}
<script src="{{ $js.Permalink }}"></script>
{{ else -}}
{{ $js = $js | minify | fingerprint -}}
<script src="{{ $js.Permalink }}" integrity="{{ $js.Data.Integrity }}" crossorigin="anonymous"></script>
{{- if gt (len $js.Content) 0 -}}
{{- if not hugo.IsProduction -}}
<script src="{{ if $absoluteURL }}{{ $js.Permalink }}{{ else }}{{ $js.RelPermalink }}{{ end }}"></script>
{{ else -}}
{{ $js = $js | minify | fingerprint -}}
<script src="{{ if $absoluteURL }}{{ $js.Permalink }}{{ else }}{{ $js.RelPermalink }}{{ end }}" integrity="{{ $js.Data.Integrity }}" crossorigin="anonymous"></script>
{{ end -}}
{{ end -}}

View File

@@ -1,3 +1,4 @@
{{- $tab := site.Params.main.externalLinks.tab -}}
<div class="container-fluid">
<div class="row row-cols-1 row-cols-sm-4 bg-primary p-3 bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} align-items-center">
<div class="col col-md-2 d-none d-md-block"></div>
@@ -7,8 +8,12 @@
</div>
<div class="col text-sm-start text-center col-sm-6 col-md-4">
{{ range .Site.Menus.social -}}
<a href="{{ .URL }}" target="_blank" rel="noopener noreferrer" aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
{{ .Pre | safeHTML }}
<a href="{{ .URL }}" {{ if $tab }} target="_blank" rel="noopener noreferrer"{{ end }} aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
{{ if hasPrefix .Pre "<i" }}
{{ .Pre | safeHTML }}
{{ else }}
{{ partial "assets/icon.html" (dict "icon" (printf "%s fa-2x" .Pre) )}}
{{ end }}
</a>
{{ end -}}
</div>

View File

@@ -1,10 +1,11 @@
<!-- Source: https://davelage.com/posts/hugo-favicons/ -->
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{ if .Site.Params.favicon.logo -}}
{{ $favicon := resources.Get .Site.Params.favicon.logo -}}
{{ range $i := .Site.Params.favicon.sizes -}}
{{ $image := $favicon.Resize (printf "%dx%d CatmullRom" $i $i) -}}
<link rel="icon" type="image/png" sizes="{{$i}}x{{$i}}" href="{{ $image.Permalink }}">
<link rel="icon" type="image/png" sizes="{{$i}}x{{$i}}" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
{{ end -}}
{{ $image := $favicon.Resize "180x CatmullRom" -}}
<link rel="apple-touch-icon" sizes="180x180" href="{{ $image.Permalink }}">
<link rel="apple-touch-icon" sizes="180x180" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
{{ end -}}

View File

@@ -11,7 +11,7 @@
Variable names are converted from kebab case to snake case to make them compatible with Hugo's variable naming
convention. For example, the css variable '--accordion-icon-active-color' is available as
''.accordion_icon_active_color' within the Hugo template. The processed svg files are published to the "icons"
'.accordion_icon_active_color' within the Hugo template. The processed svg files are published to the "icons"
folder.
The partial supports the following arguments:

View File

@@ -18,11 +18,12 @@
{{ end -}}
{{ with .Params.thumbnail -}}
{{ $source := partial "utilities/GetImage.html" (dict "url" .) -}}
{{ with $source -}}
{{ $img := partial "utilities/GetImage.html" (dict "url" .) -}}
{{ with $img -}}
{{ $dim := "1280x640" -}}
{{ $img := (.Fill (printf "%s jpg" $dim)) -}}
{{ $.Scratch.Set "thumbnail" ($img.Permalink | absURL) -}}
{{ $scaled := (.Fill (printf "%s jpg" $dim)) -}}
{{- $scaled = $scaled | resources.Copy (replace $img.RelPermalink ".jpg" (printf "-%s.jpg" $dim)) -}}
{{ $.Scratch.Set "thumbnail" ($scaled.Permalink | absURL) -}}
{{ end -}}
{{ else -}}
{{ with .Site.Params.schema.image.url -}}

View File

@@ -1,3 +1,4 @@
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $source := .source | default "scss/app.scss" -}}
{{- $target := .target | default "css/main.css" -}}
{{- $page := .page -}}
@@ -6,7 +7,7 @@
{{- $modules := "" -}}
{{ if $core }}
{{- if reflect.IsSlice site.Params.modules.excludeSCSS -}}
{{- $modules = complement site.Params.modules.excludeSCSS site.Params.modules.core -}}
{{- $modules = complement site.Params.modules.excludeSCSS (or site.Params.modules.core slice) -}}
{{ else }}
{{- $modules = site.Params.modules.core -}}
{{ end }}
@@ -43,8 +44,8 @@
{{- end -}}
{{- if not hugo.IsProduction -}}
<link rel="stylesheet" href="{{ $css.Permalink }}">
<link rel="stylesheet" href="{{ if $absoluteURL }}{{ $css.Permalink }}{{ else }}{{ $css.RelPermalink }}{{ end }}">
{{- else -}}
{{- $css = $css | fingerprint | resources.PostProcess -}}
<link rel="stylesheet" href="{{ $css.Permalink }}" integrity="{{ $css.Data.Integrity }}" crossorigin="anonymous">
<link rel="stylesheet" href="{{ if $absoluteURL }}{{ $css.Permalink }}{{ else }}{{ $css.RelPermalink }}{{ end }}" integrity="{{ $css.Data.Integrity }}" crossorigin="anonymous">
{{- end -}}

View File

@@ -0,0 +1,45 @@
{{ $destination := .destination }}
{{- if not $destination -}}
{{- errorf "partial [utilities/link.html] - Missing param 'destination'" -}}
{{- end -}}
{{- $target := "" -}}
{{- $rel := "" -}}
{{- $case := .case | default true }}
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
{{- $isExternal := ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host -}}
{{ $text := .text }}
{{- if not $text -}}
{{ if $isExternal }}
{{ $text = (urls.Parse (absURL $destination)).Host }}
{{ else }}
{{ $target := site.GetPage $destination }}
{{ if not $target }}
{{- errorf "partial [utilities/link.html] - Cannot find page: %s" $destination -}}
{{ else }}
{{ $text = $target.Title }}
{{ if not $case }}{{ $text = lower $text }}{{ end }}
{{ $destination = $target.RelPermalink }}
{{ end }}
{{ end }}
{{- end -}}
{{- if $isExternal -}}
{{- if $tab -}}
{{- $target = "_blank" -}}
{{- $rel = "noopener noreferrer" -}}
{{- end -}}
{{- if $cue -}}
{{ $suffix := partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}
{{- $text = printf "%s&nbsp;%s" $text $suffix | safeHTML -}}
{{- end -}}
{{ else }}
{{ $destination = relLangURL $destination }}
{{- end -}}
{{- $class := .class -}}
<a {{ with $class }}class="{{ . }}" {{ end }}href="{{ $destination | safeURL }}"{{ with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end }}>{{ $text }}</a>

View File

@@ -4,10 +4,28 @@
"warning", "info", "light", "dark", "white" or "black".
"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 -}}
{{ $color := "primary" -}}
{{ $icon := "" }}
{{ $type := "" -}}
{{ with .Get "type" }}{{ $type = . }}{{ end -}}
{{ $supportedTypes := slice "danger" "info" -}}
{{ if $type }}
{{ if not (in $supportedTypes $type) -}}
{{ errorf "Invalid value for param 'type': %s" .Position -}}
{{ $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 -}}
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" -}}
{{ if not (in $supportedColors $color) -}}
@@ -15,9 +33,9 @@
{{ $error = true -}}
{{ end -}}
{{ $icon := "" }}
{{ with .Get "icon" }}
{{ $icon = partial "assets/icon.html" (dict "icon" (printf "%s fa-2x fa-pull-left" .)) }}
{{ with .Get "icon" }}{{ $icon = . }}{{ end }}
{{ with $icon }}
{{ $icon = partial "assets/icon.html" (dict "icon" (printf "%s fa-2x fa-fw" .)) }}
{{ end }}
{{ $dismissibleParam := "false" -}}
@@ -31,10 +49,14 @@
{{ $error = true -}}
{{ end -}}
{{- $class := .Get "class" -}}
{{- if not $error -}}
<div class="alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}" role="alert">
{{ with $icon }}{{ . }}{{ end }}
{{ trim .Inner " \r\n" | markdownify | safeHTML -}}
{{ if $dismissible }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>{{ end }}
<div class="d-flex alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}{{ with $class }} {{ . }}{{ end }}" role="alert">
{{ with $icon }}<div class="pt-1 pe-2">{{ . }}</div>{{ end }}
<div class="flex-grow-1 my-auto">
{{ trim .Inner " \r\n" | markdownify | safeHTML -}}
{{ if $dismissible }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>{{ end }}
</div>
</div>
{{- end -}}

View File

@@ -12,17 +12,29 @@
"aria-label" Optional label for the badge.
"tooltip" Optional text to display in a tooltip. Cannot be used together with collapse. Ignored for active/
inactive buttons.
"collapse" Optional panel to collapse. Cannot be used together with tooltip. Ignored for active/inactive buttons.
"collapse" Optional panel to collapse. Cannot be used together with tooltip. Ignored for active/inactive
buttons.
"placement" Optional position of the tooltip: "top" (default), "bottom", "left", or "right".
"class" Optional class attribute of the button element, e.g. “p-5”.
"icon" Font Awesome icon class attribute, required unless button 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.
"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.
-->
{{ $error := false }}
{{ $type := "button" -}}
{{- $icon := .Get "icon" }}
{{ $title := trim .Inner " \r\n" -}}
{{ if not $title -}}
{{ errorf "Missing inner element text: %s" .Position -}}
{{ if not (or $title $icon) -}}
{{ errorf "Missing icon or inner element text: %s" .Position -}}
{{ $error = true }}
{{ end -}}
@@ -69,6 +81,7 @@
{{ if $relref }}
{{ $href = relref . $relref }}
{{ end }}
{{ $class := .Get "class" -}}
{{ $placement := "top" -}}
{{ with .Get "placement" }}{{ $placement = . }}{{ end -}}
@@ -80,6 +93,25 @@
{{- $toast := .Get "toast" -}}
{{- $order := "last" -}}
{{- with .Get "order" }}{{ $order = . }}{{ end -}}
{{- $supportedOrders := slice "first" "last" -}}
{{- if not (in $supportedOrders $order) -}}
{{ errorf "Invalid value for param 'order': %s" .Position -}}
{{ $error = true }}
{{- end -}}
{{- $justify := "center" -}}
{{- with .Get "justify" }}{{ $justify = . }}{{ end -}}
{{- $supportedJustify := slice "start" "end" "center" "between" "around" "evenly" -}}
{{- if not (in $supportedJustify $justify) -}}
{{ errorf "Invalid value for param 'justify': %s" .Position -}}
{{ $error = true }}
{{- end -}}
{{- $cue := .Get "cue" | default site.Params.main.externalLinks.cue -}}
{{- $tab := .Get "tab" | default site.Params.main.externalLinks.tab -}}
{{ if not $error }}
{{- partial "assets/button.html" (dict
"type" $type
@@ -94,7 +126,13 @@
"href" $href
"id" $id
"state" $state
"class" $class
"placement" $placement
"icon" $icon
"order" $order
"justify" $justify
"cue" $cue
"tab" $tab
"toast" $toast)
-}}
{{ end }}

View File

@@ -1,3 +1,13 @@
<!--
Generates terminal output for either `bash`, `powershell`, or `sql` shell languages. The shortcode supports the
following named arguments:
"user" Optional user to add to the prompt, e.g. "user".
"host" Optional host to add to the prompt, e.g. "localhost".
"prompt" Optional prompt override, e.g. "PS C:\Users\User>".
"shell" Type of shell, either "bash" (default), "powershell", or "sql".
"class" Optional class attribute of the command element.
-->
{{- $host := .Get "host" -}}
{{- $user := .Get "user" -}}
{{- $prompt := .Get "prompt" -}}
@@ -60,6 +70,8 @@
{{- $output = (replace $output "<span class=\"c\">#" "<span class=\"c\">" | safeHTML) -}}
{{- end -}}
<div class="mb-3 syntax-highlight">
{{- $class := .Get "class" -}}
<div class="mb-3 syntax-highlight{{ with $class }} {{ . }}{{ end }}">
{{- $output -}}
</div>

View File

@@ -1,11 +1,23 @@
{{- /*
<!--
Source: https://github.com/twbs/bootstrap/blob/main/site/layouts/shortcodes/scss-docs.html
Usage: `docs name="name" file="path/filename.<toml|scss>"`
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. The shortcode supports the
following named arguments:
Prints everything between `# toml-docs-start "name"` and `# toml-docs-end "name"`
comments in the docs, or between `// scss-docs-start` and `// scss-docs-end`.
*/ -}}
"name" Name of the code snippet, used to identify the relevant section of the input file.
"file" 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" If unset, shows the panel with the code snippet in collapsed state. By default, the panel is
expanded.
"full" If unset, shows the filename only. By default, the full relative path is shown.
"id" Optional id of the collapse panel, defaults to "docs-collapse-n" with a sequential number n
starting at 1.
"class" Optional class argument of the tab control.
-->
{{- $name := .Get "name" -}}
{{- $basePath := .Site.Params.docs.basePath -}}
@@ -20,6 +32,9 @@
{{- $capture_end := "" -}}
{{- $id := printf "docs-collapse-%d" .Ordinal -}}
{{ with .Get "id" }}
{{ $id = . }}
{{ end }}
{{- $supportedExtensions := slice "js" "scss" "toml" -}}
{{- if in $supportedExtensions $extension -}}
@@ -44,13 +59,25 @@
{{ errorf "Invalid value for param 'show': %s" $showParam -}}
{{ end -}}
{{ $fullParam := "true" -}}
{{ $full := true -}}
{{ with .Get "full" }}{{ $fullParam = . }}{{ end -}}
{{ if in $supportedFlags $fullParam -}}
{{ if eq $fullParam "true" }}{{ $full = true }}{{ else }}{{ $full = false }}{{ end -}}
{{ else -}}
{{ errorf "Invalid value for param 'full': %s" $fullParam -}}
{{ end -}}
{{- $class := .Get "class" -}}
{{- /* If any parameters are missing, print an error and exit */ -}}
{{- if or (not $name) (not $file) -}}
{{- errorf "%s: %q: Missing required parameters! Got: name=%q file=%q!" .Position .Name $name $file -}}
{{- else -}}
{{- $regex := printf `%s((?:.|\n)*)%s` $capture_start $capture_end -}}
{{- /* Force-check if the file exists */ -}}
{{ $tmp := os.Stat $file }}
{{- $regex := printf `%s((?:.|\n)*)%s` $capture_start $capture_end -}}
{{- $match := findRE $regex (readFile $file) -}}
{{- $match = index $match 0 -}}
@@ -61,7 +88,7 @@
{{- $match = replace $match $capture_start "" -}}
{{- $match = replace $match $capture_end "" -}}
<ul class="nav nav-tabs">
<ul class="nav nav-tabs{{ with $class }} {{ . }}{{ end }}">
<li class="nav-item">
<a class="nav-link active font-monospace"
href="#body-{{ $id }}"
@@ -70,7 +97,7 @@
data-bs-target=".multi-{{ $id }}"
aria-expanded="false"
aria-controls="body-{{ $id }} footer-{{ $id }}">
<small>{{ strings.TrimPrefix $basePath $file }}</small>
<small>{{ if $full }}{{ strings.TrimPrefix $basePath $file }}{{ else }}{{ path.Base $file }}{{ end }}</small>
</a>
</li>
</ul>

View File

@@ -1,15 +1,15 @@
{{- /*
Usage: `example args`
`args` are all optional and can be one of the following:
* id: the `div`'s id - default: ""
* class: any extra class(es) to be added to the `div` - default: ""
* lang: language used to display the code. Use "hugo" to process Hugo (escaped) shortcodes - default: "html"
* show_markup: if the markup should be output in the HTML - default: `true`
* show_preview: if the preview should be output in the HTML - default: `true`
<!--
Source: https://github.com/twbs/bootstrap/blob/main/site/layouts/shortcodes/example.html
*/ -}}
Display a code example and render a preview of the same input. The shortcode accepts the languages supported by
Hugo's highlight function. The shortcode supports the following named arguments:
"id" Optional identifier of the element's container.
"lang" Language used to display the code. Use "hugo" to process Hugo (escaped) shortcodes, default value is "html".
"show_markup" If the markup should be output in the HTML, defaults to "true".
"show_preview" If the preview should be output in the HTML, defaults to "true".
"class" Optional class attributes of the element's container.
-->
{{- $id := .Get "id" -}}
{{- $class := .Get "class" -}}
@@ -25,18 +25,18 @@
{{ $lang = "markdown" }}
{{- end -}}
<div class="rounded border mb-3">
<div class="rounded border preview-background mb-3">
{{- if eq $show_preview true -}}
<div {{ with $id }}id="{{ . }}"{{ end }} class="p-3 {{ with $class }} {{ . }}{{ end }} preview-background">
<div {{ with $id }}id="{{ . }}"{{ end }} class="rounded-top p-3 {{ with $class }} {{ . }}{{ end }}">
{{- $content -}}
</div>
{{- end -}}
<div class="d-flex align-items-center ps-3 pe-3 py-1 border-top border-bottom syntax-highlight">
<small class="font-monospace text-body-secondary text-uppercase">{{- $lang -}}</small>
</div>
<div class="rounded-bottom syntax-highlight">
{{- if eq $show_markup true -}}
{{- if eq $show_markup true -}}
<div class="d-flex align-items-center ps-3 pe-3 py-1{{ if $show_preview }} border-top{{ else }} rounded-top{{ end }} border-bottom syntax-highlight">
<small class="font-monospace text-body-secondary text-uppercase">{{- $lang -}}</small>
</div>
<div class="rounded-bottom syntax-highlight border-none">
{{- highlight (trim $input "\r\n") $lang "" -}}
{{- end -}}
</div>
</div>
{{- end -}}
</div>

View File

@@ -1,5 +0,0 @@
{{- if not (.Get 0) -}}
{{- errorf "Expected icon name: %s" .Position -}}
{{- else -}}
{{- partial "assets/icon.html" (dict "icon" (printf "fa %s" (delimit .Params " "))) }}
{{- end -}}

View File

@@ -1,5 +0,0 @@
{{- if not (.Get 0) -}}
{{- errorf "Expected icon name: %s" .Position -}}
{{- else -}}
{{- partial "assets/icon.html" (dict "icon" (printf "fab %s" (delimit .Params " "))) }}
{{- end -}}

View File

@@ -1,5 +0,0 @@
{{- if not (.Get 0) -}}
{{- errorf "Expected icon name: %s" .Position -}}
{{- else -}}
{{- partial "assets/icon.html" (dict "icon" (printf "fas %s" (delimit .Params " "))) }}
{{- end -}}

View File

@@ -0,0 +1,80 @@
<!--
Source: https://github.com/twbs/bootstrap/blob/main/site/layouts/shortcodes/scss-docs.html
Print the full content of any given file supported by the Chroma syntax highlighter. The shortcode supports the
following arguments:
"path" 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" Language to be used by the syntax highlighter.
"show" If unset, shows the panel with the code in collapsed state. By default, the panel is expanded.
"full" If unset, shows the filename only. By default, the full relative path is shown.
"id" Optional id of the collapse panel, defaults to "file-collapse-n" with a sequential number n
starting at 1.
"class" Optional class argument of the tab control.
-->
{{- $basePath := .Site.Params.docs.basePath -}}
{{- $file := .Get "path" }}
{{- if hasPrefix $file "./" -}}
{{- $file = path.Clean $file -}}
{{- else -}}
{{- $file = path.Join $basePath (path.Clean $file) -}}
{{- end -}}
{{- $extension := strings.TrimLeft "." (path.Ext $file) }}
{{- $lang := .Get "lang" | default $extension -}}
{{- $id := printf "file-collapse-%d" .Ordinal -}}
{{ with .Get "id" }}
{{ $id = . }}
{{ end }}
{{ $supportedFlags := slice "true" "false" -}}
{{ $showParam := "true" -}}
{{ $show := true -}}
{{ with .Get "show" }}{{ $showParam = . }}{{ end -}}
{{ if in $supportedFlags $showParam -}}
{{ if eq $showParam "true" }}{{ $show = true }}{{ else }}{{ $show = false }}{{ end -}}
{{ else -}}
{{ errorf "Invalid value for param 'show': %s" $showParam -}}
{{ end -}}
{{ $fullParam := "true" -}}
{{ $full := true -}}
{{ with .Get "full" }}{{ $fullParam = . }}{{ end -}}
{{ if in $supportedFlags $fullParam -}}
{{ if eq $fullParam "true" }}{{ $full = true }}{{ else }}{{ $full = false }}{{ end -}}
{{ else -}}
{{ errorf "Invalid value for param 'full': %s" $fullParam -}}
{{ end -}}
{{- $class := .Get "class" -}}
{{- /* If any parameters are missing, print an error and exit */ -}}
{{- if not $file -}}
{{- errorf "%s: %q: Missing required parameters! Got: path=%q!" .Position .Name $file -}}
{{- else -}}
{{- /* Force-check if the file exists */ -}}
{{ $tmp := os.Stat $file }}
{{- $content := readFile $file -}}
<ul class="nav nav-tabs{{ with $class }} {{ . }}{{ end }}">
<li class="nav-item">
<a class="nav-link active font-monospace"
href="#body-{{ $id }}"
aria-current="page"
data-bs-toggle="collapse"
data-bs-target=".multi-{{ $id }}"
aria-expanded="false"
aria-controls="body-{{ $id }} footer-{{ $id }}">
<small>{{ if $full }}{{ strings.TrimPrefix $basePath $file }}{{ else }}{{ path.Base $file }}{{ end }}</small>
</a>
</li>
</ul>
<div class="border-start border-end border-bottom mb-3">
<div class="collapse multi-{{ $id }}{{ if $show }} show{{ end }} syntax-highlight" id="body-{{ $id }}">
{{- highlight (trim $content "\r\n") $lang "" -}}
</div>
<div class="collapse multi-{{ $id }}{{ if not $show }} show{{ end }} p-3" id="footer-{{ $id }}"><i>...</i></div>
</div>
{{- end -}}

View File

@@ -0,0 +1,58 @@
<!--
Generates a link for a given named link or url. The shortcode supports a single unnamed parameter, or various named
parameters. The unnamed parameter is recognized as a named link if it does not contain any "/", otherwise it is
treated as a url. Any inner text is rendered as the link title, otherwise it uses the host name (for external links)
or page name (for internal links). The shortcode supports the following named arguments:
"name" Optional name of the link maintained in the "links" section of the site's parameters. If omitted,
the "url" argument should be provided instead.
"url" Optional url of the link, including the scheme ("http" or "https"). If omitted, the "name" argument
should be provided instead.
"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.
"case" Optional flag to indicate if the retrieved title (e.g. no inner text is provided) of an internal
link should use its original case, defaults to true. If false, the title is set to lower case.
"class" Optional class attribute of the anchor element.
-->
{{- $error := false -}}
{{ $name := "" }}
{{ $url := "" }}
{{ $case := true }}
{{ $cue := site.Params.main.externalLinks.cue }}
{{ $tab := site.Params.main.externalLinks.tab }}
{{ if .IsNamedParams }}
{{ $name = .Get "name" }}
{{ $url = .Get "url" }}
{{ $cue = .Get "cue" | default site.Params.main.externalLinks.cue }}
{{ $tab = .Get "tab" | default site.Params.main.externalLinks.tab }}
{{ $case = .Get "case" | default true }}
{{ else if strings.Contains (.Get 0) "/" }}
{{ $url = .Get 0 }}
{{ else }}
{{ $name = .Get 0 }}
{{ end }}
{{ if not (or $name $url) }}
{{ errorf "Expected param 'name' or 'url': %s" .Position -}}
{{ $error = true -}}
{{ end }}
{{ if $name }}
{{ $url = index site.Params.links $name }}
{{ if not $url }}
{{ errorf "Cannot find link '%s': %s" $name .Position -}}
{{ $error = true -}}
{{ end }}
{{ end }}
{{ $text := trim .Inner " \r\n" | markdownify | safeHTML }}
{{- $class := .Get "class" -}}
{{- if not $error -}}
{{ partial "utilities/link.html" (dict "destination" $url "text" $text "cue" $cue "tab" $tab "case" $case "class" $class) }}
{{- end -}}

View File

@@ -15,6 +15,7 @@
"search" Optional flag to include a search input, default is "true".
"logo" Optional address of the logo image.
"title" Optional brand title, displayed when the logo is not set.
"class": Optional class attribute of the navbar container.
-->
{{ $error := false }}
@@ -84,6 +85,8 @@
{{ $title := "" -}}
{{ with .Get "title" }}{{ $title = . }}{{ end -}}
{{- $class := .Get "class" -}}
{{ if not $error -}}
{{- partial "assets/navbar.html" (dict
"id" $id
@@ -96,6 +99,7 @@
"menus" $menus
"logo" $logo
"title" $title
"class" $class
)
-}}
{{ end -}}

View File

@@ -4,6 +4,7 @@
"version": Required version string, expects semver notation with a "v" prefix.
"state": Optional state, either "new" or "deprecated".
"short": Optional flag to indicate the release button should use short notation.
"class": Optional class attribute of the button element.
-->
{{- $error := false -}}
@@ -54,6 +55,8 @@
{{- end -}}
{{- end -}}
{{- $class := .Get "class" -}}
{{- if not $error -}}
<div class="pb-3">
{{- partial "assets/button.html" (dict
@@ -62,7 +65,7 @@
"size" "sm"
"color" $color
"outline" "true"
"class" "rounded-2 fw-semibold")
"class" (trim (printf "rounded-2 fw-semibold %s" $class) " "))
-}}
</div>
{{- end -}}

View File

@@ -1,4 +1,14 @@
<!-- Inspired by the timeline snippet from Siddharth Panchal at https://bootsnipp.com/snippets/Q0ppE -->
<!--
Inspired by the timeline snippet from Siddharth Panchal at https://bootsnipp.com/snippets/Q0ppE
Show items ordered on a vertical timelime. The shortcode supports the following arguments:
"data" Required filename of the timeline input. You can omit the file extension. The file should reside in
the "data" folder.
"background" Optional 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.
"class" Optional class attribute of the timeline's container.
-->
{{ $error := false }}
{{- $data := .Get "data" -}}
@@ -21,6 +31,8 @@
{{ $error = true -}}
{{ end -}}
{{- $class := .Get "class" -}}
<!-- Inline partial to render icon -->
{{- define "partials/timeline-icon.html" -}}
{{- $col := default 6 .col -}}
@@ -74,7 +86,7 @@
{{- end -}}
<!-- Render default timeline -->
<div class="container p-0 d-none d-md-block mb-5 {{ with $background }} timeline-bg-{{ . }}{{ end }}">
<div class="container p-0 d-none d-md-block mb-5 {{ with $background }} timeline-bg-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}">
{{ range $index, $item := $entries }}
<div class="row timeline timeline-{{ $item.color }} timeline-dot g-0 ">
{{ if eq (mod $index 2) 1 }}
@@ -90,7 +102,7 @@
</div>
<!-- Render timeline for smaller devices -->
<div class="container p-0 d-block d-md-none {{ with $background }} timeline-bg-{{ . }}{{ end }}">
<div class="container p-0 d-block d-md-none {{ with $background }} timeline-bg-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}">
{{ range $index, $item := $entries }}
<div class="row timeline-sm timeline-{{ $item.color }} timeline-dot g-0">
{{ partial "partials/timeline-icon.html" (dict "icon" $item.icon "direction" "end" "col" 3) }}

View File

@@ -2,6 +2,7 @@
Prepares a toast message. Use a trigger to display the message. The shortcode supports the following arguments:
"id" Optional id of the toast message, defaults to "toast-message-n" with sequence n.
"header": Optional header of the toast message. Uses the site title by default.
"class" Optional class attribute of the toast element.
-->
{{- $error := false -}}
@@ -10,8 +11,10 @@
{{ $header := .Get "header" -}}
{{ $message := trim .Inner " \r\n" -}}
{{- $class := .Get "class" -}}
{{ if not $message -}}
{{ errorf "Missing inner element text: %s" .Position -}}
{{ else if not $error -}}
{{ partial "assets/toast.html" (dict "id" $id "header" $header "message" $message) }}
{{ partial "assets/toast.html" (dict "id" $id "header" $header "message" $message "class" $class) }}
{{ end -}}

View File

@@ -5,6 +5,7 @@
"title" Required text to display in the tooltip.
"href" Required address for the button or hyperlink.
"placement" Optional position of the tooltip: "top" (default), "bottom", "left", or "right".
"class" Optional class attribute of the tooltip's button element.
-->
{{ $error := false }}
@@ -40,6 +41,8 @@
{{ $error = true }}
{{ end -}}
{{- $class := .Get "class" -}}
{{ if not $error }}
<div class="d-inline-flex">{{- partial "assets/button.html" (dict "type" $type "title" $title "color" $color "tooltip" $tooltip "href" $href "placement" $placement) -}}</div>
<div class="d-inline-flex">{{- partial "assets/button.html" (dict "type" $type "title" $title "color" $color "tooltip" $tooltip "href" $href "placement" $placement "class" $class) -}}</div>
{{ end }}

945
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@gethinode/hinode",
"version": "0.16.0-beta2",
"version": "0.17.4",
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
"keywords": [
"hugo",
@@ -17,14 +17,13 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
"prestart": "npm run clean && npm run mod:vendor",
"start": "hugo server --bind=0.0.0.0 --disableFastRender",
"start:prod": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -e production",
"prebuild": "npm run clean",
"prebuild": "npm run clean:public && npm run -s mod:install",
"build": "hugo --gc --minify",
"build:debug": "hugo -e debug --debug",
"build:preview": "npm run build -D -F",
"clean": "rimraf public resources",
"clean:public": "rimraf public",
"clean:install": "rimraf package-lock.json node_modules",
"lint": "npm run -s lint:scripts && npm run -s lint:styles && npm run -s lint:markdown",
"lint:scripts": "eslint assets/js",
@@ -32,6 +31,7 @@
"lint:markdown": "markdownlint-cli2 \"*.md\" \"content/**/*.md\"",
"lint:markdown-fix": "markdownlint-cli2-fix \"*.md\" \"content/**/*.md\"",
"mod:clean": "hugo mod clean",
"mod:install": "hugo mod get ./... && npm run -s mod:vendor && npm run -s mod:tidy",
"mod:update": "hugo mod get -u ./... && npm run -s mod:vendor && npm run -s mod:tidy",
"mod:tidy": "hugo mod tidy",
"mod:vendor": "rimraf _vendor && hugo mod vendor",
@@ -43,7 +43,7 @@
"create:syntax-light": "hugo gen chromastyles --style=github > ./assets/scss/components/_syntax-light.scss",
"create:syntax-dark": "hugo gen chromastyles --style=github-dark > ./assets/scss/components/_syntax-dark.scss",
"update:syntax-dark": "replace-in-files --string=\"#ffffcc\" --replacement=\"#b8b800\" ./assets/scss/components/_syntax-dark.scss",
"upgrade": "npx npm-check-updates -u"
"upgrade": "npx npm-check-updates -u && npm run -s mod:update"
},
"repository": {
"type": "git",
@@ -56,24 +56,23 @@
},
"homepage": "https://gethinode.com",
"devDependencies": {
"@fortawesome/fontawesome-free": "^6.4.0",
"@fullhuman/postcss-purgecss": "^5.0.0",
"autoprefixer": "^10.4.14",
"cssnano": "^6.0.0",
"cssnano-preset-advanced": "^6.0.0",
"eslint": "^8.39.0",
"eslint-config-standard": "^17.0.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^16.0.0",
"cssnano": "^6.0.1",
"cssnano-preset-advanced": "^6.0.1",
"eslint": "^8.46.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.28.0",
"eslint-plugin-n": "^16.0.1",
"eslint-plugin-promise": "^6.1.1",
"hugo-bin": "^0.111.0",
"hugo-bin": "^0.112.1",
"markdownlint-cli2": "^0.8.1",
"postcss-cli": "^10.1.0",
"purgecss-whitelister": "^2.4.0",
"replace-in-files-cli": "^2.2.0",
"rimraf": "^5.0.0",
"rimraf": "^5.0.1",
"shx": "^0.3.4",
"stylelint": "^15.6.0",
"stylelint": "^15.10.2",
"stylelint-config-standard-scss": "^10.0.0"
},
"hugo-bin": {