Структура вложенных пятен дельта правильно QuillJs - PullRequest
0 голосов
/ 21 декабря 2018

Я реализовал блот-блот, состоящий из блоттинга и бланка подписи.Мое пятно изображения расширяет BlockEmbed и является тегом img, который отображает изображение, а мое пятно заголовка расширяет блок.Мне нужно, чтобы заголовок был форматируемым, поэтому я использовал блот-блот.Мой предполагаемый функционал реализован.Но моя дельта не правильно структурирована.

Вот мой блот-код:

/* eslint-disable no-param-reassign */
import ReactQuill from 'react-quill';
const Quill = ReactQuill.Quill;
const BlockEmbed = Quill.import('blots/block/embed');
const Block = Quill.import('blots/block');
const Container = Quill.import('blots/container');
const Parchment = Quill.import('parchment');
const Break = Quill.import('blots/break');
const Inline = Quill.import('blots/inline');
const TextBlot = Quill.import('blots/text');

class FigCaption extends Block {
  static create(value) {
    const node = super.create();
    node.dataset.caption = value;
    node.setAttribute('align', 'center');
    node.innerText = value;
    return node;
  }

  static value(domNode) {
    return domNode.dataset.caption;
  }
}

FigCaption.blotName = 'fig-caption';
FigCaption.tagName = 'figcaption';
FigCaption.allowedChildren = [Inline, TextBlot, Block, Break];

const IMG_ATTRIBUTES = ['width', 'height', 'src'];
class FigImage extends BlockEmbed {
  static create(value) {
    const node = super.create();
    node.dataset.src = value;
    node.setAttribute('contenteditable', 'false');
    node.setAttribute('src', value);
    return node;
  }

  static formats(domNode) {
    return IMG_ATTRIBUTES.reduce((formats, attribute) => {
      if (domNode.hasAttribute(attribute)) {
        formats[attribute] = domNode.getAttribute(attribute);
      }
      return formats;
    }, {});
  }

  static value(domNode) {
    return domNode.dataset.src;
  }

  format(name, value) {
    if (IMG_ATTRIBUTES.indexOf(name) > -1) {
      if (value) {
        this.domNode.setAttribute(name, value);
      } else {
        this.domNode.removeAttribute(name);
      }
    } else {
      super.format(name, value);
    }
  }
}

FigImage.blotName = 'fig-image';
FigImage.tagName = 'img';
FigCaption.allowedChildren = [Inline, TextBlot, Block, Break];

const ATTRIBUTES = ['align', 'style', 'width', 'height', 'src'];
class FigureBlot extends Block {
  static create(value) {
    const node = super.create();
    node.dataset.src = value.src;
    node.dataset.caption = value.caption;
    const imageElement = Parchment.create('fig-image', value.src);
    const captionElement = Parchment.create('fig-caption', value.caption);
    node.appendChild(imageElement.domNode);
    node.appendChild(captionElement.domNode);
    return node;
  }

  static formats(domNode) {
    return ATTRIBUTES.reduce((formats, attribute) => {
      if (domNode.hasAttribute(attribute)) {
        formats[attribute] = domNode.getAttribute(attribute);
      }
      return formats;
    }, {});
  }

  format(name, value) {
    if (ATTRIBUTES.indexOf(name) > -1) {
      if (name === 'style' || name === 'align') {
        if (value) {
          this.domNode.setAttribute(name, value);
        } else {
          this.domNode.removeAttribute(name);
        }
      } else if (name === 'height' || name === 'width' || name === 'src') {
        const imageElement = this.domNode.querySelector('img');
        if (value) {
          imageElement.setAttribute(name, value);
        } else {
          imageElement.removeAttribute(name);
        }
      }
    } else {
      super.format(name, value);
    }
  }

  static value(domNode) {
    const src = domNode.dataset.src;
    const caption = domNode.dataset.caption;
    return { src, caption };
  }
}

FigureBlot.blotName = 'figure';
FigureBlot.tagName = 'figure';
FigureBlot.defaultChild = [FigImage, FigCaption];
FigureBlot.allowedChildren = [FigCaption, FigImage, Inline, Block, BlockEmbed, TextBlot, Container];

export { FigureBlot, FigCaption, FigImage };

Может кто-нибудь указать мне, где я иду не так?Буду признателен за помощь

...