diff options
author | Aaron O'Mullan <aaron.omullan@friendco.de> | 2014-03-31 14:59:58 -0700 |
---|---|---|
committer | Aaron O'Mullan <aaron.omullan@friendco.de> | 2014-03-31 15:00:03 -0700 |
commit | 8e22d80c7c4ba34aab39d645a57e2f70b666fdb7 (patch) | |
tree | 20556d1cd4ee9ff4ce80ae2162462bdacc60e5b6 | |
parent | 82b99189b1358424a9c2a622351961caa35cb764 (diff) | |
download | gitbook-8e22d80c7c4ba34aab39d645a57e2f70b666fdb7.zip gitbook-8e22d80c7c4ba34aab39d645a57e2f70b666fdb7.tar.gz gitbook-8e22d80c7c4ba34aab39d645a57e2f70b666fdb7.tar.bz2 |
Add content & code generation for exercise sections
-rw-r--r-- | lib/parse/page.js | 37 | ||||
-rw-r--r-- | test/page.js | 9 |
2 files changed, 36 insertions, 10 deletions
diff --git a/lib/parse/page.js b/lib/parse/page.js index 79f5e7e..7c188eb 100644 --- a/lib/parse/page.js +++ b/lib/parse/page.js @@ -33,6 +33,19 @@ function sectionType(nodes, idx) { return 'normal'; } +// Render a section using our custom renderer +function render(section) { + // marked's Render expects this, we don't use it yet + section.links = {}; + + // Build options using defaults and our custom renderer + var options = _.extend({}, marked.defaults, { + renderer: renderer() + }); + + return marked.parser(section, options); +} + function parsePage(src) { var nodes = marked.lexer(src); @@ -45,23 +58,29 @@ function parsePage(src) { .map(function(section) { // Transform given type if(section.type === 'exercise') { + var nonCodeNodes = _.reject(section, { + 'type': 'code' + }); + + var codeNodes = _.filter(section, { + 'type': 'code' + }); + return { type: section.type, + content: render(nonCodeNodes), + code: { + base: codeNodes[0].text, + solution: codeNodes[1].text, + validation: codeNodes[2].text, + } }; } - // marked's Render expects this, we don't use it yet - section.links = {}; - - // Build options using defaults and our custom renderer - var options = _.extend({}, marked.defaults, { - renderer: renderer() - }); - // Render normal pages return { type: section.type, - content: marked.parser(section, options) + content: render(section) }; }) .value(); diff --git a/test/page.js b/test/page.js index 831d8b1..082cda6 100644 --- a/test/page.js +++ b/test/page.js @@ -21,7 +21,14 @@ describe('Page parsing', function() { it('should gen content for normal sections', function() { assert(LEXED[0].content); - assert(!LEXED[1].content); assert(LEXED[2].content); }); + + it('should gen code and content for exercise sections', function() { + assert(LEXED[1].content); + assert(LEXED[1].code); + assert(LEXED[1].code.base); + assert(LEXED[1].code.solution); + assert(LEXED[1].code.validation); + }); }); |