summaryrefslogtreecommitdiffstats
path: root/lib/templating/postRender.js
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-05-05 11:00:05 +0200
committerSamy Pesse <samypesse@gmail.com>2016-05-05 11:00:05 +0200
commit34947b5e207e84ef43a8194c0ec7bac19dccf709 (patch)
tree06e687700d95590cae678f8bef381e8a62dc0129 /lib/templating/postRender.js
parentc621380b664bcbef087df571b662e7a34e098168 (diff)
downloadgitbook-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.js39
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;