Add svg package and a few helpers (#67)
Introducing SVG, to inline vector graphics in your HTML! 🥳
This commit is contained in:
parent
eb1d1f22b4
commit
6f7752c20f
29
svg/attributes.go
Normal file
29
svg/attributes.go
Normal file
@ -0,0 +1,29 @@
|
||||
package svg
|
||||
|
||||
import (
|
||||
g "github.com/maragudk/gomponents"
|
||||
)
|
||||
|
||||
func ClipRule(v string) g.Node {
|
||||
return g.Attr("clip-rule", v)
|
||||
}
|
||||
|
||||
func D(v string) g.Node {
|
||||
return g.Attr("d", v)
|
||||
}
|
||||
|
||||
func Fill(v string) g.Node {
|
||||
return g.Attr("fill", v)
|
||||
}
|
||||
|
||||
func FillRule(v string) g.Node {
|
||||
return g.Attr("fill-rule", v)
|
||||
}
|
||||
|
||||
func Stroke(v string) g.Node {
|
||||
return g.Attr("stroke", v)
|
||||
}
|
||||
|
||||
func ViewBox(v string) g.Node {
|
||||
return g.Attr("viewBox", v)
|
||||
}
|
28
svg/attributes_test.go
Normal file
28
svg/attributes_test.go
Normal file
@ -0,0 +1,28 @@
|
||||
package svg_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
g "github.com/maragudk/gomponents"
|
||||
"github.com/maragudk/gomponents/assert"
|
||||
. "github.com/maragudk/gomponents/svg"
|
||||
)
|
||||
|
||||
func TestSimpleAttributes(t *testing.T) {
|
||||
cases := map[string]func(string) g.Node{
|
||||
"clip-rule": ClipRule,
|
||||
"d": D,
|
||||
"fill": Fill,
|
||||
"fill-rule": FillRule,
|
||||
"stroke": Stroke,
|
||||
"viewBox": ViewBox,
|
||||
}
|
||||
|
||||
for name, fn := range cases {
|
||||
t.Run(fmt.Sprintf(`should output %v="hat"`, name), func(t *testing.T) {
|
||||
n := g.El("element", fn("hat"))
|
||||
assert.Equal(t, fmt.Sprintf(`<element %v="hat"></element>`, name), n)
|
||||
})
|
||||
}
|
||||
}
|
15
svg/elements.go
Normal file
15
svg/elements.go
Normal file
@ -0,0 +1,15 @@
|
||||
// Package svg provides common SVG elements and attributes.
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/SVG/Element for an overview.
|
||||
package svg
|
||||
|
||||
import (
|
||||
g "github.com/maragudk/gomponents"
|
||||
)
|
||||
|
||||
func Path(children ...g.Node) g.Node {
|
||||
return g.El("path", children...)
|
||||
}
|
||||
|
||||
func SVG(children ...g.Node) g.Node {
|
||||
return g.El("svg", g.Attr("xmlns", "http://www.w3.org/2000/svg"), g.Group(children))
|
||||
}
|
29
svg/elements_test.go
Normal file
29
svg/elements_test.go
Normal file
@ -0,0 +1,29 @@
|
||||
package svg_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
g "github.com/maragudk/gomponents"
|
||||
"github.com/maragudk/gomponents/assert"
|
||||
. "github.com/maragudk/gomponents/svg"
|
||||
)
|
||||
|
||||
func TestSimpleElements(t *testing.T) {
|
||||
cases := map[string]func(...g.Node) g.Node{
|
||||
"path": Path,
|
||||
}
|
||||
|
||||
for name, fn := range cases {
|
||||
t.Run(fmt.Sprintf("should output %v", name), func(t *testing.T) {
|
||||
n := fn(g.Attr("id", "hat"))
|
||||
assert.Equal(t, fmt.Sprintf(`<%v id="hat"></%v>`, name, name), n)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSVG(t *testing.T) {
|
||||
t.Run("outputs svg element with xml namespace attribute", func(t *testing.T) {
|
||||
assert.Equal(t, `<svg xmlns="http://www.w3.org/2000/svg"><path></path></svg>`, SVG(g.El("path")))
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user