diff --git a/lib/utils/pipes.ts b/lib/utils/pipes.ts
index ab09fbb8..425ce7ce 100644
--- a/lib/utils/pipes.ts
+++ b/lib/utils/pipes.ts
@@ -1,27 +1,27 @@
'use strict';
import { Pipe, PipeTransform } from '@angular/core';
+import { DomSanitizationService } from '@angular/platform-browser';
import { isString, stringify, isBlank } from '@angular/core/src/facade/lang';
import { BaseException } from '@angular/core/src/facade/exceptions';
import JsonPointer from './JsonPointer';
declare var Prism: any;
-import marked from 'marked';
+import Remarkable from 'remarkable';
-// in gfm mode marked doesn't parse #Heading (without space after #) as heading
-// https://github.com/chjj/marked/issues/642
-marked['Lexer'].rules.gfm.heading = marked['Lexer'].rules.normal.heading;
-marked['Lexer'].rules.tables.heading = marked['Lexer'].rules.normal.heading;
-
-marked.setOptions({
- renderer: new marked.Renderer(),
- gfm: true,
- tables: true,
+const md = new Remarkable({
+ html: true,
+ linkify: true,
breaks: false,
- pedantic: false,
- smartLists: true,
- smartypants: false
+ typographer: false,
+ highlight: (str, lang) => {
+ if (lang === 'json') lang = 'js';
+ let grammar = Prism.languages[lang];
+ //fallback to clike
+ if (!grammar) return str;
+ return Prism.highlight(str, grammar);
+ }
});
class InvalidPipeArgumentException extends BaseException {
@@ -65,12 +65,16 @@ export class JsonPointerEscapePipe implements PipeTransform {
@Pipe({ name: 'marked' })
export class MarkedPipe implements PipeTransform {
+ constructor(private sanitizer: DomSanitizationService) {}
transform(value) {
if (isBlank(value)) return value;
if (!isString(value)) {
throw new InvalidPipeArgumentException(JsonPointerEscapePipe, value);
}
- return `${marked(value)}`;
+
+ return this.sanitizer.bypassSecurityTrustHtml(
+ `${md.render(value)}`
+ );
}
}
@@ -84,6 +88,7 @@ const langMap = {
@Pipe({ name: 'prism' })
export class PrismPipe implements PipeTransform {
+ constructor(private sanitizer: DomSanitizationService) {}
transform(value, args) {
if (isBlank(args) || args.length === 0) {
throw new BaseException('Prism pipe requires one argument');
@@ -98,7 +103,7 @@ export class PrismPipe implements PipeTransform {
let grammar = Prism.languages[lang];
//fallback to clike
if (!grammar) grammar = Prism.languages.clike;
- return Prism.highlight(value, grammar);
+ return this.sanitizer.bypassSecurityTrustHtml(Prism.highlight(value, grammar));
}
}
diff --git a/package.json b/package.json
index 8a6c87f4..34f355c7 100644
--- a/package.json
+++ b/package.json
@@ -43,9 +43,9 @@
"json": "github:systemjs/plugin-json@^0.1.0",
"json-pointer": "npm:json-pointer@^0.3.0",
"json-schema-ref-parser": "npm:json-schema-ref-parser@^3.1.2",
- "marked": "npm:marked@^0.3.5",
"openapi-sampler": "npm:openapi-sampler@0.2.0",
"prismjs": "npm:prismjs@^1.3.0",
+ "remarkable": "npm:remarkable@^1.6.2",
"rxjs": "npm:rxjs@5.0.0-beta.6",
"scrollparent": "npm:scrollparent@^0.1.0",
"stream-http": "npm:stream-http@^2.3.0",
@@ -121,13 +121,13 @@
"karma-regex-preprocessor": "github:makern/karma-regex-preprocessor",
"karma-should": "^1.0.0",
"karma-sinon": "^1.0.4",
- "marked": "^0.3.5",
"node-sass": "^3.7.0",
"openapi-sampler": "^0.2.0",
"phantomjs-prebuilt": "^2.1.7",
"protractor": "^3.0.0",
"reflect-metadata": "^0.1.2",
"remap-istanbul": "^0.6.4",
+ "remarkable": "^1.6.2",
"require-dir": "^0.3.0",
"rollup-plugin-commonjs": "^2.2.1",
"run-sequence": "^1.1.5",
diff --git a/system.config.js b/system.config.js
index 7b7378b2..0a670a43 100644
--- a/system.config.js
+++ b/system.config.js
@@ -33,9 +33,9 @@ System.config({
"json-formatter-js": "npm:json-formatter-js@0.2.0",
"json-pointer": "npm:json-pointer@0.3.0",
"json-schema-ref-parser": "npm:json-schema-ref-parser@3.1.2",
- "marked": "npm:marked@0.3.5",
"openapi-sampler": "npm:openapi-sampler@0.2.0",
"prismjs": "npm:prismjs@1.3.0",
+ "remarkable": "npm:remarkable@1.6.2",
"rxjs": "npm:rxjs@5.0.0-beta.6",
"scrollparent": "npm:scrollparent@0.1.0",
"stream-http": "npm:stream-http@2.3.0",
@@ -148,6 +148,15 @@ System.config({
"path": "github:jspm/nodelibs-path@0.1.0",
"process": "github:jspm/nodelibs-process@0.1.2"
},
+ "npm:argparse@0.1.16": {
+ "assert": "github:jspm/nodelibs-assert@0.1.0",
+ "fs": "github:jspm/nodelibs-fs@0.1.2",
+ "path": "github:jspm/nodelibs-path@0.1.0",
+ "process": "github:jspm/nodelibs-process@0.1.2",
+ "underscore": "npm:underscore@1.7.0",
+ "underscore.string": "npm:underscore.string@2.4.0",
+ "util": "github:jspm/nodelibs-util@0.1.0"
+ },
"npm:argparse@1.0.7": {
"fs": "github:jspm/nodelibs-fs@0.1.2",
"path": "github:jspm/nodelibs-path@0.1.0",
@@ -193,6 +202,10 @@ System.config({
"npm:async@1.5.2": {
"process": "github:jspm/nodelibs-process@0.1.2"
},
+ "npm:autolinker@0.15.3": {
+ "child_process": "github:jspm/nodelibs-child_process@0.1.0",
+ "process": "github:jspm/nodelibs-process@0.1.2"
+ },
"npm:aws-sign2@0.6.0": {
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
"url": "github:jspm/nodelibs-url@0.1.0"
@@ -743,6 +756,16 @@ System.config({
"string_decoder": "npm:string_decoder@0.10.31",
"util-deprecate": "npm:util-deprecate@1.0.2"
},
+ "npm:remarkable@1.6.2": {
+ "argparse": "npm:argparse@0.1.16",
+ "autolinker": "npm:autolinker@0.15.3",
+ "buffer": "github:jspm/nodelibs-buffer@0.1.0",
+ "fs": "github:jspm/nodelibs-fs@0.1.2",
+ "path": "github:jspm/nodelibs-path@0.1.0",
+ "process": "github:jspm/nodelibs-process@0.1.2",
+ "systemjs-json": "github:systemjs/plugin-json@0.1.2",
+ "util": "github:jspm/nodelibs-util@0.1.0"
+ },
"npm:request@2.72.0": {
"aws-sign2": "npm:aws-sign2@0.6.0",
"aws4": "npm:aws4@1.4.1",
diff --git a/typings/marked.d.ts b/typings/marked.d.ts
deleted file mode 100644
index be77f66a..00000000
--- a/typings/marked.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-// Generated by typings
-// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/json-pointer/json-pointer.d.ts
-
-declare module "marked" {
- var x: any;
- export default x;
-}
\ No newline at end of file
diff --git a/typings/remarkable.d.ts b/typings/remarkable.d.ts
new file mode 100644
index 00000000..ee3c03b4
--- /dev/null
+++ b/typings/remarkable.d.ts
@@ -0,0 +1,4 @@
+declare module 'remarkable' {
+ var x: any;
+ export default x;
+}