From ab7a9e7da745b407a25fff62879a834359f18bcc Mon Sep 17 00:00:00 2001 From: AlexxNB Date: Sun, 14 Apr 2019 12:28:07 +0300 Subject: [PATCH] add link_renderer to handle external links --- site/src/routes/blog/_posts.js | 4 +++- site/src/routes/docs/_sections.js | 4 +++- site/src/routes/tutorial/[slug]/index.json.js | 4 +++- site/src/utils/markdown.js | 17 +++++++++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/site/src/routes/blog/_posts.js b/site/src/routes/blog/_posts.js index 3b6ec37dab..fc2bed469a 100644 --- a/site/src/routes/blog/_posts.js +++ b/site/src/routes/blog/_posts.js @@ -1,6 +1,6 @@ import fs from 'fs'; import path from 'path'; -import { extract_frontmatter, langs } from '../../utils/markdown.js'; +import { extract_frontmatter, langs, link_renderer } from '../../utils/markdown.js'; import marked from 'marked'; import PrismJS from 'prismjs'; import 'prismjs/components/prism-bash'; @@ -20,6 +20,8 @@ export default function() { const renderer = new marked.Renderer(); + renderer.link = link_renderer; + renderer.code = (source, lang) => { const plang = langs[lang]; const highlighted = PrismJS.highlight( diff --git a/site/src/routes/docs/_sections.js b/site/src/routes/docs/_sections.js index fff450dee5..dbef07357d 100644 --- a/site/src/routes/docs/_sections.js +++ b/site/src/routes/docs/_sections.js @@ -1,6 +1,6 @@ import fs from 'fs'; import path from 'path'; -import { extract_frontmatter, extract_metadata, langs } from '../../utils/markdown.js'; +import { extract_frontmatter, extract_metadata, langs, link_renderer } from '../../utils/markdown.js'; import marked from 'marked'; import PrismJS from 'prismjs'; import 'prismjs/components/prism-bash'; @@ -50,6 +50,8 @@ export default function() { let block_open = false; + renderer.link = link_renderer; + renderer.hr = (...args) => { block_open = true; diff --git a/site/src/routes/tutorial/[slug]/index.json.js b/site/src/routes/tutorial/[slug]/index.json.js index a44685530d..7076ce1170 100644 --- a/site/src/routes/tutorial/[slug]/index.json.js +++ b/site/src/routes/tutorial/[slug]/index.json.js @@ -2,7 +2,7 @@ import * as fs from 'fs'; import * as path from 'path'; import marked from 'marked'; import PrismJS from 'prismjs'; -import { extract_frontmatter, extract_metadata, langs } from '../../../utils/markdown'; +import { extract_frontmatter, extract_metadata, langs, link_renderer } from '../../../utils/markdown'; const cache = new Map(); @@ -33,6 +33,8 @@ function get_tutorial(slug) { const renderer = new marked.Renderer(); + renderer.link = link_renderer; + renderer.code = (source, lang) => { source = source.replace(/^ +/gm, match => match.split(' ').join('\t') diff --git a/site/src/utils/markdown.js b/site/src/utils/markdown.js index ea0f7d0b2a..e1021664c3 100644 --- a/site/src/utils/markdown.js +++ b/site/src/utils/markdown.js @@ -42,3 +42,20 @@ export const langs = { js: 'javascript', css: 'css' }; + + +// links renderer +export function link_renderer(href,title,text) { + let target_attr = ''; + let title_attr = ''; + + if(href.startsWith("http")) { + target_attr = ' target="_blank"'; + } + + if(title !== null) { + title_attr = ` title="${title}"`; + } + + return `${text}`; +}; \ No newline at end of file