1.4.9 • Published 8 months ago

quill-2-image-uploader-base64-off v1.4.9

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

Quill-2 TS Image Uploader

quill-2-image-uploader-base64-off

- Replacing base64 Image after uploading with img src="your-link"

Adaptation for using Quill-2 and react-quill-new

A module for Quill rich text editor to allow images to be uploaded to a server instead of being base64 encoded. Adds a button to the toolbar for users to click, also handles drag,dropped and pasted images.

Image of Yaktocat

Quickstart (React with react-quill-new)

Install

Install with npm:

```bash
    npm i quill-2-image-uploader-base64-off
    npm i quill
    npm i react-quill-new
import ReactQuill, { Quill } from 'react-quill-new';
import ImageUploader from 'quill-2-image-uploader-base64-off';
import Emitter from 'quill/core/emitter';

import 'quill-image-uploader/dist/quill.imageUploader.min.css';
import { useRef } from 'react';

Quill.register('modules/imageUploader', ImageUploader);

const Scroll = Quill.import('blots/scroll') as any;

// Fix for Quill-2 to dnd inside textarea after paste or drop
class DraggableScroll extends Scroll {
  constructor(
    registry: { attributes: any; classes: any; tags: any; types: any },
    domNode: HTMLElement,
    { emitter }: { emitter: Emitter }
  ) {
    super(registry, domNode, { emitter });

    this.domNode?.addEventListener('drop', (e: DragEvent) => this.handleDrop(e), true);
  }

  handleDrop(e: DragEvent) {
    if (!e.dataTransfer?.files.length) e.stopImmediatePropagation();
  }

  handleDragStart() {}
}

// @ts-ignore
Quill.register(DraggableScroll);

interface IProps {
  classes?: string;
  theme?: string;
  text?: string;
  placeholder?: string;
  setContent?: (content: string) => void;
}

export const MyComponent = ({ classes, theme, text, placeholder, setContent }: IProps) => {
  const ref = useRef(null)
  return (
    <ReactQuill
      className={classes}
      theme={theme}
      value={text}
      onChange={(text, delta, source) => {
        if (source === 'user') {
          setContent?.(text);
        }
      }}
      modules={{
        toolbar: {
          container: [['link'], ['image']],
        },
        clipboard: {
          matchVisual: false,
        },
        imageResize: {
          parchment: Quill.import('parchment'),
            // U can add custom ImageResizeModuleToolbar
            modules: ['Resize', 'DisplaySize'], 
        },
        imageUploader: {
          upload: async (file: File) => {
            // pass your img link or set showBase64Image true to see base64img inside textarea
            return { imageLink: 'img link', showBase64Image: false };
          },
        },
      }}
      formats={['header', 'font', 'size']}
      ref={ref}
      readOnly={false}
      placeholder={placeholder}
    />
  );
};

If warnings in console, check this formats:

'imageBlot', // #5 Optinal if using custom formats

'sub',

'super',

'width',

'alt',

'bullet',

1.4.9

8 months ago

1.4.8

8 months ago

1.4.7

8 months ago

1.4.6

8 months ago

1.4.5

8 months ago

1.4.4

8 months ago

1.4.3

8 months ago

1.4.2

8 months ago

1.4.1

8 months ago

1.4.0

8 months ago

1.3.9

8 months ago

1.3.8

8 months ago

1.3.7

8 months ago

1.3.6

8 months ago

1.3.5

8 months ago

1.3.4

8 months ago

1.3.3

8 months ago

1.3.2

8 months ago

1.3.1

8 months ago