package element import ( "git.nspix.com/golang/pgenr/internal/pool" "golang.org/x/net/html/atom" "html" ) 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 WithTextTag(tag atom.Atom) TextOption { return func(t *Text) { t.Tag = tag } } 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 { br := pool.Get() defer pool.Put(br) 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 } br.WriteString("<") br.WriteString(text.Tag.String()) if text.Theme != "" { br.WriteString(" class='text-") br.WriteString(text.Theme) br.WriteString("'") } if len(text.Style) > 0 { br.WriteString(" style='") br.WriteString(text.Style.String()) br.WriteString("'") } br.WriteString(">") br.WriteString(html.EscapeString(text.Content)) br.WriteString("") return br.String() } func NewText(s string, opts ...TextOption) *Text { txt := &Text{Content: s, Tag: atom.Span} for _, cb := range opts { cb(txt) } return txt }