1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
import { Extension } from '@tiptap/core';
import { Plugin, PluginKey } from '@tiptap/pm/state';
import { handleFileEvent } from '../services/upload_helpers';
const processFiles = ({ files, uploadsPath, renderMarkdown, eventHub, editor }) => {
if (!files.length) {
return false;
}
let handled = true;
for (const file of files) {
handled = handled && handleFileEvent({ editor, file, uploadsPath, renderMarkdown, eventHub });
}
return handled;
};
export default Extension.create({
name: 'attachment',
addOptions() {
return {
uploadsPath: null,
renderMarkdown: null,
eventHub: null,
};
},
addCommands() {
return {
uploadAttachment: ({ file }) => () => {
const { uploadsPath, renderMarkdown, eventHub } = this.options;
return handleFileEvent({
file,
uploadsPath,
renderMarkdown,
editor: this.editor,
eventHub,
});
},
};
},
addProseMirrorPlugins() {
const { editor } = this;
return [
new Plugin({
key: new PluginKey('attachment'),
props: {
handlePaste: (_, event) => {
return processFiles({
files: event.clipboardData.files,
editor,
...this.options,
});
},
handleDrop: (_, event) => {
return processFiles({
files: event.dataTransfer.files,
editor,
...this.options,
});
},
},
}),
];
},
});
|