Add image method to get first image from rich text
This commit is contained in:
parent
2315885586
commit
c7353c9ac1
2 changed files with 51 additions and 1 deletions
|
@ -49,6 +49,10 @@ module RichText
|
|||
(spammy_phrases * 40)
|
||||
end
|
||||
|
||||
def image
|
||||
nil
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def simple_format(text)
|
||||
|
@ -80,12 +84,33 @@ module RichText
|
|||
|
||||
class Markdown < Base
|
||||
def to_html
|
||||
linkify(sanitize(Kramdown::Document.new(self).to_html), :all)
|
||||
linkify(sanitize(document.to_html), :all)
|
||||
end
|
||||
|
||||
def to_text
|
||||
to_s
|
||||
end
|
||||
|
||||
def image
|
||||
return @image if defined? @image
|
||||
|
||||
@image = first_image_element(document.root)&.attr&.[]("src")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def document
|
||||
@document ||= Kramdown::Document.new(self)
|
||||
end
|
||||
|
||||
def first_image_element(element)
|
||||
return element if element.type == :img
|
||||
|
||||
element.children.find do |child|
|
||||
nested_image = first_image_element(child)
|
||||
break nested_image if nested_image
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Text < Base
|
||||
|
|
|
@ -250,6 +250,31 @@ class RichTextTest < ActiveSupport::TestCase
|
|||
assert_equal 141, r.spam_score.round
|
||||
end
|
||||
|
||||
def test_text_no_image
|
||||
r = RichText.new("text", "foo https://example.com/ bar")
|
||||
assert_nil r.image
|
||||
end
|
||||
|
||||
def test_html_no_image
|
||||
r = RichText.new("html", "foo <a href='https://example.com/'>bar</a> baz")
|
||||
assert_nil r.image
|
||||
end
|
||||
|
||||
def test_markdown_no_image
|
||||
r = RichText.new("markdown", "foo [bar](https://example.com/) baz")
|
||||
assert_nil r.image
|
||||
end
|
||||
|
||||
def test_markdown_image
|
||||
r = RichText.new("markdown", "foo  baz")
|
||||
assert_equal "https://example.com/image.jpg", r.image
|
||||
end
|
||||
|
||||
def test_markdown_first_image
|
||||
r = RichText.new("markdown", "foo  baz\nfoo  baz")
|
||||
assert_equal "https://example.com/image1.jpg", r.image
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def assert_html(richtext, &block)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue