forked from OrgGo/goplot
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
type pieDataSetsType struct {
|
|
Color string `json:"color"`
|
|
Value int `json:"value"`
|
|
}
|
|
|
|
type PieChart struct {
|
|
name string
|
|
}
|
|
|
|
func (b *PieChart) Canvas(name string, height int, width int) string {
|
|
if height == 0 {
|
|
height = 300
|
|
}
|
|
if width == 0 {
|
|
width = 400
|
|
}
|
|
return fmt.Sprintf("<canvas id=\"%s\" height=\"%d\" width=\"%d\"></canvas>", name, height, width)
|
|
}
|
|
|
|
func (l *PieChart) JsonCode(c *ChartDataType) (string, error) {
|
|
pieNum := c.ItemNum()
|
|
items := c.ItemValue(0)
|
|
|
|
datasets := make([]*pieDataSetsType, 0, pieNum)
|
|
|
|
for i := 0; i < pieNum; i++ {
|
|
pie := &pieDataSetsType{}
|
|
pie.Color = GetColorValue(i)
|
|
pie.Value = items[i]
|
|
|
|
datasets = append(datasets, pie)
|
|
}
|
|
|
|
b, err := json.Marshal(datasets)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return fmt.Sprintf("var pieJsonStr = '%s';", string(b)), nil
|
|
}
|
|
|
|
func (l *PieChart) NewChart(name string) string {
|
|
return fmt.Sprintf("new Chart(document.getElementById(\"%s\").getContext(\"2d\")).Pie(eval('('+pieJsonStr+')'));", name)
|
|
}
|
|
|
|
func init() {
|
|
pie := new(PieChart)
|
|
pie.name = "pie"
|
|
|
|
ChartHandlers["pie"] = pie
|
|
}
|