summaryrefslogtreecommitdiffstats
path: root/lib/parse/page.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/parse/page.js')
-rw-r--r--lib/parse/page.js37
1 files changed, 28 insertions, 9 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();