mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-07 18:14:28 +00:00
Compare commits
48 Commits
v0.16.0-be
...
v0.16.6
Author | SHA1 | Date | |
---|---|---|---|
![]() |
becba931bc | ||
![]() |
03e3c5b3ee | ||
![]() |
311aa3b957 | ||
![]() |
62db3eb9db | ||
![]() |
56ea9eec47 | ||
![]() |
b845e210b7 | ||
![]() |
e8bba05213 | ||
![]() |
74d0d625c6 | ||
![]() |
9d98a3568c | ||
![]() |
dc55571f7a | ||
![]() |
b7ab9d5690 | ||
![]() |
5d20be19a8 | ||
![]() |
ecae077e2d | ||
![]() |
132c316ff0 | ||
![]() |
a3b9081b4d | ||
![]() |
8a689a95de | ||
![]() |
9bd04a5b2a | ||
![]() |
8dc884f846 | ||
![]() |
4cb558440b | ||
![]() |
0d78918aa4 | ||
![]() |
ba7ab907ef | ||
![]() |
af557ac054 | ||
![]() |
9ada0eee80 | ||
![]() |
ae3e20b596 | ||
![]() |
c49e6f14c1 | ||
![]() |
b4f6b1aa3d | ||
![]() |
962549f2ae | ||
![]() |
28601323c4 | ||
![]() |
a11ee72174 | ||
![]() |
8e91440261 | ||
![]() |
19879c4ecc | ||
![]() |
810dfef311 | ||
![]() |
c42fcefa73 | ||
![]() |
a3c417e378 | ||
![]() |
2bee381906 | ||
![]() |
244a3f7496 | ||
![]() |
563b526cea | ||
![]() |
fa7fad67b5 | ||
![]() |
966906778d | ||
![]() |
135128a5f9 | ||
![]() |
25663974ce | ||
![]() |
af5643f98f | ||
![]() |
743126d9b9 | ||
![]() |
b0187e3a75 | ||
![]() |
c7613ab7a8 | ||
![]() |
2a6a119762 | ||
![]() |
b556f4f4ec | ||
![]() |
9fa95da778 |
@@ -1,5 +1,5 @@
|
||||
assets/js/critical/color.js
|
||||
assets/js/analytics.js
|
||||
assets/js/color.js
|
||||
assets/js/flexsearch.js
|
||||
assets/js/vendor
|
||||
node_modules
|
||||
|
@@ -56,10 +56,11 @@
|
||||
- [PageSpeed Insights][pagespeed]
|
||||
- [Mozilla Observatory][observatory]
|
||||
|
||||
Hinode is a clean documentation and blog theme for [Hugo][hugo], an open-source static site generator. Based on the [Bootstrap 5][bootstrap] framework, the rendered site is fast, secure, and responsive. Hinode uses [FlexSearch][flexsearch] to enable full text search across your site. Finally, the theme uses [Node Package Manager][npm] to automate the build process and to keep track of dependencies.
|
||||
Hinode is a clean documentation and blog theme for [Hugo][hugo], an open-source static site generator. Based on the [Bootstrap 5][bootstrap] framework, the rendered site is fast, secure, and responsive. Hinode uses [FlexSearch][flexsearch] to enable full text search across your site. Finally, the theme supports [Node Package Manager][npm] to automate the build process and to keep track of dependencies.
|
||||
|
||||
Additional features include:
|
||||
|
||||
- Flexible configuration of Hugo modules
|
||||
- Switching between light mode and dark mode
|
||||
- Support for multiple languages
|
||||
- Reusable Bootstrap components through configurable shortcodes and partials
|
||||
|
@@ -1,3 +1,5 @@
|
||||
{{- if site.Params.main.enableDarkMode -}}
|
||||
|
||||
/*!
|
||||
* Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
|
||||
* Copyright 2011-2022 The Bootstrap Authors
|
||||
@@ -68,3 +70,5 @@
|
||||
})
|
||||
})
|
||||
})()
|
||||
|
||||
{{- end -}}
|
@@ -5,10 +5,6 @@
|
||||
@import "common/variables.scss";
|
||||
@import "common/icons.scss";
|
||||
|
||||
{{ if not (in site.Params.modules.core "bootstrap") }}
|
||||
{{ errorf "Bootstrap is a required module, please add it to 'modules.core' in your site parameters" }}
|
||||
{{ end }}
|
||||
|
||||
// Import Bootstrap configuration (mounted by core Bootstrap module)
|
||||
@import "bootstrap.scss";
|
||||
|
||||
|
@@ -10,6 +10,7 @@
|
||||
|
||||
.syntax-highlight {
|
||||
background-color: var(--bs-light) if($enable-important-utilities, !important, null);
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.preview-background {
|
||||
@@ -29,6 +30,7 @@
|
||||
|
||||
.syntax-highlight {
|
||||
background-color: var(--bs-tertiary-bg) if($enable-important-utilities, !important, null);
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.bg,
|
||||
|
@@ -4,6 +4,7 @@
|
||||
description = "Hinode is a clean documentation and blog theme for your Hugo site based on Bootstrap 5."
|
||||
enableDarkMode = true
|
||||
modes = ["light", "dark"]
|
||||
canonifyAssetsURLs = false
|
||||
# toml-docs-end main
|
||||
|
||||
# toml-docs-start modules
|
||||
|
@@ -22,6 +22,7 @@ const purgecss = require('@fullhuman/postcss-purgecss')({
|
||||
'./assets/scss/theme/fonts.scss',
|
||||
'./assets/scss/theme/theme.scss',
|
||||
'./_vendor/github.com/gethinode/mod-flexsearch/assets/scss/modules/flexsearch/flexsearch.scss',
|
||||
'./_vendor/github.com/gethinode/mod-katex/dist/katex.scss',
|
||||
'./_vendor/github.com/gethinode/mod-leaflet/dist/leaflet.scss',
|
||||
'./_vendor/github.com/twbs/bootstrap/scss/_carousel.scss',
|
||||
'./_vendor/github.com/twbs/bootstrap/scss/_dropdown.scss',
|
||||
|
6
go.mod
6
go.mod
@@ -4,8 +4,8 @@ go 1.19
|
||||
|
||||
require (
|
||||
github.com/gethinode/mod-bootstrap v1.1.0 // indirect
|
||||
github.com/gethinode/mod-flexsearch v1.1.1 // indirect
|
||||
github.com/gethinode/mod-fontawesome v1.2.0 // indirect
|
||||
github.com/gethinode/mod-flexsearch v1.1.4 // indirect
|
||||
github.com/gethinode/mod-fontawesome v1.2.1 // indirect
|
||||
github.com/gethinode/mod-katex v1.0.2 // indirect
|
||||
github.com/gethinode/mod-leaflet v0.3.1 // indirect
|
||||
github.com/gethinode/mod-leaflet v0.3.3 // indirect
|
||||
)
|
||||
|
10
go.sum
10
go.sum
@@ -8,12 +8,20 @@ github.com/gethinode/mod-flexsearch v1.1.0 h1:7BCMyQDlYlskNXuazt8Jg/jg9WREexu2xV
|
||||
github.com/gethinode/mod-flexsearch v1.1.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||
github.com/gethinode/mod-flexsearch v1.1.1 h1:zHypfKR/rWPAwqNXvo09Pp3vGqU4w3r7d2VtMudIzkI=
|
||||
github.com/gethinode/mod-flexsearch v1.1.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||
github.com/gethinode/mod-flexsearch v1.1.2 h1:vA/jHxLq9xxkYGS9cmAoLNIkEBW+iLVCcQ8qKyEa+R4=
|
||||
github.com/gethinode/mod-flexsearch v1.1.2/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||
github.com/gethinode/mod-flexsearch v1.1.3 h1:lzmSvnJL6ABjp03avYzSvJJ7hw01CpHap1JGUbDIELg=
|
||||
github.com/gethinode/mod-flexsearch v1.1.3/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||
github.com/gethinode/mod-flexsearch v1.1.4 h1:dJvwBxYlLe/VGlctLn8k89STJ5toATIjNnXIlNeanOY=
|
||||
github.com/gethinode/mod-flexsearch v1.1.4/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||
github.com/gethinode/mod-fontawesome v1.0.2 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg=
|
||||
github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||
github.com/gethinode/mod-fontawesome v1.1.0 h1:rsDzUI+3ZlS/do2ff3ne8/z3KwHeysmuA+WsXlumXXk=
|
||||
github.com/gethinode/mod-fontawesome v1.1.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||
github.com/gethinode/mod-fontawesome v1.2.0 h1:2nWYEjpUKu6IJ6kOh2WDlDUqRQ/dUGw6mJWIdMTA3O0=
|
||||
github.com/gethinode/mod-fontawesome v1.2.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||
github.com/gethinode/mod-fontawesome v1.2.1 h1:k7z5ZRsNxCohZjlZm8jVAzmTPk17c6xMYBAjAXHs13I=
|
||||
github.com/gethinode/mod-fontawesome v1.2.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||
github.com/gethinode/mod-katex v1.0.0 h1:me/3dIIZBkfk1mRIFt8QiAGYwYDoSG5bc2hHRtIutFc=
|
||||
github.com/gethinode/mod-katex v1.0.0/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
|
||||
github.com/gethinode/mod-katex v1.0.1 h1:809QUztxmKgMNchU+v03iMO7Ma+ISc3ZzhXYauc21rs=
|
||||
@@ -24,3 +32,5 @@ github.com/gethinode/mod-leaflet v0.2.3 h1:QQI4h+IH0jZ7fx4q0um2YIEiYBoW3OAfW8qHz
|
||||
github.com/gethinode/mod-leaflet v0.2.3/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
|
||||
github.com/gethinode/mod-leaflet v0.3.1 h1:H5MaOa+BB1KuVw7abTqfIn/SNzzRsAyx/WQoSe+2Ykc=
|
||||
github.com/gethinode/mod-leaflet v0.3.1/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
|
||||
github.com/gethinode/mod-leaflet v0.3.3 h1:isnjja6VRFvVWBatYSouh46TXSJg2C4/E2BQTrQw+yI=
|
||||
github.com/gethinode/mod-leaflet v0.3.3/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
|
||||
|
@@ -37,6 +37,8 @@
|
||||
translation: "Wörter"
|
||||
- id: copyright
|
||||
translation: "Copyright"
|
||||
- id: rights
|
||||
translation: "Alle Rechte vorbehalten"
|
||||
- id: photoBy
|
||||
translation: "Foto von"
|
||||
- id: photoOn
|
||||
|
@@ -45,6 +45,8 @@
|
||||
translation: "words"
|
||||
- id: copyright
|
||||
translation: "Copyright"
|
||||
- id: rights
|
||||
translation: "All rights reserved"
|
||||
- id: photoBy
|
||||
translation: "Photo by"
|
||||
- id: photoOn
|
||||
@@ -138,7 +140,7 @@
|
||||
- id: show
|
||||
translation: "Show"
|
||||
- id: comments
|
||||
translation: "comments"
|
||||
translation: "Comments"
|
||||
|
||||
# Related posts
|
||||
- id: seeAlso
|
||||
|
@@ -37,6 +37,8 @@
|
||||
translation: "woorden"
|
||||
- id: copyright
|
||||
translation: "Copyright"
|
||||
- id: rights
|
||||
translation: "Alle rechten voorbehouden"
|
||||
- id: photoBy
|
||||
translation: "Foto van"
|
||||
- id: photoOn
|
||||
@@ -129,7 +131,7 @@
|
||||
- id: show
|
||||
translation: "Tonen"
|
||||
- id: comments
|
||||
translation: "commentaar"
|
||||
translation: "Reacties"
|
||||
|
||||
# Related posts
|
||||
- id: seeAlso
|
||||
|
@@ -12,6 +12,10 @@
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if and .IsPage (not (in .Site.Params.modules.core "bootstrap")) -}}
|
||||
{{- errorf "Bootstrap is a required module, please add it to 'modules.core' in your site parameters" -}}
|
||||
{{- end -}}
|
||||
|
||||
<!doctype html>
|
||||
<html lang="{{ .Site.Language.Lang }}" class="no-js">
|
||||
<head>
|
||||
@@ -19,9 +23,7 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{- if site.Params.main.enableDarkMode -}}
|
||||
{{- partial "footer/scripts.html" (dict "filename" "js/critical.bundle.js" "match" "js/critical/**.js" "header" true "page" .) -}}
|
||||
{{- end -}}
|
||||
<div class="d-flex flex-column min-vh-100{{ if and .IsHome .Site.Params.home.style }} {{ .Site.Params.home.style }}{{ end }}">
|
||||
<div class="{{ if .Site.Params.navigation.fixed }}mb-4{{ end }}">
|
||||
{{- partial "assets/navbar.html" (dict
|
||||
|
@@ -67,7 +67,7 @@
|
||||
{{ with .NextInSection -}}
|
||||
{{ $next := . -}}
|
||||
{{ with .OutputFormats.Get "html" -}}
|
||||
<a class="next" href="{{ $next.Permalink }}"><i class="fas fa-arrow-left"></i> {{ $next.Title }}</a>
|
||||
<a class="next" href="{{ $next.RelPermalink }}"><i class="fas fa-arrow-left"></i> {{ $next.Title }}</a>
|
||||
{{- end -}}
|
||||
{{ end -}}
|
||||
</div>
|
||||
@@ -75,7 +75,7 @@
|
||||
{{ with .PrevInSection -}}
|
||||
{{ $prev := . -}}
|
||||
{{ with .OutputFormats.Get "html" -}}
|
||||
<a class="previous" href="{{ $prev.Permalink }}">{{ $prev.Title }} <i class="fas fa-arrow-right"></i></a>
|
||||
<a class="previous" href="{{ $prev.RelPermalink }}">{{ $prev.Title }} <i class="fas fa-arrow-right"></i></a>
|
||||
{{- end -}}
|
||||
{{ end -}}
|
||||
</div>
|
||||
|
@@ -7,10 +7,10 @@
|
||||
{{ $square150 := .Resize "150x150 CatmullRom" }}
|
||||
{{ $wide310 := .Fill "310x150 CatmullRom" }}
|
||||
{{ $square310 := .Resize "310x310 CatmullRom" }}
|
||||
<square70x70logo src="{{ $square70.Permalink }}" />
|
||||
<square150x150logo src="{{ $square150.Permalink }}" />
|
||||
<wide310x150logo src="{{ $wide310.Permalink }}" />
|
||||
<square310x310logo src="{{ $square310.Permalink }}" />
|
||||
<square70x70logo src="{{ $square70.RelPermalink }}" />
|
||||
<square150x150logo src="{{ $square150.RelPermalink }}" />
|
||||
<wide310x150logo src="{{ $wide310.RelPermalink }}" />
|
||||
<square310x310logo src="{{ $square310.RelPermalink }}" />
|
||||
{{ end }}
|
||||
<TileColor>#000000</TileColor>
|
||||
</tile>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
{{- range $index, $item := .Page.Ancestors.Reverse -}}
|
||||
{{- $title := .Title -}}
|
||||
{{- if .IsHome }}{{ $title = T "home" }}{{ end -}}
|
||||
{{- $address := or .Permalink (.Params.Redirect | absLangURL) -}}
|
||||
{{- $address := or .RelPermalink (.Params.Redirect | relLangURL) -}}
|
||||
{{ if $address }}
|
||||
<li class="breadcrumb-item"><a href="{{ $address }}">{{ $title }}</a></li>
|
||||
{{ else }}
|
||||
|
@@ -107,12 +107,12 @@
|
||||
"orientation" $orientation
|
||||
) -}}
|
||||
|
||||
{{- if $element.Permalink -}}
|
||||
{{- if $element.RelPermalink -}}
|
||||
{{- $params = merge $params (dict "path" $element.File.Path) -}}
|
||||
{{- else -}}
|
||||
{{- $params = merge $params (dict
|
||||
"title" $element.Title
|
||||
"href" $element.Permalink
|
||||
"href" $element.RelPermalink
|
||||
"description" (or $element.Description $element.Content)
|
||||
"thumbnail" $element.Params.thumbnail
|
||||
"icon" $element.Params.icon
|
||||
|
@@ -111,7 +111,7 @@
|
||||
|
||||
{{- with $page -}}
|
||||
{{- if not $title }}{{ $title = .Title }}{{ end -}}
|
||||
{{- if not $href }}{{ $href = .Permalink }}{{ end -}}
|
||||
{{- if not $href }}{{ $href = .RelPermalink }}{{ end -}}
|
||||
{{- if not $description }}{{ $description = .Description }}{{ end -}}
|
||||
{{- if not $thumbnail }}{{ $thumbnail = .Params.thumbnail }}{{ end -}}
|
||||
{{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{{- $params := .Site.Params.comments -}}
|
||||
{{- with $params -}}
|
||||
<h2>Comments</h2>
|
||||
<h2>{{ T "comments" }}</h2>
|
||||
<script src="https://utteranc.es/client.js"
|
||||
repo="{{ $params.repo }}"
|
||||
issue-term="{{ default "pathname" $params.issueTerm }}"
|
||||
|
@@ -1,16 +0,0 @@
|
||||
{{- $icon := .icon -}}
|
||||
{{- if not $icon -}}
|
||||
{{- errorf "partial [assets/icon.html] - Expected value for param 'icon'" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $icon_class := split $icon " " -}}
|
||||
{{- $attr := delimit (after 1 $icon_class) " " -}}
|
||||
{{- if eq (index $icon_class 0) "fas" -}}
|
||||
<i class="fa-solid fa-{{ $attr}}"></i>
|
||||
{{- else if eq (index $icon_class 0) "fab" -}}
|
||||
<i class="fa-brands fa-{{ $attr }}"></i>
|
||||
{{- else if eq (index $icon_class 0) "fa" -}}
|
||||
<i class="fa-regular fa-{{ $attr }}"></i>
|
||||
{{- else -}}
|
||||
{{- errorf "partial [assets/icon.html] - Unrecognized icon class: %s" $icon_class -}}
|
||||
{{- end -}}
|
@@ -15,6 +15,7 @@
|
||||
-->
|
||||
|
||||
{{- $validRatios := slice "1x1" "4x3" "16x9" "21x9" -}}
|
||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||
{{- $ratio := .ratio -}}
|
||||
{{- $url := .url -}}
|
||||
{{- $mode := false -}}
|
||||
@@ -68,6 +69,7 @@
|
||||
|
||||
<!-- Generate a image set of type webp -->
|
||||
{{- define "partials/image-scaled.html " -}}
|
||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||
{{- $img := .img -}}
|
||||
{{- $ratio := .ratio -}}
|
||||
{{- $imgset := "" -}}
|
||||
@@ -98,7 +100,11 @@
|
||||
{{- $scaled = $img.Fit (printf "%s webp" $dim) -}}
|
||||
{{- end -}}
|
||||
{{- $scaled = $scaled | resources.Copy (replace $img.RelPermalink $clean (printf "-%s.webp" $dim)) -}}
|
||||
{{- if $absoluteURL -}}
|
||||
{{- $imgset = printf "%s, %s %sw" $imgset $scaled.Permalink (index $widths $index) -}}
|
||||
{{- else -}}
|
||||
{{- $imgset = printf "%s, %s %sw" $imgset $scaled.RelPermalink (index $widths $index) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- $imgset = strings.TrimPrefix ", " $imgset -}}
|
||||
{{- end -}}
|
||||
@@ -108,6 +114,7 @@
|
||||
|
||||
<!-- Define the img with optional caption -->
|
||||
{{- define "partials/image-definition.html" -}}
|
||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||
{{- $ratio := .ratio -}}
|
||||
{{- $url := .url -}}
|
||||
{{- $outerClass := .outerClass -}}
|
||||
@@ -125,7 +132,11 @@
|
||||
{{- $img := partial "utilities/GetImage.html" (dict "url" $url) -}}
|
||||
{{- if $img -}}
|
||||
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio) -}}
|
||||
{{- if $absoluteURL -}}
|
||||
{{- $fallbackURL = $fallback.Permalink -}}
|
||||
{{- else -}}
|
||||
{{- $fallbackURL = $fallback.RelPermalink -}}
|
||||
{{- end -}}
|
||||
{{- $imgset = partial "partials/image-scaled.html " (dict "img" $img "ratio" $ratio) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
@@ -145,7 +156,7 @@
|
||||
srcset="{{ . }}"
|
||||
sizes="100vw"
|
||||
{{- end }}
|
||||
src="{{ absURL $fallbackURL }}"
|
||||
src="{{ $fallbackURL }}"
|
||||
alt="{{ $title }}">
|
||||
</div>
|
||||
{{- if $caption -}}
|
||||
|
@@ -93,6 +93,7 @@
|
||||
</li>
|
||||
{{- end -}}
|
||||
|
||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||
{{- $supportedFlags := slice "true" "false" -}}
|
||||
|
||||
{{- $id := printf "navbar-collapse-%d" 0 -}}
|
||||
@@ -105,11 +106,14 @@
|
||||
{{- errorf "partial [assets/navbar.html] - Missing value for param 'page'" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $menuName := "main" }}
|
||||
{{- with .menus }}{{ $menuName = .}}{{ end -}}
|
||||
{{- $defaultMenu := "main" }}
|
||||
{{- $menuName := $defaultMenu }}
|
||||
{{- with .menus }}{{ $menuName = . }}{{ end -}}
|
||||
{{- $menus := index site.Menus $menuName -}}
|
||||
{{- if or (ne (printf "%T" $menus) "navigation.Menu") (ne (index $menus 0).Menu $menuName) -}}
|
||||
{{- if ne $menuName $defaultMenu }}
|
||||
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'menus': %s" $menuName -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $size := "md" -}}
|
||||
@@ -147,7 +151,7 @@
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $enableDarkMode := default true site.Params.main.enableDarkMode -}}
|
||||
{{- $enableDarkMode := default false site.Params.main.enableDarkMode -}}
|
||||
{{- with .mode -}}
|
||||
{{- $darkModeParam := . -}}
|
||||
{{- if in $supportedFlags $darkModeParam -}}
|
||||
@@ -202,7 +206,7 @@
|
||||
<!-- Insert the brand logo or name -->
|
||||
<a class="navbar-brand mx-auto" href="{{ site.Home.RelPermalink }}">
|
||||
{{- if $logo -}}
|
||||
<img src="{{ $logo }}" alt="{{ $title }} logo" height="30">
|
||||
<img src="{{if $absoluteURL }}{{ absURL $logo }}{{ else }}{{ $logo }}{{ end }}" alt="{{ $title }} logo" height="30">
|
||||
{{- else -}}
|
||||
<span class="fw-bold">{{ $title }}</span>
|
||||
{{- end -}}
|
||||
@@ -238,7 +242,7 @@
|
||||
{{- end -}}
|
||||
|
||||
<!-- Insert divider if applicable -->
|
||||
{{- if or $enableLanguage $enableVersions -}}
|
||||
{{- if and $menus (or $enableLanguage $enableVersions) -}}
|
||||
<li class="nav-item py-2 py-md-1 col-12 col-md-auto d-none d-{{ $size }}-block">
|
||||
<div class="vr d-none d-md-flex h-100 mx-md-2"></div>
|
||||
</li>
|
||||
@@ -258,7 +262,7 @@
|
||||
<ul class="dropdown-menu dropdown-menu-end ">
|
||||
{{- if $page.IsTranslated -}}
|
||||
{{- range $page.AllTranslations -}}
|
||||
<li><a class="dropdown-item {{ if eq .Language.Lang $currentLang }}active{{ end }}" href="{{ .Permalink }}">{{ .Language.LanguageName }}</a></li>
|
||||
<li><a class="dropdown-item {{ if eq .Language.Lang $currentLang }}active{{ end }}" href="{{ .RelPermalink }}">{{ .Language.LanguageName }}</a></li>
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{- range site.Languages -}}
|
||||
|
@@ -49,7 +49,7 @@
|
||||
|
||||
{{- with $page -}}
|
||||
{{- if not $title }}{{ $title = .Title }}{{ end -}}
|
||||
{{- if not $href }}{{ $href = .Permalink }}{{ end -}}
|
||||
{{- if not $href }}{{ $href = .RelPermalink }}{{ end -}}
|
||||
{{- if not $content }}{{ $content = .Content }}{{ end -}}
|
||||
{{- if not $thumbnail }}{{ $thumbnail = .Params.thumbnail }}{{ end -}}
|
||||
{{- end -}}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<footer class="container-fluid text-center p-3">
|
||||
<div class="container-xxl text-center">
|
||||
<small class="text-secondary">
|
||||
{{- $copyright := printf "%s © %s %s All rights reserved." (i18n "copyright") (dateFormat "2006" now) .Site.Title }}
|
||||
{{- $copyright := printf "%s © %s %s %s." (T "copyright") (dateFormat "2006" now) .Site.Title (T "rights") }}
|
||||
{{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }}
|
||||
{{ .Site.Params.footer.license | safeHTML }}
|
||||
</small>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||
{{- $filename := .filename | default "js/main.bundle.js" -}}
|
||||
{{- $match := .match | default "{js/*.js,js/vendor/**.js}" -}}
|
||||
{{- $page := .page -}}
|
||||
@@ -23,9 +24,11 @@
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{- if not hugo.IsProduction -}}
|
||||
<script src="{{ $js.Permalink }}"></script>
|
||||
{{ else -}}
|
||||
{{- if gt (len $js.Content) 0 -}}
|
||||
{{- if not hugo.IsProduction -}}
|
||||
<script src="{{ if $absoluteURL }}{{ $js.Permalink }}{{ else }}{{ $js.RelPermalink }}{{ end }}"></script>
|
||||
{{ else -}}
|
||||
{{ $js = $js | minify | fingerprint -}}
|
||||
<script src="{{ $js.Permalink }}" integrity="{{ $js.Data.Integrity }}" crossorigin="anonymous"></script>
|
||||
<script src="{{ if $absoluteURL }}{{ $js.Permalink }}{{ else }}{{ $js.RelPermalink }}{{ end }}" integrity="{{ $js.Data.Integrity }}" crossorigin="anonymous"></script>
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
@@ -1,10 +1,11 @@
|
||||
<!-- Source: https://davelage.com/posts/hugo-favicons/ -->
|
||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||
{{ if .Site.Params.favicon.logo -}}
|
||||
{{ $favicon := resources.Get .Site.Params.favicon.logo -}}
|
||||
{{ range $i := .Site.Params.favicon.sizes -}}
|
||||
{{ $image := $favicon.Resize (printf "%dx%d CatmullRom" $i $i) -}}
|
||||
<link rel="icon" type="image/png" sizes="{{$i}}x{{$i}}" href="{{ $image.Permalink }}">
|
||||
<link rel="icon" type="image/png" sizes="{{$i}}x{{$i}}" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
|
||||
{{ end -}}
|
||||
{{ $image := $favicon.Resize "180x CatmullRom" -}}
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ $image.Permalink }}">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
|
||||
{{ end -}}
|
@@ -11,7 +11,7 @@
|
||||
|
||||
Variable names are converted from kebab case to snake case to make them compatible with Hugo's variable naming
|
||||
convention. For example, the css variable '--accordion-icon-active-color' is available as
|
||||
''.accordion_icon_active_color' within the Hugo template. The processed svg files are published to the "icons"
|
||||
'.accordion_icon_active_color' within the Hugo template. The processed svg files are published to the "icons"
|
||||
folder.
|
||||
|
||||
The partial supports the following arguments:
|
||||
|
@@ -1,3 +1,4 @@
|
||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||
{{- $source := .source | default "scss/app.scss" -}}
|
||||
{{- $target := .target | default "css/main.css" -}}
|
||||
{{- $page := .page -}}
|
||||
@@ -6,7 +7,7 @@
|
||||
{{- $modules := "" -}}
|
||||
{{ if $core }}
|
||||
{{- if reflect.IsSlice site.Params.modules.excludeSCSS -}}
|
||||
{{- $modules = complement site.Params.modules.excludeSCSS site.Params.modules.core -}}
|
||||
{{- $modules = complement site.Params.modules.excludeSCSS (or site.Params.modules.core slice) -}}
|
||||
{{ else }}
|
||||
{{- $modules = site.Params.modules.core -}}
|
||||
{{ end }}
|
||||
@@ -43,8 +44,8 @@
|
||||
{{- end -}}
|
||||
|
||||
{{- if not hugo.IsProduction -}}
|
||||
<link rel="stylesheet" href="{{ $css.Permalink }}">
|
||||
<link rel="stylesheet" href="{{ if $absoluteURL }}{{ $css.Permalink }}{{ else }}{{ $css.RelPermalink }}{{ end }}">
|
||||
{{- else -}}
|
||||
{{- $css = $css | fingerprint | resources.PostProcess -}}
|
||||
<link rel="stylesheet" href="{{ $css.Permalink }}" integrity="{{ $css.Data.Integrity }}" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="{{ if $absoluteURL }}{{ $css.Permalink }}{{ else }}{{ $css.RelPermalink }}{{ end }}" integrity="{{ $css.Data.Integrity }}" crossorigin="anonymous">
|
||||
{{- end -}}
|
@@ -44,13 +44,23 @@
|
||||
{{ errorf "Invalid value for param 'show': %s" $showParam -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ $fullParam := "true" -}}
|
||||
{{ $full := true -}}
|
||||
{{ with .Get "full" }}{{ $fullParam = . }}{{ end -}}
|
||||
{{ if in $supportedFlags $fullParam -}}
|
||||
{{ if eq $fullParam "true" }}{{ $full = true }}{{ else }}{{ $full = false }}{{ end -}}
|
||||
{{ else -}}
|
||||
{{ errorf "Invalid value for param 'full': %s" $fullParam -}}
|
||||
{{ end -}}
|
||||
|
||||
{{- /* If any parameters are missing, print an error and exit */ -}}
|
||||
{{- if or (not $name) (not $file) -}}
|
||||
{{- errorf "%s: %q: Missing required parameters! Got: name=%q file=%q!" .Position .Name $name $file -}}
|
||||
{{- else -}}
|
||||
{{- $regex := printf `%s((?:.|\n)*)%s` $capture_start $capture_end -}}
|
||||
{{- /* Force-check if the file exists */ -}}
|
||||
{{ $tmp := os.Stat $file }}
|
||||
|
||||
{{- $regex := printf `%s((?:.|\n)*)%s` $capture_start $capture_end -}}
|
||||
{{- $match := findRE $regex (readFile $file) -}}
|
||||
{{- $match = index $match 0 -}}
|
||||
|
||||
@@ -70,7 +80,7 @@
|
||||
data-bs-target=".multi-{{ $id }}"
|
||||
aria-expanded="false"
|
||||
aria-controls="body-{{ $id }} footer-{{ $id }}">
|
||||
<small>{{ strings.TrimPrefix $basePath $file }}</small>
|
||||
<small>{{ if $full }}{{ strings.TrimPrefix $basePath $file }}{{ else }}{{ path.Base $file }}{{ end }}</small>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@@ -1,5 +0,0 @@
|
||||
{{- if not (.Get 0) -}}
|
||||
{{- errorf "Expected icon name: %s" .Position -}}
|
||||
{{- else -}}
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "fa %s" (delimit .Params " "))) }}
|
||||
{{- end -}}
|
@@ -1,5 +0,0 @@
|
||||
{{- if not (.Get 0) -}}
|
||||
{{- errorf "Expected icon name: %s" .Position -}}
|
||||
{{- else -}}
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "fab %s" (delimit .Params " "))) }}
|
||||
{{- end -}}
|
@@ -1,5 +0,0 @@
|
||||
{{- if not (.Get 0) -}}
|
||||
{{- errorf "Expected icon name: %s" .Position -}}
|
||||
{{- else -}}
|
||||
{{- partial "assets/icon.html" (dict "icon" (printf "fas %s" (delimit .Params " "))) }}
|
||||
{{- end -}}
|
68
layouts/shortcodes/file.html
Normal file
68
layouts/shortcodes/file.html
Normal file
@@ -0,0 +1,68 @@
|
||||
{{- /*
|
||||
Source: https://github.com/twbs/bootstrap/blob/main/site/layouts/shortcodes/scss-docs.html
|
||||
|
||||
Usage: `file path="path/to/filename" lang="lang" show="true" full="true"`
|
||||
|
||||
Prints the full content of any given file supported by the Chroma syntax highlighter.
|
||||
*/ -}}
|
||||
|
||||
{{- $basePath := .Site.Params.docs.basePath -}}
|
||||
{{- $file := .Get "path" }}
|
||||
{{- if hasPrefix $file "./" -}}
|
||||
{{- $file = path.Clean $file -}}
|
||||
{{- else -}}
|
||||
{{- $file = path.Join $basePath (path.Clean $file) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $extension := strings.TrimLeft "." (path.Ext $file) }}
|
||||
{{- $lang := .Get "lang" | default $extension -}}
|
||||
{{- $id := printf "docs-collapse-%d" .Ordinal -}}
|
||||
|
||||
{{ $supportedFlags := slice "true" "false" -}}
|
||||
{{ $showParam := "true" -}}
|
||||
{{ $show := true -}}
|
||||
{{ with .Get "show" }}{{ $showParam = . }}{{ end -}}
|
||||
{{ if in $supportedFlags $showParam -}}
|
||||
{{ if eq $showParam "true" }}{{ $show = true }}{{ else }}{{ $show = false }}{{ end -}}
|
||||
{{ else -}}
|
||||
{{ errorf "Invalid value for param 'show': %s" $showParam -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ $fullParam := "true" -}}
|
||||
{{ $full := true -}}
|
||||
{{ with .Get "full" }}{{ $fullParam = . }}{{ end -}}
|
||||
{{ if in $supportedFlags $fullParam -}}
|
||||
{{ if eq $fullParam "true" }}{{ $full = true }}{{ else }}{{ $full = false }}{{ end -}}
|
||||
{{ else -}}
|
||||
{{ errorf "Invalid value for param 'full': %s" $fullParam -}}
|
||||
{{ end -}}
|
||||
|
||||
{{- /* If any parameters are missing, print an error and exit */ -}}
|
||||
{{- if not $file -}}
|
||||
{{- errorf "%s: %q: Missing required parameters! Got: path=%q!" .Position .Name $file -}}
|
||||
{{- else -}}
|
||||
|
||||
{{- /* Force-check if the file exists */ -}}
|
||||
{{ $tmp := os.Stat $file }}
|
||||
{{- $content := readFile $file -}}
|
||||
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active font-monospace"
|
||||
href="#body-{{ $id }}"
|
||||
aria-current="page"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target=".multi-{{ $id }}"
|
||||
aria-expanded="false"
|
||||
aria-controls="body-{{ $id }} footer-{{ $id }}">
|
||||
<small>{{ if $full }}{{ strings.TrimPrefix $basePath $file }}{{ else }}{{ path.Base $file }}{{ end }}</small>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="border-start border-end border-bottom mb-3">
|
||||
<div class="collapse multi-{{ $id }}{{ if $show }} show{{ end }} syntax-highlight" id="body-{{ $id }}">
|
||||
{{- highlight (trim $content "\r\n") $lang "" -}}
|
||||
</div>
|
||||
<div class="collapse multi-{{ $id }}{{ if not $show }} show{{ end }} p-3" id="footer-{{ $id }}"><i>...</i></div>
|
||||
</div>
|
||||
{{- end -}}
|
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.16.0-beta2",
|
||||
"version": "0.16.6",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.16.0-beta2",
|
||||
"version": "0.16.6",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.4.0",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.16.0-beta2",
|
||||
"version": "0.16.6",
|
||||
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
|
||||
"keywords": [
|
||||
"hugo",
|
||||
@@ -20,7 +20,7 @@
|
||||
"prestart": "npm run clean && npm run mod:vendor",
|
||||
"start": "hugo server --bind=0.0.0.0 --disableFastRender",
|
||||
"start:prod": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -e production",
|
||||
"prebuild": "npm run clean",
|
||||
"prebuild": "npm run clean && npm run -s mod:install",
|
||||
"build": "hugo --gc --minify",
|
||||
"build:debug": "hugo -e debug --debug",
|
||||
"build:preview": "npm run build -D -F",
|
||||
@@ -32,6 +32,7 @@
|
||||
"lint:markdown": "markdownlint-cli2 \"*.md\" \"content/**/*.md\"",
|
||||
"lint:markdown-fix": "markdownlint-cli2-fix \"*.md\" \"content/**/*.md\"",
|
||||
"mod:clean": "hugo mod clean",
|
||||
"mod:install": "hugo mod get ./... && npm run -s mod:vendor && npm run -s mod:tidy",
|
||||
"mod:update": "hugo mod get -u ./... && npm run -s mod:vendor && npm run -s mod:tidy",
|
||||
"mod:tidy": "hugo mod tidy",
|
||||
"mod:vendor": "rimraf _vendor && hugo mod vendor",
|
||||
@@ -43,7 +44,7 @@
|
||||
"create:syntax-light": "hugo gen chromastyles --style=github > ./assets/scss/components/_syntax-light.scss",
|
||||
"create:syntax-dark": "hugo gen chromastyles --style=github-dark > ./assets/scss/components/_syntax-dark.scss",
|
||||
"update:syntax-dark": "replace-in-files --string=\"#ffffcc\" --replacement=\"#b8b800\" ./assets/scss/components/_syntax-dark.scss",
|
||||
"upgrade": "npx npm-check-updates -u"
|
||||
"upgrade": "npx npm-check-updates -u && mod:update"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
Reference in New Issue
Block a user