diff --git a/app/assets/javascripts/discourse/lib/to-markdown.js.es6 b/app/assets/javascripts/discourse/lib/to-markdown.js.es6 index b4fc915023..72ae8aaa92 100644 --- a/app/assets/javascripts/discourse/lib/to-markdown.js.es6 +++ b/app/assets/javascripts/discourse/lib/to-markdown.js.es6 @@ -230,7 +230,9 @@ export class Tag { const e = this.element; const attr = e.attributes; const pAttr = (e.parent && e.parent.attributes) || {}; - const src = attr.src || pAttr.src; + let src = attr.src || pAttr.src; + const base62SHA1 = attr["data-base62-sha1"]; + if (base62SHA1) src = `upload://${base62SHA1}`; const cssClass = attr.class || pAttr.class; if (cssClass && cssClass.includes("emoji")) { diff --git a/app/assets/javascripts/pretty-text/engines/discourse-markdown/upload-protocol.js.es6 b/app/assets/javascripts/pretty-text/engines/discourse-markdown/upload-protocol.js.es6 index 27cfb91860..196f52066f 100644 --- a/app/assets/javascripts/pretty-text/engines/discourse-markdown/upload-protocol.js.es6 +++ b/app/assets/javascripts/pretty-text/engines/discourse-markdown/upload-protocol.js.es6 @@ -45,6 +45,7 @@ function rule(state) { case "img": if (mapped) { token.attrs[srcIndex][1] = mapped.url; + token.attrs.push(["data-base62-sha1", mapped.base62_sha1]); } else { token.attrs[srcIndex][1] = state.md.options.discourse.getURL( "/images/transparent.png" @@ -73,7 +74,12 @@ function rule(state) { export function setup(helper) { const opts = helper.getOptions(); if (opts.previewing) helper.whiteList(["img.resizable"]); - helper.whiteList(["img[data-orig-src]", "a[data-orig-href]"]); + + helper.whiteList([ + "img[data-orig-src]", + "img[data-base62-sha1]", + "a[data-orig-href]" + ]); helper.registerPlugin(md => { md.core.ruler.push("upload-protocol", rule); diff --git a/lib/pretty_text/helpers.rb b/lib/pretty_text/helpers.rb index d42ba3749b..31c2136eea 100644 --- a/lib/pretty_text/helpers.rb +++ b/lib/pretty_text/helpers.rb @@ -73,7 +73,8 @@ module PrettyText short_urls.each do |short_url| result[short_url] = { url: url, - short_path: Upload.short_path(sha1: sha1, extension: extension) + short_path: Upload.short_path(sha1: sha1, extension: extension), + base62_sha1: Upload.base62_sha1(sha1) } end end diff --git a/spec/components/cooked_post_processor_spec.rb b/spec/components/cooked_post_processor_spec.rb index b5c83c1f90..cbe8baa8bf 100644 --- a/spec/components/cooked_post_processor_spec.rb +++ b/spec/components/cooked_post_processor_spec.rb @@ -1040,7 +1040,7 @@ describe CookedPostProcessor do expect(cpp.html).to match_html <<~HTML
This post has a local emoji
and an external upload
test