diff --git a/src/vs/base/browser/htmlContentRenderer.ts b/src/vs/base/browser/htmlContentRenderer.ts
index a7de1cefb84..9062a1fd850 100644
--- a/src/vs/base/browser/htmlContentRenderer.ts
+++ b/src/vs/base/browser/htmlContentRenderer.ts
@@ -7,6 +7,7 @@
import DOM = require('vs/base/browser/dom');
import {IHTMLContentElement} from 'vs/base/common/htmlContent';
+import {marked} from 'vs/base/common/marked/marked';
export type RenderableContent = string | IHTMLContentElement | IHTMLContentElement[];
@@ -18,13 +19,13 @@ export interface RenderOptions {
/**
* Create html nodes for the given content element.
- * formattedText property supports **bold**, __italics__, and [[actions]]
+ *
* @param content a html element description
* @param actionCallback a callback function for any action links in the string. Argument is the zero-based index of the clicked action.
*/
export function renderHtml(content: RenderableContent, options: RenderOptions = {}): Node {
if (typeof content === 'string') {
- return _renderHtml({ text: content }, options);
+ return _renderHtml({ isText: true, text: content }, options);
} else if (Array.isArray(content)) {
return _renderHtml({ children: content }, options);
} else if (content) {
@@ -32,6 +33,11 @@ export function renderHtml(content: RenderableContent, options: RenderOptions =
}
}
+const renderer = new marked.Renderer();
+renderer.link = function(href, title, text): string {
+ return `${text}`
+}
+
function _renderHtml(content: IHTMLContentElement, options: RenderOptions = {}): Node {
let {codeBlockRenderer, actionCallback} = options;
@@ -69,6 +75,15 @@ function _renderHtml(content: IHTMLContentElement, options: RenderOptions = {}):
if (content.formattedText) {
renderFormattedText(element, parseFormattedText(content.formattedText), actionCallback);
}
+ if (content.markdown) {
+ const options = { sanitize: true, tables: false, silent: true, renderer };
+ element.innerHTML = marked(content.markdown, options);
+ DOM.addStandardDisposableListener(element, 'click', (event) => {
+ if (event.target.tagName === 'A') {
+ console.log(event.target, event.target.dataset['href']);
+ }
+ });
+ }
return element;
}
diff --git a/src/vs/base/common/htmlContent.ts b/src/vs/base/common/htmlContent.ts
index 454412240b7..826ca0e709b 100644
--- a/src/vs/base/common/htmlContent.ts
+++ b/src/vs/base/common/htmlContent.ts
@@ -6,6 +6,9 @@
'use strict';
export interface IHTMLContentElement {
+ /**
+ * supports **bold**, __italics__, and [[actions]]
+ */
formattedText?:string;
text?: string;
className?: string;
@@ -13,7 +16,8 @@ export interface IHTMLContentElement {
customStyle?: any;
tagName?: string;
children?: IHTMLContentElement[];
- code?: { language: string; value: string; };
isText?: boolean;
role?: string;
+ markdown?: string;
+ code?: { language: string; value: string; };
}
\ No newline at end of file
diff --git a/src/vs/workbench/api/node/extHostTypeConverters.ts b/src/vs/workbench/api/node/extHostTypeConverters.ts
index 0e38c558af8..ceb6080c1ba 100644
--- a/src/vs/workbench/api/node/extHostTypeConverters.ts
+++ b/src/vs/workbench/api/node/extHostTypeConverters.ts
@@ -126,7 +126,7 @@ export function toViewColumn(position?: EditorPosition): vscode.ViewColumn {
export function fromFormattedString(value: vscode.MarkedString): IHTMLContentElement {
if (typeof value === 'string') {
- return { formattedText: value };
+ return { markdown: value };
} else if (typeof value === 'object') {
return { code: value };
}
@@ -136,8 +136,8 @@ export function toFormattedString(value: IHTMLContentElement): vscode.MarkedStri
if (typeof value.code === 'string') {
return value.code;
}
- let {formattedText, text} = value;
- return formattedText || text || '??>';
+ let {markdown, text} = value;
+ return markdown || text || '??>';
}
function isMarkedStringArr(something: vscode.MarkedString | vscode.MarkedString[]): something is vscode.MarkedString[] {