feat: add errorHandler if resource could not be loaded

- Fixes #7
- Fixes #6
- Add "errorHandler" config key
- Add the following error-handlers:
  - `warning`: prints warning if resource not found under 'assets'
  - `warning-remote`: prints warning, but tries RemoteGet as alternative
  - `error`: prints error if resource not found, fails build
This commit is contained in:
kdevo
2022-09-25 18:11:21 +02:00
parent f8df703cfd
commit 72183e14a3
7 changed files with 54 additions and 22 deletions
@@ -0,0 +1 @@
{{ errorf "image path './assets/%s' does not exist. please check the 'assets' directory." .img }}
@@ -0,0 +1,12 @@
{{ $params := . }}
{{ $url := .img | absURL }}
{{ warnf "image path './assets/%s' does not exist. trying remote get via %s" .img $url }}
{{ $res := false }}
{{ with $resource := resources.GetRemote $url }}
{{ with .Err }}
{{ warnf "could not get remotely: %s: %#v" .Error .Data }}
{{ else }}
{{ $res = merge $params (dict "img" $resource) }}
{{ end }}
{{ end }}
{{ return $res }}
@@ -0,0 +1 @@
{{ warnf "image path './assets/%s' does not exist. please check the 'assets' directory." .img }}
+31 -18
View File
@@ -11,6 +11,7 @@
Please ensure that image exists in ./assets directory.
` }}
{{/* Parse and normalize input parameters: */}}
{{ $params := merge site.Params.lazyimg (dict
"img" .
"resizer" (default "responsive" site.Params.lazyimg.resizer)
@@ -24,25 +25,37 @@
{{- end -}}
{{ $params = merge $params $userParams }}
{{ end }}
{{/* Attempt to load image resource: */}}
{{ $resType := (printf "%T" $params.img) }}
{{ if not (in $resType "resource") }}
{{ $params = merge $params (dict "img" (resources.Get $params.img)) }}
{{ end }}
{{ if not $params.img }}
{{ errorf "image path ./assets/%s does not exist" $params.img }}
{{ warnf $usage }}
{{ $resLoaded := in $resType "resource" }}
{{ if not $resLoaded }}
{{ with $res := resources.Get $params.img }}
{{ $params = merge $params (dict "img" $res) }}
{{ $resLoaded = true }}
{{ end }}
{{ end }}
{{/* Special handling for WebP renderers: */}}
{{ if in $params.renderer "webp" }}
{{/* Override user-supplied target format */}}
{{ $resizeOptionsWebP := printf "%s webp" ($params.resizeoptions | replaceRE "(jpg|png|tif|bmp|gif)" "") }}
{{ $paramsWebP := merge $params (dict "resizeoptions" $resizeOptionsWebP) }}
{{ $imagesWebP := partial (printf "resizer/%s" $params.resizer) $paramsWebP }}
{{ $imagesRegular := partial (printf "resizer/%s" $params.resizer) $params }}
{{ partial (printf "renderer/%s" $params.renderer) (merge $params (dict "imgDict" $imagesWebP "imgDictFallback" $imagesRegular)) }}
{{ else }}
{{ $sizes := partial (printf "resizer/%s" $params.resizer) $params }}
{{ partial (printf "renderer/%s" $params.renderer) (merge $params (dict "imgDict" $sizes)) }}
{{/* Handle error if not loaded yet: */}}
{{ if not $resLoaded }}
{{/* Try if error-handler is able to resolve it */}}
{{ $params = partial (printf "error-handler/%s" site.Params.lazyimg.errorHandler) $params }}
{{ if $params }}
{{ $resLoaded = in (printf "%T" $params.img) "resource" }}
{{ end }}
{{ end }}
{{/* Only proceed if resource has been loaded: */}}
{{ if $resLoaded }}
{{/* Special handling for WebP renderers: */}}
{{ if in $params.renderer "webp" }}
{{/* Override user-supplied target format */}}
{{ $resizeOptionsWebP := printf "%s webp" ($params.resizeoptions | replaceRE "(jpg|png|tif|bmp|gif)" "") }}
{{ $paramsWebP := merge $params (dict "resizeoptions" $resizeOptionsWebP) }}
{{ $imagesWebP := partial (printf "resizer/%s" $params.resizer) $paramsWebP }}
{{ $imagesRegular := partial (printf "resizer/%s" $params.resizer) $params }}
{{ partial (printf "renderer/%s" $params.renderer) (merge $params (dict "imgDict" $imagesWebP "imgDictFallback" $imagesRegular)) }}
{{ else }}
{{ $sizes := partial (printf "resizer/%s" $params.resizer) $params }}
{{ partial (printf "renderer/%s" $params.renderer) (merge $params (dict "imgDict" $sizes)) }}
{{ end }}
{{ end }}