class SimpleFormatComponent < ApplicationComponent # see: https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use REDCARPET_EXTENSIONS = { no_intra_emphasis: false, tables: false, fenced_code_blocks: false, autolink: false, disable_indented_code_blocks: false, strikethrough: false, lax_spacing: false, space_after_headers: false, superscript: false, underline: false, highlight: false, quote: false, footnotes: false } # see: https://github.com/vmg/redcarpet#darling-i-packed-you-a-couple-renderers-for-lunch REDCARPET_RENDERER_OPTS = { no_images: true } def initialize(text, allow_a: true, class_names_map: {}) @text = (text || "").gsub(/\R/, "\n\n") # force double \n otherwise a single one won't split paragraph .split("\n\n") # .map(&:lstrip) # this block prevent redcarpet to consider " text" as block code by lstriping .join("\n\n") # @allow_a = allow_a @renderer = Redcarpet::Markdown.new( Redcarpet::BareRenderer.new(link_attributes: external_link_attributes, class_names_map: class_names_map), REDCARPET_EXTENSIONS.merge(autolink: @allow_a) ) end def external_link_attributes { target: '_blank', rel: 'noopener noreferrer' } end def tags if @allow_a Rails.configuration.action_view.sanitized_allowed_tags + ['a'] else Rails.configuration.action_view.sanitized_allowed_tags end end def attributes ['target', 'rel', 'href', 'class'] end end