Navigation made easy
System wide
gem install nav
In your Gemfile
gem 'nav'
Nav is writte for ActionView::Base and can be used in your rails views like so:
<%= nav do |n| %>
<% n.action "Home", "/" %>
<% n.action "Login", login_url %>
<% end %>
When rendered, this generates the following:
<ul>
<li class="first current first_current">
<a href="/">Home</a>
</li>
<li class="last after_current last_after_current">
<a href="/login">Login</a>
</li>
</ul>
It will determine the current page you are on and add the current
class to the
before_current
and after_current
Additionally, Nav will mark the first and last first
and last
. Like so,
you can apply styles accordingly.
You can give any possible html option to nav, like id, classes, etc.
<%= nav :class => 'main' do |n| %>
...
<% end %>
Which results in
<ul class='main'>
...
</ul>
You are able to add specific behaviour when defining an action
. For instance, if you want to disable a specific
element, you may pass disabled
to it. It will add a disabled class to the li
element.
<%= nav do |n| %>
<% n.action "Disabled", "/", :disabled => true %>
<% end %>
In case want to define which of the elements is the current one. You can pass current
as
option. This can be done in various ways.
<%= nav do |n| %>
<% n.action "My special current", "/", :current => true %>
<% end %>
Pass a regular expression to the :current: argument. For instance, the following will mark any url as current that has "account", followed by a "/" and any type of numeric value, like "account/1" or "user/account/123". However, "account/my" will not match.
<%= nav do |n| %>
<% n.action "My special current", "/", :current => /account\/\d+/ %>
<% end %>
Pass a Proc in order to determine the current on the fly. Make sure that it returns
true
or false
.
<%= nav do |n| %>
<% n.action "My special current", "/", :current => Proc.new { !current_user.nil? } %>
<% end %>
If you prefer to not use links for your navigation or simply want to customize your
navigation, you may do so by padding a block to the action
.
You can use any rails view helpers or just good old plain html. The following examples are equivalent:
<%= nav do |n| %>
<% n.action :class => 'customized' do %>
<span>Home</span>
<% end %>
<% end %>
<%= nav do |n| %>
<% n.action :class => 'customized' do %>
<%= content_tag :span, 'Home' %>
<% end %>
<% end %>
... and will result in:
<ul>
<li class="last">
<span>Home</span>
</li>
</ul>
Copyright (c) 2011-2012 Rudolf Schmidt, released under the MIT license