end
def first_image_element(element)
- return element if element.type == :img ||
- (element.type == :html_element && element.value == "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
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)