mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-17 23:20:13 +01:00
🎨 Database gallery view https://github.com/siyuan-note/siyuan/issues/10414
This commit is contained in:
parent
c5bea14bd6
commit
05d1085633
3 changed files with 53 additions and 89 deletions
|
|
@ -25,6 +25,7 @@ import (
|
||||||
"github.com/siyuan-note/logging"
|
"github.com/siyuan-note/logging"
|
||||||
"github.com/siyuan-note/siyuan/kernel/av"
|
"github.com/siyuan-note/siyuan/kernel/av"
|
||||||
"github.com/siyuan-note/siyuan/kernel/filesys"
|
"github.com/siyuan-note/siyuan/kernel/filesys"
|
||||||
|
"github.com/siyuan-note/siyuan/kernel/treenode"
|
||||||
"github.com/siyuan-note/siyuan/kernel/util"
|
"github.com/siyuan-note/siyuan/kernel/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -173,6 +174,54 @@ func RenderTemplateField(ial map[string]string, keyValues []*av.KeyValues, tplCo
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func generateAttrViewItems(attrView *av.AttributeView) (ret map[string][]*av.KeyValues) {
|
||||||
|
ret = map[string][]*av.KeyValues{}
|
||||||
|
for _, keyValues := range attrView.KeyValues {
|
||||||
|
for _, val := range keyValues.Values {
|
||||||
|
values := ret[val.BlockID]
|
||||||
|
if nil == values {
|
||||||
|
values = []*av.KeyValues{{Key: keyValues.Key, Values: []*av.Value{val}}}
|
||||||
|
} else {
|
||||||
|
values = append(values, &av.KeyValues{Key: keyValues.Key, Values: []*av.Value{val}})
|
||||||
|
}
|
||||||
|
ret[val.BlockID] = values
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func filterNotFoundAttrViewItems(keyValuesMap *map[string][]*av.KeyValues) {
|
||||||
|
var notFound []string
|
||||||
|
var toCheckBlockIDs []string
|
||||||
|
for blockID, keyValues := range *keyValuesMap {
|
||||||
|
blockValue := getBlockValue(keyValues)
|
||||||
|
if nil == blockValue {
|
||||||
|
notFound = append(notFound, blockID)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if blockValue.IsDetached {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if nil != blockValue.Block && "" == blockValue.Block.ID {
|
||||||
|
notFound = append(notFound, blockID)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
toCheckBlockIDs = append(toCheckBlockIDs, blockID)
|
||||||
|
}
|
||||||
|
checkRet := treenode.ExistBlockTrees(toCheckBlockIDs)
|
||||||
|
for blockID, exist := range checkRet {
|
||||||
|
if !exist {
|
||||||
|
notFound = append(notFound, blockID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, blockID := range notFound {
|
||||||
|
delete(*keyValuesMap, blockID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func fillAttributeViewNilValue(value *av.Value, typ av.KeyType) {
|
func fillAttributeViewNilValue(value *av.Value, typ av.KeyType) {
|
||||||
value.Type = typ
|
value.Type = typ
|
||||||
switch typ {
|
switch typ {
|
||||||
|
|
|
||||||
|
|
@ -64,50 +64,8 @@ func RenderAttributeViewGallery(attrView *av.AttributeView, view *av.View, query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成卡片
|
cardsValues := generateAttrViewItems(attrView) // 生成卡片
|
||||||
cardsValues := map[string][]*av.KeyValues{}
|
filterNotFoundAttrViewItems(&cardsValues) // 过滤掉不存在的卡片
|
||||||
for _, keyValues := range attrView.KeyValues {
|
|
||||||
for _, val := range keyValues.Values {
|
|
||||||
values := cardsValues[val.BlockID]
|
|
||||||
if nil == values {
|
|
||||||
values = []*av.KeyValues{{Key: keyValues.Key, Values: []*av.Value{val}}}
|
|
||||||
} else {
|
|
||||||
values = append(values, &av.KeyValues{Key: keyValues.Key, Values: []*av.Value{val}})
|
|
||||||
}
|
|
||||||
cardsValues[val.BlockID] = values
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 过滤掉不存在的卡片
|
|
||||||
var notFound []string
|
|
||||||
var toCheckBlockIDs []string
|
|
||||||
for blockID, keyValues := range cardsValues {
|
|
||||||
blockValue := getBlockValue(keyValues)
|
|
||||||
if nil == blockValue {
|
|
||||||
notFound = append(notFound, blockID)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if blockValue.IsDetached {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if nil != blockValue.Block && "" == blockValue.Block.ID {
|
|
||||||
notFound = append(notFound, blockID)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
toCheckBlockIDs = append(toCheckBlockIDs, blockID)
|
|
||||||
}
|
|
||||||
checkRet := treenode.ExistBlockTrees(toCheckBlockIDs)
|
|
||||||
for blockID, exist := range checkRet {
|
|
||||||
if !exist {
|
|
||||||
notFound = append(notFound, blockID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, blockID := range notFound {
|
|
||||||
delete(cardsValues, blockID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 生成卡片字段值
|
// 生成卡片字段值
|
||||||
for cardID, cardValues := range cardsValues {
|
for cardID, cardValues := range cardsValues {
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import (
|
||||||
|
|
||||||
"github.com/88250/lute/ast"
|
"github.com/88250/lute/ast"
|
||||||
"github.com/siyuan-note/siyuan/kernel/av"
|
"github.com/siyuan-note/siyuan/kernel/av"
|
||||||
"github.com/siyuan-note/siyuan/kernel/treenode"
|
|
||||||
"github.com/siyuan-note/siyuan/kernel/util"
|
"github.com/siyuan-note/siyuan/kernel/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -72,50 +71,8 @@ func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query s
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成行
|
rowsValues := generateAttrViewItems(attrView) // 生成行
|
||||||
rowsValues := map[string][]*av.KeyValues{}
|
filterNotFoundAttrViewItems(&rowsValues) // 过滤掉不存在的行
|
||||||
for _, keyValues := range attrView.KeyValues {
|
|
||||||
for _, val := range keyValues.Values {
|
|
||||||
values := rowsValues[val.BlockID]
|
|
||||||
if nil == values {
|
|
||||||
values = []*av.KeyValues{{Key: keyValues.Key, Values: []*av.Value{val}}}
|
|
||||||
} else {
|
|
||||||
values = append(values, &av.KeyValues{Key: keyValues.Key, Values: []*av.Value{val}})
|
|
||||||
}
|
|
||||||
rowsValues[val.BlockID] = values
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 过滤掉不存在的行
|
|
||||||
var notFound []string
|
|
||||||
var toCheckBlockIDs []string
|
|
||||||
for blockID, keyValues := range rowsValues {
|
|
||||||
blockValue := getBlockValue(keyValues)
|
|
||||||
if nil == blockValue {
|
|
||||||
notFound = append(notFound, blockID)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if blockValue.IsDetached {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if nil != blockValue.Block && "" == blockValue.Block.ID {
|
|
||||||
notFound = append(notFound, blockID)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
toCheckBlockIDs = append(toCheckBlockIDs, blockID)
|
|
||||||
}
|
|
||||||
checkRet := treenode.ExistBlockTrees(toCheckBlockIDs)
|
|
||||||
for blockID, exist := range checkRet {
|
|
||||||
if !exist {
|
|
||||||
notFound = append(notFound, blockID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, blockID := range notFound {
|
|
||||||
delete(rowsValues, blockID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 生成行单元格
|
// 生成行单元格
|
||||||
for rowID, rowValues := range rowsValues {
|
for rowID, rowValues := range rowsValues {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue