Module: RailsAdmin::ApplicationHelper

Includes:
I18nSupport
Included in:
MainController
Defined in:
app/helpers/rails_admin/application_helper.rb

Instance Method Summary collapse

Methods included from I18nSupport

#abbr_day_names, #abbr_month_names, #date_format, #day_names, #month_names

Instance Method Details

#action(key, abstract_model = nil, object = nil) ⇒ Object



18
19
20
# File 'app/helpers/rails_admin/application_helper.rb', line 18

def action(key, abstract_model = nil, object = nil)
  RailsAdmin::Config::Actions.find(key, { :controller => self.controller, :abstract_model => abstract_model, :object => object })
end

#actions(scope = :all, abstract_model = nil, object = nil) ⇒ Object



22
23
24
# File 'app/helpers/rails_admin/application_helper.rb', line 22

def actions(scope = :all, abstract_model = nil, object = nil)
  RailsAdmin::Config::Actions.all(scope, { :controller => self.controller, :abstract_model => abstract_model, :object => object })
end

#authorized?(*args) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
# File 'app/helpers/rails_admin/application_helper.rb', line 8

def authorized?(*args)
  @authorization_adapter.nil? || @authorization_adapter.authorized?(*args)
end


72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'app/helpers/rails_admin/application_helper.rb', line 72

def breadcrumb action = @action, acc = []
  begin
    (parent_actions ||= []) << action
  end while action.breadcrumb_parent && (action = action(*action.breadcrumb_parent))
  parent_actions << action(:dashboard) if parent_actions.last.key != :dashboard # in case chain is interrupted

  (:ul, :class => "breadcrumb") do
    parent_actions.map do |a|
      am = a.send(:eval, 'bindings[:abstract_model]')
      o = a.send(:eval, 'bindings[:object]')
      (:li, :class => "#{"active" if current_action?(a, am, o)}") do
        if a.http_methods.include?(:get)
          link_to wording_for(:breadcrumb, a, am, o), { :action => a.action_name, :controller => 'rails_admin/main', :model_name => am.try(:to_param), :id => (o.try(:persisted?) && o.try(:id) || nil) }, :class => 'pjax'
        else
          (:span, wording_for(:breadcrumb, a, am, o))
        end
      end
    end.reverse.join('<span class="divider">/</span>').html_safe
  end
end

#bulk_menu(abstract_model = @abstract_model) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'app/helpers/rails_admin/application_helper.rb', line 109

def bulk_menu abstract_model = @abstract_model
  actions = actions(:bulkable, abstract_model)
  return '' if actions.empty?
   :li, { :class => 'dropdown', :style => 'float:right' } do
    (:a, { :class => 'dropdown-toggle', :'data-toggle' => "dropdown", :href => '#' }) { t('admin.misc.bulk_menu_title').html_safe + '<b class="caret"></b>'.html_safe } +
    (:ul, :class => 'dropdown-menu', :style => 'left:auto; right:0;') do
      actions.map do |action|
         :li do
          link_to_function wording_for(:bulk_link, action), "jQuery('#bulk_action').val('#{action.action_name}'); jQuery('#bulk_form').submit()"
        end
      end.join.html_safe
    end
  end
end

#current_action?(action, abstract_model = @abstract_model, object = @object) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
# File 'app/helpers/rails_admin/application_helper.rb', line 12

def current_action?(action, abstract_model = @abstract_model, object = @object)
  @action.custom_key == action.custom_key && 
  abstract_model.try(:to_param) == @abstract_model.try(:to_param) && 
  (@object.try(:persisted?) ? @object.id == object.try(:id) : !object.try(:persisted?))
end


26
27
28
29
30
31
# File 'app/helpers/rails_admin/application_helper.rb', line 26

def edit_user_link
  return nil unless authorized?(:edit, _current_user.class, _current_user) && _current_user.respond_to?(:email)
  return nil unless abstract_model = RailsAdmin.config(_current_user.class).abstract_model
  return nil unless edit_action = RailsAdmin::Config::Actions.find(:edit, {:controller => self.controller, :abstract_model => abstract_model, :object => _current_user })
  link_to _current_user.email, url_for(:action => edit_action.action_name, :model_name => abstract_model.to_param, :id => _current_user.id, :controller => 'rails_admin/main')
end


45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'app/helpers/rails_admin/application_helper.rb', line 45

def main_navigation
  nodes_stack = RailsAdmin::Config.visible_models(:controller => self.controller)      
  nodes_stack.group_by(&:navigation_label).map do |navigation_label, nodes|

    %{<li class='nav-header'>#{navigation_label || t('admin.misc.navigation')}</li>}.html_safe +
    nodes.select{|n| n.parent.nil? || !n.parent.to_s.in?(nodes_stack.map{|c| c.abstract_model.model_name }) }.map do |node|
      %{
        <li data-model="#{node.abstract_model.to_param}">
          <a class="pjax" href="#{url_for(:action => :index, :controller => 'rails_admin/main', :model_name => node.abstract_model.to_param)}">#{node.label_plural}</a>
        </li>
        #{navigation(nodes_stack, nodes_stack.select{|n| n.parent.to_s == node.abstract_model.model_name}, 1)}
      }.html_safe
    end.join.html_safe
  end.join.html_safe
end

parent => :root, :collection, :member



94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'app/helpers/rails_admin/application_helper.rb', line 94

def menu_for(parent, abstract_model = nil, object = nil, only_icon = false) # perf matters here (no action view trickery)
  actions = actions(parent, abstract_model, object).select{ |a| a.http_methods.include?(:get) }
  actions.map do |action|
    wording = wording_for(:menu, action)
    %{
      <li data-original-title="#{wording}" rel="#{'tooltip' if only_icon}" class="icon #{action.key}_#{parent}_link #{'active' if current_action?(action)}">
        <a class="pjax" href="#{url_for({ :action => action.action_name, :controller => 'rails_admin/main', :model_name => abstract_model.try(:to_param), :id => (object.try(:persisted?) && object.try(:id) || nil) })}">
          <i class="#{action.link_icon}"></i>
          <span#{only_icon ? " style='display:none'" : ""}>#{wording}</span>
        </a>
      </li>
    }
  end.join.html_safe
end


61
62
63
64
65
66
67
68
69
70
# File 'app/helpers/rails_admin/application_helper.rb', line 61

def navigation nodes_stack, nodes, level
  nodes.map do |node|
    %{
      <li data-model="#{node.abstract_model.to_param}">
        <a class="pjax nav-level-#{level}" href="#{url_for(:action => :index, :controller => 'rails_admin/main', :model_name => node.abstract_model.to_param)}">#{node.label_plural}</a>
      </li>
      #{navigation(nodes_stack, nodes_stack.select{ |n| n.parent.to_s == node.abstract_model.model_name}, level + 1)}
    }.html_safe
  end.join
end

#wording_for(label, action = @action, abstract_model = @abstract_model, object = @object) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'app/helpers/rails_admin/application_helper.rb', line 33

def wording_for(label, action = @action, abstract_model = @abstract_model, object = @object)
  model_config = abstract_model.try(:config)
  object = abstract_model && object.is_a?(abstract_model.model) ? object : nil
  action = RailsAdmin::Config::Actions.find(action.to_sym) if (action.is_a?(Symbol) || action.is_a?(String))

  I18n.t("admin.actions.#{action.i18n_key}.#{label}",
    :model_label => model_config.try(:label),
    :model_label_plural => model_config.try(:label_plural),
    :object_label => model_config && object.try(model_config.object_label_method)
  )
end