1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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("</")
- br.WriteString(text.Tag.String())
- 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
- }
|