Я реализовал блот-блот, состоящий из блоттинга и бланка подписи.Мое пятно изображения расширяет 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 };
Может кто-нибудь указать мне, где я иду не так?Буду признателен за помощь