Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2025-09-04 16:31:24 +08:00
commit f6bd240a85
9 changed files with 26 additions and 39 deletions

View file

@ -3820,7 +3820,7 @@
"Children": [ "Children": [
{ {
"Type": "NodeText", "Type": "NodeText",
"Data": "In the code block, only select the content of the code block" "Data": "Double press to select all loaded content blocks in the document; in the code block, only select the content of the code block"
} }
] ]
} }

View file

@ -3818,7 +3818,7 @@
"Children": [ "Children": [
{ {
"Type": "NodeText", "Type": "NodeText",
"Data": "代码块中使用时仅选中代码块中的内容" "Data": "连续按下两次以选中文档中所有已加载的内容块;代码块中使用时仅选中代码块中的内容"
} }
] ]
} }

View file

@ -3808,7 +3808,7 @@
"Children": [ "Children": [
{ {
"Type": "NodeText", "Type": "NodeText",
"Data": "代碼塊中使用時僅選中代碼塊中的內容" "Data": "連續按下兩次以選中文檔中所有已加載的內容塊;代碼塊中使用時僅選中代碼塊中的內容"
} }
] ]
} }

View file

@ -3775,7 +3775,7 @@
"Children": [ "Children": [
{ {
"Type": "NodeText", "Type": "NodeText",
"Data": "コードブロックではコードのみが選択されます" "Data": "文書内のすべてのロード済みコンテンツブロックを選択するにはダブルプレスしてください;コードブロックではコードのみが選択されます"
} }
] ]
} }

View file

@ -42,6 +42,8 @@ type AttributeView struct {
KeyIDs []string `json:"keyIDs"` // 属性视图属性键 ID用于排序 KeyIDs []string `json:"keyIDs"` // 属性视图属性键 ID用于排序
ViewID string `json:"viewID"` // 当前视图 ID ViewID string `json:"viewID"` // 当前视图 ID
Views []*View `json:"views"` // 视图 Views []*View `json:"views"` // 视图
RenderedViewables map[string]Viewable `json:"-"` // 已经渲染好的视图
} }
// KeyValues 描述了属性视图属性键值列表的结构。 // KeyValues 描述了属性视图属性键值列表的结构。
@ -428,7 +430,7 @@ func ParseAttributeView(avID string) (ret *AttributeView, err error) {
return return
} }
ret = &AttributeView{} ret = &AttributeView{RenderedViewables: map[string]Viewable{}}
if err = gulu.JSON.UnmarshalJSON(data, ret); err != nil { if err = gulu.JSON.UnmarshalJSON(data, ret); err != nil {
if strings.Contains(err.Error(), ".relation.contents of type av.Value") { if strings.Contains(err.Error(), ".relation.contents of type av.Value") {
mapAv := map[string]interface{}{} mapAv := map[string]interface{}{}

View file

@ -110,15 +110,7 @@ func renderAttributeViewGroups(viewable av.Viewable, attrView *av.AttributeView,
// 如果存在分组的话渲染分组视图 // 如果存在分组的话渲染分组视图
fixDev := false
for _, groupView := range view.Groups { for _, groupView := range view.Groups {
if (nil == groupView.GroupVal || nil == groupView.GroupKey) && !fixDev {
// TODO 分组上线后删除,预计 2025 年 9 月后可以删除
regenAttrViewGroups(attrView)
av.SaveAttributeView(attrView)
fixDev = true
}
switch groupView.GetGroupValue() { switch groupView.GetGroupValue() {
case groupValueDefault: case groupValueDefault:
groupView.Name = fmt.Sprintf(Conf.language(264), groupKey.Name) groupView.Name = fmt.Sprintf(Conf.language(264), groupKey.Name)

View file

@ -74,11 +74,13 @@ func RenderView(attrView *av.AttributeView, view *av.View, query string) (ret av
renderedAttrViews := map[string]*av.AttributeView{} renderedAttrViews := map[string]*av.AttributeView{}
renderedAttrViews[attrView.ID] = attrView renderedAttrViews[attrView.ID] = attrView
ret = renderView(attrView, view, query, &depth, renderedAttrViews) ret = renderView(attrView, view, query, &depth, renderedAttrViews)
attrView.RenderedViewables[ret.GetID()] = ret
renderedAttrViews[attrView.ID] = attrView
return return
} }
func renderView(attrView *av.AttributeView, view *av.View, query string, func renderView(attrView *av.AttributeView, view *av.View, query string, depth *int, cachedAttrViews map[string]*av.AttributeView) (ret av.Viewable) {
depth *int, cachedAttrViews map[string]*av.AttributeView) (ret av.Viewable) {
if 7 < *depth { if 7 < *depth {
return return
} }
@ -334,9 +336,7 @@ func fillAttributeViewBaseValue(baseValue *av.BaseValue, fieldID, itemID string,
} }
} }
func fillAttributeViewAutoGeneratedValues(attrView *av.AttributeView, collection av.Collection, ials map[string]map[string]string, func fillAttributeViewAutoGeneratedValues(attrView *av.AttributeView, collection av.Collection, ials map[string]map[string]string, depth *int, cachedAttrViews map[string]*av.AttributeView) {
depth *int, cachedAttrViews map[string]*av.AttributeView) {
// 先渲染主键、创建时间、更新时间 // 先渲染主键、创建时间、更新时间
for _, item := range collection.GetItems() { for _, item := range collection.GetItems() {
@ -630,23 +630,6 @@ func fillAttributeViewKeyValues(attrView *av.AttributeView, collection av.Collec
} }
} }
func mergeKeyValues(kv1, kv2 []*av.KeyValues) (ret []*av.KeyValues) {
ret = kv2
for _, k1 := range kv1 {
found := false
for _, k2 := range kv2 {
if k1.Key.ID == k2.Key.ID {
found = true
break
}
}
if !found {
ret = append(ret, k1)
}
}
return
}
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 {

View file

@ -18,8 +18,13 @@ import (
"github.com/siyuan-note/siyuan/kernel/util" "github.com/siyuan-note/siyuan/kernel/util"
) )
func RenderAttributeViewGallery(attrView *av.AttributeView, view *av.View, query string, func RenderAttributeViewGallery(attrView *av.AttributeView, view *av.View, query string, depth *int, cachedAttrViews map[string]*av.AttributeView) (ret *av.Gallery) {
depth *int, cachedAttrViews map[string]*av.AttributeView) (ret *av.Gallery) { viewable := attrView.RenderedViewables[view.ID]
if nil != viewable {
ret = viewable.(*av.Gallery)
return
}
ret = &av.Gallery{ ret = &av.Gallery{
BaseInstance: av.NewViewBaseInstance(view), BaseInstance: av.NewViewBaseInstance(view),
CoverFrom: view.Gallery.CoverFrom, CoverFrom: view.Gallery.CoverFrom,

View file

@ -22,8 +22,13 @@ import (
"github.com/siyuan-note/siyuan/kernel/util" "github.com/siyuan-note/siyuan/kernel/util"
) )
func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query string, func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query string, depth *int, cachedAttrViews map[string]*av.AttributeView) (ret *av.Table) {
depth *int, cachedAttrViews map[string]*av.AttributeView) (ret *av.Table) { viewable := attrView.RenderedViewables[view.ID]
if nil != viewable {
ret = viewable.(*av.Table)
return
}
ret = &av.Table{ ret = &av.Table{
BaseInstance: av.NewViewBaseInstance(view), BaseInstance: av.NewViewBaseInstance(view),
Columns: []*av.TableColumn{}, Columns: []*av.TableColumn{},