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:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user