diff options
Diffstat (limited to 'app/helpers/navigation_helper.rb')
-rw-r--r-- | app/helpers/navigation_helper.rb | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/app/helpers/navigation_helper.rb b/app/helpers/navigation_helper.rb new file mode 100644 index 0000000..8582391 --- /dev/null +++ b/app/helpers/navigation_helper.rb @@ -0,0 +1,84 @@ +module NavigationHelper + + def has_side_column? + second_level_children_count = Menu.menu.submenu(current_page_path.first).try(:size) + if second_level_children_count.nil? + false + else + second_level_children_count > 1 + end + end + + def top_level_navigation_links + haml do + first = 'first' + Menu.menu.each do |item| + active = current_page_path.first == item.name ? 'active' : '' + haml 'li.tab', :class => first do + haml 'a.tab', I18n.t('pages.' + item.name), :href => menu_item_path(item), :class => active + end + first = '' + end + end + end + + def side_column_navigation_links + if menu = Menu.menu.submenu(current_page_path.first) + haml do + haml 'ul.nav.nav-tabs.nav-stacked' do + display_menu(menu, 1) + end + end + end + end + + def act_as(page) + page = StaticPage.find(page) + @current_page_path = page.path + render_page(page) + end + + private + + def menu_item_path(item) + "/#{I18n.locale}/#{item.path.join('/')}" + end + + def display_menu(menu, level=0) + menu.each do |item| + haml 'li', :class => path_active(current_page_path, item) do + haml 'a', I18n.t('pages.'+item.name), :href => menu_item_path(item), :class => "level#{level}" + end + display_menu(item.submenu, level+1) + end + end + + def path_active(page_path, menu_item) + array_starts_with(page_path, menu_item.path) ? 'active' : '' + end + + def current_page_path + @current_page_path ||= begin + if @page + @page.path + elsif params[:page].is_a? String + params[:page].split('/') + else + [] + end + end + end + + # + # returns true if first part of array_long contains array_short + # + def array_starts_with(array_long, array_short) + array_short.length.times do |i| + if array_short[i] != array_long[i] + return false + end + end + return true + end + +end |