From 0aa61fe5b7eb44941410c5591e654ce7850b46d0 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 1 Oct 2023 18:14:31 +0800 Subject: [PATCH] :art: Add template type column to Attribute View https://github.com/siyuan-note/siyuan/issues/8766 --- kernel/av/av.go | 6 +++--- kernel/av/table.go | 26 +++++++++++++------------- kernel/model/attribute_view.go | 3 ++- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index 30ed96b68..08e370de1 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -143,7 +143,7 @@ func (value *Value) String() string { } return strings.Join(ret, " ") case KeyTypeTemplate: - return value.Template.content + return value.Template.Content default: return "" } @@ -351,11 +351,11 @@ type ValueAsset struct { } type ValueTemplate struct { - content string `json:"content"` + Content string `json:"content"` } func (t *ValueTemplate) Render(blockID string, r func(blockID string) string) { - t.content = r(blockID) + t.Content = r(blockID) } // View 描述了视图的结构。 diff --git a/kernel/av/table.go b/kernel/av/table.go index 3e4d981ea..b09f0a3df 100644 --- a/kernel/av/table.go +++ b/kernel/av/table.go @@ -523,7 +523,7 @@ func (table *Table) calcColTemplate(col *TableColumn, colIndex int) { case CalcOperatorCountValues: countValues := 0 for _, row := range table.Rows { - if nil != row.Cells[colIndex] && nil != row.Cells[colIndex].Value && nil != row.Cells[colIndex].Value.Template && "" != row.Cells[colIndex].Value.Template.content { + if nil != row.Cells[colIndex] && nil != row.Cells[colIndex].Value && nil != row.Cells[colIndex].Value.Template && "" != row.Cells[colIndex].Value.Template.Content { countValues++ } } @@ -532,9 +532,9 @@ func (table *Table) calcColTemplate(col *TableColumn, colIndex int) { countUniqueValues := 0 uniqueValues := map[string]bool{} for _, row := range table.Rows { - if nil != row.Cells[colIndex] && nil != row.Cells[colIndex].Value && nil != row.Cells[colIndex].Value.Template && "" != row.Cells[colIndex].Value.Template.content { - if !uniqueValues[row.Cells[colIndex].Value.Template.content] { - uniqueValues[row.Cells[colIndex].Value.Template.content] = true + if nil != row.Cells[colIndex] && nil != row.Cells[colIndex].Value && nil != row.Cells[colIndex].Value.Template && "" != row.Cells[colIndex].Value.Template.Content { + if !uniqueValues[row.Cells[colIndex].Value.Template.Content] { + uniqueValues[row.Cells[colIndex].Value.Template.Content] = true countUniqueValues++ } } @@ -543,7 +543,7 @@ func (table *Table) calcColTemplate(col *TableColumn, colIndex int) { case CalcOperatorCountEmpty: countEmpty := 0 for _, row := range table.Rows { - if nil == row.Cells[colIndex] || nil == row.Cells[colIndex].Value || nil == row.Cells[colIndex].Value.Template || "" == row.Cells[colIndex].Value.Template.content { + if nil == row.Cells[colIndex] || nil == row.Cells[colIndex].Value || nil == row.Cells[colIndex].Value.Template || "" == row.Cells[colIndex].Value.Template.Content { countEmpty++ } } @@ -551,7 +551,7 @@ func (table *Table) calcColTemplate(col *TableColumn, colIndex int) { case CalcOperatorCountNotEmpty: countNotEmpty := 0 for _, row := range table.Rows { - if nil != row.Cells[colIndex] && nil != row.Cells[colIndex].Value && nil != row.Cells[colIndex].Value.Template && "" != row.Cells[colIndex].Value.Template.content { + if nil != row.Cells[colIndex] && nil != row.Cells[colIndex].Value && nil != row.Cells[colIndex].Value.Template && "" != row.Cells[colIndex].Value.Template.Content { countNotEmpty++ } } @@ -559,7 +559,7 @@ func (table *Table) calcColTemplate(col *TableColumn, colIndex int) { case CalcOperatorPercentEmpty: countEmpty := 0 for _, row := range table.Rows { - if nil == row.Cells[colIndex] || nil == row.Cells[colIndex].Value || nil == row.Cells[colIndex].Value.Template || "" == row.Cells[colIndex].Value.Template.content { + if nil == row.Cells[colIndex] || nil == row.Cells[colIndex].Value || nil == row.Cells[colIndex].Value.Template || "" == row.Cells[colIndex].Value.Template.Content { countEmpty++ } } @@ -569,7 +569,7 @@ func (table *Table) calcColTemplate(col *TableColumn, colIndex int) { case CalcOperatorPercentNotEmpty: countNotEmpty := 0 for _, row := range table.Rows { - if nil != row.Cells[colIndex] && nil != row.Cells[colIndex].Value && nil != row.Cells[colIndex].Value.Template && "" != row.Cells[colIndex].Value.Template.content { + if nil != row.Cells[colIndex] && nil != row.Cells[colIndex].Value && nil != row.Cells[colIndex].Value.Template && "" != row.Cells[colIndex].Value.Template.Content { countNotEmpty++ } } @@ -969,16 +969,16 @@ func (table *Table) calcColNumber(col *TableColumn, colIndex int) { } } case CalcOperatorMin: - min := math.MaxFloat64 + minVal := math.MaxFloat64 for _, row := range table.Rows { if nil != row.Cells[colIndex] && nil != row.Cells[colIndex].Value && nil != row.Cells[colIndex].Value.Number && row.Cells[colIndex].Value.Number.IsNotEmpty { - if row.Cells[colIndex].Value.Number.Content < min { - min = row.Cells[colIndex].Value.Number.Content + if row.Cells[colIndex].Value.Number.Content < minVal { + minVal = row.Cells[colIndex].Value.Number.Content } } } - if math.MaxFloat64 != min { - col.Calc.Result = &Value{Number: NewFormattedValueNumber(min, col.NumberFormat)} + if math.MaxFloat64 != minVal { + col.Calc.Result = &Value{Number: NewFormattedValueNumber(minVal, col.NumberFormat)} } case CalcOperatorMax: maxVal := -math.MaxFloat64 diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index abee32ac9..c68d1d552 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -232,7 +232,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a } // 渲染模板列 - if av.KeyTypeTemplate == tableCell.ValueType && nil != tableCell.Value && nil != tableCell.Value.Template { + if av.KeyTypeTemplate == tableCell.ValueType { render := func(blockID string) string { funcMap := sprig.TxtFuncMap() goTpl := template.New("").Delims(".action{", "}") @@ -250,6 +250,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a return buf.String() } + tableCell.Value = &av.Value{ID: tableCell.ID, KeyID: col.ID, BlockID: rowID, Type: av.KeyTypeTemplate, Template: &av.ValueTemplate{}} tableCell.Value.Template.Render(tableCell.Value.BlockID, render) }