mirror of
https://github.com/nunocoracao/blowfish.git
synced 2026-01-30 16:31:52 +01:00
115 lines
3.9 KiB
HTML
115 lines
3.9 KiB
HTML
{{- define "RenderImageSimple" -}}
|
||
{{- $imgObj := .imgObj -}}
|
||
{{- $src := .src -}}
|
||
{{- $alt := .alt -}}
|
||
<img
|
||
class="my-0 rounded-md"
|
||
loading="lazy"
|
||
decoding="async"
|
||
fetchpriority="low"
|
||
alt="{{ $alt }}"
|
||
src="{{ $src }}"
|
||
{{ with $imgObj -}}
|
||
{{ with $imgObj.Width }}width="{{ . }}"{{ end }}
|
||
{{ with $imgObj.Height }}height="{{ . }}"{{ end }}
|
||
{{- end }}>
|
||
{{- end -}}
|
||
|
||
{{- define "RenderImageResponsive" -}}
|
||
{{/* Responsive Image
|
||
The current setting sizes="(min-width: 768px) 50vw, 65vw" makes the iPhone 16 and 16 Pro
|
||
select a smaller image, while the iPhone 16 Pro Max selects a larger image.
|
||
|
||
Steps:
|
||
1. Check the media queries in the `sizes` property.
|
||
2. Find the first matching value. For example, on a mobile device with a CSS pixel width
|
||
of 390px and DPR = 3 (iPhone 13), given setting sizes="(min-width: 768px) 50vw, 100vw",
|
||
it matches the `100vw` option.
|
||
3. Calculate the optimal image size: 390 × 3 × 100% (100vw) = 1170.
|
||
4. Find the corresponding match in the `srcset`.
|
||
|
||
To make the browser select a smaller image on mobile devices
|
||
override the template and change the `sizes` property to "(min-width: 768px) 50vw, 30vw"
|
||
|
||
The sizes="auto" is valid only when loading="lazy".
|
||
*/}}
|
||
{{- $imgObj := .imgObj -}}
|
||
{{- $alt := .alt -}}
|
||
{{- $originalWidth := $imgObj.Width -}}
|
||
|
||
{{- $img800 := $imgObj -}}
|
||
{{- $img1280 := $imgObj -}}
|
||
{{- if gt $originalWidth 800 -}}
|
||
{{- $img800 = $imgObj.Resize "800x" -}}
|
||
{{- end -}}
|
||
{{- if gt $originalWidth 1280 -}}
|
||
{{- $img1280 = $imgObj.Resize "1280x" -}}
|
||
{{- end -}}
|
||
|
||
{{- $srcset := printf "%s 800w, %s 1280w" $img800.RelPermalink $img1280.RelPermalink -}}
|
||
|
||
|
||
<img
|
||
class="my-0 rounded-md"
|
||
loading="lazy"
|
||
decoding="async"
|
||
fetchpriority="auto"
|
||
alt="{{ $alt }}"
|
||
{{ with $imgObj.Width }}width="{{ . }}"{{ end }}
|
||
{{ with $imgObj.Height }}height="{{ . }}"{{ end }}
|
||
src="{{ $img800.RelPermalink }}"
|
||
srcset="{{ $srcset }}"
|
||
sizes="(min-width: 768px) 50vw, 65vw"
|
||
data-zoom-src="{{ $imgObj.RelPermalink }}">
|
||
{{- end -}}
|
||
|
||
{{- define "RenderImageCaption" -}}
|
||
{{- with .caption -}}
|
||
<figcaption>{{ . | markdownify }}</figcaption>
|
||
{{- end -}}
|
||
{{- end -}}
|
||
|
||
{{- $disableImageOptimizationMD := .Page.Site.Params.disableImageOptimizationMD | default false -}}
|
||
{{- $urlStr := .Destination | safeURL -}}
|
||
{{- $url := urls.Parse $urlStr -}}
|
||
{{- $altText := .Text -}}
|
||
{{- $caption := .Title -}}
|
||
{{- $isRemote := findRE "^(https?|data)" $url.Scheme -}}
|
||
{{- $resource := "" -}}
|
||
|
||
{{- if not $isRemote -}}
|
||
{{- $resource = or ($.Page.Resources.GetMatch $urlStr) (resources.Get $urlStr) -}}
|
||
{{- end -}}
|
||
|
||
|
||
<figure
|
||
{{- range $k, $v := .Attributes -}}
|
||
{{- if $v -}}
|
||
{{- printf " %s=%q" $k ($v | transform.HTMLEscape) | safeHTMLAttr -}}
|
||
{{- end -}}
|
||
{{- end -}}>
|
||
{{- if $isRemote -}}
|
||
{{- template "RenderImageSimple" (dict "imgObj" "" "src" $urlStr "alt" $altText) -}}
|
||
{{- else if $resource -}}
|
||
{{- $isSVG := eq $resource.MediaType.SubType "svg" -}}
|
||
{{- $shouldOptimize := and (not $disableImageOptimizationMD) (not $isSVG) -}}
|
||
{{- if $shouldOptimize -}}
|
||
{{- template "RenderImageResponsive" (dict "imgObj" $resource "alt" $altText) -}}
|
||
{{- else -}}
|
||
{{/* Not optimize image
|
||
If it is an SVG file, pass the permalink
|
||
Otherwise, pass the resource to allow width and height attributes
|
||
*/}}
|
||
{{- if $isSVG -}}
|
||
{{- template "RenderImageSimple" (dict "imgObj" "" "src" $resource.RelPermalink "alt" $altText) -}}
|
||
{{- else -}}
|
||
{{- template "RenderImageSimple" (dict "imgObj" $resource "src" $resource.RelPermalink "alt" $altText) -}}
|
||
{{- end -}}
|
||
{{- end -}}
|
||
{{- else -}}
|
||
{{- template "RenderImageSimple" (dict "imgObj" "" "src" $urlStr "alt" $altText) -}}
|
||
{{- end -}}
|
||
|
||
{{- template "RenderImageCaption" (dict "caption" $caption) -}}
|
||
</figure>
|