8582391ccd67d51fd4f938004d9a05ae90a533e2
[leap_website.git] / app / helpers / navigation_helper.rb
1 module NavigationHelper
2
3   def has_side_column?
4     second_level_children_count = Menu.menu.submenu(current_page_path.first).try(:size)
5     if second_level_children_count.nil?
6       false
7     else
8       second_level_children_count > 1
9     end
10   end
11
12   def top_level_navigation_links
13     haml do
14       first = 'first'
15       Menu.menu.each do |item|
16         active = current_page_path.first == item.name ? 'active' : ''
17         haml 'li.tab', :class => first do
18           haml 'a.tab', I18n.t('pages.' + item.name), :href => menu_item_path(item), :class => active
19         end
20         first = ''
21       end
22     end
23   end
24
25   def side_column_navigation_links
26     if menu = Menu.menu.submenu(current_page_path.first)
27       haml do
28         haml 'ul.nav.nav-tabs.nav-stacked' do
29           display_menu(menu, 1)
30         end
31       end
32     end
33   end
34
35   def act_as(page)
36     page = StaticPage.find(page)
37     @current_page_path = page.path
38     render_page(page)
39   end
40
41   private
42
43   def menu_item_path(item)
44     "/#{I18n.locale}/#{item.path.join('/')}"
45   end
46
47   def display_menu(menu, level=0)
48     menu.each do |item|
49       haml 'li', :class => path_active(current_page_path, item) do
50         haml 'a', I18n.t('pages.'+item.name), :href => menu_item_path(item), :class => "level#{level}"
51       end
52       display_menu(item.submenu, level+1)
53     end
54   end
55
56   def path_active(page_path, menu_item)
57     array_starts_with(page_path, menu_item.path) ? 'active' : ''
58   end
59
60   def current_page_path
61     @current_page_path ||= begin
62       if @page
63         @page.path
64       elsif params[:page].is_a? String
65         params[:page].split('/')
66       else
67         []
68       end
69     end
70   end
71
72   #
73   # returns true if first part of array_long contains array_short
74   #
75   def array_starts_with(array_long, array_short)
76     array_short.length.times do |i|
77       if array_short[i] != array_long[i]
78         return false
79       end
80     end
81     return true
82   end
83
84 end