From bb232a351ac4ceb488d06f45ef230e457be26f40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 25 May 2022 18:06:20 +0200 Subject: [PATCH] resources: Improve error message on .Resize etc. on SVGs Fixes #9875 --- resources/integration_test.go | 27 +++++++++++++++++++++++++++ resources/transform.go | 6 +++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/resources/integration_test.go b/resources/integration_test.go index 19cf8c198..92abcb612 100644 --- a/resources/integration_test.go +++ b/resources/integration_test.go @@ -17,11 +17,13 @@ import ( "strings" "testing" + qt "github.com/frankban/quicktest" "github.com/gohugoio/hugo/hugolib" ) // Issue 8931 func TestImageCache(t *testing.T) { + t.Parallel() files := ` -- config.toml -- @@ -67,3 +69,28 @@ bmp: {{ $bmp.RelPermalink }}|{{ $bmp.MediaType }}| assertImages() } + +func TestSVGError(t *testing.T) { + t.Parallel() + + files := ` +-- config.toml -- +-- assets/circle.svg -- + +-- layouts/index.html -- +{{ $svg := resources.Get "circle.svg" }} +Width: {{ $svg.Width }} +` + + b, err := hugolib.NewIntegrationTestBuilder( + hugolib.IntegrationTestConfig{ + T: t, + TxtarString: files, + NeedsOsFS: true, + Running: true, + }).BuildE() + + b.Assert(err, qt.IsNotNil) + b.Assert(err.Error(), qt.Contains, `error calling Width: this method is only available for raster images. To determine if an image is SVG, you can do {{ if eq .MediaType.SubType "svg" }}{{ end }}`) + +} diff --git a/resources/transform.go b/resources/transform.go index bb1608cbd..7d81f9b21 100644 --- a/resources/transform.go +++ b/resources/transform.go @@ -297,7 +297,11 @@ func (r *resourceAdapter) DecodeImage() (image.Image, error) { func (r *resourceAdapter) getImageOps() images.ImageResourceOps { img, ok := r.target.(images.ImageResourceOps) if !ok { - panic(fmt.Sprintf("%T is not an image", r.target)) + if r.MediaType().SubType == "svg" { + panic("this method is only available for raster images. To determine if an image is SVG, you can do {{ if eq .MediaType.SubType \"svg\" }}{{ end }}") + } + fmt.Println(r.MediaType().SubType) + panic("this method is only available for image resources") } r.init(false, false) return img