]> BookStack Code Mirror - bookstack/commitdiff
Updated both editors to ignore image paste if text data apparent
authorDan Brown <redacted>
Wed, 15 May 2019 19:23:09 +0000 (20:23 +0100)
committerDan Brown <redacted>
Wed, 15 May 2019 19:23:09 +0000 (20:23 +0100)
Designed to ignore image data when copying from a spreadsheet.
Fixes #987

resources/assets/js/components/markdown-editor.js
resources/assets/js/components/wysiwyg-editor.js

index 770b4af5054a7b2665e23a6026a83f47bd326bca..5fa16ef6e78b522266ccf47c2a7f218357447780 100644 (file)
@@ -180,9 +180,20 @@ class MarkdownEditor {
 
         // Handle image paste
         cm.on('paste', (cm, event) => {
-            if (!event.clipboardData || !event.clipboardData.items) return;
-            for (let i = 0; i < event.clipboardData.items.length; i++) {
-                uploadImage(event.clipboardData.items[i].getAsFile());
+            const clipboardItems = event.clipboardData.items;
+            if (!event.clipboardData || !clipboardItems) return;
+
+            // Don't handle if clipboard includes text content
+            for (let clipboardItem of clipboardItems) {
+                if (clipboardItem.type.includes('text/')) {
+                    return;
+                }
+            }
+
+            for (let clipboardItem of clipboardItems) {
+                if (clipboardItem.type.includes("image")) {
+                    uploadImage(clipboardItem.getAsFile());
+                }
             }
         });
 
index 46fe967e0d8be829145685f4f4f23acd0ad8409f..614cfb80f149fdba130ee19645973f6cb426b2fe 100644 (file)
@@ -8,11 +8,20 @@ import DrawIO from "../services/drawio";
  * @param editor
  */
 function editorPaste(event, editor, wysiwygComponent) {
-    if (!event.clipboardData || !event.clipboardData.items) return;
+    const clipboardItems = event.clipboardData.items;
+    if (!event.clipboardData || !clipboardItems) return;
 
-    for (let clipboardItem of event.clipboardData.items) {
-        if (clipboardItem.type.indexOf("image") === -1) continue;
-        event.preventDefault();
+    // Don't handle if clipboard includes text content
+    for (let clipboardItem of clipboardItems) {
+        if (clipboardItem.type.includes('text/')) {
+            return;
+        }
+    }
+
+    for (let clipboardItem of clipboardItems) {
+        if (!clipboardItem.type.includes("image")) {
+            continue;
+        }
 
         const id = "image-" + Math.random().toString(16).slice(2);
         const loadingImage = window.baseUrl('/loading.gif');