diff --git a/core/server/lib/mobiledoc/cards/_markdown.js b/core/server/lib/mobiledoc/cards/_markdown.js index 7238a89098..433ae494c7 100644 --- a/core/server/lib/mobiledoc/cards/_markdown.js +++ b/core/server/lib/mobiledoc/cards/_markdown.js @@ -9,11 +9,11 @@ module.exports = function markdownCardDefinition() { }, render: function (opts) { - let renderers = require('../renderers'); + let markdownHtmlRenderer = require('@tryghost/kg-markdown-html-renderer'); let payload = opts.payload; let version = opts.options && opts.options.version || 2; // convert markdown to HTML ready for insertion into dom - let html = renderers.markdownHtmlRenderer.render(payload.markdown || ''); + let html = markdownHtmlRenderer.render(payload.markdown || ''); if (!html) { return ''; diff --git a/core/server/lib/mobiledoc/renderers/index.js b/core/server/lib/mobiledoc/renderers/index.js index e430a7287d..1d3fcbe4bc 100644 --- a/core/server/lib/mobiledoc/renderers/index.js +++ b/core/server/lib/mobiledoc/renderers/index.js @@ -1,9 +1,5 @@ module.exports = { get mobiledocHtmlRenderer() { return require('./mobiledoc-html-renderer'); - }, - - get markdownHtmlRenderer() { - return require('./markdown-html-renderer'); } }; diff --git a/core/server/lib/mobiledoc/renderers/markdown-html-renderer.js b/core/server/lib/mobiledoc/renderers/markdown-html-renderer.js deleted file mode 100644 index 5f0bc1bd39..0000000000 --- a/core/server/lib/mobiledoc/renderers/markdown-html-renderer.js +++ /dev/null @@ -1,54 +0,0 @@ -const MarkdownIt = require('markdown-it'); - -const markdownIt = new MarkdownIt({ - html: true, - breaks: true, - linkify: true -}) - .use(require('markdown-it-footnote')) - .use(require('markdown-it-lazy-headers')) - .use(require('markdown-it-mark')) - .use(function namedHeaders(md) { - // match legacy Showdown IDs - const slugify = function (inputString, usedHeaders) { - let slug = inputString.replace(/[^\w]/g, '').toLowerCase(); - if (usedHeaders[slug]) { - usedHeaders[slug] += 1; - slug += usedHeaders[slug]; - } - return slug; - }; - const originalHeadingOpen = md.renderer.rules.heading_open; - - // originally from https://github.com/leff/markdown-it-named-headers - // moved here to avoid pulling in http://stringjs.com dependency - md.renderer.rules.heading_open = function (tokens, idx, something, somethingelse, self) { - const usedHeaders = {}; - - tokens[idx].attrs = tokens[idx].attrs || []; - - const title = tokens[idx + 1].children.reduce(function (acc, t) { - return acc + t.content; - }, ''); - - const slug = slugify(title, usedHeaders); - tokens[idx].attrs.push(['id', slug]); - - if (originalHeadingOpen) { - return originalHeadingOpen.apply(this, arguments); - } else { - return self.renderToken.apply(self, arguments); - } - }; - }); - -// configure linkify-it -markdownIt.linkify.set({ - fuzzyLink: false -}); - -module.exports = { - render: function (markdown) { - return markdownIt.render(markdown); - } -}; diff --git a/package.json b/package.json index ae43f3c766..19f31b51fd 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "@sentry/node": "5.15.0", "@tryghost/errors": "^0.1.0", "@tryghost/helpers": "1.1.23", + "@tryghost/kg-markdown-html-renderer": "1.0.0", "@tryghost/members-api": "0.18.0", "@tryghost/members-ssr": "0.7.4", "@tryghost/social-urls": "0.1.6", @@ -94,10 +95,6 @@ "knex-migrator": "3.4.2", "lodash": "4.17.15", "mailgun-js": "0.22.0", - "markdown-it": "10.0.0", - "markdown-it-footnote": "3.0.2", - "markdown-it-lazy-headers": "0.1.3", - "markdown-it-mark": "3.0.0", "metascraper": "5.11.6", "metascraper-author": "5.11.6", "metascraper-description": "5.11.6", diff --git a/yarn.lock b/yarn.lock index 0c435f23ff..d114d8c5b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -329,6 +329,19 @@ resolved "https://registry.yarnpkg.com/@tryghost/kg-clean-basic-html/-/kg-clean-basic-html-0.1.5.tgz#21cbe9036472c04b2320b1feb359c9c40ff3a300" integrity sha512-jl+NKYryIL+KUQb4XNcMgu9l/K12oASgZYuRqi6GCm0JKhz1qD56vavIpKAlPjJyMOhSfD0MicoX887ijgvqyQ== +"@tryghost/kg-markdown-html-renderer@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tryghost/kg-markdown-html-renderer/-/kg-markdown-html-renderer-1.0.0.tgz#7a68a5700955b031b29b3a70f7ab5b5391d7746e" + integrity sha512-MC+rxwaxkM7g+EkihYr6dmyc8CUkVVahDxjxEcKlVAVWpnB8GN/paaS1Lgv9n9KxqEHCuvewhCDPwH93sczTNg== + dependencies: + bluebird "^3.7.2" + ghost-ignition "^4.1.0" + lodash "^4.17.15" + markdown-it "^10.0.0" + markdown-it-footnote "^3.0.2" + markdown-it-lazy-headers "^0.1.3" + markdown-it-mark "^3.0.0" + "@tryghost/kg-parser-plugins@0.9.0": version "0.9.0" resolved "https://registry.yarnpkg.com/@tryghost/kg-parser-plugins/-/kg-parser-plugins-0.9.0.tgz#6ff9a0cb8101978787bfa3f77d2da652c2d786b1" @@ -5439,22 +5452,22 @@ markdown-escapes@^1.0.0: resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw== -markdown-it-footnote@3.0.2: +markdown-it-footnote@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/markdown-it-footnote/-/markdown-it-footnote-3.0.2.tgz#1575ee7a093648d4e096aa33386b058d92ac8bc1" integrity sha512-JVW6fCmZWjvMdDQSbOT3nnOQtd9iAXmw7hTSh26+v42BnvXeVyGMDBm5b/EZocMed2MbCAHiTX632vY0FyGB8A== -markdown-it-lazy-headers@0.1.3: +markdown-it-lazy-headers@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/markdown-it-lazy-headers/-/markdown-it-lazy-headers-0.1.3.tgz#e70dd4da79c87a9ce82ca4701b8b7c0e2d72297b" integrity sha1-5w3U2nnIepzoLKRwG4t8Di1yKXs= -markdown-it-mark@3.0.0: +markdown-it-mark@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/markdown-it-mark/-/markdown-it-mark-3.0.0.tgz#27c3e39ef3cc310b2dde5375082c9fa912983cda" integrity sha512-HqMWeKfMMOu4zBO0emmxsoMWmbf2cPKZY1wP6FsTbKmicFfp5y4L3KXAsNeO1rM6NTJVOrNlLKMPjWzriBGspw== -markdown-it@10.0.0: +markdown-it@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc" integrity sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==