rimarima/themes/hugo-liftoff/layouts/_default/_markup/render-image.html
Adrian Amaglio c09f092db4 init
2023-11-17 10:54:41 +01:00

50 lines
2.0 KiB
HTML

<!-- get image URL from Markdown tag -->
{{- $src := (.Destination | safeURL) -}}
<!-- split # fragment (used for CSS classes) and keep clean URL -->
{{- $fragments := (split $src "#") -}}
{{- $src = index ($fragments) 0 -}}
<!-- resize if wider than .Scratch.Get "imgwidth" -->
{{- $imgwidth := .Page.Scratch.Get "imgwidth" | default 800 -}}
<!-- get actual filename -->
{{- $src = path.Base $src -}}
<!-- check if it exists as a page resource -->
{{- with (.Page.Resources.ByType "image").GetMatch (printf "**/%s" $src) -}}
{{ $resized := . }}
{{ if (gt .Width $imgwidth) }}
{{ if hugo.IsExtended }}
{{- $resized = .Resize (print $imgwidth "x webp") -}}
{{ else }}
{{- $resized = .Resize (print $imgwidth "x") -}}
{{ end }}
{{ end }}
<!-- if a JPEG (certain to be opaque) generate a low resolution placeholder to use as background -->
{{ $placeholder := "" }}
{{- if or (eq .MediaType.SubType "jpg") (eq .MediaType.SubType "jpeg") }}
{{ $placeholder = .Resize "48x q20 jpg Gaussian" }}
{{ end -}}
<!-- if a GIF file, then revert to original to avoid resizing animations; WebP animations don't work -->
{{- if (eq .MediaType.SubType "gif") }}
{{ $resized = . }}
{{ end -}}
<img src="{{ $resized.RelPermalink }}"
width="{{ $resized.Width }}"
height="{{ $resized.Height }}"
{{ with $placeholder }}style="
background-image: url('data:image/jpg;base64,{{ .Content | base64Encode }}');
background-position: 50% 50%;
background-repeat: no-repeat;
background-size: cover;"{{ end }}
alt="{{ $.Text }}" {{ with $.Title }} title="{{ . }}" {{ end }}
{{ with index ($fragments ) 1 }}class="{{ . }}" {{ else }}class="single-post-image" {{ end }}
loading="lazy"
decoding="async"
>
<!-- or otherwise simply load the URL -->
{{- else -}}
<img src="{{ .Destination | safeURL }}"
alt="{{ .Text }}" {{ with .Title }} title="{{ . }}" {{ end }}
{{ with index ($fragments ) 1 }}class="{{ . }}" {{ else }}class="single-post-image" {{ end }}
loading="lazy"
decoding="async"
>
{{- end -}}