Class: SimpleNavigation::ItemContainer
- Inherits:
-
Object
- Object
- SimpleNavigation::ItemContainer
- Defined in:
- lib/simple_navigation/item_container.rb
Overview
Holds the Items for a navigation ‘level’.
Instance Attribute Summary collapse
-
#auto_highlight ⇒ Object
Returns the value of attribute auto_highlight.
- #dom_attributes ⇒ Object
-
#dom_class ⇒ Object
Returns the value of attribute dom_class.
-
#dom_id ⇒ Object
Returns the value of attribute dom_id.
-
#items ⇒ Object
Returns the value of attribute items.
-
#level ⇒ Object
readonly
Returns the value of attribute level.
-
#renderer ⇒ Object
Returns the value of attribute renderer.
-
#selected_class ⇒ Object
Returns the value of attribute selected_class.
Instance Method Summary collapse
-
#[](navi_key) ⇒ Object
Returns the Item with the specified key, nil otherwise.
-
#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).
-
#active_leaf_container ⇒ Object
Returns the deepest possible active item_container.
-
#empty? ⇒ Boolean
Returns true if there are no items defined for this container.
-
#initialize(level = 1) ⇒ ItemContainer
constructor
:nodoc:.
-
#item(key, name, url = nil, options = {}, &block) ⇒ Object
Creates a new navigation item.
-
#level_for_item(navi_key) ⇒ Object
Returns the level of the item specified by navi_key.
-
#render(options = {}) ⇒ Object
Renders the items in this ItemContainer using the configured renderer.
-
#selected? ⇒ Boolean
Returns true if any of this container’s items is selected.
-
#selected_item ⇒ Object
Returns the currently selected item, nil if no item is selected.
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_highlight ⇒ Object
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_attributes ⇒ Object
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_class ⇒ Object
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_id ⇒ Object
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 |
#items ⇒ Object
Returns the value of attribute items.
10 11 12 |
# File 'lib/simple_navigation/item_container.rb', line 10 def items @items end |
#level ⇒ Object (readonly)
Returns the value of attribute level.
10 11 12 |
# File 'lib/simple_navigation/item_container.rb', line 10 def level @level end |
#renderer ⇒ Object
Returns the value of attribute renderer.
4 5 6 |
# File 'lib/simple_navigation/item_container.rb', line 4 def renderer @renderer end |
#selected_class ⇒ Object
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_item..active_item_container_for(desired_level) end end |
#active_leaf_container ⇒ Object
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_item..active_leaf_container else self end end |
#empty? ⇒ Boolean
Returns true if there are no items defined for this container.
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, = {}, &block) return unless should_add_item?() item = Item.new(self, key, name, url, , &block) add_item item, 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. level = item..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( = {}) renderer_instance().render(self) end |
#selected? ⇒ Boolean
Returns true if any of this container’s items is selected.
110 111 112 |
# File 'lib/simple_navigation/item_container.rb', line 110 def selected? items.any?(&:selected?) end |
#selected_item ⇒ Object
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 |