All files / app/assets/javascripts/content_editor/extensions attachment.js

100% Statements 16/16
100% Branches 4/4
100% Functions 8/8
100% Lines 16/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 71        10x 3x 1x     2x   2x 2x     2x             247x               130x 134x 134x   134x                     113x   113x         2x             1x                      
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,
            });
          },
        },
      }),
    ];
  },
});