diff --git a/app/services/inline_uploads.rb b/app/services/inline_uploads.rb index a015bc02ff3..816e848f7d1 100644 --- a/app/services/inline_uploads.rb +++ b/app/services/inline_uploads.rb @@ -24,7 +24,9 @@ class InlineUploads cooked_fragment.traverse do |node| if node.name == "img" # Do nothing - elsif !(node.children.count == 1 && (node.children[0].name != "img" && node.children[0].children.blank?)) + elsif !(node.children.count == 1 && (node.children[0].name != "img" && node.children[0].children.blank?)) && + !(node.name == "a" && node.children.count > 1 && !node_children_names(node).include?("img")) + next end @@ -293,4 +295,18 @@ class InlineUploads matches end private_class_method :matched_uploads + + def self.node_children_names(node, names = Set.new) + if node.children.blank? + names << node.name + return names + end + + node.children.each do |child| + names = node_children_names(child, names) + end + + names + end + private_class_method :node_children_names end diff --git a/spec/services/inline_uploads_spec.rb b/spec/services/inline_uploads_spec.rb index 06337142b0d..e563eee1435 100644 --- a/spec/services/inline_uploads_spec.rb +++ b/spec/services/inline_uploads_spec.rb @@ -452,6 +452,8 @@ RSpec.describe InlineUploads do test3 test3test3 + + This is some _test_ here MD expect(InlineUploads.process(md)).to eq(<<~MD) @@ -463,6 +465,8 @@ RSpec.describe InlineUploads do [test3|attachment](#{upload.short_url}) [test3|attachment](#{upload2.short_url})[test3|attachment](#{upload3.short_url}) + + [This is some _test_ here|attachment](#{upload3.short_url}) MD end