summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron O'Mullan <aaron.omullan@friendco.de>2014-03-31 14:59:58 -0700
committerAaron O'Mullan <aaron.omullan@friendco.de>2014-03-31 15:00:03 -0700
commit8e22d80c7c4ba34aab39d645a57e2f70b666fdb7 (patch)
tree20556d1cd4ee9ff4ce80ae2162462bdacc60e5b6
parent82b99189b1358424a9c2a622351961caa35cb764 (diff)
downloadgitbook-8e22d80c7c4ba34aab39d645a57e2f70b666fdb7.zip
gitbook-8e22d80c7c4ba34aab39d645a57e2f70b666fdb7.tar.gz
gitbook-8e22d80c7c4ba34aab39d645a57e2f70b666fdb7.tar.bz2
Add content & code generation for exercise sections
-rw-r--r--lib/parse/page.js37
-rw-r--r--test/page.js9
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);
+ });
});