diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index dd75ff398..f5f46ca12 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -454,7 +454,6 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre blockValues.Values = append(blockValues.Values, value) attrs := parse.IAL2Map(node.KramdownIAL) - attrs[NodeAttrNamePrefixAvKey+operation.AvID+"-"+blockValues.Key.ID] = "" // 将列作为属性添加到块中 if "" == attrs[NodeAttrNameAvs] { attrs[NodeAttrNameAvs] = operation.AvID @@ -488,14 +487,14 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre } func (tx *Transaction) doRemoveAttrViewBlock(operation *Operation) (ret *TxErr) { - err := removeAttributeViewBlock(operation) + err := tx.removeAttributeViewBlock(operation) if nil != err { return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID} } return } -func removeAttributeViewBlock(operation *Operation) (err error) { +func (tx *Transaction) removeAttributeViewBlock(operation *Operation) (err error) { attrView, err := av.ParseAttributeView(operation.AvID) if nil != err { return @@ -506,11 +505,36 @@ func removeAttributeViewBlock(operation *Operation) (err error) { return } + trees := map[string]*parse.Tree{} for _, keyValues := range attrView.KeyValues { tmp := keyValues.Values[:0] for i, values := range keyValues.Values { if !gulu.Str.Contains(values.BlockID, operation.SrcIDs) { tmp = append(tmp, keyValues.Values[i]) + } else { + // Remove av block also remove node attr https://github.com/siyuan-note/siyuan/issues/9091#issuecomment-1709824006 + if bt := treenode.GetBlockTree(values.BlockID); nil != bt { + tree := trees[bt.RootID] + if nil == tree { + tree, _ = loadTreeByBlockID(values.BlockID) + } + + if nil != tree { + trees[bt.RootID] = tree + if node := treenode.GetNodeInTree(tree, values.BlockID); nil != node { + attrs := parse.IAL2Map(node.KramdownIAL) + if ast.NodeDocument == node.Type { + delete(attrs, "custom-hidden") + node.RemoveIALAttr("custom-hidden") + } + delete(attrs, NodeAttrNamePrefixAvKey+operation.AvID+"-"+values.KeyID) + node.RemoveIALAttr(NodeAttrNamePrefixAvKey + operation.AvID + "-" + values.KeyID) + if err = setNodeAttrsWithTx(tx, node, tree, attrs); nil != err { + return + } + } + } + } } } keyValues.Values = tmp @@ -518,13 +542,6 @@ func removeAttributeViewBlock(operation *Operation) (err error) { for _, blockID := range operation.SrcIDs { view.Table.RowIDs = gulu.Str.RemoveElem(view.Table.RowIDs, blockID) - - if bt := treenode.GetBlockTree(blockID); nil != bt && "d" == bt.Type { - if tree, _ := loadTreeByBlockID(blockID); nil != tree { - tree.Root.RemoveIALAttr("custom-hidden") - writeJSONQueue(tree) - } - } } err = av.SaveAttributeView(attrView) diff --git a/kernel/model/blockial.go b/kernel/model/blockial.go index 70b7e6af0..012de75ef 100644 --- a/kernel/model/blockial.go +++ b/kernel/model/blockial.go @@ -175,7 +175,7 @@ func setNodeAttrs0(node *ast.Node, nameValues map[string]string) (oldAttrs map[s } for name, value := range nameValues { - if strings.HasPrefix(name, "av") { + if strings.HasPrefix(name, "custom-av") { // 属性视图设置的属性值可以为空 node.SetIALAttr(name, value) continue