Compare commits

...

34 Commits

Author SHA1 Message Date
Mark Dumay
3c6a533236 Merge pull request #620 from gethinode/develop
Fix empty class attributes
2023-11-07 15:53:21 +01:00
Mark Dumay
69a9108655 Merge branch 'main' into develop 2023-11-07 15:42:02 +01:00
mark
4fdc7bb7d3 Bump release version and adjust optional dependencies 2023-11-07 15:41:05 +01:00
mark
170bd7034a Update build stats 2023-11-07 15:40:42 +01:00
mark
2bc99753d6 Fix empty class attributes 2023-11-07 15:31:54 +01:00
Mark Dumay
3ae1671b46 Merge pull request #619 from gethinode/develop
Improve configurability of single pages
2023-11-07 14:54:33 +01:00
Mark Dumay
4b9f137d41 Merge branch 'main' into develop 2023-11-07 14:44:37 +01:00
mark
651f733622 Update build environment 2023-11-07 14:43:09 +01:00
github-actions[bot]
a2b0c2c05f Merge pull request #618 from gethinode/dependabot/npm_and_yarn/eslint-plugin-n-16.3.0
Bump eslint-plugin-n from 16.2.0 to 16.3.0
2023-11-07 13:38:06 +00:00
mark
21476927ef Update build stats 2023-11-07 14:27:25 +01:00
mark
8c86081271 Support configurable thumbnail ratio 2023-11-07 14:27:17 +01:00
mark
fe5e94d277 Add download option to sharing buttons 2023-11-07 14:26:57 +01:00
mark
585db8094e Support related content 2023-11-07 14:26:22 +01:00
mark
4bcc536d42 Suppress empty more button 2023-11-07 14:26:00 +01:00
mark
b22c2e5ca5 Make metadata of single page header configurable 2023-11-07 14:25:43 +01:00
mark
715b714781 Make rendering of single page content configurable 2023-11-07 14:24:13 +01:00
mark
1d4b95a827 Refactor TOC for single pages 2023-11-07 14:22:38 +01:00
dependabot[bot]
0530a01445 Bump eslint-plugin-n from 16.2.0 to 16.3.0
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.2.0 to 16.3.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.2.0...16.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-07 13:22:19 +00:00
mark
2a29eba66e Bump package release 2023-11-07 14:10:10 +01:00
mark
e93b66f4b8 Update build stats 2023-11-07 06:29:33 +01:00
mark
44bb9d7f12 Add message when no tags are found 2023-11-07 06:29:27 +01:00
Mark Dumay
4f58f20b94 Merge pull request #616 from gethinode/develop
Use EXIF values to rotate and flip images
2023-11-06 15:02:18 +01:00
Mark Dumay
cd047ea6fe Merge branch 'main' into develop 2023-11-06 14:51:15 +01:00
github-actions[bot]
7d6526f291 Merge pull request #615 from gethinode/dependabot/npm_and_yarn/eslint-8.53.0
Bump eslint from 8.52.0 to 8.53.0
2023-11-06 13:50:20 +00:00
mark
ede17bdae8 Bump package release 2023-11-06 14:48:19 +01:00
mark
876315613e Use EXIF values to rotate and flip images 2023-11-06 14:47:45 +01:00
dependabot[bot]
b2c5efb4bd Bump eslint from 8.52.0 to 8.53.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.52.0 to 8.53.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.52.0...v8.53.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 13:43:25 +00:00
Mark Dumay
74047866e5 Merge pull request #613 from gethinode/main
Sync with main
2023-11-06 09:30:00 +01:00
Mark Dumay
6fb25c2111 Merge pull request #612 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2023-11-06 09:20:55 +01:00
markdumay
db3fc0014e fix: update Hugo module dependencies 2023-11-06 08:07:37 +00:00
Mark Dumay
7105f8e719 Merge pull request #610 from gethinode/develop
Improve tag handling
2023-11-06 07:38:54 +01:00
Mark Dumay
96ab7df306 Merge branch 'main' into develop 2023-11-05 12:39:02 +01:00
mark
1a964adabb Preserve original tag name 2023-11-05 12:38:13 +01:00
mark
9f4adc0777 Keep article count on small screens 2023-11-05 12:38:02 +01:00
26 changed files with 241 additions and 102 deletions

View File

@@ -14,3 +14,8 @@
height: 100%;
object-fit: cover;
}
.mirrorred {
-webkit-transform: scaleX(-1);
transform: scaleX(-1);
}

View File

@@ -32,6 +32,8 @@ github.com/gethinode/mod-fontawesome v1.4.0 h1:JfmVYwQl19jmZxgxY64yvGqJAAEiFkKf2
github.com/gethinode/mod-fontawesome v1.4.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.5.0 h1:3mW5dnWauuF9wSWXNIY+PPgTNPlc/xQOQoG7XGic1Yk=
github.com/gethinode/mod-fontawesome v1.5.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.5.1 h1:C7goQY4HrEua/lpjC++laydNKBuYo1+307ngn5tyXeM=
github.com/gethinode/mod-fontawesome v1.5.1/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-katex v1.0.1/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.2 h1:pIG4n3qLl/IVe7BEiwn+GL8r5lOCtF6FDxlcrPKdAXk=
github.com/gethinode/mod-katex v1.0.2/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=

2
go.mod
View File

@@ -6,7 +6,7 @@ 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.6.0 // indirect
github.com/gethinode/mod-fontawesome v1.5.0 // indirect
github.com/gethinode/mod-fontawesome v1.5.1 // indirect
github.com/gethinode/mod-katex v1.0.4 // indirect
github.com/gethinode/mod-leaflet v0.3.5 // indirect
github.com/gethinode/mod-lottie v1.3.0 // indirect

2
go.sum
View File

@@ -62,6 +62,8 @@ github.com/gethinode/mod-fontawesome v1.4.0 h1:JfmVYwQl19jmZxgxY64yvGqJAAEiFkKf2
github.com/gethinode/mod-fontawesome v1.4.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.5.0 h1:3mW5dnWauuF9wSWXNIY+PPgTNPlc/xQOQoG7XGic1Yk=
github.com/gethinode/mod-fontawesome v1.5.0/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
github.com/gethinode/mod-fontawesome v1.5.1 h1:C7goQY4HrEua/lpjC++laydNKBuYo1+307ngn5tyXeM=
github.com/gethinode/mod-fontawesome v1.5.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=

View File

@@ -15,6 +15,7 @@
"link",
"meta",
"nav",
"ol",
"p",
"path",
"script",
@@ -29,11 +30,14 @@
"active",
"align-items-center",
"align-self-center",
"align-self-end",
"bg-body",
"bg-opacity-10",
"bg-primary",
"bottom-0",
"bottom-bar",
"breadcrumb",
"breadcrumb-item",
"btn",
"btn-close",
"btn-primary",
@@ -85,7 +89,6 @@
"form-control",
"fs-3",
"fs-5",
"fw-30",
"fw-bold",
"hstack",
"img-fluid",

View File

@@ -27,6 +27,8 @@
translation: "More {{ . }}"
- id: emptyList
translation: "No articles found"
- id: emptyTags
translation: "No tags found"
# Sharing
- id: shareLink

View File

@@ -25,6 +25,8 @@
translation: "Meer {{ . }}"
- id: emptyList
translation: "Geen artikelen gevonden"
- id: emptyTags
translation: "Geen tags gevonden"
# Sharing
- id: shareLink

View File

@@ -7,7 +7,6 @@
<div class="d-md-none pb-5">{{ partial "assets/toc-dropdown.html" . }}</div>
{{- end -}}
{{ .Render "single/body" }}
{{ partial "utilities/ProcessContent" (dict "page" .Page "raw" .RawContent) }}
{{ .Render "single/footer" }}
{{- if and .Site.Params.comments.enabled .Params.showComments | default true -}}
@@ -17,11 +16,6 @@
{{ end -}}
{{ define "main" -}}
{{- $download := .Params.download -}}
{{- if and $download (not (fileExists (path.Join "static" $download))) -}}
{{- errorf "Cannot find download file for page '%s': %s" .File.Path $download -}}
{{- end -}}
{{- $menu := .Scratch.Get "sidebar" -}}
{{- $version := .Scratch.Get "version" -}}
@@ -29,9 +23,7 @@
{{- $hasSidebar := .Site.Params.navigation.sidebar | default true -}}
{{ if and $menu $hasSidebar }}{{ $sidebar = partial "assets/sidebar.html" (dict "page" . "menu" $menu "version" $version) }}{{ end }}
{{ $toc := "" }}
{{- $hasTOC := and .Site.Params.navigation.toc .Params.includeToc | default true -}}
{{ if $hasTOC }}{{ $toc = partial "assets/toc.html" (dict "page" . "download" $download) }}{{ end -}}
{{ $toc := .Render "single/panel-toc" }}
{{ with $sidebar -}}
<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvass-sidebar" aria-inledby="offcanvas-label">

View File

@@ -1,2 +1,3 @@
{{- partial "single/thumbnail.html" (dict "page" . "class" "mb-5") -}}
{{ partial "utilities/ProcessContent" (dict "page" .Page "raw" .RawContent) }}

View File

@@ -1,12 +1,31 @@
{{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}}
{{ $datestr := (partial "utilities/date.html" (dict "date" .Date "format" "long")) -}}
{{- $metadata := "full" -}}
{{ if isset .Params "metadata" }}
{{ $metadata = .Params.metadata }}
{{ else }}
{{- with (index site.Params.pages .Type ) -}}
{{ if isset . "metadata" }}{{ $metadata = (index . "metadata") }}{{ end }}
{{- end -}}
{{ end }}
{{- $supportedStates := slice "full" "original" "none" -}}
{{- if not (in $supportedStates $metadata) -}}
{{- errorf "layout [_default/single/header.html] - Invalid value for param 'metadata': %s" $metadata -}}
{{- end -}}
{{ with .Title }}<p class="display-4 mt-5">{{ . }}</p>{{ end }}
<small class="text-body-secondary text-uppercase">
{{ $datestr | i18n "postedOnDate" -}}
{{ if ne $datestr $lastmodstr -}}&nbsp;({{ $lastmodstr | i18n "lastModified" }}){{ end }} &bull;
{{ .ReadingTime | lang.FormatNumber 0 }}&nbsp;{{ i18n "minutesShort" }} {{ i18n "read" }} &bull;
{{ .WordCount | lang.FormatNumber 0 }}&nbsp;{{ i18n "words" }}
</small>
{{ if ne $metadata "none" }}
{{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}}
{{ $datestr := (partial "utilities/date.html" (dict "date" .Date "format" "long")) -}}
<small class="text-body-secondary text-uppercase">
{{ $datestr | i18n "postedOnDate" -}}
{{ if eq $metadata "full" }}
{{ if ne $datestr $lastmodstr -}}&nbsp;({{ $lastmodstr | i18n "lastModified" }}){{ end }}
{{ end }}
&bull;
{{ .ReadingTime | lang.FormatNumber 0 }}&nbsp;{{ i18n "minutesShort" }} {{ i18n "read" }} &bull;
{{ .WordCount | lang.FormatNumber 0 }}&nbsp;{{ i18n "words" }}
</small>
{{ end }}
{{- if gt (len (.GetTerms "tags")) 0 -}}
<div class="mt-3">

View File

@@ -0,0 +1,33 @@
{{- $download := .Params.download -}}
{{- if and $download (not (fileExists (path.Join "static" $download))) -}}
{{- errorf "Cannot find download file for page '%s': %s" .File.Path $download -}}
{{- end -}}
{{- $toc := .Site.Params.navigation.toc -}}
{{ if $toc }}
{{ if isset .Params "includeToc" }}
{{ $toc = .Params.includeToc }}
{{ else }}
{{- with (index site.Params.pages .Type) -}}
{{ if isset . "includetoc" }}
{{ $toc = index . "includetoc" }}
{{ if ne (printf "%T" $toc) "bool" }}
{{ errorf "Expected bool value in site parameters: pages.%s.includeToc" $.Type }}
{{ end }}
{{ end }}
{{- end -}}
{{ end }}
{{ end }}
<div class="toc toc-sidebar mb-5 my-md-0 ps-xl-3 mb-lg-5 p-3 text-body-secondary sticky-top">
{{ with $download }}
<div class="mb-5 text-center">
{{ $attr := dict "download" (path.Base .) }}
{{ partial "assets/button.html" (dict "href" . "title" (T "download" ) "color" "primary" "outline" "true" "icon" "fas download" "size" "sm" "attributes" $attr) }}
</div>
{{ end }}
{{ if $toc }}
{{ partial "assets/toc.html" (dict "page" . "download" $download) }}
{{ end -}}
</div>

View File

@@ -1 +1 @@
{{/* Intentionally left blank to suppress thumbnail */}}
{{ partial "utilities/ProcessContent" (dict "page" .Page "raw" .RawContent) }}

View File

@@ -1 +1 @@
{{/* Intentionally left blank to suppress thumbnail */}}
{{ partial "utilities/ProcessContent" (dict "page" .Page "raw" .RawContent) }}

View File

@@ -186,7 +186,7 @@
<div class="pt-3">{{ partial "assets/pagination.html" (dict "page" $page "format" "terse") }}</div>
{{- end -}}
{{ else }}
{{ if gt $count $max }}
{{ if and (gt $count $max) $moreTitle }}
<a class="btn btn-outline-primary" href="{{ $moreURL| safeURL }}" role="button">{{ $moreTitle }}</a>
{{ end }}
{{ end }}

View File

@@ -210,7 +210,12 @@
{{- $fallbackURL = $url -}}
{{- $isVector = true -}}
{{- else -}}
{{- $img := partial "utilities/GetImage.html" (dict "url" $url "page" $page) -}}
{{- $res := partial "utilities/GetImage.html" (dict "url" $url "page" $page) -}}
{{- $img := "" -}}
{{ with $res }}
{{ $img = $res.resource }}
{{ if $res.mirror }}{{ $innerClass = printf "%s mirrorred" $innerClass }}{{ end }}
{{ end }}
{{- if $img -}}
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio "portrait" $portrait) -}}
{{- if $absoluteURL -}}

View File

@@ -1,7 +1,7 @@
{{- $page := .page }}
{{- $section := .section }}
{{- if not $section }}{{ errorf "partial [assets/section-list.html] - Missing value for param 'section'" }}{{ end -}}
{{- $home := .home }}
{{- $home := .home | default false }}
{{ if ne (printf "%T" $home) "bool" }}
{{ errorf "partial [assets/section-list.html] - Invalid value for param 'home'"}}
{{ end }}
@@ -37,6 +37,7 @@
{{- $ratio := "" -}}
{{- $wrap := false -}}
{{- $loading := .loading -}}
{{- $wrapper := .wrapper | default "p-4 px-xxl-0 pb-5" -}}
{{- with (index site.Params.sections $section) -}}
{{- with index . "title" }}{{ $title = or $.title . }}{{ end -}}
@@ -77,6 +78,12 @@
{{ else }}
{{ $list = where site.Pages (printf ".Params.%s" $section) "!=" nil }}
{{ end }}
{{ else if eq $kind "related" }}
{{ if $page.Keywords}}
{{ $keywords := keyVals "tags" $page.Keywords }}
{{ $opts := dict "namedSlices" (slice $keywords) }}
{{ $list = site.RegularPages.Related $opts }}
{{ end }}
{{ else if $nested }}
{{ $list = where site.RegularPages "Type" "in" $section }}
{{ else if $home }}
@@ -100,7 +107,7 @@
{{- end -}}
{{ if gt $max 0 }}
{{- if $home -}}
{{- if or $home (eq $kind "related") -}}
{{- $paginate = false -}}
{{- $max = int (math.Min $homepage $max) -}}
{{ end -}}
@@ -128,7 +135,7 @@
{{- $partial := "" -}}
<div class="container-fluid {{ with $background }} bg-{{ . }}{{ end }} p-0">
<div class="container-xxl p-4 px-xxl-0 pb-5">
<div class="container-xxl {{ $wrapper }}">
{{- partial "assets/section-header.html" $params -}}
{{ if eq $layout "card" }}

View File

@@ -1,11 +1,28 @@
{{- if .Site.Params.sharing.enabled -}}
{{- if or .Params.sharing (not (isset .Params "sharing")) -}}
{{- $sharing := true -}}
{{ if isset .Params "sharing" }}
{{ $sharing = .Params.sharing }}
{{ else }}
{{- with (index site.Params.pages .Type ) -}}
{{ if isset . "sharing" }}
{{ $sharing = (index . "sharing") }}
{{ end }}
{{- end -}}
{{ 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 = sort $list $sort $order -}}
{{- $download := .Params.download -}}
{{- if and $download (not (fileExists (path.Join "static" $download))) -}}
{{- errorf "Cannot find download file for page '%s': %s" .File.Path $download -}}
{{- end -}}
<div class="py-3 text-body-secondary hstack gap-1">
{{ T "shareLink" "" }}
{{- range $index, $item := $list -}}
@@ -27,6 +44,10 @@
{{ $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 -}}
{{ with $download }}
{{ $attr := dict "download" (path.Base .) }}
{{ partial "assets/button.html" (dict "href" . "icon" "fas download fa-fw" "class" "btn-social p-0" "attributes" $attr "spacing" false) }}
{{- end -}}
</div>
{{- end -}}
{{- end -}}

View File

@@ -1,17 +1,7 @@
{{- $page := .page -}}
{{- $download := .download -}}
{{ $items := len (findRE "<li.*?>(.|\n)*?</li>" $page.TableOfContents) -}}
{{ if or $download (gt $items 1) -}}
<div class="toc toc-sidebar mb-5 my-md-0 ps-xl-3 mb-lg-5 p-3 text-body-secondary sticky-top">
{{ with $download }}
<div class="mb-5">
{{ $attr := dict "download" (path.Base .) }}
{{ partial "assets/button.html" (dict "href" . "title" (T "download" ) "color" "primary" "outline" "true" "icon" "fas download" "attributes" $attr) }}
</div>
{{ end }}
<strong class="d-block h6 my-2 pb-2 border-bottom">{{ T "toc" }}</strong>
{{ $page.TableOfContents }}
</div>
{{ if gt $items 1 -}}
<strong class="d-block h6 my-2 pb-2 border-bottom">{{ T "toc" }}</strong>
{{ $page.TableOfContents }}
{{ end -}}

View File

@@ -12,8 +12,10 @@
{{- $thumbnail := (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.url) .Params.Thumbnail) -}}
{{ with $thumbnail -}}
{{ $img := partial "utilities/GetImage.html" (dict "url" .) -}}
{{ with $img -}}
{{- $res := partial "utilities/GetImage.html" (dict "url" .) -}}
{{- $img := "" -}}
{{ with $res }}{{ $img = $res.resource }}{{ end }}
{{ with $img -}}
{{ $dim := "1280x640" -}}
{{ $scaled := (.Fill (printf "%s jpg" $dim)) -}}
{{- $scaled = $scaled | resources.Copy (replace $img.RelPermalink ".jpg" (printf "-%s.jpg" $dim)) -}}

View File

@@ -1,5 +1,7 @@
{{- $page := .page -}}
{{- $class := printf "img-wrap %s" .class -}}
{{- $class := printf "img-wrap" -}}
{{- with .class }}{{ $class := printf "img-wrap %s" . }}{{ end -}}
{{- $ratio := .ratio | default "21x9" -}}
{{- $thumbnail := "" -}}
{{- $credits := "" -}}
@@ -33,5 +35,5 @@
{{- end -}}
{{ if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "21x9" "outerClass" $class "innerClass" "rounded" "title" $page.Params.title "caption" $credits) -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" $ratio "outerClass" $class "innerClass" "rounded" "title" $page.Params.title "caption" $credits) -}}
{{ end -}}

View File

@@ -10,6 +10,7 @@
{{ $url := .url -}}
{{ $page := .page -}}
{{ $mirror := false }}
{{ $supportedMediaTypes := slice "image/png" "image/jpeg" "image/gif" "image/tiff" "image/bmp" "image/webp" -}}
{{ $img := "" }}
@@ -38,6 +39,34 @@
{{ 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 = "" -}}
@@ -46,4 +75,4 @@
{{ warnf "Cannot find image resource: %q" $url -}}
{{ end -}}
{{ return $img -}}
{{ return (dict "resource" $img "mirror" $mirror) -}}

View File

@@ -19,11 +19,22 @@
"mode": Optional flag indicating if the image should support color modes.
-->
{{- if isset .Params "src" -}}
{{ $error := false -}}
{{ $url := .Get "src" | default "" -}}
{{- $url := "" -}}
{{- $ratio := "" -}}
{{- $wrapper := "" -}}
{{- $class := "" -}}
{{- $title := "" -}}
{{- $caption := "" -}}
{{- $mode := false -}}
{{- $portrait := false -}}
{{- $loading := "" -}}
{{- $error := false -}}
{{- if .IsNamedParams -}}
{{ $url = .Get "src" | default "" -}}
{{- $validRatios := slice "1x1" "3x2" "4x3" "16x9" "21x9" -}}
{{ $ratio := .Get "ratio" | default "" -}}
{{ $ratio = .Get "ratio" | default "" -}}
{{ if $ratio -}}
{{ if not (in $validRatios $ratio) -}}
{{ errorf "Invalid value for param 'ratio': %s" .Position -}}
@@ -31,10 +42,10 @@
{{ end -}}
{{ end -}}
{{- $class := .Get "class" | default "" -}}
{{- $wrapper := .Get "wrapper" | default "" -}}
{{- $class = .Get "class" | default "" -}}
{{- $wrapper = .Get "wrapper" | default "" -}}
{{- $loading := .Get "loading" | default "" -}}
{{- $loading = .Get "loading" | default "" -}}
{{- $validSettings := slice "lazy" "eager" -}}
{{- if $loading -}}
{{ if not (in $validSettings $loading) -}}
@@ -42,14 +53,12 @@
{{ $error = true -}}
{{ end -}}
{{- end -}}
{{- $lazy := eq $loading "lazy" -}}
{{ $title := .Get "title" | default "" -}}
{{ $caption := .Get "caption" | default "" -}}
{{ $title = .Get "title" | default "" -}}
{{ $caption = .Get "caption" | default "" -}}
{{ $supportedFlags := slice "true" "false" -}}
{{ $modeParam := "false" -}}
{{ $mode := false -}}
{{ with .Get "mode" }}{{ $modeParam = . }}{{ end -}}
{{ if in $supportedFlags $modeParam -}}
{{ if eq $modeParam "true" }}{{ $mode = true }}{{ else }}{{ $mode = false }}{{ end -}}
@@ -59,7 +68,6 @@
{{ end -}}
{{ $portraitParam := "false" -}}
{{ $portrait := false -}}
{{ with .Get "portrait" }}{{ $portraitParam = . }}{{ end -}}
{{ if in $supportedFlags $portraitParam -}}
{{ if eq $portraitParam "true" }}{{ $portrait = true }}{{ else }}{{ $portrait = false }}{{ end -}}
@@ -67,21 +75,26 @@
{{ errorf "Invalid value for param 'portrait': %s" $portraitParam -}}
{{ $error = true -}}
{{ end -}}
{{- if not $error -}}
{{- partial "assets/image.html" (dict
"url" $url
"ratio" $ratio
"outerClass" $wrapper
"innerClass" $class
"title" $title
"caption" $caption
"mode" $mode
"portrait" $portrait
"loading" $loading
"page" .Page)
-}}
{{- end -}}
{{ else -}}
{{ errorf "Missing value for param 'src': %s" .Position -}}
{{ $url = .Get 0 }}
{{ end -}}
{{ if not $url }}
{{ errorf "Missing value for param 'src': %s" .Position -}}
{{- $error = true -}}
{{ end }}
{{- if not $error -}}
{{- partial "assets/image.html" (dict
"url" $url
"ratio" $ratio
"outerClass" $wrapper
"innerClass" $class
"title" $title
"caption" $caption
"mode" $mode
"portrait" $portrait
"loading" $loading
"page" .Page)
-}}
{{- end -}}

View File

@@ -12,20 +12,23 @@
{{ end -}}
{{- end -}}
<p class="display-4 mt-5">{{ .Name | humanize }}</p>
<p class="display-4 mt-5">{{ .Page.Title }}</p>
{{ if eq .Kind "taxonomy" }}
<div class="row mt-5"></div>
{{ range $.Site.Taxonomies.tags.ByCount }}
<div class="row mt-2">
<div class="d-none d-sm-block col-sm-3 mt-auto text-right">
<div class="col-3 mt-auto text-right">
{{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }}
</div>
<div class="col">
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ .Name | .Page.RenderString }}</a>
<div class="col-9">
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ .Page.Title | .Page.RenderString }}</a>
</div>
</div>
{{ end }}
{{ if eq $.Site.Taxonomies.tags 0 }}
<p class="pt-4">{{- T "emptyTags" }}.</p>
{{ end }}
{{ else }}
{{ $dateFormat := default "Jan 2" (index .Site.Params "date_format") }}
{{ $.Scratch.Set "lastYear" ""}}

View File

@@ -4,8 +4,8 @@
command = "npm run build:example"
[build.environment]
DART_SASS_VERSION = "1.69.0"
HUGO_VERSION = "0.119.0"
DART_SASS_VERSION = "1.69.5"
HUGO_VERSION = "0.120.3"
HUGO_ENV = "production"
HUGO_ENABLEGITINFO = "true"
NODE_VERSION = "18.18.2"

41
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@gethinode/hinode",
"version": "0.21.0",
"version": "0.21.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@gethinode/hinode",
"version": "0.21.0",
"version": "0.21.3",
"license": "MIT",
"devDependencies": {
"@fullhuman/postcss-purgecss": "^5.0.0",
@@ -15,10 +15,10 @@
"autoprefixer": "^10.4.16",
"cssnano": "^6.0.1",
"cssnano-preset-advanced": "^6.0.1",
"eslint": "^8.52.0",
"eslint": "^8.53.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-n": "^16.2.0",
"eslint-plugin-n": "^16.3.0",
"eslint-plugin-promise": "^6.1.1",
"hugo-bin": "^0.116.3",
"markdownlint-cli2": "^0.10.0",
@@ -33,7 +33,10 @@
"stylelint-config-standard-scss": "^11.1.0"
},
"optionalDependencies": {
"fsevents": "*"
"@gethinode/netlify-plugin-dartsass": "^0.2.0",
"@netlify/plugin-lighthouse": "*",
"fsevents": "*",
"netlify-plugin-hugo-cache-resources": "^0.2.1"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -334,9 +337,9 @@
}
},
"node_modules/@eslint/eslintrc": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
"integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
@@ -380,9 +383,9 @@
"dev": true
},
"node_modules/@eslint/js": {
"version": "8.52.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz",
"integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==",
"version": "8.53.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
"integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -2716,15 +2719,15 @@
}
},
"node_modules/eslint": {
"version": "8.52.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz",
"integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==",
"version": "8.53.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
"integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.2",
"@eslint/js": "8.52.0",
"@eslint/eslintrc": "^2.1.3",
"@eslint/js": "8.53.0",
"@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
@@ -2935,9 +2938,9 @@
"dev": true
},
"node_modules/eslint-plugin-n": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.2.0.tgz",
"integrity": "sha512-AQER2jEyQOt1LG6JkGJCCIFotzmlcCZFur2wdKrp1JX2cNotC7Ae0BcD/4lLv3lUAArM9uNS8z/fsvXTd0L71g==",
"version": "16.3.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.3.0.tgz",
"integrity": "sha512-/XZLH5CUXGK3laz3xYFNza8ZxLCq8ZNW6MsVw5z3d5hc2AwZzi0fPiySFZHQTdVDOHGs2cGv91aqzWmgBdq2gQ==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@gethinode/hinode",
"version": "0.21.0",
"version": "0.21.3",
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
"keywords": [
"hugo",
@@ -73,10 +73,10 @@
"autoprefixer": "^10.4.16",
"cssnano": "^6.0.1",
"cssnano-preset-advanced": "^6.0.1",
"eslint": "^8.52.0",
"eslint": "^8.53.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-n": "^16.2.0",
"eslint-plugin-n": "^16.3.0",
"eslint-plugin-promise": "^6.1.1",
"hugo-bin": "^0.116.3",
"markdownlint-cli2": "^0.10.0",
@@ -91,7 +91,10 @@
"stylelint-config-standard-scss": "^11.1.0"
},
"optionalDependencies": {
"fsevents": "*"
"@gethinode/netlify-plugin-dartsass": "^0.2.0",
"@netlify/plugin-lighthouse": "*",
"fsevents": "*",
"netlify-plugin-hugo-cache-resources": "^0.2.1"
},
"hugo-bin": {
"buildTags": "extended"