Я (пере) пишу плагин для редактора CK 5.
В версии 4 я добавил HTML так:
<span data-id="my-special-value" class="my-widget">My label</span>
Мне нужно значение data-id в PHP, чтобы делать мои вещи. Но я не могу понять, как это сделать в CKeditor 5.
CKeditor 5 работает по-другому. Это очень красиво, но я до сих пор не могу понять, как добавить такой виджет с дополнительным состоянием (атрибут data-id).
Я пытался:
const viewFragment = editor.data.processor.toView(html);
const modelFragment = editor.data.toModel(viewFragment);
editor.model.insertContent( modelFragment );
Мой очень простой код преобразования:
model.schema.register(pluginSlug, {
isBlock: false,
isObject: true,
allowContentOf: '$block',
allowWhere: [ '$block', '$text'],
});
// Retrieving the data from the editor.
editor.conversion.for('dataDowncast').add( downcastElementToElement( {
model: pluginSlug,
view: (modelItem, writer) => {
const element = writer.createContainerElement( 'span', { class: 'widget form-element-wysiwyg', test: "test" });
return element;
}
}) );
// Rendering the editor content to the user for editing.
editor.conversion.for('editingDowncast').add( downcastElementToElement( {
model: pluginSlug,
view: (modelItem, writer) => {
const element = writer.createContainerElement('span', { class: 'widget form-element-wysiwyg', test: "test" });
const widget = toWidget( element, writer, { label: 'Target Label' });
return widget;
}
}) );
// Loading the data to the editor.
editor.conversion.for('upcast').add( upcastElementToElement( {
view: {
name: 'span',
class: 'widget form-element-wysiwyg'
},
model: pluginSlug
}) );
Я действительно не могу понять, как с этим справиться. Этот код пытается добавить:
<span data-id="my-special-value" class="my-widget">My label</span>
но теперь это все еще добавляет:
<span class="my-widget">My label</span>
Как вы увидите, он фактически добавляет:
<span class="my-widget" test="test">My label</span>
из-за кода dataDowncast, но как получить мое состояние из части кода insertContent?