entry.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. }
  11. )
  12. func (element *Entry) Html() string {
  13. return element.String()
  14. }
  15. func (element *Entry) String() string {
  16. br := pool.Get()
  17. defer pool.Put(br)
  18. br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "grid"}))
  19. if element.Title != nil {
  20. br.WriteString(element.Title.Html())
  21. }
  22. for k, v := range element.Items {
  23. br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "row"}))
  24. br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "preview-label"}))
  25. br.WriteString(k)
  26. br.WriteString(endTag(atom.Div.String()))
  27. br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "preview-value"}))
  28. br.WriteString(v.Html())
  29. br.WriteString(endTag(atom.Div.String()))
  30. br.WriteString(endTag(atom.Div.String()))
  31. }
  32. br.WriteString(endTag(atom.Div.String()))
  33. return br.String()
  34. }
  35. func (element *Entry) AddItem(label string, txt *Text) *Entry {
  36. if element.Items == nil {
  37. element.Items = make(map[string]Element)
  38. }
  39. element.Items[label] = txt
  40. return element
  41. }
  42. func NewEntry(title string) *Entry {
  43. return &Entry{
  44. Title: NewText(title, WithTextTag(atom.P)),
  45. Items: make(map[string]Element),
  46. }
  47. }