diff options
author | Samy Pessé <samypesse@gmail.com> | 2015-01-27 21:39:41 +0100 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2015-01-27 21:39:41 +0100 |
commit | cf12d090928907bb82c9f1796b642cbef9b42640 (patch) | |
tree | b229ff036508d52cbc8c9b50614c99f8ee8d0c65 /lib/template.js | |
parent | 8e18adbe4cd64b8d6baf63627cba4109774fc7e5 (diff) | |
download | gitbook-cf12d090928907bb82c9f1796b642cbef9b42640.zip gitbook-cf12d090928907bb82c9f1796b642cbef9b42640.tar.gz gitbook-cf12d090928907bb82c9f1796b642cbef9b42640.tar.bz2 |
Complete parsing of blocks from plugin extensions
Diffstat (limited to 'lib/template.js')
-rw-r--r-- | lib/template.js | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/lib/template.js b/lib/template.js index e57ef1b..ac7bc3e 100644 --- a/lib/template.js +++ b/lib/template.js @@ -113,8 +113,8 @@ TemplateEngine.prototype.addBlock = function(name, block) { var args = parser.parseSignature(null, true); parser.advanceAfterBlockEnd(tok.value); - console.log("start parsing", allBlocks); while (1) { + // Read body var currentBody = parser.parseUntilBlocks.apply(parser, allBlocks); // Handle body with previous block name and args @@ -128,29 +128,49 @@ TemplateEngine.prototype.addBlock = function(name, block) { body = currentBody; } - var tok = parser.peekToken(); - lastBlockName = tok.value; + // Read new block + lastBlockName = parser.peekToken().value; if (lastBlockName == block.end) { - console.log("finish!"); break; } + // Parse signature and move to the end of the block lastBlockArgs = parser.parseSignature(null, true); parser.advanceAfterBlockEnd(lastBlockName); - - console.log(" -> keep going"); } - - console.log(body, subbodies); parser.advanceAfterBlockEnd(); - return new nodes.CallExtensionAsync(this, 'run', args, [body]); + var bodies = [body]; + _.each(block.blocks, function(blockName) { + subbodies[blockName] = subbodies[blockName] || []; + if (subbodies[blockName].length == 0) { + subbodies[blockName].push({ + args: new nodes.NodeList(), + body: new nodes.NodeList() + }); + } + + bodies.push(subbodies[blockName][0].body); + }); + + return new nodes.CallExtensionAsync(this, 'run', args, bodies); }; this.run = function(context) { var args = Array.prototype.slice.call(arguments, 1); var callback = args.pop(); - var bodies = {} //args.pop(); + + // Extract blocks body + var _blocks = _.chain(block.blocks) + .reverse() + .map(function(blockName){ + return { + name: blockName, + body: args.pop()() + }; + }) + .value(); + var body = args.pop(); var kwargs = args.pop() || {}; @@ -163,7 +183,7 @@ TemplateEngine.prototype.addBlock = function(name, block) { body: body(), args: args, kwargs: kwargs, - bodies: bodies + blocks: _blocks }); }) .nodeify(callback) |