add fallback renderer for attributes

This commit is contained in:
Philipp Kühn
2020-10-24 13:48:41 +02:00
parent 59d6051d05
commit c85844ae11

View File

@@ -1,13 +1,21 @@
import { Node, Mark } from 'prosemirror-model' import { Node, Mark } from 'prosemirror-model'
import { ExtensionAttribute } from '../types' import { ExtensionAttribute } from '../types'
import mergeAttributes from './mergeAttributes' import mergeAttributes from './mergeAttributes'
import isEmptyObject from './isEmptyObject'
export default function getRenderedAttributes(nodeOrMark: Node | Mark, extensionAttributes: ExtensionAttribute[]): { [key: string]: any } { export default function getRenderedAttributes(nodeOrMark: Node | Mark, extensionAttributes: ExtensionAttribute[]): { [key: string]: any } {
return extensionAttributes return extensionAttributes
.filter(item => item.attribute.rendered) .filter(item => item.attribute.rendered)
.map(item => { .map(item => {
// TODO: fallback if renderHTML doesnt exist const renderedAttributes = item.attribute.renderHTML(nodeOrMark.attrs)
return item.attribute.renderHTML(nodeOrMark.attrs)
if (isEmptyObject(renderedAttributes)) {
return {
[`data-${item.name}`]: nodeOrMark.attrs[item.name],
}
}
return renderedAttributes
}) })
.reduce((attributes, attribute) => { .reduce((attributes, attribute) => {
return mergeAttributes(attributes, attribute) return mergeAttributes(attributes, attribute)