Sha256: 97c6a0a9390f8818e53ac7f6de83576808b54d27e50992263b53844e4e83e413

Contents?: true

Size: 1.4 KB

Versions: 7

Compression:

Stored size: 1.4 KB

Contents

# frozen_string_literal: true

module StimulusReflex
  class SelectorBroadcaster < Broadcaster
    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

    def morphs
      @morphs ||= []
    end

    def append_morph(selectors, html)
      morphs << [selectors, html]
    end

    def to_sym
      :selector
    end

    def selector?
      true
    end

    def to_s
      "Selector"
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
stimulus_reflex-3.4.2 lib/stimulus_reflex/broadcasters/selector_broadcaster.rb
stimulus_reflex-3.4.1 lib/stimulus_reflex/broadcasters/selector_broadcaster.rb
stimulus_reflex-3.4.0 lib/stimulus_reflex/broadcasters/selector_broadcaster.rb
stimulus_reflex-3.4.0.pre9 lib/stimulus_reflex/broadcasters/selector_broadcaster.rb
stimulus_reflex-3.4.0.pre8 lib/stimulus_reflex/broadcasters/selector_broadcaster.rb
stimulus_reflex-3.4.0.pre7 lib/stimulus_reflex/broadcasters/selector_broadcaster.rb
stimulus_reflex-3.4.0.pre6 lib/stimulus_reflex/broadcasters/selector_broadcaster.rb