43 lines
		
	
	
		
			817 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			817 B
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class HtmlAwareFormatter
 | 
						|
  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
 |