Sha256: ff9b507357cc13cd3988e62536d5504284a6602c07830ee3a381ab6ce28fc997

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module Heartml
  class BridgetownRenderer < Bridgetown::Builder
    # Called when a `Bridgetown::Component` includes `Heartml`, so we can bypass Bridgetown's
    # normal component template handling
    def self.component_overrides(klass)
      klass.define_method(:template) { call }
    end

    def build
      render_heart_modules
    end

    def render_heart_modules
      inspect_html do |doc, resource|
        view_context = Bridgetown::ERBView.new(resource)

        rdr = Heartml::TemplateRenderer.new(body: doc.at_css("body"), context: view_context)
        rdr.call
      end
    end
  end
end

Bridgetown.initializer :heartml do |config|
  Heartml.module_eval do
    def render_in(view_context, rendering_mode: :string, &block)
      self.rendering_mode = rendering_mode
      super(view_context, &block)
    end
  end

  Heartml::ClassMethods.module_eval do
    def component_template_path = heart_module
  end

  # Eager load all components
  config.hook :site, :after_reset do |site|
    unless site.config.eager_load_paths.find { _1.end_with?(site.config.components_dir) }
      site.config.eager_load_paths << site.config.autoload_paths.find { _1.end_with?(site.config.components_dir) }
    end
  end

  config.html_inspector_parser "nokolexbor"
  config.builder Heartml::BridgetownRenderer
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
heartml-1.0.0.beta18 lib/heartml/bridgetown_renderer.rb
heartml-1.0.0.beta17 lib/heartml/bridgetown_renderer.rb
heartml-1.0.0.beta16 lib/heartml/bridgetown_renderer.rb