package element
import (
"golang.org/x/net/html/atom"
)
const (
TextThemeSuccess = "success"
TextThemeDanger = "danger"
)
type (
TextOption func(t *Text)
Text struct {
Tag atom.Atom
Content string
Theme string
Color string
Style Style
}
)
func WithTextTheme(s string) TextOption {
return func(t *Text) {
t.Theme = s
}
}
func WithTextStyle(ms map[string]string) TextOption {
return func(t *Text) {
t.Style = ms
}
}
func WithTextColor(color string) TextOption {
return func(t *Text) {
t.Color = color
}
}
func (text *Text) Html() string {
return text.String()
}
func (text *Text) String() string {
var className string
if text.Style == nil {
text.Style = make(map[string]string)
}
if text.Color != "" {
text.Style["color"] = text.Color
}
if text.Tag == 0 {
text.Tag = atom.Span
}
if text.Theme != "" {
className = "text-" + text.Theme
}
return NewElement(
text.Tag,
text.Content,
WithAttribute("class", className),
WithAttribute("style", text.Style.String()),
).String()
}
func NewText(s string, opts ...TextOption) *Text {
txt := &Text{Content: s, Tag: atom.Span}
for _, cb := range opts {
cb(txt)
}
return txt
}