From 1e225bacbf8bf5fea01cf957b35ed8a098b51c2b Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 4 Oct 2025 11:16:11 +0800 Subject: [PATCH 1/4] :art: Improve fold heading editing https://github.com/siyuan-note/siyuan/issues/15989 Signed-off-by: Daniel <845765@qq.com> --- kernel/model/transaction.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index ffcba552f..7a841cc2c 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -1525,17 +1525,25 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { syncDelete2AvBlock(n, tree, tx) } - var needUnfoldParentHeading bool - if 0 < oldNode.HeadingLevel && (0 == updatedNode.HeadingLevel || oldNode.HeadingLevel < updatedNode.HeadingLevel) { - // 将不属于折叠标题的块移动到折叠标题下方,需要展开折叠标题 - needUnfoldParentHeading = true + // 将不属于折叠标题的块移动到折叠标题下方,需要展开折叠标题 + needUnfoldParentHeading := 0 < oldNode.HeadingLevel && (0 == updatedNode.HeadingLevel || oldNode.HeadingLevel < updatedNode.HeadingLevel) + + parentFoldedHeading := treenode.GetParentFoldedHeading(oldNode) + // 将原先折叠标题下的块提升为与折叠标题同级或更高一级的标题时,需要在折叠标题后插入该提升后的标题块(只需要推送界面插入) + if needInsertAfterParentHeading := nil != parentFoldedHeading && 0 != updatedNode.HeadingLevel && updatedNode.HeadingLevel <= parentFoldedHeading.HeadingLevel; needInsertAfterParentHeading { + evt := util.NewCmdResult("transactions", 0, util.PushModeBroadcast) + evt.Data = []*Transaction{{ + DoOperations: []*Operation{{Action: "insert", ID: updatedNode.ID, PreviousID: parentFoldedHeading.ID, Data: data}}, + UndoOperations: []*Operation{{Action: "delete", ID: updatedNode.ID}}, + }} + util.PushEvent(evt) } oldNode.InsertAfter(updatedNode) oldNode.Unlink() if needUnfoldParentHeading { - parentFoldedHeading := treenode.GetParentFoldedHeading(updatedNode) + parentFoldedHeading = treenode.GetParentFoldedHeading(updatedNode) unfoldHeading(parentFoldedHeading) } From 96e589ee31bb5fe956204b74a4835bf212213c73 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 4 Oct 2025 11:56:03 +0800 Subject: [PATCH 2/4] :art: Improve fold heading editing https://github.com/siyuan-note/siyuan/issues/15989 Signed-off-by: Daniel <845765@qq.com> --- kernel/model/transaction.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 7a841cc2c..bb79ab7d9 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -1598,8 +1598,9 @@ func unfoldHeading(heading *ast.Node) { heading.RemoveIALAttr("heading-fold") evt := util.NewCmdResult("transactions", 0, util.PushModeBroadcast) + fillBlockRefCount(children) evt.Data = []*Transaction{{ - DoOperations: []*Operation{{Action: "unfoldHeading", ID: heading.ID}}, + DoOperations: []*Operation{{Action: "unfoldHeading", ID: heading.ID, RetData: renderBlockDOMByNodes(children, NewLute())}}, UndoOperations: []*Operation{{Action: "foldHeading", ID: heading.ID}}, }} From fb92c20acaba95feca459e0c2fae369e99939fee Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 4 Oct 2025 14:15:03 +0800 Subject: [PATCH 3/4] :art: Improve kernel program meta props Signed-off-by: Daniel <845765@qq.com> --- kernel/versioninfo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/versioninfo.json b/kernel/versioninfo.json index 8ed9fc31c..6f183139b 100644 --- a/kernel/versioninfo.json +++ b/kernel/versioninfo.json @@ -12,7 +12,7 @@ "FileDescription": "SiYuan Kernel", "FileVersion": "", "InternalName": "", - "LegalCopyright": "© 2024 Yunnan Liandi Technology Co., Ltd.", + "LegalCopyright": "© 2020-present Yunnan Liandi Technology Co., Ltd.", "LegalTrademarks": "", "OriginalFilename": "", "PrivateBuild": "", From a2136c526da9d3b6c3cf913a2e7748f456198ec8 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 4 Oct 2025 15:19:04 +0800 Subject: [PATCH 4/4] :art: Add `Show in Folder` for the database block https://github.com/siyuan-note/siyuan/issues/15995 Signed-off-by: Daniel <845765@qq.com> --- app/src/protyle/gutter/index.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts index 55ba1f94f..73224e3e5 100644 --- a/app/src/protyle/gutter/index.ts +++ b/app/src/protyle/gutter/index.ts @@ -41,7 +41,7 @@ import {countBlockWord} from "../../layout/status"; import {Constants} from "../../constants"; import {mathRender} from "../render/mathRender"; import {duplicateBlock} from "../wysiwyg/commonHotkey"; -import {movePathTo} from "../../util/pathName"; +import {movePathTo, useShell} from "../../util/pathName"; import {hintMoveBlock} from "../hint/extend"; import {makeCard, quickMakeCard} from "../../card/makeCard"; import {transferBlockRef} from "../../menus/block"; @@ -59,6 +59,7 @@ import {addEditorToDatabase} from "../render/av/addToDatabase"; import {processClonePHElement} from "../render/util"; /// #if !MOBILE import {openFileById} from "../../editor/util"; +import * as path from "path"; /// #endif import {checkFold} from "../../util/noRelyPCFunction"; import {clearSelect} from "../util/clearSelect"; @@ -1559,6 +1560,14 @@ export class Gutter { }); } }).element); + window.siyuan.menus.menu.append(new MenuItem({ + id: "showDatabaseInFolder", + icon: "iconFolder", + label: window.siyuan.languages.showInFolder, + click() { + useShell("showItemInFolder", path.join(window.siyuan.config.system.dataDir, "storage", "av", nodeElement.getAttribute("data-av-id")) + ".json"); + } + }).element); } else if ((type === "NodeVideo" || type === "NodeAudio") && !protyle.disabled) { window.siyuan.menus.menu.append(new MenuItem({id: "separator_VideoOrAudio", type: "separator"}).element); window.siyuan.menus.menu.append(new MenuItem({