mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-07 18:14:28 +00:00
Compare commits
62 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
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 |
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
|
||||
|
@@ -1,37 +1,24 @@
|
||||
// Script to move all embedded toast messages into a 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.
|
||||
// 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.
|
||||
|
||||
// create a HTML fragment
|
||||
function createFragment (htmlStr) {
|
||||
const fragment = document.createDocumentFragment()
|
||||
const temp = document.createElement('div')
|
||||
temp.innerHTML = htmlStr
|
||||
while (temp.firstChild) {
|
||||
fragment.appendChild(temp.firstChild)
|
||||
}
|
||||
return fragment
|
||||
}
|
||||
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)
|
||||
|
||||
// insert a toast container in the DOM
|
||||
const container = '<div id="toast-container" class="toast-container position-fixed bottom-0 end-0 p-3"></div>'
|
||||
document.body.appendChild(createFragment(container))
|
||||
const parent = document.getElementById('toast-container')
|
||||
|
||||
// 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
|
||||
parent.appendChild(target)
|
||||
|
||||
// eslint-disable-next-line no-undef
|
||||
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()
|
||||
})
|
||||
// eslint-disable-next-line no-undef
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
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;
|
||||
}
|
@@ -79,6 +79,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 +92,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"
|
||||
|
@@ -36,6 +36,11 @@
|
||||
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
|
||||
@@ -92,6 +97,7 @@
|
||||
separator = true
|
||||
[sections.projects]
|
||||
title = "Projects"
|
||||
layout = "card"
|
||||
sort = "title"
|
||||
reverse = false
|
||||
nested = true
|
||||
@@ -101,7 +107,7 @@
|
||||
padding = "3"
|
||||
header = "none"
|
||||
footer = "tags"
|
||||
orientation = "none"
|
||||
orientation = "horizontal"
|
||||
style = "border-1 card-emphasize"
|
||||
homepage = 3
|
||||
separator = false
|
||||
|
@@ -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.
|
||||
|
16
i18n/en.yaml
16
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
|
||||
@@ -82,7 +84,11 @@
|
||||
- id: shareLink
|
||||
translation: "Share via"
|
||||
- id: copiedToClipboard
|
||||
translation: "Copied to clipboard"
|
||||
translation: "copied to clipboard"
|
||||
- id: link
|
||||
translation: "Link"
|
||||
- id: code
|
||||
translation: "Code"
|
||||
|
||||
# 404 page
|
||||
- id: pageNotFound
|
||||
|
@@ -45,6 +45,8 @@
|
||||
translation: "Artikel"
|
||||
- id: articles
|
||||
translation: "Artikelen"
|
||||
- id: paginationNav
|
||||
translation: "Pagina navigatie"
|
||||
- id: paginationPrevious
|
||||
translation: "Vorige"
|
||||
- id: paginationNext
|
||||
@@ -72,7 +74,11 @@
|
||||
- id: shareLink
|
||||
translation: "Delen via"
|
||||
- id: copiedToClipboard
|
||||
translation: "Gekopieerd naar clipboard"
|
||||
translation: "gekopieerd naar clipboard"
|
||||
- id: link
|
||||
translation: "Link"
|
||||
- id: code
|
||||
translation: "Code"
|
||||
|
||||
# 404 page
|
||||
- id: pageNotFound
|
||||
|
@@ -68,6 +68,7 @@
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{- partial "footer/toast-container.html" . -}}
|
||||
{{- partialCached "footer/scripts.html" (dict "header" false "page" .) }}
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -18,17 +18,21 @@
|
||||
{{- if gt (len (.GetTerms "tags")) 0 -}}
|
||||
<div class="mt-3">
|
||||
<div class="d-none-dark">
|
||||
{{ range (.GetTerms "tags") -}}
|
||||
<a class="btn btn-light btn-sm" href="{{ (path.Join .Page.RelPermalink) | relLangURL }}" role="button">{{ .LinkTitle }}</a>
|
||||
|
||||
{{ end -}}
|
||||
<div class="hstack gap-3">
|
||||
{{ range (.GetTerms "tags") -}}
|
||||
{{- $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">
|
||||
{{ range (.GetTerms "tags") -}}
|
||||
<a class="btn btn-outline-secondary btn-sm" href="{{ (path.Join .Page.RelPermalink) | relLangURL }}" role="button">{{ .LinkTitle }}</a>
|
||||
|
||||
{{ end -}}
|
||||
<div class="hstack gap-3">
|
||||
{{ range (.GetTerms "tags") -}}
|
||||
{{- $url := (path.Join .Page.RelPermalink) | relLangURL -}}
|
||||
{{ partial "assets/button.html" (dict "href" $url "title" .LinkTitle "color" "secondary" "size" "sm" "outline" "true") }}
|
||||
{{ end -}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{- end -}}
|
||||
|
@@ -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 row-cols-1">
|
||||
<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 -}}
|
||||
|
@@ -8,6 +8,7 @@
|
||||
{{- $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 -}}
|
||||
@@ -36,11 +37,12 @@
|
||||
{{- 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 }}>{{ $menu.Name }}</span>
|
||||
<span {{ if $isActive }} class="active"{{ end }}>{{ if not $isIcon }}{{ $menu.Name }}{{ end }}</span>
|
||||
{{- with $menu.Post }}{{ . }}{{ end -}}
|
||||
{{- if $isExternal }} {{ partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}{{ end -}}
|
||||
{{- if and $isExternal (not $isIcon)}} {{ partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}{{ end -}}
|
||||
</a>
|
||||
|
@@ -22,9 +22,11 @@
|
||||
|
||||
{{- if in $validFormats $format }}
|
||||
{{- if gt $page.Paginator.TotalPages 1 }}
|
||||
<ul class="pagination pagination-{{ $format }} justify-content-center">
|
||||
{{- partial (printf "partials/inline/pagination/%s" $format) $page }}
|
||||
</ul>
|
||||
<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 }}
|
||||
|
||||
|
@@ -6,7 +6,7 @@
|
||||
{{- 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">
|
||||
<div class="py-3 text-body-secondary hstack gap-2">
|
||||
{{ T "shareLink" }}
|
||||
{{- range $index, $item := $list -}}
|
||||
{{- $url := $item.url -}}
|
||||
@@ -19,9 +19,9 @@
|
||||
{{- $target = (printf "toast-message-%s-%d" (anchorize $item.name) $index ) -}}
|
||||
{{- $clipboard = $url -}}
|
||||
{{- $url = "#!" -}}
|
||||
{{- partial "assets/toast.html" (dict "id" $target "message" (T "copiedToClipboard")) -}}
|
||||
{{- 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" $item.icon "class" "btn-social px-1" )}}
|
||||
{{ 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 -}}
|
||||
|
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>
|
@@ -4,6 +4,7 @@
|
||||
"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" -}}
|
||||
@@ -11,6 +12,6 @@
|
||||
|
||||
{{ if not $message -}}
|
||||
{{ errorf "Missing inner element text: %s" .Position -}}
|
||||
{{ else }}
|
||||
{{ else if not $error -}}
|
||||
{{ partial "assets/toast.html" (dict "id" $id "header" $header "message" $message) }}
|
||||
{{ end -}}
|
||||
|
2531
package-lock.json
generated
2531
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.14.3",
|
||||
"version": "0.14.7",
|
||||
"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,10 +59,10 @@
|
||||
"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.103.0",
|
||||
"hugo-bin": "^0.108.0",
|
||||
"markdownlint-cli2": "^0.7.0",
|
||||
"postcss-cli": "^10.1.0",
|
||||
"purgecss-whitelister": "^2.4.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.
Reference in New Issue
Block a user