From b6ecaa91972d48dd936d01d888ddc893f245c20e Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Mon, 25 Jul 2016 20:20:45 -0400 Subject: [PATCH 1/3] Switch from marked to markdown-it markdown renderer --- bower.json | 2 +- realms/__init__.py | 2 +- realms/static/js/mdr.js | 40 +++++++++++++++++++--------------------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/bower.json b/bower.json index 5cc6524..48f1e22 100644 --- a/bower.json +++ b/bower.json @@ -10,7 +10,7 @@ "keymaster": "madrobby/keymaster", "ace-builds": "~1.2.3", "parsleyjs": "~2.3.10", - "marked": "~0.3.2", + "markdown-it": "~7.0.0", "js-yaml": "~3.6.0", "store-js": "~1.3.16", "bootswatch-dist": "3.3.6-flatly", diff --git a/realms/__init__.py b/realms/__init__.py index 8c4c571..c8183c7 100644 --- a/realms/__init__.py +++ b/realms/__init__.py @@ -231,7 +231,7 @@ assets.register('main.js', 'vendor/components-bootstrap/js/bootstrap.js', 'vendor/handlebars/handlebars.js', 'vendor/js-yaml/dist/js-yaml.js', - 'vendor/marked/lib/marked.js', + 'vendor/markdown-it/dist/markdown-it.js', 'js/html-sanitizer-minified.js', # don't minify? 'vendor/highlightjs/highlight.pack.js', 'vendor/parsleyjs/dist/parsley.js', diff --git a/realms/static/js/mdr.js b/realms/static/js/mdr.js index 445b425..b3e2b2d 100644 --- a/realms/static/js/mdr.js +++ b/realms/static/js/mdr.js @@ -38,15 +38,19 @@ var metaMarked = function(src, opt, callback) { } }; -marked.setOptions({ - renderer: new marked.Renderer(), - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: false, - smartLists: true, - smartypants: false +var markdownit = window.markdownit({ + html: true, + linkify: true, + highlight: function (str, lang) { + if (lang && hljs.getLanguage(lang)) { + try { + return hljs.highlight(lang, str).value; + } catch (__) { + } + } + + return ''; // use external default escaping + } }); // Markdown Renderer @@ -54,9 +58,8 @@ var MDR = { meta: null, md: null, sanitize: true, // Override - renderer: new marked.Renderer(), parse: function(md){ - return marked(md, { renderer: this.renderer }); + return markdownit.render(md); }, convert: function(md, sanitize) { if (this.sanitize !== null) { @@ -108,13 +111,8 @@ var MDR = { } }; -MDR.renderer.table = function(header, body) { - return '\n' - + '\n' - + header - + '\n' - + '\n' - + body - + '\n' - + '
\n'; -}; \ No newline at end of file +// Add some custom classes to table tags +markdownit.renderer.rules.table_open = function (tokens, idx, options, env, self) { + tokens[idx].attrPush(['class', 'table table-bordered']); + return self.renderToken(tokens, idx, options); +}; From 021de4da786a05e73413eda00ac519f9906641a0 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Mon, 25 Jul 2016 20:59:28 -0400 Subject: [PATCH 2/3] Enable markdown-it typographer option --- realms/static/js/mdr.js | 1 + 1 file changed, 1 insertion(+) diff --git a/realms/static/js/mdr.js b/realms/static/js/mdr.js index b3e2b2d..8de94af 100644 --- a/realms/static/js/mdr.js +++ b/realms/static/js/mdr.js @@ -41,6 +41,7 @@ var metaMarked = function(src, opt, callback) { var markdownit = window.markdownit({ html: true, linkify: true, + typographer: true, highlight: function (str, lang) { if (lang && hljs.getLanguage(lang)) { try { From d2bd13da463f7c24138fe124ea170d8e20101d1d Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Sun, 4 Sep 2016 16:03:16 -0400 Subject: [PATCH 3/3] Add back heading anchors via markdown-it-anchors plugin --- bower.json | 1 + realms/__init__.py | 1 + realms/static/js/mdr.js | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/bower.json b/bower.json index 48f1e22..6eaa945 100644 --- a/bower.json +++ b/bower.json @@ -11,6 +11,7 @@ "ace-builds": "~1.2.3", "parsleyjs": "~2.3.10", "markdown-it": "~7.0.0", + "markdown-it-anchor": "https://wzrd.in/standalone/markdown-it-anchor@2.5.0", "js-yaml": "~3.6.0", "store-js": "~1.3.16", "bootswatch-dist": "3.3.6-flatly", diff --git a/realms/__init__.py b/realms/__init__.py index 79b1eeb..6dee5ae 100644 --- a/realms/__init__.py +++ b/realms/__init__.py @@ -230,6 +230,7 @@ assets.register('main.js', 'vendor/handlebars/handlebars.js', 'vendor/js-yaml/dist/js-yaml.js', 'vendor/markdown-it/dist/markdown-it.js', + 'vendor/markdown-it-anchor/index.0', 'js/html-sanitizer-minified.js', # don't minify? 'vendor/highlightjs/highlight.pack.js', 'vendor/parsleyjs/dist/parsley.js', diff --git a/realms/static/js/mdr.js b/realms/static/js/mdr.js index 8de94af..a776496 100644 --- a/realms/static/js/mdr.js +++ b/realms/static/js/mdr.js @@ -52,6 +52,14 @@ var markdownit = window.markdownit({ return ''; // use external default escaping } +}).use(markdownItAnchor, { + level: 1, + // slugify: string => string, + permalink: false, + // renderPermalink: (slug, opts, state, permalink) => {}, + permalinkClass: 'header-anchor', + permalinkSymbol: 'ΒΆ', + permalinkBefore: false }); // Markdown Renderer