UNPKG

2.42 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@bbob/core'), require('@bbob/plugin-helper')) :
3 typeof define === 'function' && define.amd ? define(['exports', '@bbob/core', '@bbob/plugin-helper'], factory) :
4 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.BbobHtml = {}, global.core, global.pluginHelper));
5})(this, (function (exports, core, pluginHelper) { 'use strict';
6
7 const SELFCLOSE_END_TAG = '/>';
8 const CLOSE_START_TAG = '</';
9 const START_TAG = '<';
10 const END_TAG = '>';
11 const renderNode = (node, { stripTags =false })=>{
12 if (!node) return '';
13 const type = typeof node;
14 if (type === 'string' || type === 'number') {
15 return node;
16 }
17 if (type === 'object') {
18 if (stripTags === true) {
19 // eslint-disable-next-line no-use-before-define
20 return renderNodes(node.content, {
21 stripTags
22 });
23 }
24 if (node.content === null) {
25 return [
26 START_TAG,
27 node.tag,
28 pluginHelper.attrsToString(node.attrs),
29 SELFCLOSE_END_TAG
30 ].join('');
31 }
32 // eslint-disable-next-line no-use-before-define
33 return [
34 START_TAG,
35 node.tag,
36 pluginHelper.attrsToString(node.attrs),
37 END_TAG,
38 renderNodes(node.content),
39 CLOSE_START_TAG,
40 node.tag,
41 END_TAG
42 ].join('');
43 }
44 if (Array.isArray(node)) {
45 // eslint-disable-next-line no-use-before-define
46 return renderNodes(node, {
47 stripTags
48 });
49 }
50 return '';
51 };
52 const renderNodes = (nodes, { stripTags =false } = {})=>[].concat(nodes).reduce((r, node)=>r + renderNode(node, {
53 stripTags
54 }), '');
55 const toHTML = (source, plugins, options)=>core(plugins).process(source, {
56 ...options,
57 render: renderNodes
58 }).html;
59 const render = renderNodes;
60
61 exports.default = toHTML;
62 exports.render = render;
63
64 Object.defineProperty(exports, '__esModule', { value: true });
65
66}));