Sha256: c68929b947499296f3140f72d663e9a49f0c7f8b82d316da10218c3963aec07f
Contents?: true
Size: 1.45 KB
Versions: 2
Compression:
Stored size: 1.45 KB
Contents
# frozen_string_literal: true module HoTModuLe class ComponentRenderer < Bridgetown::Builder def build render_html_modules end # rubocop:todo Metrics def render_html_modules inspect_html do |doc, resource| view_context = Bridgetown::ERBView.new(resource) HoTModuLe.registered_elements.each do |component| tag_name = component.tag_name doc.xpath("//#{tag_name}").reverse.each do |node| if node["hmod:ignore"] node.remove_attribute("hmod:ignore") next end attrs = node.attributes.transform_values(&:value) attrs.reject! { |k| k.start_with?("hmod:") } new_attrs = {} attrs.each do |k, v| next unless k.start_with?("arg:") new_key = k.delete_prefix("arg:") attrs.delete(k) new_attrs[new_key] = resource.instance_eval(v) end attrs.merge!(new_attrs) attrs.transform_keys!(&:to_sym) new_node = node.replace( component.new(**attrs).render_in(view_context, rendering_mode: :node) { node.children } ) new_node.remove_attribute("hmod:ignore") end rescue StandardError => e Bridgetown.logger.error "Unable to render <#{tag_name}> (#{component}) in #{resource.path}" raise e end end end # rubocop:enable Metrics end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
hot_module-1.0.0.alpha14 | lib/hot_module/component_renderer.rb |
hot_module-1.0.0.alpha13 | lib/hot_module/component_renderer.rb |