diff --git a/layouts/shortcodes/figure.html b/layouts/shortcodes/figure.html new file mode 100644 index 0000000..e66e322 --- /dev/null +++ b/layouts/shortcodes/figure.html @@ -0,0 +1,92 @@ +{{/* + +figure with auto-resizing and srcset v2020-11-30 + +Drop-in replacement for Hugo's figure shortcode as of 2020-05-02 that uses img srcset +to enable browsers to download only the resolution that they need. + +The resizing and srcset magic only works for images that are part of the page +bundle. It will fall back to stock Hugo figure behaviour otherwise. + +Improvements that were initially out of reach of my Hugo template programming "skills" +but have now been taken care of: +- [x] gracefully handle images that are not in page bundle, i.e. no image processing available +- [x] use a single configurable sizes array, and derive everything from there + +See https://cpbotha.net/2020/05/02/drop-in-replacement-for-hugo-figure-shortcode-with-img-srcset-support/ + +- original srcset img shortcode from: https://laurakalbag.com/processing-responsive-images-with-hugo/ +- original hugo figure shortcode from: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/shortcodes/figure.html +- no unnecessary resizes and more nudges by Stéfan van der Walt https://mentat.za.net/ +- mashing together and srcset logic fixes by Charl P. Botha https://cpbotha.net/ + +Changes: +- 2020-11-30 handle images that are rotated 90 degrees (should handle more eventually) +- 2020-05-10 fall back to stock Hugo behaviour when no page bundle found +- 2020-05-04 no unnecessary resizes, sizes in array +- 2020-05-02 initial release + +*/}} + +{{/* hugo will resize to all of these sizes that are smaller than your original. configure if you like! */}} +{{ $sizes := (slice "480" "800" "1200" "1500") }} + +{{/* get file that matches the filename as specified as src="" in shortcode */}} +{{ $src := .Page.Resources.GetMatch (printf "*%s*" (.Get "src")) }} + + + {{- if .Get "link" -}} + + {{- end }} + {{ with .Get + {{- if .Get "link" }}{{ end -}} + {{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}} +
+ {{ with (.Get "title") -}} +

{{ . }}

+ {{- end -}} + {{- if or (.Get "caption") (.Get "attr") -}}

+ {{- .Get "caption" | markdownify -}} + {{- with .Get "attrlink" }} + + {{- end -}} + {{- .Get "attr" | markdownify -}} + {{- if .Get "attrlink" }}{{ end }}

+ {{- end }} +
+ {{- end }} +