Skip to content

Commit

Permalink
Fixes for Legend label centering and wrapping
Browse files Browse the repository at this point in the history
This change fixes and improves legend label positioning with the following changes:
* The legend was previously incorrectly calculating the center position, this is now fixed for cases where wrapping is not necessary (and resulted in a lot of test assertion updates)
* When horizontal legends wrap the starting position is now based off the original start positon instead of just `0`.
* In addition `Align` `center` is now supported. This is similar to a `left` align, but when wrapping the next line will be centered under the above line (including any set Left adjustement).
jentfoo committed Jan 3, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 0ca4e3e commit 2e15c54
Showing 21 changed files with 127 additions and 61 deletions.
11 changes: 6 additions & 5 deletions assert_test.go
Original file line number Diff line number Diff line change
@@ -9,32 +9,33 @@ import (
"github.com/stretchr/testify/assert"
)

func assertEqualSVG(t *testing.T, expected, actual string) {
func assertEqualSVG(t *testing.T, expected string, actual []byte) {
t.Helper()

if expected != actual {
actualStr := string(actual)
if expected != actualStr {
actualFile, err := writeTempFile(actual, t.Name()+"-actual", "svg")
assert.NoError(t, err)

if expected == "" {
t.Fatalf("SVG written to %s", actualFile)
} else {
expectedFile, err := writeTempFile(expected, t.Name()+"-expected", "svg")
expectedFile, err := writeTempFile([]byte(expected), t.Name()+"-expected", "svg")
assert.NoError(t, err)
t.Fatalf("SVG content does not match. Expected file: %s, Actual file: %s",
expectedFile, actualFile)
}
}
}

func writeTempFile(content, prefix, extension string) (string, error) {
func writeTempFile(content []byte, prefix, extension string) (string, error) {
tmpFile, err := os.CreateTemp("", strings.ReplaceAll(prefix, string(os.PathSeparator), ".")+"-*."+extension)
if err != nil {
return "", err
}
defer tmpFile.Close()

if _, err := tmpFile.WriteString(content); err != nil {
if _, err := tmpFile.Write(content); err != nil {
return "", err
}

2 changes: 1 addition & 1 deletion axis_test.go
Original file line number Diff line number Diff line change
@@ -178,7 +178,7 @@ func TestAxis(t *testing.T) {
require.NoError(t, err)
data, err := tt.render(p)
require.NoError(t, err)
assertEqualSVG(t, tt.result, string(data))
assertEqualSVG(t, tt.result, data)
})
}
}
2 changes: 1 addition & 1 deletion bar_chart_test.go
Original file line number Diff line number Diff line change
@@ -148,5 +148,5 @@ func validateBarChartRender(t *testing.T, p *Painter, opt BarChartOption, expect
require.NoError(t, err)
data, err := p.Bytes()
require.NoError(t, err)
assertEqualSVG(t, expectedResult, string(data))
assertEqualSVG(t, expectedResult, data)
}
14 changes: 7 additions & 7 deletions chart_option_test.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion echarts_test.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion font_test.go
Original file line number Diff line number Diff line change
@@ -54,5 +54,5 @@ func TestCustomFontSizeRender(t *testing.T) {
require.NoError(t, err)
data, err := p.Bytes()
require.NoError(t, err)
assertEqualSVG(t, "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 600 400\"><path d=\"M 0 0\nL 600 0\nL 600 400\nL 0 400\nL 0 0\" style=\"stroke-width:0;stroke:none;fill:rgba(255,255,255,1.0)\"/><path d=\"M 256 19\nL 286 19\" style=\"stroke-width:3;stroke:rgba(84,112,198,1.0);fill:rgba(84,112,198,1.0)\"/><circle cx=\"271\" cy=\"19\" r=\"5\" style=\"stroke-width:3;stroke:rgba(84,112,198,1.0);fill:rgba(84,112,198,1.0)\"/><path d=\"\" style=\"stroke-width:3;stroke:rgba(84,112,198,1.0);fill:rgba(84,112,198,1.0)\"/><text x=\"288\" y=\"25\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">1</text><path d=\"M 311 19\nL 341 19\" style=\"stroke-width:3;stroke:rgba(145,204,117,1.0);fill:rgba(145,204,117,1.0)\"/><circle cx=\"326\" cy=\"19\" r=\"5\" style=\"stroke-width:3;stroke:rgba(145,204,117,1.0);fill:rgba(145,204,117,1.0)\"/><path d=\"\" style=\"stroke-width:3;stroke:rgba(145,204,117,1.0);fill:rgba(145,204,117,1.0)\"/><text x=\"343\" y=\"25\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">2</text><text x=\"10\" y=\"15\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">Line</text><text x=\"10\" y=\"37\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">1.44k</text><text x=\"10\" y=\"73\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">1.28k</text><text x=\"10\" y=\"109\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">1.12k</text><text x=\"14\" y=\"145\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">960</text><text x=\"14\" y=\"181\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">800</text><text x=\"14\" y=\"217\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">640</text><text x=\"14\" y=\"253\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">480</text><text x=\"14\" y=\"289\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">320</text><text x=\"14\" y=\"325\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">160</text><text x=\"20\" y=\"362\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">0</text><path d=\"M 33 35\nL 590 35\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 71\nL 590 71\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 107\nL 590 107\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 143\nL 590 143\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 179\nL 590 179\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 215\nL 590 215\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 251\nL 590 251\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 287\nL 590 287\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 323\nL 590 323\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 365\nL 33 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 112 365\nL 112 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 192 365\nL 192 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 271 365\nL 271 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 351 365\nL 351 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 430 365\nL 430 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 510 365\nL 510 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 590 365\nL 590 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 33 360\nL 590 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><text x=\"70\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">A</text><text x=\"150\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">B</text><text x=\"229\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">C</text><text x=\"309\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">D</text><text x=\"389\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">E</text><text x=\"469\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">F</text><text x=\"548\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">G</text><path d=\"M 72 333\nL 152 331\nL 231 338\nL 311 330\nL 390 340\nL 470 309\nL 550 313\" style=\"stroke-width:2;stroke:rgba(84,112,198,1.0);fill:none\"/><circle cx=\"72\" cy=\"333\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"152\" cy=\"331\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"231\" cy=\"338\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"311\" cy=\"330\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"390\" cy=\"340\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"470\" cy=\"309\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"550\" cy=\"313\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><path d=\"\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><path d=\"M 72 175\nL 152 150\nL 231 157\nL 311 150\nL 390 69\nL 470 60\nL 550 63\" style=\"stroke-width:2;stroke:rgba(145,204,117,1.0);fill:none\"/><circle cx=\"72\" cy=\"175\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"152\" cy=\"150\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"231\" cy=\"157\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"311\" cy=\"150\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"390\" cy=\"69\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"470\" cy=\"60\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"550\" cy=\"63\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><path d=\"\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/></svg>", string(data))
assertEqualSVG(t, "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 600 400\"><path d=\"M 0 0\nL 600 0\nL 600 400\nL 0 400\nL 0 0\" style=\"stroke-width:0;stroke:none;fill:rgba(255,255,255,1.0)\"/><path d=\"M 256 19\nL 286 19\" style=\"stroke-width:3;stroke:rgba(84,112,198,1.0);fill:rgba(84,112,198,1.0)\"/><circle cx=\"271\" cy=\"19\" r=\"5\" style=\"stroke-width:3;stroke:rgba(84,112,198,1.0);fill:rgba(84,112,198,1.0)\"/><path d=\"\" style=\"stroke-width:3;stroke:rgba(84,112,198,1.0);fill:rgba(84,112,198,1.0)\"/><text x=\"288\" y=\"25\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">1</text><path d=\"M 311 19\nL 341 19\" style=\"stroke-width:3;stroke:rgba(145,204,117,1.0);fill:rgba(145,204,117,1.0)\"/><circle cx=\"326\" cy=\"19\" r=\"5\" style=\"stroke-width:3;stroke:rgba(145,204,117,1.0);fill:rgba(145,204,117,1.0)\"/><path d=\"\" style=\"stroke-width:3;stroke:rgba(145,204,117,1.0);fill:rgba(145,204,117,1.0)\"/><text x=\"343\" y=\"25\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">2</text><text x=\"10\" y=\"15\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">Line</text><text x=\"10\" y=\"37\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">1.44k</text><text x=\"10\" y=\"73\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">1.28k</text><text x=\"10\" y=\"109\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">1.12k</text><text x=\"14\" y=\"145\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">960</text><text x=\"14\" y=\"181\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">800</text><text x=\"14\" y=\"217\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">640</text><text x=\"14\" y=\"253\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">480</text><text x=\"14\" y=\"289\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">320</text><text x=\"14\" y=\"325\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">160</text><text x=\"20\" y=\"362\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">0</text><path d=\"M 33 35\nL 590 35\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 71\nL 590 71\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 107\nL 590 107\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 143\nL 590 143\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 179\nL 590 179\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 215\nL 590 215\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 251\nL 590 251\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 287\nL 590 287\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 323\nL 590 323\" style=\"stroke-width:1;stroke:rgba(224,230,242,1.0);fill:none\"/><path d=\"M 33 365\nL 33 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 112 365\nL 112 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 192 365\nL 192 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 271 365\nL 271 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 351 365\nL 351 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 430 365\nL 430 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 510 365\nL 510 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 590 365\nL 590 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><path d=\"M 33 360\nL 590 360\" style=\"stroke-width:1;stroke:rgba(110,112,121,1.0);fill:none\"/><text x=\"70\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">A</text><text x=\"150\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">B</text><text x=\"229\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">C</text><text x=\"309\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">D</text><text x=\"389\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">E</text><text x=\"469\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">F</text><text x=\"548\" y=\"375\" style=\"stroke-width:0;stroke:none;fill:rgba(70,70,70,1.0);font-size:5.1px;font-family:'Roboto Medium',sans-serif\">G</text><path d=\"M 72 333\nL 152 331\nL 231 338\nL 311 330\nL 390 340\nL 470 309\nL 550 313\" style=\"stroke-width:2;stroke:rgba(84,112,198,1.0);fill:none\"/><circle cx=\"72\" cy=\"333\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"152\" cy=\"331\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"231\" cy=\"338\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"311\" cy=\"330\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"390\" cy=\"340\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"470\" cy=\"309\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"550\" cy=\"313\" r=\"2\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><path d=\"\" style=\"stroke-width:1;stroke:rgba(84,112,198,1.0);fill:rgba(255,255,255,1.0)\"/><path d=\"M 72 175\nL 152 150\nL 231 157\nL 311 150\nL 390 69\nL 470 60\nL 550 63\" style=\"stroke-width:2;stroke:rgba(145,204,117,1.0);fill:none\"/><circle cx=\"72\" cy=\"175\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"152\" cy=\"150\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"231\" cy=\"157\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"311\" cy=\"150\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"390\" cy=\"69\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"470\" cy=\"60\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><circle cx=\"550\" cy=\"63\" r=\"2\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/><path d=\"\" style=\"stroke-width:1;stroke:rgba(145,204,117,1.0);fill:rgba(255,255,255,1.0)\"/></svg>", data)
}
Loading

0 comments on commit 2e15c54

Please sign in to comment.