Module: BootstrapNavbar::Helpers::Bootstrap5

Defined in:
lib/bootstrap-navbar/helpers/bootstrap5.rb

Instance Method Summary collapse

Instance Method Details



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/bootstrap-navbar/helpers/bootstrap5.rb', line 2

def navbar(options = {}, &block)
  options = options.dup
  unless container = options.key?(:container) ? options.delete(:container) : true
    raise "container cannot be false."
  end
  brand = if options[:brand]
    brand_url           = options.delete(:brand_url)
    element, attributes = brand_url == false ? ['span', {}] : ['a', { href: brand_url || '/' }]
    attributes[:class]  = 'navbar-brand'

    prepare_html <<~HTML
                   <#{element}#{attributes_for_tag(attributes)}>
                     #{options.delete(:brand)}
                   </#{element}>
                 HTML
  end
  wrapper options do
    container container do
      prepare_html <<~HTML
                     #{brand}
                     #{capture(&block) if block_given?}
                   HTML
    end
  end
end


28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/bootstrap-navbar/helpers/bootstrap5.rb', line 28

def navbar_collapse(options = {}, &block)
  options = options.dup
  options[:class] = [options[:class], 'collapse', 'navbar-collapse'].compact
  options[:class] = options[:class].join(' ')
  options[:id] ||= 'navbar-collapsable'
  attributes = attributes_for_tag(options)
  toggler_attributes = attributes_for_tag(
    class:              'navbar-toggler',
    type:               'button',
    'data-bs-toggle' => 'collapse',
    'data-bs-target' => "##{options[:id]}",
    'aria-controls'  => options[:id],
    'aria-expanded'  => false,
    'aria-label'     => 'Toggle navigation'
  )
  prepare_html <<~HTML
                 <button#{toggler_attributes}>
                   <span class="navbar-toggler-icon"></span>
                 </button>
                 <div#{attributes}>
                   #{capture(&block) if block_given?}
                 </div>
               HTML
end


88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/bootstrap-navbar/helpers/bootstrap5.rb', line 88

def navbar_dropdown(text, list_item_options = {}, link_options = {}, wrapper_options = {}, &block)
  list_item_options, link_options = list_item_options.dup, link_options.dup
  list_item_options[:class] = [list_item_options[:class], 'nav-item', 'dropdown'].compact.join(' ')
  list_item_attributes = attributes_for_tag(list_item_options)
  link_options[:class] = [link_options[:class], 'nav-link', 'dropdown-toggle'].compact.join(' ')
  link_attributes = attributes_for_tag(link_options)
  wrapper_options = { class: [*wrapper_options.delete(:class), 'dropdown-menu'].compact.join(' ') }
  if id = link_options[:id]
    wrapper_options[:'aria-labelledby'] = id
  end
  wrapper_attributes = attributes_for_tag(wrapper_options)
  prepare_html <<~HTML
                 <li#{list_item_attributes}>
                   <a href="#" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" role="button"#{link_attributes}>#{text}</a>
                   <ul#{wrapper_attributes}>
                     #{capture(&block) if block_given?}
                   </ul>
                 </li>
               HTML
end


126
127
128
# File 'lib/bootstrap-navbar/helpers/bootstrap5.rb', line 126

def navbar_dropdown_divider
  '<div class="dropdown-divider"></div>'
end


109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/bootstrap-navbar/helpers/bootstrap5.rb', line 109

def navbar_dropdown_item(text, url = nil, link_options = {}, &block)
  text, url, link_options = capture(&block), text, (url || {}) if block_given?
  url ||= '#'
  link_options = link_options.dup
  link_options[:class] = [link_options[:class], 'dropdown-item'].compact
  link_options[:class] << 'active' if current_url_or_sub_url?(url)
  link_options[:class] = link_options[:class].join(' ')
  link_attributes = attributes_for_tag(link_options)
  prepare_html <<~HTML
                 <li>
                   <a href="#{url}"#{link_attributes}>
                     #{text}
                   </a>
                 </li>
               HTML
end


53
54
55
56
57
58
59
60
61
62
# File 'lib/bootstrap-navbar/helpers/bootstrap5.rb', line 53

def navbar_group(options = {}, &block)
  options = options.dup
  options[:class] = [options[:class], 'navbar-nav'].compact.join(' ')
  attributes = attributes_for_tag(options)
  prepare_html <<~HTML
                 <ul#{attributes}>
                   #{capture(&block) if block_given?}
                 </ul>
               HTML
end


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/bootstrap-navbar/helpers/bootstrap5.rb', line 68

def navbar_item(text, url = nil, list_item_options = nil, link_options = nil, &block)
  text, url, list_item_options, link_options = capture(&block), text, (url || {}), list_item_options if block_given?
  url ||= '#'
  list_item_options   = list_item_options ? list_item_options.dup : {}
  link_options        = link_options      ? link_options.dup      : {}
  list_item_options[:class] = [list_item_options[:class], 'nav-item'].compact.join(' ')
  link_options[:class] = [link_options[:class], 'nav-link'].compact
  link_options[:class] << 'active' if current_url_or_sub_url?(url)
  link_options[:class] = link_options[:class].join(' ')
  list_item_attributes = attributes_for_tag(list_item_options)
  link_attributes      = attributes_for_tag(link_options)
  prepare_html <<~HTML
                 <li#{list_item_attributes}>
                   <a href="#{url}"#{link_attributes}>
                     #{text}
                   </a>
                 </li>
               HTML
end


64
65
66
# File 'lib/bootstrap-navbar/helpers/bootstrap5.rb', line 64

def navbar_text(text)
  %(<span class="navbar-text">#{text}</span>)
end