class StimulusReflex::SelectorBroadcaster

Public Instance Methods

append_morph(selectors, html) click to toggle source
# File lib/stimulus_reflex/broadcasters/selector_broadcaster.rb, line 45
def append_morph(selectors, html)
  morphs << [selectors, html]
end
broadcast(_, data = {}) click to toggle source
# File lib/stimulus_reflex/broadcasters/selector_broadcaster.rb, line 5
def broadcast(_, data = {})
  morphs.each do |morph|
    selectors, html = morph
    updates = selectors.is_a?(Hash) ? selectors : Hash[selectors, html]
    updates.each do |selector, html|
      html = html.to_s
      fragment = Nokogiri::HTML.fragment(html)
      match = fragment.at_css(selector)
      if match.present?
        operations << [selector, :morph]
        cable_ready.morph(
          selector: selector,
          html: match.inner_html,
          children_only: true,
          permanent_attribute_name: permanent_attribute_name,
          stimulus_reflex: data.merge({
            morph: to_sym
          })
        )
      else
        operations << [selector, :inner_html]
        cable_ready.inner_html(
          selector: selector,
          html: fragment.to_html,
          stimulus_reflex: data.merge({
            morph: to_sym
          })
        )
      end
    end
  end

  cable_ready.broadcast
  morphs.clear
end
morphs() click to toggle source
# File lib/stimulus_reflex/broadcasters/selector_broadcaster.rb, line 41
def morphs
  @morphs ||= []
end
selector?() click to toggle source
# File lib/stimulus_reflex/broadcasters/selector_broadcaster.rb, line 53
def selector?
  true
end
to_s() click to toggle source
# File lib/stimulus_reflex/broadcasters/selector_broadcaster.rb, line 57
def to_s
  "Selector"
end
to_sym() click to toggle source
# File lib/stimulus_reflex/broadcasters/selector_broadcaster.rb, line 49
def to_sym
  :selector
end