package element import ( "git.nspix.com/golang/pgenr/internal/pool" "golang.org/x/net/html/atom" ) type ( Table struct { Title Element Header []Element Body [][]Element Outro Element } ) func (table *Table) SetHead(elements ...Element) { table.Header = elements } func (table *Table) AddCell(elements ...Element) { if table.Body == nil { table.Body = make([][]Element, 0) } table.Body = append(table.Body, elements) } func (table *Table) String() string { br := pool.Get() defer pool.Put(br) br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "table-wrapper"})) if table.Title != nil { br.WriteString(renderTag(atom.Div.String(), Attrs{"class": "table-title"}, table.Title.Html())) } br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "table-wrapper-inner"})) br.WriteString(beginTag(atom.Table.String(), Attrs{"class": "table"})) if len(table.Header) > 0 { br.WriteString(beginTag(atom.Thead.String(), nil)) br.WriteString(beginTag(atom.Tr.String(), nil)) for _, text := range table.Header { br.WriteString(renderTag(atom.Th.String(), nil, text.Html())) } br.WriteString(endTag(atom.Tr.String())) br.WriteString(endTag(atom.Thead.String())) } if len(table.Body) > 0 { br.WriteString(beginTag(atom.Tbody.String(), nil)) for _, cell := range table.Body { br.WriteString(beginTag(atom.Tr.String(), nil)) for _, text := range cell { br.WriteString(renderTag(atom.Td.String(), nil, text.Html())) } br.WriteString(endTag(atom.Tr.String())) } br.WriteString(endTag(atom.Tbody.String())) } br.WriteString(endTag(atom.Table.String())) br.WriteString(endTag(atom.Div.String())) if table.Outro != nil { br.WriteString(table.Outro.Html()) } br.WriteString(endTag(atom.Div.String())) return br.String() } func NewTable(title *Text) *Table { table := &Table{ Title: title, Header: make([]Element, 0), Body: make([][]Element, 0), } return table }