This commit is contained in:
Vanessa 2022-11-08 18:53:03 +08:00
parent 6db5682a0e
commit 8a4d4ab3c9
3 changed files with 30 additions and 9 deletions

View file

@ -23,13 +23,10 @@ import {readText, writeText} from "../protyle/util/compatibility";
import {preventScroll} from "../protyle/scroll/preventScroll"; import {preventScroll} from "../protyle/scroll/preventScroll";
import {onGet} from "../protyle/util/onGet"; import {onGet} from "../protyle/util/onGet";
import {getAllModels} from "../layout/getAll"; import {getAllModels} from "../layout/getAll";
import {pasteText} from "../protyle/util/paste"; import {pasteAsPlainText, pasteText} from "../protyle/util/paste";
/// #if !MOBILE /// #if !MOBILE
import {openFileById, updateBacklinkGraph} from "../editor/util"; import {openFileById, updateBacklinkGraph} from "../editor/util";
/// #endif /// #endif
/// #if !BROWSER
import {getCurrentWindow} from "@electron/remote";
/// #endif
import {isMobile} from "../util/functions"; import {isMobile} from "../util/functions";
import {removeFoldHeading} from "../protyle/util/heading"; import {removeFoldHeading} from "../protyle/util/heading";
import {lineNumberRender} from "../protyle/markdown/highlightRender"; import {lineNumberRender} from "../protyle/markdown/highlightRender";
@ -364,7 +361,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
accelerator: "⇧⌘V", accelerator: "⇧⌘V",
click() { click() {
focusByRange(getEditorRange(nodeElement)); focusByRange(getEditorRange(nodeElement));
getCurrentWindow().webContents.pasteAndMatchStyle(); pasteAsPlainText(protyle);
} }
}).element); }).element);
/// #endif /// #endif

View file

@ -4,6 +4,7 @@ import {processPasteCode, processRender} from "./processCode";
import {writeText} from "./compatibility"; import {writeText} from "./compatibility";
/// #if !BROWSER /// #if !BROWSER
import {clipboard} from "electron"; import {clipboard} from "electron";
import {getCurrentWindow} from "@electron/remote";
/// #endif /// #endif
import {hasClosestBlock} from "./hasClosest"; import {hasClosestBlock} from "./hasClosest";
import {focusByWbr, getEditorRange} from "./selection"; import {focusByWbr, getEditorRange} from "./selection";
@ -29,6 +30,31 @@ const filterClipboardHint = (protyle: IProtyle, textPlain: string) => {
} }
}; };
export const pasteAsPlainText = async (protyle: IProtyle) => {
/// #if !BROWSER && !MOBILE
let localFiles: string[] = [];
if ("darwin" === window.siyuan.config.system.os) {
const xmlString = clipboard.read("NSFilenamesPboardType");
const domParser = new DOMParser();
const xmlDom = domParser.parseFromString(xmlString, "application/xml");
Array.from(xmlDom.getElementsByTagName("string")).forEach(item => {
localFiles.push(item.childNodes[0].nodeValue);
});
} else {
const xmlString = await fetchSyncPost("/api/clipboard/readFilePaths", {});
if (xmlString.data.length > 0) {
localFiles = xmlString.data;
}
}
if (localFiles.length > 0) {
uploadLocalFiles(localFiles, protyle, false);
writeText("");
} else {
getCurrentWindow().webContents.pasteAndMatchStyle();
}
/// #endif
};
export const pasteText = (protyle: IProtyle, textPlain: string, nodeElement: Element) => { export const pasteText = (protyle: IProtyle, textPlain: string, nodeElement: Element) => {
const range = getEditorRange(protyle.wysiwyg.element); const range = getEditorRange(protyle.wysiwyg.element);
if (nodeElement.getAttribute("data-type") === "NodeCodeBlock") { if (nodeElement.getAttribute("data-type") === "NodeCodeBlock") {

View file

@ -42,9 +42,6 @@ import {isLocalPath} from "../../util/pathName";
/// #if !MOBILE /// #if !MOBILE
import {openBy, openFileById} from "../../editor/util"; import {openBy, openFileById} from "../../editor/util";
/// #endif /// #endif
/// #if !BROWSER
import {getCurrentWindow} from "@electron/remote";
/// #endif
import {commonHotkey, downSelect, getStartEndElement, upSelect} from "./commonHotkey"; import {commonHotkey, downSelect, getStartEndElement, upSelect} from "./commonHotkey";
import {linkMenu, refMenu, setFold, zoomOut} from "../../menus/protyle"; import {linkMenu, refMenu, setFold, zoomOut} from "../../menus/protyle";
import {removeEmbed} from "./removeEmbed"; import {removeEmbed} from "./removeEmbed";
@ -60,6 +57,7 @@ import {highlightRender} from "../markdown/highlightRender";
import {countBlockWord} from "../../layout/status"; import {countBlockWord} from "../../layout/status";
import {openMobileFileById} from "../../mobile/editor"; import {openMobileFileById} from "../../mobile/editor";
import {moveToDown, moveToUp} from "./move"; import {moveToDown, moveToUp} from "./move";
import {pasteAsPlainText} from "../util/paste";
export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
editorElement.addEventListener("keydown", (event: KeyboardEvent & { target: HTMLElement }) => { editorElement.addEventListener("keydown", (event: KeyboardEvent & { target: HTMLElement }) => {
@ -1583,7 +1581,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
event.returnValue = false; event.returnValue = false;
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
getCurrentWindow().webContents.pasteAndMatchStyle(); pasteAsPlainText(protyle);
return; return;
} }