Module: SimpleNavigation::Helpers
- Defined in:
- lib/simple_navigation/helpers.rb
Overview
View helpers to render the navigation.
Use render_navigation as following to render your navigation:
-
call
render_navigation
without :level option to render your complete navigation as nested tree. -
call
render_navigation(level: x)
to render a specific navigation level (e.g. level: 1 to render your primary navigation, level: 2 to render the sub navigation and so forth) -
call
render_navigation(:level => 2..3)
to render navigation levels 2 and 3).
For example, you could use render_navigation(level: 1) to render your primary navigation as tabs and render_navigation(level: 2..3) to render the rest of the navigation as a tree in a sidebar.
Examples (using Haml)
#primary_navigation= render_navigation(level: 1)
#sub_navigation= render_navigation(level: 2)
#nested_navigation= render_navigation
#top_navigation= render_navigation(level: 1..2)
#sidebar_navigation= render_navigation(level: 3)
Class Method Summary collapse
Instance Method Summary collapse
-
#active_navigation_item(options = {}, value_for_nil = nil) ⇒ Object
Returns the currently active navigation item belonging to the specified level.
-
#active_navigation_item_container(options = {}, &block) ⇒ Object
Returns the currently active item container belonging to the specified level.
-
#active_navigation_item_key(options = {}) ⇒ Object
Returns the key of the currently active navigation item belonging to the specified level.
-
#active_navigation_item_name(options = {}) ⇒ Object
Returns the name of the currently active navigation item belonging to the specified level.
-
#render_navigation(options = {}, &block) ⇒ Object
Renders the navigation according to the specified options-hash.
Class Method Details
.apply_defaults(options) ⇒ Object
43 44 45 46 |
# File 'lib/simple_navigation/helpers.rb', line 43 def self.apply_defaults() [:level] = .delete(:levels) if [:levels] { context: :default, level: :all }.merge() end |
.load_config(options, includer, &block) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/simple_navigation/helpers.rb', line 27 def self.load_config(, includer, &block) context = .delete(:context) SimpleNavigation.init_adapter_from includer SimpleNavigation.load_config context SimpleNavigation::Configuration.eval_config context if block_given? || [:items] SimpleNavigation.config.items([:items], &block) end unless SimpleNavigation. fail 'no primary navigation defined, either use a navigation config ' \ 'file or pass items directly to render_navigation' end end |
Instance Method Details
#active_navigation_item(options = {}, value_for_nil = nil) ⇒ Object
Returns the currently active navigation item belonging to the specified level.
The following options are supported:
-
:level
- defaults to :all which returns the most specific/deepest selected item (the leaf). Specify a specific level to only look for the selected item in the specified level of navigation (e.g. level: 1 for primary_navigation, etc). -
:context
- specifies the context for which you would like to find the active navigation item. Defaults to :default which loads the default navigation.rb (i.e. config/navigation.rb). If you specify a context then the plugin tries to load the configuration file for that context, e.g. if you callactive_navigation_item_name(context: :admin)
the file config/admin_navigation.rb will be loaded and used for searching the active item. -
:items
- you can specify the items directly (e.g. if items are dynamically generated from database). See SimpleNavigation::ItemsProvider for documentation on what to provide as items.
Returns the supplied value_for_nil
object (nil
by default) if no active item can be found for the specified options
140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/simple_navigation/helpers.rb', line 140 def ( = {}, value_for_nil = nil) if [:level].nil? || [:level] == :all [:level] = :leaves end container = () if container && (item = container.selected_item) block_given? ? yield(item) : item else value_for_nil end end |
#active_navigation_item_container(options = {}, &block) ⇒ Object
Returns the currently active item container belonging to the specified level.
The following options are supported:
-
:level
- defaults to :all which returns the least specific/shallowest selected item. Specify a specific level to only look for the selected item in the specified level of navigation (e.g. level: 1 for primary_navigation, etc). -
:context
- specifies the context for which you would like to find the active navigation item. Defaults to :default which loads the default navigation.rb (i.e. config/navigation.rb). If you specify a context then the plugin tries to load the configuration file for that context, e.g. if you callactive_navigation_item_name(context: :admin)
the file config/admin_navigation.rb will be loaded and used for searching the active item. -
:items
- you can specify the items directly (e.g. if items are dynamically generated from database). See SimpleNavigation::ItemsProvider for documentation on what to provide as items.
Returns nil
if no active item container can be found
175 176 177 178 179 |
# File 'lib/simple_navigation/helpers.rb', line 175 def ( = {}, &block) = SimpleNavigation::Helpers.apply_defaults() SimpleNavigation::Helpers.load_config(, self, &block) SimpleNavigation.active_item_container_for([:level]) end |
#active_navigation_item_key(options = {}) ⇒ Object
Returns the key of the currently active navigation item belonging to the specified level.
See Helpers#active_navigation_item for supported options.
Returns nil
if no active item can be found for the specified options
111 112 113 |
# File 'lib/simple_navigation/helpers.rb', line 111 def ( = {}) (, &:key) end |
#active_navigation_item_name(options = {}) ⇒ Object
Returns the name of the currently active navigation item belonging to the specified level.
See Helpers#active_navigation_item for supported options.
Returns an empty string if no active item can be found for the specified options
98 99 100 101 102 |
# File 'lib/simple_navigation/helpers.rb', line 98 def ( = {}) (, '') do |item| item.name(apply_generator: false) end end |
#render_navigation(options = {}, &block) ⇒ Object
Renders the navigation according to the specified options-hash.
The following options are supported:
-
:level
- defaults to :all which renders the the sub_navigation for an active primary_navigation inside that active primary_navigation item. Specify a specific level to only render that level of navigation (e.g. level: 1 for primary_navigation, etc). Specifiy a Range of levels to render only those specific levels (e.g. level: 1..2 to render both your first and second levels, maybe you want to render your third level somewhere else on the page) -
:expand_all
- defaults to false. If set to true the all specified levels will be rendered as a fully expanded tree (always open). This is useful for javascript menus like Superfish. -
:context
- specifies the context for which you would render the navigation. Defaults to :default which loads the default navigation.rb (i.e. config/navigation.rb). If you specify a context then the plugin tries to load the configuration file for that context, e.g. if you callrender_navigation(context: :admin)
the file config/admin_navigation.rb will be loaded and used for rendering the navigation. -
:items
- you can specify the items directly (e.g. if items are dynamically generated from database). See SimpleNavigation::ItemsProvider for documentation on what to provide as items. -
:renderer
- specify the renderer to be used for rendering the navigation. Either provide the Class or a symbol matching a registered renderer. Defaults to :list (html list renderer).
Instead of using the :items
option, a block can be passed to specify the items dynamically
Examples
do ||
.item :posts, "Posts", posts_path
end
86 87 88 89 |
# File 'lib/simple_navigation/helpers.rb', line 86 def ( = {}, &block) container = (, &block) container && container.render() end |