Class: PhlexyUI::CollapsibleSubMenu

Inherits:
Base
  • Object
show all
Defined in:
lib/phlexy_ui/collapsible_sub_menu.rb

Instance Method Summary collapse

Constructor Details

#initializeCollapsibleSubMenu

Returns a new instance of CollapsibleSubMenu.



6
7
8
9
# File 'lib/phlexy_ui/collapsible_sub_menu.rb', line 6

def initialize(*, **)
  super
  @items ||= []
end

Instance Method Details

#itemObject



49
50
51
# File 'lib/phlexy_ui/collapsible_sub_menu.rb', line 49

def item(*, **, &)
  @items << MenuItem.new(*, **, &)
end

#title(&block) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/phlexy_ui/collapsible_sub_menu.rb', line 41

def title(&block)
  if @title
    raise ArgumentError, "A collapsible submenu can only have one title"
  else
    @title = block
  end
end

#view_template {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



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
37
38
39
# File 'lib/phlexy_ui/collapsible_sub_menu.rb', line 11

def view_template(&)
  yield(self) if block_given?

  attributes = generate_attributes(base_modifiers, options, ATTRIBUTES_MAP)

  generate_classes!(
    base_modifiers:,
    modifiers_map: modifiers,
    options:
  ).then do |classes|
    details(**attributes) do
      if @title
        summary do
          render @title
        end
      else
        raise ArgumentError, "A collapsible submenu requires a title"
      end

      if @items.any?
        ul class: classes, **options do
          @items.each do |item|
            render item
          end
        end
      end
    end
  end
end