class RocketNavigation::Renderer::Base

This is the base class for all renderers.

A renderer is responsible for rendering an ItemContainer and its containing items to HTML.

Attributes

container[R]
options[R]

Public Class Methods

new(container, options = {}) click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 16
def initialize(container, options = {})
  @container = container
  @options = options
end

Public Instance Methods

active_tag_for(item) click to toggle source

render an item as an active link (a)

# File lib/rocket_navigation/renderer/base.rb, line 168
def active_tag_for(item)
  link_to(item.name, item.url, link_options(item))
end
base_item_html() click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 34
def base_item_html
  @base_item_html ||= container.item_html.merge(options[:item_html] || {})
end
consider_sub_navigation?(item) click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 127
def consider_sub_navigation?(item)
  return false unless item.sub_navigation

  case level
  when :all
    true
  when Array, Range
    item.sub_navigation.level <= level.max
  else
    false
  end
end
container_html() click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 25
def container_html
  @container_html ||= container.container_html.merge(options[:container_html] || {})
end
container_options() click to toggle source

override this method if needed

# File lib/rocket_navigation/renderer/base.rb, line 30
def container_options
  container_html
end
expand_all?() click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 98
def expand_all?
  !options.key?(:expand_all) || options[:expand_all] == true
end
expand_sub_navigation?(item) click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 140
def expand_sub_navigation?(item)
  expand_all? || item.selected?
end
include_sub_navigation?(item) click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 110
def include_sub_navigation?(item)
  consider_sub_navigation?(item) && expand_sub_navigation?(item)
end
item_classes(item) click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 42
def item_classes(item)
  classes = Array.wrap(base_item_html[:class] || [])
  if item.selected?
    classes.push(selected_class(:item))
  end
  if item.active_branch?
    classes.push(selected_class(:branch))
  end
  classes = classes.reject { |c| c.nil? } + item_extra_classes(item)
end
item_extra_classes(item) click to toggle source

override in renderer if needed

# File lib/rocket_navigation/renderer/base.rb, line 39
def item_extra_classes(item)
  []
end
item_html(item) click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 53
def item_html(item)
  ret = base_item_html.except(:class)

  classes = item_classes(item)
  ret.merge!({class: classes}) unless classes.blank?
  ret
end
item_options(item) click to toggle source

override this method if needed

# File lib/rocket_navigation/renderer/base.rb, line 62
def item_options(item)
  item_html(item)
end
level() click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 102
def level
  options[:level] || :all
end
render(item_container) click to toggle source

Renders the specified ItemContainer to HTML.

When implementing a renderer, please consider to call include_sub_navigation? to determine whether an item's sub_navigation should be rendered or not.

# File lib/rocket_navigation/renderer/base.rb, line 123
def render(item_container)
  fail NotImplementedError, 'subclass responsibility'
end
render_sub_navigation_for(item) click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 114
def render_sub_navigation_for(item)
  item.sub_navigation.render(options)
end
selected_class(type) click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 21
def selected_class(type)
  container.selected_class[type] || (options[:selected_class] || {})[type]
end
skip_if_empty?() click to toggle source
# File lib/rocket_navigation/renderer/base.rb, line 106
def skip_if_empty?
  !!options[:skip_if_empty]
end
suppressed_tag_for(item) click to toggle source

render an item as a non-active link (span)

# File lib/rocket_navigation/renderer/base.rb, line 163
def suppressed_tag_for(item)
  content_tag('span', item.name, link_options(item).except(:method))
end
tag_for(item) click to toggle source

determine and return link or static content depending on item/renderer conditions.

# File lib/rocket_navigation/renderer/base.rb, line 154
def tag_for(item)
  if suppress_link?(item)
    suppressed_tag_for(item)
  else
    active_tag_for(item)
  end
end