CKEditor 5: как просто выгружать устаревшие элементы - PullRequest
0 голосов
/ 29 марта 2020

В моем проекте у меня есть устаревшая компоновка, которую я хочу конвертировать, используя конвертацию CKEditor 5 (если это возможно). Это стандартный способ сделать блочный виджет. Я использую тот же способ для преобразования

conversion.for('upcast')
  .elementToElement({
    model: 'info',
    view: {
      name: 'div',
      classes: 'info'
    }
  })
  .elementToElement({
    model: 'infoInner',
    view: {
      name: 'div'
    }
  });

conversion.for('dataDowncast')
  .elementToElement({
    model: 'info',
    view: {
      name: 'div',
      classes: 'info'
    }
  })
  .elementToElement({
    model: 'infoInner',
    view: {
      name: 'div'
    }
  });

conversion.for('editingDowncast')
  .elementToElement({
    model: 'info',
    view: (modelElement, viewWriter) => {
      const section = viewWriter.createContainerElement('div', {
        class: 'info'
      });
      return toWidget(section, viewWriter, { hasSelectionHandler: true });
    }
  })
  .elementToElement({
    model: 'infoInner',
    view: (modelElement, viewWriter) => {
      const div = viewWriter.createEditableElement('div');
      return toWidgetEditable(div, viewWriter);
    }
  });

Это делает макет как

<div class="info">
  <div>
    <p>Content</p>
    <p>Content</p>
  </div>
</div>

В устаревшем коде у меня есть этот тип html

<div>
  <p>Content</p>
  <p>Content</p>
</div>

Как я Предположим, что возможно вывести старый макет на новый, использовать только функцию upcast

conversion.for('upcast').elementToElement({
  view: 'div',
  model: (viewElement, modelWriter) => {
    if (!viewElement.getAttribute('class')) {

      // What I have to do here?

      // This is idea below, but it doesn't work
      const info = modelWriter.createElement('info');
      const infoInner = modelWriter.createElement('infoInner');
      modelWriter.append(viewElement.getChildren(), infoInner);
      modelWriter.append(infoInner, info);
      return info;

    }
  }
})

Как получить дочерние элементы, переместить их в новый блок виджетов и удалить старый html?

...