vt-social/app/lib/html_aware_formatter.rb

45 lines
886 B
Ruby
Raw Normal View History

# 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