summaryrefslogtreecommitdiff
path: root/app/helpers/navigation_helper.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/helpers/navigation_helper.rb')
-rw-r--r--app/helpers/navigation_helper.rb84
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