diff --git a/_examples/css_classes/main.go b/_examples/css_classes/main.go index 5046b72..9718de5 100644 --- a/_examples/css_classes/main.go +++ b/_examples/css_classes/main.go @@ -17,7 +17,8 @@ func inlineSVGWithClasses(res http.ResponseWriter, req *http.Request) { "")) pie := chart.PieChart{ - // Note that setting ClassName will cause all other inline styles to be dropped! + // Notes: * Setting ClassName will cause all other inline styles to be dropped! + // * The following type classes may be added additionally: stroke, fill, text Background: chart.Style{ClassName: "background"}, Canvas: chart.Style{ ClassName: "canvas", @@ -42,12 +43,12 @@ func css(res http.ResponseWriter, req *http.Request) { res.Header().Set("Content-Type", "text/css") res.Write([]byte("svg .background { fill: white; }" + "svg .canvas { fill: white; }" + - "svg path.blue { fill: blue; stroke: lightblue; }" + - "svg path.green { fill: green; stroke: lightgreen; }" + - "svg path.gray { fill: gray; stroke: lightgray; }" + - "svg text.blue { fill: white; }" + - "svg text.green { fill: white; }" + - "svg text.gray { fill: white; }")) + "svg .blue.fill.stroke { fill: blue; stroke: lightblue; }" + + "svg .green.fill.stroke { fill: green; stroke: lightgreen; }" + + "svg .gray.fill.stroke { fill: gray; stroke: lightgray; }" + + "svg .blue.text { fill: white; }" + + "svg .green.text { fill: white; }" + + "svg .gray.text { fill: white; }")) } func main() { diff --git a/_examples/custom_stylesheets/main.go b/_examples/custom_stylesheets/main.go index 2432b2d..36f6106 100644 --- a/_examples/custom_stylesheets/main.go +++ b/_examples/custom_stylesheets/main.go @@ -2,19 +2,19 @@ package main import ( "fmt" - "github.com/hashworks/go-chart" + "github.com/wcharczuk/go-chart" "log" "net/http" ) const style = "svg .background { fill: white; }" + "svg .canvas { fill: white; }" + - "svg path.blue { fill: blue; stroke: lightblue; }" + - "svg path.green { fill: green; stroke: lightgreen; }" + - "svg path.gray { fill: gray; stroke: lightgray; }" + - "svg text.blue { fill: white; }" + - "svg text.green { fill: white; }" + - "svg text.gray { fill: white; }" + "svg .blue.fill.stroke { fill: blue; stroke: lightblue; }" + + "svg .green.fill.stroke { fill: green; stroke: lightgreen; }" + + "svg .gray.fill.stroke { fill: gray; stroke: lightgray; }" + + "svg .blue.text { fill: white; }" + + "svg .green.text { fill: white; }" + + "svg .gray.text { fill: white; }" func svgWithCustomInlineCSS(res http.ResponseWriter, _ *http.Request) { res.Header().Set("Content-Type", chart.ContentTypeSVG) diff --git a/vector_renderer.go b/vector_renderer.go index 71c6a86..0d7fc76 100644 --- a/vector_renderer.go +++ b/vector_renderer.go @@ -311,15 +311,28 @@ func (c *canvas) getFontFace(s Style) string { // styleAsSVG returns the style as a svg style or class string. func (c *canvas) styleAsSVG(s Style) string { - if s.ClassName != "" { - return fmt.Sprintf("class=\"%s\"", s.ClassName) - } sw := s.StrokeWidth sc := s.StrokeColor fc := s.FillColor fs := s.FontSize fnc := s.FontColor + if s.ClassName != "" { + var classes []string + classes = append(classes, s.ClassName) + if !sc.IsZero() { + classes = append(classes, "stroke") + } + if !fc.IsZero() { + classes = append(classes, "fill") + } + if fs != 0 || s.Font != nil { + classes = append(classes, "text") + } + + return fmt.Sprintf("class=\"%s\"", strings.Join(classes, " ")) + } + var pieces []string if sw != 0 {