Explorar o código

:art: Add template type column to Attribute View https://github.com/siyuan-note/siyuan/issues/8766

Daniel hai 1 ano
pai
achega
0aa61fe5b7
Modificáronse 3 ficheiros con 18 adicións e 17 borrados
  1. 3 3
      kernel/av/av.go
  2. 13 13
      kernel/av/table.go
  3. 2 1
      kernel/model/attribute_view.go

+ 3 - 3
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 描述了视图的结构。

+ 13 - 13
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

+ 2 - 1
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)
 			}