mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-07 10:04:22 +00:00
Compare commits
129 Commits
v0.22.0-be
...
v0.23.0-al
Author | SHA1 | Date | |
---|---|---|---|
![]() |
75373935f1 | ||
![]() |
1d5784a4d1 | ||
![]() |
5df94ffe33 | ||
![]() |
6aeaa8812a | ||
![]() |
b1f8044e02 | ||
![]() |
09fc0991bd | ||
![]() |
a7b70efef0 | ||
![]() |
4c3df8e769 | ||
![]() |
15418f7bdc | ||
![]() |
0a2bc468e5 | ||
![]() |
df8bcff315 | ||
![]() |
56e992ba7a | ||
![]() |
e7a6582229 | ||
![]() |
02946a9c9b | ||
![]() |
a5ca5fcff1 | ||
![]() |
b412c03b72 | ||
![]() |
22678d4ecc | ||
![]() |
d84099e41f | ||
![]() |
853aac57a6 | ||
![]() |
a5bddcb033 | ||
![]() |
3a7178166f | ||
![]() |
3f89bfb444 | ||
![]() |
e5ba3a94a4 | ||
![]() |
dc7af61a3a | ||
![]() |
da560a0275 | ||
![]() |
41cf694792 | ||
![]() |
59f42c0dbd | ||
![]() |
b2302e2e9f | ||
![]() |
8e6c0f8ade | ||
![]() |
ba92505daa | ||
![]() |
e6e93888f6 | ||
![]() |
e92598dc5b | ||
![]() |
697c6a1aae | ||
![]() |
2487001b0d | ||
![]() |
7cd722bcc2 | ||
![]() |
e0b7d7c3bb | ||
![]() |
23470b705d | ||
![]() |
70a624a9f3 | ||
![]() |
bce38385ab | ||
![]() |
8848b126ca | ||
![]() |
45a90fbe9d | ||
![]() |
d2929bf776 | ||
![]() |
3bab1c1250 | ||
![]() |
e59d4696da | ||
![]() |
f44f74f34c | ||
![]() |
22474722ad | ||
![]() |
99df503a90 | ||
![]() |
0df055db8c | ||
![]() |
f73936d056 | ||
![]() |
e1c976e09a | ||
![]() |
21579f7a40 | ||
![]() |
693882aff1 | ||
![]() |
6b42ed0845 | ||
![]() |
ed9373bc7e | ||
![]() |
0d2f5cc553 | ||
![]() |
12f6e9e552 | ||
![]() |
999c7a8fff | ||
![]() |
a5494f4681 | ||
![]() |
404a5500df | ||
![]() |
4442833c1b | ||
![]() |
4cb800d485 | ||
![]() |
f1598c3c4b | ||
![]() |
6b9915a425 | ||
![]() |
59befa908f | ||
![]() |
af68fb24b5 | ||
![]() |
73870663f6 | ||
![]() |
ac48cf6b57 | ||
![]() |
6a5d4a1363 | ||
![]() |
8be3996fb2 | ||
![]() |
bd7d2ffb09 | ||
![]() |
9375248a09 | ||
![]() |
713d1920a3 | ||
![]() |
adc1212cd7 | ||
![]() |
b8803d75fe | ||
![]() |
8006acb8c9 | ||
![]() |
7be7e3b7f0 | ||
![]() |
a6c18c91e5 | ||
![]() |
81c531e2b5 | ||
![]() |
d66910740f | ||
![]() |
3323bf500d | ||
![]() |
3cc34d18e0 | ||
![]() |
aeb050440f | ||
![]() |
a9a6bd0d31 | ||
![]() |
2b921def52 | ||
![]() |
f5a1a97383 | ||
![]() |
c87b96f8f0 | ||
![]() |
1def105bda | ||
![]() |
1d67a30ece | ||
![]() |
1a3d50ca17 | ||
![]() |
ce26722c96 | ||
![]() |
f2aab26b6e | ||
![]() |
10e086594b | ||
![]() |
30ea77182d | ||
![]() |
e899d7d39a | ||
![]() |
3b2e780a20 | ||
![]() |
d443d89616 | ||
![]() |
c981ac45d3 | ||
![]() |
ceabca3a43 | ||
![]() |
99b6fcbc42 | ||
![]() |
dde79bf5d0 | ||
![]() |
ff3e957558 | ||
![]() |
1466c7a927 | ||
![]() |
1a7c18d209 | ||
![]() |
2c8ed7c494 | ||
![]() |
0526b4c5e0 | ||
![]() |
c2f4e6bc48 | ||
![]() |
0cc5fcb33a | ||
![]() |
e461a9564f | ||
![]() |
183879d51c | ||
![]() |
cddae05b53 | ||
![]() |
67d831d898 | ||
![]() |
d726323220 | ||
![]() |
f76fea84cc | ||
![]() |
6ec24e12f7 | ||
![]() |
cf27cce44d | ||
![]() |
6ea22d121f | ||
![]() |
2d7bfaa9dc | ||
![]() |
0e62cc4fec | ||
![]() |
ae0307092f | ||
![]() |
2ebf6fe7fa | ||
![]() |
f9805de74c | ||
![]() |
20b7b6b95c | ||
![]() |
c2beca3504 | ||
![]() |
7414a1badf | ||
![]() |
cd5f7e08c4 | ||
![]() |
fd804fa29a | ||
![]() |
08c310c59e | ||
![]() |
46bde0918f | ||
![]() |
a77c3aa347 |
8
.github/workflows/lint-build.yml
vendored
8
.github/workflows/lint-build.yml
vendored
@@ -20,10 +20,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'npm'
|
||||
@@ -49,10 +49,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
4
.github/workflows/mod-update.yml
vendored
4
.github/workflows/mod-update.yml
vendored
@@ -14,10 +14,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'npm'
|
||||
|
4
.github/workflows/npm-publish.yml
vendored
4
.github/workflows/npm-publish.yml
vendored
@@ -21,10 +21,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup .npmrc file to publish to npm
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
registry-url: ${{ env.REGISTRY_URL }}
|
||||
|
@@ -6,7 +6,9 @@
|
||||
"MD026": false,
|
||||
"MD034": false,
|
||||
"MD051": false,
|
||||
"MD053": false
|
||||
"MD053": false,
|
||||
"MD055": false,
|
||||
"MD056": false
|
||||
},
|
||||
"ignores": ["node_modules", "CHANGELOG.md"]
|
||||
}
|
||||
|
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 Mark Dumay
|
||||
Copyright (c) 2024 Mark Dumay
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
@@ -136,7 +136,6 @@ The `hinode`, `docs`, and `template` codebase is released under the [MIT license
|
||||
[npm]: https://www.npmjs.com
|
||||
[observatory]: https://observatory.mozilla.org/analyze/demo.gethinode.com
|
||||
[pagespeed]: https://pagespeed.web.dev/report?url=https%3A%2F%2Fdemo.gethinode.com%2F
|
||||
[utterances]: https://utteranc.es
|
||||
|
||||
<!-- MARKDOWN MAINTAINED LINKS -->
|
||||
[contribute]: https://gethinode.com/contribute
|
||||
|
@@ -1,8 +1,14 @@
|
||||
const navbar = document.querySelector('.navbar')
|
||||
const togglers = document.querySelectorAll('.main-nav-toggler')
|
||||
const modeSelectors = document.querySelectorAll('.switch-mode-collapsed')
|
||||
const colorsBG = ['body', 'secondary', 'tertiary']
|
||||
|
||||
if (navbar !== null && togglers !== null) {
|
||||
// initialize background color
|
||||
const color = (navbar.getAttribute('data-navbar-color') || 'body')
|
||||
const bg = colorsBG.includes(color) ? `var(--bs-${color}-bg)` : `var(--bs-navbar-color-${color})`
|
||||
navbar.style.setProperty('--bs-navbar-expanded-color', bg)
|
||||
|
||||
// set the navbar background color to opaque when scrolling past a breakpoint
|
||||
window.onscroll = () => {
|
||||
if (window.scrollY > 75) {
|
||||
|
@@ -24,7 +24,6 @@
|
||||
@import "components/carousel.scss";
|
||||
@import "components/clipboard.scss";
|
||||
@import "components/command.scss";
|
||||
@import "components/comments.scss";
|
||||
@import "components/feature.scss";
|
||||
@import "components/footer.scss";
|
||||
@import "components/nav.scss";
|
||||
|
@@ -22,7 +22,6 @@
|
||||
@import "components/carousel.scss";
|
||||
@import "components/clipboard.scss";
|
||||
@import "components/command.scss";
|
||||
@import "components/comments.scss";
|
||||
@import "components/feature.scss";
|
||||
@import "components/footer.scss";
|
||||
@import "components/nav.scss";
|
||||
|
@@ -22,13 +22,13 @@ a:active {
|
||||
}
|
||||
|
||||
.fullscreen {
|
||||
--navbar-offset: #{$navbar-offset};
|
||||
--overlay-offset: #{$overlay-offset};
|
||||
|
||||
min-height: calc(100vh - var(--navbar-offset));
|
||||
min-height: calc(100vh - var(--overlay-offset));
|
||||
}
|
||||
|
||||
.main-content {
|
||||
margin-top: $navbar-offset;
|
||||
margin-top: $overlay-offset;
|
||||
}
|
||||
|
||||
$utilities: map-merge(
|
||||
|
@@ -20,6 +20,7 @@ strong {
|
||||
|
||||
$navbar-height: h.$navbar-height;
|
||||
$navbar-offset: h.$navbar-offset;
|
||||
$overlay-offset: h.$overlay-offset;
|
||||
$primary: h.$primary;
|
||||
$secondary: h.$secondary;
|
||||
$success: h.$success;
|
||||
|
@@ -1,20 +0,0 @@
|
||||
.utterances {
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
max-width: 760px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.utterances-frame {
|
||||
color-scheme: light;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: 1px;
|
||||
min-width: 100%;
|
||||
max-width: 100%;
|
||||
height: 100%;
|
||||
border: 0;
|
||||
}
|
@@ -19,3 +19,11 @@
|
||||
-webkit-transform: scaleX(-1);
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
.background-img {
|
||||
--overlay-offset: #{$overlay-offset};
|
||||
|
||||
height: calc(100vh - var(--overlay-offset));
|
||||
width: 100vw;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
@@ -2,13 +2,20 @@
|
||||
|
||||
// Source: https://jsfiddle.net/njhgr40m/
|
||||
|
||||
|
||||
.navbar {
|
||||
--bs-navbar-expanded-color: var(--bs-body-bg);
|
||||
|
||||
transition: 0.5s ease-in-out;
|
||||
background-color: transparent;
|
||||
|
||||
@each $state, $val in $theme-colors {
|
||||
--bs-navbar-color-#{$state}: #{$val};
|
||||
}
|
||||
}
|
||||
|
||||
.nav-active, .navbar-expanded {
|
||||
background-color: var(--bs-body-bg);
|
||||
background-color: var(--bs-navbar-expanded-color);
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
@@ -31,6 +38,30 @@
|
||||
box-shadow: $box-shadow-sm;
|
||||
}
|
||||
|
||||
.navbar-overlay-dark {
|
||||
--bs-navbar-color: #{$navbar-dark-color};
|
||||
--bs-navbar-hover-color: #{$navbar-dark-hover-color};
|
||||
--bs-navbar-disabled-color: #{$navbar-dark-disabled-color};
|
||||
--bs-navbar-active-color: #{$navbar-dark-active-color};
|
||||
--bs-navbar-brand-color: #{$navbar-dark-brand-color};
|
||||
--bs-navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};
|
||||
--bs-navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};
|
||||
}
|
||||
|
||||
.navbar-overlay-light, .navbar-overlay-dark.nav-active, .navbar-overlay-dark.navbar-expanded {
|
||||
--bs-navbar-color: #{$navbar-light-color};
|
||||
--bs-navbar-hover-color: #{$navbar-light-hover-color};
|
||||
--bs-navbar-disabled-color: #{$navbar-light-disabled-color};
|
||||
--bs-navbar-active-color: #{$navbar-light-active-color};
|
||||
--bs-navbar-brand-color: #{$navbar-light-brand-color};
|
||||
--bs-navbar-brand-hover-color: #{$navbar-light-brand-hover-color};
|
||||
--bs-navbar-toggler-border-color: #{$navbar-light-toggler-border-color};
|
||||
}
|
||||
|
||||
.nav-item .vr {
|
||||
color: var(--bs-navbar-color);
|
||||
}
|
||||
|
||||
/* Remove border from toggler */
|
||||
.navbar-toggler {
|
||||
border: 0 if($enable-important-utilities, !important, null);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# toml-docs-start main
|
||||
title = "Hinode"
|
||||
copyright = "Copyright © 2023 Mark Dumay."
|
||||
copyright = "Copyright © 2024 Mark Dumay."
|
||||
paginate = 9
|
||||
enableGitInfo = true
|
||||
# toml-docs-end main
|
||||
@@ -89,6 +89,8 @@ home = ["HTML", "RSS", "REDIR"]
|
||||
keepVarNames = true
|
||||
precision = 0
|
||||
version = 2022
|
||||
[minify.tdewolff.html]
|
||||
keepWhitespace = true
|
||||
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
@@ -132,4 +134,6 @@ home = ["HTML", "RSS", "REDIR"]
|
||||
path = "github.com/gethinode/mod-leaflet"
|
||||
[[module.imports]]
|
||||
path = "github.com/gethinode/mod-lottie"
|
||||
[[module.imports]]
|
||||
path = "github.com/gethinode/mod-utils"
|
||||
# toml-docs-end modules
|
||||
|
@@ -63,6 +63,8 @@
|
||||
logo = "/img/logo_icon.svg"
|
||||
color = "body"
|
||||
fixed = true
|
||||
overlay = false
|
||||
overlayMode = "dark"
|
||||
horizontal = false
|
||||
offset = "5.5rem"
|
||||
search = true
|
||||
@@ -189,14 +191,5 @@
|
||||
images = ["logo.png"]
|
||||
locale = "en_US"
|
||||
|
||||
[comments]
|
||||
enabled = false
|
||||
repo = "" # Replace with your repository.
|
||||
#issueTerm = "pathname" # pathname, url, title, og:title
|
||||
#label = "comment"
|
||||
# By default, light and dark mode correspond to github-light and github-dark, respectively.
|
||||
# Optional values: github-light, github-dark, preferred-color-scheme, github-dark-orange, icy-dark, dark-blue, photon-dark.
|
||||
#theme = ""
|
||||
|
||||
[links]
|
||||
hinode = "https://gethinode.com"
|
||||
|
@@ -7,15 +7,14 @@ for = '/**'
|
||||
X-XSS-Protection = "1; mode=block"
|
||||
Content-Security-Policy = """\
|
||||
default-src 'self'; \
|
||||
script-src 'self' \
|
||||
https://utteranc.es/client.js https://*.google-analytics.com https://*.googletagmanager.com; \
|
||||
style-src 'self' https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \
|
||||
script-src 'self' https://*.google-analytics.com https://*.googletagmanager.com; \
|
||||
style-src 'self' https://fonts.googleapis.com https://www.youtube.com; \
|
||||
object-src 'none'; \
|
||||
base-uri 'self'; \
|
||||
connect-src 'self'
|
||||
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \
|
||||
font-src 'self' https://fonts.gstatic.com; \
|
||||
frame-src 'self' https://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com; \
|
||||
frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com; \
|
||||
img-src 'self' data: https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \
|
||||
manifest-src 'self'; \
|
||||
media-src 'self' \
|
||||
|
@@ -1,9 +1,11 @@
|
||||
comment: >-
|
||||
Creates an HTML element that shows the long form of an abbrevitation. The abbreviation data is centrally stored in a
|
||||
data file. By default, the shortcode uses `abbr.yaml` with translation support.
|
||||
Creates an HTML element that shows the long form of an abbrevitation. The
|
||||
abbreviation data is centrally stored in a data file. By default, the
|
||||
shortcode uses `abbr.yaml` with translation support.
|
||||
|
||||
The data file is expected to store key-value pairs, where `id` is the lower-case abbrevation and `long` its long
|
||||
form. The following example illustrates this using YML:
|
||||
The data file is expected to store key-value pairs, where `id` is the
|
||||
lower-case abbrevation and `long` its long form. The following example
|
||||
illustrates this using YML:
|
||||
|
||||
- id: css
|
||||
long: `Cascading Style Sheets`
|
||||
|
@@ -1,22 +1,18 @@
|
||||
comment: >-
|
||||
Use the badge shortcode to enrich headings.
|
||||
comment: Use the badge shortcode to enrich headings.
|
||||
arguments:
|
||||
title:
|
||||
type: string
|
||||
optional: false
|
||||
comment: >-
|
||||
Title of the badge.
|
||||
comment: Title of the badge.
|
||||
class:
|
||||
type: string
|
||||
optional: true
|
||||
comment: >-
|
||||
Class attribute of the badge element.
|
||||
comment: Class attribute of the badge element.
|
||||
color:
|
||||
type: select
|
||||
optional: true
|
||||
default: secondary
|
||||
comment: >-
|
||||
Theme color of the element.
|
||||
comment: Theme color of the element.
|
||||
options:
|
||||
values:
|
||||
- primary
|
||||
|
@@ -6,19 +6,16 @@ arguments:
|
||||
- string
|
||||
- template.HTML
|
||||
optional: true
|
||||
comment: >-
|
||||
Title of the button, required unless icon is set.
|
||||
comment: Title of the button, required unless icon is set.
|
||||
class:
|
||||
type: string
|
||||
optional: true
|
||||
comment: >-
|
||||
Class attribute of the button element, e.g. `p-5`.
|
||||
comment: Class attribute of the button element, e.g. `p-5`.
|
||||
color:
|
||||
type: select
|
||||
optional: true
|
||||
default: primary
|
||||
comment: >-
|
||||
Theme color of the element.
|
||||
comment: Theme color of the element.
|
||||
options:
|
||||
values:
|
||||
- primary
|
||||
|
@@ -157,19 +157,39 @@ arguments:
|
||||
optional: true
|
||||
comment: >-
|
||||
Font Awesome icon, displayed on top or the left of the card.
|
||||
align:
|
||||
type: select
|
||||
optional: true
|
||||
default: start
|
||||
release: v0.23.0-alpha2
|
||||
comment: Icon alignment.
|
||||
options:
|
||||
values:
|
||||
- start
|
||||
- end
|
||||
- center
|
||||
style:
|
||||
type: string
|
||||
optional: true
|
||||
release: v0.23.0-alpha2
|
||||
comment: Icon style.
|
||||
orientation:
|
||||
type: select
|
||||
optional: true
|
||||
default: stacked
|
||||
parent: cascade
|
||||
comment: >-
|
||||
Placement of the thumbnail or icon.
|
||||
comment: Placement of the thumbnail or icon.
|
||||
options:
|
||||
values:
|
||||
- stacked
|
||||
- horizontal
|
||||
- horizontal-sm
|
||||
- none
|
||||
subtle:
|
||||
type: bool
|
||||
optional: true
|
||||
release: v0.23.0-alpha2
|
||||
comment: Apply subtle background colors.
|
||||
body:
|
||||
optional: true
|
||||
comment: >-
|
||||
|
55
data/structures/list.yml
Normal file
55
data/structures/list.yml
Normal file
@@ -0,0 +1,55 @@
|
||||
comment: >-
|
||||
Displays a list of items with a thumbnail alternating between left and right
|
||||
alignment.
|
||||
arguments:
|
||||
page:
|
||||
type:
|
||||
- '*hugolib.pageState'
|
||||
- '*hugolib.pageForShortcode'
|
||||
optional: false
|
||||
comment: Required context of the current page.
|
||||
group: partial
|
||||
list:
|
||||
type:
|
||||
- 'page.Pages'
|
||||
- 'resource.Resources'
|
||||
optional: false
|
||||
comment: Required array of pages.
|
||||
group: partial
|
||||
title:
|
||||
type: string
|
||||
optional: true
|
||||
comment: Optional title of the card group.
|
||||
loading:
|
||||
type: select
|
||||
default: eager
|
||||
optional: true
|
||||
comment: >-
|
||||
Loading behavior of the image. The loading of lazily loaded images is
|
||||
deferred until the image is within scrolling range of the viewport. This
|
||||
should reduce the initial loading time of the website. It is recommended
|
||||
to lazily load only those images that are below the pagefold.
|
||||
options:
|
||||
values:
|
||||
- eager
|
||||
- lazy
|
||||
class:
|
||||
type: string
|
||||
optional: true
|
||||
comment: Class attribute of the tab element, e.g. “w-50”.
|
||||
color:
|
||||
type: select
|
||||
optional: true
|
||||
comment: >-
|
||||
Theme color of the element.
|
||||
options:
|
||||
values:
|
||||
- primary
|
||||
- secondary
|
||||
- success
|
||||
- danger
|
||||
- warning
|
||||
- info
|
||||
- light
|
||||
- dark
|
||||
- body
|
@@ -50,6 +50,12 @@ arguments:
|
||||
- accordion
|
||||
- tab-pane
|
||||
group: partial
|
||||
illustration:
|
||||
type:
|
||||
- string
|
||||
- template.HTML
|
||||
optional: true
|
||||
group: partial
|
||||
body:
|
||||
optional: false
|
||||
comment: Content of the item.
|
||||
|
34
data/structures/navbar-item.yml
Normal file
34
data/structures/navbar-item.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
comment: >-
|
||||
Defines an individual item of the navigation bar.
|
||||
arguments:
|
||||
page:
|
||||
type:
|
||||
- '*hugolib.pageState'
|
||||
- '*hugolib.pageForShortcode'
|
||||
optional: false
|
||||
comment: Context of the current page.
|
||||
group: partial
|
||||
menu:
|
||||
type: '*navigation.MenuEntry'
|
||||
optional: false
|
||||
comment: Menu data to use for the navbar item.
|
||||
parent:
|
||||
type: '*navigation.MenuEntry'
|
||||
optional: true
|
||||
comment: Parent of the current navbar item.
|
||||
class:
|
||||
type: string
|
||||
optional: true
|
||||
comment: Class attribute of the item.
|
||||
cue:
|
||||
type: bool
|
||||
optional: true
|
||||
comment: >-
|
||||
Flag to indicate if an external link should show a visual cue, defaults
|
||||
to the setting `main.externalLinks.cue` in the site's parameters.
|
||||
tab:
|
||||
type: bool
|
||||
optional: true
|
||||
comment: >-
|
||||
Flag to indicate if an external link should open in a new tab, defaults
|
||||
to setting `main.externalLinks.tab` in the site's parameters.
|
@@ -100,6 +100,26 @@ arguments:
|
||||
default: false
|
||||
comment: Flag to indicate the navbar should stick to the top.
|
||||
group: partial
|
||||
overlay:
|
||||
type: bool
|
||||
optional: true
|
||||
default: false
|
||||
comment: >-
|
||||
Flag to indicate if the navbar should render as an overlay on the current
|
||||
page.
|
||||
group: partial
|
||||
release: v0.22.6
|
||||
overlayMode:
|
||||
type: select
|
||||
optional: true
|
||||
default: dark
|
||||
comment: Color mode of the overlay.
|
||||
options:
|
||||
values:
|
||||
- light
|
||||
- dark
|
||||
group: partial
|
||||
release: v0.23.0
|
||||
logo:
|
||||
type: path
|
||||
optional: true
|
||||
|
14
data/structures/page-alert.yml
Normal file
14
data/structures/page-alert.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
comment: >-
|
||||
Adds a dismissible alert message to the top of the page, above the main menu.
|
||||
The alert uses the following scratch variables:
|
||||
- pageAlertMsg
|
||||
- pageAlertURL
|
||||
- version
|
||||
arguments:
|
||||
page:
|
||||
type:
|
||||
- '*hugolib.pageState'
|
||||
- '*hugolib.pageForShortcode'
|
||||
optional: false
|
||||
comment: Context of the current page.
|
||||
group: partial
|
21
data/structures/pagination.yml
Normal file
21
data/structures/pagination.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
comment: >-
|
||||
Adds a pagination element to a page. This allows to split long lists across
|
||||
multiple pages to ease navigation. Set 'paginate' in the site configuration to
|
||||
define the maximum amount of items to display on a list page.
|
||||
arguments:
|
||||
page:
|
||||
type:
|
||||
- '*hugolib.pageState'
|
||||
- '*hugolib.pageForShortcode'
|
||||
optional: false
|
||||
comment: Context of the current page.
|
||||
group: partial
|
||||
format:
|
||||
type: select
|
||||
optional: true
|
||||
default: default
|
||||
comment:
|
||||
options:
|
||||
values:
|
||||
- default
|
||||
- terse
|
@@ -16,7 +16,7 @@ arguments:
|
||||
class:
|
||||
type: string
|
||||
optional: true
|
||||
comment: Class attribute of the card element, e.g. “w-50”.
|
||||
comment: Class attribute of the card element, e.g. `w-50`.
|
||||
color:
|
||||
type: select
|
||||
optional: true
|
||||
|
16
data/structures/section-header.yml
Normal file
16
data/structures/section-header.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
comment: Renders the header of a page section.
|
||||
arguments:
|
||||
title:
|
||||
type: string
|
||||
optional: true
|
||||
comment: Title of the section.
|
||||
description:
|
||||
type: string
|
||||
optional: true
|
||||
comment: Section description.
|
||||
content:
|
||||
type:
|
||||
- string
|
||||
- template.HTML
|
||||
optional: true
|
||||
comment: Section content.
|
9
data/structures/section-menu.yml
Normal file
9
data/structures/section-menu.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
comment: Renders the section menu of a single page.
|
||||
arguments:
|
||||
page:
|
||||
type:
|
||||
- '*hugolib.pageState'
|
||||
- '*hugolib.pageForShortcode'
|
||||
optional: false
|
||||
comment: Context of the current page.
|
||||
group: partial
|
9
data/structures/sharing.yml
Normal file
9
data/structures/sharing.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
comment: Renders the social sharing buttons for a single page.
|
||||
arguments:
|
||||
page:
|
||||
type:
|
||||
- '*hugolib.pageState'
|
||||
- '*hugolib.pageForShortcode'
|
||||
optional: false
|
||||
comment: Context of the current page.
|
||||
group: partial
|
24
data/structures/sidebar.yml
Normal file
24
data/structures/sidebar.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
comment: >-
|
||||
Renders the sidebar navigation of a single page. It is intended to be used as
|
||||
companion to the main navigation and is typically used in content-heavy
|
||||
sections, such as documentation pages. On smaller screens, the sidebar is
|
||||
replaced with an offcanvas element. In this case, the main navigation receives
|
||||
an additional toggler on the left of the screen.
|
||||
arguments:
|
||||
page:
|
||||
type:
|
||||
- '*hugolib.pageState'
|
||||
- '*hugolib.pageForShortcode'
|
||||
optional: false
|
||||
comment: Context of the current page.
|
||||
group: partial
|
||||
menu:
|
||||
type: '[]interface {}'
|
||||
optional: true
|
||||
comment: Path of the sidebar navigation menu.
|
||||
version:
|
||||
type: string
|
||||
optional: true
|
||||
comment: >-
|
||||
Version of the sidebar navigation, used to define the base URL of
|
||||
generated links, together with the page's section.
|
@@ -23,7 +23,7 @@ arguments:
|
||||
class:
|
||||
type: string
|
||||
optional: true
|
||||
comment: Class attribute of the table element, e.g. “table-striped-columns w-auto”.
|
||||
comment: Class attribute of the table element, e.g. `table-striped-columns w-auto`.
|
||||
body:
|
||||
type: string
|
||||
optional: false
|
||||
|
@@ -5,7 +5,8 @@ arguments:
|
||||
type: string
|
||||
optional: true
|
||||
comment: >-
|
||||
ID of the toast message, defaults to `toast-message-n` with sequence n.
|
||||
Unique identifier of the toast message, defaults to `toast-message-n`
|
||||
with sequence n.
|
||||
header:
|
||||
type: string
|
||||
optional: true
|
||||
|
9
data/structures/toc.yml
Normal file
9
data/structures/toc.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
comment: Renders the table of contents of a single page.
|
||||
arguments:
|
||||
page:
|
||||
type:
|
||||
- '*hugolib.pageState'
|
||||
- '*hugolib.pageForShortcode'
|
||||
optional: false
|
||||
comment: Context of the current page.
|
||||
group: partial
|
@@ -1,6 +1,6 @@
|
||||
resourcedir = '../resources/'
|
||||
title = "Hinode"
|
||||
copyright = "Copyright © 2023 Mark Dumay."
|
||||
copyright = "Copyright © 2024 Mark Dumay."
|
||||
paginate = 9
|
||||
enableGitInfo = true
|
||||
|
||||
@@ -79,6 +79,8 @@ home = ["HTML", "RSS", "REDIR"]
|
||||
keepVarNames = true
|
||||
precision = 0
|
||||
version = 2022
|
||||
[minify.tdewolff.html]
|
||||
keepWhitespace = true
|
||||
|
||||
[module]
|
||||
replacements = 'github.com/gethinode/hinode -> ../..'
|
||||
|
@@ -52,6 +52,8 @@
|
||||
logo = "/img/logo_icon.svg"
|
||||
color = "body"
|
||||
fixed = true
|
||||
overlay = false
|
||||
overlayMode = "dark"
|
||||
horizontal = false
|
||||
offset = "5.5rem"
|
||||
search = true
|
||||
@@ -181,15 +183,6 @@
|
||||
images = ["logo.png"]
|
||||
locale = "en_US"
|
||||
|
||||
[comments]
|
||||
enabled = false
|
||||
repo = "" # Replace with your repository.
|
||||
#issueTerm = "pathname" # pathname, url, title, og:title
|
||||
#label = "comment"
|
||||
# By default, light and dark mode correspond to github-light and github-dark, respectively.
|
||||
# Optional values: github-light, github-dark, preferred-color-scheme, github-dark-orange, icy-dark, dark-blue, photon-dark.
|
||||
#theme = ""
|
||||
|
||||
[links]
|
||||
bs_badge_heading = "https://getbootstrap.com/docs/5.3/components/badge/#headings"
|
||||
hinode_docs = "https://gethinode.com"
|
||||
@@ -197,5 +190,4 @@
|
||||
mozilla_image = "https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images"
|
||||
observatory = "https://observatory.mozilla.org/analyze/demo.gethinode.com"
|
||||
pagespeed = "https://pagespeed.web.dev/report?url=https%3A%2F%2Fdemo.gethinode.com%2F"
|
||||
utterances = "https://utteranc.es"
|
||||
hinode = "https://gethinode.com"
|
||||
|
@@ -7,15 +7,14 @@ for = '/**'
|
||||
X-XSS-Protection = "1; mode=block"
|
||||
Content-Security-Policy = """\
|
||||
default-src 'self'; \
|
||||
script-src 'self' \
|
||||
https://utteranc.es/client.js https://*.google-analytics.com https://*.googletagmanager.com; \
|
||||
style-src 'self' https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \
|
||||
script-src 'self' https://*.google-analytics.com https://*.googletagmanager.com; \
|
||||
style-src 'self' https://fonts.googleapis.com https://www.youtube.com; \
|
||||
object-src 'none'; \
|
||||
base-uri 'self'; \
|
||||
connect-src 'self'
|
||||
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \
|
||||
font-src 'self' https://fonts.gstatic.com; \
|
||||
frame-src 'self' https://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com; \
|
||||
frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com; \
|
||||
img-src 'self' data: https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \
|
||||
manifest-src 'self'; \
|
||||
media-src 'self' \
|
||||
|
@@ -26,7 +26,6 @@ Additional features include:
|
||||
* Support for multiple languages
|
||||
* Reusable Bootstrap components through configurable shortcodes and partials
|
||||
* Versioned documentation, including sidebar navigation and version switcher
|
||||
* Embedded comments through light-weight integration with GitHub via [utteranc.es]({{< param "links.utterances" >}})
|
||||
* Reponsive image handling for multiple screen sizes and resolutions
|
||||
* Optimized search results, scoring 100 points for SEO on [PageSpeed Insights]({{< param "links.pagespeed" >}})
|
||||
* Secure by default, scoring A+ on [Mozilla Observatory test]({{< param "links.observatory" >}})
|
||||
|
@@ -404,6 +404,22 @@ As an example, the following shortcode displays superscript text.
|
||||
{{< /example >}}
|
||||
<!-- markdownlint-enable MD037 -->
|
||||
|
||||
## Table
|
||||
|
||||
As an example, the following shortcode displays a responsive table.
|
||||
|
||||
<!-- markdownlint-disable MD037 -->
|
||||
{{< example lang="markdown" >}}
|
||||
{{</* table */>}}
|
||||
| # | Heading | Heading | Heading | Heading | Heading | Heading | Heading | Heading | Heading |
|
||||
|----|---------|---------|---------|---------|---------|---------|---------|---------|---------|
|
||||
| 1. | cell | cel | cel | cel | cel | cel | cel | cel | cel |
|
||||
| 2. | cell | cel | cel | cel | cel | cel | cel | cel | cel |
|
||||
| 3. | cell | cel | cel | cel | cel | cel | cel | cel | cel |
|
||||
{{</* /table */>}}
|
||||
{{< /example >}}
|
||||
<!-- markdownlint-enable MD037 -->
|
||||
|
||||
## Timeline
|
||||
|
||||
As an example, the following shortcode displays a timeline with the file `data/timeline.en.yml` as data.
|
||||
|
@@ -27,7 +27,6 @@ Les fonctionnalités supplémentaires incluent:
|
||||
- Prise en charge de plusieurs langues
|
||||
- Composants bootstrap réutilisables à travers des codes et partiels configurables
|
||||
- Documentation versionnée, incluant une navigation latérale et un sélecteur de version.
|
||||
- Commentaires intégrés via une intégration légère avec GitHub via [utteranc.es]({{< param "links.utterances" >}})
|
||||
- Gestion d'images adaptatives pour plusieurs tailles d'écran et résolutions.
|
||||
- Résultats de recherche optimisés, obtenant un score de 100 points pour le référencement (SEO) sur [PageSpeed Insights]({{< param "links.pagespeed" >}}).
|
||||
- Sécurisé par défaut, obtenant un score A+ au test [Mozilla Observatory]({{< param "links.observatory" >}})
|
||||
|
@@ -28,7 +28,6 @@ Overige functies:
|
||||
* Ondersteuning voor meerdere talen
|
||||
* Herbruikbare Bootstrap componenten via shortcodes en partials
|
||||
* Versiebeheer van documentatiepagina's, inclusief secundaire navigatie en selectie van versies
|
||||
* Integreren van commentaar via [utteranc.es]({{< param "links.utterances" >}})
|
||||
* Optimalisering van foto's voor meerdere schermafmetingen en resoluties
|
||||
* Optimale zoekresultaten, met 100 punten voor SEO volgens [PageSpeed Insights]({{< param "links.pagespeed" >}})
|
||||
* Veilige communicatie, met een score van A+ volgens [Mozilla Observatory]({{< param "links.observatory" >}})
|
||||
|
@@ -26,7 +26,6 @@
|
||||
"mark",
|
||||
"meta",
|
||||
"nav",
|
||||
"nil",
|
||||
"noscript",
|
||||
"ol",
|
||||
"p",
|
||||
@@ -39,8 +38,14 @@
|
||||
"sub",
|
||||
"sup",
|
||||
"svg",
|
||||
"table",
|
||||
"tbody",
|
||||
"td",
|
||||
"th",
|
||||
"thead",
|
||||
"time",
|
||||
"title",
|
||||
"tr",
|
||||
"ul",
|
||||
"use"
|
||||
],
|
||||
@@ -57,6 +62,7 @@
|
||||
"alert-dismissible",
|
||||
"align-items-center",
|
||||
"align-items-end",
|
||||
"align-items-start",
|
||||
"align-middle",
|
||||
"align-self-center",
|
||||
"align-self-end",
|
||||
@@ -120,13 +126,11 @@
|
||||
"col-3",
|
||||
"col-4",
|
||||
"col-6",
|
||||
"col-8",
|
||||
"col-9",
|
||||
"col-auto",
|
||||
"col-lg-2",
|
||||
"col-lg-4",
|
||||
"col-lg-8",
|
||||
"col-md-10",
|
||||
"col-md-2",
|
||||
"col-md-3",
|
||||
"col-md-4",
|
||||
@@ -373,6 +377,8 @@
|
||||
"syntax-highlight",
|
||||
"tab-content",
|
||||
"tab-pane",
|
||||
"table",
|
||||
"table-responsive",
|
||||
"tag-link",
|
||||
"text-bg-body",
|
||||
"text-bg-body-tertiary",
|
||||
@@ -518,6 +524,7 @@
|
||||
"spinner",
|
||||
"sub",
|
||||
"sup",
|
||||
"table",
|
||||
"timeline",
|
||||
"toast",
|
||||
"toast-container",
|
||||
|
11
go.mod
11
go.mod
@@ -5,11 +5,12 @@ go 1.19
|
||||
require (
|
||||
github.com/airbnb/lottie-web v5.12.2+incompatible // indirect
|
||||
github.com/gethinode/mod-bootstrap v1.2.2 // indirect
|
||||
github.com/gethinode/mod-flexsearch v1.7.1 // indirect
|
||||
github.com/gethinode/mod-fontawesome v1.7.3 // indirect
|
||||
github.com/gethinode/mod-flexsearch v1.8.1 // indirect
|
||||
github.com/gethinode/mod-fontawesome v1.8.0 // indirect
|
||||
github.com/gethinode/mod-katex v1.0.5 // indirect
|
||||
github.com/gethinode/mod-leaflet v0.3.5 // indirect
|
||||
github.com/gethinode/mod-lottie v1.3.0 // indirect
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3 // indirect
|
||||
github.com/gethinode/mod-leaflet v0.4.0 // indirect
|
||||
github.com/gethinode/mod-lottie v1.4.1 // indirect
|
||||
github.com/gethinode/mod-utils v1.0.3 // indirect
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20240108021025-afd75f742f22 // indirect
|
||||
github.com/twbs/bootstrap v5.3.2+incompatible // indirect
|
||||
)
|
||||
|
22
go.sum
22
go.sum
@@ -40,6 +40,10 @@ github.com/gethinode/mod-flexsearch v1.7.0 h1:VFTf6iUyT9b47jTDAxh8nVHU1eUBrdxlyk
|
||||
github.com/gethinode/mod-flexsearch v1.7.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||
github.com/gethinode/mod-flexsearch v1.7.1 h1:f4rjKkhleDVzqwUmwP1xZdhjru5VQ9g0MRDz0G6oLyY=
|
||||
github.com/gethinode/mod-flexsearch v1.7.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||
github.com/gethinode/mod-flexsearch v1.8.0 h1:rKu9ackmbGAD/CRJYUDUhy/3nDCEj0IgYDiL1bkwzDc=
|
||||
github.com/gethinode/mod-flexsearch v1.8.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||
github.com/gethinode/mod-flexsearch v1.8.1 h1:xwPvmmxd8Tdyxp8/rnd9KRGqIDtZs/YwAQJ1i9oQMiM=
|
||||
github.com/gethinode/mod-flexsearch v1.8.1/go.mod h1:L8hrnpupx27cez2ObMX8gWnhbW6qss4HGH1Ea4UaBRQ=
|
||||
github.com/gethinode/mod-fontawesome v1.0.2 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg=
|
||||
github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||
github.com/gethinode/mod-fontawesome v1.1.0 h1:rsDzUI+3ZlS/do2ff3ne8/z3KwHeysmuA+WsXlumXXk=
|
||||
@@ -72,6 +76,8 @@ github.com/gethinode/mod-fontawesome v1.6.1 h1:iqOgDGdw7Bs4hnzjF/8JsUn10omyKQZTg
|
||||
github.com/gethinode/mod-fontawesome v1.6.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||
github.com/gethinode/mod-fontawesome v1.7.3 h1:YzRCYSasVRIcImVmTJYjqNJ+KmyNWfm/bMgtM0slvzs=
|
||||
github.com/gethinode/mod-fontawesome v1.7.3/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||
github.com/gethinode/mod-fontawesome v1.8.0 h1:YEuCmvCdzcemF1eFK35Wnp1asKKO3/xbxGArnjq6PRY=
|
||||
github.com/gethinode/mod-fontawesome v1.8.0/go.mod h1:uvuC2YL8mdXNp6NRzFOu4TWsHvtY9AZ8YxJkF23/M/8=
|
||||
github.com/gethinode/mod-katex v1.0.0 h1:me/3dIIZBkfk1mRIFt8QiAGYwYDoSG5bc2hHRtIutFc=
|
||||
github.com/gethinode/mod-katex v1.0.0/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
|
||||
github.com/gethinode/mod-katex v1.0.1 h1:809QUztxmKgMNchU+v03iMO7Ma+ISc3ZzhXYauc21rs=
|
||||
@@ -94,6 +100,8 @@ github.com/gethinode/mod-leaflet v0.3.4 h1:oY+YQ0JiJuhFQNrk9XgFdg0NMsTUQPXNfnILp
|
||||
github.com/gethinode/mod-leaflet v0.3.4/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
|
||||
github.com/gethinode/mod-leaflet v0.3.5 h1:69Bv/6zRXhbcTzo7TMr58h3ry47srHRpM1k81LrLbYU=
|
||||
github.com/gethinode/mod-leaflet v0.3.5/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
|
||||
github.com/gethinode/mod-leaflet v0.4.0 h1:Xc6c1UTf4m1saQLFfFWT5sEpwj25xVGuS8csGC82UUI=
|
||||
github.com/gethinode/mod-leaflet v0.4.0/go.mod h1:yr+bUKAstifdB16mbYh69OayAmgPOlNUubAmVn5eL2M=
|
||||
github.com/gethinode/mod-lottie v1.0.0 h1:1CUZMcgN5FAyjjyuP3qkaOQ6M5sv6HUAbosW4sIT5VE=
|
||||
github.com/gethinode/mod-lottie v1.0.0/go.mod h1:erRCgSL2FCfKHI0jQbSpM+g0jXl7SjKVJrh7kWGteKs=
|
||||
github.com/gethinode/mod-lottie v1.0.1 h1:+IE7xtnSVQpJS56oBJq9RWKZeFEfxrOZAqE3BSrS/u0=
|
||||
@@ -106,7 +114,21 @@ github.com/gethinode/mod-lottie v1.2.0 h1:9S0Y4PlEO66dIvFxayatmDEf8WWxqbLNLi4z56
|
||||
github.com/gethinode/mod-lottie v1.2.0/go.mod h1:erRCgSL2FCfKHI0jQbSpM+g0jXl7SjKVJrh7kWGteKs=
|
||||
github.com/gethinode/mod-lottie v1.3.0 h1:vQ8CXkjdp2IeFskTzu+ZnKOEio8GtN08urVK+oCH81E=
|
||||
github.com/gethinode/mod-lottie v1.3.0/go.mod h1:erRCgSL2FCfKHI0jQbSpM+g0jXl7SjKVJrh7kWGteKs=
|
||||
github.com/gethinode/mod-lottie v1.4.0 h1:0Ls1Q/8p0gQpuX9+dtfNGKcjBNeymjE7gERdnN3lCCE=
|
||||
github.com/gethinode/mod-lottie v1.4.0/go.mod h1:57eu6glS5oxkew2dB1P2zsbhw444aRX0XfuyDe7k/dk=
|
||||
github.com/gethinode/mod-lottie v1.4.1 h1:RzCjYsxFPqyBsYAcdPeUP0rvF+hD9eEl7NrxuaRiKQQ=
|
||||
github.com/gethinode/mod-lottie v1.4.1/go.mod h1:QjKlEmYbekrNGwa9EdFlPcXxwWWcraJUQ6xIL+syA60=
|
||||
github.com/gethinode/mod-utils v1.0.0 h1:cqHm2xS5uDiJzRm1KfHaNbq6uMVDKLhQa8/BuTZ1nhY=
|
||||
github.com/gethinode/mod-utils v1.0.0/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE=
|
||||
github.com/gethinode/mod-utils v1.0.1 h1:jhZGlGFHHL1f5HXbBMXfiZ2gCz4TVafAzjnRPTIBSEE=
|
||||
github.com/gethinode/mod-utils v1.0.1/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE=
|
||||
github.com/gethinode/mod-utils v1.0.2 h1:0b3i+/bBHY1Td9N6khDbL1nf3d5HGc4QzI4BbEWHoU4=
|
||||
github.com/gethinode/mod-utils v1.0.2/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE=
|
||||
github.com/gethinode/mod-utils v1.0.3 h1:FF6lnam0Bcdj7G1E5P+qi5ByPrl1npL+3uS5YoPx1C0=
|
||||
github.com/gethinode/mod-utils v1.0.3/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE=
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3 h1:H/qVR5O4BXjRjD+5PZB+r4ug2BSJ2Of4RtwOntd+OKo=
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3/go.mod h1:5GdMfPAXzbA2gXBqTjC6l27kioSYzHlqDMh0+wyx7sU=
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20240108021025-afd75f742f22 h1:re7L8FxbXQpnX8BgzkdUnDpsUmloGNyLmiy2ZCln8pg=
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20240108021025-afd75f742f22/go.mod h1:5GdMfPAXzbA2gXBqTjC6l27kioSYzHlqDMh0+wyx7sU=
|
||||
github.com/twbs/bootstrap v5.3.2+incompatible h1:tuiO5acc6xnZUR77Sbi5aKWXxjYxbmsSbJwYrhAKoQQ=
|
||||
github.com/twbs/bootstrap v5.3.2+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=
|
||||
|
10
i18n/fr.yaml
10
i18n/fr.yaml
@@ -136,14 +136,14 @@
|
||||
|
||||
# Arguments
|
||||
- id: name
|
||||
translation: "Name"
|
||||
translation: "Nom"
|
||||
- id: type
|
||||
translation: "Type"
|
||||
- id: required
|
||||
translation: "Required"
|
||||
translation: "Requis"
|
||||
- id: default
|
||||
translation: "Default"
|
||||
translation: "Défaut"
|
||||
- id: comment
|
||||
translation: "Comment"
|
||||
translation: "Commentaire"
|
||||
- id: supportedValues
|
||||
translation: "Supported values"
|
||||
translation: "Valeurs supportées"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{{ define "main"}}
|
||||
{{ define "main" }}
|
||||
<div class="d-flex flex-fill">
|
||||
<div class="container-xxl my-auto">
|
||||
<div class="text-center">
|
||||
|
@@ -70,7 +70,9 @@
|
||||
<div class="d-flex flex-column {{ if $fullCover }} fullscreen{{ end }}{{ if .IsHome }} {{ .Site.Params.home.style }}{{ end }}">
|
||||
{{- partial "assets/navbar.html" (dict
|
||||
"page" .
|
||||
"fixed" (string site.Params.navigation.fixed)
|
||||
"fixed" site.Params.navigation.fixed
|
||||
"overlay" site.Params.navigation.overlay
|
||||
"overlayMode" site.Params.navigation.overlayMode
|
||||
"color" site.Params.navigation.color
|
||||
"style" (default "light" site.Params.navigation.style)
|
||||
"size" (default "md" site.Params.navigation.size))
|
||||
|
@@ -9,7 +9,7 @@
|
||||
{{ with .Title }}<p id="{{ anchorize . }}" class="display-4 mt-5{{ if and $.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
|
||||
{{ end }}
|
||||
{{ if (.Params.menu) }}
|
||||
{{- partial "assets/section-menu.html" . -}}
|
||||
{{- partial "assets/section-menu.html" (dict "page" .) -}}
|
||||
{{- end -}}
|
||||
{{- $loading := "" -}}
|
||||
{{- if or (eq $layout "featured") .IsHome -}}
|
||||
|
@@ -5,15 +5,11 @@
|
||||
{{ .Render "single/header" }}
|
||||
|
||||
{{- if and .Site.Params.navigation.toc .Params.includeToc | default true -}}
|
||||
<div class="d-{{ $breakpoint.current }}-none pb-5">{{ partial "assets/toc-dropdown.html" . }}</div>
|
||||
<div class="d-{{ $breakpoint.current }}-none pb-5">{{ partial "assets/toc-dropdown.html" (dict "page" .) }}</div>
|
||||
{{- end -}}
|
||||
{{ .Render "single/body" }}
|
||||
|
||||
{{ .Render "single/footer" }}
|
||||
{{- if and .Site.Params.comments.enabled .Params.showComments | default true -}}
|
||||
<hr>
|
||||
{{ partial "assets/comments.html" . }}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ define "main" -}}
|
||||
|
@@ -48,5 +48,5 @@
|
||||
</div>
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{ partial "assets/sharing.html" . }}
|
||||
{{ partial "assets/sharing.html" (dict "page" .) }}
|
||||
<p class="lead mb-5 mt-3">{{ .Description }}</p>
|
||||
|
@@ -37,6 +37,6 @@
|
||||
{{ end }}
|
||||
|
||||
{{ if $toc }}
|
||||
{{ partial "assets/toc.html" (dict "page" . "download" $download) }}
|
||||
{{ partial "assets/toc.html" (dict "page" .) }}
|
||||
{{ end -}}
|
||||
</div>
|
||||
|
@@ -1,3 +1,3 @@
|
||||
{{ with .Title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
|
||||
{{ partial "assets/sharing.html" . }}
|
||||
{{ partial "assets/sharing.html" (dict "page" .) }}
|
||||
<p class="lead mb-5">{{ .Description }}</p>
|
||||
|
@@ -1,3 +1,3 @@
|
||||
{{ with .Title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
|
||||
{{ partial "assets/sharing.html" . }}
|
||||
{{ partial "assets/sharing.html" (dict "page" .) }}
|
||||
<p class="lead mb-5">{{ .Description }}</p>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
@@ -27,6 +27,9 @@
|
||||
{{- $orientation := .orientation -}}
|
||||
{{- $ratio := .ratio -}}
|
||||
{{- $wrapper := .wrapper | default "p-0" -}}
|
||||
{{- $style := .style -}}
|
||||
{{- $align := .align -}}
|
||||
{{- $subtle := .subtle }}
|
||||
{{- $loading := .loading -}}
|
||||
|
||||
<!-- Override arguments -->
|
||||
@@ -85,12 +88,14 @@
|
||||
"class" (printf "h-100 %s" $class)
|
||||
"color" $color
|
||||
"footer" $footer
|
||||
"gutter" $gutter
|
||||
"header" $header
|
||||
"loading" $loading
|
||||
"orientation" $orientation
|
||||
"padding" $padding
|
||||
"ratio" $ratio
|
||||
"subtle" $subtle
|
||||
"style" $style
|
||||
"align" $align
|
||||
) -}}
|
||||
{{- $params = merge $params $element }}
|
||||
|
||||
@@ -103,7 +108,7 @@
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- print $cards | safeHTML }}
|
||||
{{if $cards }}{{- print $cards | safeHTML }}{{ end }}
|
||||
</div>
|
||||
|
||||
{{ if $paginate }}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
@@ -19,12 +19,24 @@
|
||||
{{- $header := .header | default "full" -}}
|
||||
{{- $href := .href -}}
|
||||
{{- $icon := .icon -}}
|
||||
{{- $iconStyle := "" -}}
|
||||
{{- $align := .align | default "start" -}}
|
||||
{{- $style := .style | default "" -}}
|
||||
{{- $loading := .loading -}}
|
||||
{{- $orientation := .orientation | default "stacked" -}}
|
||||
{{- $padding := .padding | default "auto" -}}
|
||||
{{- $ratio := .ratio -}}
|
||||
{{- $thumbnail := .thumbnail -}}
|
||||
{{- $title := .title -}}
|
||||
{{- $subtle := .subtle -}}
|
||||
{{- $colorStyle := "" -}}
|
||||
{{ if $color }}
|
||||
{{ if $subtle }}
|
||||
{{- $colorStyle = printf "bg-%s-subtle text-%s-emphasis" $color $color -}}
|
||||
{{ else }}
|
||||
{{- $colorStyle = printf "bg-%s text-bg-%s" $color $color -}}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Override arguments -->
|
||||
{{- $page := "" }}
|
||||
@@ -42,6 +54,13 @@
|
||||
{{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{ if (hasPrefix $orientation "horizontal") }}
|
||||
{{ if not $style }}{{ $style = "fa-fluid fa-fw" }}{{ end }}
|
||||
{{ else }}
|
||||
{{ if not $style }}{{ $style = "fa-4x" }}{{ end }}
|
||||
{{- $iconStyle = "pb-3" -}}
|
||||
{{ end }}
|
||||
|
||||
{{- if eq $orientation "none" }}{{ $thumbnail = "" }}{{ $icon = "" }}{{ end -}}
|
||||
|
||||
<!-- Inline partial to render the card's body -->
|
||||
@@ -100,18 +119,18 @@
|
||||
|
||||
{{- if hasPrefix $orientation "horizontal" -}}
|
||||
<!-- Render horizontal card -->
|
||||
<div class="card {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}">
|
||||
<div class="card {{ $colorStyle }} {{ $class }}">
|
||||
<div class="row g-0 row-cols-1 h-100">
|
||||
<div class="col-4{{ if eq $orientation "horizontal-sm" }} col-md-2{{ end }}">
|
||||
<div class="{{ if eq $orientation "horizontal-sm" }}col-2{{ else }}col-4{{ end }}">
|
||||
{{- if $thumbnail -}}
|
||||
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" (or $ratio "1x1") "wrapper" "h-100 card-img-wrap" "class" "rounded-start card-img-h100" "title" $title "loading" $loading) -}}
|
||||
{{- else if $icon -}}
|
||||
<div class="card-icon p-{{ $padding }} h-100 fa-wrapper d-flex align-items-center justify-content-center">
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-fluid fa-fw" $icon)) -}}
|
||||
<div class="card-icon p-{{ $padding }} h-100 fa-wrapper d-flex align-items-{{ $align}} justify-content-center {{ $iconStyle }}">
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "%s %s" $icon $style)) -}}
|
||||
</div>
|
||||
{{- end -}}
|
||||
</div>
|
||||
<div class="col-8{{ if eq $orientation "horizontal-sm" }} col-md-10{{ end }}">
|
||||
<div class="{{ if eq $orientation "horizontal-sm" }}col-10{{ else }}col-8{{ 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">
|
||||
@@ -124,12 +143,12 @@
|
||||
</div>
|
||||
{{- else -}}
|
||||
<!-- Render stacked / default card -->
|
||||
<div class="card {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}">
|
||||
<div class="card {{ $colorStyle }} {{ $class }} text-{{ $align }}">
|
||||
{{- if $thumbnail -}}
|
||||
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" (or $ratio "16x9") "wrapper" "card-img-wrap" "class" "card-img-top" "title" (or $alt $title) "loading" $loading) -}}
|
||||
{{- else if $icon -}}
|
||||
<div class="card-icon p-{{ $padding }}">
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x" $icon)) -}}
|
||||
<div class="card-icon p-{{ $padding }} {{ $iconStyle }} text-{{ $align }}">
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "%s %s" $icon $style)) -}}
|
||||
</div>
|
||||
{{- end -}}
|
||||
<div class="card-body d-flex flex-column p-{{ $padding }}">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -1,12 +0,0 @@
|
||||
{{- $params := .Site.Params.comments -}}
|
||||
{{- with $params -}}
|
||||
<h2>{{ T "comments" }}</h2>
|
||||
<script src="https://utteranc.es/client.js"
|
||||
repo="{{ $params.repo }}"
|
||||
issue-term="{{ default "pathname" $params.issueTerm }}"
|
||||
label="{{ default "comment" $params.label }}"
|
||||
theme="{{ default "github-light" $params.theme }}"
|
||||
crossorigin="anonymous"
|
||||
async>
|
||||
</script>
|
||||
{{- end -}}
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -1,17 +1,7 @@
|
||||
<!--
|
||||
Displays a list items with a thumbnail alternating between left and right alignment. The partial supports the
|
||||
following arguments:
|
||||
"page" Required context of the current page.
|
||||
"list" Required array of pages.
|
||||
"title" Optional title of the card group.
|
||||
"type" Optional type of the tab group, either "tabs", "pills", or "underline".
|
||||
"vertical" Optional flag to show vertical tabs instead of horizontal tabs (default).
|
||||
"class": Optional class attribute of the tab group, e.g. “nav-fill”.
|
||||
|
||||
In addition, the following arguments are passed to the individual tabs.
|
||||
"class" Optional class attribute of the tab element, e.g. “w-50”.
|
||||
"color": Optional theme color of the tab, either "primary", "secondary", "success", "danger",
|
||||
"warning", "info", "light", "dark", or "body". By default, no color is specified.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
<!-- Inline partial to render the list item's content -->
|
||||
@@ -33,67 +23,63 @@
|
||||
{{- partial "assets/image.html" (dict "url" $thumbnail "title" $title "wrapper" $style "mode" $mode "loading" $loading) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "list" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/list.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page -}}
|
||||
{{- if ne (printf "%T" $page) "*hugolib.pageState" -}}
|
||||
{{- errorf "partial [assets/list.html] - Invalid value for param 'page'" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $supportedTypes := slice "page.Pages" "resource.Resources" -}}
|
||||
{{ $list := .list }}
|
||||
{{- if not (in $supportedTypes (printf "%T" $list)) -}}
|
||||
{{- errorf "partial [assets/list.html] - Invalid value for param 'list'" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $list := .list -}}
|
||||
{{- $title := .title -}}
|
||||
{{- $class := .class -}}
|
||||
{{- $color := .color -}}
|
||||
{{- $loading := .loading -}}
|
||||
|
||||
{{ $vertical := false }}
|
||||
{{ $type := "pills" }}
|
||||
|
||||
{{- $loading := .loading -}}
|
||||
{{- $validSettings := slice "lazy" "eager" -}}
|
||||
{{- if $loading -}}
|
||||
{{ if not (in $validSettings $loading) -}}
|
||||
{{- errorf "partial [assets/list.html] - Invalid value for param 'loading': %s" $loading -}}
|
||||
{{ end -}}
|
||||
{{- end -}}
|
||||
|
||||
<div class="d-none d-md-block p-0">
|
||||
{{- range $index, $item := $list -}}
|
||||
{{- $odd := eq (mod $index 2) 1 -}}
|
||||
{{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}}
|
||||
<div class="container ratio-section d-flex flex-column">
|
||||
<div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2">
|
||||
<div class="col-6{{ if $odd }} order-last{{ end }}">
|
||||
{{- $style := "reveal fade-bottom" -}}
|
||||
{{ if $item.Params.tilted }}
|
||||
{{- $style = "reveal fade-bottom-n5 rotate-n5 ps-3" -}}
|
||||
{{- if $odd }}{{ $style = "reveal fade-bottom-5 rotate-5 pe-3" }}{{ end }}
|
||||
{{ end }}
|
||||
{{ partial "partials/list-img.html" (dict "thumbnail" $thumbnail "title" $item.Title "style" $style "mode" $item.Params.colormode "loading" $loading) }}
|
||||
</div>
|
||||
<div class="col-6{{ if $odd }} order-first{{ end }} psw-lg-5 p-5">
|
||||
{{ partial "partials/list-content.html" (dict "title" $item.Title "content" (or $item.Description $item.Content)) }}
|
||||
<!-- Main code -->
|
||||
{{ if not $error }}
|
||||
<div class="d-none d-md-block p-0">
|
||||
{{- range $index, $item := $list -}}
|
||||
{{- $odd := eq (mod $index 2) 1 -}}
|
||||
{{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}}
|
||||
<div class="container ratio-section d-flex flex-column">
|
||||
<div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2">
|
||||
<div class="col-6{{ if $odd }} order-last{{ end }}">
|
||||
{{- $style := "reveal fade-bottom" -}}
|
||||
{{ if $item.Params.tilted }}
|
||||
{{- $style = "reveal fade-bottom-n5 rotate-n5 ps-3" -}}
|
||||
{{- if $odd }}{{ $style = "reveal fade-bottom-5 rotate-5 pe-3" }}{{ end }}
|
||||
{{ end }}
|
||||
{{ partial "partials/list-img.html" (dict "thumbnail" $thumbnail "title" $item.Title "style" $style "mode" $item.Params.colormode "loading" $loading) }}
|
||||
</div>
|
||||
<div class="col-6{{ if $odd }} order-first{{ end }} psw-lg-5 p-5">
|
||||
{{ partial "partials/list-content.html" (dict "title" $item.Title "content" (or $item.Description $item.Content)) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ end -}}
|
||||
</div>
|
||||
{{ end -}}
|
||||
</div>
|
||||
|
||||
<div class="d-md-none">
|
||||
{{- range $index, $item := $list -}}
|
||||
{{- $odd := eq (mod $index 2) 1 -}}
|
||||
{{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}}
|
||||
<div class="container d-flex flex-column">
|
||||
<div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2">
|
||||
<div class="col-12 text-center">
|
||||
{{ partial "partials/list-img.html" (dict "thumbnail" $thumbnail "title" $item.Title "mode" $item.Params.colormode "loading" $loading) }}
|
||||
</div>
|
||||
<div class="col-12 p-3">
|
||||
{{ partial "partials/list-content.html" (dict "title" $item.Title "content" (partial "utilities/GetDescription.html" $item)) }}
|
||||
<div class="d-md-none">
|
||||
{{- range $index, $item := $list -}}
|
||||
{{- $odd := eq (mod $index 2) 1 -}}
|
||||
{{- $thumbnail := (or (and (reflect.IsMap $item.Params.Thumbnail) $item.Params.Thumbnail.url) $item.Params.Thumbnail) -}}
|
||||
<div class="container d-flex flex-column">
|
||||
<div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2">
|
||||
<div class="col-12 text-center">
|
||||
{{ partial "partials/list-img.html" (dict "thumbnail" $thumbnail "title" $item.Title "mode" $item.Params.colormode "loading" $loading) }}
|
||||
</div>
|
||||
<div class="col-12 p-3">
|
||||
{{ partial "partials/list-content.html" (dict "title" $item.Title "content" (or $item.Description $item.Content)) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ end -}}
|
||||
</div>
|
||||
{{ end -}}
|
||||
</div>
|
||||
{{ end }}
|
@@ -1,6 +1,6 @@
|
||||
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -1,22 +1,37 @@
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "navbar-item" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/navbar-item.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page -}}
|
||||
{{- $menu := .menu -}}
|
||||
{{- $parent := .parent -}}
|
||||
{{- $page := .page -}}
|
||||
{{- $class := .class -}}
|
||||
{{- $anchorClass := "" -}}
|
||||
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
|
||||
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
|
||||
|
||||
{{- $menuURL := (or $menu.PageRef $menu.URL) | relLangURL -}}
|
||||
{{- $pageURL := $page.RelPermalink | relLangURL -}}
|
||||
{{- $isActive := or (and (hasPrefix $pageURL $menuURL) (ne $menuURL ("/" | relLangURL))) (eq $pageURL $menuURL) -}}
|
||||
{{- $isAlias := $menu.Params.alias -}}
|
||||
{{- $isIcon := $menu.Params.icon -}}
|
||||
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
|
||||
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
|
||||
|
||||
{{- $url := urls.Parse $menuURL -}}
|
||||
{{- $baseURL := urls.Parse $.Site.Params.Baseurl -}}
|
||||
{{- $isExternal := ne $url.Host $baseURL.Host -}}
|
||||
{{- $externalHref := "" }}
|
||||
{{- $suffix := "" }}
|
||||
{{- $anchorClass := "" -}}
|
||||
|
||||
{{- if $isExternal }}
|
||||
{{- if $tab -}}
|
||||
@@ -48,18 +63,22 @@
|
||||
{{- 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 }}
|
||||
{{ if hasPrefix . "<i" }}
|
||||
{{ . | safeHTML }}
|
||||
{{ else }}
|
||||
{{ partial "assets/icon.html" (dict "icon" . )}}
|
||||
{{ end }}
|
||||
{{ end -}}
|
||||
<span {{ if $isActive }} class="active"{{ end }}>{{ if not $isIcon }}{{ $menu.Name }}{{ end }}</span>
|
||||
{{- with $menu.Post }}{{ . }}{{ end -}}
|
||||
{{- if not $isIcon }} {{ $suffix }}{{ end -}}
|
||||
</a>
|
||||
<!-- Main code -->
|
||||
{{ if not $error }}
|
||||
<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 }}
|
||||
{{ if hasPrefix . "<i" }}
|
||||
{{ . | safeHTML }}
|
||||
{{ else }}
|
||||
{{ partial "assets/icon.html" (dict "icon" (string .) )}}
|
||||
{{ end }}
|
||||
{{ end -}}
|
||||
<span {{ if $isActive }} class="active"{{ end }}>{{ if not $isIcon }}{{ $menu.Name }}{{ end }}</span>
|
||||
{{- with $menu.Post }}{{ . }}{{ end -}}
|
||||
{{- if not $isIcon }} {{ $suffix }}{{ end -}}
|
||||
</a>
|
||||
{{ end }}
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
@@ -110,6 +110,8 @@
|
||||
|
||||
{{- $size := .size | default "md" -}}
|
||||
{{- $fixed := .fixed | default false -}}
|
||||
{{- $overlay := .overlay | default false -}}
|
||||
{{- $overlayMode := .overlayMode | default "dark" -}}
|
||||
{{- $color := .color | default "" -}}
|
||||
{{- $search := .search | default site.Params.navigation.search -}}
|
||||
{{- $searchModal := and $search site.Params.navigation.searchModal -}}
|
||||
@@ -170,7 +172,13 @@
|
||||
<!-- Main code -->
|
||||
<div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0{{ with $class }} {{ . }}{{ end }}">
|
||||
{{- partial "assets/page-alert.html" (dict "page" $page) -}}
|
||||
<nav class="navbar {{ if $fixed }}navbar-fixed-top{{ end }} navbar-expand-{{ $size }}{{ if $contrast }} navbar-contrast{{ end }}{{ with $color }} bg-{{ . }}{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
|
||||
<nav class="navbar p-4
|
||||
{{ if $overlay }}navbar-overlay-{{ $overlayMode }}{{ else }}{{ with $color }}bg-{{ . }}{{ end }}{{ end }}
|
||||
{{ if $fixed }}navbar-fixed-top{{ end }} navbar-expand-{{ $size }}
|
||||
{{ if $contrast }}navbar-contrast{{ end }}"
|
||||
{{ with $theme }}data-bs-theme="{{ . }}"{{ end }}
|
||||
{{ if $overlay }}data-navbar-color="{{ $color }}"{{ end }}
|
||||
>
|
||||
<div class="container-xxl p-0">
|
||||
<!-- Insert sidebar toggler when applicable -->
|
||||
<div class="d-flex align-items-center">
|
||||
|
@@ -1,13 +1,25 @@
|
||||
{{- $page := .page -}}
|
||||
{{- if not $page -}}
|
||||
{{- errorf "partial [assets/page-alert.html] - Missing value for param 'page'" -}}
|
||||
{{- end -}}
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "page-alert" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/page-alert.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page -}}
|
||||
{{- $pageAlertMsg := $page.Scratch.Get "pageAlertMsg" -}}
|
||||
{{- $pageAlertURL := $page.Scratch.Get "pageAlertURL" -}}
|
||||
{{- $version := $page.Scratch.Get "version" -}}
|
||||
|
||||
{{- if $pageAlertMsg -}}
|
||||
<!-- Main code -->
|
||||
{{- if and (not $error) $pageAlertMsg -}}
|
||||
<div id="page-alert" class="alert alert-primary alert-no-decoration fade show d-flex align-items-center small m-0 py-1" data-page-alert-version="{{ $version }}">
|
||||
<a href="{{ with $pageAlertURL }}{{ . }}{{ else }}#!{{ end }}" class="text-decoration-none flex-grow-1 text-center">{{ $pageAlertMsg }}</a>
|
||||
<button id="page-alert-btn-close" type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ T "close" }}"></button>
|
||||
|
@@ -1,39 +1,19 @@
|
||||
<!-- Source: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/pagination.html -->
|
||||
<!-- Modifications: centered pagination, replaced previous/next with text -->
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
|
||||
{{- $validFormats := slice "default" "terse" }}
|
||||
This source code adapts the original partial as maintained by the Hugo repository. It introduces the
|
||||
following modifications:
|
||||
- Centered the pagination element
|
||||
- Standardized validation of partial arguments
|
||||
- Replaced previous / next navigation with text
|
||||
|
||||
The original source code is available on:
|
||||
https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/pagination.html
|
||||
Copyright 2022 The Hugo Authors. Licensed under the Apache License, Version 2.0.
|
||||
-->
|
||||
|
||||
{{- $msg1 := "When passing a map to the internal pagination template, one of the elements must be named 'page', and it must be set to the context of the current page." }}
|
||||
{{- $msg2 := "The 'format' specified in the map passed to the internal pagination template is invalid. Valid choices are: %s." }}
|
||||
|
||||
{{- $page := . }}
|
||||
{{- $format := "default" }}
|
||||
|
||||
{{- if reflect.IsMap . }}
|
||||
{{- with .page }}
|
||||
{{- $page = . }}
|
||||
{{- else }}
|
||||
{{- errorf $msg1 }}
|
||||
{{- end }}
|
||||
{{- with .format }}
|
||||
{{- $format = lower . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- 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 ", ") }}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Format: default
|
||||
{{/* --------------------------------------------------------------------- */}}
|
||||
{{- define "partials/inline/pagination/default" }}
|
||||
{{- with .Paginator }}
|
||||
{{- $currentPageNumber := .PageNumber }}
|
||||
@@ -103,8 +83,6 @@
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Format: terse
|
||||
{{/* --------------------------------------------------------------------- */}}
|
||||
{{- define "partials/inline/pagination/terse" }}
|
||||
{{- with .Paginator }}
|
||||
{{- $currentPageNumber := .PageNumber }}
|
||||
@@ -157,3 +135,24 @@
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "pagination" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/pagination.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page }}
|
||||
{{- $format := .format | default "default" }}
|
||||
|
||||
<!-- Main code -->
|
||||
{{- if and (not $error) (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 }}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -1,25 +1,23 @@
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "section-header" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/section-header.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $title := .title -}}
|
||||
{{- $thumbnail := .thumbnail -}}
|
||||
{{- $icon := .icon -}}
|
||||
{{- $sectionHeader := .sectionHeader -}}
|
||||
{{- $description := .description -}}
|
||||
{{- $content := .content -}}
|
||||
|
||||
{{- define "partials/section-header-img.html" -}}
|
||||
{{- $title := .title -}}
|
||||
{{- $thumbnail := .thumbnail -}}
|
||||
{{- $icon := .icon -}}
|
||||
{{ $padding := 5 }}
|
||||
|
||||
{{- if $thumbnail -}}
|
||||
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "wrapper" "h-100 card-img-wrap" "class" "rounded-start card-img-h100" "title" $title) -}}
|
||||
{{- else if $icon -}}
|
||||
<div class="text-secondary fw-bold">
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-10x" $icon)) -}}
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
<!-- Main code -->
|
||||
{{ with $title }}<p id="{{ anchorize . }}" class="display-4 py-5{{ if and page.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
|
||||
{{ with $description }} <p class="lead mb-5">{{ . }}</p>{{ end }}
|
||||
{{ $content }}
|
||||
|
@@ -130,31 +130,14 @@
|
||||
{{- $params := (dict
|
||||
"page" $page
|
||||
"list" $list
|
||||
"title" $title
|
||||
"icon" $icon
|
||||
"thumbnail" $thumbnail
|
||||
"ratio" $ratio
|
||||
"sectionHeader" $sectionHeader
|
||||
"description" $description
|
||||
"content" $content
|
||||
"class" $style
|
||||
"color" $color
|
||||
"loading" $loading
|
||||
)
|
||||
-}}
|
||||
{{- $partial := "" -}}
|
||||
|
||||
<div class="container-fluid {{ with $background }} bg-{{ . }}{{ end }} p-0">
|
||||
<div class="container-xxl {{ $wrapper }}">
|
||||
{{- partial "assets/section-header.html" $params -}}
|
||||
|
||||
{{- $params := (dict
|
||||
"page" $page
|
||||
"list" $list
|
||||
"class" $style
|
||||
)
|
||||
-}}
|
||||
|
||||
{{- partial "assets/section-header.html" (dict "title" $title "description" $description "content" $content) -}}
|
||||
{{ if eq $layout "card" }}
|
||||
{{- $partial = "assets/card-group.html" -}}
|
||||
{{- $params = merge $params (dict
|
||||
@@ -189,13 +172,8 @@
|
||||
{{- $partial = "assets/list.html" -}}
|
||||
{{- $params = merge $params (dict
|
||||
"title" $title
|
||||
"icon" $icon
|
||||
"thumbnail" $thumbnail
|
||||
"ratio" $ratio
|
||||
"description" $description
|
||||
"color" $color
|
||||
"loading" $loading
|
||||
"layout" $layout
|
||||
)
|
||||
-}}
|
||||
{{- end -}}
|
||||
|
@@ -1,10 +1,26 @@
|
||||
{{- $page := . -}}
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "section-menu" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/section-menu.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page -}}
|
||||
{{ $items := $page.Parent.Sections }}
|
||||
{{ if not $page.Parent.Section }}
|
||||
{{ $items = $page.Sections }}
|
||||
{{ end }}
|
||||
|
||||
{{- if gt (len $items) 0 }}
|
||||
<!-- Main code -->
|
||||
{{- if and (not $error) (gt (len $items) 0) }}
|
||||
<div class="d-grid gap-2 mx-auto d-md-none">
|
||||
{{ partial "assets/button.html" (dict
|
||||
"title" (T "sectionMenu")
|
||||
|
@@ -1,9 +1,27 @@
|
||||
{{- if .Site.Params.sharing.enabled -}}
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "sharing" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/sharing.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{ $page := .page }}
|
||||
|
||||
<!-- Main code -->
|
||||
{{- if and (not $error) $page.Site.Params.sharing.enabled -}}
|
||||
{{- $sharing := true -}}
|
||||
{{ if isset .Params "sharing" }}
|
||||
{{ $sharing = .Params.sharing }}
|
||||
{{ if isset $page.Params "sharing" }}
|
||||
{{ $sharing = $page.Params.sharing }}
|
||||
{{ else }}
|
||||
{{- with (index site.Params.pages .Type ) -}}
|
||||
{{- with (index $page.Site.Params.pages .Type ) -}}
|
||||
{{ if isset . "sharing" }}
|
||||
{{ $sharing = (index . "sharing") }}
|
||||
{{ end }}
|
||||
@@ -11,16 +29,15 @@
|
||||
{{ end }}
|
||||
|
||||
{{- if $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 := $page.Site.Params.sharing.providers -}}
|
||||
{{- if $page.Site.Params.sharing.reverse }}{{ $order = "desc" }}{{ else }}{{ $order = "asc" }}{{ end -}}
|
||||
{{- $sort := $page.Site.Params.sharing.sort | default "weight" -}}
|
||||
{{- $list = sort $list $sort $order -}}
|
||||
|
||||
{{- $download := .Params.download -}}
|
||||
{{- $download := $page.Params.download -}}
|
||||
{{- if and $download (not (fileExists (path.Join "static" $download))) -}}
|
||||
{{- errorf "Cannot find download file for page '%s': %s" .File.Path $download -}}
|
||||
{{- errorf "Cannot find download file for page '%s': %s" $page.File.Path $download -}}
|
||||
{{- end -}}
|
||||
|
||||
<div class="py-3 text-body-secondary hstack gap-1">
|
||||
@@ -40,7 +57,7 @@
|
||||
{{- end -}}
|
||||
{{ partial "assets/button.html" (dict "toast" $target "clipboard" $clipboard "href" $url "icon" (printf "%s fa-fw" $item.icon) "class" "btn-social p-0" "label" (T "shareLink" $item.name) "spacing" false) }}
|
||||
{{- end -}}
|
||||
{{ if .Site.Params.sharing.webshare }}
|
||||
{{ if $page.Site.Params.sharing.webshare }}
|
||||
{{ $attr := dict "data-sharing-title" .Title "data-sharing-description" .Description "data-sharing-url" .Permalink }}
|
||||
{{ partial "assets/button.html" (dict "href" "#!" "icon" "fas share-nodes fa-fw" "id" "btn-webshare" "class" "btn-social p-0" "attributes" $attr "label" (T "shareLink" (T "shareSystem")) "spacing" false) }}
|
||||
{{- end -}}
|
||||
|
@@ -1,7 +1,22 @@
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "sidebar" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/sidebar.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page }}
|
||||
{{- $section := $page.Section }}
|
||||
{{- $data := .menu -}}
|
||||
{{- $version := .version -}}
|
||||
{{- $section := $page.Section }}
|
||||
|
||||
{{- define "partials/sidebar/group.html" -}}
|
||||
{{- $page := .page -}}
|
||||
@@ -94,7 +109,8 @@
|
||||
{{ end }}
|
||||
{{ end -}}
|
||||
|
||||
{{ if $data }}
|
||||
<!-- Main code -->
|
||||
{{ if and (not $error) $data }}
|
||||
<nav class="sidebar flex-shrink-0 ps-1 pt-3" aria-label="{{ (strings.FirstUpper $section) }} navigation">
|
||||
{{- $sectionBreak := false -}}
|
||||
{{- $level := 0 -}}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -1,5 +1,22 @@
|
||||
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" .TableOfContents) -}}
|
||||
{{ if (gt $items 1) -}}
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "toc" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/toc-dropdown.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page -}}
|
||||
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" $page.TableOfContents) -}}
|
||||
|
||||
{{ if and (not $error) (gt $items 1) -}}
|
||||
<div class="d-grid gap-2 mx-auto">
|
||||
{{ partial "assets/button.html" (dict
|
||||
"title" (T "toc")
|
||||
@@ -16,7 +33,7 @@
|
||||
<p>
|
||||
<div class="collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll" id="toc-collapse">
|
||||
<div class="toc toc-panel text-body p-2">
|
||||
<small>{{ .TableOfContents }}</small>
|
||||
<small>{{ $page.TableOfContents }}</small>
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
|
@@ -1,7 +1,23 @@
|
||||
{{- $page := .page -}}
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "toc" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [assets/toc.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $page := .page -}}
|
||||
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" $page.TableOfContents) -}}
|
||||
{{ if gt $items 1 -}}
|
||||
|
||||
<!-- Main code -->
|
||||
{{ if and (not $error) (gt $items 1) -}}
|
||||
<strong class="d-block h6 my-2 pb-2 border-bottom">{{ T "toc" }}</strong>
|
||||
{{ $page.TableOfContents }}
|
||||
{{ end -}}
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
@@ -4,7 +4,9 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
{{ hugo.Generator}}
|
||||
{{ partialCached "head/stylesheet-core.html" . -}}
|
||||
{{- $modules := site.Params.modules.optional | intersect .Page.Params.modules -}}
|
||||
|
||||
{{ $page_modules := slice | append .Page.Params.modules }}
|
||||
{{- $modules := site.Params.modules.optional | intersect $page_modules -}}
|
||||
{{- range $index, $mod := $modules -}}
|
||||
{{- $source := printf "scss/%s.scss" $mod -}}
|
||||
{{- $target := printf "css/%s.css" $mod -}}
|
||||
|
@@ -8,6 +8,9 @@
|
||||
{{ end -}}
|
||||
|
||||
{{ $description := or (partial "utilities/GetDescription.html" .) .Site.Params.main.description }}
|
||||
{{ if gt (strings.RuneCount $description) 150 }}
|
||||
{{ $description = print (substr $description 0 150) "..." }}
|
||||
{{ end }}
|
||||
{{ $.Scratch.Set "description" $description -}}
|
||||
|
||||
{{- $thumbnail := (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.url) .Params.Thumbnail) -}}
|
||||
|
@@ -26,8 +26,10 @@
|
||||
{{- errorf "partial [head/stylesheet.html] - Invalid value for site param 'style.darkModeTint': %s" site.Params.style.darkModeTint -}}
|
||||
{{ end}}
|
||||
|
||||
{{- $navbarOffset := "0em" -}}
|
||||
{{- if site.Params.navigation.fixed }}{{ $navbarOffset = site.Params.navigation.offset | default "4em" }}{{ end }}
|
||||
{{- $navbarOffset := "0rem" -}}
|
||||
{{- if site.Params.navigation.fixed }}{{ $navbarOffset = site.Params.navigation.offset | default "4rem" }}{{ end }}
|
||||
{{- $overlayOffset := $navbarOffset -}}
|
||||
{{- if site.Params.navigation.overlay }}{{ $overlayOffset = "0rem" }}{{ end }}
|
||||
{{- $vars := dict
|
||||
"theme-font" (default "Inter" site.Params.style.themeFont)
|
||||
"font-size-base" (default "1rem" site.Params.style.fontSizeBase)
|
||||
@@ -39,8 +41,9 @@
|
||||
"danger" (default "#dc3545" site.Params.style.danger)
|
||||
"light" (default "#f8f9fa" site.Params.style.light)
|
||||
"dark" (default "#212529" site.Params.style.dark)
|
||||
"navbar-height" (site.Params.navigation.offset | default "4em")
|
||||
"navbar-height" (site.Params.navigation.offset | default "4rem")
|
||||
"navbar-offset" $navbarOffset
|
||||
"overlay-offset" $overlayOffset
|
||||
"enable-dark-mode" (printf "%t" ((default true site.Params.main.enableDarkMode)))
|
||||
"import-fonts" (printf "%t" (not (hasPrefix (lower site.Params.style.themeFontPath) "http")))
|
||||
"dark-mode-shade" (default "0%" site.Params.style.darkModeShade)
|
||||
|
@@ -1,14 +0,0 @@
|
||||
{{ $input := . }}
|
||||
{{ $output := "" }}
|
||||
|
||||
{{ if eq (printf "%T" $input) "bool" }}
|
||||
{{ $output = $input }}
|
||||
{{ else if eq $input "true" }}
|
||||
{{ $output = true }}
|
||||
{{ else if eq $input "false" }}
|
||||
{{ $output = false }}
|
||||
{{ else }}
|
||||
{{ errorf "Cannot cast '%s' to bool" $input }}
|
||||
{{ end }}
|
||||
|
||||
{{ return $output }}
|
@@ -1,23 +0,0 @@
|
||||
<!--
|
||||
Retrieve the value from a given argument within the shortcode context. If a parent is set and merge is false, the
|
||||
value of the parent's argument is retrieved when the current context is unavailable. If merge is true, the parent's
|
||||
value is merged with the value of the shortcode context, separated by a single space.
|
||||
-->
|
||||
|
||||
{{ $page := .page -}}
|
||||
{{ $arg := .arg -}}
|
||||
{{ $merge := .merge -}}
|
||||
{{ $val := "" }}
|
||||
{{ with $page.Get $arg }}{{ $val = . }}{{ end }}
|
||||
|
||||
{{- with $page.Parent -}}
|
||||
{{ with .Get $arg }}
|
||||
{{ if $merge }}
|
||||
{{ $val = trim (printf "%s %s" . $val) " " }}
|
||||
{{ else if not $val }}
|
||||
{{ $val = . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{- end -}}
|
||||
|
||||
{{- return $val -}}
|
@@ -1,21 +0,0 @@
|
||||
{{- /* Define main breakpoint */ -}}
|
||||
{{ $prev := 0 }}
|
||||
{{ $next := 0 }}
|
||||
{{ $result := dict }}
|
||||
{{- $breakpoints := slice "xs" "sm" "md" "lg" "xl" "xxl" }}
|
||||
{{- $breakpoint := site.Params.main.breakpoint | default "md" -}}
|
||||
{{- if not (in $breakpoints $breakpoint) -}}
|
||||
{{- errorf "layout [_default/baseof.html] - Invalid value for param 'breakpoint': %s" $breakpoint -}}
|
||||
{{ else }}
|
||||
{{ range $index, $item := $breakpoints }}
|
||||
{{ if eq $item $breakpoint }}
|
||||
{{ $prev = sub $index 1 }}
|
||||
{{ $next = add $index 1 }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ if lt $prev 0 }}{{ $prev = 0 }}{{ end }}
|
||||
{{ if ge $next (len $breakpoints) }}{{ $next = sub (len $breakpoints) 1 }}{{ end }}
|
||||
{{ $result = dict "prev" (index $breakpoints $prev) "current" $breakpoint "next" (index $breakpoints $next) }}
|
||||
{{- end -}}
|
||||
|
||||
{{ return $result }}
|
@@ -1,18 +0,0 @@
|
||||
{{- $page := . -}}
|
||||
{{- if ne (printf "%T" $page) "*hugolib.pageState" -}}
|
||||
{{- errorf "partial [utilities/GetDescription.html] - Expected page context" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $description := "" -}}
|
||||
{{- if not $page.RelPermalink -}}
|
||||
{{- $description = $page.Content -}}
|
||||
{{ else }}
|
||||
{{- $description = $page.Description -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if not $description -}}
|
||||
{{- $description = $page.Summary -}}
|
||||
{{- if $page.Truncated }}{{ $description = print $description "..." }}{{ end -}}}
|
||||
{{- end -}}
|
||||
|
||||
{{- return $description -}}
|
@@ -1,13 +0,0 @@
|
||||
{{ $path := .data }}
|
||||
{{ $page := .page }}
|
||||
|
||||
{{/* Try language-specific file first */}}
|
||||
{{ $i18nPath := path.Join (path.Dir $path) (printf "%s.%s" (path.BaseName $path) $page.Language.Lang) (path.Ext $path) }}
|
||||
{{ $data := index site.Data $i18nPath }}
|
||||
|
||||
{{/* Use exact provided path as backup */}}
|
||||
{{ if not $data -}}
|
||||
{{ $data = index site.Data $path }}
|
||||
{{ end }}
|
||||
|
||||
{{ return $data }}
|
@@ -1,68 +0,0 @@
|
||||
<!--
|
||||
Retrieve a local or remote resource compatible with Hugo's image processing. If the url starts with 'http', the
|
||||
image is retrieved from an external location. Else, the url is matched with a page resource and site asset (in that
|
||||
order). The path of a remote image is rewritten to ensure processed files are stored in the final '/img' folder. The
|
||||
partial returns nil if the resource cannot be found or is incompatibile. The partial supports the following
|
||||
arguments:
|
||||
"url" Required path or url of the image, e.g. "img/example.jpg" or "https://example.com/img.jpg"
|
||||
"page" Optional page context, used to retrieve an image from page resources.
|
||||
-->
|
||||
|
||||
{{ $url := .url -}}
|
||||
{{ $page := .page -}}
|
||||
{{ $mirror := false }}
|
||||
|
||||
{{ $supportedMediaTypes := slice "image/png" "image/jpeg" "image/gif" "image/tiff" "image/bmp" "image/webp" -}}
|
||||
{{ $remote := hasPrefix (lower $url) "http" }}
|
||||
{{- $img := partial "utilities/GetResource.html" (dict "url" $url "page" $page) -}}
|
||||
|
||||
{{ with $img -}}
|
||||
{{ if in $supportedMediaTypes (string $img.MediaType) -}}
|
||||
<!-- Rewrite the path of remote images to avoid storing processed files in the site's root -->
|
||||
<!-- Add a file extension based on the media type if needed to avoid Hugo processing errors -->
|
||||
{{ if $remote -}}
|
||||
{{ $path := (urls.Parse $url).Path }}
|
||||
{{ $filename := index (last 1 (split (delimit (split $path "/") "," "") ",")) 0 -}}
|
||||
{{ if not (path.Ext $filename) -}}
|
||||
{{ $extension := string $img.MediaType.SubType -}}
|
||||
{{ $filename = printf "%s.%s" $filename $extension -}}
|
||||
{{ end -}}
|
||||
{{ $img = $img.Content | resources.FromString (printf "/img/%s" $filename) -}}
|
||||
{{ end -}}
|
||||
|
||||
<!--
|
||||
Rotate the image if needed based on EXIF orientation. EXIF defines the following values:
|
||||
(source: https://sirv.com/help/articles/rotate-photos-to-be-upright/#EXIF_orientation_values)
|
||||
1 = 0 degrees: the correct orientation, no adjustment is required.
|
||||
2 = 0 degrees, mirrored: image has been flipped back-to-front.
|
||||
3 = 180 degrees: image is upside down.
|
||||
4 = 180 degrees, mirrored: image has been flipped back-to-front and is upside down.
|
||||
5 = 90 degrees: image has been flipped back-to-front and is on its side.
|
||||
6 = 90 degrees, mirrored: image is on its side.
|
||||
7 = 270 degrees: image has been flipped back-to-front and is on its far side.
|
||||
8 = 270 degrees, mirrored: image is on its far side.
|
||||
-->
|
||||
{{ with $img.Exif }}
|
||||
{{ $filter := "" }}
|
||||
{{ $orientation := .Tags.Orientation }}
|
||||
{{ if or (eq $orientation 3) (eq $orientation 4) }}
|
||||
{{ $filter = images.Process "r180" }}
|
||||
{{ else if or (eq $orientation 5) (eq $orientation 6) }}
|
||||
{{ $filter = images.Process "r270" }}
|
||||
{{ else if or (eq $orientation 7) (eq $orientation 8) }}
|
||||
{{ $filter = images.Process "r90" }}
|
||||
{{ end }}
|
||||
{{ with $filter }}{{ $img = $img.Filter . }}{{ end }}
|
||||
|
||||
{{- $isMirrored := slice 2 4 5 7 -}}
|
||||
{{- if (in $isMirrored $orientation) }}{{ $mirror = true }}{{ end -}}
|
||||
{{ end }}
|
||||
{{ else -}}
|
||||
{{ warnf "Image type '%s' is not supported: %s" $img.MediaType $url -}}
|
||||
{{ $img = "" -}}
|
||||
{{ end -}}
|
||||
{{ else -}}
|
||||
{{ warnf "Cannot find image resource: %q" $url -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ return (dict "resource" $img "mirror" $mirror) -}}
|
@@ -1,17 +0,0 @@
|
||||
{{- $page := .page -}}
|
||||
{{- $version := .version -}}
|
||||
{{- $sidebarFilename := "" -}}
|
||||
|
||||
{{- $menu := "" -}}
|
||||
{{- if $page.IsPage -}}
|
||||
{{- $sidebarFilename = printf "%s-%s" $page.Section $version -}}
|
||||
{{- $menu = index site.Data $sidebarFilename -}}
|
||||
{{ if not $menu }}
|
||||
{{- $sidebarFilename = $page.Section -}}
|
||||
{{ $menu = index site.Data $sidebarFilename }}
|
||||
{{ end }}
|
||||
{{- end -}}
|
||||
|
||||
{{ if $menu }}{{ with $sidebarFilename }}{{ $page.Scratch.Set "sidebarFilename" (path.Join "data" .) }}{{ end }}{{ end -}}
|
||||
|
||||
{{- return $menu -}}
|
@@ -1,33 +0,0 @@
|
||||
{{- $ref := "" -}}
|
||||
{{- $anchor := "" -}}
|
||||
|
||||
{{ $url := .url }}
|
||||
{{ if not $url }}
|
||||
{{- errorf "partial [utilities/GetPage.html] - Expected param 'url'" -}}
|
||||
{{ end }}
|
||||
|
||||
{{ $page := .page }}
|
||||
{{ if not $page }}
|
||||
{{- errorf "partial [utilities/GetPage.html] - Expected param 'page'" -}}
|
||||
{{ end }}
|
||||
|
||||
{{- $isExternal := ne (urls.Parse (absURL $url)).Host (urls.Parse site.BaseURL).Host -}}
|
||||
{{- if not $isExternal -}}
|
||||
{{- $ref = $page.GetPage $url -}}
|
||||
{{ if not $ref }}
|
||||
{{ $ref = (index (where $page.Site.AllPages "RelPermalink" (printf "%s/" (strings.TrimSuffix "/" $url))) 0)}}
|
||||
{{ end }}
|
||||
|
||||
{{- if not $ref }}
|
||||
{{- $segments := split $url "/" -}}
|
||||
{{- if and (hasPrefix $url "/") (gt (len $segments) 1) -}}
|
||||
{{- $prefix := index $segments 1 -}}
|
||||
{{ with index (where site.Sites "Language.Lang" $prefix) 0 }}
|
||||
{{- $path := printf "/%s" (strings.TrimPrefix (printf "/%s/" $prefix) $url) }}
|
||||
{{- $ref = .GetPage $path -}}
|
||||
{{ end }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{ return $ref }}
|
@@ -1,40 +0,0 @@
|
||||
<!--
|
||||
Retrieve a local or remote resource. If the url starts with 'http', the resource is retrieved from an external
|
||||
location. Else, the url is matched with a page resource and site asset (in that order).
|
||||
|
||||
This partial supports both relative and absolute paths. Hugo has different methods to retrieve page bundle assets
|
||||
and site assets. Absolute paths are converted to a relative path to make them compatible with Hugo's methods. The
|
||||
prefix of an absolute path is truncated if it matches either with the page bundle folder (starting with "/content/")
|
||||
or the assets folder ("/assets/").
|
||||
|
||||
The partial returns nil if the resource cannot be found. The partial supports the following arguments:
|
||||
"url" Required path or url of the resource, e.g. "img/example.jpg" or "https://example.com/img.jpg"
|
||||
"page" Optional page context, used to retrieve a resource from page resources.
|
||||
-->
|
||||
|
||||
{{ $url := .url -}}
|
||||
{{ $page := .page -}}
|
||||
{{ if hasPrefix $url "/" }}
|
||||
{{ $pageContext := (path.Join "/content" $page.File.Dir) -}}
|
||||
{{ if hasPrefix $url $pageContext }}
|
||||
{{ $url = strings.TrimPrefix $pageContext $url -}}
|
||||
{{ else if hasPrefix $url "/assets/" }}
|
||||
{{ $url = strings.TrimPrefix "/assets/" $url -}}
|
||||
{{ end }}
|
||||
{{ $url = strings.TrimPrefix "/" $url -}}
|
||||
{{ end }}
|
||||
|
||||
{{ $res := "" }}
|
||||
{{ $remote := hasPrefix (lower $url) "http" }}
|
||||
{{ if $remote }}
|
||||
{{ $res = resources.GetRemote $url -}}
|
||||
{{ else }}
|
||||
{{ if $page }}
|
||||
{{ $res = $page.Resources.Get $url -}}
|
||||
{{ end }}
|
||||
{{ if not $res }}
|
||||
{{ $res = resources.GetMatch $url }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ return $res -}}
|
@@ -1,12 +0,0 @@
|
||||
<!--
|
||||
Retrieve the value from a key-value pair. The expected format is 'key="value"', including double quotes for the
|
||||
value. Returns -1 when no valid value is found.
|
||||
-->
|
||||
|
||||
{{- $input := (split . "=") -}}
|
||||
{{- $val := -1 -}}
|
||||
{{- if gt (len $input) 1 -}}
|
||||
{{- $val = trim (index $input 1) "\"" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- return $val -}}
|
@@ -1,38 +0,0 @@
|
||||
<!--
|
||||
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 := "" -}}
|
||||
|
||||
{{- if and site.Params.docs.releases site.Params.docs.contentPath -}}
|
||||
{{- $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 -}}
|
||||
{{- else -}}
|
||||
{{- $version = site.Params.docs.version -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- return $version -}}
|
@@ -1,17 +0,0 @@
|
||||
{{ $path := .path }}
|
||||
{{ $height := .height }}
|
||||
{{ $width := "" }}
|
||||
|
||||
{{ if eq (path.Ext $path) ".svg" }}
|
||||
{{ $path := path.Join "static" .path }}
|
||||
{{ if fileExists $path }}
|
||||
{{ with findRE `viewBox="\d*\.?\d+[\s,]\d*\.?\d+[\s,]\d*\.?\d+[\s,]\d*\.?\d+"` (readFile $path) 1 }}
|
||||
{{ $content := split (index (split (index . 0) `"`) 1) " " }}
|
||||
{{ $viewbox_width := float (index $content 2) }}
|
||||
{{ $viewbox_height := float (index $content 3) }}
|
||||
{{ $width = int (math.Round (mul (div $height $viewbox_height) $viewbox_width)) }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ return $width }}
|
@@ -1,147 +0,0 @@
|
||||
<!--
|
||||
Copyright © 2023 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
{{ $aliases := dict "path" "string" "select" "string" "url" "string" }}
|
||||
|
||||
{{ $structure := .structure }}
|
||||
{{ if not $structure }}
|
||||
{{- errorf "partial [utilities/ValidateArgs.html] - Missing value for param 'structure'" -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
{{ $args := .args | default dict }}
|
||||
|
||||
{{ $definitions := (index site.Data.structures $structure).arguments }}
|
||||
{{ if not $definitions }}
|
||||
{{- errorf "partial [utilities/ValidateArgs.html] - Missing definitions: %s" $structure -}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
{{ $child := .child }}
|
||||
{{ if $child }}
|
||||
{{ $extra_def := (index site.Data.structures $child).arguments }}
|
||||
{{ if not $extra_def }}
|
||||
{{- errorf "partial [utilities/ValidateArgs.html] - Missing definitions: %s" $child -}}
|
||||
{{ $error = true }}
|
||||
{{ else }}
|
||||
{{ range $key, $val := $extra_def }}
|
||||
{{ if $val.parent }}{{ $definitions = merge $definitions (dict $key $val) }}{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ $group := .group }}
|
||||
{{ $namedArgs := true }}
|
||||
|
||||
{{ if not $error }}
|
||||
{{ range $key, $val := $args }}
|
||||
{{ $def := "" }}
|
||||
{{ if eq (printf "%T" $key) "string" }}
|
||||
{{ $def = index $definitions $key }}
|
||||
{{ else }}
|
||||
{{ $namedArgs = false }}
|
||||
{{ range $d := $definitions }}
|
||||
{{ if eq $d.position $key }}{{ $def = $d }}{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ if $def }}
|
||||
{{ $groups := slice | append $def.group }}
|
||||
{{ if and $group $def.group }}
|
||||
{{ if not (in $groups $group )}}{{ $def = "" }}{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ if not $def }}
|
||||
{{ if eq (printf "%T" $key) "string" }}
|
||||
{{ warnf "[%s] unsupported argument '%s'" $structure $key }}
|
||||
{{ else if eq (printf "%T" $key) "int" }}
|
||||
{{ warnf "[%s] unsupported argument at index %d (value: '%s')" $structure $key $val }}
|
||||
{{ else }}
|
||||
{{ warnf "[%s] unsupported argument value '%s'" $structure $val }}
|
||||
{{ end }}
|
||||
{{ $error = true }}
|
||||
{{ else }}
|
||||
{{ if and (not $val) $def.default }}{{ $val = $def.default }}{{ end }}
|
||||
|
||||
{{/* validate type */}}
|
||||
{{ $expected := slice | append $def.type }}
|
||||
{{ $extra := slice }}
|
||||
{{ range $expected }}
|
||||
{{ $alias := index $aliases . }}
|
||||
{{ if $alias }}{{ $extra = $extra | append $alias }}{{ end }}
|
||||
{{ end }}
|
||||
{{ if $extra }}{{ $expected = $expected | append $extra }}{{ end }}
|
||||
{{ $actual := printf "%T" $val }}
|
||||
|
||||
{{/* cast supported types from/to string */}}
|
||||
{{ if and (in $expected "bool") (in (slice "true" "false") $val) }}
|
||||
{{ $actual = "bool" }}
|
||||
{{ else if and (in $expected "int") (findRE `^-?\d+$` $val) }}
|
||||
{{ $actual = "int" }}
|
||||
{{ else if and (in $expected "float") (findRE `^(?:[1-9]\d*|0)?(?:\.\d+)?$` $val) }}
|
||||
{{ $actual = "float" }}
|
||||
{{ else if and (in $expected "string") (in (slice "bool" "int" "int64" "float" "float64") $actual) }}
|
||||
{{ $actual = "string" }}
|
||||
{{ $val = string $val }}
|
||||
{{ end }}
|
||||
|
||||
{{ if and $val (not (in $expected $actual)) }}
|
||||
{{ warnf "[%s] argument '%s': expected type '%s', got '%s'" $structure (string $key) (delimit $expected ", ") $actual }}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
|
||||
{{/* validate permitted values */}}
|
||||
{{ if and $def.options.values (eq $actual "string") }}
|
||||
{{ if and $val (not (in $def.options.values $val)) }}
|
||||
{{ warnf "[%s] argument '%s': unexpected value '%s'" $structure (string $key) $val }}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
{{ else if and $def.options.min (in (slice "int" "float" "float64") $actual) }}
|
||||
{{ if lt $val $def.options.min }}
|
||||
{{ warnf "[%s] argument '%s': value '%s' out of range [$d, $d]" $structure (string $key) $val $def.options.min $def.options.max}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
{{ else if and $def.options.max (in (slice "int" "float" "float64") $actual) }}
|
||||
{{ if (gt $val $def.options.max) }}
|
||||
{{ warnf "[%s] argument '%s': value '%s' out of range [$d, $d]" $structure (string $key) $val $def.options.min $def.options.max}}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{/* validate required arguments */}}
|
||||
{{ $max := len $args }}
|
||||
{{ $expected := 0 }}
|
||||
{{ range $key, $val := $definitions }}
|
||||
{{ $skip := false }}
|
||||
{{ $groups := slice | append $val.group }}
|
||||
{{ if and $group $val.group }}
|
||||
{{ $skip = not (in $groups $group )}}
|
||||
{{ end }}
|
||||
|
||||
{{ if and (not $skip) (not $val.optional) }}
|
||||
{{ if $namedArgs }}
|
||||
{{ if not (isset $args $key) }}
|
||||
{{ warnf "[%s] argument '%s': expected value" $structure $key }}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ $expected = add $expected 1 }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ if lt $max $expected }}
|
||||
{{ warnf "[%s] expected '%d' args, got '%d'" $structure $expected $max }}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ return $error }}
|
@@ -1,32 +0,0 @@
|
||||
<!--
|
||||
Returns true if the current version is older than the latest version defined in the docs section of the site
|
||||
parameters. The verification supports semver patterns MAJOR.MINOR.PATCH with an optional suffix.
|
||||
|
||||
Original code by solus on https://discourse.gohugo.io/t/sorting-semantic-version-numbers/40838/6.
|
||||
-->
|
||||
|
||||
{{ $current := .current }}
|
||||
{{ $latest := site.Params.docs.latest }}
|
||||
|
||||
{{- define "partials/padZeroPrefix.html" -}}
|
||||
{{- $padSize := 6 }}
|
||||
{{- $paddedString := replaceRE "(\\d+)" (print (strings.Repeat (sub $padSize 1) "0") "$1") . }}
|
||||
{{- $trimmedString := replaceRE (print "0+(\\d{" $padSize "})") "$1" $paddedString }}
|
||||
{{- return $trimmedString }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "partials/trimZeroPrefix.html" -}}
|
||||
{{- return replaceRE "0+(\\d+)" "$1" . }}
|
||||
{{- end -}}
|
||||
|
||||
{{- $isOlder := false -}}
|
||||
|
||||
{{- if and $current $latest }}
|
||||
{{- $versions := slice $current $latest }}
|
||||
{{- $paddedVersions := apply $versions "partial" "padZeroPrefix" "." }}
|
||||
{{- $sortedVersions := (sort $paddedVersions "value" "desc") }}
|
||||
{{- $sortedVersions = apply $sortedVersions "partial" "trimZeroPrefix" "." }}
|
||||
{{ $isOlder = ne (index $sortedVersions 0) $current }}
|
||||
{{- end -}}
|
||||
|
||||
{{- return $isOlder -}}
|
@@ -1,13 +0,0 @@
|
||||
<!--
|
||||
Purges any HTML comments from raw content, if applicable. The partial supports the following arguments:
|
||||
"page" Required page context, used to render shortcodes properly.
|
||||
"raw" Raw page content, e.g. .Page.RawContent.
|
||||
-->
|
||||
|
||||
{{ $page := .page -}}
|
||||
{{ $raw := .raw -}}
|
||||
{{- if site.Params.debugging.purgeHTMLComments -}}
|
||||
{{- $raw = replaceRE "<!--(.|\n)*?-->" "" $raw -}}
|
||||
{{- end -}}
|
||||
{{ $content := emojify $raw | $page.RenderString }}
|
||||
{{ return $content }}
|
@@ -1,16 +0,0 @@
|
||||
{{- $base := .base -}}
|
||||
{{- if not $base }}
|
||||
{{- errorf "partial [assets/utilities/URLJoin.html] - Expected param 'base'" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $path := .path -}}
|
||||
{{- if not $path }}
|
||||
{{- errorf "partial [assets/utilities/URLJoin.html] - Expected param 'path'" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $url := $path -}}
|
||||
{{- if not (hasPrefix $path "http") -}}
|
||||
{{- $url = printf "%s/%s" (strings.TrimSuffix "/" $base) $path -}}
|
||||
{{- end }}
|
||||
|
||||
{{- return $url -}}
|
@@ -1,65 +0,0 @@
|
||||
{{- $match := .match -}}
|
||||
{{- $filename := .filename -}}
|
||||
{{- if not (or $match $filename) -}}
|
||||
{{- errorf "partial [assets/bundle.html] - Expected match and filename" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $order := .order | default "asc"}}
|
||||
{{- $supportedOrder := slice "asc" "desc" -}}
|
||||
{{- if not (in $supportedOrder $order) -}}
|
||||
{{- errorf "partial [assets/bundle.html] - Invalid value for param 'order': %s" $order -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $modules := .modules -}}
|
||||
{{- $all := .all }}
|
||||
{{- $basepath := strings.TrimSuffix "/" .basepath -}}
|
||||
{{- $ext := trim (path.Ext (trim $match "{}")) "." -}}
|
||||
{{- if not $ext -}}
|
||||
{{- errorf "partial [assets/bundle.html] - Cannot derive file extension of match pattern: %s" $match -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $debugging := .debugging | default false -}}
|
||||
|
||||
{{- if $modules -}}
|
||||
{{- $match = trim $match "{}" -}}
|
||||
{{- $matches := slice $match -}}
|
||||
{{- range $index, $mod := $modules -}}
|
||||
{{- if $all }}
|
||||
{{- $matches = $matches | append (printf "%s/%s/**.%s" $basepath $mod $ext) -}}
|
||||
{{- else -}}
|
||||
{{- $matches = $matches | append (printf "%s/%s.%s" $basepath $mod $ext) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- $match = printf "{%s}" (delimit $matches ",") }}
|
||||
{{- end -}}
|
||||
|
||||
<!-- TODO: concat by module, then sorted by filename -->
|
||||
|
||||
{{ $matches := resources.Match $match }}
|
||||
{{ $files := slice }}
|
||||
{{ range $index, $file := $matches }}
|
||||
{{ $add := (dict "name" (strings.TrimSuffix (printf ".%s" $ext) $file.Name) "resource" $file ) }}
|
||||
{{ $files = $files | append $add }}
|
||||
{{ end }}
|
||||
|
||||
{{ $sorted := slice }}
|
||||
{{ $files = sort $files "name" }}
|
||||
{{- range $index, $file := $files -}}
|
||||
{{ $sorted = $sorted | append $file.resource }}
|
||||
{{- end -}}
|
||||
|
||||
{{- if $debugging -}}
|
||||
{{ warnf "Processing pattern: %s" $match}}
|
||||
{{- range $index, $file := $sorted -}}
|
||||
{{- warnf " - Processing file: %s" $file }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{ $bundle := "" }}
|
||||
{{ if gt (len $sorted) 0 }}
|
||||
{{ $bundle = $sorted | resources.Concat $filename -}}
|
||||
{{ else }}
|
||||
{{ $bundle = resources.FromString $filename "" }}
|
||||
{{ end -}}
|
||||
|
||||
{{- return $bundle -}}
|
@@ -1 +0,0 @@
|
||||
{{ if eq .format "long" }}{{ .date | time.Format ":date_long" }}{{ else }}{{ .date | time.Format ":date_medium" }}{{ end }}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user