diff --git a/app/assets/javascripts/discourse/app/components/cook-text.js b/app/assets/javascripts/discourse/app/components/cook-text.js index be89fc8c62..27441d835b 100644 --- a/app/assets/javascripts/discourse/app/components/cook-text.js +++ b/app/assets/javascripts/discourse/app/components/cook-text.js @@ -2,6 +2,7 @@ import Component from "@ember/component"; import { cookAsync } from "discourse/lib/text"; import { ajax } from "discourse/lib/ajax"; import { resolveAllShortUrls } from "pretty-text/upload-short-url"; +import { afterRender } from "discourse-common/utils/decorators"; const CookText = Component.extend({ cooked: null, @@ -10,11 +11,13 @@ const CookText = Component.extend({ this._super(...arguments); cookAsync(this.rawText).then(cooked => { this.set("cooked", cooked); - - if (this.element && !this.isDestroying && !this.isDestroyed) { - return resolveAllShortUrls(ajax, this.siteSettings, this.element); - } + this._resolveUrls(); }); + }, + + @afterRender + _resolveUrls() { + resolveAllShortUrls(ajax, this.siteSettings, this.element); } }); diff --git a/test/javascripts/components/cook-text-test.js b/test/javascripts/components/cook-text-test.js new file mode 100644 index 0000000000..b11019abf3 --- /dev/null +++ b/test/javascripts/components/cook-text-test.js @@ -0,0 +1,46 @@ +import componentTest from "helpers/component-test"; +import pretender from "helpers/create-pretender"; +import { resetCache } from "pretty-text/upload-short-url"; + +moduleForComponent("cook-text", { integration: true }); + +componentTest("renders markdown", { + template: '{{cook-text "_foo_" class="post-body"}}', + + test(assert) { + const html = find(".post-body")[0].innerHTML.trim(); + assert.equal(html, "

foo

"); + } +}); + +componentTest("resolves short URLs", { + template: `{{cook-text "![an image](upload://a.png)" class="post-body"}}`, + + beforeEach() { + pretender.post("/uploads/lookup-urls", () => { + return [ + 200, + { "Content-Type": "application/json" }, + [ + { + short_url: "upload://a.png", + url: "/uploads/default/original/3X/c/b/1.png", + short_path: "/uploads/short-url/a.png" + } + ] + ]; + }); + }, + + afterEach() { + resetCache(); + }, + + test(assert) { + const html = find(".post-body")[0].innerHTML.trim(); + assert.equal( + html, + '

an image

' + ); + } +});