@atlaskit/renderer
Version:
Renderer component
101 lines • 3.35 kB
JavaScript
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