|
package chartjs |
|
|
|
import ( |
|
"bytes" |
|
"encoding/json" |
|
"fmt" |
|
"html/template" |
|
|
|
template2 "github.com/GoAdminGroup/go-admin/template" |
|
) |
|
|
|
type BarChart struct { |
|
*Chart |
|
|
|
JsContent BarJsContent |
|
} |
|
|
|
type BarJsContent struct { |
|
JsContent |
|
|
|
Data BarAttributes `json:"data"` |
|
} |
|
|
|
type BarAttributes struct { |
|
Attributes |
|
|
|
DataSets BarDataSets `json:"datasets"` |
|
} |
|
|
|
type BarDataSets []*BarDataSet |
|
|
|
func (l BarDataSets) Add(ds *BarDataSet) BarDataSets { |
|
return append(l, ds) |
|
} |
|
|
|
type BarDataSet struct { |
|
Label string `json:"label"` |
|
Data []float64 `json:"data"` |
|
Type string `json:"type,omitempty"` |
|
BackgroundColor Color `json:"backgroundColor,omitempty"` |
|
BorderCapStyle string `json:"borderCapStyle,omitempty"` |
|
BorderColor Color `json:"borderColor,omitempty"` |
|
|
|
BorderSkipped string `json:"borderSkipped,omitempty"` |
|
BorderWidth float64 `json:"borderWidth,omitempty"` |
|
|
|
HoverBackgroundColor Color `json:"hoverBackgroundColor,omitempty"` |
|
HoverBorderColor Color `json:"hoverBorderColor,omitempty"` |
|
HoverBorderWidth float64 `json:"hoverBorderWidth,omitempty"` |
|
|
|
Order float64 `json:"order,omitempty"` |
|
XAxisID string `json:"xAxisID,omitempty"` |
|
YAxisID string `json:"yAxisID,omitempty"` |
|
} |
|
|
|
func (l *BarDataSet) SetLabel(label string) *BarDataSet { |
|
l.Label = label |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetData(data []float64) *BarDataSet { |
|
l.Data = data |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetType(t string) *BarDataSet { |
|
l.Type = t |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetBackgroundColor(backgroundColor Color) *BarDataSet { |
|
l.BackgroundColor = backgroundColor |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetBorderCapStyle(borderCapStyle string) *BarDataSet { |
|
l.BorderCapStyle = borderCapStyle |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetBorderColor(borderColor Color) *BarDataSet { |
|
l.BorderColor = borderColor |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetBorderWidth(borderWidth float64) *BarDataSet { |
|
l.BorderWidth = borderWidth |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetBorderSkipped(skip string) *BarDataSet { |
|
l.BorderSkipped = skip |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetHoverBackgroundColor(hoverBackgroundColor Color) *BarDataSet { |
|
l.HoverBackgroundColor = hoverBackgroundColor |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetHoverBorderColor(hoverBorderColor Color) *BarDataSet { |
|
l.HoverBorderColor = hoverBorderColor |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetHoverBorderWidth(hoverBorderWidth float64) *BarDataSet { |
|
l.HoverBorderWidth = hoverBorderWidth |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetOrder(order float64) *BarDataSet { |
|
l.Order = order |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetXAxisID(xAxisID string) *BarDataSet { |
|
l.XAxisID = xAxisID |
|
return l |
|
} |
|
|
|
func (l *BarDataSet) SetYAxisID(yAxisID string) *BarDataSet { |
|
l.YAxisID = yAxisID |
|
return l |
|
} |
|
|
|
func Bar() *BarChart { |
|
return &BarChart{ |
|
Chart: &Chart{ |
|
BaseComponent: &template2.BaseComponent{ |
|
Name: "chartjs", |
|
HTMLData: List["chartjs"], |
|
}, |
|
dataSetIndex: -1, |
|
}, |
|
JsContent: BarJsContent{ |
|
JsContent: JsContent{ |
|
Type: "bar", |
|
}, |
|
Data: BarAttributes{ |
|
Attributes: Attributes{ |
|
Labels: make([]string, 0), |
|
}, |
|
DataSets: make(BarDataSets, 0), |
|
}, |
|
}, |
|
} |
|
} |
|
|
|
func (l *BarChart) SetID(s string) *BarChart { |
|
l.ID = s |
|
return l |
|
} |
|
|
|
func (l *BarChart) SetTitle(s template.HTML) *BarChart { |
|
l.Title = s |
|
return l |
|
} |
|
|
|
func (l *BarChart) SetHeight(s int) *BarChart { |
|
l.Height = s |
|
return l |
|
} |
|
|
|
func (l *BarChart) SetLabels(s []string) *BarChart { |
|
l.JsContent.Data.Labels = s |
|
return l |
|
} |
|
|
|
func (l *BarChart) AddDataSet(s string) *BarChart { |
|
l.dataSetIndex++ |
|
l.JsContent.Data.DataSets = l.JsContent.Data.DataSets.Add(&BarDataSet{ |
|
Type: "bar", |
|
Label: s, |
|
}) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSLabel(s string) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetLabel(s) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSData(data []float64) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetData(data) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSType(t string) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetType(t) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSBackgroundColor(backgroundColor Color) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetBackgroundColor(backgroundColor) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSBorderCapStyle(borderCapStyle string) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderCapStyle(borderCapStyle) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSBorderSkipped(skip string) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderSkipped(skip) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSBorderColor(borderColor Color) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderColor(borderColor) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSBorderWidth(borderWidth float64) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderWidth(borderWidth) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSHoverBackgroundColor(hoverBackgroundColor Color) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBackgroundColor(hoverBackgroundColor) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSHoverBorderColor(hoverBorderColor Color) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBorderColor(hoverBorderColor) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSHoverBorderWidth(hoverBorderWidth float64) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBorderWidth(hoverBorderWidth) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSOrder(order float64) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetOrder(order) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSXAxisID(xAxisID string) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetXAxisID(xAxisID) |
|
return l |
|
} |
|
|
|
func (l *BarChart) DSYAxisID(yAxisID string) *BarChart { |
|
l.JsContent.Data.DataSets[l.dataSetIndex].SetYAxisID(yAxisID) |
|
return l |
|
} |
|
|
|
func (l *BarChart) GetContent() template.HTML { |
|
buffer := new(bytes.Buffer) |
|
tmpl, defineName := l.GetTemplate() |
|
|
|
if l.JsContentOptions != nil { |
|
l.JsContent.Options = l.JsContentOptions |
|
} |
|
|
|
jsonByte, _ := json.Marshal(l.JsContent) |
|
l.Js = template.JS(string(jsonByte)) |
|
|
|
err := tmpl.ExecuteTemplate(buffer, defineName, l) |
|
if err != nil { |
|
fmt.Println("ComposeHtml Error:", err) |
|
} |
|
return template.HTML(buffer.String()) |
|
} |
|
|