From 81c7931e0f1b5532ef50172d70f591f7386371ba Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 9 Jun 2025 22:26:08 +0800 Subject: [PATCH 1/6] :art: Database gallery view https://github.com/siyuan-note/siyuan/issues/10414 --- kernel/model/attribute_view.go | 30 ++++++++++++++++++++++++++++++ kernel/model/transaction.go | 2 ++ 2 files changed, 32 insertions(+) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index bc8765a19..26c4d66ef 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -44,6 +44,36 @@ import ( "github.com/xrash/smetrics" ) +func (tx *Transaction) doSetAttrViewCoverFrom(operation *Operation) (ret *TxErr) { + err := setAttrViewCoverFrom(operation) + if err != nil { + return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()} + } + return +} + +func setAttrViewCoverFrom(operation *Operation) (err error) { + attrView, err := av.ParseAttributeView(operation.AvID) + if err != nil { + return + } + + view, err := getAttrViewViewByBlockID(attrView, operation.BlockID) + if err != nil { + return + } + + switch view.LayoutType { + case av.LayoutTypeTable: + return + case av.LayoutTypeGallery: + view.Gallery.CoverFrom = av.CoverFrom(operation.Data.(float64)) + } + + err = av.SaveAttributeView(attrView) + return +} + func AppendAttributeViewDetachedBlocksWithValues(avID string, blocksValues [][]*av.Value) (err error) { attrView, err := av.ParseAttributeView(avID) if err != nil { diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index c911617e3..ab0620cca 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -278,6 +278,8 @@ func performTx(tx *Transaction) (ret *TxErr) { ret = tx.doUnbindAttrViewBlock(op) case "duplicateAttrViewKey": ret = tx.doDuplicateAttrViewKey(op) + case "setAttrViewCoverFrom": + ret = tx.doSetAttrViewCoverFrom(op) } if nil != ret { From 5df063fbec414eeb96ecd4bd9fab7e57ece48228 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 9 Jun 2025 22:27:51 +0800 Subject: [PATCH 2/6] :art: Database gallery view https://github.com/siyuan-note/siyuan/issues/10414 --- kernel/model/attribute_view.go | 30 ++++++++++++++++++++++++++++++ kernel/model/transaction.go | 2 ++ 2 files changed, 32 insertions(+) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 26c4d66ef..56b9bc6dd 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -44,6 +44,36 @@ import ( "github.com/xrash/smetrics" ) +func (tx *Transaction) doSetAttrViewCoverFromAssetKeyID(operation *Operation) (ret *TxErr) { + err := setAttrViewCoverFromAssetKeyID(operation) + if err != nil { + return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()} + } + return +} + +func setAttrViewCoverFromAssetKeyID(operation *Operation) (err error) { + attrView, err := av.ParseAttributeView(operation.AvID) + if err != nil { + return + } + + view, err := getAttrViewViewByBlockID(attrView, operation.BlockID) + if err != nil { + return + } + + switch view.LayoutType { + case av.LayoutTypeTable: + return + case av.LayoutTypeGallery: + view.Gallery.CoverFromAssetKeyID = operation.KeyID + } + + err = av.SaveAttributeView(attrView) + return +} + func (tx *Transaction) doSetAttrViewCoverFrom(operation *Operation) (ret *TxErr) { err := setAttrViewCoverFrom(operation) if err != nil { diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index ab0620cca..d4d17785b 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -280,6 +280,8 @@ func performTx(tx *Transaction) (ret *TxErr) { ret = tx.doDuplicateAttrViewKey(op) case "setAttrViewCoverFrom": ret = tx.doSetAttrViewCoverFrom(op) + case "setAttrViewCoverFromAssetKeyID": + ret = tx.doSetAttrViewCoverFromAssetKeyID(op) } if nil != ret { From c145cd2a9522d089cfcbe463095549d9e2e2e472 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 9 Jun 2025 22:30:00 +0800 Subject: [PATCH 3/6] :art: Database gallery view https://github.com/siyuan-note/siyuan/issues/10414 --- kernel/av/layout_gallery.go | 2 +- kernel/model/attribute_view.go | 30 ++++++++++++++++++++++++++++++ kernel/model/transaction.go | 2 ++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/kernel/av/layout_gallery.go b/kernel/av/layout_gallery.go index 762441614..b3e09e68f 100644 --- a/kernel/av/layout_gallery.go +++ b/kernel/av/layout_gallery.go @@ -24,7 +24,7 @@ type LayoutGallery struct { CoverFrom CoverFrom `json:"coverFrom"` // 封面来源,0:无,1:内容图,2:资源字段 CoverFromAssetKeyID string `json:"coverFromAssetKeyId,omitempty"` // 资源字段 ID,CoverFrom 为 2 时有效 - CardSize CardSize `json:"cardSize"` // 卡片大小 + CardSize CardSize `json:"cardSize"` // 卡片大小,0:小卡片,1:中卡片,2:大卡片 FitImage bool `json:"fitImage"` // 是否适应图片大小 ShowIcon bool `json:"showIcon"` // 是否显示图标 WrapField bool `json:"wrapField"` // 是否换行字段 diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 56b9bc6dd..a6c0191c7 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -44,6 +44,36 @@ import ( "github.com/xrash/smetrics" ) +func (tx *Transaction) doSetAttrViewCardSize(operation *Operation) (ret *TxErr) { + err := setAttrViewCardSize(operation) + if err != nil { + return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()} + } + return +} + +func setAttrViewCardSize(operation *Operation) (err error) { + attrView, err := av.ParseAttributeView(operation.AvID) + if err != nil { + return + } + + view, err := getAttrViewViewByBlockID(attrView, operation.BlockID) + if err != nil { + return + } + + switch view.LayoutType { + case av.LayoutTypeTable: + return + case av.LayoutTypeGallery: + view.Gallery.CardSize = av.CardSize(operation.Data.(float64)) + } + + err = av.SaveAttributeView(attrView) + return +} + func (tx *Transaction) doSetAttrViewCoverFromAssetKeyID(operation *Operation) (ret *TxErr) { err := setAttrViewCoverFromAssetKeyID(operation) if err != nil { diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index d4d17785b..8569fc0ee 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -282,6 +282,8 @@ func performTx(tx *Transaction) (ret *TxErr) { ret = tx.doSetAttrViewCoverFrom(op) case "setAttrViewCoverFromAssetKeyID": ret = tx.doSetAttrViewCoverFromAssetKeyID(op) + case "setAttrViewCardSize": + ret = tx.doSetAttrViewCardSize(op) } if nil != ret { From a93762abd372fd5ed5546709e5a140b4f4fd7543 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 9 Jun 2025 22:31:29 +0800 Subject: [PATCH 4/6] :art: Database gallery view https://github.com/siyuan-note/siyuan/issues/10414 --- kernel/model/attribute_view.go | 30 ++++++++++++++++++++++++++++++ kernel/model/transaction.go | 2 ++ 2 files changed, 32 insertions(+) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index a6c0191c7..e3b4a728f 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -44,6 +44,36 @@ import ( "github.com/xrash/smetrics" ) +func (tx *Transaction) doSetAttrViewFitImage(operation *Operation) (ret *TxErr) { + err := setAttrViewFitImage(operation) + if err != nil { + return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()} + } + return +} + +func setAttrViewFitImage(operation *Operation) (err error) { + attrView, err := av.ParseAttributeView(operation.AvID) + if err != nil { + return + } + + view, err := getAttrViewViewByBlockID(attrView, operation.BlockID) + if err != nil { + return + } + + switch view.LayoutType { + case av.LayoutTypeTable: + return + case av.LayoutTypeGallery: + view.Gallery.FitImage = operation.Data.(bool) + } + + err = av.SaveAttributeView(attrView) + return +} + func (tx *Transaction) doSetAttrViewCardSize(operation *Operation) (ret *TxErr) { err := setAttrViewCardSize(operation) if err != nil { diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 8569fc0ee..9d2ee4ba0 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -284,6 +284,8 @@ func performTx(tx *Transaction) (ret *TxErr) { ret = tx.doSetAttrViewCoverFromAssetKeyID(op) case "setAttrViewCardSize": ret = tx.doSetAttrViewCardSize(op) + case "setAttrViewFitImage": + ret = tx.doSetAttrViewFitImage(op) } if nil != ret { From fd4a24243cf12ba4d7104dbe336f1bd8e0ae7fe8 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 9 Jun 2025 22:33:25 +0800 Subject: [PATCH 5/6] :art: Database gallery view https://github.com/siyuan-note/siyuan/issues/10414 --- kernel/av/layout_gallery.go | 6 +++--- kernel/model/attribute_view.go | 30 ++++++++++++++++++++++++++++++ kernel/model/transaction.go | 2 ++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/kernel/av/layout_gallery.go b/kernel/av/layout_gallery.go index b3e09e68f..959b58ddf 100644 --- a/kernel/av/layout_gallery.go +++ b/kernel/av/layout_gallery.go @@ -25,9 +25,9 @@ type LayoutGallery struct { CoverFrom CoverFrom `json:"coverFrom"` // 封面来源,0:无,1:内容图,2:资源字段 CoverFromAssetKeyID string `json:"coverFromAssetKeyId,omitempty"` // 资源字段 ID,CoverFrom 为 2 时有效 CardSize CardSize `json:"cardSize"` // 卡片大小,0:小卡片,1:中卡片,2:大卡片 - FitImage bool `json:"fitImage"` // 是否适应图片大小 - ShowIcon bool `json:"showIcon"` // 是否显示图标 - WrapField bool `json:"wrapField"` // 是否换行字段 + FitImage bool `json:"fitImage"` // 是否适应封面图片大小 + ShowIcon bool `json:"showIcon"` // 是否显示字段图标 + WrapField bool `json:"wrapField"` // 是否换行字段内容 CardFields []*ViewGalleryCardField `json:"fields"` // 画廊卡片字段 CardIDs []string `json:"cardIds"` // 卡片 ID,用于自定义排序 diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index e3b4a728f..5ec8815d5 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -44,6 +44,36 @@ import ( "github.com/xrash/smetrics" ) +func (tx *Transaction) doSetAttrViewShowIcon(operation *Operation) (ret *TxErr) { + err := setAttrViewShowIcon(operation) + if err != nil { + return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()} + } + return +} + +func setAttrViewShowIcon(operation *Operation) (err error) { + attrView, err := av.ParseAttributeView(operation.AvID) + if err != nil { + return + } + + view, err := getAttrViewViewByBlockID(attrView, operation.BlockID) + if err != nil { + return + } + + switch view.LayoutType { + case av.LayoutTypeTable: + return + case av.LayoutTypeGallery: + view.Gallery.ShowIcon = operation.Data.(bool) + } + + err = av.SaveAttributeView(attrView) + return +} + func (tx *Transaction) doSetAttrViewFitImage(operation *Operation) (ret *TxErr) { err := setAttrViewFitImage(operation) if err != nil { diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 9d2ee4ba0..a3f141393 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -286,6 +286,8 @@ func performTx(tx *Transaction) (ret *TxErr) { ret = tx.doSetAttrViewCardSize(op) case "setAttrViewFitImage": ret = tx.doSetAttrViewFitImage(op) + case "setAttrViewShowIcon": + ret = tx.doSetAttrViewShowIcon(op) } if nil != ret { From 8666964c5e645a9584b7ab8f2fc9919b4a4cb22a Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 9 Jun 2025 22:34:07 +0800 Subject: [PATCH 6/6] :art: Database gallery view https://github.com/siyuan-note/siyuan/issues/10414 --- kernel/model/attribute_view.go | 30 ++++++++++++++++++++++++++++++ kernel/model/transaction.go | 2 ++ 2 files changed, 32 insertions(+) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 5ec8815d5..6f62a2dae 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -44,6 +44,36 @@ import ( "github.com/xrash/smetrics" ) +func (tx *Transaction) doSetAttrViewWrapField(operation *Operation) (ret *TxErr) { + err := setAttrViewWrapField(operation) + if err != nil { + return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()} + } + return +} + +func setAttrViewWrapField(operation *Operation) (err error) { + attrView, err := av.ParseAttributeView(operation.AvID) + if err != nil { + return + } + + view, err := getAttrViewViewByBlockID(attrView, operation.BlockID) + if err != nil { + return + } + + switch view.LayoutType { + case av.LayoutTypeTable: + return + case av.LayoutTypeGallery: + view.Gallery.WrapField = operation.Data.(bool) + } + + err = av.SaveAttributeView(attrView) + return +} + func (tx *Transaction) doSetAttrViewShowIcon(operation *Operation) (ret *TxErr) { err := setAttrViewShowIcon(operation) if err != nil { diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index a3f141393..4ee57bc01 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -288,6 +288,8 @@ func performTx(tx *Transaction) (ret *TxErr) { ret = tx.doSetAttrViewFitImage(op) case "setAttrViewShowIcon": ret = tx.doSetAttrViewShowIcon(op) + case "setAttrViewWrapField": + ret = tx.doSetAttrViewWrapField(op) } if nil != ret {