// SiYuan - Refactor your thinking // Copyright (c) 2020-present, b3log.org // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . package av import ( "github.com/88250/lute/ast" ) // LayoutTable 描述了表格布局的结构。 type LayoutTable struct { *BaseLayout Columns []*ViewTableColumn `json:"columns"` // 表格列 RowIDs []string `json:"rowIds"` // 行 ID,用于自定义排序 } func (layoutTable *LayoutTable) GetItemIDs() (ret []string) { return layoutTable.RowIDs } func NewLayoutTable() *LayoutTable { return &LayoutTable{ BaseLayout: &BaseLayout{ Spec: 0, ID: ast.NewNodeID(), Filters: []*ViewFilter{}, Sorts: []*ViewSort{}, PageSize: TableViewDefaultPageSize, }, } } // ViewTableColumn 描述了表格列的结构。 type ViewTableColumn struct { ID string `json:"id"` // 列 ID Wrap bool `json:"wrap"` // 是否换行 Hidden bool `json:"hidden"` // 是否隐藏 Pin bool `json:"pin"` // 是否固定 Width string `json:"width"` // 列宽度 Desc string `json:"desc,omitempty"` // 列描述 Calc *ColumnCalc `json:"calc,omitempty"` // 计算 } // Table 描述了表格实例的结构。 type Table struct { *BaseInstance Columns []*TableColumn `json:"columns"` // 表格列 Rows []*TableRow `json:"rows"` // 表格行 RowCount int `json:"rowCount"` // 表格总行数 } // TableColumn 描述了表格实例列的结构。 type TableColumn struct { *BaseInstanceField Wrap bool `json:"wrap"` // 是否换行 Pin bool `json:"pin"` // 是否固定 Width string `json:"width"` // 列宽度 Calc *ColumnCalc `json:"calc"` // 计算 } // TableRow 描述了表格实例行的结构。 type TableRow struct { ID string `json:"id"` // 行 ID Cells []*TableCell `json:"cells"` // 行单元格 } // TableCell 描述了表格实例单元格的结构。 type TableCell struct { *BaseValue Color string `json:"color"` // 单元格颜色 BgColor string `json:"bgColor"` // 单元格背景颜色 } func (table *Table) GetColumn(id string) *TableColumn { for _, column := range table.Columns { if column.ID == id { return column } } return nil } func (row *TableRow) GetID() string { return row.ID } func (row *TableRow) GetBlockValue() (ret *Value) { for _, cell := range row.Cells { if KeyTypeBlock == cell.ValueType { ret = cell.Value break } } return } func (row *TableRow) GetValues() (ret []*Value) { ret = []*Value{} for _, cell := range row.Cells { if nil != cell.Value { ret = append(ret, cell.Value) } } return } func (row *TableRow) GetValue(keyID string) (ret *Value) { for _, cell := range row.Cells { if nil != cell.Value && keyID == cell.Value.KeyID { ret = cell.Value break } } return } func (table *Table) GetItems() (ret []Item) { ret = []Item{} for _, row := range table.Rows { if nil != row { ret = append(ret, row) } } return } func (table *Table) SetItems(items []Item) { table.Rows = []*TableRow{} for _, item := range items { table.Rows = append(table.Rows, item.(*TableRow)) } } func (table *Table) GetFields() (ret []Field) { ret = []Field{} for _, column := range table.Columns { ret = append(ret, column) } return ret } func (*Table) GetType() LayoutType { return LayoutTypeTable } func (table *Table) GetID() string { return table.ID } func (table *Table) Sort(attrView *AttributeView) { sort0(table, attrView) } func (table *Table) Filter(attrView *AttributeView) { filter0(table, attrView) }