From 138dc1f2dea9d32241ee5e8f2c655613cdc168bb Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Mon, 31 Mar 2014 18:15:05 -0700 Subject: [PATCH] Add target _blank support in renderer for external links --- lib/parse/renderer.js | 47 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/lib/parse/renderer.js b/lib/parse/renderer.js index 66aad46b9..4b5c945a4 100644 --- a/lib/parse/renderer.js +++ b/lib/parse/renderer.js @@ -1,3 +1,4 @@ +var url = require('url'); var inherits = require('util').inherits; var marked = require('marked'); @@ -11,17 +12,47 @@ function GitBookRenderer(options) { } inherits(GitBookRenderer, marked.Renderer); +GitBookRenderer.prototype._unsanitized = function(href) { + var prot = ''; + try { + prot = decodeURIComponent(unescape(href)) + .replace(/[^\w:]/g, '') + .toLowerCase(); -GitBookRenderer.prototype.link = function(href, title, text) { - // Replace .md extensions by .html - return GitBookRenderer.super_.prototype.link.call( - this, - href.replace(/\.md$/, '.html'), - title, - text - ); + } catch (e) { + return true; + } + + if(prot.indexOf('javascript:') === 0) { + return true; + } + + return false; }; +GitBookRenderer.prototype.link = function(href, title, text) { + // Don't build if it looks malicious + if (this.options.sanitize && this._unsanitized(href)) { + return ''; + } + + // Parsed version of the url + var parsed = url.parse(href); + + + // Generate HTML for link + var out = ''; + return out; +}; // Exports module.exports = GitBookRenderer;