entry.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package element
  2. import (
  3. "git.nspix.com/golang/pgenr/internal/pool"
  4. "golang.org/x/net/html/atom"
  5. )
  6. type (
  7. Entry struct {
  8. Title Element
  9. Items map[string]Element
  10. Outro Element
  11. }
  12. )
  13. func (element *Entry) Html() string {
  14. return element.String()
  15. }
  16. func (element *Entry) String() string {
  17. br := pool.Get()
  18. defer pool.Put(br)
  19. br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "grid"}))
  20. if element.Title != nil {
  21. br.WriteString(element.Title.Html())
  22. }
  23. for k, v := range element.Items {
  24. br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "row"}))
  25. br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "preview-label"}))
  26. br.WriteString(k)
  27. br.WriteString(endTag(atom.Div.String()))
  28. br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "preview-value"}))
  29. br.WriteString(v.Html())
  30. br.WriteString(endTag(atom.Div.String()))
  31. br.WriteString(endTag(atom.Div.String()))
  32. }
  33. if element.Outro != nil {
  34. br.WriteString(element.Outro.Html())
  35. }
  36. br.WriteString(endTag(atom.Div.String()))
  37. return br.String()
  38. }
  39. func (element *Entry) AddItem(label string, txt *Text) *Entry {
  40. if element.Items == nil {
  41. element.Items = make(map[string]Element)
  42. }
  43. element.Items[label] = txt
  44. return element
  45. }
  46. func NewEntry(element Element) *Entry {
  47. return &Entry{
  48. Title: element,
  49. Items: make(map[string]Element),
  50. }
  51. }