From 6aa8cc60e33d8af0f1d6b3cd12694620eea2740a Mon Sep 17 00:00:00 2001 From: Rohland de Charmoy Date: Thu, 20 Oct 2022 12:07:49 +0200 Subject: [PATCH 1/3] :bug: fixes bug where multipart data is pasted, file not detected --- src/trix/controllers/level_2_input_controller.coffee | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/trix/controllers/level_2_input_controller.coffee b/src/trix/controllers/level_2_input_controller.coffee index 782ef7281..31dd7c7f8 100644 --- a/src/trix/controllers/level_2_input_controller.coffee +++ b/src/trix/controllers/level_2_input_controller.coffee @@ -39,7 +39,7 @@ class Trix.Level2InputController extends Trix.InputController # Safe to remove each condition once fixed upstream. paste: (event) -> # https://bugs.webkit.org/show_bug.cgi?id=194921 - if pasteEventHasFilesOnly(event) + if pasteEventHasAtLeastOneFile(event) event.preventDefault() @attachFiles(event.clipboardData.files) @@ -415,10 +415,9 @@ class Trix.Level2InputController extends Trix.InputController dragEventHasFiles = (event) -> "Files" in (event.dataTransfer?.types ? []) - pasteEventHasFilesOnly = (event) -> + pasteEventHasAtLeastOneFile = (event) -> if clipboard = event.clipboardData "Files" in clipboard.types and - clipboard.types.length is 1 and clipboard.files.length >= 1 pasteEventHasPlainTextOnly = (event) -> From 135be67d9522989c570fa8b5baccd7a2d6e81b53 Mon Sep 17 00:00:00 2001 From: Rohland de Charmoy Date: Thu, 20 Oct 2022 13:02:07 +0200 Subject: [PATCH 2/3] :white_check_mark: adding test --- .../controllers/level_2_input_controller.coffee | 7 ++++--- test/src/system/level_2_input_test.coffee | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/trix/controllers/level_2_input_controller.coffee b/src/trix/controllers/level_2_input_controller.coffee index 31dd7c7f8..7d3c777e9 100644 --- a/src/trix/controllers/level_2_input_controller.coffee +++ b/src/trix/controllers/level_2_input_controller.coffee @@ -39,7 +39,7 @@ class Trix.Level2InputController extends Trix.InputController # Safe to remove each condition once fixed upstream. paste: (event) -> # https://bugs.webkit.org/show_bug.cgi?id=194921 - if pasteEventHasAtLeastOneFile(event) + if pasteEventHasAFile(event) event.preventDefault() @attachFiles(event.clipboardData.files) @@ -415,10 +415,11 @@ class Trix.Level2InputController extends Trix.InputController dragEventHasFiles = (event) -> "Files" in (event.dataTransfer?.types ? []) - pasteEventHasAtLeastOneFile = (event) -> + pasteEventHasAFile = (event) -> if clipboard = event.clipboardData "Files" in clipboard.types and - clipboard.files.length >= 1 + clipboard.types.length <= 2 and + clipboard.files.length == 1 pasteEventHasPlainTextOnly = (event) -> if clipboard = event.clipboardData diff --git a/test/src/system/level_2_input_test.coffee b/test/src/system/level_2_input_test.coffee index 3905ae8b0..af64148cb 100644 --- a/test/src/system/level_2_input_test.coffee +++ b/test/src/system/level_2_input_test.coffee @@ -171,6 +171,19 @@ testGroup "Level 2 Input", testOptions, -> assert.textAttributes([0, url.length], href: url) expectDocument "#{url}\n" + # Pastes from Google Chrome include text/html + a file, we want the file! + # https://input-inspector.javan.us/profiles/r1s8c7DqbOQXXjz76mj0 + test "pasting image copied from Google Chrome", (expectDocument) -> + createFile (file) -> + clipboardData = dataTransfer = createDataTransfer + "text/html": """Google""" + "Files": [file] + + paste {dataTransfer}, -> + attachments = getDocument().getAttachments() + assert.equal attachments.length, 1 + expectDocument "" + # Pastes from MS Word include an image of the copied text 🙃 # https://input-inspector.now.sh/profiles/QWDITsV60dpEVl1SOZg8 test "pasting text from MS Word", (expectDocument) -> @@ -183,7 +196,7 @@ testGroup "Level 2 Input", testOptions, -> paste {dataTransfer}, -> attachments = getDocument().getAttachments() assert.equal attachments.length, 0 - expectDocument "abc\n" + expectDocument "abc\n" # "beforeinput" event is not fired for Paste and Match Style operations # - https://bugs.chromium.org/p/chromium/issues/detail?id=934448 From ca6dc4e4a1301855a48f3a546ed320b65ca77181 Mon Sep 17 00:00:00 2001 From: Rohland de Charmoy Date: Thu, 20 Oct 2022 13:14:20 +0200 Subject: [PATCH 3/3] :rewind: revert constraint to just one file --- src/trix/controllers/level_2_input_controller.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trix/controllers/level_2_input_controller.coffee b/src/trix/controllers/level_2_input_controller.coffee index 7d3c777e9..a39671c52 100644 --- a/src/trix/controllers/level_2_input_controller.coffee +++ b/src/trix/controllers/level_2_input_controller.coffee @@ -419,7 +419,7 @@ class Trix.Level2InputController extends Trix.InputController if clipboard = event.clipboardData "Files" in clipboard.types and clipboard.types.length <= 2 and - clipboard.files.length == 1 + clipboard.files.length >= 1 pasteEventHasPlainTextOnly = (event) -> if clipboard = event.clipboardData