Skip to content

Instantly share code, notes, and snippets.

@dmauldin
Created June 3, 2010 18:01
Show Gist options
  • Select an option

  • Save dmauldin/424236 to your computer and use it in GitHub Desktop.

Select an option

Save dmauldin/424236 to your computer and use it in GitHub Desktop.
def primary_and_secondary_nav
return if anonymous? && !allowed?(:navigate_site_anonymously)
items = lis(children_of_nav(:primary),
:selected => lambda { |i| selected_nav?(i) }) do |menu|
link_to_nav(menu)
end
output = ul(items, :id => :primary_nav)
selected = children_of_nav(:primary).detect { |i| selected_nav?(i) }
if controller.always_render_subnav? ||
(selected && logged_in? && controller.render_subnav?)
subitems = lis(children_of_nav(selected),
:selected => lambda { |i| selected_nav?(i) }) do |menu|
link_to_nav(menu)
end
unless subitems.blank?
output << ul(subitems, :id => :secondary_nav)
end
end
output
end
def lis(*items, &block)
dynaclasses = items.extract_options!
returning([]) do |lis|
items.flatten.every do |item, first, last|
options = {}
classes = []
dynaclasses.each do |klass, cond|
visible = cond.is_a?(Proc) ? cond.call(item) : cond
classes << klass if visible
end
classes << :first if first
classes << :last if last
options[:class] = classes.flatten.compact.join(" ") unless classes.blank?
lis << li(block_given? ? yield(item) : item, options)
end
end
end
def children_of_nav(key)
(key.is_a?(Navigation::Menu) ? key : Navigation.menus[key]).children.visible(self)
end
def link_to_nav(menu)
link_to(span(menu.text(self)), menu.href(self), :target => menu.target(self))
end
def selected_nav?(menu)
menu.child_of_path?(navigation)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment