@atlaskit/renderer
Version:
Renderer component
47 lines (46 loc) • 1.78 kB
JavaScript
export function markBlockAsInline({
nodes,
onMark,
parentPos,
shouldDisplayExtensionAsInline
}) {
if (!nodes || nodes.length === 0 || nodes[0].isInline) {
return;
}
function isInlineBodiedExtension(node) {
var _node$attrs, _node$attrs2, _node$attrs3, _node$attrs4;
return Boolean((node === null || node === void 0 ? void 0 : node.type.name) === 'bodiedExtension' && shouldDisplayExtensionAsInline({
type: node.type.name,
extensionKey: (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.extensionKey,
extensionType: (_node$attrs2 = node.attrs) === null || _node$attrs2 === void 0 ? void 0 : _node$attrs2.extensionType,
parameters: (_node$attrs3 = node.attrs) === null || _node$attrs3 === void 0 ? void 0 : _node$attrs3.parameters,
content: node.content,
localId: (_node$attrs4 = node.attrs) === null || _node$attrs4 === void 0 ? void 0 : _node$attrs4.localId
}));
}
try {
let prevPos = parentPos;
let pos = parentPos;
let prevTextBlockType;
for (const [index, node] of nodes.entries()) {
const prevNode = nodes[index - 1];
// textblock + inlinedBodiedExtension
if (prevNode !== null && prevNode !== void 0 && prevNode.isTextblock && isInlineBodiedExtension(node)) {
onMark({
pos: prevPos
});
}
// inlinedBodiedExtension + textblock
else if (isInlineBodiedExtension(prevNode) && node.isTextblock && (!prevTextBlockType || node.type === prevTextBlockType)) {
onMark({
pos
});
}
if (!isInlineBodiedExtension(node)) {
prevTextBlockType = node.isTextblock ? node.type : undefined;
}
prevPos = pos;
pos += node.nodeSize;
}
} catch {}
}