mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-07 18:14:28 +00:00
Compare commits
150 Commits
v0.13.2
...
v0.15.0-be
Author | SHA1 | Date | |
---|---|---|---|
![]() |
49d7736e1a | ||
![]() |
04531b6158 | ||
![]() |
b7fb9fb05b | ||
![]() |
4a78bd9e6b | ||
![]() |
4d0007a26b | ||
![]() |
ac7e564857 | ||
![]() |
f804ab747c | ||
![]() |
cfd292ddff | ||
![]() |
d4b0c379e2 | ||
![]() |
60ebd5fd41 | ||
![]() |
19a4398c90 | ||
![]() |
841c2e397f | ||
![]() |
3f42d781ec | ||
![]() |
dd9fcc6cbd | ||
![]() |
70aed1ed63 | ||
![]() |
1c635c814c | ||
![]() |
ff1c8ff056 | ||
![]() |
44c70f4036 | ||
![]() |
28f13f8385 | ||
![]() |
849d481cd6 | ||
![]() |
a0987e33a9 | ||
![]() |
f5dae5caa2 | ||
![]() |
d640ed1f8e | ||
![]() |
0c46c0080e | ||
![]() |
7319a3f9e3 | ||
![]() |
2e6ba557c8 | ||
![]() |
1d24b8ff0e | ||
![]() |
df307be37c | ||
![]() |
5d09963bb5 | ||
![]() |
8ce05d0c41 | ||
![]() |
5e03d80944 | ||
![]() |
65bdc8bb32 | ||
![]() |
558eed95ef | ||
![]() |
a17ed9b14a | ||
![]() |
06c5a97e3b | ||
![]() |
269d7c6bcf | ||
![]() |
fc2a43b8b9 | ||
![]() |
9c14411a3b | ||
![]() |
529e402267 | ||
![]() |
4a8ecaad19 | ||
![]() |
d13013189c | ||
![]() |
b21b412f16 | ||
![]() |
b3ad43768c | ||
![]() |
9ea9a6c616 | ||
![]() |
188129f19b | ||
![]() |
8a83f7345a | ||
![]() |
65cd47b1db | ||
![]() |
7e7cc41603 | ||
![]() |
7318d3cacb | ||
![]() |
ff928d035a | ||
![]() |
9341a98ab7 | ||
![]() |
206558e21e | ||
![]() |
8ecf38befc | ||
![]() |
afb3bbff9d | ||
![]() |
a7f871f954 | ||
![]() |
5d368ecaaa | ||
![]() |
2e40bd6be0 | ||
![]() |
21ae80d491 | ||
![]() |
6292be190e | ||
![]() |
a7c5c613c2 | ||
![]() |
480981d867 | ||
![]() |
abfa80d5a2 | ||
![]() |
08531514d3 | ||
![]() |
d4c321fee4 | ||
![]() |
b125be2e7d | ||
![]() |
f075eb12ee | ||
![]() |
c30dd39ce2 | ||
![]() |
ad7cd18893 | ||
![]() |
cdc3accff3 | ||
![]() |
5916a89979 | ||
![]() |
dbc253cbf2 | ||
![]() |
1fd8989ad3 | ||
![]() |
0a401775ff | ||
![]() |
3534d6daec | ||
![]() |
ada5ac3d5c | ||
![]() |
1630eabff8 | ||
![]() |
4a492d2de5 | ||
![]() |
20a492d9d9 | ||
![]() |
179132964f | ||
![]() |
4768d6791f | ||
![]() |
c8e2d3410c | ||
![]() |
8d53c762d7 | ||
![]() |
22d2e41601 | ||
![]() |
b462c31916 | ||
![]() |
dbb5b4be69 | ||
![]() |
4f288ec5dd | ||
![]() |
8fb47e27af | ||
![]() |
a0d2063738 | ||
![]() |
c17986bb49 | ||
![]() |
bafd522530 | ||
![]() |
930e151365 | ||
![]() |
6687e09d68 | ||
![]() |
86ec79d08a | ||
![]() |
afb42a188c | ||
![]() |
c303e97eb0 | ||
![]() |
1ad2a4c617 | ||
![]() |
2bf15ca8b2 | ||
![]() |
e00ab2a2fd | ||
![]() |
98c422a6d4 | ||
![]() |
527060e219 | ||
![]() |
b5c81cd121 | ||
![]() |
9fbe81a668 | ||
![]() |
cf4ed131aa | ||
![]() |
15a9eb2c5c | ||
![]() |
3271fcc97e | ||
![]() |
0752b4cfbf | ||
![]() |
965845137c | ||
![]() |
8f83138cbc | ||
![]() |
86d726d10c | ||
![]() |
2860edd1bd | ||
![]() |
d802df87ef | ||
![]() |
808b3a5694 | ||
![]() |
cde8495583 | ||
![]() |
c2aaff81cf | ||
![]() |
5421839028 | ||
![]() |
a74466e281 | ||
![]() |
454c659e44 | ||
![]() |
2de384497e | ||
![]() |
ca41d9adb4 | ||
![]() |
a633e4eea0 | ||
![]() |
a341e916b9 | ||
![]() |
a3d289843f | ||
![]() |
8700e18ad9 | ||
![]() |
8936dafac6 | ||
![]() |
4d1c7d46eb | ||
![]() |
bffe6425da | ||
![]() |
3e1c3a2c9c | ||
![]() |
df83103718 | ||
![]() |
e54417bc02 | ||
![]() |
61f2b82221 | ||
![]() |
2689107e5a | ||
![]() |
d20d053232 | ||
![]() |
35fb72d408 | ||
![]() |
18cee3cac6 | ||
![]() |
192021fbb3 | ||
![]() |
a3c5d36584 | ||
![]() |
42d169bbc0 | ||
![]() |
3b4b3a65b6 | ||
![]() |
32ee66bf90 | ||
![]() |
6b8ff44fb0 | ||
![]() |
70cc8946b0 | ||
![]() |
eab0cfa6ab | ||
![]() |
1580898f1a | ||
![]() |
530fb03d29 | ||
![]() |
3e5261bd36 | ||
![]() |
e2d409baed | ||
![]() |
d009874ece | ||
![]() |
f8adffc131 | ||
![]() |
68a3a3be30 | ||
![]() |
c077c8b53b |
27
.github/release.yml
vendored
Normal file
27
.github/release.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
changelog:
|
||||
exclude:
|
||||
labels:
|
||||
- skip-changelog
|
||||
categories:
|
||||
- title: ❗ Breaking Changes
|
||||
labels:
|
||||
- Semver-Major
|
||||
- breaking-change
|
||||
- title: 🚀 Highlights
|
||||
labels:
|
||||
- release-highlight
|
||||
- title: 🎉 New Features
|
||||
labels:
|
||||
- Semver-Minor
|
||||
- enhancement
|
||||
- title: 🐛 Bug fixes
|
||||
labels:
|
||||
- fix
|
||||
- bugfix
|
||||
- bug
|
||||
- title: 📦 Dependencies
|
||||
labels:
|
||||
- dependencies
|
||||
- title: 🧰 Other Changes
|
||||
labels:
|
||||
- "*"
|
@@ -75,10 +75,10 @@ Start a new Hinode project in three steps:
|
||||
|
||||
1. Create a new site
|
||||
|
||||
Hinode is available as a [child theme][repository_child], and a [main theme][repository]. The child theme uses [npm][npm] to link to the latest available version of Hinode. Unless you plan to customize a lot, it is recommended to use the child theme:
|
||||
Hinode is available as a [template][repository_template], and a [main repository][repository]. The template [npm][npm] to link to the latest available version of Hinode. Unless you plan to customize a lot, it is recommended to use the template:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/gethinode/child.git my-hinode-site && cd my-hinode-site
|
||||
git clone https://github.com/gethinode/template.git my-hinode-site && cd my-hinode-site
|
||||
```
|
||||
|
||||
Use the main theme if you intend to customize the base code:
|
||||
@@ -120,7 +120,7 @@ Hinode is inspired by the following themes:
|
||||
|
||||
## License
|
||||
|
||||
The `hinode` and `child` codebase is released under the [MIT license][license]. The documentation (including the "README" and `docs` codebase) is licensed under the Creative Commons ([CC BY-NC 4.0)][cc-by-nc-4.0] license.
|
||||
The `hinode` and `template` codebase is released under the [MIT license][license]. The documentation (including the "README" and `docs` codebase) is licensed under the Creative Commons [(CC BY-NC 4.0)][cc-by-nc-4.0] license.
|
||||
|
||||
<!-- MARKDOWN PUBLIC LINKS -->
|
||||
[blist]: https://github.com/apvarun/blist-hugo-theme
|
||||
@@ -143,5 +143,5 @@ The `hinode` and `child` codebase is released under the [MIT license][license].
|
||||
[demo]: https://demo.gethinode.com/
|
||||
[license]: https://github.com/gethinode/hinode/blob/main/LICENSE
|
||||
[repository]: https://github.com/gethinode/hinode.git
|
||||
[repository_child]: https://github.com/gethinode/child.git
|
||||
[repository_template]: https://github.com/gethinode/template.git
|
||||
[website]: https://gethinode.com/
|
||||
|
@@ -14,10 +14,12 @@ const addCopyButtons = (clipboard) => {
|
||||
// 2. Create a button that will trigger a copy operation
|
||||
const button = document.createElement('button')
|
||||
button.className = 'clipboard-button'
|
||||
button.setAttribute('data-toast-target', 'toast-copied-code-message')
|
||||
button.type = 'button'
|
||||
button.innerHTML = svgCopy
|
||||
button.addEventListener('click', () => {
|
||||
clipboard.writeText(codeBlock.innerText).then(
|
||||
const text = codeBlock.innerText.split('\n').filter(Boolean).join('\n')
|
||||
clipboard.writeText(text).then(
|
||||
() => {
|
||||
button.blur()
|
||||
button.innerHTML = svgCheck
|
||||
@@ -36,3 +38,10 @@ const addCopyButtons = (clipboard) => {
|
||||
if (navigator && navigator.clipboard) {
|
||||
addCopyButtons(navigator.clipboard)
|
||||
}
|
||||
|
||||
document.querySelectorAll('[data-clipboard]').forEach(trigger => {
|
||||
const text = trigger.getAttribute('data-clipboard')
|
||||
trigger.addEventListener('click', () => {
|
||||
navigator.clipboard.writeText(text)
|
||||
})
|
||||
})
|
||||
|
20
assets/js/menu.js
Normal file
20
assets/js/menu.js
Normal file
@@ -0,0 +1,20 @@
|
||||
const url = new URL(window.location.href)
|
||||
const menu = url.searchParams.get('menu')
|
||||
const child = url.searchParams.get('child')
|
||||
const menuItems = document.querySelectorAll('[data-nav="main"]')
|
||||
|
||||
if (menu !== null) {
|
||||
menuItems.forEach(element => {
|
||||
element.classList.remove('active')
|
||||
})
|
||||
|
||||
const targetMainItems = document.querySelectorAll(`[data-nav-main="${menu}"]:not([data-nav-child])`)
|
||||
targetMainItems.forEach(element => {
|
||||
element.classList.add('active')
|
||||
})
|
||||
|
||||
const targetChildItems = document.querySelectorAll(`[data-nav-main="${menu}"][data-nav-child="${child}"]`)
|
||||
targetChildItems.forEach(element => {
|
||||
element.classList.add('active')
|
||||
})
|
||||
}
|
@@ -1,10 +1,24 @@
|
||||
// Bootstrap toast example: https://getbootstrap.com/docs/5.2/components/toasts/
|
||||
const toastTrigger = document.getElementById('toastButton')
|
||||
const toastLiveExample = document.getElementById('toastMessage')
|
||||
if (toastTrigger) {
|
||||
toastTrigger.addEventListener('click', () => {
|
||||
// Script to move all embedded toast messages into a container with id 'toast-container'. The container ensures multiple
|
||||
// toast messages are stacked properly. The script targets all elements specified by a 'data-toast-target' and ensures
|
||||
// the click event of the origin is linked as well.
|
||||
|
||||
const container = document.getElementById('toast-container')
|
||||
if (container !== null) {
|
||||
// process all data-toast-target elements
|
||||
document.querySelectorAll('[data-toast-target]').forEach(trigger => {
|
||||
const target = document.getElementById(trigger.getAttribute('data-toast-target'))
|
||||
if (target !== null) {
|
||||
// move the element to the toast containr
|
||||
container.appendChild(target)
|
||||
|
||||
// eslint-disable-next-line no-undef
|
||||
const toast = new bootstrap.Toast(toastLiveExample)
|
||||
const toast = bootstrap.Toast.getOrCreateInstance(target)
|
||||
if (toast !== null) {
|
||||
// associate the click event of the origin with the toast element
|
||||
trigger.addEventListener('click', () => {
|
||||
toast.show()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@@ -71,6 +71,7 @@
|
||||
@import "components/comments.scss";
|
||||
@import "components/navbar.scss";
|
||||
@import "components/img.scss";
|
||||
@import "components/pagination.scss";
|
||||
@import "components/persona.scss";
|
||||
@import "components/popover.scss";
|
||||
@import "components/search.scss";
|
||||
|
@@ -23,3 +23,19 @@ $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;
|
||||
}
|
||||
}
|
||||
|
@@ -6,3 +6,22 @@
|
||||
.open > .dropdown-toggle.btn-primary {
|
||||
color: #fff if($enable-important-utilities, !important, null);
|
||||
}
|
||||
|
||||
.btn-social {
|
||||
--bs-btn-bg: transparent;
|
||||
--bs-btn-border-width: none;
|
||||
--bs-btn-color: var(--bs-secondary);
|
||||
--bs-btn-border-color: none;
|
||||
--bs-btn-hover-bg: none;
|
||||
--bs-btn-hover-border-color: none;
|
||||
--bs-btn-active-bg: none;
|
||||
--bs-btn-active-border-color: none;
|
||||
}
|
||||
|
||||
.btn-social:hover,
|
||||
.btn-social:focus,
|
||||
.btn-social:active,
|
||||
.btn-social.active,
|
||||
.open > .dropdown-toggle.btn-primary {
|
||||
color: var(--bs-primary) if($enable-important-utilities, !important, null);
|
||||
}
|
||||
|
11
assets/scss/components/_pagination.scss
Normal file
11
assets/scss/components/_pagination.scss
Normal file
@@ -0,0 +1,11 @@
|
||||
.pagination {
|
||||
--bs-pagination-bg: var(--bs-primary-bg-subtle);
|
||||
--bs-pagination-border-color: none;
|
||||
--bs-pagination-hover-color: var(--bs-pagination-active-color);
|
||||
--bs-pagination-hover-bg: var(--bs-pagination-active-bg);
|
||||
--bs-pagination-hover-border-color: none;
|
||||
}
|
||||
|
||||
.pagination .page-item {
|
||||
margin: 0.4rem;
|
||||
}
|
@@ -27,6 +27,20 @@ defaultContentLanguage = "en"
|
||||
defaultContentLanguageInSubdir = true
|
||||
# toml-docs-end language
|
||||
|
||||
# toml-docs-start redirect
|
||||
[outputFormats.REDIR]
|
||||
mediaType = "text/netlify"
|
||||
baseName = "_redirects"
|
||||
isPlainText = true
|
||||
notAlternative = true
|
||||
|
||||
[mediaTypes."text/netlify"]
|
||||
delimiter = ""
|
||||
|
||||
[outputs]
|
||||
home = ["HTML", "RSS", "REDIR"]
|
||||
# toml-docs-end redirect
|
||||
|
||||
# toml-docs-start build
|
||||
[build]
|
||||
writeStats = true
|
||||
@@ -79,6 +93,9 @@ defaultContentLanguageInSubdir = true
|
||||
[[module.mounts]]
|
||||
source = "static"
|
||||
target = "static"
|
||||
[[module.mounts]]
|
||||
source = "static/fonts"
|
||||
target = "static/fonts"
|
||||
# toml-docs-start javascript
|
||||
[[module.mounts]]
|
||||
source = "node_modules/bootstrap/dist/js"
|
||||
@@ -89,3 +106,6 @@ defaultContentLanguageInSubdir = true
|
||||
target = "assets/js/vendor/flexsearch"
|
||||
includeFiles = "*.bundle.js"
|
||||
# toml-docs-end javascript
|
||||
[[module.mounts]]
|
||||
source = "node_modules/@fortawesome/fontawesome-free/webfonts"
|
||||
target = "static/fonts"
|
||||
|
@@ -1,33 +1,33 @@
|
||||
[[main]]
|
||||
name = "About"
|
||||
url = "/about/"
|
||||
pageRef = "/about/"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Blog"
|
||||
url = "/blog/"
|
||||
pageRef = "/blog/"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Projects"
|
||||
url = "/projects/"
|
||||
pageRef = "/projects/"
|
||||
weight = 30
|
||||
|
||||
[[main]]
|
||||
name = "Sample project"
|
||||
url = "/projects/sample-project/"
|
||||
pageRef = "/projects/sample-project/"
|
||||
parent = "Projects"
|
||||
weight = 1
|
||||
|
||||
[[main]]
|
||||
name = "Another project"
|
||||
url = "/projects/another-project/"
|
||||
pageRef = "/projects/another-project/"
|
||||
parent = "Projects"
|
||||
weight = 2
|
||||
|
||||
[[main]]
|
||||
name = "Tags"
|
||||
url = "/tags/"
|
||||
pageRef = "/tags/"
|
||||
weight = 40
|
||||
|
||||
[[social]]
|
||||
@@ -51,23 +51,23 @@
|
||||
# toml-docs-start sample-navigation
|
||||
[[sample]]
|
||||
name = "Blog"
|
||||
url = "/blog/"
|
||||
pageRef = "/blog/"
|
||||
weight = 10
|
||||
|
||||
[[sample]]
|
||||
name = "Projects"
|
||||
url = "/projects/"
|
||||
pageRef = "/projects/"
|
||||
weight = 20
|
||||
|
||||
[[sample]]
|
||||
name = "Sample project"
|
||||
url = "/projects/sample-project/"
|
||||
pageRef = "/projects/sample-project/"
|
||||
parent = "Projects"
|
||||
weight = 1
|
||||
|
||||
[[sample]]
|
||||
name = "Another project"
|
||||
url = "/projects/another-project/"
|
||||
pageRef = "/projects/another-project/"
|
||||
parent = "Projects"
|
||||
weight = 2
|
||||
# toml-docs-end sample-navigation
|
@@ -1,33 +1,33 @@
|
||||
[[main]]
|
||||
name = "Over mij"
|
||||
url = "/over-mij/"
|
||||
pageRef = "/over-mij/"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Blog"
|
||||
url = "/blog/"
|
||||
pageRef = "/blog/"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Projecten"
|
||||
url = "/projecten/"
|
||||
pageRef = "/projecten/"
|
||||
weight = 30
|
||||
|
||||
[[main]]
|
||||
name = "Voorbeeldproject"
|
||||
url = "/projecten/voorbeeldproject/"
|
||||
pageRef = "/projecten/voorbeeldproject/"
|
||||
parent = "Projecten"
|
||||
weight = 1
|
||||
|
||||
[[main]]
|
||||
name = "Ander project"
|
||||
url = "/projecten/ander-project/"
|
||||
pageRef = "/projecten/ander-project/"
|
||||
parent = "Projecten"
|
||||
weight = 2
|
||||
|
||||
[[main]]
|
||||
name = "Tags"
|
||||
url = "/tags/"
|
||||
pageRef = "/tags/"
|
||||
weight = 40
|
||||
|
||||
[[social]]
|
||||
@@ -51,23 +51,23 @@
|
||||
# toml-docs-start sample-navigation
|
||||
[[sample]]
|
||||
name = "Blog"
|
||||
url = "/blog/"
|
||||
pageRef = "/blog/"
|
||||
weight = 10
|
||||
|
||||
[[sample]]
|
||||
name = "Projecten"
|
||||
url = "/projecten/"
|
||||
pageRef = "/projecten/"
|
||||
weight = 20
|
||||
|
||||
[[sample]]
|
||||
name = "Voorbeeldproject"
|
||||
url = "/projecten/voorbeeldproject/"
|
||||
pageRef = "/projecten/voorbeeldproject/"
|
||||
parent = "Projecten"
|
||||
weight = 1
|
||||
|
||||
[[sample]]
|
||||
name = "Ander project"
|
||||
url = "/projecten/ander-project/"
|
||||
pageRef = "/projecten/ander-project/"
|
||||
parent = "Projecten"
|
||||
weight = 2
|
||||
# toml-docs-end sample-navigation
|
@@ -10,6 +10,8 @@
|
||||
[docs]
|
||||
version = "0.8"
|
||||
basePath = ""
|
||||
github = "https://github.com/gethinode/hinode"
|
||||
release = "https://github.com/gethinode/hinode/releases/tag/"
|
||||
# toml-docs-end docs
|
||||
|
||||
# toml-docs-start home
|
||||
@@ -34,6 +36,49 @@
|
||||
sidebar = true
|
||||
# toml-docs-end navigation
|
||||
|
||||
# toml-docs-start messages
|
||||
[messages]
|
||||
placement = "bottom-right"
|
||||
# toml-docs-end messages
|
||||
|
||||
# toml-docs-start sharing
|
||||
[sharing]
|
||||
enabled = true
|
||||
sort = "weight"
|
||||
reverse = false
|
||||
|
||||
[[sharing.providers]]
|
||||
name = "LinkedIn"
|
||||
url = "https://www.linkedin.com/sharing/share-offsite/?url={url}"
|
||||
icon = "fab linkedin"
|
||||
weight = 10
|
||||
|
||||
[[sharing.providers]]
|
||||
name = "Twitter"
|
||||
url = "https://twitter.com/home?status={url}"
|
||||
icon = "fab twitter"
|
||||
weight = 20
|
||||
|
||||
[[sharing.providers]]
|
||||
name = "Facebook"
|
||||
url = "https://www.facebook.com/sharer.php?u={url}"
|
||||
icon = "fab facebook"
|
||||
weight = 30
|
||||
|
||||
[[sharing.providers]]
|
||||
name = "WhatsApp"
|
||||
url = "whatsapp://send?text={title}%20{url}"
|
||||
icon = "fab whatsapp"
|
||||
weight = 40
|
||||
|
||||
[[sharing.providers]]
|
||||
name = "email"
|
||||
url = "{url}"
|
||||
icon = "fas link"
|
||||
weight = 50
|
||||
clipboard = true
|
||||
# toml-docs-end sharing
|
||||
|
||||
# toml-docs-start sections
|
||||
[sections]
|
||||
[sections.blog]
|
||||
@@ -52,6 +97,7 @@
|
||||
separator = true
|
||||
[sections.projects]
|
||||
title = "Projects"
|
||||
layout = "card"
|
||||
sort = "title"
|
||||
reverse = false
|
||||
nested = true
|
||||
@@ -61,7 +107,7 @@
|
||||
padding = "3"
|
||||
header = "none"
|
||||
footer = "tags"
|
||||
orientation = "none"
|
||||
orientation = "horizontal"
|
||||
style = "border-1 card-emphasize"
|
||||
homepage = 3
|
||||
separator = false
|
||||
|
@@ -1,7 +1,7 @@
|
||||
---
|
||||
author: Mark Dumay
|
||||
title: Bootstrap elements
|
||||
date: 2023-02-17
|
||||
date: 2023-05-20
|
||||
description: Use shortcodes to add common Bootstrap elements with ease.
|
||||
tags: ["bootstrap", "shortcode"]
|
||||
thumbnail: img/boots.jpg
|
||||
@@ -223,6 +223,16 @@ As an example, the following shortcode displays a light navigation header.
|
||||
{{< /example >}}
|
||||
<!-- markdownlint-enable MD037 -->
|
||||
|
||||
## Release
|
||||
|
||||
As an example, the following shortcode displays a default release button.
|
||||
|
||||
<!-- markdownlint-disable MD037 -->
|
||||
{{< example lang="hugo" >}}
|
||||
{{</* release version="v0.14.1" */>}}
|
||||
{{< /example >}}
|
||||
<!-- markdownlint-enable MD037 -->
|
||||
|
||||
## Spinner
|
||||
|
||||
As an example, the following shortcode displays a centered spinner.
|
||||
@@ -241,12 +251,20 @@ As an example, the following shortcode displays a button that, when clicked, tri
|
||||
|
||||
<!-- markdownlint-disable MD037 -->
|
||||
{{< example lang="hugo" >}}
|
||||
{{</* button id="toastButton" */>}}
|
||||
Show toast
|
||||
{{</* button toast="toast-example-1" */>}}
|
||||
Show toast 1
|
||||
{{</* /button */>}}
|
||||
|
||||
{{</* toast header="Custom title" */>}}
|
||||
This is a toast message.
|
||||
{{</* button toast="toast-example-2" */>}}
|
||||
Show toast 2
|
||||
{{</* /button */>}}
|
||||
|
||||
{{</* toast id="toast-example-1" header="First title" */>}}
|
||||
This is the first toast message.
|
||||
{{</* /toast */>}}
|
||||
|
||||
{{</* toast id="toast-example-2" header="Second title" */>}}
|
||||
This is the second toast message.
|
||||
{{</* /toast */>}}
|
||||
{{< /example >}}
|
||||
<!-- markdownlint-enable MD037 -->
|
||||
|
@@ -4,9 +4,7 @@ title: Another project
|
||||
date: 2021-07-15
|
||||
description: Another project.
|
||||
tags: ["javascript", "golang"]
|
||||
thumbnail: img/coffee.jpg # https://picsum.photos/id/1060/5598/3732
|
||||
photoCredits: <a href="https://unsplash.com/@kfred">Karl Fredrickson</a>
|
||||
photoSource: <a href="https://unsplash.com/photos/TYIzeCiZ_60">Unsplash</a>
|
||||
icon: fas rocket
|
||||
---
|
||||
|
||||
Vivamus iaculis metus sed magna porta tincidunt. Aliquam molestie eget orci eu elementum. Integer pellentesque dolor sit amet suscipit maximus. Duis consequat, massa vitae volutpat rhoncus, erat augue venenatis velit, a auctor leo nulla nec turpis. Nunc ut libero sapien. Vivamus aliquam ultrices vestibulum. Sed sit amet vestibulum dolor, ut vehicula diam. Sed felis purus, feugiat vitae vulputate quis, sodales vitae dui. Pellentesque volutpat fringilla sapien varius condimentum. Integer odio massa, pharetra at bibendum vitae, aliquam nec erat.
|
||||
|
@@ -4,9 +4,7 @@ title: Sample project
|
||||
date: 2021-07-15
|
||||
description: A sample project.
|
||||
tags: ["html", "css"]
|
||||
thumbnail: img/laptop.jpg # https://picsum.photos/id/0/5616/3744
|
||||
photoCredits: <a href="https://unsplash.com/@alejandroescamilla">Alejandro Escamilla</a>
|
||||
photoSource: <a href="https://unsplash.com/photos/yC-Yzbqy7PY">Unsplash</a>
|
||||
icon: fab docker
|
||||
---
|
||||
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||
|
@@ -224,6 +224,16 @@ De volgende shortcode toont een navigatiemenu.
|
||||
{{< /example >}}
|
||||
<!-- markdownlint-enable MD037 -->
|
||||
|
||||
## Release
|
||||
|
||||
De volgende shortcode toont een knop voor een nieuwe release.
|
||||
|
||||
<!-- markdownlint-disable MD037 -->
|
||||
{{< example lang="hugo" >}}
|
||||
{{</* release version="v0.14.1" */>}}
|
||||
{{< /example >}}
|
||||
<!-- markdownlint-enable MD037 -->
|
||||
|
||||
## Spinner
|
||||
|
||||
De volgende shortcode toont een ronddraaiende cirkel.
|
||||
@@ -242,12 +252,20 @@ De volgende shortcode toont een knop die een bericht laat verschijnen op het sch
|
||||
|
||||
<!-- markdownlint-disable MD037 -->
|
||||
{{< example lang="hugo" >}}
|
||||
{{</* button id="toastButton" */>}}
|
||||
Toon bericht
|
||||
{{</* button toast="toast-example-1" */>}}
|
||||
Toon bericht 1
|
||||
{{</* /button */>}}
|
||||
|
||||
{{</* toast header="Titel" */>}}
|
||||
Dit is een bericht.
|
||||
{{</* button toast="toast-example-2" */>}}
|
||||
Toon bericht 2
|
||||
{{</* /button */>}}
|
||||
|
||||
{{</* toast id="toast-example-1" header="Eerste titel" */>}}
|
||||
Dit is het eerste bericht.
|
||||
{{</* /toast */>}}
|
||||
|
||||
{{</* toast id="toast-example-2" header="Tweede titel" */>}}
|
||||
Dit is het tweede bericht.
|
||||
{{</* /toast */>}}
|
||||
{{< /example >}}
|
||||
<!-- markdownlint-enable MD037 -->
|
||||
|
26
i18n/en.yaml
26
i18n/en.yaml
@@ -53,14 +53,16 @@
|
||||
translation: "Article"
|
||||
- id: articles
|
||||
translation: "Articles"
|
||||
- id: paginationNav
|
||||
translation: "Page navigation"
|
||||
- id: paginationPrevious
|
||||
translation: "Previous"
|
||||
translation: "Previous page"
|
||||
- id: paginationNext
|
||||
translation: "Next"
|
||||
translation: "Next page"
|
||||
- id: paginationFirst
|
||||
translation: "First"
|
||||
translation: "First page"
|
||||
- id: paginationLast
|
||||
translation: "Last"
|
||||
translation: "Last page"
|
||||
- id: toggleSidebar
|
||||
translation: "Toggle sidebar navigation"
|
||||
- id: colorMode
|
||||
@@ -75,6 +77,22 @@
|
||||
translation: "Toggle main navigation"
|
||||
- id: demo
|
||||
translation: "Demo"
|
||||
- id: addedFeature
|
||||
translation: "Added in"
|
||||
- id: deprecatedFeature
|
||||
translation: "Deprecated in"
|
||||
- id: shareLink
|
||||
translation: "Share via"
|
||||
- id: copiedToClipboard
|
||||
translation: "copied to clipboard"
|
||||
- id: link
|
||||
translation: "Link"
|
||||
- id: code
|
||||
translation: "Code"
|
||||
- id: latest
|
||||
translation: "latest"
|
||||
- id: allVersions
|
||||
translation: "All versions"
|
||||
|
||||
# 404 page
|
||||
- id: pageNotFound
|
||||
|
18
i18n/nl.yaml
18
i18n/nl.yaml
@@ -45,6 +45,8 @@
|
||||
translation: "Artikel"
|
||||
- id: articles
|
||||
translation: "Artikelen"
|
||||
- id: paginationNav
|
||||
translation: "Pagina navigatie"
|
||||
- id: paginationPrevious
|
||||
translation: "Vorige"
|
||||
- id: paginationNext
|
||||
@@ -65,6 +67,22 @@
|
||||
translation: "Automatisch"
|
||||
- id: toggleMainNav
|
||||
translation: "Toon of verberg hoofdnavigatie"
|
||||
- id: addedFeature
|
||||
translation: "Toegevoegd in"
|
||||
- id: deprecatedFeature
|
||||
translation: "Verouderd in"
|
||||
- id: shareLink
|
||||
translation: "Delen via"
|
||||
- id: copiedToClipboard
|
||||
translation: "gekopieerd naar clipboard"
|
||||
- id: link
|
||||
translation: "Link"
|
||||
- id: code
|
||||
translation: "Code"
|
||||
- id: latest
|
||||
translation: "meest recente"
|
||||
- id: allVersions
|
||||
translation: "Alle versies"
|
||||
|
||||
# 404 page
|
||||
- id: pageNotFound
|
||||
|
@@ -1,6 +1,7 @@
|
||||
{{- $section := .Section }}
|
||||
{{- with partial "utilities/GetMenu" . }}{{ $.Scratch.Set "sidebar" . }}{{ end -}}
|
||||
{{ $.Scratch.Set "version" (site.Param (printf "%s.version" .Section)) }}
|
||||
{{- $version := partial "utilities/GetVersion.html" (dict "page" . "base" true) -}}
|
||||
{{- $.Scratch.Set "version" $version -}}
|
||||
{{ with partial "utilities/GetMenu" (dict "page" . "version" $version) }}{{ $.Scratch.Set "sidebar" . }}{{ end }}
|
||||
|
||||
<!doctype html>
|
||||
<html lang="{{ .Site.Language.Lang }}" class="no-js">
|
||||
@@ -68,6 +69,7 @@
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{- partial "footer/toast-container.html" . -}}
|
||||
{{- partialCached "footer/scripts.html" (dict "header" false "page" .) }}
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -2,6 +2,7 @@
|
||||
{{ if site.Params.navigation.breadcrumb }}{{ partial "assets/breadcrumb.html" . }}{{ end -}}
|
||||
{{ if in (slice "docs" "minimal") .Layout }}
|
||||
{{ with .Title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
|
||||
{{ partial "assets/sharing.html" . }}
|
||||
<p class="lead mb-5">{{ .Description }}</p>
|
||||
{{ else }}
|
||||
{{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}}
|
||||
@@ -14,21 +15,28 @@
|
||||
{{ .WordCount | lang.FormatNumber 0 }} {{ i18n "words" }}
|
||||
</small>
|
||||
|
||||
{{- if gt (len (.GetTerms "tags")) 0 -}}
|
||||
<div class="mt-3">
|
||||
<div class="d-none-dark">
|
||||
<div class="hstack gap-3">
|
||||
{{ range (.GetTerms "tags") -}}
|
||||
<a class="btn btn-light btn-sm" href="{{ (path.Join .Page.RelPermalink) | relLangURL }}" role="button">{{ .LinkTitle }}</a>
|
||||
|
||||
{{- $url := (path.Join .Page.RelPermalink) | relLangURL -}}
|
||||
{{ partial "assets/button.html" (dict "href" $url "title" .LinkTitle "color" "light" "size" "sm") }}
|
||||
{{ end -}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-none-light">
|
||||
<div class="hstack gap-3">
|
||||
{{ range (.GetTerms "tags") -}}
|
||||
<a class="btn btn-outline-secondary btn-sm" href="{{ (path.Join .Page.RelPermalink) | relLangURL }}" role="button">{{ .LinkTitle }}</a>
|
||||
|
||||
{{- $url := (path.Join .Page.RelPermalink) | relLangURL -}}
|
||||
{{ partial "assets/button.html" (dict "href" $url "title" .LinkTitle "color" "secondary" "size" "sm" "outline" "true") }}
|
||||
{{ end -}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{ partial "assets/sharing.html" . }}
|
||||
<p class="lead mb-5 mt-3">{{ .Description }}</p>
|
||||
{{ end }}
|
||||
{{ end -}}
|
||||
|
11
layouts/alias.html
Normal file
11
layouts/alias.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html{{ with site.LanguageCode | default site.Language.Lang }} lang="{{ . }}"{{ end }}>
|
||||
<head>
|
||||
<title>{{ .Permalink }}</title>
|
||||
<link rel="canonical" href="{{ .Permalink }}">
|
||||
<meta name="robots" content="noindex">
|
||||
<meta charset="utf-8">
|
||||
<noscript><meta http-equiv="refresh" content="0; url={{ .Permalink }}"></noscript>
|
||||
<script src="/js/alias.js"></script>
|
||||
</head>
|
||||
</html>
|
5
layouts/index.redir
Normal file
5
layouts/index.redir
Normal file
@@ -0,0 +1,5 @@
|
||||
{{- range .Site.Params.docs.releases -}}
|
||||
{{- if .redirect -}}
|
||||
{{ urls.JoinPath .url "/*" }} {{ urls.JoinPath .redirect ":splat" }} 200
|
||||
{{- end -}}
|
||||
{{- end -}}
|
@@ -1,7 +1,14 @@
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
{{- range .Page.Ancestors.Reverse -}}
|
||||
<li class="breadcrumb-item"><a href="{{ .Permalink }}">{{ if not .IsHome }}{{ .Title }}{{ else }}{{ T "home" }}{{ end }}</a></li>
|
||||
{{- range $index, $item := .Page.Ancestors.Reverse -}}
|
||||
{{- $title := .Title -}}
|
||||
{{- if .IsHome }}{{ $title = T "home" }}{{ end -}}
|
||||
{{- $address := or .Permalink (.Params.Redirect | absLangURL) -}}
|
||||
{{ if $address }}
|
||||
<li class="breadcrumb-item"><a href="{{ $address }}">{{ $title }}</a></li>
|
||||
{{ else }}
|
||||
<li class="breadcrumb-item">{{ $title }}</li>
|
||||
{{ end }}
|
||||
{{- end -}}
|
||||
<li class="breadcrumb-item active" aria-current="page">{{ .Page.Title }}</li>
|
||||
</ol>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<!--
|
||||
Displays a button. The shortcode supports the following arguments:
|
||||
"title" Required title of the button.
|
||||
"title" Title of the button, required unless icon is set.
|
||||
"href" Optional address for the button or hyperlink.
|
||||
"id" Optional id of the button, to be used in the DOM.
|
||||
"state" Optional state of the button, either "enabled" (default), "disabled", "active", or "inactive".
|
||||
@@ -16,15 +16,18 @@
|
||||
"type" Optional type of the element, either "link" or "button" (default).
|
||||
"placement" Optional position of the tooltip: "top" (default), "bottom", "left", or "right".
|
||||
"class" Optional class attribute of the button element, e.g. “toc-button”.
|
||||
"icon" Optional Font Awesome icon class attribute, e.g. "fas sort".
|
||||
"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.
|
||||
-->
|
||||
|
||||
{{- $title := trim .title " \r\n" -}}
|
||||
{{- if not $title -}}
|
||||
{{- errorf "partial [assets/button.html] - Missing element title" -}}
|
||||
{{- $icon := .icon }}
|
||||
{{- if not (or $title $icon) -}}
|
||||
{{- errorf "partial [assets/button.html] - Missing element title or icon" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $id := .id }}
|
||||
@@ -92,7 +95,6 @@
|
||||
{{- end -}}
|
||||
|
||||
{{- $class := .class }}
|
||||
{{- $icon := .icon }}
|
||||
|
||||
{{- $order := "last" -}}
|
||||
{{- with .order }}{{ $order = . }}{{ end -}}
|
||||
@@ -108,14 +110,20 @@
|
||||
{{- errorf "partial [assets/button.html] - Invalid value for param 'justify': %s" $justify -}}
|
||||
{{- end -}}
|
||||
|
||||
<a aria-label="{{ $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end -}}
|
||||
{{- with $id }}id="{{ . }}"{{ end -}}
|
||||
{{- if eq $type "button" }}class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class }}" role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end -}}
|
||||
{{- else }}class="link-{{ $color }} position-relative {{ $class }}"{{ end -}}
|
||||
{{- with $tooltip }}data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end -}}
|
||||
{{- with $collapse }}data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end -}}
|
||||
{{- if eq $state "active" }}data-bs-toggle="button" aria-pressed="true"{{ end -}}
|
||||
{{- if eq $state "inactive" }}data-bs-toggle="button" aria-pressed="false"{{ end -}}
|
||||
{{- $toast := .toast -}}
|
||||
{{- $clipboard := .clipboard -}}
|
||||
|
||||
<a aria-label="{{ $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end }}
|
||||
{{ with $id }}id="{{ . }}"{{ end }}
|
||||
{{ with $toast }}data-toast-target="{{ $toast }}"{{ end }}
|
||||
{{ with $clipboard }}data-clipboard="{{ $clipboard }}"{{ end }}
|
||||
{{ if eq $type "button" }}class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class }}"
|
||||
role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end }}
|
||||
{{ else }} class="link-{{ $color }} position-relative {{ $class }}"{{ end }}
|
||||
{{ with $tooltip }}data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end }}
|
||||
{{ with $collapse }}data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end }}
|
||||
{{ if eq $state "active" }}data-bs-toggle="button" aria-pressed="true"{{ end }}
|
||||
{{ if eq $state "inactive" }}data-bs-toggle="button" aria-pressed="false"{{ end }}
|
||||
>
|
||||
|
||||
<div class="d-flex justify-content-{{ $justify }}">
|
||||
|
@@ -87,6 +87,8 @@
|
||||
{{- $footer := .footer -}}
|
||||
{{- $orientation := .orientation -}}
|
||||
|
||||
{{- if and (eq $cols 1) (eq $orientation "horizontal") }}{{ $orientation = "horizontal-sm" }}{{ end -}}
|
||||
|
||||
<div class="container-fluid p-4 px-xxl-0">
|
||||
{{ $paginator := "" }}
|
||||
{{ if $paginate }}
|
||||
@@ -130,7 +132,7 @@
|
||||
|
||||
{{ if $paginate }}
|
||||
{{- if gt $paginator.TotalPages 1 -}}
|
||||
<div class="pt-3">{{ partial "assets/pagination.html" $page }}</div>
|
||||
<div class="pt-3">{{ partial "assets/pagination.html" (dict "page" $page "format" "terse") }}</div>
|
||||
{{- end -}}
|
||||
{{ else }}
|
||||
{{ if gt $count $max }}
|
||||
|
@@ -18,7 +18,8 @@
|
||||
"description" Optional description of the card.
|
||||
"thumbnail" Optional thumbnail image url, displayed on top or the left of the card.
|
||||
"icon" Optional Font Awesome icon, displayed on top or the left of the card.
|
||||
"orientation" Optional placecement of the thumbnail, either "stacked" (default), "horizontal", or "none".
|
||||
"orientation" Optional placecement of the thumbnail or icon, either "stacked" (default), "horizontal",
|
||||
"horizontal-sm" or "none".
|
||||
-->
|
||||
|
||||
<!-- Inline partial to render the card's body -->
|
||||
@@ -127,25 +128,25 @@
|
||||
|
||||
{{- $orientation := "stacked" -}}
|
||||
{{- with .orientation }}{{ $orientation = . }}{{ end -}}
|
||||
{{- $supportedOrientations := slice "stacked" "horizontal" "none" -}}
|
||||
{{- $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 -}}
|
||||
|
||||
{{- if eq $orientation "horizontal" -}}
|
||||
<div class="card mb-3 {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}">
|
||||
<div class="row g-0">
|
||||
<div class="col-4">
|
||||
{{- if hasPrefix $orientation "horizontal" -}}
|
||||
<div class="card {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}">
|
||||
<div class="row g-0 row-cols-1 h-100">
|
||||
<div class="col-4{{ if eq $orientation "horizontal-sm" }} col-md-2{{ end }}">
|
||||
{{- if $thumbnail -}}
|
||||
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "outerClass" "h-100 card-img-wrap" "innerClass" "rounded-start card-img-h100" "title" $title) -}}
|
||||
{{- else if $icon -}}
|
||||
<div class="pt-{{ $padding }} ps-{{ $padding }} pe-{{ $padding }}">
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x text-secondary" $icon)) -}}
|
||||
<div class="p-{{ $padding }} h-100 fa-wrapper d-flex align-items-center justify-content-center">
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-fluid text-secondary fa-fw" $icon)) -}}
|
||||
</div>
|
||||
{{- end -}}
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<div class="col-8{{ if eq $orientation "horizontal-sm" }} col-md-10{{ end }}">
|
||||
<div class="card-body d-flex p-{{ $padding }} flex-column h-100">
|
||||
{{ if $page }}<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $header "color" $color) }}</div>{{ end }}
|
||||
<div class="h-100">
|
||||
@@ -161,7 +162,7 @@
|
||||
{{- if $thumbnail -}}
|
||||
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "16x9" "outerClass" "card-img-wrap" "innerClass" "card-img-top" "title" $title) -}}
|
||||
{{- else if $icon -}}
|
||||
<div class="pt-{{ $padding }} ps-{{ $padding }} pe-{{ $padding }}">
|
||||
<div class="p-{{ $padding }}">
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x text-secondary" $icon)) -}}
|
||||
</div>
|
||||
{{- end -}}
|
||||
|
48
layouts/partials/assets/navbar-item.html
Normal file
48
layouts/partials/assets/navbar-item.html
Normal file
@@ -0,0 +1,48 @@
|
||||
{{- $menu := .menu -}}
|
||||
{{- $parent := .parent -}}
|
||||
{{- $page := .page -}}
|
||||
{{- $class := .class -}}
|
||||
{{- $anchorClass := "" -}}
|
||||
|
||||
{{- $menuURL := (or $menu.PageRef $menu.URL) | relLangURL -}}
|
||||
{{- $pageURL := $page.RelPermalink | relLangURL -}}
|
||||
{{- $isActive := hasPrefix $pageURL $menuURL -}}
|
||||
{{- $isAlias := $menu.Params.alias -}}
|
||||
{{- $isIcon := $menu.Params.icon -}}
|
||||
|
||||
{{- $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 -}}
|
||||
|
||||
{{- $mainNav := urlize (lower $menu.Name) -}}
|
||||
{{- $childNav := "" -}}
|
||||
|
||||
{{- $button := "" -}}
|
||||
{{- if $parent -}}
|
||||
{{- $mainNav = urlize (lower $parent.Name) -}}
|
||||
{{- $childNav = urlize (lower $menu.Name) -}}
|
||||
{{- $anchorClass = "dropdown-item" -}}
|
||||
{{- else if $menu.HasChildren -}}
|
||||
{{- $anchorClass = "nav-link dropdown-toggle" -}}
|
||||
{{- $button = " role=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\"" -}}
|
||||
{{- else -}}
|
||||
{{- $anchorClass = "nav-link" -}}
|
||||
{{- end -}}
|
||||
{{- $params := "" -}}
|
||||
{{- if and $isAlias (not $isExternal) -}}
|
||||
{{- $params = printf "?menu=%s" $mainNav -}}
|
||||
{{- with $childNav }}{{ $params = printf "%s&child=%s" $params . }}{{ end -}}
|
||||
{{- end -}}
|
||||
|
||||
<a class="{{ $anchorClass }}{{ if $isActive }} active{{ end }}{{ with $class }} {{. }}{{ end }}"
|
||||
{{ 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 -}}
|
||||
<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 -}}
|
||||
</a>
|
@@ -1,12 +1,13 @@
|
||||
<!--
|
||||
Displays a navigation header with a toggler. The partial supports the following arguments:
|
||||
"id" Optional id of the navbar toggler, defaults to "navbar-collapse-0".
|
||||
"page" Required object reference to the current page.
|
||||
"menus" Optional name of the menu configuration, defaults to "main".
|
||||
"size" Optional size of the button, either "sm", "md" (default), or "lg".
|
||||
"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", "light", "dark", "white", "black", "body", or "body-tertiary". The
|
||||
default color is none.
|
||||
"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
|
||||
@@ -16,7 +17,6 @@
|
||||
|
||||
<!-- Inline partial to render the color mode switcher -->
|
||||
{{- define "partials/navbar-mode.html" -}}
|
||||
{{- $id := .id -}}
|
||||
{{- $size := .size -}}
|
||||
{{- $collapsed := .collapsed -}}
|
||||
|
||||
@@ -48,10 +48,57 @@
|
||||
</li>
|
||||
{{- end -}}
|
||||
|
||||
<!-- Inline partial to render the version switcher -->
|
||||
{{- define "partials/navbar-versions.html" -}}
|
||||
{{- $size := .size -}}
|
||||
{{- $collapsed := .collapsed -}}
|
||||
{{- $page := .page -}}
|
||||
{{- $list := site.Params.docs.releases -}}
|
||||
{{- $version := partial "utilities/GetVersion.html" (dict "page" $page) -}}
|
||||
|
||||
<li class="nav-item dropdown {{ if $collapsed }}d-{{ $size }}-none{{ else }}d-none d-{{ $size }}-block{{ end }}">
|
||||
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false" id="navbar-version-switch">
|
||||
{{ if $collapsed }}{{ site.Title }} {{ end }}{{ $version }}
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-version-switch">
|
||||
{{- range $index, $item := $list -}}
|
||||
{{- $active := eq $item.label $version -}}
|
||||
{{- $disabled := false -}}
|
||||
{{- if site.IsServer }}
|
||||
{{- $disabled = and $item.redirect (gt (len $item.redirect) 0) -}}
|
||||
{{- end -}}
|
||||
{{ if $item.url }}
|
||||
<li>
|
||||
{{- $url := (path.Join $item.url) | relLangURL -}}
|
||||
<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>
|
||||
{{ end }}
|
||||
</a>
|
||||
</li>
|
||||
{{ else }}
|
||||
{{ if gt $index 0}}<li><hr class="dropdown-divider"></li>{{ end }}
|
||||
<li><span class="dropdown-header fs-6">{{ $item.label }}</span></li>
|
||||
{{ end }}
|
||||
{{- end -}}
|
||||
{{- if site.Params.docs.overview -}}
|
||||
{{ if gt (len $list) 0 }}<li><hr class="dropdown-divider"></li>{{ end }}
|
||||
<li>
|
||||
{{- $url := (path.Join site.Params.docs.overview) | relLangURL -}}
|
||||
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" href="{{ $url }}">{{ T "allVersions" }}</a>
|
||||
</li>
|
||||
{{- end -}}
|
||||
</ul>
|
||||
</li>
|
||||
{{- end -}}
|
||||
|
||||
{{- $supportedFlags := slice "true" "false" -}}
|
||||
|
||||
{{- $id := 0 -}}
|
||||
{{- with .id }}{{ $id = . }}{{ end -}}
|
||||
{{- $id := printf "navbar-collapse-%d" 0 -}}
|
||||
{{ with .id }}
|
||||
{{ $id = . }}
|
||||
{{ end }}
|
||||
|
||||
{{- $page := .page -}}
|
||||
{{- if not $page -}}
|
||||
@@ -84,7 +131,7 @@
|
||||
{{- $color := "" -}}
|
||||
{{- with .color -}}
|
||||
{{- $color = . -}}
|
||||
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
|
||||
{{- $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 -}}
|
||||
@@ -110,6 +157,12 @@
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $enableVersions := false -}}
|
||||
{{ $list := site.Params.docs.releases }}
|
||||
{{ if $list }}
|
||||
{{- $enableVersions = gt (len $list ) 1 -}}
|
||||
{{ end }}
|
||||
|
||||
{{- $enableLanguage := or $page.IsTranslated site.IsMultiLingual -}}
|
||||
|
||||
{{- $logo := site.Params.navigation.logo -}}
|
||||
@@ -124,7 +177,11 @@
|
||||
{{- $pre := .Pre -}}
|
||||
{{- $post := .Post -}}
|
||||
|
||||
<nav class="navbar navbar-expand-{{ $size }} {{ with $color }}bg-{{ . }}{{ end }} {{ if $fixed }}fixed-top{{ end }} p-4">
|
||||
{{- $theme := "" -}}
|
||||
{{- if eq $color "black" }}{{ $theme = "dark" }}{{ end -}}
|
||||
{{- if eq $color "white" }}{{ $theme = "light" }}{{ end -}}
|
||||
|
||||
<nav class="navbar navbar-expand-{{ $size }} {{ with $color }}bg-{{ . }}{{ end }} {{ if $fixed }}fixed-top{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
|
||||
<div class="container-xxl p-0">
|
||||
<!-- Insert sidebar toggler when applicable -->
|
||||
<div class="d-flex">
|
||||
@@ -151,55 +208,35 @@
|
||||
|
||||
<!-- Insert main navigation toggler -->
|
||||
<div class="d-flex fw-30">
|
||||
<button id="main-nav-toggler" class="navbar-toggler collapsed p-0" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent-{{ $id }}"
|
||||
aria-controls="navbarSupportedContent-{{ $id }}" aria-expanded="false" aria-label="{{ T "toggleMainNav" }}">
|
||||
<button id="main-nav-toggler" class="navbar-toggler collapsed p-0" type="button" data-bs-toggle="collapse" data-bs-target="#{{ $id }}"
|
||||
aria-controls="{{ $id }}" aria-expanded="false" aria-label="{{ T "toggleMainNav" }}">
|
||||
<span class="toggler-icon top-bar emphasis"></span>
|
||||
<span class="toggler-icon middle-bar emphasis"></span>
|
||||
<span class="toggler-icon bottom-bar emphasis"></span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="navbar-collapse collapse" id="navbarSupportedContent-{{ $id }}">
|
||||
<div class="navbar-collapse collapse" id="{{ $id }}">
|
||||
<!-- Insert search input -->
|
||||
{{- if $search }}{{ partial "assets/search-input.html" -}}{{ end -}}
|
||||
|
||||
<!-- Render top-menu items (maximum depth of 2) -->
|
||||
<ul class="navbar-nav ms-auto">
|
||||
{{- range $menu := $menus -}}
|
||||
{{- $menu_item_url := $menu.URL | relLangURL -}}
|
||||
{{- $page_url:= $page.RelPermalink | relLangURL -}}
|
||||
{{- $active := hasPrefix $page_url $menu_item_url -}}
|
||||
|
||||
{{- $url := urls.Parse .URL -}}
|
||||
{{- $baseurl := urls.Parse $.Site.Params.Baseurl -}}
|
||||
<li class="nav-item{{ if .HasChildren }} dropdown{{ end }}">
|
||||
{{- partial "assets/navbar-item.html" (dict "menu" $menu "page" $page) -}}
|
||||
{{- if .HasChildren -}}
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link {{ if $active }}active{{ end }} dropdown-toggle" href="{{ .URL | relLangURL }}" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
{{ if $active }}<span class="active">{{ .Name }}</span>{{ else }}{{ .Name }}{{ end }}
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
{{- range .Children -}}
|
||||
{{- $child_active := eq $page_url (.URL | relLangURL) -}}
|
||||
<li><a class="dropdown-item {{ if $child_active }}active{{ end }}" href="{{ .URL | relLangURL }}">{{ .Name }}</a></li>
|
||||
{{- partial "assets/navbar-item.html" (dict "menu" . "parent" $menu "page" $page) -}}
|
||||
{{- end -}}
|
||||
</ul>
|
||||
</li>
|
||||
{{- else -}}
|
||||
<li class="nav-item">
|
||||
{{- $external := ne $url.Host $baseurl.Host -}}
|
||||
<a class="nav-link {{ if $active }}active{{ end }}"
|
||||
href="{{ with .Page }}{{ .RelPermalink }}{{ else }}{{ .URL | relLangURL }}{{ end }}" {{ if $external }}target="_blank" rel="noopener noreferrer" {{ end }}>
|
||||
{{- with $pre}}{{ . }}{{ end -}}
|
||||
<span {{if $active }} class="active"{{end}}>{{ .Name }}</span>
|
||||
{{- with $post}}{{ . }}{{ end -}}
|
||||
{{- if $external }} {{ partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}{{ end -}}
|
||||
</a>
|
||||
{{- end -}}
|
||||
</li>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{- if or $enableLanguage $enableDarkMode -}}
|
||||
<!-- Insert divider if applicable -->
|
||||
{{- if 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>
|
||||
@@ -230,10 +267,22 @@
|
||||
</li>
|
||||
{{- end -}}
|
||||
|
||||
<!-- Insert version switcher -->
|
||||
{{- if $enableVersions -}}
|
||||
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" true ) -}}
|
||||
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" false) -}}
|
||||
{{- end -}}
|
||||
|
||||
<!-- Insert color mode switcher -->
|
||||
{{- if $enableDarkMode -}}
|
||||
{{- partial "partials/navbar-mode.html" (dict "id" $id "size" $size "collapsed" true) -}}
|
||||
{{- partial "partials/navbar-mode.html" (dict "id" $id "size" $size "collapsed" false) -}}
|
||||
<!-- Insert divider -->
|
||||
<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>
|
||||
<li><hr class="dropdown-divider-bg"></li>
|
||||
|
||||
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" true) -}}
|
||||
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" false) -}}
|
||||
{{- end -}}
|
||||
</ul>
|
||||
</div>
|
||||
|
@@ -22,9 +22,11 @@
|
||||
|
||||
{{- if in $validFormats $format }}
|
||||
{{- if gt $page.Paginator.TotalPages 1 }}
|
||||
<nav aria-label="{{ T "paginationNav" }}">
|
||||
<ul class="pagination pagination-{{ $format }} justify-content-center">
|
||||
{{- partial (printf "partials/inline/pagination/%s" $format) $page }}
|
||||
</ul>
|
||||
</nav>
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
{{- errorf $msg2 (delimit $validFormats ", ") }}
|
||||
@@ -50,11 +52,11 @@
|
||||
|
||||
{{- with .Prev }}
|
||||
<li class="page-item">
|
||||
<a href="{{ .URL }}" aria-label="{{ T "paginationPrevious" }}" class="page-link" role="button"><span aria-hidden="true">{{ T "paginationPrevious" }}</span></a>
|
||||
<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>
|
||||
</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">{{ T "paginationPrevious" }}</span></a>
|
||||
<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>
|
||||
</li>
|
||||
{{- end }}
|
||||
|
||||
@@ -79,11 +81,11 @@
|
||||
|
||||
{{- with .Next }}
|
||||
<li class="page-item">
|
||||
<a href="{{ .URL }}" aria-label="{{ T "paginationNext" }}" class="page-link" role="button"><span aria-hidden="true">{{ T "paginationNext" }}</span></a>
|
||||
<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>
|
||||
</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">{{ T "paginationNext" }}</span></a>
|
||||
<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>
|
||||
</li>
|
||||
{{- end }}
|
||||
|
||||
@@ -110,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">{{ T "paginationFirst" }}</span></a>
|
||||
<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>
|
||||
</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">{{ T "paginationPrevious" }}</span></a>
|
||||
<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>
|
||||
</li>
|
||||
{{- end }}
|
||||
|
||||
@@ -142,7 +144,7 @@
|
||||
|
||||
{{- with .Next }}
|
||||
<li class="page-item">
|
||||
<a href="{{ .URL }}" aria-label="{{ T "paginationNext" }}" class="page-link" role="button"><span aria-hidden="true">{{ T "paginationNext" }}</span></a>
|
||||
<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>
|
||||
</li>
|
||||
{{- end }}
|
||||
|
||||
|
28
layouts/partials/assets/sharing.html
Normal file
28
layouts/partials/assets/sharing.html
Normal file
@@ -0,0 +1,28 @@
|
||||
{{- if .Site.Params.sharing.enabled -}}
|
||||
{{- if or .Params.sharing (not (isset .Params "sharing")) -}}
|
||||
{{- $page := . -}}
|
||||
{{- $order := "asc" -}}
|
||||
{{- $list := .Site.Params.sharing.providers -}}
|
||||
{{- if .Site.Params.sharing.reverse }}{{ $order = "desc" }}{{ else }}{{ $order = "asc" }}{{ end -}}
|
||||
{{- $sort := .Site.Params.sharing.sort | default "weight" -}}
|
||||
{{- $list = sort $list $sort $order -}}
|
||||
<div class="py-3 text-body-secondary hstack gap-2">
|
||||
{{ T "shareLink" }}
|
||||
{{- range $index, $item := $list -}}
|
||||
{{- $url := $item.url -}}
|
||||
{{- $url = replace $url "{url}" $page.Permalink -}}
|
||||
{{- $url = replace $url "{title}" (urlquery $page.Title) -}}
|
||||
{{- $url = $url | safeURL -}}
|
||||
{{- $target := "" -}}
|
||||
{{- $clipboard := "" -}}
|
||||
{{- if .clipboard -}}
|
||||
{{- $target = (printf "toast-message-%s-%d" (anchorize $item.name) $index ) -}}
|
||||
{{- $clipboard = $url -}}
|
||||
{{- $url = "#!" -}}
|
||||
{{- partial "assets/toast.html" (dict "id" $target "message" (printf "%s %s" (T "link") (T "copiedToClipboard"))) -}}
|
||||
{{- end -}}
|
||||
{{ partial "assets/button.html" (dict "toast" $target "clipboard" $clipboard "href" $url "icon" (printf "%s fa-fw" $item.icon) "class" "btn-social p-0" )}}
|
||||
{{- end -}}
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
28
layouts/partials/assets/toast.html
Normal file
28
layouts/partials/assets/toast.html
Normal file
@@ -0,0 +1,28 @@
|
||||
<!--
|
||||
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-0".
|
||||
"header": Optional header of the toast message.
|
||||
"message": Required toast message.
|
||||
-->
|
||||
|
||||
{{- $id := printf "toast-message-%d" 0 -}}
|
||||
{{ with .id }}
|
||||
{{ $id = . }}
|
||||
{{ end }}
|
||||
|
||||
{{ $header := .header -}}
|
||||
{{ if not $header -}}
|
||||
{{ $header = site.Title -}}
|
||||
{{ end -}}
|
||||
{{- $message := .message -}}
|
||||
{{ if not $message -}}
|
||||
{{- errorf "partial [assets/toast.html] - Missing message text" -}}
|
||||
{{ end -}}
|
||||
|
||||
<div id="{{ $id }}" class="toast" 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>
|
||||
</div>
|
||||
<div class="toast-body">{{ $message }}</div>
|
||||
</div>
|
31
layouts/partials/footer/toast-container.html
Normal file
31
layouts/partials/footer/toast-container.html
Normal file
@@ -0,0 +1,31 @@
|
||||
<!--
|
||||
Defines a container to stack toast messages. By default, toast messages are displayed in the bottom right of the
|
||||
viewport. Multiple toast messages are stacked vertically. Adjust the configuration by adjusting 'messages' in the
|
||||
site parameters. The following arguments are supported:
|
||||
"placement" Optional position of the toast messages relative to the viewport: "top-left", "top-center",
|
||||
"top-right", "middle-left", "middle-center", "middle-right", "bottom-left", "bottom-center", or
|
||||
"bottom-right" (default).
|
||||
-->
|
||||
|
||||
{{- $placement := "bottom-right" -}}
|
||||
{{- $position := "bottom-0 end-0" -}}
|
||||
{{- with site.Params.messages.placement }}{{ $placement = . }}{{ end -}}
|
||||
{{- $supportedPlacements := slice "top-left" "top-center" "top-right" "middle-left" "middle-center" "middle-right" "bottom-left" "bottom-center" "bottom-right" -}}
|
||||
{{- if not (in $supportedPlacements $placement) -}}
|
||||
{{- errorf "partial [footer/toast-container.html] - Invalid value for param 'placement': %s" $placement -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if eq $placement "top-left" }}{{ $position = "top-0 start-0" -}}
|
||||
{{- else if eq $placement "top-center" }}{{ $position = "top-0 start-50 translate-middle-x" -}}
|
||||
{{- else if eq $placement "top-right" }}{{ $position = "top-0 end-0" -}}
|
||||
{{- else if eq $placement "middle-left" }}{{ $position = "top-50 start-0 translate-middle-y" -}}
|
||||
{{- else if eq $placement "middle-center" }}{{ $position = "top-50 start-50 translate-middle" -}}
|
||||
{{- else if eq $placement "middle-right" }}{{ $position = "top-50 end-0 translate-middle-y" -}}
|
||||
{{- else if eq $placement "bottom-left" }}{{ $position = "bottom-0 start-0" -}}
|
||||
{{- else if eq $placement "bottom-center" }}{{ $position = "bottom-0 start-50 translate-middle-x" -}}
|
||||
{{- else if eq $placement "bottom-right" }}{{ $position = "bottom-0 end-0" -}}
|
||||
{{- end -}}
|
||||
|
||||
<div id="toast-container" class="toast-container position-fixed {{ $position }} p-3">
|
||||
{{- partial "assets/toast.html" (dict "id" "toast-copied-code-message" "message" (printf "%s %s" (T "code") (T "copiedToClipboard"))) -}}
|
||||
</div>
|
@@ -1,6 +1,12 @@
|
||||
{{- $page := .page -}}
|
||||
{{- $version := .version -}}
|
||||
|
||||
{{- $menu := "" -}}
|
||||
{{- if .IsPage -}}
|
||||
{{- $menu = index .Site.Data .Section -}}
|
||||
{{- if $page.IsPage -}}
|
||||
{{- $menu = index site.Data (printf "%s-%s" $page.Section $version) -}}
|
||||
{{ if not $menu }}
|
||||
{{ $menu = index site.Data $page.Section }}
|
||||
{{ end }}
|
||||
{{- end -}}
|
||||
|
||||
{{- return $menu -}}
|
34
layouts/partials/utilities/GetVersion.html
Normal file
34
layouts/partials/utilities/GetVersion.html
Normal file
@@ -0,0 +1,34 @@
|
||||
<!--
|
||||
Retrieve the docs version label of the current page. The path of the page's file is matched with the url of the
|
||||
defined docs releases in the site's parameters. When no match is found it returns the latest label instead.
|
||||
-->
|
||||
|
||||
{{- $page := .page -}}
|
||||
{{- $base := .base -}}
|
||||
{{- $version := "" -}}
|
||||
|
||||
{{- $docsPath := strings.TrimPrefix "/" site.Params.docs.contentPath -}}
|
||||
{{- if and $page.File (strings.HasPrefix $page.File.Dir $docsPath) -}}
|
||||
{{- $currentPath := strings.TrimPrefix $docsPath $page.File.Dir -}}
|
||||
{{- $currentVersion := index (split $currentPath "/") 0 -}}
|
||||
{{- $versionPath := path.Join site.Params.docs.contentPath $currentVersion -}}
|
||||
|
||||
{{- $list := site.Params.docs.releases -}}
|
||||
{{- range $index, $item := $list -}}
|
||||
{{- $url := strings.TrimSuffix "/" $item.url -}}
|
||||
{{- if eq $url $versionPath -}}
|
||||
{{- if $base }}{{ $version = path.Base $item.url }}{{ else }}{{ $version = $item.label }}{{ end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if not $version -}}
|
||||
{{- $list := site.Params.docs.releases -}}
|
||||
{{- range $item := $list -}}
|
||||
{{- if $item.latest -}}
|
||||
{{- if $base }}{{ $version = path.Base $item.url }}{{ else }}{{ $version = $item.label }}{{ end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- return $version -}}
|
@@ -5,6 +5,12 @@
|
||||
"show" Optional flag to indicate an item should be shown as collapsed.
|
||||
-->
|
||||
|
||||
{{- $id := .Ordinal -}}
|
||||
{{- $parent := printf "accordion-%d" .Parent.Ordinal -}}
|
||||
{{- with (.Parent.Get "id") -}}
|
||||
{{- $parent = . -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $id := .Ordinal -}}
|
||||
{{ $header := .Get "header" -}}
|
||||
{{ if not $header -}}
|
||||
@@ -35,8 +41,6 @@
|
||||
{{ errorf "Invalid value for param 'show': %s" $showParam -}}
|
||||
{{ end -}}
|
||||
|
||||
{{- $parent := printf "accordion-%d" .Parent.Ordinal -}}
|
||||
|
||||
<div class="accordion-item">
|
||||
{{- with $header -}}
|
||||
<h2 class="accordion-header m-0" id="{{ $parent }}-heading-{{ $id }}">
|
||||
|
@@ -1,12 +1,34 @@
|
||||
<!--
|
||||
Displays a group of vertically collapsing and expanding items. Add accordion-item inner elements for each accordion
|
||||
item. The shortcode supports the following arguments:
|
||||
"id": Optional id of the accordion, defaults to "accordion-" with a sequential number.
|
||||
"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 := .Ordinal -}}
|
||||
{{- $id := printf "accordion-%d" .Ordinal -}}
|
||||
{{ with .Get "id" }}
|
||||
{{ $id = . }}
|
||||
{{ end }}
|
||||
{{- $class := .Get "class" -}}
|
||||
|
||||
<div id="accordion-{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }}">
|
||||
{{- .Inner -}}
|
||||
{{- $openParam := "false" -}}
|
||||
{{- $open := false -}}
|
||||
{{- with .Get "always-open" }}{{ $openParam = . }}{{ end -}}
|
||||
{{- $supportedFlags := slice "true" "false" -}}
|
||||
{{- if in $supportedFlags $openParam -}}
|
||||
{{- if eq $openParam "true" }}{{ $open = true }}{{ end -}}
|
||||
{{- else -}}
|
||||
{{- errorf "Invalid value for param 'always-open': %s" .Position -}}
|
||||
{{- $error = true -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $body := .Inner -}}
|
||||
{{- if $open -}}
|
||||
{{- $pattern := printf "data-bs-parent=\"#%s\"" $id -}}
|
||||
{{- $body = (replace .Inner $pattern "") | markdownify | safeHTML }}
|
||||
{{- end -}}
|
||||
|
||||
<div id="{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }}">
|
||||
{{- $body -}}
|
||||
</div>
|
@@ -6,15 +6,19 @@
|
||||
"icon" Optional class and name of a Font Awesome icon to include.
|
||||
-->
|
||||
|
||||
{{- $error := false -}}
|
||||
{{ $color := "primary" -}}
|
||||
{{ with .Get "color" }}{{ $color = . }}{{ end -}}
|
||||
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" -}}
|
||||
{{ if not (in $supportedColors $color) -}}
|
||||
{{ errorf "Invalid value for param 'color': %s" .Position -}}
|
||||
{{ $color = "primary" -}}
|
||||
{{ $error = true -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ $icon := .Get "icon" }}
|
||||
{{ $icon := "" }}
|
||||
{{ with .Get "icon" }}
|
||||
{{ $icon = partial "assets/icon.html" (dict "icon" (printf "%s fa-2x fa-pull-left" .)) }}
|
||||
{{ end }}
|
||||
|
||||
{{ $dismissibleParam := "false" -}}
|
||||
{{ $dismissible := false -}}
|
||||
@@ -24,10 +28,13 @@
|
||||
{{ if eq $dismissibleParam "true" }}{{ $dismissible = true }}{{ end -}}
|
||||
{{ else -}}
|
||||
{{ errorf "Invalid value for param 'dismissible': %s" .Position -}}
|
||||
{{ $error = true -}}
|
||||
{{ end -}}
|
||||
|
||||
<div class="alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}" role="alert">
|
||||
{{ with $icon }}<i class="{{ . }} fa-2x fa-pull-left"></i>{{ end }}
|
||||
{{- 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>
|
||||
</div>
|
||||
{{- end -}}
|
@@ -14,6 +14,7 @@
|
||||
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".
|
||||
"toast" Optional id of the toast to display when the button is clicked.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
@@ -77,6 +78,8 @@
|
||||
{{ $error = true }}
|
||||
{{ end -}}
|
||||
|
||||
{{- $toast := .Get "toast" -}}
|
||||
|
||||
{{ if not $error }}
|
||||
{{- partial "assets/button.html" (dict
|
||||
"type" $type
|
||||
@@ -91,6 +94,7 @@
|
||||
"href" $href
|
||||
"id" $id
|
||||
"state" $state
|
||||
"placement" $placement)
|
||||
"placement" $placement
|
||||
"toast" $toast)
|
||||
-}}
|
||||
{{ end }}
|
||||
|
@@ -1,18 +1,23 @@
|
||||
<!--
|
||||
Displays a carousel of several responsive images (see the image shortcode for more details). Add inner <img>
|
||||
elements to define individual image slides. The shortcode supports the following arguments:
|
||||
"id": Optional id of the carousel, defaults to "carousel-" with a sequential number.
|
||||
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". Other values are ignored.
|
||||
Instead, the original aspect ratio of the image is preserved.
|
||||
"class": Optional class attribute of the carousel element, e.g. “w-75”.
|
||||
-->
|
||||
|
||||
{{- $id := printf "carousel-%d" .Ordinal -}}
|
||||
{{ with .Get "id" }}
|
||||
{{ $id = . }}
|
||||
{{ end }}
|
||||
|
||||
{{ $ratio := .Get "ratio" -}}
|
||||
{{ $class := .Get "class" -}}
|
||||
{{ $id := .Ordinal -}}
|
||||
{{ $images := .Inner -}}
|
||||
{{ $items := len (findRE "carousel-item" $images) -}}
|
||||
|
||||
<div id="carousel-{{ $id }}" class="carousel slide mb-3{{ with $class }} {{ . }}{{ end }}" data-bs-ride="true">
|
||||
<div id="{{ $id }}" class="carousel slide mb-3{{ with $class }} {{ . }}{{ end }}" data-bs-ride="true">
|
||||
<div class="carousel-indicators">
|
||||
{{ range $index := (seq $items) -}}
|
||||
<button type="button" data-bs-target="#carousel-{{ $id }}" data-bs-slide-to="{{ sub $index 1 }}" {{ if eq $index 1 }}class="active"{{ end }} aria-current="true" aria-label="Slide {{ $index }}"></button>
|
||||
@@ -21,11 +26,11 @@
|
||||
<div class="carousel-inner">
|
||||
{{ $images }}
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carousel-{{ $id }}" data-bs-slide="prev">
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#{{ $id }}" data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Previous</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carousel-{{ $id }}" data-bs-slide="next">
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#{{ $id }}" data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Next</span>
|
||||
</button>
|
||||
|
@@ -2,13 +2,15 @@
|
||||
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.
|
||||
The shortcode supports the following arguments:
|
||||
"id" Optional id of the navbar toggler, defaults to "navbar-collapse-n" with a sequential number n
|
||||
starting at 1.
|
||||
"path" Required path of the active 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".
|
||||
"style" Optional style of the navbar, either "light" (default) or "dark".
|
||||
"color" Optional background color of the navbar, either "primary", "secondary", "success",
|
||||
"danger", "warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". The
|
||||
default color is none.
|
||||
"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.
|
||||
@@ -16,10 +18,13 @@
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body" "body-tertiary" -}}
|
||||
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "white" "black" "body" "body" "body-tertiary" -}}
|
||||
{{ $supportedFlags := slice "true" "false" -}}
|
||||
|
||||
{{ $id := add .Ordinal 1 }}
|
||||
{{- $id := printf "navbar-collapse-%d" (add .Ordinal 1) -}}
|
||||
{{ with .Get "id" }}
|
||||
{{ $id = . }}
|
||||
{{ end }}
|
||||
|
||||
{{ $path := .Get "path" }}
|
||||
{{ $page := .Site.GetPage $path }}
|
||||
|
68
layouts/shortcodes/release.html
Normal file
68
layouts/shortcodes/release.html
Normal file
@@ -0,0 +1,68 @@
|
||||
<!--
|
||||
Displays a release button that links to a specific release. Use the optional state to indicate if it is a new or
|
||||
deprecated feature.
|
||||
"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.
|
||||
-->
|
||||
|
||||
{{- $error := false -}}
|
||||
{{- $version := .Get "version" -}}
|
||||
{{- $inline := false -}}
|
||||
|
||||
{{- $state := "new" -}}
|
||||
{{- with .Get "state" }}{{ $state = . }}{{ end -}}
|
||||
{{- $supportedStates := slice "new" "deprecated" -}}
|
||||
{{- if not (in $supportedStates $state) -}}
|
||||
{{- errorf "Invalid value for param 'state': %s" .Position -}}
|
||||
{{- $error = true -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $shortParam := "false" -}}
|
||||
{{- $short := false -}}
|
||||
{{- with .Get "short" }}{{ $shortParam = . }}{{ end -}}
|
||||
{{- $supportedFlags := slice "true" "false" -}}
|
||||
{{- if in $supportedFlags $shortParam -}}
|
||||
{{- if eq $shortParam "true" }}{{ $short = true }}{{ end -}}
|
||||
{{- else -}}
|
||||
{{- errorf "Invalid value for param 'short': %s" .Position -}}
|
||||
{{- $error = true -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $inlineParam := "false" -}}
|
||||
{{- $inline := false -}}
|
||||
{{- with .Get "inline" }}{{ $inlineParam = . }}{{ end -}}
|
||||
{{- $supportedFlags := slice "true" "false" -}}
|
||||
{{- if in $supportedFlags $inlineParam -}}
|
||||
{{- if eq $inlineParam "true" }}{{ $inline = true }}{{ end -}}
|
||||
{{- else -}}
|
||||
{{- errorf "Invalid value for param 'inline': %s" .Position -}}
|
||||
{{- $error = true -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $title := $version -}}
|
||||
{{- $color := "success" -}}
|
||||
{{- if eq $state "deprecated" -}}
|
||||
{{- $color = "secondary" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if not $short -}}
|
||||
{{- if eq $state "deprecated" -}}
|
||||
{{- $title = (printf "Deprecated in %s" $version) -}}
|
||||
{{- else -}}
|
||||
{{- $title = (printf "Added in %s" $version) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if not $error -}}
|
||||
<div class="pb-3">
|
||||
{{- partial "assets/button.html" (dict
|
||||
"title" $title
|
||||
"href" (printf "%s/%s" (strings.TrimSuffix "/" site.Params.docs.release) $version)
|
||||
"size" "sm"
|
||||
"color" $color
|
||||
"outline" "true"
|
||||
"class" "rounded-2 fw-semibold")
|
||||
-}}
|
||||
</div>
|
||||
{{- end -}}
|
@@ -1,24 +1,17 @@
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
{{- $error := false -}}
|
||||
{{- $id := printf "toast-message-%d" .Ordinal -}}
|
||||
{{- with .Get "id" }}{{ $id = . }}{{ end -}}
|
||||
{{ $header := .Get "header" -}}
|
||||
{{ if not $header -}}
|
||||
{{ $header = site.Title -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ $message := trim .Inner " \r\n" -}}
|
||||
|
||||
{{ 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) }}
|
||||
{{ end -}}
|
||||
|
||||
<div class="toast-container position-fixed bottom-0 end-0 p-3">
|
||||
<div id="toastMessage" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
<div class="toast-header">
|
||||
<strong class="me-auto">{{ $header }}</strong>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="toast-body">{{ $message }}</div>
|
||||
</div>
|
||||
</div>
|
@@ -1,7 +1,7 @@
|
||||
<!--
|
||||
Displays a tooltip for a link. The shortcode supports the following arguments:
|
||||
"color": Optional theme color of the element, either "primary" (default), "secondary", "success",
|
||||
"danger", "warning", "info", "light", "dark", "white", or "black".
|
||||
"danger", "warning", "info", "light", or "dark".
|
||||
"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".
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
{{ $color := "primary" -}}
|
||||
{{ with .Get "color" }}{{ $color = . }}{{ end -}}
|
||||
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" -}}
|
||||
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" -}}
|
||||
{{ if not (in $supportedColors $color) -}}
|
||||
{{ errorf "Invalid value for param 'color': %s" .Position -}}
|
||||
{{ $error = true }}
|
||||
|
3039
package-lock.json
generated
3039
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.13.2",
|
||||
"version": "0.15.0-beta2",
|
||||
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
|
||||
"keywords": [
|
||||
"hugo",
|
||||
@@ -34,7 +34,6 @@
|
||||
"env": "hugo env",
|
||||
"precheck": "npm version",
|
||||
"check": "hugo version",
|
||||
"copy:fonts": "shx cp ./node_modules/@fortawesome/fontawesome-free/webfonts/* ./static/fonts/",
|
||||
"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",
|
||||
"create:syntax": "npm run -s create:syntax-light & npm run -s create:syntax-dark",
|
||||
@@ -60,11 +59,11 @@
|
||||
"eslint": "^8.39.0",
|
||||
"eslint-config-standard": "^17.0.0",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"eslint-plugin-n": "^15.7.0",
|
||||
"eslint-plugin-n": "^16.0.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"flexsearch": "^0.7.31",
|
||||
"hugo-bin": "^0.102.0",
|
||||
"markdownlint-cli2": "^0.7.0",
|
||||
"hugo-bin": "^0.108.0",
|
||||
"markdownlint-cli2": "^0.8.1",
|
||||
"postcss-cli": "^10.1.0",
|
||||
"purgecss-whitelister": "^2.4.0",
|
||||
"rimraf": "^5.0.0",
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
3
static/js/alias.js
Normal file
3
static/js/alias.js
Normal file
@@ -0,0 +1,3 @@
|
||||
const alias = document.querySelector("link[rel='canonical']").getAttribute('href')
|
||||
const params = window.location.search + window.location.hash
|
||||
window.location = alias + params
|
Reference in New Issue
Block a user