Skip to content

Commit 6c444cd

Browse files
author
Julien Veyssier
authored
handle image paste, ignore the event's text if it contains a file (#2265)
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
1 parent 6f619c0 commit 6c444cd

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

src/components/EditorWrapper.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
<div v-if="tiptap"
3838
id="editor"
3939
:class="{ draggedOver }"
40+
@image-paste="onPaste"
4041
@dragover.prevent.stop="draggedOver = true"
4142
@dragleave.prevent.stop="draggedOver = false"
4243
@drop.prevent.stop="onEditorDrop">
@@ -566,6 +567,9 @@ export default {
566567
hideHelp() {
567568
this.displayHelp = false
568569
},
570+
onPaste(e) {
571+
this.uploadImageFiles(e.detail.files)
572+
},
569573
onEditorDrop(e) {
570574
this.uploadImageFiles(e.dataTransfer.files)
571575
this.draggedOver = false

src/nodes/Image.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222

2323
import TiptapImage from '@tiptap/extension-image'
24+
import { Plugin } from 'prosemirror-state'
2425
import ImageView from './ImageView'
2526
import { VueNodeViewRenderer } from '@tiptap/vue-2'
2627

@@ -39,6 +40,29 @@ const Image = TiptapImage.extend({
3940
return VueNodeViewRenderer(ImageView)
4041
},
4142

43+
addProseMirrorPlugins() {
44+
return [
45+
new Plugin({
46+
props: {
47+
handlePaste: (view, event, slice) => {
48+
// only prevent the paste if it contains files
49+
if (event.clipboardData.files && event.clipboardData.files.length > 0) {
50+
// let the editor wrapper catch this custom event
51+
const customEvent = new CustomEvent('image-paste', {
52+
bubbles: true,
53+
detail: {
54+
files: event.clipboardData.files,
55+
},
56+
})
57+
event.target.dispatchEvent(customEvent)
58+
return true
59+
}
60+
},
61+
},
62+
}),
63+
]
64+
},
65+
4266
})
4367

4468
export default Image

0 commit comments

Comments
 (0)