class SimpleNavigation::Renderer::Sidebar

Public Instance Methods

render(item_container) click to toggle source
# File lib/simple_navigation/renderer/sidebar.rb, line 4
def render(item_container)
  if skip_if_empty? && item_container.empty?
    ''
  else
    tag = options[:ordered] ? :ol : :ul
    content = list_content(item_container)
    content_tag(tag, content, item_container.dom_attributes)
  end
end

Private Instance Methods

list_content(item_container) click to toggle source
# File lib/simple_navigation/renderer/sidebar.rb, line 16
def list_content(item_container)
  item_container.items.map { |item|
    li_options = item.html_options.except(*[:link, :icon])
    li_options[:class] = [li_options[:class], 'accordion'].flatten.compact.join(' ') if include_sub_navigation?(item)
    item_options = item.html_options
    item_options.merge!({ 'data-parent' => "##{item_container.dom_id}" }) if include_sub_navigation?(item)
    item_options.merge!({ 'data-target' => "##{item_container.dom_id}-#{item_options[:id]}" }) if include_sub_navigation?(item)
    item_options.merge!({ 'data-toggle' => "collapse" }) if include_sub_navigation?(item)
    item_options.merge!({ :class => "collapsed" }) if include_sub_navigation?(item) && !item.selected?
    li_content = tag_for(item, item_options)
    if include_sub_navigation?(item)
      item.sub_navigation.dom_id = [item.sub_navigation.dom_id, "#{item_container.dom_id}-#{item_options[:id]}"].flatten.compact.join(' ')
      item.sub_navigation.dom_class = [item.sub_navigation.dom_class, 'nav collapse'].flatten.compact.join(' ')
      li_content << render_sub_navigation_for(item)
    end
    content_tag(:li, li_content, li_options)
  }.join
end
tag_for(item, options = {}) click to toggle source
# File lib/simple_navigation/renderer/sidebar.rb, line 35
def tag_for(item, options = {})
  icon = options.delete(:icon)
  if suppress_link?(item)
    content_tag('span', item.name, link_options_for(item).except(:method))
  else
    item.name.insert(0, "#{content_tag('span', '', { :class => "glyphicon #{icon}" })}\n") if icon
    item.name << content_tag('span', '', { :class => "accordion-icon glyphicon glyphicon-chevron-right" }) if include_sub_navigation?(item)
    item.name << content_tag('span', '', { :class => "accordion-icon glyphicon glyphicon-chevron-down" }) if include_sub_navigation?(item)
    link_to(item.name.html_safe, item.url, options.except(:icon))
  end
end