You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
655 B
31 lines
655 B
# frozen_string_literal: true |
|
|
|
class PlainTextFormatter |
|
NEWLINE_TAGS_RE = %r{(<br />|<br>|</p>)+} |
|
|
|
attr_reader :text, :local |
|
|
|
alias local? local |
|
|
|
def initialize(text, local) |
|
@text = text |
|
@local = local |
|
end |
|
|
|
def to_s |
|
if local? |
|
text |
|
else |
|
node = Nokogiri::HTML.fragment(insert_newlines) |
|
# Elements that are entirely removed with our Sanitize config |
|
node.xpath('.//iframe|.//math|.//noembed|.//noframes|.//noscript|.//plaintext|.//script|.//style|.//svg|.//xmp').remove |
|
node.text.chomp |
|
end |
|
end |
|
|
|
private |
|
|
|
def insert_newlines |
|
text.gsub(NEWLINE_TAGS_RE) { |match| "#{match}\n" } |
|
end |
|
end
|
|
|