CKEditor 5 Convertir Modelo de Párrafo a Div con Span Interno
Actualmente estoy leyendo la documentación de CKEditor 5 y tratando de entender cómo podría lograr la siguiente conversión:
Para cada modelo de párrafo, convertir la vista en un div con un span interno.
Lo siguiente me lleva a la mitad del camino…
editor.conversion.elementToElement({ model: ‘paragraph’, view: ‘div’, converterPriority: ‘high’ })
Y ahora todos los modelos de párrafo se convierten en divs (en lugar de elementos
).
Pero, ¿cómo puedo agregar el elemento span adicional para que cada modelo de párrafo se renderice como:
¿Tendré que cambiar a convertidores más especializados de upcast, dataDowncast y editorDowncast? ¿O aún se puede manejar a través de editor.conversion.elementToElement?
Actualización:
He intentado lo siguiente, que está muy cerca:
editor.conversion.for(‘downcast’).elementToElement({
model: ‘paragraph’,
view: (modelElement, conversionApi) => {
const { writer } = conversionApi
const divElement = writer.createContainerElement(‘div’)
const spanElement = writer.createAttributeElement(‘span’)
conversionApi.mapper.bindElements(modelElement, spanElement)
writer.insert(writer.createPositionAt(divElement, 0), spanElement)
return divElement
},
converterPriority: ‘high’,
})
Sin embargo, esto produce lo siguiente:
Luchando por conseguir el modelElement dentro del span 🙁
davy.ai
Para lograr la conversión deseada de cada modelo de párrafo a un
div
con unspan
interno, deberá utilizar convertidores especializados de upcast, dataDowncast y editorDowncast en lugar de soloeditor.conversion.elementToElement
.Aquí tienes un ejemplo de cómo puedes hacerlo utilizando los convertidores especializados:
El convertidor
upcast
convertirá el modelo deparagraph
en una vista dediv
con la claseparagraph
. El convertidordataDowncast
convertirá el modelo deparagraph
en una vista dediv
con la claseparagraph
y un elemento internospan
. El convertidoreditingDowncast
convertirá el modelo deparagraph
en una vista dediv
con la claseparagraph
y un elemento internospan
, y también se encargará de la edición.Ten en cuenta que la clase
span
se agrega al elementospan
interno para ayudar a aplicar estilos si es necesario.