UNPKG

1.66 kBJavaScriptView Raw
1import core from '@bbob/core';
2import { attrsToString } from '@bbob/plugin-helper';
3const SELFCLOSE_END_TAG = '/>';
4const CLOSE_START_TAG = '</';
5const START_TAG = '<';
6const END_TAG = '>';
7const renderNode = (node, { stripTags =false })=>{
8 if (!node) return '';
9 const type = typeof node;
10 if (type === 'string' || type === 'number') {
11 return node;
12 }
13 if (type === 'object') {
14 if (stripTags === true) {
15 // eslint-disable-next-line no-use-before-define
16 return renderNodes(node.content, {
17 stripTags
18 });
19 }
20 if (node.content === null) {
21 return [
22 START_TAG,
23 node.tag,
24 attrsToString(node.attrs),
25 SELFCLOSE_END_TAG
26 ].join('');
27 }
28 // eslint-disable-next-line no-use-before-define
29 return [
30 START_TAG,
31 node.tag,
32 attrsToString(node.attrs),
33 END_TAG,
34 renderNodes(node.content),
35 CLOSE_START_TAG,
36 node.tag,
37 END_TAG
38 ].join('');
39 }
40 if (Array.isArray(node)) {
41 // eslint-disable-next-line no-use-before-define
42 return renderNodes(node, {
43 stripTags
44 });
45 }
46 return '';
47};
48const renderNodes = (nodes, { stripTags =false } = {})=>[].concat(nodes).reduce((r, node)=>r + renderNode(node, {
49 stripTags
50 }), '');
51const toHTML = (source, plugins, options)=>core(plugins).process(source, {
52 ...options,
53 render: renderNodes
54 }).html;
55export const render = renderNodes;
56export default toHTML;