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

This commit is contained in:
Vanessa 2023-09-27 16:57:12 +08:00
commit a9abf0ebcb
8 changed files with 58 additions and 67 deletions

View file

@ -422,7 +422,6 @@ ${genHintItemHTML(item)}
const realFileName = fileNames.length === 1 ? fileNames[0] : fileNames[1];
getSavePath(protyle.path, protyle.notebookId, (pathString) => {
fetchPost("/api/filetree/createDocWithMd", {
hidden: false,
notebook: protyle.notebookId,
path: pathPosix().join(pathString, realFileName),
parentID: protyle.block.rootID,

View file

@ -481,12 +481,6 @@ func createDocWithMd(c *gin.Context) {
parentID = parentIDArg.(string)
}
hidden := true
hiddenArg := arg["hidden"]
if nil != hiddenArg {
hidden = hiddenArg.(bool)
}
hPath := arg["path"].(string)
markdown := arg["markdown"].(string)
@ -502,7 +496,7 @@ func createDocWithMd(c *gin.Context) {
hPath = "/" + hPath
}
id, err := model.CreateWithMarkdown(notebook, hPath, markdown, parentID, hidden)
id, err := model.CreateWithMarkdown(notebook, hPath, markdown, parentID)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()
@ -510,10 +504,6 @@ func createDocWithMd(c *gin.Context) {
}
ret.Data = id
if !hidden {
return
}
box := model.Conf.Box(notebook)
b, _ := model.GetBlock(id, nil)
p := b.Path

View file

@ -171,6 +171,15 @@ func fixLegacyData(tip, node *ast.Node, idMap *map[string]bool, needFix, needMig
node.Children = node.Children[:len(node.Children)-1]
*needFix = true
}
for _, kv := range node.KramdownIAL {
if strings.Contains(kv[0], "custom-av-key-") {
// TODO: 数据库正式上线以后移除这里的修复
// 删除数据库属性键值对 https://github.com/siyuan-note/siyuan/issues/9293
node.RemoveIALAttr(kv[0])
*needFix = true
}
}
}
if "" != node.ID {
if _, ok := (*idMap)[node.ID]; ok {

View file

@ -25,7 +25,6 @@ import (
"github.com/88250/lute/parse"
"github.com/siyuan-note/logging"
"github.com/siyuan-note/siyuan/kernel/av"
"github.com/siyuan-note/siyuan/kernel/sql"
"github.com/siyuan-note/siyuan/kernel/treenode"
"github.com/siyuan-note/siyuan/kernel/util"
)
@ -391,6 +390,16 @@ func setAttributeViewColumnCalc(operation *Operation) (err error) {
}
func (tx *Transaction) doInsertAttrViewBlock(operation *Operation) (ret *TxErr) {
if 1 > len(operation.SrcIDs) {
// 不绑定到任何块的情况,比如直接在属性视图中添加一个块
// New a row in the database no longer require to create a relevant doc https://github.com/siyuan-note/siyuan/issues/9294
var avErr error
if avErr = addAttributeViewBlock("", operation, nil, tx); nil != avErr {
return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: avErr.Error()}
}
return
}
for _, id := range operation.SrcIDs {
tree, err := tx.loadTree(id)
if nil != err {
@ -407,21 +416,18 @@ func (tx *Transaction) doInsertAttrViewBlock(operation *Operation) (ret *TxErr)
}
func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tree, tx *Transaction) (err error) {
node := treenode.GetNodeInTree(tree, blockID)
if nil == node {
err = ErrBlockNotFound
return
}
var node *ast.Node
if "" != blockID {
node = treenode.GetNodeInTree(tree, blockID)
if nil == node {
err = ErrBlockNotFound
return
}
if ast.NodeAttributeView == node.Type {
// 不能将一个属性视图拖拽到另一个属性视图中
return
}
block := sql.BuildBlockFromNode(node, tree)
if nil == block {
err = ErrBlockNotFound
return
if ast.NodeAttributeView == node.Type {
// 不能将一个属性视图拖拽到另一个属性视图中
return
}
}
attrView, err := av.ParseAttributeView(operation.AvID)
@ -445,19 +451,21 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre
value := &av.Value{ID: ast.NewNodeID(), KeyID: blockValues.Key.ID, BlockID: blockID, Type: av.KeyTypeBlock, Block: &av.ValueBlock{ID: blockID, Content: getNodeRefText(node)}}
blockValues.Values = append(blockValues.Values, value)
attrs := parse.IAL2Map(node.KramdownIAL)
if nil != node {
attrs := parse.IAL2Map(node.KramdownIAL)
if "" == attrs[NodeAttrNameAvs] {
attrs[NodeAttrNameAvs] = operation.AvID
} else {
avIDs := strings.Split(attrs[NodeAttrNameAvs], ",")
avIDs = append(avIDs, operation.AvID)
avIDs = gulu.Str.RemoveDuplicatedElem(avIDs)
attrs[NodeAttrNameAvs] = strings.Join(avIDs, ",")
}
if "" == attrs[NodeAttrNameAvs] {
attrs[NodeAttrNameAvs] = operation.AvID
} else {
avIDs := strings.Split(attrs[NodeAttrNameAvs], ",")
avIDs = append(avIDs, operation.AvID)
avIDs = gulu.Str.RemoveDuplicatedElem(avIDs)
attrs[NodeAttrNameAvs] = strings.Join(avIDs, ",")
}
if err = setNodeAttrsWithTx(tx, node, tree, attrs); nil != err {
return
if err = setNodeAttrsWithTx(tx, node, tree, attrs); nil != err {
return
}
}
switch view.LayoutType {
@ -519,8 +527,6 @@ func (tx *Transaction) removeAttributeViewBlock(operation *Operation) (err error
delete(attrs, "custom-hidden")
node.RemoveIALAttr("custom-hidden")
}
delete(attrs, NodeAttrNamePrefixAvKey+operation.AvID+"-"+values.KeyID)
node.RemoveIALAttr(NodeAttrNamePrefixAvKey + operation.AvID + "-" + values.KeyID)
if avs := attrs[NodeAttrNameAvs]; "" != avs {
avIDs := strings.Split(avs, ",")
@ -937,13 +943,6 @@ func UpdateAttributeViewCell(avID, keyID, rowID, cellID string, valueData interf
return
}
attrs := parse.IAL2Map(node.KramdownIAL)
attrs[NodeAttrNamePrefixAvKey+avID+"-"+val.KeyID] = val.ToJSONString()
if err = setNodeAttrs(node, tree, attrs); nil != err {
return
}
if err = av.SaveAttributeView(attrView); nil != err {
return
}
@ -1095,6 +1094,5 @@ func updateAttributeViewColumnOption(operation *Operation) (err error) {
}
const (
NodeAttrNameAvs = "custom-avs" // 用于标记块所属的属性视图,逗号分隔 av id
NodeAttrNamePrefixAvKey = "custom-av-key-" // 用于标记列
NodeAttrNameAvs = "custom-avs" // 用于标记块所属的属性视图,逗号分隔 av id
)

View file

@ -1019,7 +1019,7 @@ func CreateDocByMd(boxID, p, title, md string, sorts []string) (tree *parse.Tree
luteEngine := util.NewLute()
dom := luteEngine.Md2BlockDOM(md, false)
tree, err = createDoc(box.ID, p, title, dom, true)
tree, err = createDoc(box.ID, p, title, dom)
if nil != err {
return
}
@ -1028,7 +1028,7 @@ func CreateDocByMd(boxID, p, title, md string, sorts []string) (tree *parse.Tree
return
}
func CreateWithMarkdown(boxID, hPath, md, parentID string, hidden bool) (id string, err error) {
func CreateWithMarkdown(boxID, hPath, md, parentID string) (id string, err error) {
box := Conf.Box(boxID)
if nil == box {
err = errors.New(Conf.Language(0))
@ -1038,7 +1038,7 @@ func CreateWithMarkdown(boxID, hPath, md, parentID string, hidden bool) (id stri
WaitForWritingFiles()
luteEngine := util.NewLute()
dom := luteEngine.Md2BlockDOM(md, false)
id, _, err = createDocsByHPath(box.ID, hPath, dom, parentID, hidden)
id, _, err = createDocsByHPath(box.ID, hPath, dom, parentID)
return
}
@ -1442,7 +1442,7 @@ func CreateDailyNote(boxID string) (p string, existed bool, err error) {
return
}
id, existed, err := createDocsByHPath(box.ID, hPath, "", "", true)
id, existed, err := createDocsByHPath(box.ID, hPath, "", "")
if nil != err {
return
}
@ -1487,7 +1487,7 @@ func CreateDailyNote(boxID string) (p string, existed bool, err error) {
return
}
func createDoc(boxID, p, title, dom string, hidden bool) (tree *parse.Tree, err error) {
func createDoc(boxID, p, title, dom string) (tree *parse.Tree, err error) {
title = gulu.Str.RemoveInvisible(title)
if 512 < utf8.RuneCountInString(title) {
// 限制笔记本名和文档名最大长度为 `512` https://github.com/siyuan-note/siyuan/issues/6299
@ -1559,10 +1559,6 @@ func createDoc(boxID, p, title, dom string, hidden bool) (tree *parse.Tree, err
tree.Root.AppendChild(treenode.NewParagraph())
}
if !hidden {
tree.Root.SetIALAttr("custom-hidden", "true")
}
transaction := &Transaction{DoOperations: []*Operation{{Action: "create", Data: tree}}}
PerformTransactions(&[]*Transaction{transaction})
WaitForWritingFiles()

View file

@ -160,6 +160,7 @@ func Doc2Heading(srcID, targetID string, after bool) (srcTreeBox, srcTreePath st
headingLevel = 6
}
srcTree.Root.RemoveIALAttr("scroll") // Remove `scroll` attribute when converting the document to a heading https://github.com/siyuan-note/siyuan/issues/9297
srcTree.Root.RemoveIALAttr("type")
tagIAL := srcTree.Root.IALAttr("tags")
tags := strings.Split(tagIAL, ",")

View file

@ -153,10 +153,8 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
// 重新指向数据库属性值
ial := parse.IAL2Map(n.KramdownIAL)
for k, v := range ial {
if strings.HasPrefix(k, NodeAttrNamePrefixAvKey) {
v = strings.ReplaceAll(v, oldNodeID, newNodeID)
n.SetIALAttr(k, v)
for k, _ := range ial {
if strings.HasPrefix(k, NodeAttrNameAvs) {
avBlockIDs[oldNodeID] = newNodeID
}
}
@ -259,7 +257,7 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
ial := parse.IAL2Map(n.KramdownIAL)
for k, v := range ial {
if strings.HasPrefix(k, NodeAttrNamePrefixAvKey) || strings.HasPrefix(k, NodeAttrNameAvs) {
if strings.HasPrefix(k, NodeAttrNameAvs) {
newKey, newVal := k, v
for oldAvID, newAvID := range avIDs {
newKey = strings.ReplaceAll(newKey, oldAvID, newAvID)

View file

@ -33,7 +33,7 @@ import (
"github.com/siyuan-note/siyuan/kernel/util"
)
func createDocsByHPath(boxID, hPath, content, parentID string, hidden bool) (id string, existed bool, err error) {
func createDocsByHPath(boxID, hPath, content, parentID string) (id string, existed bool, err error) {
hPath = strings.TrimSuffix(hPath, ".sy")
pathBuilder := bytes.Buffer{}
pathBuilder.WriteString("/")
@ -51,7 +51,7 @@ func createDocsByHPath(boxID, hPath, content, parentID string, hidden bool) (id
// 如果父文档存在且 ID 一致,则直接在父文档下创建
id = ast.NewNodeID()
p := strings.TrimSuffix(preferredParent.Path, ".sy") + "/" + id + ".sy"
if _, err = createDoc(boxID, p, name, content, hidden); nil != err {
if _, err = createDoc(boxID, p, name, content); nil != err {
return
}
}
@ -68,11 +68,11 @@ func createDocsByHPath(boxID, hPath, content, parentID string, hidden bool) (id
pathBuilder.WriteString(id)
docP := pathBuilder.String() + ".sy"
if isNotLast {
if _, err = createDoc(boxID, docP, part, "", hidden); nil != err {
if _, err = createDoc(boxID, docP, part, ""); nil != err {
return
}
} else {
if _, err = createDoc(boxID, docP, part, content, hidden); nil != err {
if _, err = createDoc(boxID, docP, part, content); nil != err {
return
}
}