Jelajahi Sumber

prevent pasting svg copied from excalidraw (#1288)

* prevent pasting svg copied from excalidraw

* remove unnecessary template
David Luzar 5 tahun lalu
induk
melakukan
729aeacc47
2 mengubah file dengan 9 tambahan dan 1 penghapusan
  1. 6 1
      src/clipboard.ts
  2. 3 0
      src/scene/export.ts

+ 6 - 1
src/clipboard.ts

@@ -1,6 +1,7 @@
 import { ExcalidrawElement } from "./element/types";
 import { getSelectedElements } from "./scene";
 import { AppState } from "./types";
+import { SVG_EXPORT_TAG } from "./scene/export";
 
 let CLIPBOARD = "";
 let PREFER_APP_CLIPBOARD = false;
@@ -39,6 +40,10 @@ export async function copyToAppClipboard(
 export function getAppClipboard(): {
   elements?: readonly ExcalidrawElement[];
 } {
+  if (!CLIPBOARD) {
+    return {};
+  }
+
   try {
     const clipboardElements = JSON.parse(CLIPBOARD);
 
@@ -68,7 +73,7 @@ export async function getClipboardContent(
       : probablySupportsClipboardReadText &&
         (await navigator.clipboard.readText());
 
-    if (text && !PREFER_APP_CLIPBOARD) {
+    if (text && !PREFER_APP_CLIPBOARD && !text.includes(SVG_EXPORT_TAG)) {
       return { text };
     }
   } catch (error) {

+ 3 - 0
src/scene/export.ts

@@ -6,6 +6,8 @@ import { distance, SVG_NS } from "../utils";
 import { normalizeScroll } from "./scroll";
 import { AppState } from "../types";
 
+export const SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;
+
 export function exportToCanvas(
   elements: readonly ExcalidrawElement[],
   appState: AppState,
@@ -86,6 +88,7 @@ export function exportToSvg(
   svgRoot.setAttribute("viewBox", `0 0 ${width} ${height}`);
 
   svgRoot.innerHTML = `
+  ${SVG_EXPORT_TAG}
   <defs>
     <style>
       @font-face {