UNPKG

@atlaskit/renderer

Version:
101 lines 3.35 kB
var HARDBREAK_NODE_TYPE = 'hardBreak'; var IGNORE_NODE_TYPES = [ 'bulletList', 'orderedList', 'heading', 'rule', 'panel', 'table', ]; var getText = function (node) { return node.type.name === HARDBREAK_NODE_TYPE ? '\n' : node.attrs.text || node.attrs.shortName || node.text; }; var reduceTree = function (fragment) { var fragmentContainsInlineNodes = false; var textChunks = ''; var childrenChunks = []; var prevNodeType; fragment.forEach(function (node) { fragmentContainsInlineNodes = fragmentContainsInlineNodes || node.isInline; if (fragmentContainsInlineNodes) { if (prevNodeType === HARDBREAK_NODE_TYPE && node.type.name === HARDBREAK_NODE_TYPE) { // pass: ignore multiple hardBreaks } else { textChunks += getText(node); } } else { if (IGNORE_NODE_TYPES.indexOf(node.type.name) !== -1) { // pass: ignore these nodes } else if (!node.childCount) { if (node.type.name !== 'paragraph') { childrenChunks.push({ text: getText(node) }); } else { // pass: ignore empty paragraphs } } else if (node.type.name === 'mediaGroup') { // count children which are media files // ignore card links var childMediaFilesCount_1 = 0; node.content.forEach(function (childNode) { if (childNode.attrs.type === 'file') { childMediaFilesCount_1 += 1; } }); if (childMediaFilesCount_1) { var postfix = childMediaFilesCount_1 > 1 ? 'Files' : 'File'; childrenChunks.push({ text: "\uD83D\uDCCE " + childMediaFilesCount_1 + " " + postfix, }); } } else if (node.type.name === 'blockquote') { childrenChunks.push({ content: reduceTree(node.content), text: '> ', }); } else { childrenChunks.push({ content: reduceTree(node.content) }); } } prevNodeType = node.type.name; }); return fragmentContainsInlineNodes ? [{ text: textChunks }] : childrenChunks; }; var serializeTree = function (node) { if (node.content) { return node.content .map(function (childNode) { return (node.text || '') + serializeTree(childNode); }) .join('\n'); } return node.text; }; var serializeFragment = function (fragment) { var tree = { content: reduceTree(fragment) }; return serializeTree(tree); }; var TextSerializer = /** @class */ (function () { function TextSerializer() { } TextSerializer.prototype.serializeFragment = function (fragment) { return serializeFragment(fragment); }; TextSerializer.fromSchema = function (schema) { return new TextSerializer(); }; return TextSerializer; }()); export default TextSerializer; //# sourceMappingURL=index.js.map