Hello,
I’m trying to wrap multiple elements within another node. Specifically, I am trying to wrap two paragraphs within a custom node that I have defined.
In my schema definition, I defined the NodeSpec like so:
org_property: {
defining: true,
priority: 60,
group: "block",
content: "paragraph{2}",
parseDOM: [{tag: 'div.orgProperty[data-label="property-label"]'}],
toDOM() { return ["div", {"data-label": "property-label", "class": "orgProperty"}, 0] }
}
I’ve also defined an InputRule
to recognize when text needs to be converted into a org_property
.
When I match this input rule, I call a function that returns a transaction, like so:
function handleOrgPropertyRule(state, match, start, end) {
let trans = state.tr
let resstart = trans.doc.resolve(start)
let resend = trans.doc.resolve(end)
let span = new NodeRange(resstart, resend, 1)
// In order to insert my org_property, it needs to fit in the document.
// insertPoint says I should insert at (start - 1).
let whereinsert = insertPoint(trans.doc, start, state.schema.nodes.org_property)
let find = findWrapping(span, state.schema.nodes.org_property, {}) // Returns NULL.
trans.wrap(span, [{type: state.schema.nodes.org_property, attrs: {}}]) // This seems to fail... since we can't find an appropriate wrapping.
return trans;
}
At this point, wrap()
will fail because we can’t find an appropriate place to insert this within the range.
My initial thought was that we can’t insert it because I require two paragraphs, so I attempted to split the current node with the split() function, to no avail.
Currently, I get an error reporting that I have Invalid content for node paragraph
. I’m using the paragraph definition from the example-setup. I think this makes sense because the content of a paragraph is “inline*”. I don’t actually want to be inserting inside the paragraph… but rather wrap the paragraph node instead.
I notice that insertPoint()
reports that I should be inserting a org_property just one position before the start of the match
, but any time I try to wrap outside of the original start
and end
positions, I usually get an undefined error.
Does anyone have any advise on how I would go about wrapping the paragraphs with my custom node?