From 1525c6c899f42c637f5019175d77053561beaa4b Mon Sep 17 00:00:00 2001 From: Vanessa Date: Sun, 19 Feb 2023 09:24:40 +0800 Subject: [PATCH] :sparkles: https://github.com/siyuan-note/siyuan/issues/7057 hotkey --- app/src/card/makeCard.ts | 3 ++- app/src/card/viewCards.ts | 2 +- app/src/constants.ts | 8 ++++++-- app/src/protyle/gutter/index.ts | 6 ++++-- app/src/protyle/wysiwyg/keydown.ts | 28 ++++++++++++++++++++++++++++ 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/app/src/card/makeCard.ts b/app/src/card/makeCard.ts index 3941969ce..a2cee9962 100644 --- a/app/src/card/makeCard.ts +++ b/app/src/card/makeCard.ts @@ -6,6 +6,7 @@ import {hideMessage, showMessage} from "../dialog/message"; import {confirmDialog} from "../dialog/confirmDialog"; import {hideElements} from "../protyle/ui/hideElements"; import {viewCards} from "./viewCards"; +import {Constants} from "../constants"; export const genCardItem = (item: ICardPackage) => { return `
  • @@ -181,7 +182,7 @@ export const quickMakeCard = (nodeElement: Element[]) => { ids.push(item.getAttribute("data-node-id")); }); fetchPost("/api/riff/addRiffCards", { - deckID: "20230218211946-2kw8jgx", + deckID: Constants.QUICK_DECK_ID, blockIDs: ids }); } diff --git a/app/src/card/viewCards.ts b/app/src/card/viewCards.ts index 7aad1be02..8c10a173f 100644 --- a/app/src/card/viewCards.ts +++ b/app/src/card/viewCards.ts @@ -116,7 +116,7 @@ export const viewCards = (deckID: string, title: string, cb:(response:IWebSocket break; } else if (type === "remove") { fetchPost("/api/riff/removeRiffCards", { - deckID: isDoc ? "20230218211946-2kw8jgx" : deckID, + deckID: isDoc ? Constants.QUICK_DECK_ID : deckID, blockIDs: [target.getAttribute("data-id")] }, (removeResponse) => { let nextElment = target.parentElement.nextElementSibling; diff --git a/app/src/constants.ts b/app/src/constants.ts index 1a67160ef..9d1882949 100644 --- a/app/src/constants.ts +++ b/app/src/constants.ts @@ -85,7 +85,7 @@ export abstract class Constants { public static readonly TIMEOUT_BLOCKLOAD = 300; public static readonly TIMEOUT_TRANSITION = 150; - // help path + // id public static readonly HELP_PATH = { zh_CN: "20210808180117-czj9bvb", zh_CHT: "20211226090932-5lcq56f", @@ -93,6 +93,8 @@ export abstract class Constants { fr_FR: "20210808180117-6v0mkxr", }; + public static readonly QUICK_DECK_ID = "20230218211946-2kw8jgx" + public static readonly KEYCODE: { [key: string]: string[] } = { "186": [";", ":"], "187": ["=", "+"], @@ -108,7 +110,8 @@ export abstract class Constants { }; // 冲突不使用 "⌘S/Q" // "⌘", "⇧", "⌥", "⌃" - // "⌘A", "⌘X", "⌘C", "⌘V", "⇧⌘V", "⌘/", "⇧↑", "⇧↓", "⇧→", "⇧←", "⇧⇥", "⇧⌘⇥", "⌃⇥", "⌘⇥", "⌃⌘⇥", "⇧⌘→", "⇧⌘←", "⌘Home", "⌘End", "⇧↩", "↩", "PageUp", "PageDown", "⌫", "⌦" 不可自定义 + // "⌘A", "⌘X", "⌘C", "⌘V", "⇧⌘V", "⌘/", "⇧↑", "⇧↓", "⇧→", "⇧←", "⇧⇥", "⇧⌘⇥", "⌃⇥", "⌘⇥", "⌃⌘⇥", "⇧⌘→", "⇧⌘←", + // "⌘Home", "⌘End", "⇧↩", "↩", "PageUp", "PageDown", "⌫", "⌦" 不可自定义 public static readonly SIYUAN_KEYMAP: IKeymap = { general: { editMode: {default: "⇧⌘G", custom: "⇧⌘G"}, @@ -159,6 +162,7 @@ export abstract class Constants { openBy: {default: "⌥,", custom: "⌥,"}, insertRight: {default: "⌥.", custom: "⌥."}, attr: {default: "⌥⌘A", custom: "⌥⌘A"}, + quickMakeCard: {default: "⌥⌘F", custom: "⌥⌘F"}, refresh: {default: "F5", custom: "F5"}, copyBlockRef: {default: "⇧⌘C", custom: "⇧⌘C"}, copyProtocol: {default: "⇧⌘H", custom: "⇧⌘H"}, diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts index 1cdabd789..8d1e197c6 100644 --- a/app/src/protyle/gutter/index.ts +++ b/app/src/protyle/gutter/index.ts @@ -668,7 +668,8 @@ export class Gutter { window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element); window.siyuan.menus.menu.append(new MenuItem({ label: window.siyuan.languages.quickMakeCard, - iconHTML:``, + accelerator: window.siyuan.config.keymap.editor.general.quickMakeCard.custom, + iconHTML: ``, icon: "iconRiffCard", click() { quickMakeCard(selectsElement); @@ -1440,7 +1441,8 @@ export class Gutter { if (type !== "NodeThematicBreak") { window.siyuan.menus.menu.append(new MenuItem({ label: window.siyuan.languages.quickMakeCard, - iconHTML:``, + accelerator: window.siyuan.config.keymap.editor.general.quickMakeCard.custom, + iconHTML: ``, icon: "iconRiffCard", click() { quickMakeCard([nodeElement]); diff --git a/app/src/protyle/wysiwyg/keydown.ts b/app/src/protyle/wysiwyg/keydown.ts index c87038534..88ff9f4f2 100644 --- a/app/src/protyle/wysiwyg/keydown.ts +++ b/app/src/protyle/wysiwyg/keydown.ts @@ -70,6 +70,7 @@ import {preventScroll} from "../scroll/preventScroll"; import {getSavePath} from "../../util/newFile"; import {escapeHtml} from "../../util/escape"; import {insertHTML} from "../util/insertHTML"; +import {quickMakeCard} from "../../card/makeCard"; export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { editorElement.addEventListener("keydown", (event: KeyboardEvent & { target: HTMLElement }) => { @@ -993,6 +994,33 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { return true; } + if (matchHotKey(window.siyuan.config.keymap.editor.general.quickMakeCard.custom, event)) { + const selectElement: Element[] = [] + nodeElement.classList.add("protyle-wysiwyg--select"); + let isRemove = true; + const removeIds: string[] = []; + protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select").forEach(item => { + selectElement.push(item); + item.classList.remove("protyle-wysiwyg--select"); + removeIds.push(item.getAttribute("data-node-id")); + if ((item.getAttribute("custom-riff-decks") || "").indexOf(Constants.QUICK_DECK_ID) > -1) { + isRemove = false; + } + }); + + if (isRemove) { + fetchPost("/api/riff/removeRiffCards", { + deckID: Constants.QUICK_DECK_ID, + blockIDs: removeIds + }, (removeResponse) => { + }); + } else { + quickMakeCard(selectElement); + } + event.preventDefault(); + event.stopPropagation(); + return true; + } if (matchHotKey(window.siyuan.config.keymap.editor.general.attr.custom, event)) { const topElement = getTopAloneElement(nodeElement); if (selectText === "") {