diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/generate/template.js | 5 | ||||
-rw-r--r-- | lib/parse/page.js | 11 | ||||
-rw-r--r-- | lib/parse/renderer.js | 18 |
3 files changed, 27 insertions, 7 deletions
diff --git a/lib/generate/template.js b/lib/generate/template.js index 3edd4da..7e59443 100644 --- a/lib/generate/template.js +++ b/lib/generate/template.js @@ -38,7 +38,10 @@ var initTemplate = function(options) { // Parse sections .then(function(markdown) { - return parse.page(markdown); + return parse.page(markdown, { + repo: options.locals.githubId, + dir: path.dirname(_input) || '/' + }); }) //Calcul template diff --git a/lib/parse/page.js b/lib/parse/page.js index 505d70f..937d84e 100644 --- a/lib/parse/page.js +++ b/lib/parse/page.js @@ -46,19 +46,22 @@ function sectionType(nodes, idx) { } // Render a section using our custom renderer -function render(section) { +function render(section, _options) { // 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() + renderer: renderer(null, _options) }); return marked.parser(section, options); } -function parsePage(src) { +function parsePage(src, options) { + options = options || {}; + + // Lex file var nodes = marked.lexer(src); return _.chain(splitSections(nodes)) @@ -113,7 +116,7 @@ function parsePage(src) { return { id: id, type: section.type, - content: render(section) + content: render(section, options) }; }) .value(); diff --git a/lib/parse/renderer.js b/lib/parse/renderer.js index 4b5c945..64c5602 100644 --- a/lib/parse/renderer.js +++ b/lib/parse/renderer.js @@ -1,14 +1,18 @@ var url = require('url'); var inherits = require('util').inherits; +var path = require('path'); + var marked = require('marked'); -function GitBookRenderer(options) { +function GitBookRenderer(options, extra_options) { if(!(this instanceof GitBookRenderer)) { - return new GitBookRenderer(options); + return new GitBookRenderer(options, extra_options); } GitBookRenderer.super_.call(this, options); + + this._extra_options = extra_options; } inherits(GitBookRenderer, marked.Renderer); @@ -39,6 +43,16 @@ GitBookRenderer.prototype.link = function(href, title, text) { // Parsed version of the url var parsed = url.parse(href); + var o = this._extra_options; + // Relative link, rewrite it to point to github repo + if(parsed.path[0] != '/' && o && o.repo && o.dir) { + href = 'https://github.com/' + o.repo + '/blob' + path.normalize(path.join( + '/', + o.dir, + href + )); + parsed = url.parse(href); + } // Generate HTML for link var out = '<a href="' + href + '"'; |