hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit bb232a351ac4ceb488d06f45ef230e457be26f40
parent 3854a6fa6c323d1c09aa71a0626c9eef62709294
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Wed, 25 May 2022 18:06:20 +0200

resources: Improve error message on .Resize etc. on SVGs

Fixes #9875

Diffstat:
Mresources/integration_test.go | 27+++++++++++++++++++++++++++
Mresources/transform.go | 6+++++-
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git 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 --
+<svg height="100" width="100"><circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" /></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
@@ -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