Sha256: 9bd8eb9e15fbdb0706cad6168ee9ba277f3a07a282da365b0aae5979baba5f68

Contents?: true

Size: 1.58 KB

Versions: 3

Compression:

Stored size: 1.58 KB

Contents

module Clapton
  module ClaptonHelper

    def clapton_javascript_tag
      all_components = Dir.glob(Rails.root.join("app", "components", "**", "*.rb"))
      tags = <<~HTML
        <script type="importmap">
          {
            "imports": {
              "client": "/clapton/client.js",
              "components": "/clapton/components.js",
              "c": "/clapton/c.js",
              #{ all_components.map do
               |component| "\"#{File.basename(component, ".rb").camelize}\": \"/clapton/#{File.basename(component, ".rb").camelize}.js\""
              end.join(",\n") }
            }
          }
        </script>
        <script type="module" src="/clapton/client.js"></script>
      HTML
      tags.html_safe
    end

    def clapton_tag
      datas = []
      @components.each do |component|
        state_class = component[0].to_s.gsub("Component", "State")
        if Object.const_defined?(state_class)
          datas << { component: component[0].to_s, state: Object.const_get(state_class).new(component[1]).to_h }
        else
          datas << { component: component[0].to_s, state: {} }
        end
      end
      tag.div(id: "clapton", data: { clapton: datas })
    end

    def clapton_component_tag(component, params)
      state_class = component.to_s.gsub("Component", "State")
      if Object.const_defined?(state_class)
        data = { component: component.to_s, state: Object.const_get(state_class).new(params).to_h }
      else
        data = { component: component.to_s, state: {} }
      end
      tag.div(class: "clapton-component", data: { clapton: data })
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
clapton-0.0.22 app/helpers/clapton/clapton_helper.rb
clapton-0.0.21 app/helpers/clapton/clapton_helper.rb
clapton-0.0.20 app/helpers/clapton/clapton_helper.rb