html-to-article-json
Version:
Converting HTML to article-json
76 lines (61 loc) • 1.96 kB
JavaScript
;
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);
}
});
};
};