# -*- coding: utf-8 -*- module BreadcrumbsHelper # This returns the html code for an unordered list containing the # bread crumb elements. # def breadcrumb_ul cached_breadcrumb_ul end def cached_breadcrumb_ul return cached_breadcrumb_ul_for_navable @navable if @navable return breadcrumb_ul_for_navables @navables if @navables end def cached_breadcrumb_ul_for_navable(navable) Rails.cache.fetch([navable, 'breadcrumb_ul_for_navable', navable.ancestors_cache_key]) { breadcrumb_ul_for_navable(navable) } end def breadcrumb_ul_for_navable( navable ) content_tag :ul do breadcrumbs = navable.nav_node.breadcrumbs # => [ { title: 'foo', navable: ... }, ... ] breadcrumb_lis_for_breadcrumb_hashes( breadcrumbs ) end end def breadcrumb_ul_for_navables( navables = [] ) breadcrumbs = navables.collect do |navable| breadcrumb = { title: navable.title, navable: navable } end content_tag :ul do breadcrumb_lis_for_breadcrumb_hashes( breadcrumbs ) end end def breadcrumb_lis_for_breadcrumb_hashes( breadcrumbs ) breadcrumbs.collect do |breadcrumb| css_class = "crumb" css_class = "root crumb" if breadcrumb == breadcrumbs.first css_class = "last crumb" if breadcrumb == breadcrumbs.last css_class += " slim" if breadcrumb[ :slim ] c = content_tag :li, :class => css_class do # Do not use turbolinks for external links, since they are directed by the PagesController. # The redirect to external sites causes a 'forbidden' error when using turbolinks. # if breadcrumb[:navable].kind_of?(Page) && breadcrumb[:navable].redirect_to.kind_of?(String) link_options = {'data-no-turbolink' => true} else link_options = {} end link_to breadcrumb[ :title ], breadcrumb[ :navable ], link_options end unless breadcrumb == breadcrumbs.last c+= content_tag :li, " ".html_safe, :class => "crumb sep" end c end.join.html_safe end end