entry.go 1.6 KB

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