]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/5041'
authorTom Hughes <tom@compton.nu>
Sun, 4 Aug 2024 11:35:20 +0000 (12:35 +0100)
committerTom Hughes <tom@compton.nu>
Sun, 4 Aug 2024 11:35:20 +0000 (12:35 +0100)
lib/rich_text.rb
test/lib/rich_text_test.rb

index f19d3d3a952ddd2c8240e2ea8da228c434523ffc..edfa535f434c07d23fb88412ad9dd673c38645d5 100644 (file)
@@ -104,13 +104,17 @@ module RichText
     end
 
     def first_image_element(element)
-      return element if element.type == :img
+      return element if image?(element) && element.attr["src"].present?
 
       element.children.find do |child|
         nested_image = first_image_element(child)
         break nested_image if nested_image
       end
     end
+
+    def image?(element)
+      element.type == :img || (element.type == :html_element && element.value == "img")
+    end
   end
 
   class Text < Base
index 8dc9e49b1180582535d0939b67fdd3ede88219be..e601c36fc5d3b1c27a1443985e9110840fded551 100644 (file)
@@ -275,6 +275,41 @@ class RichTextTest < ActiveSupport::TestCase
     assert_equal "https://example.com/image1.jpg", r.image
   end
 
+  def test_markdown_image_with_empty_src
+    r = RichText.new("markdown", "![invalid]()")
+    assert_nil r.image
+  end
+
+  def test_markdown_skip_image_with_empty_src
+    r = RichText.new("markdown", "![invalid]() ![valid](https://example.com/valid.gif)")
+    assert_equal "https://example.com/valid.gif", r.image
+  end
+
+  def test_markdown_html_image
+    r = RichText.new("markdown", "<img src='https://example.com/img_element.png'>")
+    assert_equal "https://example.com/img_element.png", r.image
+  end
+
+  def test_markdown_html_image_with_empty_src
+    r = RichText.new("markdown", "<img src=''>")
+    assert_nil r.image
+  end
+
+  def test_markdown_skip_html_image_with_empty_src
+    r = RichText.new("markdown", "<img src=''> <img src='https://example.com/next_img_element.png'>")
+    assert_equal "https://example.com/next_img_element.png", r.image
+  end
+
+  def test_markdown_html_image_without_src
+    r = RichText.new("markdown", "<img>")
+    assert_nil r.image
+  end
+
+  def test_markdown_skip_html_image_without_src
+    r = RichText.new("markdown", "<img> <img src='https://example.com/next_img_element.png'>")
+    assert_equal "https://example.com/next_img_element.png", r.image
+  end
+
   private
 
   def assert_html(richtext, &block)