activeadmin 1.0.0 → 1.1.0

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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +20 -0
  3. data/.mdlrc +1 -0
  4. data/.rubocop.yml +52 -3
  5. data/.simplecov +13 -0
  6. data/.travis.yml +9 -24
  7. data/.yardopts +0 -1
  8. data/CHANGELOG.md +85 -4
  9. data/CONTRIBUTING.md +33 -57
  10. data/Gemfile +26 -17
  11. data/Rakefile +1 -12
  12. data/activeadmin.gemspec +9 -11
  13. data/app/assets/javascripts/active_admin/base.js.coffee +6 -2
  14. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +5 -1
  15. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +5 -1
  16. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +5 -1
  17. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +5 -1
  18. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +6 -3
  19. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +9 -7
  20. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +5 -2
  21. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +6 -2
  22. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +3 -5
  23. data/app/assets/stylesheets/active_admin/_base.scss +2 -2
  24. data/app/assets/stylesheets/active_admin/_forms.scss +6 -12
  25. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -5
  26. data/app/assets/stylesheets/active_admin/components/_pagination.scss +11 -0
  27. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +1 -0
  28. data/app/assets/stylesheets/active_admin/components/_tables.scss +4 -1
  29. data/app/assets/stylesheets/active_admin/mixins/_all.scss +0 -2
  30. data/app/assets/stylesheets/active_admin/print.scss +2 -3
  31. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  32. data/app/views/active_admin/devise/shared/_links.erb +12 -6
  33. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  34. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  35. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  36. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  37. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  38. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  39. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  40. data/codecov.yml +14 -12
  41. data/config/i18n-tasks.yml +26 -0
  42. data/config/locales/ar.yml +1 -3
  43. data/config/locales/bg.yml +0 -2
  44. data/config/locales/bs.yml +0 -2
  45. data/config/locales/ca.yml +0 -2
  46. data/config/locales/cs.yml +0 -2
  47. data/config/locales/da.yml +1 -3
  48. data/config/locales/de-CH.yml +1 -3
  49. data/config/locales/de.yml +1 -3
  50. data/config/locales/el.yml +1 -3
  51. data/config/locales/en-CA.yml +138 -0
  52. data/config/locales/en-GB.yml +43 -3
  53. data/config/locales/en.yml +8 -4
  54. data/config/locales/es-MX.yml +3 -2
  55. data/config/locales/es.yml +10 -4
  56. data/config/locales/fa.yml +0 -2
  57. data/config/locales/fi.yml +0 -2
  58. data/config/locales/fr.yml +9 -2
  59. data/config/locales/he.yml +53 -7
  60. data/config/locales/hr.yml +0 -2
  61. data/config/locales/hu.yml +0 -2
  62. data/config/locales/id.yml +1 -3
  63. data/config/locales/it.yml +2 -4
  64. data/config/locales/ja.yml +1 -3
  65. data/config/locales/ko.yml +0 -2
  66. data/config/locales/lt.yml +24 -4
  67. data/config/locales/lv.yml +0 -2
  68. data/config/locales/nb.yml +0 -2
  69. data/config/locales/nl.yml +1 -3
  70. data/config/locales/pl.yml +3 -2
  71. data/config/locales/pt-BR.yml +1 -3
  72. data/config/locales/pt-PT.yml +0 -2
  73. data/config/locales/ro.yml +0 -2
  74. data/config/locales/ru.yml +1 -3
  75. data/config/locales/sk.yml +0 -2
  76. data/config/locales/sv-SE.yml +1 -3
  77. data/config/locales/tr.yml +0 -2
  78. data/config/locales/uk.yml +1 -3
  79. data/config/locales/vi.yml +0 -2
  80. data/config/locales/zh-CN.yml +0 -2
  81. data/config/locales/zh-TW.yml +1 -3
  82. data/config/mdl_style.rb +9 -0
  83. data/cucumber.yml +3 -3
  84. data/docs/0-installation.md +15 -12
  85. data/docs/1-general-configuration.md +10 -3
  86. data/docs/10-custom-pages.md +10 -5
  87. data/docs/11-decorators.md +1 -0
  88. data/docs/12-arbre-components.md +7 -9
  89. data/docs/13-authorization-adapter.md +39 -24
  90. data/docs/14-gotchas.md +41 -22
  91. data/docs/2-resource-customization.md +41 -18
  92. data/docs/3-index-pages.md +30 -12
  93. data/docs/3-index-pages/custom-index.md +1 -0
  94. data/docs/3-index-pages/index-as-block.md +0 -5
  95. data/docs/3-index-pages/index-as-blog.md +0 -5
  96. data/docs/3-index-pages/index-as-grid.md +0 -5
  97. data/docs/3-index-pages/index-as-table.md +1 -9
  98. data/docs/4-csv-format.md +2 -1
  99. data/docs/5-forms.md +45 -21
  100. data/docs/6-show-pages.md +2 -1
  101. data/docs/7-sidebars.md +2 -1
  102. data/docs/8-custom-actions.md +4 -1
  103. data/docs/9-batch-actions.md +4 -2
  104. data/docs/documentation.md +19 -21
  105. data/features/comments/commenting.feature +20 -0
  106. data/features/index/filters.feature +41 -1
  107. data/features/index/format_as_csv.feature +17 -0
  108. data/features/index/index_scopes.feature +15 -0
  109. data/features/registering_assets.feature +8 -4
  110. data/features/show/attributes_table_title.feature +54 -0
  111. data/features/show/tabs.feature +10 -4
  112. data/features/step_definitions/action_link_steps.rb +0 -1
  113. data/features/step_definitions/attributes_table_title_steps.rb +11 -0
  114. data/features/step_definitions/batch_action_steps.rb +2 -2
  115. data/features/step_definitions/comment_steps.rb +21 -1
  116. data/features/step_definitions/configuration_steps.rb +1 -1
  117. data/features/step_definitions/filter_steps.rb +9 -0
  118. data/features/step_definitions/format_steps.rb +1 -1
  119. data/features/step_definitions/index_scope_steps.rb +4 -0
  120. data/features/support/env.rb +5 -4
  121. data/features/support/regular_env.rb +7 -0
  122. data/features/support/reload_env.rb +7 -0
  123. data/gemfiles/rails_42.gemfile +2 -37
  124. data/gemfiles/rails_50.gemfile +5 -40
  125. data/gemfiles/rails_51.gemfile +5 -40
  126. data/lib/active_admin.rb +0 -3
  127. data/lib/active_admin/application.rb +6 -4
  128. data/lib/active_admin/asset_registration.rb +8 -0
  129. data/lib/active_admin/authorization_adapter.rb +0 -3
  130. data/lib/active_admin/base_controller.rb +1 -2
  131. data/lib/active_admin/base_controller/authorization.rb +0 -1
  132. data/lib/active_admin/base_controller/menu.rb +9 -9
  133. data/lib/active_admin/batch_actions/controller.rb +1 -1
  134. data/lib/active_admin/batch_actions/views/selection_cells.rb +6 -5
  135. data/lib/active_admin/csv_builder.rb +3 -3
  136. data/lib/active_admin/dependency.rb +1 -1
  137. data/lib/active_admin/devise.rb +2 -2
  138. data/lib/active_admin/dsl.rb +2 -2
  139. data/lib/active_admin/filters.rb +2 -0
  140. data/lib/active_admin/filters/active.rb +13 -14
  141. data/lib/active_admin/filters/active_filter.rb +87 -0
  142. data/lib/active_admin/filters/active_sidebar.rb +50 -0
  143. data/lib/active_admin/filters/forms.rb +1 -2
  144. data/lib/active_admin/filters/resource_extension.rb +2 -30
  145. data/lib/active_admin/helpers/settings.rb +0 -1
  146. data/lib/active_admin/inputs/datepicker_input.rb +5 -5
  147. data/lib/active_admin/inputs/filters/date_range_input.rb +12 -4
  148. data/lib/active_admin/inputs/filters/text_input.rb +0 -1
  149. data/lib/active_admin/menu.rb +4 -4
  150. data/lib/active_admin/menu_collection.rb +0 -2
  151. data/lib/active_admin/namespace.rb +1 -1
  152. data/lib/active_admin/orm/active_record/comments/comment.rb +1 -5
  153. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +4 -2
  154. data/lib/active_admin/page_controller.rb +1 -1
  155. data/lib/active_admin/resource/action_items.rb +4 -0
  156. data/lib/active_admin/resource/attributes.rb +1 -1
  157. data/lib/active_admin/resource/page_presenters.rb +1 -1
  158. data/lib/active_admin/resource/routes.rb +0 -1
  159. data/lib/active_admin/resource/scopes.rb +2 -1
  160. data/lib/active_admin/resource_controller.rb +1 -1
  161. data/lib/active_admin/resource_controller/data_access.rb +8 -9
  162. data/lib/active_admin/resource_dsl.rb +10 -10
  163. data/lib/active_admin/router.rb +1 -1
  164. data/lib/active_admin/scope.rb +3 -3
  165. data/lib/active_admin/version.rb +1 -1
  166. data/lib/active_admin/view_helpers.rb +1 -0
  167. data/lib/active_admin/view_helpers/display_helper.rb +1 -1
  168. data/lib/active_admin/view_helpers/form_helper.rb +1 -1
  169. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  170. data/lib/active_admin/views/action_items.rb +1 -1
  171. data/lib/active_admin/views/components/active_admin_form.rb +1 -1
  172. data/lib/active_admin/views/components/dropdown_menu.rb +2 -2
  173. data/lib/active_admin/views/components/index_list.rb +0 -2
  174. data/lib/active_admin/views/components/paginated_collection.rb +1 -1
  175. data/lib/active_admin/views/components/scopes.rb +2 -10
  176. data/lib/active_admin/views/components/status_tag.rb +19 -11
  177. data/lib/active_admin/views/components/tabs.rb +2 -2
  178. data/lib/active_admin/views/header.rb +0 -1
  179. data/lib/active_admin/views/index_as_blog.rb +1 -2
  180. data/lib/active_admin/views/index_as_grid.rb +2 -2
  181. data/lib/active_admin/views/index_as_table.rb +19 -1
  182. data/lib/active_admin/views/pages/base.rb +4 -4
  183. data/lib/active_admin/views/pages/show.rb +6 -1
  184. data/lib/active_admin/views/title_bar.rb +4 -4
  185. data/lib/bug_report_templates/{rails_5_master.rb → active_admin_master.rb} +35 -40
  186. data/lib/generators/active_admin/devise/devise_generator.rb +1 -1
  187. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +1 -1
  188. data/spec/bug_report_templates_spec.rb +2 -3
  189. data/spec/rails_helper.rb +0 -3
  190. data/spec/spec_helper.rb +1 -12
  191. data/spec/support/active_admin_integration_spec_helper.rb +1 -1
  192. data/spec/support/rails_template.rb +5 -37
  193. data/spec/support/rails_template_with_data.rb +262 -3
  194. data/spec/support/templates/policies/active_admin/comment_policy.rb +1 -1
  195. data/spec/support/templates/policies/active_admin/page_policy.rb +1 -1
  196. data/spec/support/templates/policies/application_policy.rb +1 -2
  197. data/spec/support/templates/post_decorator.rb +0 -1
  198. data/spec/unit/abstract_view_factory_spec.rb +0 -1
  199. data/spec/unit/application_spec.rb +4 -0
  200. data/spec/unit/asset_registration_spec.rb +29 -0
  201. data/spec/unit/belongs_to_spec.rb +1 -2
  202. data/spec/unit/config_shared_examples.rb +1 -1
  203. data/spec/unit/csv_builder_spec.rb +2 -4
  204. data/spec/unit/dependency_spec.rb +7 -7
  205. data/spec/unit/dsl_spec.rb +0 -2
  206. data/spec/unit/filters/active_filter_spec.rb +135 -0
  207. data/spec/unit/filters/active_spec.rb +11 -1
  208. data/spec/unit/filters/filter_form_builder_spec.rb +9 -7
  209. data/spec/unit/form_builder_spec.rb +14 -14
  210. data/spec/unit/helpers/scope_chain_spec.rb +0 -1
  211. data/spec/unit/i18n_spec.rb +17 -0
  212. data/spec/unit/menu_item_spec.rb +1 -3
  213. data/spec/unit/namespace/register_page_spec.rb +1 -1
  214. data/spec/unit/namespace_spec.rb +0 -1
  215. data/spec/unit/page_spec.rb +0 -3
  216. data/spec/unit/resource/action_items_spec.rb +5 -1
  217. data/spec/unit/resource/attributes_spec.rb +1 -2
  218. data/spec/unit/resource/ordering_spec.rb +0 -3
  219. data/spec/unit/resource/scopes_spec.rb +1 -1
  220. data/spec/unit/resource_controller/data_access_spec.rb +2 -2
  221. data/spec/unit/resource_controller_spec.rb +1 -2
  222. data/spec/unit/resource_spec.rb +9 -2
  223. data/spec/unit/routing_spec.rb +0 -2
  224. data/spec/unit/scope_spec.rb +3 -3
  225. data/spec/unit/settings_spec.rb +0 -1
  226. data/spec/unit/view_factory_spec.rb +1 -1
  227. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -1
  228. data/spec/unit/view_helpers/form_helper_spec.rb +3 -4
  229. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -1
  230. data/spec/unit/views/components/attributes_table_spec.rb +0 -1
  231. data/spec/unit/views/components/columns_spec.rb +0 -2
  232. data/spec/unit/views/components/site_title_spec.rb +0 -2
  233. data/spec/unit/views/components/status_tag_spec.rb +23 -7
  234. data/spec/unit/views/components/tabs_spec.rb +29 -1
  235. data/spec/unit/views/pages/index_spec.rb +1 -1
  236. data/tasks/docs.rake +37 -10
  237. data/tasks/lint.rake +14 -1
  238. data/tasks/local.rake +2 -2
  239. data/tasks/test.rake +8 -25
  240. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  241. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  242. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  243. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  244. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  245. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  246. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  247. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  248. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  249. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  250. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  251. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  252. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  253. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  254. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  255. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  256. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +300 -0
  257. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  258. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  259. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  260. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  261. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  262. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  263. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  264. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  265. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  266. metadata +62 -51
  267. data/.hound.yml +0 -14
  268. data/Appraisals +0 -41
  269. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  270. data/app/assets/javascripts/active_admin/jquery_ui.js.erb +0 -18
  271. data/app/assets/stylesheets/active_admin/mixins/_reset.scss +0 -165
  272. data/lib/active_admin/filters/humanized.rb +0 -68
  273. data/spec/requests/javascript_spec.rb +0 -22
  274. data/spec/support/jslint.yml +0 -80
  275. data/spec/unit/filters/humanized_spec.rb +0 -64
  276. data/tasks/yard.rake +0 -9
@@ -30,12 +30,12 @@ module ActiveAdmin
30
30
 
31
31
  COLUMN_TRANSITIVE_OPTIONS = [:humanize_name].freeze
32
32
 
33
- def initialize(options={}, &block)
33
+ def initialize(options = {}, &block)
34
34
  @resource = options.delete(:resource)
35
35
  @columns, @options, @block = [], options, block
36
36
  end
37
37
 
38
- def column(name, options={}, &block)
38
+ def column(name, options = {}, &block)
39
39
  @columns << Column.new(name, @resource, column_transitive_options.merge(options), block)
40
40
  end
41
41
 
@@ -45,7 +45,7 @@ module ActiveAdmin
45
45
  options = ActiveAdmin.application.csv_options.merge self.options
46
46
  bom = options.delete :byte_order_mark
47
47
  column_names = options.delete(:column_names) { true }
48
- csv_options = options.except :encoding_options
48
+ csv_options = options.except :encoding_options, :humanize_name
49
49
 
50
50
  csv << bom if bom
51
51
 
@@ -38,7 +38,7 @@ module ActiveAdmin
38
38
  #
39
39
  # Which is especially useful if you're looking up a gem with dashes in the name.
40
40
  #
41
- # ActiveAdmin::Dependency['jquery-ui-rails'] < 5
41
+ # ActiveAdmin::Dependency['jquery-rails'] < 5
42
42
  # => false
43
43
  #
44
44
  def self.method_missing(name, *args)
@@ -63,11 +63,11 @@ module ActiveAdmin
63
63
  end
64
64
 
65
65
  class RegistrationsController < ::Devise::RegistrationsController
66
- include ::ActiveAdmin::Devise::Controller
66
+ include ::ActiveAdmin::Devise::Controller
67
67
  end
68
68
 
69
69
  class ConfirmationsController < ::Devise::ConfirmationsController
70
- include ::ActiveAdmin::Devise::Controller
70
+ include ::ActiveAdmin::Devise::Controller
71
71
  end
72
72
 
73
73
  def self.controllers_for_filters
@@ -116,7 +116,7 @@ module ActiveAdmin
116
116
 
117
117
  # Either add/remove the batch action
118
118
  unless options == false
119
- config.add_batch_action( sym, title, options, &block )
119
+ config.add_batch_action(sym, title, options, &block)
120
120
  else
121
121
  config.remove_batch_action sym
122
122
  end
@@ -137,7 +137,7 @@ module ActiveAdmin
137
137
  # Pass a block returning the name of a menu you want rendered for the request, being
138
138
  # executed in the context of the controller
139
139
  #
140
- def navigation_menu(menu_name=nil, &block)
140
+ def navigation_menu(menu_name = nil, &block)
141
141
  config.navigation_menu_name = menu_name || block
142
142
  end
143
143
 
@@ -2,6 +2,8 @@ require 'active_admin/filters/dsl'
2
2
  require 'active_admin/filters/resource_extension'
3
3
  require 'active_admin/filters/formtastic_addons'
4
4
  require 'active_admin/filters/forms'
5
+ require 'active_admin/helpers/optional_display'
6
+ require 'active_admin/filters/active_sidebar'
5
7
 
6
8
  # Add our Extensions
7
9
  ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Filters::DSL
@@ -1,29 +1,28 @@
1
- require 'active_admin/filters/humanized'
1
+ require 'active_admin/filters/active_filter'
2
2
 
3
3
  module ActiveAdmin
4
4
  module Filters
5
5
 
6
6
  class Active
7
- attr_accessor :filters, :scope
7
+ attr_accessor :filters, :resource
8
8
 
9
- def initialize(resource_class, params)
10
- @resource_class = resource_class
11
- @params = params.to_unsafe_h
12
- @scope = humanize_scope
13
- @filters = build_filters
9
+ # Instantiate a `Active` object containing collection of current active filters
10
+
11
+ # @param resource [ActiveAdmin::Resource] current resource
12
+ # @param search [Ransack::Search] search object
13
+ #
14
+ # @see ActiveAdmin::ResourceController::DataAcces#apply_filtering
15
+ def initialize(resource, search)
16
+ @resource = resource
17
+ @filters = build_filters(search.conditions)
14
18
  end
15
19
 
16
20
  private
17
21
 
18
- def build_filters
19
- filters = @params['q'] || []
20
- filters.map{ |param| Humanized.new(param) }
22
+ def build_filters(conditions)
23
+ conditions.map { |condition| ActiveFilter.new(resource, condition.dup) }
21
24
  end
22
25
 
23
- def humanize_scope
24
- scope = @params['scope']
25
- scope ? scope.humanize : "All"
26
- end
27
26
  end
28
27
 
29
28
  end
@@ -0,0 +1,87 @@
1
+ module ActiveAdmin
2
+ module Filters
3
+
4
+ class ActiveFilter
5
+ include ActiveAdmin::ViewHelpers
6
+
7
+ attr_reader :resource, :condition, :related_class
8
+
9
+ # Instantiate a `ActiveFilter`
10
+ #
11
+ # @param resource [ActiveAdmin::Resource] current resource
12
+ # @param condition [Ransack::Nodes::Condition] applied ransack condition
13
+ def initialize(resource, condition)
14
+ @resource = resource
15
+ @condition = condition
16
+ @related_class = find_class if find_class?
17
+ end
18
+
19
+ def values
20
+ condition_values = condition.values.map(&:value)
21
+ if related_class
22
+ related_class.find(condition_values)
23
+ else
24
+ condition_values
25
+ end
26
+ end
27
+
28
+ def label
29
+ # TODO: to remind us to go back to the simpler str.downcase once we support ruby >= 2.4 only.
30
+ translated_predicate = predicate_name.mb_chars.downcase.to_s
31
+ if related_class
32
+ "#{related_class.model_name.human} #{translated_predicate}".strip
33
+ else
34
+ "#{attribute_name} #{translated_predicate}".strip
35
+ end
36
+ end
37
+
38
+ def predicate_name
39
+ I18n.t("active_admin.filters.predicates.#{condition.predicate.name}",
40
+ default: ransack_predicate_name)
41
+ end
42
+
43
+ def html_options
44
+ { class: "current_filter current_filter_#{condition.key}" }
45
+ end
46
+
47
+ private
48
+
49
+ def resource_class
50
+ resource.resource_class
51
+ end
52
+
53
+ def attribute_name
54
+ resource_class.human_attribute_name(name)
55
+ end
56
+
57
+ #@return Ransack::Nodes::Attribute
58
+ def condition_attribute
59
+ condition.attributes[0]
60
+ end
61
+
62
+ def name
63
+ condition_attribute.attr_name
64
+ end
65
+
66
+ def ransack_predicate_name
67
+ Ransack::Translate.predicate(condition.predicate.name)
68
+ end
69
+
70
+ def find_class?
71
+ ['eq', 'in'].include? condition.predicate.arel_predicate
72
+ end
73
+
74
+ # detect related class for Ransack::Nodes::Attribute
75
+ def find_class
76
+ if condition_attribute.klass != resource_class && condition_attribute.klass.primary_key == name.to_s
77
+ condition_attribute.klass
78
+ else
79
+ assoc = condition_attribute.klass.reflect_on_all_associations.
80
+ reject { |r| r.options[:polymorphic] }. #skip polymorphic
81
+ detect { |r| r.foreign_key.to_s == name.to_s }
82
+ assoc.class_name.constantize if assoc
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,50 @@
1
+ require 'active_admin/filters/active'
2
+
3
+ module ActiveAdmin
4
+ module Filters
5
+ class ActiveSidebar < ActiveAdmin::SidebarSection
6
+
7
+ def initialize
8
+ super I18n.t("active_admin.search_status.headline"), sidebar_options
9
+ end
10
+
11
+ def block
12
+ -> do
13
+ active_filters = ActiveAdmin::Filters::Active.new(active_admin_config, assigns[:search])
14
+ span do
15
+ if current_scope
16
+ h4 I18n.t("active_admin.search_status.current_scope"), style: 'display: inline'
17
+ b scope_name(current_scope), class: 'current_scope_name', style: "display: inline"
18
+ end
19
+ div style: "margin-top: 10px" do
20
+ h4 I18n.t("active_admin.search_status.current_filters"), style: 'margin-bottom: 10px'
21
+ ul do
22
+ if active_filters.filters.blank?
23
+ li I18n.t("active_admin.search_status.no_current_filters")
24
+ else
25
+ active_filters.filters.each do |filter|
26
+ li filter.html_options do
27
+ span do
28
+ text_node filter.label
29
+ end
30
+ b do
31
+ text_node filter.values.map { |v| pretty_format(v) }.to_sentence.html_safe
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ protected
43
+
44
+ def sidebar_options
45
+ { only: :index, if: -> { active_admin_config.current_filters_enabled? && (params[:q] || params[:scope]) } }
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -41,7 +41,6 @@ module ActiveAdmin
41
41
  end
42
42
  end
43
43
 
44
-
45
44
  # This module is included into the view
46
45
  module ViewHelper
47
46
 
@@ -58,7 +57,7 @@ module ActiveAdmin
58
57
  filters.each do |attribute, opts|
59
58
  next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
60
59
  next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
61
-
60
+ opts[:input_html] = instance_exec(&opts[:input_html]) if opts[:input_html].is_a?(Proc)
62
61
  f.filter attribute, opts.except(:if, :unless)
63
62
  end
64
63
 
@@ -1,5 +1,3 @@
1
- require 'active_admin/filters/active'
2
-
3
1
  module ActiveAdmin
4
2
  module Filters
5
3
 
@@ -148,35 +146,9 @@ module ActiveAdmin
148
146
  end
149
147
 
150
148
  def add_search_status_sidebar_section
151
- self.sidebar_sections << search_status_section
152
- end
153
-
154
- def search_status_section
155
- ActiveAdmin::SidebarSection.new I18n.t("active_admin.search_status.headline"), only: :index, if: -> {active_admin_config.current_filters_enabled? && (params[:q] || params[:scope]) } do
156
- active = ActiveAdmin::Filters::Active.new(resource_class, params)
157
-
158
- span do
159
- h4 I18n.t("active_admin.search_status.current_scope"), style: 'display: inline'
160
- b active.scope, style: "display: inline"
161
-
162
- div style: "margin-top: 10px" do
163
- h4 I18n.t("active_admin.search_status.current_filters"), style: 'margin-bottom: 10px'
164
- ul do
165
- if active.filters.blank?
166
- li I18n.t("active_admin.search_status.no_current_filters")
167
- else
168
- active.filters.each do |filter|
169
- li do
170
- span filter.body
171
- b filter.value
172
- end
173
- end
174
- end
175
- end
176
- end
177
- end
178
- end
149
+ self.sidebar_sections << ActiveAdmin::Filters::ActiveSidebar.new
179
150
  end
151
+
180
152
  end
181
153
 
182
154
  end
@@ -70,7 +70,6 @@ module ActiveAdmin
70
70
 
71
71
  end
72
72
 
73
-
74
73
  # Allows you to define child classes that should receive the same
75
74
  # settings, as well as the same default values.
76
75
  #
@@ -10,11 +10,11 @@ module ActiveAdmin
10
10
  end
11
11
 
12
12
  private
13
- def datepicker_options
14
- options = self.options.fetch(:datepicker_options, {})
15
- options = Hash[options.map{ |k, v| [k.to_s.camelcase(:lower), v] }]
16
- { datepicker_options: options }
17
- end
13
+ def datepicker_options
14
+ options = self.options.fetch(:datepicker_options, {})
15
+ options = Hash[options.map{ |k, v| [k.to_s.camelcase(:lower), v] }]
16
+ { datepicker_options: options }
17
+ end
18
18
  end
19
19
  end
20
20
  end
@@ -7,9 +7,8 @@ module ActiveAdmin
7
7
  def to_html
8
8
  input_wrapping do
9
9
  [ label_html,
10
- builder.text_field(gt_input_name, input_html_options(gt_input_name)),
11
- template.content_tag(:span, "-", class: "seperator"),
12
- builder.text_field(lt_input_name, input_html_options(lt_input_name)),
10
+ builder.text_field(gt_input_name, input_html_options(gt_input_name, gt_input_placeholder)),
11
+ builder.text_field(lt_input_name, input_html_options(lt_input_name, lt_input_placeholder)),
13
12
  ].join("\n").html_safe
14
13
  end
15
14
  end
@@ -23,7 +22,7 @@ module ActiveAdmin
23
22
  column && column.type == :date ? "#{method}_lteq" : "#{method}_lteq_datetime"
24
23
  end
25
24
 
26
- def input_html_options(input_name = gt_input_name)
25
+ def input_html_options(input_name = gt_input_name, placeholder = gt_input_placeholder)
27
26
  current_value = begin
28
27
  #cast value to date object before rendering input
29
28
  @object.public_send(input_name).to_s.to_date
@@ -33,8 +32,17 @@ module ActiveAdmin
33
32
  { size: 12,
34
33
  class: "datepicker",
35
34
  maxlength: 10,
35
+ placeholder: placeholder,
36
36
  value: current_value ? current_value.strftime("%Y-%m-%d") : "" }
37
37
  end
38
+
39
+ def gt_input_placeholder
40
+ I18n.t("active_admin.filters.predicates.from")
41
+ end
42
+
43
+ def lt_input_placeholder
44
+ I18n.t("active_admin.filters.predicates.to")
45
+ end
38
46
  end
39
47
  end
40
48
  end
@@ -23,4 +23,3 @@ module ActiveAdmin
23
23
  end
24
24
  end
25
25
  end
26
-
@@ -48,10 +48,10 @@ module ActiveAdmin
48
48
  #
49
49
  def add(options)
50
50
  item = if parent = options.delete(:parent)
51
- (self[parent] || add(label: parent)).add options
52
- else
53
- _add options.merge parent: self
54
- end
51
+ (self[parent] || add(label: parent)).add options
52
+ else
53
+ _add options.merge parent: self
54
+ end
55
55
 
56
56
  yield(item) if block_given?
57
57
 
@@ -86,8 +86,6 @@ module ActiveAdmin
86
86
  @menus[menu_name] ||= ActiveAdmin::Menu.new
87
87
  end
88
88
 
89
-
90
-
91
89
  end
92
90
 
93
91
  end
@@ -219,7 +219,7 @@ module ActiveAdmin
219
219
  end
220
220
  end
221
221
 
222
- # TODO replace `eval` with `Class.new`
222
+ # TODO: replace `eval` with `Class.new`
223
223
  def register_resource_controller(config)
224
224
  eval "class ::#{config.controller_name} < ActiveAdmin::ResourceController; end"
225
225
  config.controller.active_admin_config = config
@@ -1,15 +1,11 @@
1
1
  module ActiveAdmin
2
2
  class Comment < ActiveRecord::Base
3
3
 
4
- self.table_name = 'active_admin_comments'
4
+ self.table_name = "#{table_name_prefix}active_admin_comments#{table_name_suffix}"
5
5
 
6
6
  belongs_to :resource, polymorphic: true
7
7
  belongs_to :author, polymorphic: true
8
8
 
9
- if defined? ProtectedAttributes
10
- attr_accessible :resource, :resource_id, :resource_type, :body, :namespace
11
- end
12
-
13
9
  validates_presence_of :body, :namespace, :resource
14
10
 
15
11
  before_create :set_resource_type
@@ -12,7 +12,7 @@ module ActiveAdmin
12
12
 
13
13
  def build(resource)
14
14
  @resource = resource
15
- @comments = ActiveAdmin::Comment.find_for_resource_in_namespace resource, active_admin_namespace.name
15
+ @comments = ActiveAdmin::Comment.find_for_resource_in_namespace(resource, active_admin_namespace.name).page(params[:page])
16
16
  super(title, for: resource)
17
17
  build_comments
18
18
  end
@@ -20,11 +20,13 @@ module ActiveAdmin
20
20
  protected
21
21
 
22
22
  def title
23
- I18n.t 'active_admin.comments.title_content', count: @comments.count
23
+ I18n.t 'active_admin.comments.title_content', count: @comments.total_count
24
24
  end
25
25
 
26
26
  def build_comments
27
27
  @comments.any? ? @comments.each(&method(:build_comment)) : build_empty_message
28
+ div page_entries_info(@comments).html_safe, class: 'pagination_information'
29
+ text_node paginate @comments
28
30
  build_comment_form
29
31
  end
30
32