45 lines
886 B
Ruby
45 lines
886 B
Ruby
# frozen_string_literal: true
|
|
|
|
class HtmlAwareFormatter
|
|
STATUS_MIME_TYPES = %w(text/plain text/markdown text/html).freeze
|
|
|
|
attr_reader :text, :local, :options
|
|
|
|
alias local? local
|
|
|
|
# @param [String] text
|
|
# @param [Boolean] local
|
|
# @param [Hash] options
|
|
def initialize(text, local, options = {})
|
|
@text = text
|
|
@local = local
|
|
@options = options
|
|
end
|
|
|
|
def to_s
|
|
return ''.html_safe if text.blank?
|
|
|
|
if local?
|
|
linkify
|
|
else
|
|
reformat.html_safe # rubocop:disable Rails/OutputSafety
|
|
end
|
|
rescue ArgumentError
|
|
''.html_safe
|
|
end
|
|
|
|
private
|
|
|
|
def reformat
|
|
Sanitize.fragment(text, Sanitize::Config::MASTODON_STRICT)
|
|
end
|
|
|
|
def linkify
|
|
if %w(text/markdown text/html).include?(@options[:content_type])
|
|
AdvancedTextFormatter.new(text, options).to_s
|
|
else
|
|
TextFormatter.new(text, options).to_s
|
|
end
|
|
end
|
|
end
|