obitum-rails_admin 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. data/Gemfile +1 -8
  2. data/README.md +6 -2
  3. data/app/assets/javascripts/rails_admin/custom/ui.js +5 -5
  4. data/app/assets/javascripts/rails_admin/jquery-ui-1.8.16.custom.js +4727 -4727
  5. data/app/assets/javascripts/rails_admin/jquery.colorpicker.js +484 -484
  6. data/app/assets/javascripts/rails_admin/jquery.pjax.js +250 -85
  7. data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1371 -1219
  8. data/app/assets/javascripts/rails_admin/ra.filter-box.js +30 -30
  9. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +11 -11
  10. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +40 -0
  11. data/app/assets/javascripts/rails_admin/ra.remote-form.js +41 -39
  12. data/app/assets/javascripts/rails_admin/rails_admin.js.erb +4 -3
  13. data/app/assets/javascripts/rails_admin/themes/default/ui.js +6 -6
  14. data/app/assets/javascripts/rails_admin/ui.js.coffee +44 -16
  15. data/app/assets/stylesheets/rails_admin/base/README +2 -2
  16. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +226 -113
  17. data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +1 -1
  18. data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +2 -2
  19. data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +3 -3
  20. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +36 -1
  21. data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +16 -0
  22. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.css.scss +2 -2
  23. data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +1 -1
  24. data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +2 -2
  25. data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +3 -3
  26. data/app/controllers/rails_admin/application_controller.rb +13 -18
  27. data/app/controllers/rails_admin/main_controller.rb +15 -16
  28. data/app/helpers/rails_admin/application_helper.rb +67 -41
  29. data/app/helpers/rails_admin/form_builder.rb +31 -29
  30. data/app/helpers/rails_admin/main_helper.rb +4 -4
  31. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +12 -11
  32. data/app/views/layouts/rails_admin/application.html.haml +29 -29
  33. data/app/views/rails_admin/main/_dashboard_history.html.haml +1 -1
  34. data/app/views/rails_admin/main/_delete_notice.html.haml +4 -5
  35. data/app/views/rails_admin/main/_form_colorpicker.html.haml +2 -1
  36. data/app/views/rails_admin/main/_form_datetime.html.haml +1 -1
  37. data/app/views/rails_admin/main/_form_enumeration.html.haml +1 -1
  38. data/app/views/rails_admin/main/_form_field.html.haml +1 -1
  39. data/app/views/rails_admin/main/_form_file_upload.html.haml +3 -2
  40. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +6 -4
  41. data/app/views/rails_admin/main/_form_filtering_select.html.haml +6 -5
  42. data/app/views/rails_admin/main/_form_nested_many.html.haml +41 -6
  43. data/app/views/rails_admin/main/_form_nested_one.html.haml +34 -5
  44. data/app/views/rails_admin/main/_form_text.html.haml +3 -3
  45. data/app/views/rails_admin/main/_submit_buttons.html.haml +6 -4
  46. data/app/views/rails_admin/main/bulk_delete.html.haml +7 -3
  47. data/app/views/rails_admin/main/dashboard.html.haml +4 -4
  48. data/app/views/rails_admin/main/delete.html.haml +7 -3
  49. data/app/views/rails_admin/main/edit.html.haml +1 -1
  50. data/app/views/rails_admin/main/export.html.haml +57 -53
  51. data/app/views/rails_admin/main/history.html.haml +8 -8
  52. data/app/views/rails_admin/main/index.html.haml +22 -21
  53. data/app/views/rails_admin/main/new.html.haml +1 -1
  54. data/app/views/rails_admin/main/show.html.haml +2 -2
  55. data/config/initializers/active_record_extensions.rb +2 -2
  56. data/config/initializers/haml.rb +0 -1
  57. data/config/locales/rails_admin.en.yml +5 -5
  58. data/lib/generators/rails_admin/templates/initializer.erb +7 -7
  59. data/lib/rails_admin/abstract_model.rb +36 -53
  60. data/lib/rails_admin/adapters/active_record/abstract_object.rb +32 -0
  61. data/lib/rails_admin/adapters/active_record.rb +56 -137
  62. data/lib/rails_admin/config/actions/base.rb +40 -28
  63. data/lib/rails_admin/config/actions/bulk_delete.rb +10 -11
  64. data/lib/rails_admin/config/actions/dashboard.rb +9 -5
  65. data/lib/rails_admin/config/actions/delete.rb +12 -9
  66. data/lib/rails_admin/config/actions/edit.rb +13 -9
  67. data/lib/rails_admin/config/actions/export.rb +9 -6
  68. data/lib/rails_admin/config/actions/history_index.rb +9 -5
  69. data/lib/rails_admin/config/actions/history_show.rb +9 -5
  70. data/lib/rails_admin/config/actions/index.rb +23 -13
  71. data/lib/rails_admin/config/actions/new.rb +14 -10
  72. data/lib/rails_admin/config/actions/show.rb +10 -5
  73. data/lib/rails_admin/config/actions/show_in_app.rb +9 -4
  74. data/lib/rails_admin/config/actions.rb +16 -16
  75. data/lib/rails_admin/config/configurable.rb +92 -0
  76. data/lib/rails_admin/config/fields/association.rb +6 -23
  77. data/lib/rails_admin/config/fields/base.rb +58 -40
  78. data/lib/rails_admin/config/fields/factories/belongs_to_association.rb +26 -0
  79. data/lib/rails_admin/config/fields/factories/carrierwave.rb +21 -2
  80. data/lib/rails_admin/config/fields/factories/devise.rb +9 -12
  81. data/lib/rails_admin/config/fields/factories/dragonfly.rb +13 -7
  82. data/lib/rails_admin/config/fields/factories/paperclip.rb +14 -15
  83. data/lib/rails_admin/config/fields/group.rb +16 -3
  84. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +2 -2
  85. data/lib/rails_admin/config/fields/types/carrierwave.rb +0 -9
  86. data/lib/rails_admin/config/fields/types/color.rb +3 -3
  87. data/lib/rails_admin/config/fields/types/dragonfly.rb +1 -19
  88. data/lib/rails_admin/config/fields/types/file_upload.rb +7 -11
  89. data/lib/rails_admin/config/fields/types/has_many_association.rb +1 -6
  90. data/lib/rails_admin/config/fields/types/has_one_association.rb +4 -4
  91. data/lib/rails_admin/config/fields/types/paperclip.rb +0 -18
  92. data/lib/rails_admin/config/fields/types/password.rb +2 -2
  93. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +2 -2
  94. data/lib/rails_admin/config/fields/types/text.rb +2 -2
  95. data/lib/rails_admin/config/fields.rb +7 -17
  96. data/lib/rails_admin/config/has_fields.rb +9 -9
  97. data/lib/rails_admin/config/has_groups.rb +2 -2
  98. data/lib/rails_admin/config/hideable.rb +2 -2
  99. data/lib/rails_admin/config/model.rb +23 -17
  100. data/lib/rails_admin/config/proxyable/proxy.rb +43 -0
  101. data/lib/rails_admin/config/proxyable.rb +12 -0
  102. data/lib/rails_admin/config/sections/base.rb +14 -4
  103. data/lib/rails_admin/config.rb +38 -9
  104. data/lib/rails_admin/extension.rb +1 -1
  105. data/lib/rails_admin/extensions/history/auditing_adapter.rb +6 -6
  106. data/lib/rails_admin/extensions/history/history.rb +2 -1
  107. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +13 -13
  108. data/lib/rails_admin/support/csv_converter.rb +6 -6
  109. data/lib/rails_admin/version.rb +1 -1
  110. data/lib/rails_admin.rb +0 -5
  111. data/spec/controllers/main_controller_spec.rb +7 -7
  112. data/spec/dummy_app/Gemfile +10 -7
  113. data/spec/dummy_app/Rakefile +1 -1
  114. data/spec/dummy_app/app/assets/images/rails.png +0 -0
  115. data/spec/dummy_app/app/assets/javascripts/application.js +15 -0
  116. data/spec/dummy_app/app/assets/stylesheets/application.css +13 -0
  117. data/spec/dummy_app/app/controllers/players_controller.rb +1 -1
  118. data/spec/dummy_app/app/models/cms/basic_page.rb +1 -1
  119. data/spec/dummy_app/app/models/division.rb +5 -1
  120. data/spec/dummy_app/app/models/field_test.rb +4 -4
  121. data/spec/dummy_app/app/models/nested_field_test.rb +3 -0
  122. data/spec/dummy_app/app/models/player.rb +3 -3
  123. data/spec/dummy_app/app/views/layouts/application.html.erb +3 -2
  124. data/spec/dummy_app/app/views/players/show.html.haml +1 -1
  125. data/spec/dummy_app/config/application.rb +20 -5
  126. data/spec/dummy_app/config/database.yml +5 -2
  127. data/spec/dummy_app/config/environments/development.rb +11 -1
  128. data/spec/dummy_app/config/environments/production.rb +19 -3
  129. data/spec/dummy_app/config/environments/test.rb +5 -7
  130. data/spec/dummy_app/config/initializers/devise.rb +6 -0
  131. data/spec/dummy_app/config/initializers/inflections.rb +5 -0
  132. data/spec/dummy_app/config/initializers/secret_token.rb +1 -1
  133. data/spec/dummy_app/{foo/test/dummy/config → config}/initializers/wrap_parameters.rb +1 -1
  134. data/spec/dummy_app/config/routes.rb +1 -1
  135. data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +35 -5
  136. data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +1 -1
  137. data/spec/dummy_app/doc/README_FOR_APP +2 -0
  138. data/spec/dummy_app/public/404.html +26 -0
  139. data/spec/dummy_app/{foo/test/dummy/public → public}/422.html +0 -0
  140. data/spec/dummy_app/{foo/test/dummy/public → public}/500.html +0 -1
  141. data/spec/dummy_app/public/favicon.ico +0 -0
  142. data/spec/dummy_app/public/robots.txt +5 -0
  143. data/spec/helpers/application_helper_spec.rb +107 -42
  144. data/spec/{requests → integration}/authorization/cancan_spec.rb +4 -5
  145. data/spec/{requests → integration}/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +0 -0
  146. data/spec/{requests → integration}/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +3 -16
  147. data/spec/{requests → integration}/basic/create/rails_admin_basic_create_spec.rb +0 -2
  148. data/spec/{requests → integration}/basic/create/rails_admin_namespaced_model_create_spec.rb +0 -16
  149. data/spec/{requests → integration}/basic/delete/rails_admin_basic_delete_spec.rb +0 -0
  150. data/spec/{requests → integration}/basic/destroy/rails_admin_basic_destroy_spec.rb +0 -0
  151. data/spec/{requests → integration}/basic/edit/rails_admin_basic_edit_spec.rb +2 -2
  152. data/spec/{requests → integration}/basic/export/rails_admin_basic_export_spec.rb +1 -1
  153. data/spec/{requests → integration}/basic/list/rails_admin_basic_list_spec.rb +12 -38
  154. data/spec/{requests → integration}/basic/new/rails_admin_basic_new_spec.rb +0 -0
  155. data/spec/{requests → integration}/basic/new/rails_admin_namespaced_model_new_spec.rb +0 -0
  156. data/spec/{requests → integration}/basic/show/rails_admin_basic_show_spec.rb +1 -2
  157. data/spec/{requests → integration}/basic/update/rails_admin_basic_update_spec.rb +2 -2
  158. data/spec/{requests → integration}/config/edit/rails_admin_config_edit_spec.rb +65 -24
  159. data/spec/{requests → integration}/config/list/rails_admin_config_list_spec.rb +2 -2
  160. data/spec/{requests → integration}/config/show/rails_admin_config_show_spec.rb +20 -0
  161. data/spec/{requests → integration}/history/rails_admin_history_spec.rb +3 -3
  162. data/spec/{requests → integration}/rails_admin_spec.rb +8 -41
  163. data/spec/{requests → integration}/relation_spec.rb +0 -0
  164. data/spec/spec_helper.rb +13 -31
  165. data/spec/{lib → unit/adapters/active_record}/abstract_object_spec.rb +17 -5
  166. data/spec/unit/adapters/active_record_spec.rb +53 -0
  167. data/spec/{requests/actions.rb → unit/config/actions_spec.rb} +47 -31
  168. data/spec/unit/config/fields/base_spec.rb +291 -0
  169. data/spec/unit/config/model_spec.rb +75 -0
  170. data/spec/unit/config/sections_spec.rb +123 -0
  171. data/spec/{lib/rails_admin_spec.rb → unit/config_spec.rb} +65 -93
  172. metadata +127 -223
  173. data/app/assets/javascripts/rails_admin/jquery_nested_form.js +0 -58
  174. data/app/views/layouts/rails_admin/_navigation.html.haml +0 -17
  175. data/lib/rails_admin/abstract_object.rb +0 -28
  176. data/lib/rails_admin/config/base.rb +0 -111
  177. data/lib/rails_admin/config/proxy.rb +0 -40
  178. data/lib/rails_admin/generic_support.rb +0 -18
  179. data/spec/dummy_app/config/initializers/quiet_assets.rb +0 -10
  180. data/spec/dummy_app/foo/Gemfile +0 -17
  181. data/spec/dummy_app/foo/MIT-LICENSE +0 -20
  182. data/spec/dummy_app/foo/README.rdoc +0 -3
  183. data/spec/dummy_app/foo/Rakefile +0 -39
  184. data/spec/dummy_app/foo/app/assets/javascripts/foo/application.js +0 -9
  185. data/spec/dummy_app/foo/app/assets/stylesheets/foo/application.css +0 -7
  186. data/spec/dummy_app/foo/app/controllers/foo/application_controller.rb +0 -4
  187. data/spec/dummy_app/foo/app/helpers/foo/application_helper.rb +0 -4
  188. data/spec/dummy_app/foo/app/models/foo/bar.rb +0 -4
  189. data/spec/dummy_app/foo/app/views/layouts/foo/application.html.erb +0 -14
  190. data/spec/dummy_app/foo/config/routes.rb +0 -2
  191. data/spec/dummy_app/foo/foo.gemspec +0 -23
  192. data/spec/dummy_app/foo/lib/foo/engine.rb +0 -5
  193. data/spec/dummy_app/foo/lib/foo/version.rb +0 -3
  194. data/spec/dummy_app/foo/lib/foo.rb +0 -4
  195. data/spec/dummy_app/foo/lib/tasks/foo_tasks.rake +0 -4
  196. data/spec/dummy_app/foo/script/rails +0 -6
  197. data/spec/dummy_app/foo/test/dummy/Rakefile +0 -7
  198. data/spec/dummy_app/foo/test/dummy/app/assets/javascripts/application.js +0 -9
  199. data/spec/dummy_app/foo/test/dummy/app/assets/stylesheets/application.css +0 -7
  200. data/spec/dummy_app/foo/test/dummy/app/controllers/application_controller.rb +0 -3
  201. data/spec/dummy_app/foo/test/dummy/app/helpers/application_helper.rb +0 -2
  202. data/spec/dummy_app/foo/test/dummy/app/views/layouts/application.html.erb +0 -14
  203. data/spec/dummy_app/foo/test/dummy/config/application.rb +0 -45
  204. data/spec/dummy_app/foo/test/dummy/config/boot.rb +0 -10
  205. data/spec/dummy_app/foo/test/dummy/config/database.yml +0 -25
  206. data/spec/dummy_app/foo/test/dummy/config/environment.rb +0 -5
  207. data/spec/dummy_app/foo/test/dummy/config/environments/development.rb +0 -30
  208. data/spec/dummy_app/foo/test/dummy/config/environments/production.rb +0 -60
  209. data/spec/dummy_app/foo/test/dummy/config/environments/test.rb +0 -39
  210. data/spec/dummy_app/foo/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  211. data/spec/dummy_app/foo/test/dummy/config/initializers/inflections.rb +0 -10
  212. data/spec/dummy_app/foo/test/dummy/config/initializers/mime_types.rb +0 -5
  213. data/spec/dummy_app/foo/test/dummy/config/initializers/secret_token.rb +0 -7
  214. data/spec/dummy_app/foo/test/dummy/config/initializers/session_store.rb +0 -8
  215. data/spec/dummy_app/foo/test/dummy/config/locales/en.yml +0 -5
  216. data/spec/dummy_app/foo/test/dummy/config/routes.rb +0 -4
  217. data/spec/dummy_app/foo/test/dummy/config.ru +0 -4
  218. data/spec/dummy_app/foo/test/dummy/db/schema.rb +0 -21
  219. data/spec/dummy_app/foo/test/dummy/public/404.html +0 -26
  220. data/spec/dummy_app/foo/test/dummy/public/favicon.ico +0 -0
  221. data/spec/dummy_app/foo/test/dummy/script/rails +0 -6
  222. data/spec/dummy_app/foo/test/fixtures/foo/bars.yml +0 -11
  223. data/spec/dummy_app/foo/test/foo_test.rb +0 -7
  224. data/spec/dummy_app/foo/test/integration/navigation_test.rb +0 -10
  225. data/spec/dummy_app/foo/test/test_helper.rb +0 -10
  226. data/spec/dummy_app/foo/test/unit/foo/bar_test.rb +0 -9
  227. data/spec/generator_helpers.rb +0 -30
  228. data/spec/generators/install_generator_spec.rb +0 -85
  229. data/spec/generators/uninstall_generator_spec.rb +0 -35
  230. data/spec/lib/custom_field.rb +0 -7
  231. data/spec/requests/config/navigation/rails_admin_config_navigation_spec.rb +0 -107
  232. data/spec/requests/config/rails_admin_config_spec.rb +0 -227
@@ -1,31 +1,30 @@
1
1
  module RailsAdmin
2
2
 
3
3
  class MainController < RailsAdmin::ApplicationController
4
-
4
+
5
5
  include ActionView::Helpers::TextHelper
6
6
  include RailsAdmin::MainHelper
7
7
  include RailsAdmin::ApplicationHelper
8
-
8
+
9
9
  layout "rails_admin/application"
10
-
10
+
11
11
  before_filter :get_model, :except => RailsAdmin::Config::Actions.all(:root).map(&:action_name)
12
12
  before_filter :get_object, :only => RailsAdmin::Config::Actions.all(:member).map(&:action_name)
13
13
  before_filter :check_for_cancel
14
-
14
+
15
15
  RailsAdmin::Config::Actions.all.each do |action|
16
16
  class_eval %{
17
17
  def #{action.action_name}
18
- @action = RailsAdmin::Config::Actions.find('#{action.action_name}'.to_sym, {:controller => self, :abstract_model => @abstract_model, :object => @object})
19
-
20
- @authorization_adapter.try(:authorize, @action.authorization_key, @abstract_model, @object)
18
+ action = RailsAdmin::Config::Actions.find('#{action.action_name}'.to_sym)
19
+ @authorization_adapter.try(:authorize, action.authorization_key, @abstract_model, @object)
20
+ @action = action.with({:controller => self, :abstract_model => @abstract_model, :object => @object})
21
21
  @page_name = wording_for(:title)
22
- @page_type = @abstract_model && @abstract_model.pretty_name.downcase || "dashboard"
23
-
22
+
24
23
  instance_eval &@action.controller
25
24
  end
26
25
  }
27
26
  end
28
-
27
+
29
28
  def bulk_action
30
29
  self.send(params[:bulk_action]) if params[:bulk_action].in?(RailsAdmin::Config::Actions.all(:controller => self, :abstract_model => @abstract_model).select(&:bulkable?).map(&:route_fragment))
31
30
  end
@@ -34,12 +33,12 @@ module RailsAdmin
34
33
  scope = @authorization_adapter && @authorization_adapter.query(auth_scope_key, model_config.abstract_model)
35
34
  scope = model_config.abstract_model.scoped.merge(scope)
36
35
  scope = scope.instance_eval(&additional_scope) if additional_scope
37
-
36
+
38
37
  get_collection(model_config, scope, pagination)
39
38
  end
40
39
 
41
40
  private
42
-
41
+
43
42
  def back_or_index
44
43
  params[:return_to].presence && params[:return_to].include?(request.host) && (params[:return_to] != request.fullpath) ? params[:return_to] : index_path
45
44
  end
@@ -71,7 +70,6 @@ module RailsAdmin
71
70
  {:sort => column, :sort_reverse => (params[:sort_reverse] == reversed_sort.to_s)}
72
71
  end
73
72
 
74
-
75
73
  def get_attributes
76
74
  attributes = params[@abstract_model.to_param.gsub('~','_')] || {}
77
75
  attributes.each do |key, value|
@@ -82,7 +80,7 @@ module RailsAdmin
82
80
  end
83
81
  attributes
84
82
  end
85
-
83
+
86
84
  def redirect_to_on_success
87
85
  notice = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.#{@action.key}.done"))
88
86
  if params[:_add_another]
@@ -118,7 +116,8 @@ module RailsAdmin
118
116
  options = options.merge(:page => (params[:page] || 1).to_i, :per => (params[:per] || model_config.list.items_per_page)) if pagination
119
117
  options = options.merge(:include => associations) unless associations.blank?
120
118
  options = options.merge(get_sort_hash(model_config)) unless params[:associated_collection]
121
- options = options.merge(model_config.abstract_model.get_conditions_hash(model_config, params[:query], params[:f])) if (params[:query].present? || params[:f].present?)
119
+ options = options.merge(:query => params[:query]) if params[:query].present?
120
+ options = options.merge(:filters => params[:f]) if params[:f].present?
122
121
  options = options.merge(:bulk_ids => params[:bulk_ids]) if params[:bulk_ids]
123
122
 
124
123
  objects = model_config.abstract_model.all(options, scope)
@@ -127,7 +126,7 @@ module RailsAdmin
127
126
  def get_association_scope_from_params
128
127
  return nil unless params[:associated_collection].present?
129
128
  source_abstract_model = RailsAdmin::AbstractModel.new(to_model_name(params[:source_abstract_model]))
130
- source_model_config = RailsAdmin.config(source_abstract_model)
129
+ source_model_config = source_abstract_model.config
131
130
  source_object = source_abstract_model.get(params[:source_object_id])
132
131
  action = params[:current_action].in?(['create', 'update']) ? params[:current_action] : 'edit'
133
132
  association = source_model_config.send(action).fields.find{|f| f.name == params[:associated_collection].to_sym }.with(:controller => self, :object => source_object)
@@ -8,22 +8,19 @@ module RailsAdmin
8
8
  def authorized?(*args)
9
9
  @authorization_adapter.nil? || @authorization_adapter.authorized?(*args)
10
10
  end
11
-
12
- def current_action?(action)
13
- @action.custom_key == action.custom_key
11
+
12
+ def current_action?(action, abstract_model = @abstract_model, object = @object)
13
+ @action.custom_key == action.custom_key && abstract_model.try(:to_param) == @abstract_model.try(:to_param) && @object.try(:id) == object.try(:id)
14
14
  end
15
-
15
+
16
16
  def action(key, abstract_model = nil, object = nil)
17
- action = RailsAdmin::Config::Actions.find(key, { :controller => self.controller, :abstract_model => abstract_model, :object => object })
18
- action && authorized?(action.authorization_key, (action.collection? || action.member?) && abstract_model || nil, action.member? && object || nil) ? action : nil
17
+ RailsAdmin::Config::Actions.find(key, { :controller => self.controller, :abstract_model => abstract_model, :object => object })
19
18
  end
20
-
19
+
21
20
  def actions(scope = :all, abstract_model = nil, object = nil)
22
- RailsAdmin::Config::Actions.all(scope, { :controller => self.controller, :abstract_model => abstract_model, :object => object }).select do |action|
23
- authorized?(action.authorization_key, (action.collection? || action.member?) && abstract_model || nil, action.member? && object || nil)
24
- end
21
+ RailsAdmin::Config::Actions.all(scope, { :controller => self.controller, :abstract_model => abstract_model, :object => object })
25
22
  end
26
-
23
+
27
24
  def edit_user_link
28
25
  return nil unless authorized?(:edit, _current_user.class, _current_user) && _current_user.respond_to?(:email)
29
26
  return nil unless abstract_model = RailsAdmin.config(_current_user.class).abstract_model
@@ -31,58 +28,87 @@ module RailsAdmin
31
28
  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')
32
29
  end
33
30
 
34
-
35
31
  def wording_for(label, action = @action, abstract_model = @abstract_model, object = @object)
36
-
37
- model_config = abstract_model && RailsAdmin.config(abstract_model)
32
+ model_config = abstract_model.try(:config)
38
33
  object = abstract_model && object.is_a?(abstract_model.model) ? object : nil
39
34
  action = RailsAdmin::Config::Actions.find(action.to_sym) if (action.is_a?(Symbol) || action.is_a?(String))
40
-
41
- I18n.t("admin.actions.#{action.i18n_key}.#{label}",
42
- :model_label => model_config.try(:label),
43
- :model_label_plural => model_config.try(:label_plural),
35
+
36
+ I18n.t("admin.actions.#{action.i18n_key}.#{label}",
37
+ :model_label => model_config.try(:label),
38
+ :model_label_plural => model_config.try(:label_plural),
44
39
  :object_label => model_config && object.try(model_config.object_label_method)
45
40
  )
46
41
  end
47
-
42
+
43
+ def main_navigation
44
+ nodes_stack = RailsAdmin::Config.visible_models(:controller => self.controller)
45
+ nodes_stack.group_by(&:navigation_label).map do |navigation_label, nodes|
46
+
47
+ %{<li class='nav-header'>#{navigation_label || t('admin.misc.navigation')}</li>}.html_safe +
48
+ nodes.select{|n| n.parent.nil? || !n.parent.to_s.in?(nodes_stack.map{|c| c.abstract_model.model_name }) }.map do |node|
49
+ %{
50
+ <li#{' class="active"' if node == @model_config }>
51
+ <a href="#{url_for(:action => :index, :controller => 'rails_admin/main', :model_name => node.abstract_model.to_param)}">#{node.label_plural}</a>
52
+ </li>
53
+ #{navigation(nodes_stack, nodes_stack.select{|n| n.parent.to_s == node.abstract_model.model_name}, 1)}
54
+ }.html_safe
55
+ end.join.html_safe
56
+ end.join.html_safe
57
+ end
58
+
59
+ def navigation nodes_stack, nodes, level
60
+ nodes.map do |node|
61
+ %{
62
+ <li#{' class="active"' if node == @model_config }>
63
+ <a class="nav-level-#{level}" href="#{url_for(:action => :index, :controller => 'rails_admin/main', :model_name => node.abstract_model.to_param)}">#{node.label_plural}</a>
64
+ </li>
65
+ #{navigation(nodes_stack, nodes_stack.select{ |n| n.parent.to_s == node.abstract_model.model_name}, level + 1)}
66
+ }.html_safe
67
+ end.join
68
+ end
69
+
48
70
  def breadcrumb action = @action, acc = []
49
-
50
- acc << content_tag(:li, :class => "#{"active" if current_action?(action)}") do
51
- if action.http_methods.include?(:get)
52
- link_to wording_for(:breadcrumb, action), { :action => action.action_name, :controller => 'rails_admin/main' }
53
- else
54
- content_tag(:span, wording_for(:breadcrumb, action))
55
- end
56
- end
71
+ begin
72
+ (parent_actions ||= []) << action
73
+ end while action.breadcrumb_parent && (action = action(*action.breadcrumb_parent))
74
+ parent_actions << action(:dashboard) if parent_actions.last.key != :dashboard # in case chain is interrupted
57
75
 
58
- unless action.breadcrumb_parent && (parent = action(action.breadcrumb_parent, @abstract_model, @object)) # rec tail
59
- content_tag(:ul, :class => "breadcrumb") do
60
- acc.reverse.join('<span class="divider">/</span>').html_safe
61
- end
62
- else
63
- breadcrumb parent, acc # rec
76
+ content_tag(:ul, :class => "breadcrumb") do
77
+ parent_actions.map do |a|
78
+ am = a.send(:eval, 'bindings[:abstract_model]')
79
+ o = a.send(:eval, 'bindings[:object]')
80
+ content_tag(:li, :class => "#{"active" if current_action?(a, am, o)}") do
81
+ if a.http_methods.include?(:get)
82
+ 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(:id) }
83
+ else
84
+ content_tag(:span, wording_for(:breadcrumb, a, am, o))
85
+ end
86
+ end
87
+ end.reverse.join('<span class="divider">/</span>').html_safe
64
88
  end
65
89
  end
66
-
90
+
67
91
  # parent => :root, :collection, :member
68
- def menu_for(parent, abstract_model = nil, object = nil) # perf matters here (no action view trickery)
69
- actions = actions(parent, abstract_model, object).select{ |action| action.http_methods.include?(:get) }
92
+ def menu_for(parent, abstract_model = nil, object = nil, only_icon = false) # perf matters here (no action view trickery)
93
+ actions = actions(parent, abstract_model, object).select{ |a| a.http_methods.include?(:get) }
70
94
  actions.map do |action|
95
+ wording = wording_for(:menu, action)
71
96
  %{
72
- <li class="#{action.key}_#{parent}_link #{'active' if current_action?(action)}">
97
+ <li data-original-title="#{wording}" rel="#{'tooltip' if only_icon}" class="icon #{action.key}_#{parent}_link #{'active' if current_action?(action)}">
73
98
  <a href="#{url_for({ :action => action.action_name, :controller => 'rails_admin/main', :model_name => abstract_model.try(:to_param), :id => object.try(:id) })}">
74
- #{wording_for(:menu, action)}
99
+ <i class="#{action.link_icon}"></i>
100
+ <span#{only_icon ? " style='display:none'" : ""}>#{wording}</span>
75
101
  </a>
76
102
  </li>
77
103
  }
78
104
  end.join.html_safe
79
105
  end
80
-
106
+
81
107
  def bulk_menu abstract_model = @abstract_model
82
108
  actions = actions(:bulkable, abstract_model)
83
109
  return '' if actions.empty?
84
- content_tag :li, { :class => 'dropdown', :style => 'float:right', :'data-dropdown' => "dropdown" } do
85
- content_tag(:a, { :class => 'dropdown-toggle', :href => '#' }) { t('admin.misc.bulk_menu_title') } +
110
+ content_tag :li, { :class => 'dropdown', :style => 'float:right' } do
111
+ content_tag(:a, { :class => 'dropdown-toggle', :'data-toggle' => "dropdown", :href => '#' }) { t('admin.misc.bulk_menu_title').html_safe + '<b class="caret"></b>'.html_safe } +
86
112
  content_tag(:ul, :class => 'dropdown-menu') do
87
113
  actions.map do |action|
88
114
  content_tag :li do
@@ -1,9 +1,9 @@
1
- ActionView::Base.field_error_proc = Proc.new { |html_tag, instance| "<span class=\"field_with_errors\">#{html_tag}</span>".html_safe }
1
+ ActionView::Base.field_error_proc = Proc.new { |html_tag, instance| html_tag }
2
2
 
3
3
  module RailsAdmin
4
4
  class FormBuilder < ::ActionView::Helpers::FormBuilder
5
5
  include ::NestedForm::BuilderMixin
6
-
6
+
7
7
  def generate(options = {})
8
8
  options.reverse_merge!({
9
9
  :action => @template.controller.params[:action],
@@ -11,6 +11,8 @@ module RailsAdmin
11
11
  :nested_in => false
12
12
  })
13
13
  groups = options[:model_config].send(options[:nested_in] ? :nested : options[:action]).with(:form => self, :object => @object, :view => @template).visible_groups
14
+
15
+ object_infos +
14
16
  groups.map do |fieldset|
15
17
  fieldset_for fieldset, options[:nested_in]
16
18
  end.join.html_safe +
@@ -20,8 +22,11 @@ module RailsAdmin
20
22
  def fieldset_for fieldset, nested_in
21
23
  if (fields = fieldset.with(:form => self, :object => @object, :view => @template).visible_fields).length > 0
22
24
  @template.content_tag :fieldset do
23
- @template.content_tag(:legend, fieldset.label.html_safe + (fieldset.help.present? ? @template.content_tag(:small, fieldset.help) : ''), :style => "#{fieldset.label == I18n.translate("admin.form.basic_info") ? 'display:none' : ''}") +
24
- fields.map{ |field| field_wrapper_for(field, nested_in) }.join.html_safe
25
+ contents = []
26
+ contents << @template.content_tag(:legend, %{<i class="icon-chevron-#{(fieldset.active? ? 'down' : 'right')}"></i> #{fieldset.label}}.html_safe, :style => "#{fieldset.label == I18n.translate("admin.form.basic_info") ? 'display:none' : ''}")
27
+ contents << @template.content_tag(:p, fieldset.help) if fieldset.help.present?
28
+ contents << fields.map{ |field| field_wrapper_for(field, nested_in) }.join
29
+ contents.join.html_safe
25
30
  end
26
31
  end
27
32
  end
@@ -32,24 +37,16 @@ module RailsAdmin
32
37
  else
33
38
  # do not show nested field if the target is the origin
34
39
  unless field.inverse_of.presence && field.inverse_of == nested_in
35
- @template.content_tag(:div, :class => "clearfix field #{field.type_css_class} #{field.css_class} #{'error' if field.errors.present?}", :id => "#{dom_id(field)}_field") do
36
- label(field.method_name, field.label, :class => (field.nested_form ? 'nester input' : '')) +
37
- (field.nested_form ? nested_inputs_for(field) : input_for(field))
40
+ @template.content_tag(:div, :class => "control-group #{field.type_css_class} #{field.css_class} #{'error' if field.errors.present?}", :id => "#{dom_id(field)}_field") do
41
+ label(field.method_name, field.label, :class => 'control-label') +
42
+ (field.nested_form ? field_for(field) : input_for(field))
38
43
  end
39
44
  end
40
45
  end
41
46
  end
42
-
43
- def nested_inputs_for field
44
- @template.content_tag(:div, :class => 'input') do
45
- errors_for(field) +
46
- help_for(field)
47
- end + '<div class="row"></div>'.html_safe +
48
- field_for(field)
49
- end
50
47
 
51
48
  def input_for field
52
- @template.content_tag(:div, :class => 'input') do
49
+ @template.content_tag(:div, :class => 'controls') do
53
50
  field_for(field) +
54
51
  errors_for(field) +
55
52
  help_for(field)
@@ -57,11 +54,11 @@ module RailsAdmin
57
54
  end
58
55
 
59
56
  def errors_for field
60
- field.errors.present? ? @template.content_tag(:span, "#{field.label} #{field.errors.first}", :class => 'help-inline') : ''.html_safe
57
+ field.errors.present? ? @template.content_tag(:span, "#{field.label} #{field.errors.to_sentence}", :class => 'help-inline') : ''.html_safe
61
58
  end
62
59
 
63
60
  def help_for field
64
- field.help.present? ? @template.content_tag(:span, field.help, :class => 'help-block') : ''.html_safe
61
+ field.help.present? ? @template.content_tag(:p, field.help, :class => 'help-block') : ''.html_safe
65
62
  end
66
63
 
67
64
  def field_for field
@@ -71,10 +68,16 @@ module RailsAdmin
71
68
  field.render
72
69
  end
73
70
  end
74
-
71
+
72
+ def object_infos
73
+ model_config = RailsAdmin.config(object)
74
+ model_label = model_config.label
75
+ object_label = (object.new_record? ? I18n.t('admin.form.new_model', :name => model_label) : object.send(model_config.object_label_method).presence || "#{model_config.label} ##{object.id}")
76
+ %{<span style="display:none" class="object-infos" data-model-label="#{model_label}" data-object-label="#{object_label}"></span>}.html_safe
77
+ end
78
+
75
79
  def javascript_for(field, options = {}, &block)
76
- %{
77
- <script type="text/javascript">
80
+ %{<script type="text/javascript">
78
81
  jQuery(function($) {
79
82
  if(!$("#{jquery_namespace(field)}").parents(".fields_blueprint").length) {
80
83
  if(#{options[:modal] == false ? '!$("#modal").length' : 'true'}) {
@@ -82,25 +85,24 @@ module RailsAdmin
82
85
  }
83
86
  }
84
87
  });
85
- </script>
86
- }.html_safe
88
+ </script>}.html_safe
87
89
  end
88
-
90
+
89
91
  def jquery_namespace field
90
- "#{(@template.controller.params[:modal] ? '#modal ' : '')}##{dom_id(field)}_field"
92
+ %{#{(@template.controller.params[:modal] ? '#modal ' : '')}##{dom_id(field)}_field}
91
93
  end
92
-
94
+
93
95
  def dom_id field
94
- (@dom_id ||= {})[field.name] ||=
96
+ (@dom_id ||= {})[field.name] ||=
95
97
  [
96
98
  @object_name.to_s.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, ""),
97
99
  options[:index],
98
100
  field.method_name
99
101
  ].reject(&:blank?).join('_')
100
102
  end
101
-
103
+
102
104
  def dom_name field
103
- (@dom_name ||= {})[field.name] ||= "#{@object_name}#{options[:index] && "[#{options[:index]}]"}[#{field.method_name}]#{field.is_a?(Config::Fields::Types::HasManyAssociation) ? '[]' : ''}"
105
+ (@dom_name ||= {})[field.name] ||= %{#{@object_name}#{options[:index] && "[#{options[:index]}]"}[#{field.method_name}]#{field.is_a?(Config::Fields::Types::HasManyAssociation) ? '[]' : ''}}
104
106
  end
105
107
  end
106
108
  end
@@ -6,20 +6,20 @@ module RailsAdmin
6
6
  options = args.extract_options!.reverse_merge(:builder => RailsAdmin::FormBuilder)
7
7
  form_for(*(args << options), &block) << after_nested_form_callbacks
8
8
  end
9
-
9
+
10
10
  def get_indicator(percent)
11
11
  return "" if percent < 0 # none
12
- return "notice" if percent < 34 # < 1/100 of max
12
+ return "info" if percent < 34 # < 1/100 of max
13
13
  return "success" if percent < 67 # < 1/10 of max
14
14
  return "warning" if percent < 84 # < 1/3 of max
15
15
  return "important" # > 1/3 of max
16
16
  end
17
-
17
+
18
18
  def get_column_sets(properties)
19
19
  sets = []
20
20
  property_index = 0
21
21
  set_index = 0
22
-
22
+
23
23
  while (property_index < properties.length)
24
24
  current_set_width = 0
25
25
  begin
@@ -1,11 +1,12 @@
1
- - actions(:root).each do |action|
2
- %li= link_to wording_for(:menu, action), { :action => action.action_name, :controller => 'rails_admin/main' }
3
- - if main_app_root_path = (main_app.root_path rescue false)
4
- %li= link_to t('home.name').capitalize, main_app_root_path
5
- - if _current_user
6
- - if user_link = edit_user_link
7
- %li= user_link
8
- - if defined?(Devise) && (devise_scope = request.env["warden"].config[:default_scope] rescue false) && (logout_path = main_app.send("destroy_#{devise_scope}_session_path") rescue false)
9
- %li= link_to content_tag('span', t('admin.misc.log_out'), :class => 'label important'), logout_path, :method => Devise.sign_out_via
10
- - if _current_user.respond_to?(:email)
11
- %li= image_tag "#{(request.ssl? ? 'https://secure' : 'http://www')}.gravatar.com/avatar/#{Digest::MD5.hexdigest _current_user.email}?s=30", :style => 'padding-top:5px'
1
+ %ul.nav.pull-right
2
+ - actions(:root).each do |action|
3
+ %li= link_to wording_for(:menu, action), { :action => action.action_name, :controller => 'rails_admin/main' }
4
+ - if main_app_root_path = (main_app.root_path rescue false)
5
+ %li= link_to t('home.name').capitalize, main_app_root_path
6
+ - if _current_user
7
+ - if user_link = edit_user_link
8
+ %li= user_link
9
+ - if defined?(Devise) && (devise_scope = request.env["warden"].config[:default_scope] rescue false) && (logout_path = main_app.send("destroy_#{devise_scope}_session_path") rescue false)
10
+ %li= link_to content_tag('span', t('admin.misc.log_out'), :class => 'label label-important'), logout_path, :method => Devise.sign_out_via
11
+ - if _current_user.respond_to?(:email)
12
+ %li= image_tag "#{(request.ssl? ? 'https://secure' : 'http://www')}.gravatar.com/avatar/#{Digest::MD5.hexdigest _current_user.email}?s=30", :style => 'padding-top:5px'
@@ -7,33 +7,33 @@
7
7
  = csrf_meta_tag
8
8
  = stylesheet_link_tag "rails_admin/rails_admin.css"
9
9
  = javascript_include_tag "rails_admin/rails_admin.js"
10
- %body.rails_admin{:style => "padding-top: 60px;"}
11
- .topbar-wrapper{:style => "z-index: 5;"}
12
- .topbar{:'data-dropdown' => 'dropdown'}
13
- .topbar-inner
14
- .container-fluid
15
- %h3
16
- = link_to dashboard_path do
17
- = _get_plugin_name[0] || 'Rails'
18
- %small= _get_plugin_name[1] || 'Admin'
19
- %ul.nav.secondary-nav= render :partial => 'layouts/rails_admin/secondary_navigation'
10
+ %body.rails_admin
11
+ .navbar.navbar-fixed-top
12
+ .navbar-inner
13
+ .container-fluid
14
+ %a.brand{:href => dashboard_path}
15
+ = _get_plugin_name[0] || 'Rails'
16
+ %small= _get_plugin_name[1] || 'Admin'
17
+ .nav-collapse
18
+ = render :partial => 'layouts/rails_admin/secondary_navigation'
20
19
  .container-fluid
21
- .sidebar
22
- .well
23
- %h3= t "admin.misc.navigation"
24
- = render :partial => 'layouts/rails_admin/navigation'
25
- .content
26
- .page-header
27
- %h1= @page_name
28
- - flash && flash.each do |key, value|
29
- .alert-message.fade.in{:class => key}
30
- %a.close{:href => '#'}×
31
- %p= value
32
- = breadcrumb
33
- %ul.tabs
34
- = menu_for((@abstract_model ? (@object.try(:id) ? :member : :collection) : :root), @abstract_model, @object)
35
- = content_for :contextual_tabs
36
- %span.row
37
- = yield
38
- %footer
39
- %p &copy; RailsAdmin 2011
20
+ .row-fluid
21
+ .span3
22
+ .well.sidebar-nav
23
+ %ul.nav.nav-list= main_navigation
24
+ .span9
25
+ .row-fluid
26
+ .content
27
+ .page-header
28
+ %h1= @page_name
29
+ - flash && flash.each do |key, value|
30
+ .alert{:class => "alert-#{key}"}
31
+ %a.close{:href => '#', :'data-dismiss' => "alert"}×
32
+ = value
33
+ = breadcrumb
34
+ %ul.nav.nav-tabs
35
+ = menu_for((@abstract_model ? (@object.try(:id) ? :member : :collection) : :root), @abstract_model, @object)
36
+ = content_for :contextual_tabs
37
+ = yield
38
+ %footer
39
+ %p &copy; RailsAdmin 2012
@@ -1,4 +1,4 @@
1
- %table.zebra-striped
1
+ %table.table.table-condensed.table-striped
2
2
  %thead
3
3
  %tr
4
4
  %th.shrink.user= t("admin.table_headers.username")
@@ -1,17 +1,16 @@
1
1
  - object = delete_notice
2
- - model_config = RailsAdmin.config(@abstract_model)
3
2
 
4
- %li{:style => 'display:block; margin-bottom:10px'}
3
+ %li{:style => 'display:block; margin-top:10px'}
5
4
  %span.label= @abstract_model.pretty_name
6
- = link_to model_config.with(:object => object).object_label, show_path(:model_name => @abstract_model.to_param, :id => object.id)
5
+ = link_to @model_config.with(:object => object).object_label, show_path(:model_name => @abstract_model.to_param, :id => object.id)
7
6
  %ul
8
- - @abstract_model.has_many_associations.each do |association|
7
+ - @abstract_model.associations.select{|a| a[:type] == :has_many }.each do |association|
9
8
  - object.send(association[:name]).each do |child|
10
9
  %li
11
10
  - child_config = RailsAdmin.config(child)
12
11
  = association[:pretty_name]
13
12
  = link_to(child_config.with(:object => child).object_label, show_path(:model_name => child_config.abstract_model.to_param, :id => child.id))
14
- - @abstract_model.has_one_associations.each do |association|
13
+ - @abstract_model.associations.select{|a| a[:type] == :has_one }.each do |association|
15
14
  - if child = object.send(association[:name])
16
15
  %li
17
16
  - child_config = RailsAdmin.config(child)
@@ -1,4 +1,5 @@
1
- = form.send field.view_helper, field.method_name, field._html_attributes.reverse_merge({:style => "background-color: #{field.color}"})
1
+ - html_attributes = field.html_attributes.reverse_merge({:style => "background-color: #{field.color}"}).reverse_merge((hdv = field.html_default_value).nil? ? {} : { :value => hdv })
2
+ = form.send field.view_helper, field.method_name, html_attributes
2
3
 
3
4
  = javascript_include_tag asset_path 'rails_admin/jquery.colorpicker.js'
4
5
  = stylesheet_link_tag asset_path 'rails_admin/jquery.colorpicker.css'
@@ -1,4 +1,4 @@
1
- = form.send field.view_helper, field.method_name, field._html_attributes
1
+ = form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge((hdv = field.html_default_value).nil? ? {} : { :value => hdv })
2
2
  = form.javascript_for(field) do
3
3
  :plain
4
4
  $("#{form.jquery_namespace(field)} input").datetimepicker(#{field.js_plugin_options.html_safe});
@@ -1,4 +1,4 @@
1
- = form.select field.method_name, field.enum, {:include_blank => true}, field._html_attributes.reverse_merge({ :placeholder => t('admin.misc.search') })
1
+ = form.select field.method_name, field.enum, { :include_blank => true }.merge((hdv = field.html_default_value).nil? ? {} : { :selected => hdv }), field.html_attributes.reverse_merge({ :placeholder => t('admin.misc.search') })
2
2
  = form.javascript_for(field) do
3
3
  :plain
4
4
  $("#{form.jquery_namespace(field)} select").filteringSelect({});
@@ -1 +1 @@
1
- = form.send field.view_helper, field.method_name, field._html_attributes
1
+ = form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge((hdv = field.html_default_value).nil? ? {} : { :value => hdv, :checked => hdv })
@@ -3,9 +3,10 @@
3
3
  .toggle{:style => ('display:none;' if file && field.delete_method && form.object.send(field.delete_method) == '1')}
4
4
  - if value = field.pretty_value
5
5
  = value
6
- = form.file_field(field.name, field._html_attributes)
6
+ = form.file_field(field.name, field.html_attributes)
7
7
  - if field.optional? && field.errors.blank? && file && field.delete_method
8
- %a.label.notice{:href => '#', :onclick => "jQuery(this).siblings('[type=checkbox]').click(); jQuery(this).siblings('.toggle').toggle(); jQuery(this).toggleClass('important notice'); return false"}
8
+ %a.btn.btn-info{:href => '#', :'data-toggle' => 'button', :onclick => "$(this).siblings('[type=checkbox]').click(); $(this).siblings('.toggle').toggle('slow'); jQuery(this).toggleClass('btn-danger btn-info'); return false"}
9
+ %i.icon-white.icon-trash
9
10
  = I18n.t('admin.actions.delete.menu').capitalize + " #{field.method_name}"
10
11
  = form.check_box(field.delete_method, :style => 'display:none;' )
11
12
  - if field.cache_method
@@ -2,7 +2,7 @@
2
2
  related_id = params[:associations] && params[:associations][field.name.to_s]
3
3
  config = field.associated_model_config
4
4
  source_abstract_model = RailsAdmin.config(form.object.class).abstract_model
5
-
5
+
6
6
  if form.object.new_record? && related_id.present? && related_id != 'new'
7
7
  selected = [config.abstract_model.get(related_id)]
8
8
  else
@@ -25,12 +25,14 @@
25
25
  end
26
26
 
27
27
  %input{:name => form.dom_name(field), :type => "hidden", :value => ""}
28
- = form.select field.method_name, collection, { :selected => selected_ids, :object => form.object }, field._html_attributes.merge({:'data-edit-url' => edit_url, :multiple => true})
28
+
29
+ - selected_ids = (hdv = field.html_default_value).nil? ? selected_ids : hdv
30
+ = form.select field.method_name, collection, { :selected => selected_ids, :object => form.object }, field.html_attributes.merge({:'data-edit-url' => edit_url, :multiple => true})
29
31
  - if authorized? :new, config.abstract_model
30
32
  - path_hash = { :model_name => config.abstract_model.to_param, :modal => true }
31
33
  - path_hash.merge!({ :associations => { field.inverse_of => (form.object.id || 'new') } }) if field.inverse_of
32
- = link_to wording_for(:link, :new, config.abstract_model), '#', :data => { :link => new_path(path_hash) }, :class => "create btn", :style => 'margin-left:10px'
33
-
34
+ = link_to "<i class=\"icon-plus icon-white\"></i> ".html_safe + wording_for(:link, :new, config.abstract_model), '#', :data => { :link => new_path(path_hash) }, :class => "create btn btn-info", :style => 'margin-left:10px'
35
+
34
36
  = form.javascript_for(field) do
35
37
  :plain
36
38
  $("#{form.jquery_namespace(field)} select").filteringMultiselect({
@@ -2,7 +2,7 @@
2
2
  config = field.associated_model_config
3
3
  related_id = params[:associations] && params[:associations][field.name.to_s]
4
4
  source_abstract_model = RailsAdmin.config(form.object.class).abstract_model
5
-
5
+
6
6
  if form.object.new_record? && related_id.present? && related_id != 'new'
7
7
  selected = config.abstract_model.get(related_id)
8
8
  selected_id = selected.id
@@ -15,20 +15,21 @@
15
15
  current_action = params[:action].in?(['create', 'new']) ? 'create' : 'update'
16
16
 
17
17
  edit_url = authorized?(:edit, config.abstract_model) ? edit_path(:model_name => config.abstract_model.to_param, :modal => true, :id => '__ID__') : ''
18
-
18
+
19
19
  xhr = !field.associated_collection_cache_all
20
20
 
21
21
  collection = xhr ? [[selected_name, selected_id]] : controller.list_entries(config, :index, field.associated_collection_scope, false).map { |o| [o.send(config.object_label_method), o.id] }
22
22
 
23
- = form.select field.method_name, collection, { :selected => selected_id, :include_blank => true }, field._html_attributes.reverse_merge({:placeholder => t('admin.misc.search')})
23
+ - selected_id = (hdv = field.html_default_value).nil? ? selected_id : hdv
24
+ = form.select field.method_name, collection, { :selected => selected_id, :include_blank => true }, field.html_attributes.reverse_merge({:placeholder => t('admin.misc.search')})
24
25
 
25
26
  - if authorized? :new, config.abstract_model
26
27
  - path_hash = { :model_name => config.abstract_model.to_param, :modal => true }
27
28
  - path_hash.merge!({ :associations => { field.inverse_of => (form.object.id || 'new') } }) if field.inverse_of
28
- = link_to wording_for(:link, :new, config.abstract_model), '#', :data => { :link => new_path(path_hash) }, :class => "btn create", :style => 'float:left; margin-left:10px'
29
+ = link_to "<i class=\"icon-plus icon-white\"></i> ".html_safe + wording_for(:link, :new, config.abstract_model), '#', :data => { :link => new_path(path_hash) }, :class => "btn btn-info create", :style => 'float:left; margin-left:10px'
29
30
 
30
31
  - if edit_url.present?
31
- = link_to wording_for(:link, :edit, config.abstract_model), '#', :data => { :link => edit_url }, :class => "btn update #{field.value.nil? && 'disabled'}", :style => 'float:left; margin-left:10px'
32
+ = link_to "<i class=\"icon-pencil icon-white\"></i> ".html_safe + wording_for(:link, :edit, config.abstract_model), '#', :data => { :link => edit_url }, :class => "btn btn-info update #{field.value.nil? && 'disabled'}", :style => 'float:left; margin-left:10px'
32
33
 
33
34
  = form.javascript_for(field) do
34
35
  :plain