package chartjs import ( "bytes" "encoding/json" "fmt" "html/template" template2 "github.com/GoAdminGroup/go-admin/template" ) type LineChart struct { *Chart JsContent LineJsContent } type LineJsContent struct { JsContent Data LineAttributes `json:"data"` } type LineAttributes struct { Attributes DataSets LineDataSets `json:"datasets"` } type LineDataSets []*LineDataSet func (l LineDataSets) Add(ds *LineDataSet) LineDataSets { return append(l, ds) } type LineDataSet 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"` BorderDash []int `json:"borderDash,omitempty"` BorderDashOffset float64 `json:"borderDashOffset,omitempty"` BorderJoinStyle string `json:"borderJoinStyle,omitempty"` BorderWidth float64 `json:"borderWidth,omitempty"` CubicInterpolationMode string `json:"cubicInterpolationMode,omitempty"` Fill bool `json:"fill"` HoverBackgroundColor Color `json:"hoverBackgroundColor,omitempty"` HoverBorderCapStyle string `json:"hoverBorderCapStyle,omitempty"` HoverBorderColor Color `json:"hoverBorderColor,omitempty"` HoverBorderDash float64 `json:"hoverBorderDash,omitempty"` HoverBorderDashOffset float64 `json:"hoverBorderDashOffset,omitempty"` HoverBorderJoinStyle string `json:"hoverBorderJoinStyle,omitempty"` HoverBorderWidth float64 `json:"hoverBorderWidth,omitempty"` LineTension float64 `json:"lineTension,omitempty"` Order float64 `json:"order,omitempty"` PointBackgroundColor Color `json:"pointBackgroundColor,omitempty"` PointBorderColor Color `json:"pointBorderColor,omitempty"` PointBorderWidth float64 `json:"pointBorderWidth,omitempty"` PointHitRadius float64 `json:"pointHitRadius,omitempty"` PointHoverBackgroundColor Color `json:"pointHoverBackgroundColor,omitempty"` PointHoverBorderColor Color `json:"pointHoverBorderColor,omitempty"` PointHoverBorderWidth float64 `json:"pointHoverBorderWidth,omitempty"` PointHoverRadius float64 `json:"pointHoverRadius,omitempty"` PointRadius float64 `json:"pointRadius,omitempty"` PointRotation float64 `json:"pointRotation,omitempty"` PointStyle string `json:"pointStyle,omitempty"` ShowLine bool `json:"showLine,omitempty"` SpanGaps bool `json:"spanGaps,omitempty"` SteppedLine bool `json:"steppedLine,omitempty"` XAxisID string `json:"xAxisID,omitempty"` YAxisID string `json:"yAxisID,omitempty"` } func (l *LineDataSet) SetLabel(label string) *LineDataSet { l.Label = label return l } func (l *LineDataSet) SetData(data []float64) *LineDataSet { l.Data = data return l } func (l *LineDataSet) SetType(t string) *LineDataSet { l.Type = t return l } func (l *LineDataSet) SetBackgroundColor(backgroundColor Color) *LineDataSet { l.BackgroundColor = backgroundColor return l } func (l *LineDataSet) SetBorderCapStyle(borderCapStyle string) *LineDataSet { l.BorderCapStyle = borderCapStyle return l } func (l *LineDataSet) SetBorderColor(borderColor Color) *LineDataSet { l.BorderColor = borderColor return l } func (l *LineDataSet) SetBorderDash(borderDash []int) *LineDataSet { l.BorderDash = borderDash return l } func (l *LineDataSet) SetBorderDashOffset(borderDashOffset float64) *LineDataSet { l.BorderDashOffset = borderDashOffset return l } func (l *LineDataSet) SetBorderJoinStyle(borderJoinStyle string) *LineDataSet { l.BorderJoinStyle = borderJoinStyle return l } func (l *LineDataSet) SetBorderWidth(borderWidth float64) *LineDataSet { l.BorderWidth = borderWidth return l } func (l *LineDataSet) SetCubicInterpolationMode(cubicInterpolationMode string) *LineDataSet { l.CubicInterpolationMode = cubicInterpolationMode return l } func (l *LineDataSet) SetFill(fill bool) *LineDataSet { l.Fill = fill return l } func (l *LineDataSet) SetHoverBackgroundColor(hoverBackgroundColor Color) *LineDataSet { l.HoverBackgroundColor = hoverBackgroundColor return l } func (l *LineDataSet) SetHoverBorderCapStyle(hoverBorderCapStyle string) *LineDataSet { l.HoverBorderCapStyle = hoverBorderCapStyle return l } func (l *LineDataSet) SetHoverBorderColor(hoverBorderColor Color) *LineDataSet { l.HoverBorderColor = hoverBorderColor return l } func (l *LineDataSet) SetHoverBorderDash(hoverBorderDash float64) *LineDataSet { l.HoverBorderDash = hoverBorderDash return l } func (l *LineDataSet) SetHoverBorderDashOffset(hoverBorderDashOffset float64) *LineDataSet { l.HoverBorderDashOffset = hoverBorderDashOffset return l } func (l *LineDataSet) SetHoverBorderJoinStyle(hoverBorderJoinStyle string) *LineDataSet { l.HoverBorderJoinStyle = hoverBorderJoinStyle return l } func (l *LineDataSet) SetHoverBorderWidth(hoverBorderWidth float64) *LineDataSet { l.HoverBorderWidth = hoverBorderWidth return l } func (l *LineDataSet) SetLineTension(lineTension float64) *LineDataSet { l.LineTension = lineTension return l } func (l *LineDataSet) SetOrder(order float64) *LineDataSet { l.Order = order return l } func (l *LineDataSet) SetPointBackgroundColor(pointBackgroundColor Color) *LineDataSet { l.PointBackgroundColor = pointBackgroundColor return l } func (l *LineDataSet) SetPointBorderColor(pointBorderColor Color) *LineDataSet { l.PointBorderColor = pointBorderColor return l } func (l *LineDataSet) SetPointBorderWidth(pointBorderWidth float64) *LineDataSet { l.PointBorderWidth = pointBorderWidth return l } func (l *LineDataSet) SetPointHitRadius(pointHitRadius float64) *LineDataSet { l.PointHitRadius = pointHitRadius return l } func (l *LineDataSet) SetPointHoverBackgroundColor(pointHoverBackgroundColor Color) *LineDataSet { l.PointHoverBackgroundColor = pointHoverBackgroundColor return l } func (l *LineDataSet) SetPointHoverBorderColor(pointHoverBorderColor Color) *LineDataSet { l.PointHoverBorderColor = pointHoverBorderColor return l } func (l *LineDataSet) SetPointHoverBorderWidth(pointHoverBorderWidth float64) *LineDataSet { l.PointHoverBorderWidth = pointHoverBorderWidth return l } func (l *LineDataSet) SetPointHoverRadius(pointHoverRadius float64) *LineDataSet { l.PointHoverRadius = pointHoverRadius return l } func (l *LineDataSet) SetPointRadius(pointRadius float64) *LineDataSet { l.PointRadius = pointRadius return l } func (l *LineDataSet) SetPointRotation(pointRotation float64) *LineDataSet { l.PointRotation = pointRotation return l } func (l *LineDataSet) SetPointStyle(pointStyle string) *LineDataSet { l.PointStyle = pointStyle return l } func (l *LineDataSet) SetShowLine(showLine bool) *LineDataSet { l.ShowLine = showLine return l } func (l *LineDataSet) SetSpanGaps(spanGaps bool) *LineDataSet { l.SpanGaps = spanGaps return l } func (l *LineDataSet) SetSteppedLine(steppedLine bool) *LineDataSet { l.SteppedLine = steppedLine return l } func (l *LineDataSet) SetXAxisID(xAxisID string) *LineDataSet { l.XAxisID = xAxisID return l } func (l *LineDataSet) SetYAxisID(yAxisID string) *LineDataSet { l.YAxisID = yAxisID return l } func Line() *LineChart { return &LineChart{ Chart: &Chart{ BaseComponent: &template2.BaseComponent{ Name: "chartjs", HTMLData: List["chartjs"], }, dataSetIndex: -1, }, JsContent: LineJsContent{ JsContent: JsContent{ Type: "line", }, Data: LineAttributes{ Attributes: Attributes{ Labels: make([]string, 0), }, DataSets: make(LineDataSets, 0), }, }, } } func (l *LineChart) SetID(s string) *LineChart { l.ID = s return l } func (l *LineChart) SetTitle(s template.HTML) *LineChart { l.Title = s return l } func (l *LineChart) SetHeight(s int) *LineChart { l.Height = s return l } func (l *LineChart) SetLabels(s []string) *LineChart { l.JsContent.Data.Labels = s return l } func (l *LineChart) AddDataSet(s string) *LineChart { l.dataSetIndex++ l.JsContent.Data.DataSets = l.JsContent.Data.DataSets.Add(&LineDataSet{ Type: "line", Label: s, }) return l } func (l *LineChart) DSLabel(s string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetLabel(s) return l } func (l *LineChart) DSData(data []float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetData(data) return l } func (l *LineChart) DSType(t string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetType(t) return l } func (l *LineChart) DSBackgroundColor(backgroundColor Color) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetBackgroundColor(backgroundColor) return l } func (l *LineChart) DSBorderCapStyle(borderCapStyle string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderCapStyle(borderCapStyle) return l } func (l *LineChart) DSBorderColor(borderColor Color) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderColor(borderColor) return l } func (l *LineChart) DSBorderDash(borderDash []int) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderDash(borderDash) return l } func (l *LineChart) DSBorderDashOffset(borderDashOffset float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderDashOffset(borderDashOffset) return l } func (l *LineChart) DSBorderJoinStyle(borderJoinStyle string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderJoinStyle(borderJoinStyle) return l } func (l *LineChart) DSBorderWidth(borderWidth float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetBorderWidth(borderWidth) return l } func (l *LineChart) DSCubicInterpolationMode(cubicInterpolationMode string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetCubicInterpolationMode(cubicInterpolationMode) return l } func (l *LineChart) DSFill(fill bool) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetFill(fill) return l } func (l *LineChart) DSHoverBackgroundColor(hoverBackgroundColor Color) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBackgroundColor(hoverBackgroundColor) return l } func (l *LineChart) DSHoverBorderCapStyle(hoverBorderCapStyle string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBorderCapStyle(hoverBorderCapStyle) return l } func (l *LineChart) DSHoverBorderColor(hoverBorderColor Color) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBorderColor(hoverBorderColor) return l } func (l *LineChart) DSHoverBorderDash(hoverBorderDash float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBorderDash(hoverBorderDash) return l } func (l *LineChart) DSHoverBorderDashOffset(hoverBorderDashOffset float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBorderDashOffset(hoverBorderDashOffset) return l } func (l *LineChart) DSHoverBorderJoinStyle(hoverBorderJoinStyle string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBorderJoinStyle(hoverBorderJoinStyle) return l } func (l *LineChart) DSHoverBorderWidth(hoverBorderWidth float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetHoverBorderWidth(hoverBorderWidth) return l } func (l *LineChart) DSLineTension(lineTension float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetLineTension(lineTension) return l } func (l *LineChart) DSOrder(order float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetOrder(order) return l } func (l *LineChart) DSPointBackgroundColor(pointBackgroundColor Color) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointBackgroundColor(pointBackgroundColor) return l } func (l *LineChart) DSPointBorderColor(pointBorderColor Color) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointBorderColor(pointBorderColor) return l } func (l *LineChart) DSPointBorderWidth(pointBorderWidth float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointBorderWidth(pointBorderWidth) return l } func (l *LineChart) DSPointHitRadius(pointHitRadius float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointHitRadius(pointHitRadius) return l } func (l *LineChart) DSPointHoverBackgroundColor(pointHoverBackgroundColor Color) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointHoverBackgroundColor(pointHoverBackgroundColor) return l } func (l *LineChart) DSPointHoverBorderColor(pointHoverBorderColor Color) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointHoverBorderColor(pointHoverBorderColor) return l } func (l *LineChart) DSPointHoverBorderWidth(pointHoverBorderWidth float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointHoverBorderWidth(pointHoverBorderWidth) return l } func (l *LineChart) DSPointHoverRadius(pointHoverRadius float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointHoverRadius(pointHoverRadius) return l } func (l *LineChart) DSPointRadius(pointRadius float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointRadius(pointRadius) return l } func (l *LineChart) DSPointRotation(pointRotation float64) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointRotation(pointRotation) return l } func (l *LineChart) DSPointStyle(pointStyle string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetPointStyle(pointStyle) return l } func (l *LineChart) DSShowLine(showLine bool) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetShowLine(showLine) return l } func (l *LineChart) DSSpanGaps(spanGaps bool) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetSpanGaps(spanGaps) return l } func (l *LineChart) DSSteppedLine(steppedLine bool) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetSteppedLine(steppedLine) return l } func (l *LineChart) DSXAxisID(xAxisID string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetXAxisID(xAxisID) return l } func (l *LineChart) DSYAxisID(yAxisID string) *LineChart { l.JsContent.Data.DataSets[l.dataSetIndex].SetYAxisID(yAxisID) return l } func (l *LineChart) 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()) }