🎨 Add template type column to Attribute View https://github.com/siyuan-note/siyuan/issues/8766
This commit is contained in:
parent
7d1e1bf2e5
commit
0aa61fe5b7
3 changed files with 18 additions and 17 deletions
|
@ -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 描述了视图的结构。
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue