diff --git a/lib/posthtml-render.js b/lib/posthtml-render.js index 4d1ca04..d528564 100644 --- a/lib/posthtml-render.js +++ b/lib/posthtml-render.js @@ -52,6 +52,13 @@ function postHTMLRender(tree, options) { typeof node.content !== 'object' && (buf += node.content); return node.content; } + + // treat as new root tree if node is an array + if (Array.isArray(node)) { + buf += html(node); + return; + } + var tag = node.tag || 'div'; if (singleTags[tag]) { buf += '<'+ tag + attrs(node.attrs); diff --git a/posthtml-render.min.js b/posthtml-render.min.js index 0ebfde8..d5b2699 100644 --- a/posthtml-render.min.js +++ b/posthtml-render.min.js @@ -1 +1 @@ -!function(global){function postHTMLRender(tree,options){function html(tree){function attrs(obj){var attr="";for(var key in obj)obj[key]&&"string"==typeof obj[key]||"number"==typeof obj[key]?attr+=" "+key+'="'+obj[key]+'"':(""===obj[key]||"boolean"==typeof obj[key]&&obj[key])&&(attr+=" "+key);return attr}var buf="";return traverse([].concat(tree),function(node){if(node){if("string"==typeof node||"number"==typeof node)return void(buf+=node);if("boolean"==typeof node.tag&&!node.tag)return"object"!=typeof node.content&&(buf+=node.content),node.content;var tag=node.tag||"div";if(singleTags[tag])switch(buf+="<"+tag+attrs(node.attrs),closingSingleTag){case"slash":buf+=" />";break;case"tag":buf+=">";break;default:buf+=">"}else buf+="<"+tag+(node.attrs?attrs(node.attrs):"")+">"+(node.content?html(node.content):"")+""}}),buf}options=options||{};for(var optSingleTags=options.singleTags,closingSingleTag=options.closingSingleTag,SINGLE_TAGS=["area","base","br","col","command","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],singleTags={},i=0,leni=SINGLE_TAGS.length;leni>i;i++)singleTags[SINGLE_TAGS[i]]=1;if(optSingleTags)for(var j=0,lenj=optSingleTags.length;lenj>j;j++)singleTags[optSingleTags[j]]=1;return html(tree)}function traverse(tree,cb){if(Array.isArray(tree))for(var i=0,len=tree.length;len>i;i++)tree[i]=traverse(cb(tree[i]),cb);else"object"==typeof tree&&tree.hasOwnProperty("content")&&traverse(tree.content,cb);return tree}var defineAsGlobal=!0;"object"==typeof module&&"object"==typeof module.exports&&(module.exports=postHTMLRender,defineAsGlobal=!1),"object"==typeof modules&&"function"==typeof modules.define&&(modules.define("postHTMLRender",function(provide){provide(postHTMLRender)}),defineAsGlobal=!1),"function"==typeof define&&(define(function(require,exports,module){module.exports=postHTMLRender}),defineAsGlobal=!1),defineAsGlobal&&(global.postHTMLRender=postHTMLRender)}("undefined"!=typeof window?window:global); \ No newline at end of file +!function(global){function postHTMLRender(tree,options){function html(tree){function attrs(obj){var attr="";for(var key in obj)obj[key]&&"string"==typeof obj[key]||"number"==typeof obj[key]?attr+=" "+key+'="'+obj[key]+'"':(""===obj[key]||"boolean"==typeof obj[key]&&obj[key])&&(attr+=" "+key);return attr}var buf="";return traverse([].concat(tree),function(node){if(node){if("string"==typeof node||"number"==typeof node)return void(buf+=node);if("boolean"==typeof node.tag&&!node.tag)return"object"!=typeof node.content&&(buf+=node.content),node.content;if(Array.isArray(node))return void(buf+=html(node));var tag=node.tag||"div";if(singleTags[tag])switch(buf+="<"+tag+attrs(node.attrs),closingSingleTag){case"slash":buf+=" />";break;case"tag":buf+=">";break;default:buf+=">"}else buf+="<"+tag+(node.attrs?attrs(node.attrs):"")+">"+(node.content?html(node.content):"")+""}}),buf}options=options||{};for(var optSingleTags=options.singleTags,closingSingleTag=options.closingSingleTag,SINGLE_TAGS=["area","base","br","col","command","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],singleTags={},i=0,leni=SINGLE_TAGS.length;leni>i;i++)singleTags[SINGLE_TAGS[i]]=1;if(optSingleTags)for(var j=0,lenj=optSingleTags.length;lenj>j;j++)singleTags[optSingleTags[j]]=1;return html(tree)}function traverse(tree,cb){if(Array.isArray(tree))for(var i=0,len=tree.length;len>i;i++)tree[i]=traverse(cb(tree[i]),cb);else"object"==typeof tree&&tree.hasOwnProperty("content")&&traverse(tree.content,cb);return tree}var defineAsGlobal=!0;"object"==typeof module&&"object"==typeof module.exports&&(module.exports=postHTMLRender,defineAsGlobal=!1),"object"==typeof modules&&"function"==typeof modules.define&&(modules.define("postHTMLRender",function(provide){provide(postHTMLRender)}),defineAsGlobal=!1),"function"==typeof define&&(define(function(require,exports,module){module.exports=postHTMLRender}),defineAsGlobal=!1),defineAsGlobal&&(global.postHTMLRender=postHTMLRender)}("undefined"!=typeof window?window:global); \ No newline at end of file diff --git a/test/test.js b/test/test.js index e2a2bc4..25b6e7c 100644 --- a/test/test.js +++ b/test/test.js @@ -31,6 +31,16 @@ describe('PostHTML-Render test', function() { expect(render({ content: [555] })).to.eql('
555
'); }); + it('node array in content', function () { + expect(render({content: [ + [ + 555, + {tag: 'div', content: 666}, + 777 + ] + ]})).to.eql('
555
666
777
') + }) + it('string node', function() { expect(render(['Hello world!'])).to.eql('Hello world!'); });