1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package element
- import (
- "git.nspix.com/golang/pgenr/internal/pool"
- "golang.org/x/net/html/atom"
- "time"
- )
- type (
- TimelineItem struct {
- Datetime time.Time
- Content Element
- }
- Timeline struct {
- Layout string
- Items []TimelineItem
- }
- )
- func (element *Timeline) AddItem(tm time.Time, content Element) *Timeline {
- if element.Items == nil {
- element.Items = make([]TimelineItem, 0)
- }
- element.Items = append(element.Items, TimelineItem{
- Datetime: tm,
- Content: content,
- })
- return element
- }
- func (element *Timeline) Html() string {
- return element.String()
- }
- func (element *Timeline) String() string {
- br := pool.Get()
- defer pool.Put(br)
- br.WriteString(beginTag(atom.Ul.String(), Attrs{"class": "timeline"}))
- for _, item := range element.Items {
- br.WriteString(beginTag(atom.Li.String(), Attrs{"class": "timeline-item"}))
- br.WriteString(renderTag(atom.Div.String(), Attrs{"class": "timeline-item-tail"}, ""))
- br.WriteString(renderTag(atom.Div.String(), Attrs{"class": "timeline-item-node"}, ""))
- br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "timeline-item-wrapper"}))
- br.WriteString(renderTag(atom.Div.String(), Attrs{"class": "timeline-item-timestamp"}, item.Datetime.Format(element.Layout)))
- br.WriteString(renderTag(atom.Div.String(), Attrs{"class": "timeline-item-content"}, item.Content.Html()))
- br.WriteString(endTag(atom.Div.String()))
- br.WriteString(endTag(atom.Li.String()))
- }
- br.WriteString(endTag(atom.Ul.String()))
- return br.String()
- }
- func NewTimeline() *Timeline {
- return &Timeline{Layout: "2006-01-02", Items: make([]TimelineItem, 0)}
- }
|