Sha256: e5d725ed254816f8daca06338836614e9aa0938d71e5424e4e2ec0ad4135bc91

Contents?: true

Size: 1.83 KB

Versions: 22

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

module Bridgetown
  module Tags
    class BlockRenderTag < Liquid::Block
      # rubocop:disable Metrics/MethodLength
      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
      # rubocop:enable Metrics/MethodLength

      private

      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
    end
  end
end

Liquid::Template.register_tag("rendercontent", Bridgetown::Tags::BlockRenderTag)

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
bridgetown-core-0.21.5 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-1.0.0.alpha1 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.21.4 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.21.3 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.21.2 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.21.1 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.21.0 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.21.0.beta4 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.21.0.beta3 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.21.0.beta2 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.21.0.beta1 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.20.0 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.19.3 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.19.2 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.19.1 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.19.0 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.18.6 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.18.5 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.18.4 lib/bridgetown-core/tags/render_content.rb
bridgetown-core-0.18.3 lib/bridgetown-core/tags/render_content.rb