diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-05-05 11:00:05 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-05-05 11:00:05 +0200 |
commit | 34947b5e207e84ef43a8194c0ec7bac19dccf709 (patch) | |
tree | 06e687700d95590cae678f8bef381e8a62dc0129 /lib/templating/postRender.js | |
parent | c621380b664bcbef087df571b662e7a34e098168 (diff) | |
download | gitbook-34947b5e207e84ef43a8194c0ec7bac19dccf709.zip gitbook-34947b5e207e84ef43a8194c0ec7bac19dccf709.tar.gz gitbook-34947b5e207e84ef43a8194c0ec7bac19dccf709.tar.bz2 |
Add mode TemplateOutput to represent {content + blocks} from template
Diffstat (limited to 'lib/templating/postRender.js')
-rw-r--r-- | lib/templating/postRender.js | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/lib/templating/postRender.js b/lib/templating/postRender.js index c4e82a5..2662814 100644 --- a/lib/templating/postRender.js +++ b/lib/templating/postRender.js @@ -1,5 +1,27 @@ var Promise = require('../utils/promise'); -var replaceBlocks = require('./replaceBlocks'); + + +/** + Replace position markers of blocks by body after processing + This is done to avoid that markdown/asciidoc processer parse the block content + + @param {String} content + @return {Object} {blocks: Set, content: String} +*/ +function replaceBlocks(content, blocks) { + var newContent = content.replace(/\{\{\-\%([\s\S]+?)\%\-\}\}/g, function(match, key) { + var replacedWith = match; + + var block = blocks.get(key); + if (block) { + replacedWith = replaceBlocks(block.get('body'), blocks); + } + + return replacedWith; + }); + + return newContent; +} /** Post render a template: @@ -7,22 +29,25 @@ var replaceBlocks = require('./replaceBlocks'); - Replace block content @param {TemplateEngine} engine - @param {String} content + @param {TemplateOutput} content @return {Promise<String>} */ -function postRender(engine, content) { +function postRender(engine, output) { + var content = output.getContent(); + var blocks = output.getBlocks(); + var result = replaceBlocks(content); - return Promise.forEach(result.blocks, function(blockType) { - var block = engine.getBlock(blockType); - var post = block.getPost(); + return Promise.forEach(blocks, function(block) { + var post = block.get('post'); + if (!post) { return; } return post(); }) - .thenResolve(result.content); + .thenResolve(result); } module.exports = postRender; |