From fb66a57551dfc5a2c758fc026442f2ddbb9bff74 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 9 Jun 2025 12:21:18 +0800 Subject: [PATCH 1/2] :art: Database gallery view https://github.com/siyuan-note/siyuan/issues/10414 --- kernel/model/attribute_view.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 83c798aa3..b52c8ff00 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -2169,6 +2169,22 @@ func addAttributeViewBlock(now int64, avID, blockID, previousBlockID, addingBloc } else { v.Table.RowIDs = append([]string{addingBlockID}, v.Table.RowIDs...) } + case av.LayoutTypeGallery: + if "" != previousBlockID { + changed := false + for i, id := range v.Gallery.CardIDs { + if id == previousBlockID { + v.Gallery.CardIDs = append(v.Gallery.CardIDs[:i+1], append([]string{addingBlockID}, v.Gallery.CardIDs[i+1:]...)...) + changed = true + break + } + } + if !changed { + v.Gallery.CardIDs = append(v.Gallery.CardIDs, addingBlockID) + } + } else { + v.Gallery.CardIDs = append([]string{addingBlockID}, v.Gallery.CardIDs...) + } } } @@ -2781,6 +2797,23 @@ func AddAttributeViewKey(avID, keyID, keyName, keyType, keyIcon, previousKeyID s if !added { view.Table.Columns = append(view.Table.Columns, &av.ViewTableColumn{ID: key.ID}) } + case av.LayoutTypeGallery: + if "" == previousKeyID { + view.Gallery.CardFields = append([]*av.ViewGalleryCardField{{ID: key.ID}}, view.Gallery.CardFields...) + break + } + + added := false + for i, field := range view.Gallery.CardFields { + if field.ID == previousKeyID { + view.Gallery.CardFields = append(view.Gallery.CardFields[:i+1], append([]*av.ViewGalleryCardField{{ID: key.ID}}, view.Gallery.CardFields[i+1:]...)...) + added = true + break + } + } + if !added { + view.Gallery.CardFields = append(view.Gallery.CardFields, &av.ViewGalleryCardField{ID: key.ID}) + } } } } From b58b33f7953e5c264d67aee77e8030a23d2e12e4 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 9 Jun 2025 16:23:12 +0800 Subject: [PATCH 2/2] :art: Database gallery view https://github.com/siyuan-note/siyuan/issues/10414 --- kernel/av/av.go | 3 +++ kernel/av/layout_gallery.go | 21 +++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index 674c4dc9a..7c52db433 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -257,6 +257,9 @@ func NewGalleryView() (ret *View) { Sorts: []*ViewSort{}, PageSize: GalleryViewDefaultPageSize, }, + CoverFrom: CoverFromContentImage, + CardSize: CardSizeMedium, + ShowIcon: true, }, } return diff --git a/kernel/av/layout_gallery.go b/kernel/av/layout_gallery.go index 57600712d..cd6a48e40 100644 --- a/kernel/av/layout_gallery.go +++ b/kernel/av/layout_gallery.go @@ -22,12 +22,25 @@ import "sort" type LayoutGallery struct { *BaseLayout - CoverFrom CoverFrom `json:"coverFrom"` // 封面来源,0:无,1:内容图,2:资源字段 - CoverFromAssetKeyID string `json:"coverFromAssetKeyId,omitempty"` // 资源字段 ID,CoverFrom 为 2 时有效 - CardFields []*ViewGalleryCardField `json:"fields"` // 画廊卡片字段 - CardIDs []string `json:"cardIds"` // 卡片 ID,用于自定义排序 + CoverFrom CoverFrom `json:"coverFrom"` // 封面来源,0:无,1:内容图,2:资源字段 + CoverFromAssetKeyID string `json:"coverFromAssetKeyId,omitempty"` // 资源字段 ID,CoverFrom 为 2 时有效 + CardSize CardSize `json:"cardSize"` // 卡片大小 + FitImage bool `json:"fitImage"` // 是否适应图片大小 + ShowIcon bool `json:"showIcon"` // 是否显示图标 + WrapField bool `json:"wrapField"` // 是否换行字段 + + CardFields []*ViewGalleryCardField `json:"fields"` // 画廊卡片字段 + CardIDs []string `json:"cardIds"` // 卡片 ID,用于自定义排序 } +type CardSize int + +const ( + CardSizeSmall CardSize = iota // 小卡片 + CardSizeMedium // 中卡片 + CardSizeLarge // 大卡片 +) + // CoverFrom 描述了画廊中的卡片封面来源的枚举类型。 type CoverFrom int