Issue #1155Opened June 1, 2018by grizzm01 reactions

Custom component used as HTML in block

Question

I've extended the default image component

export default (editor) => {
  const domComponents = editor.DomComponents;
  const imageType = domComponents.getType('image');

  domComponents.addType('image-extended', {
    model: imageType.model.extend({
        defaults: Object.assign({}, imageType.model.prototype.defaults, {
          name: 'Image Extended',
        })
      },
      {
        isComponent(el) {
          if (el.tagName === 'img' && el.classList && el.classList.contains('img-extended')) {
            return {type: 'image-extended'};
          }
        }
      }),
    view: imageType.view
  });
};

Then I've got a block where I'm going to use the extended image. The following works fine.

export default (editor) => {
  let bm = editor.BlockManager;

  bm.add('ImageExtended').set({
    label: 'Image Extended',
    category: 'Layout',
    attributes: {class: 'fa fa-image'},
    content: {
      type: 'image-extended',
      classes: ['img-extended'],
    },
  });
};

However, this block will contain nested HTML (kind of a card) and one of the childs needs to be this custom image component. Using the following the img element is not recognized as my custom image component.

export default (editor) => {
  let bm = editor.BlockManager;

  bm.add('Card').set({
    label: 'Card',
    category: 'Layout',
    attributes: {class: 'fa fa-image'},
    content: '<div class="card"><img class="img-extended"></div>',
  });
};

Answers (2)

artfJune 5, 20181 reactions

el.tagName === 'IMG'

lock[bot]September 17, 20190 reactions

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

Related Questions and Answers

Continue research with similar issue discussions.

Paid Plugins That Match This Issue

Curated by issue keywords and label relevance to help you ship faster.

View all plugins

Loading paid plugin recommendations...

Browse Plugin Categories

Jump directly to plugin category pages on the marketplace.