package element import ( "git.nspix.com/golang/pgenr/internal/pool" "golang.org/x/net/html/atom" ) type ( entryItem struct { Label Element Content Element } Entry struct { Title Element Items []entryItem Outro 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 _, 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(v.Label.Html()) br.WriteString(endTag(atom.Div.String())) br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "preview-value"})) br.WriteString(v.Content.Html()) br.WriteString(endTag(atom.Div.String())) br.WriteString(endTag(atom.Div.String())) } if element.Outro != nil { br.WriteString(element.Outro.Html()) } br.WriteString(endTag(atom.Div.String())) return br.String() } func (element *Entry) PushItem(label Element, content Element) *Entry { if element.Items == nil { element.Items = make([]entryItem, 0) } element.Items = append(element.Items, entryItem{ Label: label, Content: content, }) return element } func (element *Entry) AddItem(label string, e Element) *Entry { return element.PushItem(NewText(label), e) } func NewEntry(element Element) *Entry { return &Entry{ Title: element, Items: make([]entryItem, 0), } }