Module: EffectiveBootstrapHelper

Defined in:
app/helpers/effective_bootstrap_helper.rb

Overview

Boostrap4 Helpers

Instance Method Summary collapse

Instance Method Details

#merge_class_key(hash, value) ⇒ Object



42
43
44
45
46
47
48
49
50
# File 'app/helpers/effective_bootstrap_helper.rb', line 42

def merge_class_key(hash, value)
  return { :class => value } unless hash.kind_of?(Hash)

  if hash[:class].present?
    hash.merge!(:class => "#{hash[:class]} #{value}")
  else
    hash.merge!(:class => value)
  end
end


38
39
40
# File 'app/helpers/effective_bootstrap_helper.rb', line 38

def nav_divider
  (:div, '', class: 'dropdown-divider')
end


24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/helpers/effective_bootstrap_helper.rb', line 24

def nav_dropdown(label, right: false, link_class: [], list_class: [], &block)
  raise 'expected a block' unless block_given?

  id = "dropdown-#{''.object_id}"

  (:li, class: 'nav-item dropdown') do
    (:a, class: 'nav-link dropdown-toggle', href: '#', id: id, role: 'button', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) do
      label.html_safe
    end + (:div, class: (right ? 'dropdown-menu dropdown-menu-right' : 'dropdown-menu'), 'aria-labelledby': id) do
      @_nav_mode = :dropdown; yield; @_nav_mode = nil
    end
  end
end

%ul.navbar-nav

nav_link_to 'Sign In', new_user_session_path

nav_dropdown 'Settings' do

= nav_link_to 'Account Settings', 
= nav_dropdown_divider
= nav_link_to 'Sign In', new_user_session_path, method: :delete


13
14
15
16
17
18
19
20
21
22
# File 'app/helpers/effective_bootstrap_helper.rb', line 13

def nav_link_to(label, path, opts = {})
  if @_nav_mode == :dropdown  # We insert dropdown-items
    return link_to(label, path, merge_class_key(opts, 'dropdown-item'))
  end

  # Regular nav link item
  (:li, class: (request.fullpath.include?(path) ? 'nav-item active' : 'nav-item')) do
    link_to(label, path, merge_class_key(opts, 'nav-link'))
  end
end