Module: Alchemy::Admin::NavigationHelper

Included in:
BaseHelper
Defined in:
app/helpers/alchemy/admin/navigation_helper.rb

Overview

This module contains helper methods for rendering the admin navigation.

Instance Method Summary collapse

Instance Method Details

#alchemy_main_navigation_entry(alchemy_module) ⇒ Object

Renders one admin main navigation entry

Parameters:

  • alchemy_module (Hash)

    The Hash representing a Alchemy module



13
14
15
16
17
18
19
20
# File 'app/helpers/alchemy/admin/navigation_helper.rb', line 13

def alchemy_main_navigation_entry(alchemy_module)
  validate_controller_existence!(alchemy_module)
  render(
    "alchemy/admin/partials/main_navigation_entry",
    alchemy_module: alchemy_module,
    navigation: alchemy_module["navigation"]
  )
end

#entry_active?(entry) ⇒ Boolean

Returns true if given navi entry is in params controller and action

Example

<%= entry_active?({controller: 'admin/users', action: 'index'}) %>

Parameters:

  • A (Hash)

    Alchemy module definition navigation entry

Returns:

  • (Boolean)


63
64
65
# File 'app/helpers/alchemy/admin/navigation_helper.rb', line 63

def entry_active?(entry)
  is_entry_controller_active?(entry) && is_entry_action_active?(entry)
end

CSS classes for main navigation entry.



47
48
49
50
51
52
53
# File 'app/helpers/alchemy/admin/navigation_helper.rb', line 47

def main_navigation_css_classes(navigation)
  [
    "main_navi_entry",
    admin_mainnavi_active?(navigation) ? "active" : nil,
    navigation.key?("sub_navigation") ? "has_sub_navigation" : nil
  ].compact
end

Used for checking the main navi permissions

To let your module be navigatable by the user you have to provide an Ability for it.

Example:

# module.yml
name: 'my_module'
navigation: {
  controller: 'my/admin/posts'
  action: 'index'
}

# ability.rb
can :index, :my_admin_posts


38
39
40
41
42
43
# File 'app/helpers/alchemy/admin/navigation_helper.rb', line 38

def navigate_module(navigation)
  [
    navigation["action"].to_sym,
    navigation["controller"].to_s.gsub(/\A\//, "").tr("/", "_").to_sym
  ]
end

#sorted_alchemy_modulesObject

Alchemy modules for main navigation.

Sorted by position attribute, if given.



106
107
108
109
110
111
112
113
114
115
116
117
# File 'app/helpers/alchemy/admin/navigation_helper.rb', line 106

def sorted_alchemy_modules
  sorted = []
  not_sorted = []
  alchemy_modules.map do |m|
    if m["position"].blank?
      not_sorted << m
    else
      sorted << m
    end
  end
  sorted.sort_by { |m| m["position"] } + not_sorted
end

#url_for_module(alchemy_module) ⇒ Object

Returns url for given Alchemy module.

If the module is inside an engine it calls the url_for helper on the engines routing proxy.

If the module is inside the host rails app it calls the url_for helper on the main_app routing proxy.

Parameters:

  • A (Hash)

    Alchemy module definition



76
77
78
79
80
81
# File 'app/helpers/alchemy/admin/navigation_helper.rb', line 76

def url_for_module(alchemy_module)
  route_from_engine_or_main_app(
    alchemy_module["engine_name"],
    url_options_for_module(alchemy_module)
  )
end

#url_for_module_sub_navigation(navigation) ⇒ Object

Returns url for given Alchemy module sub navigation entry.

If the module is inside an engine it calls the url_for helper on the engines routing proxy.

If the module is inside the host rails app it calls the url_for helper on the main_app routing proxy.

Parameters:

  • A (Hash)

    Alchemy module sub navigation definition



92
93
94
95
96
97
98
99
100
# File 'app/helpers/alchemy/admin/navigation_helper.rb', line 92

def url_for_module_sub_navigation(navigation)
  alchemy_module = module_definition_for(navigation)
  return if alchemy_module.nil?

  route_from_engine_or_main_app(
    alchemy_module["engine_name"],
    url_options_for_navigation_entry(navigation)
  )
end