126
vendor/github.com/guptarohit/asciigraph/options.go
generated
vendored
Normal file
126
vendor/github.com/guptarohit/asciigraph/options.go
generated
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
package asciigraph
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Option represents a configuration setting.
|
||||
type Option interface {
|
||||
apply(c *config)
|
||||
}
|
||||
|
||||
// config holds various graph options
|
||||
type config struct {
|
||||
Width, Height int
|
||||
LowerBound, UpperBound *float64
|
||||
Offset int
|
||||
Caption string
|
||||
Precision uint
|
||||
CaptionColor AnsiColor
|
||||
AxisColor AnsiColor
|
||||
LabelColor AnsiColor
|
||||
SeriesColors []AnsiColor
|
||||
SeriesLegends []string
|
||||
}
|
||||
|
||||
// An optionFunc applies an option.
|
||||
type optionFunc func(*config)
|
||||
|
||||
// apply implements the Option interface.
|
||||
func (of optionFunc) apply(c *config) { of(c) }
|
||||
|
||||
func configure(defaults config, options []Option) *config {
|
||||
for _, o := range options {
|
||||
o.apply(&defaults)
|
||||
}
|
||||
return &defaults
|
||||
}
|
||||
|
||||
// Width sets the graphs width. By default, the width of the graph is
|
||||
// determined by the number of data points. If the value given is a
|
||||
// positive number, the data points are interpolated on the x axis.
|
||||
// Values <= 0 reset the width to the default value.
|
||||
func Width(w int) Option {
|
||||
return optionFunc(func(c *config) {
|
||||
if w > 0 {
|
||||
c.Width = w
|
||||
} else {
|
||||
c.Width = 0
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Height sets the graphs height.
|
||||
func Height(h int) Option {
|
||||
return optionFunc(func(c *config) {
|
||||
if h > 0 {
|
||||
c.Height = h
|
||||
} else {
|
||||
c.Height = 0
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// LowerBound sets the graph's minimum value for the vertical axis. It will be ignored
|
||||
// if the series contains a lower value.
|
||||
func LowerBound(min float64) Option {
|
||||
return optionFunc(func(c *config) { c.LowerBound = &min })
|
||||
}
|
||||
|
||||
// UpperBound sets the graph's maximum value for the vertical axis. It will be ignored
|
||||
// if the series contains a bigger value.
|
||||
func UpperBound(max float64) Option {
|
||||
return optionFunc(func(c *config) { c.UpperBound = &max })
|
||||
}
|
||||
|
||||
// Offset sets the graphs offset.
|
||||
func Offset(o int) Option {
|
||||
return optionFunc(func(c *config) { c.Offset = o })
|
||||
}
|
||||
|
||||
// Precision sets the graphs precision.
|
||||
func Precision(p uint) Option {
|
||||
return optionFunc(func(c *config) { c.Precision = p })
|
||||
}
|
||||
|
||||
// Caption sets the graphs caption.
|
||||
func Caption(caption string) Option {
|
||||
return optionFunc(func(c *config) {
|
||||
c.Caption = strings.TrimSpace(caption)
|
||||
})
|
||||
}
|
||||
|
||||
// CaptionColor sets the caption color.
|
||||
func CaptionColor(ac AnsiColor) Option {
|
||||
return optionFunc(func(c *config) {
|
||||
c.CaptionColor = ac
|
||||
})
|
||||
}
|
||||
|
||||
// AxisColor sets the axis color.
|
||||
func AxisColor(ac AnsiColor) Option {
|
||||
return optionFunc(func(c *config) {
|
||||
c.AxisColor = ac
|
||||
})
|
||||
}
|
||||
|
||||
// LabelColor sets the axis label color.
|
||||
func LabelColor(ac AnsiColor) Option {
|
||||
return optionFunc(func(c *config) {
|
||||
c.LabelColor = ac
|
||||
})
|
||||
}
|
||||
|
||||
// SeriesColors sets the series colors.
|
||||
func SeriesColors(ac ...AnsiColor) Option {
|
||||
return optionFunc(func(c *config) {
|
||||
c.SeriesColors = ac
|
||||
})
|
||||
}
|
||||
|
||||
// SeriesLegends sets the legend text for the corresponding series.
|
||||
func SeriesLegends(text ...string) Option {
|
||||
return optionFunc(func(c *config) {
|
||||
c.SeriesLegends = text
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user