html-to-article-json
Version:
Converting HTML to article-json
66 lines (51 loc) • 1.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _es6Set = require('es6-set');
var _es6Set2 = _interopRequireDefault(_es6Set);
var _blockElements = require('block-elements');
var _blockElements2 = _interopRequireDefault(_blockElements);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var BLOCK_ELEMENTS = new _es6Set2.default(_blockElements2.default);
var TEXT_ELEMENTS = {
h1: 'header1',
h2: 'header2',
h3: 'header3',
h4: 'header4',
h5: 'header5',
h6: 'header6',
p: 'paragraph',
blockquote: 'blockquote'
};
var isPullQuote = function isPullQuote(elm) {
return elm.classList.contains('q');
};
var createBlockElement = function createBlockElement(type, elm) {
if (type === 'blockquote') {
return {
type: type,
pullQuote: isPullQuote(elm),
children: []
};
} else {
return {
type: type,
children: []
};
}
};
// inject parse to avoid recursive requires
exports.default = function (parse, text) {
return function (elm, textOpts) {
var tagName = elm.tagName.toLowerCase();
if (BLOCK_ELEMENTS.has(tagName)) {
var type = TEXT_ELEMENTS[tagName] || 'block';
var blockElement = createBlockElement(type, elm);
if (elm.childNodes.length) {
parse(elm.childNodes, text(textOpts, elm), blockElement.children);
}
return blockElement;
}
};
};