module SimpleNavigationBootstrap::BootstrapBase

Public Instance Methods

render(item_container) click to toggle source
# File lib/simple_navigation_bootstrap/bootstrap_base.rb, line 6
def render(item_container)
  if skip_if_empty? && item_container.empty?
    ''
  else
    # Generate list of items
    list_content = with_bootstrap_configs do
      item_container.items.inject([]) do |list, item|
        list << render_item(self, item, item_container.level, bootstrap_version)
      end.join
    end

    # Set CSS class for container :
    #   class = 'nav' if level == 1
    #   class = 'dropdown-menu' if level > 1
    item_container.dom_class = [item_container.dom_class, container_class(item_container.level)].flatten.compact.join(' ')

    # Generate the final list
    content_tag(:ul, list_content, id: item_container.dom_id, class: item_container.dom_class)
  end
end

Private Instance Methods

container_class(level) click to toggle source
# File lib/simple_navigation_bootstrap/bootstrap_base.rb, line 36
def container_class(level)
  remove_navigation_class = options.fetch(:remove_navigation_class) { false }
  if level == 1
    remove_navigation_class ? '' : ['nav', navigation_class].compact
  else
    'dropdown-menu'
  end
end
prepare_name(name) click to toggle source
# File lib/simple_navigation_bootstrap/bootstrap_base.rb, line 71
def prepare_name(name)
  return name unless name.is_a?(Hash)

  if name[:icon]
    icon_options = { class: name[:icon], title: name[:title] }.reject { |_, v| v.nil? }
    content_tag(:i, '', icon_options) + ' ' + (name[:text] || '')
  else
    name[:text] || (raise SimpleNavigationBootstrap::Error::InvalidHash)
  end
end
render_item(*args) click to toggle source
# File lib/simple_navigation_bootstrap/bootstrap_base.rb, line 31
def render_item(*args)
  SimpleNavigationBootstrap::RenderedItem.new(*args).to_s
end
with_bootstrap_configs() { || ... } click to toggle source
# File lib/simple_navigation_bootstrap/bootstrap_base.rb, line 46
def with_bootstrap_configs
  # Get current config
  sn_config = SimpleNavigation.config

  # Save current config
  config_selected_class    = sn_config.selected_class
  config_name_generator    = sn_config.name_generator
  sn_config.selected_class = 'active'

  # name_generator should be proc (not lambda or method) to be compatible with earlier versions of simple-navigation
  sn_config.name_generator = proc do |name, item|
    config_name_generator.call(prepare_name(name), item)
  end

  # Generate menu
  result = yield

  # Restore config
  sn_config.name_generator = config_name_generator
  sn_config.selected_class = config_selected_class

  result
end