2
0
mirror of https://github.com/tenrok/BBob.git synced 2026-06-17 19:21:20 +03:00

refactor(html): optimize some functions

This commit is contained in:
Nikolay Kostyurin
2018-08-06 02:07:17 +02:00
parent 18ab61bcfc
commit daecfa1c80
+26 -14
View File
@@ -3,16 +3,16 @@ function escapeQuote(value) {
} }
function attrValue(name, value) { function attrValue(name, value) {
if (typeof value === 'boolean' && value) { const type = typeof value;
return `${name}`;
} else if (typeof value === 'number') { const types = {
return `${name}="${value}"`; boolean: () => (value ? `${name}` : ''),
} else if (typeof value === 'string') { number: () => `${name}="${value}"`,
return `${name}="${escapeQuote(value)}"`; string: () => `${name}="${escapeQuote(value)}"`,
} else if (typeof value === 'object') { object: () => `${name}="${escapeQuote(JSON.stringify(value))}"`,
return `${name}="${escapeQuote(JSON.stringify(value))}"`; };
}
return ''; return types[type] ? types[type]() : '';
} }
/** /**
@@ -24,14 +24,24 @@ const attrs = values =>
.reduce((arr, key) => [...arr, attrValue(key, values[key])], ['']) .reduce((arr, key) => [...arr, attrValue(key, values[key])], [''])
.join(' '); .join(' ');
const renderNode = (node) => { const renderNode = (node, { stripTags = false }) => {
if (!node) return ''; if (!node) return '';
const type = typeof node;
if (typeof node === 'string' || typeof node === 'number') { if (type === 'string' || type === 'number') {
return node; return node;
} }
if (typeof node === 'object') { if (type === 'object') {
if (stripTags === true) {
// eslint-disable-next-line no-use-before-define
return renderNodes(node.content);
}
if (node.content === null) {
return `<${node.tag}${attrs(node.attrs)} />`;
}
// eslint-disable-next-line no-use-before-define // eslint-disable-next-line no-use-before-define
return `<${node.tag}${attrs(node.attrs)}>${renderNodes(node.content)}</${node.tag}>`; return `<${node.tag}${attrs(node.attrs)}>${renderNodes(node.content)}</${node.tag}>`;
} }
@@ -44,6 +54,8 @@ const renderNode = (node) => {
return ''; return '';
}; };
const renderNodes = nodes => [].concat(nodes).reduce((r, node) => r + renderNode(node), ''); const renderNodes = (nodes, { stripTags = false } = {}) => []
.concat(nodes)
.reduce((r, node) => r + renderNode(node, { stripTags }), '');
module.exports = renderNodes; module.exports = renderNodes;