From d85cece8a305f8df11aad2caff7d694f66ea1ef3 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Thu, 28 Mar 2024 21:43:44 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/10783 --- app/src/menus/workspace.ts | 132 ++++++++++++++++++++++--------------- 1 file changed, 78 insertions(+), 54 deletions(-) diff --git a/app/src/menus/workspace.ts b/app/src/menus/workspace.ts index 582a5e3e9..d136688ab 100644 --- a/app/src/menus/workspace.ts +++ b/app/src/menus/workspace.ts @@ -26,6 +26,80 @@ import {App} from "../index"; import {isBrowser} from "../util/functions"; import {openRecentDocs} from "../business/openRecentDocs"; +const editLayout = (layoutName?: string) => { + const dialog = new Dialog({ + positionId: Constants.DIALOG_SAVEWORKSPACE, + title: layoutName ? window.siyuan.languages.edit : window.siyuan.languages.save, + content: `
+ +
+
+
+
+ +
`, + width: "520px", + }); + dialog.element.setAttribute("data-key", Constants.DIALOG_SAVEWORKSPACE); + const btnsElement = dialog.element.querySelectorAll(".b3-button"); + const inputElement = dialog.element.querySelector("input"); + inputElement.select(); + inputElement.focus(); + dialog.bindInput(inputElement, () => { + btnsElement[1].dispatchEvent(new CustomEvent("click")); + }); + btnsElement[0].addEventListener("click", () => { + dialog.destroy(); + }); + btnsElement[1].addEventListener("click", () => { + const value = inputElement.value; + if (!value) { + showMessage(window.siyuan.languages["_kernel"]["142"]); + return; + } + dialog.destroy(); + if (layoutName) { + window.siyuan.storage[Constants.LOCAL_LAYOUTS].find((layoutItem: ISaveLayout) => { + if (layoutItem.name === layoutName) { + layoutItem.name = value; + layoutItem.layout = getAllLayout(); + setStorageVal(Constants.LOCAL_LAYOUTS, window.siyuan.storage[Constants.LOCAL_LAYOUTS]); + return true; + } + }); + return; + } + const hadName = window.siyuan.storage[Constants.LOCAL_LAYOUTS].find((item: ISaveLayout) => { + if (item.name === value) { + + confirmDialog(window.siyuan.languages.save, window.siyuan.languages.exportTplTip, () => { + item.layout = getAllLayout(); + setStorageVal(Constants.LOCAL_LAYOUTS, window.siyuan.storage[Constants.LOCAL_LAYOUTS]); + }); + return true; + } + }); + if (hadName) { + return; + } + window.siyuan.storage[Constants.LOCAL_LAYOUTS].push({ + name: value, + layout: getAllLayout() + }); + setStorageVal(Constants.LOCAL_LAYOUTS, window.siyuan.storage[Constants.LOCAL_LAYOUTS]); + }); + btnsElement[2].addEventListener("click", () => { + window.siyuan.storage[Constants.LOCAL_LAYOUTS].find((layoutItem: ISaveLayout, index: number) => { + if (layoutItem.name === layoutName) { + window.siyuan.storage[Constants.LOCAL_LAYOUTS].splice(index, 1); + setStorageVal(Constants.LOCAL_LAYOUTS, window.siyuan.storage[Constants.LOCAL_LAYOUTS]); + return true; + } + }); + dialog.destroy(); + }); +} + const togglePinDock = (dock: Dock, icon: string) => { return { label: `${dock.pin ? window.siyuan.languages.unpin : window.siyuan.languages.pin}`, @@ -226,51 +300,7 @@ export const workspaceMenu = (app: App, rect: DOMRect) => { iconHTML: "", label: window.siyuan.languages.save, click() { - const saveDialog = new Dialog({ - title: window.siyuan.languages.save, - content: `
- -
-
-
- -
`, - width: "520px", - }); - saveDialog.element.setAttribute("data-key", Constants.DIALOG_SAVEWORKSPACE); - const btnsElement = saveDialog.element.querySelectorAll(".b3-button"); - saveDialog.bindInput(saveDialog.element.querySelector("input"), () => { - btnsElement[1].dispatchEvent(new CustomEvent("click")); - }); - btnsElement[0].addEventListener("click", () => { - saveDialog.destroy(); - }); - btnsElement[1].addEventListener("click", () => { - const value = saveDialog.element.querySelector("input").value; - if (!value) { - showMessage(window.siyuan.languages["_kernel"]["142"]); - return; - } - const hadName = window.siyuan.storage[Constants.LOCAL_LAYOUTS].find((item: ISaveLayout) => { - if (item.name === value) { - saveDialog.destroy(); - confirmDialog(window.siyuan.languages.save, window.siyuan.languages.exportTplTip, () => { - item.layout = getAllLayout(); - setStorageVal(Constants.LOCAL_LAYOUTS, window.siyuan.storage[Constants.LOCAL_LAYOUTS]); - }); - return true; - } - }); - if (hadName) { - return; - } - window.siyuan.storage[Constants.LOCAL_LAYOUTS].push({ - name: value, - layout: getAllLayout() - }); - setStorageVal(Constants.LOCAL_LAYOUTS, window.siyuan.storage[Constants.LOCAL_LAYOUTS]); - saveDialog.destroy(); - }); + editLayout(); } }]; if (window.siyuan.storage[Constants.LOCAL_LAYOUTS].length > 0) { @@ -279,21 +309,15 @@ export const workspaceMenu = (app: App, rect: DOMRect) => { window.siyuan.storage[Constants.LOCAL_LAYOUTS].forEach((item: ISaveLayout) => { layoutSubMenu.push({ iconHTML: "", - action: "iconCloseRound", + action: "iconEdit", label: item.name, bind(menuElement) { menuElement.addEventListener("click", (event) => { if (hasClosestByClassName(event.target as Element, "b3-menu__action")) { event.preventDefault(); event.stopPropagation(); - window.siyuan.storage[Constants.LOCAL_LAYOUTS].find((layoutItem: ISaveLayout, index: number) => { - if (layoutItem.name === item.name) { - menuElement.remove(); - window.siyuan.storage[Constants.LOCAL_LAYOUTS].splice(index, 1); - setStorageVal(Constants.LOCAL_LAYOUTS, window.siyuan.storage[Constants.LOCAL_LAYOUTS]); - return true; - } - }); + editLayout(item.name); + window.siyuan.menus.menu.remove(); return; } fetchPost("/api/system/setUILayout", {layout: item.layout}, () => {