include ActionView::Helpers::TextHelper
include ActionView::Helpers::OutputSafetyHelper
- def sanitize(text)
+ def sanitize(text, _options = {})
Sanitize.clean(text, Sanitize::Config::OSM).html_safe
end
end
(spammy_phrases * 40)
end
+ def image
+ nil
+ end
+
protected
def simple_format(text)
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 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