Class: StimulusReflex::SelectorBroadcaster

Inherits:
Broadcaster
  • Object
show all
Defined in:
lib/stimulus_reflex/broadcasters/selector_broadcaster.rb

Instance Attribute Summary

Attributes inherited from Broadcaster

#cable_ready, #logger, #operations, #reflex

Instance Method Summary collapse

Methods inherited from Broadcaster

#broadcast_error, #broadcast_forbid, #broadcast_halt, #initialize, #nothing?, #page?

Constructor Details

This class inherits a constructor from StimulusReflex::Broadcaster

Instance Method Details

#append_morph(selectors, html) ⇒ Object



42
43
44
# File 'lib/stimulus_reflex/broadcasters/selector_broadcaster.rb', line 42

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

#broadcast(_, data = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/stimulus_reflex/broadcasters/selector_broadcaster.rb', line 5

def broadcast(_, data = {})
  morphs.each do |morph|
    selectors, html = morph
    updates = create_update_collection(selectors, html)
    updates.each do |update|
      document = StimulusReflex::HTML::DocumentFragment.new(update.html)
      match = document.match(update.selector)
      if match.present?
        operations << [update.selector, StimulusReflex.config.morph_operation]
        cable_ready.send StimulusReflex.config.morph_operation, {
          selector: update.selector,
          html: match.inner_html,
          payload: payload,
          children_only: true,
          permanent_attribute_name: permanent_attribute_name,
          stimulus_reflex: data.merge(morph: to_sym)
        }
      else
        operations << [update.selector, StimulusReflex.config.replace_operation]
        cable_ready.send StimulusReflex.config.replace_operation, {
          selector: update.selector,
          html: update.html.to_s,
          payload: payload,
          stimulus_reflex: data.merge(morph: to_sym)
        }
      end
    end
  end

  cable_ready.broadcast
  morphs.clear
end

#morphsObject



38
39
40
# File 'lib/stimulus_reflex/broadcasters/selector_broadcaster.rb', line 38

def morphs
  @morphs ||= []
end

#selector?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/stimulus_reflex/broadcasters/selector_broadcaster.rb', line 50

def selector?
  true
end

#to_sObject



54
55
56
# File 'lib/stimulus_reflex/broadcasters/selector_broadcaster.rb', line 54

def to_s
  "Selector"
end

#to_symObject



46
47
48
# File 'lib/stimulus_reflex/broadcasters/selector_broadcaster.rb', line 46

def to_sym
  :selector
end