UNPKG

html-to-article-json

Version:
76 lines (61 loc) 1.96 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _textFormattings = require('../text-formattings'); var _textFormattings2 = _interopRequireDefault(_textFormattings); var _generateFunction = require('generate-function'); var _generateFunction2 = _interopRequireDefault(_generateFunction); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var mergeTextNodes = function mergeTextNodes(sameTypeTextNodes, tree) { var textNode = void 0; var merged = []; tree.forEach(function (node) { if (node.type === 'text') { if (textNode) { if (sameTypeTextNodes(textNode, node) && !textNode.mark && !node.mark) { textNode.content = textNode.content + node.content; } else { merged.push(textNode); textNode = node; } } else { textNode = node; } } else { if (textNode) { merged.push(textNode); textNode = null; } merged.push(node); } }); if (textNode) { merged.push(textNode); } return merged; }; var createSameTypeTextNodes = function createSameTypeTextNodes(textFormattings) { var fn = (0, _generateFunction2.default)(); fn = fn('function (nodeA, nodeB) {'); fn = fn('return ' + textFormattings.map(function (row) { return row.property; }).filter(function (property) { return property !== 'content'; }).map(function (property) { return 'nodeA[\'' + property + '\'] === nodeB[\'' + property + '\']'; }).join('&&')); fn = fn('}'); return fn.toFunction(); }; exports.default = function (opts) { var textFormattings = (0, _textFormattings2.default)(opts); var sameTypeTextNodes = createSameTypeTextNodes(textFormattings); return function (tree) { tree.forEach(function (node) { if (node.children) { node.children = mergeTextNodes(sameTypeTextNodes, node.children); } }); }; };