123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package vuetifyx
- import (
- "context"
- "fmt"
- v "github.com/qor5/ui/vuetify"
- h "github.com/theplant/htmlgo"
- )
- type DetailInfoBuilder struct {
- columns []h.HTMLComponent
- classes []string
- }
- func DetailInfo(columns ...h.HTMLComponent) (r *DetailInfoBuilder) {
- r = &DetailInfoBuilder{}
- r.columns = columns
- return
- }
- func (b *DetailInfoBuilder) MarshalHTML(ctx context.Context) (r []byte, err error) {
- row := v.VRow()
- for _, col := range b.columns {
- row.AppendChildren(v.VCol(col).Md(true))
- }
- return v.VContainer(row).Class(b.classes...).MarshalHTML(ctx)
- }
- func (b *DetailInfoBuilder) Class(v ...string) (r *DetailInfoBuilder) {
- b.classes = v
- return b
- }
- type DetailFieldBuilder struct {
- label string
- labelMinWidth string
- icon h.HTMLComponent
- children []h.HTMLComponent
- }
- func DetailField(children ...h.HTMLComponent) (r *DetailFieldBuilder) {
- r = &DetailFieldBuilder{
- labelMinWidth: "180px",
- }
- r.Children(children...)
- return
- }
- func (b *DetailFieldBuilder) Children(comps ...h.HTMLComponent) (r *DetailFieldBuilder) {
- b.children = comps
- return b
- }
- func (b *DetailFieldBuilder) Label(v string) (r *DetailFieldBuilder) {
- b.label = v
- return b
- }
- func (b *DetailFieldBuilder) LabelMinWidth(v string) (r *DetailFieldBuilder) {
- b.labelMinWidth = v
- return b
- }
- func (b *DetailFieldBuilder) Icon(v h.HTMLComponent) (r *DetailFieldBuilder) {
- b.icon = v
- return b
- }
- func (b *DetailFieldBuilder) MarshalHTML(ctx context.Context) (r []byte, err error) {
- ki := h.Tag("div").Children(
- h.Tag("label").Text(b.label).Class("blue-grey--text lighten-3").Style(fmt.Sprintf("min-width: %s", b.labelMinWidth)),
- ).Class("d-flex pb-2")
- if b.icon != nil {
- ki.AppendChildren(b.icon)
- }
- ki.AppendChildren(b.children...)
- return ki.MarshalHTML(ctx)
- }
- type DetailColumnBuilder struct {
- key string
- children []h.HTMLComponent
- header string
- }
- func DetailColumn(children ...h.HTMLComponent) (r *DetailColumnBuilder) {
- r = &DetailColumnBuilder{}
- r.Children(children...)
- return
- }
- func (b *DetailColumnBuilder) Children(comps ...h.HTMLComponent) (r *DetailColumnBuilder) {
- b.children = comps
- return b
- }
- func (b *DetailColumnBuilder) Header(text string) (r *DetailColumnBuilder) {
- b.header = text
- return b
- }
- func (b *DetailColumnBuilder) Append(label string, comp h.HTMLComponent) (r *DetailColumnBuilder) {
- b.AppendIcon(label, nil, comp)
- return b
- }
- func (b *DetailColumnBuilder) AppendIcon(label string, icon h.HTMLComponent, comp h.HTMLComponent) (r *DetailColumnBuilder) {
- b.children = append(b.children, DetailField(comp).Label(label).Icon(icon))
- return b
- }
- func (b *DetailColumnBuilder) MarshalHTML(ctx context.Context) (r []byte, err error) {
- detailInfoBody := h.Tag("div")
- if len(b.header) > 0 {
- detailInfoBody.AppendChildren(
- h.Tag("h5").Text(b.header).Class("subtitle-2 pb-2"),
- )
- }
- detailInfoBody.AppendChildren(b.children...)
- return detailInfoBody.MarshalHTML(ctx)
- }
- type OptionalTextBuilder struct {
- text string
- zeroLabel string
- }
- func OptionalText(text string) (r *OptionalTextBuilder) {
- r = &OptionalTextBuilder{text: text}
- return
- }
- func (b *OptionalTextBuilder) ZeroLabel(label string) (r *OptionalTextBuilder) {
- b.zeroLabel = label
- return b
- }
- func (b *OptionalTextBuilder) MarshalHTML(ctx context.Context) (r []byte, err error) {
- var body h.HTMLComponent
- if len(b.text) > 0 {
- body = h.Tag("span").Text(b.text)
- } else {
- body = h.Tag("span").Class("grey--text lighten-5").Text(b.zeroLabel)
- }
- return body.MarshalHTML(ctx)
- }
|