Class: SimpleNavigation::ItemContainer

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_navigation/item_container.rb

Overview

Holds the Items for a navigation ‘level’.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(level = 1) ⇒ ItemContainer

:nodoc:



14
15
16
17
18
19
20
# File 'lib/simple_navigation/item_container.rb', line 14

def initialize(level = 1) #:nodoc:
  @level = level
  @items ||= []
  @renderer = SimpleNavigation.config.renderer
  @auto_highlight = true
  @dom_attributes = {}
end

Instance Attribute Details

#auto_highlightObject

Returns the value of attribute auto_highlight.



4
5
6
# File 'lib/simple_navigation/item_container.rb', line 4

def auto_highlight
  @auto_highlight
end

#dom_attributesObject



22
23
24
25
26
27
28
29
30
# File 'lib/simple_navigation/item_container.rb', line 22

def dom_attributes
  # backward compability for #dom_id and #dom_class
  dom_id_and_class = {
    id: dom_id,
    class: dom_class
  }.reject { |_, v| v.nil? }

  @dom_attributes.merge(dom_id_and_class)
end

#dom_classObject

Returns the value of attribute dom_class.



4
5
6
# File 'lib/simple_navigation/item_container.rb', line 4

def dom_class
  @dom_class
end

#dom_idObject

Returns the value of attribute dom_id.



4
5
6
# File 'lib/simple_navigation/item_container.rb', line 4

def dom_id
  @dom_id
end

#itemsObject

Returns the value of attribute items.



10
11
12
# File 'lib/simple_navigation/item_container.rb', line 10

def items
  @items
end

#levelObject (readonly)

Returns the value of attribute level.



10
11
12
# File 'lib/simple_navigation/item_container.rb', line 10

def level
  @level
end

#rendererObject

Returns the value of attribute renderer.



4
5
6
# File 'lib/simple_navigation/item_container.rb', line 4

def renderer
  @renderer
end

#selected_classObject

Returns the value of attribute selected_class.



4
5
6
# File 'lib/simple_navigation/item_container.rb', line 4

def selected_class
  @selected_class
end

Instance Method Details

#[](navi_key) ⇒ Object

Returns the Item with the specified key, nil otherwise.



80
81
82
# File 'lib/simple_navigation/item_container.rb', line 80

def [](navi_key)
  items.find { |item| item.key == navi_key }
end

#active_item_container_for(desired_level) ⇒ Object

Returns the active item_container for the specified level (recursively looks up items in selected sub_navigation if level is deeper than this container’s level).



123
124
125
126
127
128
129
# File 'lib/simple_navigation/item_container.rb', line 123

def active_item_container_for(desired_level)
  if level == desired_level
    self
  elsif selected_sub_navigation?
    selected_item.sub_navigation.active_item_container_for(desired_level)
  end
end

#active_leaf_containerObject

Returns the deepest possible active item_container. (recursively searches in the sub_navigation if this container has a selected sub_navigation).



134
135
136
137
138
139
140
# File 'lib/simple_navigation/item_container.rb', line 134

def active_leaf_container
  if selected_sub_navigation?
    selected_item.sub_navigation.active_leaf_container
  else
    self
  end
end

#empty?Boolean

Returns true if there are no items defined for this container.

Returns:

  • (Boolean)


143
144
145
# File 'lib/simple_navigation/item_container.rb', line 143

def empty?
  items.empty?
end

#item(key, name, url = nil, options = {}, &block) ⇒ Object

Creates a new navigation item.

The key is a symbol which uniquely defines your navigation item in the scope of the primary_navigation or the sub_navigation.

The name will be displayed in the rendered navigation. This can also be a call to your I18n-framework.

The url is the address that the generated item points to. You can also use url_helpers (named routes, restful routes helper, url_for, etc). url is optional - items without URLs should not be rendered as links.

The options can be used to specify the following things:

  • any html_attributes - will be included in the rendered navigation item (e.g. id, class etc.)

  • :if - Specifies a proc to call to determine if the item should be rendered (e.g. if: Proc.new { current_user.admin? }). The proc should evaluate to a true or false value and is evaluated in the context of the view.

  • :unless - Specifies a proc to call to determine if the item should not be rendered (e.g. unless: Proc.new { current_user.admin? }). The proc should evaluate to a true or false value and is evaluated in the context of the view.

  • :method - Specifies the http-method for the generated link - default is :get.

  • :highlights_on - if autohighlighting is turned off and/or you want to explicitly specify when the item should be highlighted, you can set a regexp which is matched againstthe current URI.

The block - if specified - will hold the item’s sub_navigation.



64
65
66
67
68
# File 'lib/simple_navigation/item_container.rb', line 64

def item(key, name, url = nil, options = {}, &block)
  return unless should_add_item?(options)
  item = Item.new(self, key, name, url, options, &block)
  add_item item, options
end

#level_for_item(navi_key) ⇒ Object

Returns the level of the item specified by navi_key. Recursively works its way down the item’s sub_navigations if the desired item is not found directly in this container’s items. Returns nil if item cannot be found.



89
90
91
92
93
94
95
96
97
98
# File 'lib/simple_navigation/item_container.rb', line 89

def level_for_item(navi_key)
  return level if self[navi_key]

  items.each do |item|
    next unless item.sub_navigation
    level = item.sub_navigation.level_for_item(navi_key)
    return level if level
  end
  return nil
end

#render(options = {}) ⇒ Object

Renders the items in this ItemContainer using the configured renderer.

The options are the same as in the view’s render_navigation call (they get passed on)



104
105
106
# File 'lib/simple_navigation/item_container.rb', line 104

def render(options = {})
  renderer_instance(options).render(self)
end

#selected?Boolean

Returns true if any of this container’s items is selected.

Returns:

  • (Boolean)


110
111
112
# File 'lib/simple_navigation/item_container.rb', line 110

def selected?
  items.any?(&:selected?)
end

#selected_itemObject

Returns the currently selected item, nil if no item is selected.



116
117
118
# File 'lib/simple_navigation/item_container.rb', line 116

def selected_item
  items.find(&:selected?)
end