Compare commits

...

58 Commits

Author SHA1 Message Date
Mark Dumay
713d1920a3 Merge pull request #703 from gethinode/validation
Bump package release
2024-01-04 15:14:21 +01:00
Mark Dumay
adc1212cd7 Merge branch 'main' into validation 2024-01-04 14:56:10 +01:00
mark
b8803d75fe Bump package release 2024-01-04 14:55:34 +01:00
github-actions[bot]
8006acb8c9 Merge pull request #702 from gethinode/dependabot/npm_and_yarn/cssnano-preset-advanced-6.0.3
Bump cssnano-preset-advanced from 6.0.2 to 6.0.3
2024-01-04 13:38:16 +00:00
dependabot[bot]
7be7e3b7f0 Bump cssnano-preset-advanced from 6.0.2 to 6.0.3
Bumps [cssnano-preset-advanced](https://github.com/cssnano/cssnano) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano-preset-advanced@6.0.2...cssnano-preset-advanced@6.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-04 13:32:05 +00:00
github-actions[bot]
a6c18c91e5 Merge pull request #701 from gethinode/dependabot/npm_and_yarn/cssnano-6.0.3
Bump cssnano from 6.0.2 to 6.0.3
2024-01-04 13:31:17 +00:00
dependabot[bot]
81c531e2b5 Bump cssnano from 6.0.2 to 6.0.3
Bumps [cssnano](https://github.com/cssnano/cssnano) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano@6.0.2...cssnano@6.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-04 13:24:59 +00:00
Mark Dumay
d66910740f Merge pull request #700 from gethinode/validation
Bump package release
2024-01-04 08:09:05 +01:00
Mark Dumay
3323bf500d Merge branch 'main' into validation 2024-01-03 19:00:21 +01:00
mark
3cc34d18e0 Bump package release 2024-01-03 18:59:49 +01:00
Mark Dumay
aeb050440f Merge pull request #699 from gethinode/validation
Fix alignment of cards in group
2024-01-03 17:34:29 +01:00
Mark Dumay
a9a6bd0d31 Merge branch 'main' into validation 2024-01-03 17:04:57 +01:00
Mark Dumay
2b921def52 Merge pull request #698 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-01-03 17:04:21 +01:00
mark
f5a1a97383 Fix alignment of cards in group 2024-01-03 16:59:05 +01:00
markdumay
c87b96f8f0 fix: update Hugo module dependencies 2024-01-03 15:57:10 +00:00
Mark Dumay
1def105bda Merge pull request #697 from gethinode/validation
Keep HTML whitespace to improve external cue visualization
2024-01-03 16:07:45 +01:00
Mark Dumay
1d67a30ece Merge branch 'main' into validation 2024-01-03 16:01:48 +01:00
mark
1a3d50ca17 Keep HTML whitespace to improve external cue visualiation 2024-01-03 15:40:30 +01:00
Mark Dumay
ce26722c96 Merge pull request #696 from gethinode/validation
Refactor argument validation of internal partials
2024-01-03 14:25:22 +01:00
Mark Dumay
f2aab26b6e Merge branch 'main' into validation 2024-01-03 14:15:39 +01:00
mark
10e086594b Structure validation of section-menu args 2024-01-03 14:11:37 +01:00
mark
30ea77182d Structure validation of sharing args 2024-01-03 14:06:53 +01:00
mark
e899d7d39a Structure validation of sidebar args 2024-01-03 13:39:48 +01:00
mark
3b2e780a20 Fix typo 2024-01-03 13:25:04 +01:00
mark
d443d89616 Structure validation of toc-dropdown args 2024-01-03 13:17:18 +01:00
mark
c981ac45d3 Structure validation of toc args 2024-01-03 13:11:15 +01:00
mark
ceabca3a43 Structure validation of section-header args 2024-01-03 13:03:04 +01:00
mark
99b6fcbc42 Adjust indentation 2024-01-03 12:59:06 +01:00
mark
dde79bf5d0 Structure validation of pagination args 2024-01-03 09:14:36 +01:00
mark
ff3e957558 Structure validation of page-alert args 2024-01-03 08:59:34 +01:00
mark
1466c7a927 Fix error message 2024-01-03 08:59:21 +01:00
mark
1a7c18d209 Structure validation of navbar-item args 2024-01-03 08:53:48 +01:00
mark
2c8ed7c494 Structure validation of list args 2024-01-03 08:02:42 +01:00
mark
0526b4c5e0 Adjust indentation 2024-01-03 08:02:04 +01:00
mark
c2f4e6bc48 Refine layout 2024-01-03 07:24:50 +01:00
mark
0cc5fcb33a Refine comments 2024-01-03 07:24:25 +01:00
mark
e461a9564f Adjust line breaks 2024-01-03 07:24:12 +01:00
Mark Dumay
183879d51c Merge pull request #695 from gethinode/validation
Drop built-in comments support
2024-01-02 15:53:53 +01:00
Mark Dumay
cddae05b53 Merge branch 'main' into validation 2024-01-02 15:44:49 +01:00
mark
67d831d898 Bump package release 2024-01-02 15:37:40 +01:00
mark
d726323220 Close #694 2024-01-02 15:36:45 +01:00
Mark Dumay
f76fea84cc Merge pull request #693 from gethinode/validation
Refine argument validation of modules
2024-01-02 15:23:00 +01:00
Mark Dumay
6ec24e12f7 Merge branch 'main' into validation 2024-01-02 15:07:11 +01:00
mark
cf27cce44d Bump package release 2024-01-02 15:05:31 +01:00
github-actions[bot]
6ea22d121f Merge pull request #692 from gethinode/dependabot/npm_and_yarn/eslint-plugin-n-16.6.1
Bump eslint-plugin-n from 16.6.0 to 16.6.1
2024-01-02 13:42:24 +00:00
dependabot[bot]
2d7bfaa9dc Bump eslint-plugin-n from 16.6.0 to 16.6.1
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.6.0 to 16.6.1.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.6.0...16.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-02 13:37:06 +00:00
Mark Dumay
0e62cc4fec Merge pull request #691 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-01-02 12:59:52 +01:00
markdumay
ae0307092f fix: update Hugo module dependencies 2024-01-02 11:03:20 +00:00
Mark Dumay
2ebf6fe7fa Merge pull request #690 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-01-02 12:02:32 +01:00
mark
f9805de74c Adjust display of min-max range 2024-01-02 11:47:24 +01:00
mark
20b7b6b95c Fix type of pre menu 2024-01-02 06:59:05 +01:00
mark
c2beca3504 Update copyright notice 2024-01-01 12:32:39 +01:00
markdumay
7414a1badf fix: update Hugo module dependencies 2023-12-31 03:16:34 +00:00
Mark Dumay
cd5f7e08c4 Merge pull request #689 from gethinode/validation
Move utilities to separate module
2023-12-30 11:49:46 +01:00
Mark Dumay
fd804fa29a Merge branch 'main' into validation 2023-12-30 11:26:26 +01:00
mark
08c310c59e Update netlify build env 2023-12-30 11:25:35 +01:00
mark
46bde0918f Move utilities to separate module 2023-12-30 11:25:28 +01:00
mark
a77c3aa347 Improve persona args 2023-12-30 06:46:04 +01:00
118 changed files with 667 additions and 1046 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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";

View File

@@ -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";

View File

@@ -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;
}

View File

@@ -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

View File

@@ -189,14 +189,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"

View File

@@ -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' \

View File

@@ -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`

View File

@@ -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

View File

@@ -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

55
data/structures/list.yml Normal file
View 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

View 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.

View 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

View 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

View File

@@ -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

View 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.

View 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

View 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

View 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.

View File

@@ -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
View 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

View File

@@ -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 -> ../..'

View File

@@ -181,15 +181,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 +188,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"

View File

@@ -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' \

View File

@@ -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" >}})

View File

@@ -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" >}})

View File

@@ -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" >}})

9
go.mod
View File

@@ -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.0 // 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/gethinode/mod-leaflet v0.4.0 // indirect
github.com/gethinode/mod-lottie v1.4.0 // indirect
github.com/gethinode/mod-utils v1.0.0 // indirect
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3 // indirect
github.com/twbs/bootstrap v5.3.2+incompatible // indirect
)

10
go.sum
View File

@@ -40,6 +40,8 @@ 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-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 +74,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 +98,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,6 +112,10 @@ 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-utils v1.0.0 h1:cqHm2xS5uDiJzRm1KfHaNbq6uMVDKLhQa8/BuTZ1nhY=
github.com/gethinode/mod-utils v1.0.0/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/twbs/bootstrap v5.3.2+incompatible h1:tuiO5acc6xnZUR77Sbi5aKWXxjYxbmsSbJwYrhAKoQQ=

View File

@@ -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 -}}

View File

@@ -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" -}}

View File

@@ -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>

View File

@@ -37,6 +37,6 @@
{{ end }}
{{ if $toc }}
{{ partial "assets/toc.html" (dict "page" . "download" $download) }}
{{ partial "assets/toc.html" (dict "page" .) }}
{{ end -}}
</div>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->
@@ -85,7 +85,6 @@
"class" (printf "h-100 %s" $class)
"color" $color
"footer" $footer
"gutter" $gutter
"header" $header
"loading" $loading
"orientation" $orientation

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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 -}}

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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" (partial "utilities/GetDescription.html" $item)) }}
</div>
</div>
</div>
</div>
{{ end -}}
</div>
{{ end -}}
</div>
{{ end }}

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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 }}&nbsp;{{ $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 }}&nbsp;{{ $suffix }}{{ end -}}
</a>
{{ end }}

View File

@@ -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.
-->

View File

@@ -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>

View File

@@ -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 }}

View File

@@ -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.
-->

View File

@@ -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 }}

View File

@@ -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 -}}

View File

@@ -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")

View File

@@ -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 -}}

View File

@@ -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 -}}

View File

@@ -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.
-->

View File

@@ -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>

View File

@@ -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 -}}

View File

@@ -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.
-->

View File

@@ -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 }}

View File

@@ -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 -}}

View File

@@ -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 }}

View File

@@ -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 -}}

View File

@@ -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 }}

View File

@@ -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) -}}

View File

@@ -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 -}}

View File

@@ -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 }}

View File

@@ -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 -}}

View File

@@ -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 -}}

View File

@@ -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 -}}

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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 -}}

View File

@@ -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 }}

View File

@@ -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 -}}

View File

@@ -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 -}}

View File

@@ -1 +0,0 @@
{{ if eq .format "long" }}{{ .date | time.Format ":date_long" }}{{ else }}{{ .date | time.Format ":date_medium" }}{{ end }}

View File

@@ -1,5 +0,0 @@
{{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}}
Last updated: {{ $lastmodstr }}
{{ with .GitInfo }}
&bull;&nbsp;<a href="{{ site.Params.docs.github | default site.Params.schema.github }}/commit/{{ .Hash }}">{{ .Subject }} ({{ .AbbreviatedHash }})</a>
{{ end -}}

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->
@@ -68,7 +68,7 @@
{{ if eq (printf "%T" $val.options.max) "int" }}{{ $max = int $val.options.max }}{{ end }}
{{ end }}
{{ if and (eq (printf "%T" $min) "int") (eq (printf "%T" $max) "int") }}
{{ $comment = printf "%s %s: [%d, %d]." $comment (T "supportedValues") $min $max }}
{{ $comment = printf "%s %s: [%d - %d]." $comment (T "supportedValues") $min $max }}
{{ else if (eq (printf "%T" $min) "int") }}
{{ $comment = printf "%s %s: >=%d." $comment (T "supportedValues") $min }}
{{ else if (eq (printf "%T" $max) "int") }}

View File

@@ -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.
-->

View File

@@ -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.
-->
@@ -25,5 +25,5 @@
<!-- Main code -->
{{- if not $error -}}
{{- partial "assets/breadcrumb.html" (dict "page" $page) -}}
{{- partial "assets/breadcrumb.html" (dict "page" $page) -}}
{{- end -}}

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.
-->

View File

@@ -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.
-->

View File

@@ -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.
-->

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