From 4bdc3536a3d9e0dd327663327a65b0f8a6660853 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 6 Feb 2023 18:03:29 +0800 Subject: [PATCH 1/4] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E8=BD=AC=E7=A7=BB=20https://github.com/siyuan-note/si?= =?UTF-8?q?yuan/issues/4025?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/block.go | 20 ++++++++++++++++++++ kernel/api/router.go | 1 + kernel/model/block.go | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/kernel/api/block.go b/kernel/api/block.go index 36ff236d1..3e5ac4a37 100644 --- a/kernel/api/block.go +++ b/kernel/api/block.go @@ -30,6 +30,26 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func transferBlockRef(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + fromID := arg["fromID"].(string) + toID := arg["toID"].(string) + err := model.TransferBlockRef(fromID, toID) + if nil != err { + ret.Code = -1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 7000} + return + } +} + func swapBlockRef(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/api/router.go b/kernel/api/router.go index 0961fe81e..0a2d07fec 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -170,6 +170,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/block/getHeadingChildrenIDs", model.CheckAuth, getHeadingChildrenIDs) ginServer.Handle("POST", "/api/block/getHeadingChildrenDOM", model.CheckAuth, getHeadingChildrenDOM) ginServer.Handle("POST", "/api/block/swapBlockRef", model.CheckAuth, swapBlockRef) + ginServer.Handle("POST", "/api/block/transferBlockRef", model.CheckAuth, transferBlockRef) ginServer.Handle("POST", "/api/file/getFile", model.CheckAuth, getFile) ginServer.Handle("POST", "/api/file/putFile", model.CheckAuth, putFile) diff --git a/kernel/model/block.go b/kernel/model/block.go index c48e11dcb..3671827a6 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -115,6 +115,43 @@ func RecentUpdatedBlocks() (ret []*Block) { return } +func TransferBlockRef(fromID, toID string) (err error) { + toTree, _ := loadTreeByBlockID(toID) + if nil == toTree { + err = ErrBlockNotFound + return + } + toNode := treenode.GetNodeInTree(toTree, toID) + if nil == toNode { + err = ErrBlockNotFound + return + } + toRefText := getNodeRefText(toNode) + + refIDs, _ := sql.QueryRefIDsByDefID(fromID, false) + for _, refID := range refIDs { + tree, _ := loadTreeByBlockID(refID) + if nil == tree { + continue + } + node := treenode.GetNodeInTree(tree, refID) + textMarks := node.ChildrenByType(ast.NodeTextMark) + for _, textMark := range textMarks { + if textMark.IsTextMarkType("block-ref") && textMark.TextMarkBlockRefID == fromID { + textMark.TextMarkBlockRefID = toID + if "s" == textMark.TextMarkBlockRefSubtype { + textMark.TextMarkTextContent = toRefText + } + } + } + + if err = indexWriteJSONQueue(tree); nil != err { + return + } + } + return +} + func SwapBlockRef(refID, defID string, includeChildren bool) (err error) { refTree, err := loadTreeByBlockID(refID) if nil != err { From e15f8f776919edaa15258537fd4598e759746b31 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 6 Feb 2023 18:08:41 +0800 Subject: [PATCH 2/4] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E8=BD=AC=E7=A7=BB=20https://github.com/siyuan-note/si?= =?UTF-8?q?yuan/issues/4025?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/block.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/model/block.go b/kernel/model/block.go index 3671827a6..71c5c83e2 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -139,7 +139,7 @@ func TransferBlockRef(fromID, toID string) (err error) { for _, textMark := range textMarks { if textMark.IsTextMarkType("block-ref") && textMark.TextMarkBlockRefID == fromID { textMark.TextMarkBlockRefID = toID - if "s" == textMark.TextMarkBlockRefSubtype { + if "d" == textMark.TextMarkBlockRefSubtype { textMark.TextMarkTextContent = toRefText } } @@ -149,6 +149,7 @@ func TransferBlockRef(fromID, toID string) (err error) { return } } + util.ReloadUI() return } From 2f718ec60cc213cc5ac072663516beae02368095 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 6 Feb 2023 18:11:14 +0800 Subject: [PATCH 3/4] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E8=BD=AC?= =?UTF-8?q?=E7=A7=BB=E5=BC=95=E7=94=A8=20https://github.com/siyuan-note/si?= =?UTF-8?q?yuan/issues/4025?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/appearance/langs/en_US.json | 2 +- app/appearance/langs/es_ES.json | 2 +- app/appearance/langs/fr_FR.json | 2 +- app/appearance/langs/zh_CHT.json | 2 +- app/appearance/langs/zh_CN.json | 2 +- app/src/protyle/gutter/index.ts | 16 ++++++---------- 6 files changed, 11 insertions(+), 15 deletions(-) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index ff6af0439..80305366e 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,5 +1,5 @@ { - "backlinkTurnTo": "Reference Transfer", + "transferBlockRef": "Transfer Reference", "sortByFiletree": "Use doc tree sorting rule", "tabToWindow": "Move to New Window", "exitFocus": "Exit focus", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 9765237b2..232ef9d64 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,5 +1,5 @@ { - "backlinkTurnTo": "Transferencia de referencia", + "transferBlockRef": "Transferencia de referencia", "sortByFiletree": "Usar reglas de clasificación del árbol de documentos", "tabToWindow": "Mover a una nueva ventana", "exitFocus": "Salir del enfoque", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 5cd7946bd..21b88abcb 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,5 +1,5 @@ { - "backlinkTurnTo": "Transfert de référence", + "transferBlockRef": "Référence de transfert", "sortByFiletree": "Utiliser les règles de tri de l'arborescence des documents", "tabToWindow": "Passer à une nouvelle fenêtre", "exitFocus": "Quitter le focus", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index b97c02e18..f0e29418b 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,5 +1,5 @@ { - "backlinkTurnTo": "引用轉移", + "transferBlockRef": "轉移引用", "sortByFiletree": "使用文檔樹排序規則", "tabToWindow": "移動到新窗口", "exitFocus": "退出聚焦", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index d7c499857..32abb1d08 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,5 +1,5 @@ { - "backlinkTurnTo": "引用转移", + "transferBlockRef": "转移引用", "sortByFiletree": "使用文档树排序规则", "tabToWindow": "移动到新窗口", "exitFocus": "退出聚焦", diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts index 9638ca6d3..0d3fd861c 100644 --- a/app/src/protyle/gutter/index.ts +++ b/app/src/protyle/gutter/index.ts @@ -1,9 +1,4 @@ -import { - hasClosestBlock, - hasClosestByAttribute, - hasClosestByMatchTag, - hasClosestByTag -} from "../util/hasClosest"; +import {hasClosestBlock, hasClosestByAttribute, hasClosestByMatchTag, hasClosestByTag} from "../util/hasClosest"; import {getIconByType} from "../../editor/getIcon"; import {iframeMenu, setFold, tableMenu, videoMenu, zoomOut} from "../../menus/protyle"; import {MenuItem} from "../../menus/Menu"; @@ -11,7 +6,8 @@ import {copySubMenu, openAttr, openWechatNotify} from "../../menus/commonMenuIte import {copyPlainText, updateHotkeyTip, writeText} from "../util/compatibility"; import { transaction, - turnsIntoOneTransaction, turnsIntoTransaction, + turnsIntoOneTransaction, + turnsIntoTransaction, updateBatchTransaction, updateTransaction } from "../wysiwyg/transaction"; @@ -1379,13 +1375,13 @@ export class Gutter { const countElement = nodeElement.lastElementChild.querySelector(".protyle-attr--refcount") if (countElement && countElement.textContent) { window.siyuan.menus.menu.append(new MenuItem({ - label: window.siyuan.languages.backlinkTurnTo, + label: window.siyuan.languages.transferBlockRef, click() { const renameDialog = new Dialog({ - title: window.siyuan.languages.backlinkTurnTo, + title: window.siyuan.languages.transferBlockRef, content: `
-
${window.siyuan.languages.backlinkTurnTo}
+
${window.siyuan.languages.transferBlockRef}
From ef9af6c323e1110de7917deb7d90d471b80c5413 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 6 Feb 2023 18:12:12 +0800 Subject: [PATCH 4/4] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E8=BD=AC?= =?UTF-8?q?=E7=A7=BB=E5=BC=95=E7=94=A8=20https://github.com/siyuan-note/si?= =?UTF-8?q?yuan/issues/4025?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/block.go | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/model/block.go b/kernel/model/block.go index 71c5c83e2..7add88011 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -149,6 +149,7 @@ func TransferBlockRef(fromID, toID string) (err error) { return } } + util.ReloadUI() return }