class Bridgetown::Tags::BlockRenderTag

Public Instance Methods

render(context) click to toggle source

rubocop:disable Metrics/MethodLength

Calls superclass method
# File lib/bridgetown-core/tags/render_content.rb, line 7
def render(context)
  context.stack({}) do
    # unindent the incoming text
    content = Bridgetown::Utils.reindent_for_markdown(super)

    regions = gather_content_regions(context)

    site = context.registers[:site]
    converter = site.find_converter_instance(Bridgetown::Converters::Markdown)
    markdownified_content = converter.convert(content)
    context["processed_component_content"] = markdownified_content

    render_params = [@markup, "content: processed_component_content"]
    unless regions.empty?
      regions.each do |region_name, region_content|
        region_name = region_name.sub("content_with_region_", "")

        if region_name.end_with? ":markdown"
          region_name.sub!(%r!:markdown$!, "")
          context[region_name] = converter.convert(
            Bridgetown::Utils.reindent_for_markdown(region_content)
          )
        else
          context[region_name] = region_content
        end
        render_params.push "#{region_name}: #{region_name}"
      end
    end

    Liquid::Render.parse("render", render_params.join(","), nil, @parse_context)
      .render_tag(context, +"")
  end
end

Private Instance Methods

gather_content_regions(context) click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/bridgetown-core/tags/render_content.rb, line 44
def gather_content_regions(context)
  unless context.scopes[0].keys.find { |k| k.to_s.start_with? "content_with_region_" }
    return {}
  end

  context.scopes[0].select { |k| k.to_s.start_with? "content_with_region_" }
end