@tiptap/core
Version:
headless rich text editor
26 lines (22 loc) • 754 B
text/typescript
import { Mark, Node } from '@tiptap/pm/model'
import { ExtensionAttribute } from '../types.js'
import { mergeAttributes } from '../utilities/mergeAttributes.js'
export function getRenderedAttributes(
nodeOrMark: Node | Mark,
extensionAttributes: ExtensionAttribute[],
): Record<string, any> {
return extensionAttributes
.filter(
attribute => attribute.type === nodeOrMark.type.name,
)
.filter(item => item.attribute.rendered)
.map(item => {
if (!item.attribute.renderHTML) {
return {
[item.name]: nodeOrMark.attrs[item.name],
}
}
return item.attribute.renderHTML(nodeOrMark.attrs) || {}
})
.reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {})
}