Class: TurboBoost::Elements::TagBuilders::ToggleTagsBuilder

Inherits:
BaseTagBuilder
  • Object
show all
Defined in:
lib/turbo_boost/elements/tag_builders/toggle_tags_builder.rb

Instance Attribute Summary

Attributes inherited from BaseTagBuilder

#controller_pack

Instance Method Summary collapse

Methods inherited from BaseTagBuilder

#initialize, #render_tag, #view_stack

Constructor Details

This class inherits a constructor from TurboBoost::Elements::TagBuilders::BaseTagBuilder

Instance Method Details

#busy_tag(**kwargs, &block) ⇒ Object



6
7
8
9
# File 'lib/turbo_boost/elements/tag_builders/toggle_tags_builder.rb', line 6

def busy_tag(**kwargs, &block)
  kwargs[:slot] = "busy"
  render_tag("turbo-boost", loading: :eager, **kwargs, &block)
end

#target_collapsed?(dom_id) ⇒ Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/turbo_boost/elements/tag_builders/toggle_tags_builder.rb', line 88

def target_collapsed?(dom_id)
  !target_expanded?(dom_id)
end

#target_expanded?(dom_id) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/turbo_boost/elements/tag_builders/toggle_tags_builder.rb', line 84

def target_expanded?(dom_id)
  !!controller_pack.command_state[dom_id]
end

#target_tag(id, collapse_on: [], collapse_selector: nil, focus_selector: nil, expanded: false, **kwargs, &block) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/turbo_boost/elements/tag_builders/toggle_tags_builder.rb', line 57

def target_tag(
  id, # REQUIRED, the `dom_id` for the element
  collapse_on: [], # list of events that will collapse this target
  collapse_selector: nil, # CSS selector for other matching targets to collapse when this target is expanded
  focus_selector: nil, # CSS selector for the element to focus when this target is expanded
  expanded: false, # override to force expansion
  **kwargs, # generic support for additional element attributes like `class` etc.
  &block # a Ruby block that emits this target's content
)
  kwargs = kwargs.with_indifferent_access
  kwargs[:id] = id
  kwargs[:collapse_on] = collapse_on.to_json if collapse_on.present?
  kwargs[:collapse_selector] = collapse_selector
  kwargs[:focus_selector] = focus_selector
  kwargs[:role] = "region"

  # aria
  kwargs[:aria] ||= {}
  kwargs[:aria][:live] ||= "polite"

  # rendering
  kwargs[:view_stack] = view_stack.to_json if Rails.env.development?

  loading = (expanded || target_expanded?(id)) ? :eager : :lazy
  render_tag("turbo-boost-toggle-target", loading: loading, **kwargs, &block)
end

#trigger_tag(renders:, morphs:, controls:, collapse_selector: nil, focus_selector: nil, method: :toggle, disabled: false, expanded: false, remember: false, **kwargs, &block) ⇒ Object

def content_tag(loading: :eager, **kwargs, &block)

kwargs[:slot] = "content"
kwargs[:hidden] = true
render_tag("turbo-boost", loading: loading, **kwargs, &block)

end



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/turbo_boost/elements/tag_builders/toggle_tags_builder.rb', line 17

def trigger_tag(
  renders:, # REQUIRED, the partial path to render
  morphs:, # REQUIRED, `dom_id` of the partial's outermost containing element
  controls:, # REQUIRED, `dom_id` of the toggle target
  collapse_selector: nil, # CSS selector for other matching targets to collapse when the target is expanded
  focus_selector: nil, # CSS selector for the element to focus when the target is expanded
  method: :toggle, # method to inovke (:show, :hide, :toggle)
  disabled: false, # disable the trigger
  expanded: false, # override to force expansion
  remember: false, # remember ephemeral UI state between requests
  **kwargs, # generic support for additional element attributes like `class` etc.
  &block # a Ruby block that emits this trigger's content
)
  kwargs = kwargs.with_indifferent_access
  kwargs[:id] ||= "#{controls}-toggle-trigger"

  # command
  kwargs[:data] ||= {}
  kwargs[:data][:turbo_command] = "TurboBoost::Elements::ToggleCommand##{method}" unless disabled

  # aria
  kwargs[:aria] ||= {}
  kwargs[:aria][:controls] = controls # toggle target
  kwargs[:aria][:expanded] = expanded || target_expanded?(controls)
  kwargs[:aria][:atomic] ||= true
  kwargs[:aria][:relevant] ||= "all"

  # rendering
  kwargs[:renders] = renders
  kwargs[:morphs] = morphs
  kwargs[:view_stack] = view_stack.to_json if Rails.env.development?

  # misc
  kwargs[:collapse_selector] = collapse_selector
  kwargs[:focus_selector] = focus_selector
  kwargs[:remember] = !!remember

  render_tag("turbo-boost-toggle-trigger", loading: :eager, **kwargs, &block)
end