]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
resources: Improve error message on .Resize etc. on SVGs
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 25 May 2022 16:06:20 +0000 (18:06 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 25 May 2022 16:06:20 +0000 (18:06 +0200)
Fixes #9875

resources/integration_test.go
resources/transform.go

index 19cf8c19890b3fbc78b8fe77095e1a867df19e66..92abcb612c6dafcfedcdfeba68208d6fcd5ef6c8 100644 (file)
@@ -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 }}`)
+
+}
index bb1608cbd54ef35ebabf26f84296dbbdd094fde5..7d81f9b2131f086b1fdbfa116e92d0962ba98f85 100644 (file)
@@ -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