package element import ( "git.nspix.com/golang/pgenr/internal/pool" "golang.org/x/net/html/atom" ) type ( Entry struct { Title Element Items map[string]Element } ) func (element *Entry) Html() string { return element.String() } func (element *Entry) String() string { br := pool.Get() defer pool.Put(br) br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "grid"})) if element.Title != nil { br.WriteString(element.Title.Html()) } for k, v := range element.Items { br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "row"})) br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "preview-label"})) br.WriteString(k) br.WriteString(endTag(atom.Div.String())) br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "preview-value"})) br.WriteString(v.Html()) br.WriteString(endTag(atom.Div.String())) br.WriteString(endTag(atom.Div.String())) } br.WriteString(endTag(atom.Div.String())) return br.String() } func (element *Entry) AddItem(label string, txt *Text) *Entry { if element.Items == nil { element.Items = make(map[string]Element) } element.Items[label] = txt return element } func NewEntry(title string) *Entry { return &Entry{ Title: NewText(title, WithTextTag(atom.P)), Items: make(map[string]Element), } }