|
@@ -1,16 +1,19 @@
|
|
|
package element
|
|
|
|
|
|
import (
|
|
|
+ "fmt"
|
|
|
"git.nspix.com/golang/pgenr/internal/pool"
|
|
|
"golang.org/x/net/html/atom"
|
|
|
)
|
|
|
|
|
|
type (
|
|
|
Table struct {
|
|
|
- Title Element
|
|
|
- Header []Element
|
|
|
- Body [][]Element
|
|
|
- Outro Element
|
|
|
+ Title Element
|
|
|
+ FixedColumn bool
|
|
|
+ FixedWidth int
|
|
|
+ Header []Element
|
|
|
+ Body [][]Element
|
|
|
+ Outro Element
|
|
|
}
|
|
|
)
|
|
|
|
|
@@ -33,28 +36,84 @@ func (table *Table) String() string {
|
|
|
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()))
|
|
|
+ if table.FixedColumn {
|
|
|
+ if table.FixedWidth <= 0 {
|
|
|
+ table.FixedWidth = 100
|
|
|
}
|
|
|
- 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.Div.String(), Attrs{"class": "table-fixed", "style": fmt.Sprintf("width:%dpx", table.FixedWidth+1)}))
|
|
|
+ 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))
|
|
|
+ br.WriteString(renderTag(atom.Th.String(), nil, table.Header[0].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))
|
|
|
+ br.WriteString(renderTag(atom.Td.String(), nil, cell[0].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()))
|
|
|
+ br.WriteString(beginTag(atom.Div.String(), Attrs{"class": "table-relative", "style": fmt.Sprintf("padding-left:%dpx", table.FixedWidth)}))
|
|
|
+ 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 i, text := range table.Header {
|
|
|
+ if i == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ 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 i, text := range cell {
|
|
|
+ if i == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ 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()))
|
|
|
+ } else {
|
|
|
+ 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 cell {
|
|
|
- br.WriteString(renderTag(atom.Td.String(), nil, text.Html()))
|
|
|
+ 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.Tbody.String()))
|
|
|
+ br.WriteString(endTag(atom.Table.String()))
|
|
|
}
|
|
|
- br.WriteString(endTag(atom.Table.String()))
|
|
|
br.WriteString(endTag(atom.Div.String()))
|
|
|
if table.Outro != nil {
|
|
|
br.WriteString(table.Outro.Html())
|