diff --git a/app/src/boot/globalEvent/command/global.ts b/app/src/boot/globalEvent/command/global.ts index df6a16428..6af0456f1 100644 --- a/app/src/boot/globalEvent/command/global.ts +++ b/app/src/boot/globalEvent/command/global.ts @@ -5,7 +5,11 @@ import {Editor} from "../../../editor"; import {openDock} from "../../../mobile/dock/util"; import {popMenu} from "../../../mobile/menu"; import {popSearch} from "../../../mobile/menu/search"; +import {getRecentDocs} from "../../../mobile/menu/getRecentDocs"; /// #else +import {workspaceMenu} from "../../../menus/workspace"; +import {isWindow} from "../../../util/functions"; +import {openRecentDocs} from "../../../business/openRecentDocs"; import {openSearch} from "../../../search/spread"; import {goBack, goForward} from "../../../util/backForward"; import {getAllTabs} from "../../../layout/getAll"; @@ -17,6 +21,8 @@ import {Tab} from "../../../layout/Tab"; import {App} from "../../../index"; import {Constants} from "../../../constants"; import {setReadOnly} from "../../../config/util/setReadOnly"; +import {lockScreen} from "../../../dialog/processSystem"; +import {newFile} from "../../../util/newFile"; export const globalCommand = (command: string, app: App) => { /// #if MOBILE @@ -33,12 +39,15 @@ export const globalCommand = (command: string, app: App) => { case "backlinks": openDock("backlink"); return true; - case "config": + case "mainMenu": popMenu(); return true; case "globalSearch": popSearch(app); return true; + case "recentDocs": + getRecentDocs(app); + return true; } /// #else switch (command) { @@ -110,7 +119,14 @@ export const globalCommand = (command: string, app: App) => { case "goToTabPrev": switchTabByIndex(-2); return true; - + case "mainMenu": + if (!isWindow()) { + workspaceMenu(app, document.querySelector("#barWorkspace").getBoundingClientRect()); + } + return true; + case "recentDocs": + openRecentDocs(); + return true; } if (command === "goToEditTabNext" || command === "goToEditTabPrev") { let currentTabElement = document.querySelector(".layout__wnd--active ul.layout-tab-bar > .item--focus"); @@ -231,6 +247,15 @@ export const globalCommand = (command: string, app: App) => { case "editReadonly": setReadOnly(!window.siyuan.config.editor.readOnly); return true; + case "lockScreen": + lockScreen(app); + return true; + case "newFile": + newFile({ + app, + useSavePath: true + }); + return true; } return false; diff --git a/app/src/boot/globalEvent/command/panel.ts b/app/src/boot/globalEvent/command/panel.ts index 969060f81..e771817dd 100644 --- a/app/src/boot/globalEvent/command/panel.ts +++ b/app/src/boot/globalEvent/command/panel.ts @@ -15,9 +15,11 @@ import {Files} from "../../../layout/dock/Files"; import {Search} from "../../../search"; /// #endif import {addEditorToDatabase, addFilesToDatabase} from "../../../protyle/render/av/addToDatabase"; -import {hasClosestByClassName} from "../../../protyle/util/hasClosest"; -import {onluProtyleCommand} from "./protyle"; +import {hasClosestBlock, hasClosestByClassName} from "../../../protyle/util/hasClosest"; +import {onlyProtyleCommand} from "./protyle"; import {globalCommand} from "./global"; +import {getTopPaths, movePathTo, moveToPath} from "../../../util/pathName"; +import {hintMoveBlock} from "../../../protyle/hint/extend"; export const commandPanel = (app: App) => { const range = getSelection().rangeCount > 0 ? getSelection().getRangeAt(0) : undefined; @@ -44,14 +46,24 @@ export const commandPanel = (app: App) => { Object.keys(window.siyuan.config.keymap.general).forEach((key) => { let keys; /// #if MOBILE - keys = ["addToDatabase", "fileTree", "outline", "bookmark", "tag", "dailyNote", "inbox", "backlinks", "config", - "dataHistory", "editReadonly", "enter", "enterBack", "globalSearch"]; + keys = ["addToDatabase", "fileTree", "outline", "bookmark", "tag", "dailyNote", "inbox", "backlinks", + "dataHistory", "editReadonly", "enter", "enterBack", "globalSearch", + "lockScreen", "mainMenu", "move", "newFile", "recentDocs", + + "replace", "riffCard", "search", "selectOpen1", + "splitLR", "splitMoveB", "splitMoveR", "splitTB", "stickSearch", "syncNow", "tabToWindow", + "toggleDock", "toggleWin"]; /// #else keys = ["addToDatabase", "fileTree", "outline", "bookmark", "tag", "dailyNote", "inbox", "backlinks", "graphView", "globalGraph", "closeAll", "closeLeft", "closeOthers", "closeRight", "closeTab", "closeUnmodified", "config", "dataHistory", "editReadonly", "enter", "enterBack", "globalSearch", "goBack", "goForward", "goToEditTabNext", "goToEditTabPrev", "goToTab1", "goToTab2", "goToTab3", "goToTab4", - "goToTab5", "goToTab6", "goToTab7", "goToTab8", "goToTab9", "goToTabNext", "goToTabPrev"]; + "goToTab5", "goToTab6", "goToTab7", "goToTab8", "goToTab9", "goToTabNext", "goToTabPrev", "lockScreen", + "mainMenu", "move", "newFile", "recentDocs", + + "replace", "riffCard", "search", "selectOpen1", + "splitLR", "splitMoveB", "splitMoveR", "splitTB", "stickSearch", "syncNow", "tabToWindow", + "toggleDock", "toggleWin"]; /// #endif if (keys.includes(key)) { @@ -66,6 +78,7 @@ export const commandPanel = (app: App) => { plugin.commands.forEach(command => { const liElement = document.createElement("li"); liElement.classList.add("b3-list-item"); + liElement.dataset.command = command.langKey; liElement.innerHTML = `${plugin.displayName}: ${command.langText || plugin.i18n[command.langKey]} ${updateHotkeyTip(command.customHotkey)}`; liElement.addEventListener("click", () => { @@ -145,7 +158,9 @@ const filterList = (inputElement: HTMLInputElement, listElement: Element) => { let hasFocus = false; Array.from(listElement.children).forEach((element: HTMLElement) => { const elementValue = element.querySelector(".b3-list-item__text").textContent.toLowerCase(); - if (inputValue.indexOf(elementValue) > -1 || elementValue.indexOf(inputValue) > -1) { + const command = element.dataset.command; + if (inputValue.indexOf(elementValue) > -1 || elementValue.indexOf(inputValue) > -1 || + inputValue.indexOf(command) > -1 || command.indexOf(inputValue) > -1) { if (!hasFocus) { element.classList.add("b3-list-item--focus"); } @@ -266,7 +281,7 @@ export const execByCommand = (options: { } // only protyle - if (!isFileFocus && onluProtyleCommand({ + if (!isFileFocus && onlyProtyleCommand({ command: options.command, previousRange: range, protyle @@ -292,5 +307,28 @@ export const execByCommand = (options: { addFilesToDatabase(fileLiElements); } break; + case "move": + if (!isFileFocus) { + const nodeElement = hasClosestBlock(range.startContainer); + if (protyle.title?.editElement.contains(range.startContainer) || !nodeElement) { + movePathTo((toPath, toNotebook) => { + moveToPath([protyle.path], toNotebook[0], toPath[0]); + }, [protyle.path], range); + } else if (nodeElement && range && protyle.element.contains(range.startContainer)) { + let selectElements = Array.from(protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select")); + if (selectElements.length === 0) { + selectElements = [nodeElement]; + } + movePathTo((toPath) => { + hintMoveBlock(toPath[0], selectElements, protyle); + }); + } + } else { + const paths = getTopPaths(fileLiElements); + movePathTo((toPath, toNotebook) => { + moveToPath(paths, toNotebook[0], toPath[0]); + }, paths); + } + break; } }; diff --git a/app/src/boot/globalEvent/command/protyle.ts b/app/src/boot/globalEvent/command/protyle.ts index 6a3cb0de5..daa781811 100644 --- a/app/src/boot/globalEvent/command/protyle.ts +++ b/app/src/boot/globalEvent/command/protyle.ts @@ -2,7 +2,7 @@ import {hasClosestBlock} from "../../../protyle/util/hasClosest"; import {getTopAloneElement} from "../../../protyle/wysiwyg/getBlock"; import {enterBack, zoomOut} from "../../../menus/protyle"; -export const onluProtyleCommand = (options: { +export const onlyProtyleCommand = (options: { command: string, previousRange: Range, protyle: IProtyle, diff --git a/app/src/boot/globalEvent/keydown.ts b/app/src/boot/globalEvent/keydown.ts index 5caf1db52..fa251c604 100644 --- a/app/src/boot/globalEvent/keydown.ts +++ b/app/src/boot/globalEvent/keydown.ts @@ -330,25 +330,12 @@ const editKeydown = (app: App, event: KeyboardEvent) => { return true; } if (!isFileFocus && matchHotKey(window.siyuan.config.keymap.general.move.custom, event)) { - let range: Range; - let nodeElement: false | HTMLElement; - if (getSelection().rangeCount > 0) { - range = getSelection().getRangeAt(0); - nodeElement = hasClosestBlock(range.startContainer); - } - if (protyle.title?.editElement.contains(range.startContainer)) { - movePathTo((toPath, toNotebook) => { - moveToPath([protyle.path], toNotebook[0], toPath[0]); - }, [protyle.path], range); - } else if (nodeElement && range && protyle.element.contains(range.startContainer)) { - let selectElements = Array.from(protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select")); - if (selectElements.length === 0) { - selectElements = [nodeElement]; - } - movePathTo((toPath) => { - hintMoveBlock(toPath[0], selectElements, protyle); - }); - } + execByCommand({ + command: "move", + app, + protyle, + previousRange: range + }); event.preventDefault(); return true; } @@ -671,10 +658,11 @@ const fileTreeKeydown = (app: App, event: KeyboardEvent) => { if (isFile && matchHotKey(window.siyuan.config.keymap.general.move.custom, event)) { window.siyuan.menus.menu.remove(); - const pathes = getTopPaths(liElements); - movePathTo((toPath, toNotebook) => { - moveToPath(pathes, toNotebook[0], toPath[0]); - }, pathes); + execByCommand({ + command: "move", + app, + fileLiElements: liElements + }); event.preventDefault(); return true; } diff --git a/app/src/protyle/wysiwyg/keydown.ts b/app/src/protyle/wysiwyg/keydown.ts index 71ed64186..97d614791 100644 --- a/app/src/protyle/wysiwyg/keydown.ts +++ b/app/src/protyle/wysiwyg/keydown.ts @@ -67,7 +67,7 @@ import {avKeydown} from "../render/av/keydown"; import {checkFold} from "../../util/noRelyPCFunction"; import {AIActions} from "../../ai/actions"; import {openLink} from "../../editor/openLink"; -import {onluProtyleCommand} from "../../boot/globalEvent/command/protyle"; +import {onlyProtyleCommand} from "../../boot/globalEvent/command/protyle"; export const getContentByInlineHTML = (range: Range, cb: (content: string) => void) => { let html = ""; @@ -469,7 +469,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { } if (matchHotKey(window.siyuan.config.keymap.general.enter.custom, event)) { - onluProtyleCommand({ + onlyProtyleCommand({ protyle, command: "enter", previousRange: range, @@ -480,7 +480,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { } if (matchHotKey(window.siyuan.config.keymap.general.enterBack.custom, event)) { - onluProtyleCommand({ + onlyProtyleCommand({ protyle, command: "enterBack", previousRange: range,