diff --git a/app/src/editor/deleteFile.ts b/app/src/editor/deleteFile.ts index baf6b594d..1832cc5ff 100644 --- a/app/src/editor/deleteFile.ts +++ b/app/src/editor/deleteFile.ts @@ -4,8 +4,9 @@ import {confirmDialog} from "../dialog/confirmDialog"; import {hasTopClosestByTag} from "../protyle/util/hasClosest"; import {Constants} from "../constants"; import {showMessage} from "../dialog/message"; +import {escapeHtml} from "../util/escape"; -export const deleteFile = (notebookId: string, pathString: string, name: string) => { +export const deleteFile = (notebookId: string, pathString: string) => { if (window.siyuan.config.fileTree.removeDocWithoutConfirm) { fetchPost("/api/filetree/removeDoc", { notebook: notebookId, @@ -16,9 +17,10 @@ export const deleteFile = (notebookId: string, pathString: string, name: string) fetchPost("/api/block/getDocInfo", { id: getDisplayName(pathString, true, true) }, (response) => { - let tip = `${window.siyuan.languages.confirmDelete} ${name}?`; + const fileName = escapeHtml(response.data.name); + let tip = `${window.siyuan.languages.confirmDelete} ${fileName}?`; if (response.data.subFileCount > 0) { - tip = `${window.siyuan.languages.confirmDelete} ${name} ${window.siyuan.languages.andSubFile.replace("x", response.data.subFileCount)}?`; + tip = `${window.siyuan.languages.confirmDelete} ${fileName} ${window.siyuan.languages.andSubFile.replace("x", response.data.subFileCount)}?`; } confirmDialog(window.siyuan.languages.deleteOpConfirm, tip, () => { fetchPost("/api/filetree/removeDoc", { @@ -35,7 +37,7 @@ export const deleteFiles = (liElements: Element[]) => { if (itemTopULElement) { const itemNotebookId = itemTopULElement.getAttribute("data-url"); if (liElements[0].getAttribute("data-type") === "navigation-file") { - deleteFile(itemNotebookId, liElements[0].getAttribute("data-path"), getDisplayName(liElements[0].getAttribute("data-name"), false, true)); + deleteFile(itemNotebookId, liElements[0].getAttribute("data-path")); } else { confirmDialog(window.siyuan.languages.deleteOpConfirm, `${window.siyuan.languages.confirmDelete} ${Lute.EscapeHTMLStr(getNotebookName(itemNotebookId))}?`, () => { diff --git a/app/src/protyle/breadcrumb/index.ts b/app/src/protyle/breadcrumb/index.ts index 256462b48..1e8d741a1 100644 --- a/app/src/protyle/breadcrumb/index.ts +++ b/app/src/protyle/breadcrumb/index.ts @@ -26,6 +26,7 @@ import {saveScroll} from "../scroll/saveScroll"; import {hideElements} from "../ui/hideElements"; import {confirmDialog} from "../../dialog/confirmDialog"; import {reloadProtyle} from "../util/reload"; +import {deleteFile} from "../../editor/deleteFile"; export class Breadcrumb { public element: HTMLElement; @@ -318,6 +319,13 @@ export class Breadcrumb { reloadProtyle(protyle); } }).element); + window.siyuan.menus.menu.append(new MenuItem({ + icon: "iconTrashcan", + label: window.siyuan.languages.delete, + click: () => { + deleteFile(protyle.notebookId, protyle.path); + } + }).element); if (!isMobile()) { window.siyuan.menus.menu.append(new MenuItem({ icon: protyle.element.className.includes("fullscreen") ? "iconFullscreenExit" : "iconFullscreen", diff --git a/app/src/protyle/header/Title.ts b/app/src/protyle/header/Title.ts index eae46b0db..c432b426d 100644 --- a/app/src/protyle/header/Title.ts +++ b/app/src/protyle/header/Title.ts @@ -289,7 +289,7 @@ export class Title { icon: "iconTrashcan", label: window.siyuan.languages.delete, click: () => { - deleteFile(protyle.notebookId, protyle.path, escapeHtml(this.editElement.textContent)); + deleteFile(protyle.notebookId, protyle.path); } }).element); window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);