fix: remove empty attributes in getDebugJSON

This commit is contained in:
Philipp Kühn
2021-05-19 18:27:12 +02:00
parent 61b06e73a5
commit 940fd69b61

View File

@@ -1,31 +1,50 @@
import { Node as ProseMirrorNode } from 'prosemirror-model' import { Node as ProseMirrorNode } from 'prosemirror-model'
import { JSONContent } from '../types'
interface DebugJSONContent extends JSONContent {
from: number,
to: number,
}
/** /**
* Returns a node tree with node positions. * Returns a node tree with node positions.
*/ */
export default function getDebugJSON(node: ProseMirrorNode) { export default function getDebugJSON(node: ProseMirrorNode, startOffset = 0) {
const debug = (startNode: ProseMirrorNode, startOffset = 0) => { const nodes: DebugJSONContent[] = []
const nodes: any[] = []
startNode.forEach((n, offset) => { node.forEach((n, offset) => {
const from = startOffset + offset const from = startOffset + offset
const to = from + n.nodeSize const to = from + n.nodeSize
const marks = n.marks.map(mark => ({
nodes.push({
type: n.type.name,
attrs: { ...n.attrs },
from,
to,
marks: n.marks.map(mark => ({
type: mark.type.name, type: mark.type.name,
attrs: { ...mark.attrs }, attrs: { ...mark.attrs },
})), }))
content: debug(n, from + 1), const attrs = { ...n.attrs }
}) const content = getDebugJSON(n, from + 1)
const output: DebugJSONContent = {
type: n.type.name,
from,
to,
}
if (Object.keys(attrs).length) {
output.attrs = attrs
}
if (marks.length) {
output.marks = marks
}
if (content.length) {
output.content = content
}
if (n.text) {
output.text = n.text
}
nodes.push(output)
}) })
return nodes return nodes
} }
return debug(node)
}