activeadmin 1.1.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (486) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +492 -108
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +117 -49
  5. data/README.md +73 -19
  6. data/app/assets/javascripts/active_admin/base.js +509 -0
  7. data/app/assets/stylesheets/active_admin/_base.scss +29 -29
  8. data/app/assets/stylesheets/active_admin/_forms.scss +3 -15
  9. data/app/assets/stylesheets/active_admin/_header.scss +3 -5
  10. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  11. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  12. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  13. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  14. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  15. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  16. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  17. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +5 -0
  18. data/app/assets/stylesheets/active_admin/print.scss +2 -2
  19. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  20. data/app/javascript/active_admin/base.js +19 -0
  21. data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  22. data/app/javascript/active_admin/ext/jquery.js +9 -0
  23. data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  24. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  25. data/app/javascript/active_admin/initializers/datepicker.js +16 -0
  26. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  27. data/app/javascript/active_admin/initializers/filters.js +10 -0
  28. data/app/javascript/active_admin/initializers/has-many.js +95 -0
  29. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  30. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  31. data/app/javascript/active_admin/initializers/tabs.js +6 -0
  32. data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  33. data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  34. data/app/javascript/active_admin/lib/filters.js +39 -0
  35. data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  36. data/app/javascript/active_admin/lib/per-page.js +38 -0
  37. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  38. data/app/javascript/active_admin/lib/utils.js +40 -0
  39. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  40. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  41. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  42. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  43. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  44. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  45. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  46. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  47. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  48. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  49. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  50. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  51. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  52. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  53. data/config/locales/ar.yml +3 -2
  54. data/config/locales/az.yml +138 -0
  55. data/config/locales/bg.yml +1 -1
  56. data/config/locales/bs.yml +1 -0
  57. data/config/locales/ca.yml +1 -1
  58. data/config/locales/cs.yml +1 -0
  59. data/config/locales/da.yml +1 -0
  60. data/config/locales/de-CH.yml +1 -0
  61. data/config/locales/de.yml +29 -0
  62. data/config/locales/el.yml +1 -0
  63. data/config/locales/en-CA.yml +1 -0
  64. data/config/locales/en-GB.yml +1 -0
  65. data/config/locales/en.yml +21 -1
  66. data/config/locales/eo.yml +145 -0
  67. data/config/locales/es-MX.yml +1 -0
  68. data/config/locales/es.yml +21 -1
  69. data/config/locales/fa.yml +1 -0
  70. data/config/locales/fi.yml +2 -1
  71. data/config/locales/fr.yml +2 -1
  72. data/config/locales/he.yml +1 -1
  73. data/config/locales/hr.yml +1 -0
  74. data/config/locales/hu.yml +5 -0
  75. data/config/locales/id.yml +1 -0
  76. data/config/locales/it.yml +13 -3
  77. data/config/locales/ja.yml +6 -0
  78. data/config/locales/ko.yml +1 -0
  79. data/config/locales/lt.yml +3 -2
  80. data/config/locales/lv.yml +1 -0
  81. data/config/locales/mk.yml +134 -0
  82. data/config/locales/nb.yml +16 -5
  83. data/config/locales/nl.yml +12 -0
  84. data/config/locales/pl.yml +72 -3
  85. data/config/locales/pt-BR.yml +9 -0
  86. data/config/locales/pt-PT.yml +1 -0
  87. data/config/locales/ro.yml +1 -0
  88. data/config/locales/ru.yml +3 -0
  89. data/config/locales/sk.yml +60 -0
  90. data/config/locales/sv-SE.yml +3 -0
  91. data/config/locales/tr.yml +10 -0
  92. data/config/locales/uk.yml +3 -0
  93. data/config/locales/vi.yml +48 -6
  94. data/config/locales/zh-CN.yml +34 -5
  95. data/config/locales/zh-TW.yml +1 -0
  96. data/docs/.gitignore +1 -0
  97. data/docs/0-installation.md +2 -2
  98. data/docs/1-general-configuration.md +36 -1
  99. data/docs/10-custom-pages.md +14 -0
  100. data/docs/12-arbre-components.md +41 -1
  101. data/docs/13-authorization-adapter.md +41 -22
  102. data/docs/2-resource-customization.md +10 -5
  103. data/docs/3-index-pages/custom-index.md +1 -1
  104. data/docs/3-index-pages/index-as-blog.md +1 -1
  105. data/docs/3-index-pages/index-as-table.md +12 -5
  106. data/docs/3-index-pages.md +17 -0
  107. data/docs/5-forms.md +16 -2
  108. data/docs/8-custom-actions.md +11 -0
  109. data/docs/CNAME +1 -1
  110. data/docs/Gemfile +2 -1
  111. data/docs/Gemfile.lock +249 -0
  112. data/docs/_config.yml +3 -1
  113. data/docs/_includes/toc.html +1 -1
  114. data/docs/_includes/top-menu.html +9 -1
  115. data/docs/documentation.md +1 -1
  116. data/docs/images/tidelift.svg +14 -0
  117. data/docs/index.html +109 -8
  118. data/docs/stylesheets/main.css +55 -2
  119. data/lib/active_admin/abstract_view_factory.rb +13 -51
  120. data/lib/active_admin/application.rb +53 -160
  121. data/lib/active_admin/application_settings.rb +42 -0
  122. data/lib/active_admin/asset_registration.rb +0 -8
  123. data/lib/active_admin/base_controller/authorization.rb +4 -6
  124. data/lib/active_admin/base_controller.rb +6 -6
  125. data/lib/active_admin/batch_actions/controller.rb +2 -2
  126. data/lib/active_admin/batch_actions/resource_extension.rb +9 -5
  127. data/lib/active_admin/callbacks.rb +1 -1
  128. data/lib/active_admin/controller_action.rb +2 -1
  129. data/lib/active_admin/csv_builder.rb +10 -7
  130. data/lib/active_admin/dependency.rb +3 -67
  131. data/lib/active_admin/deprecation.rb +0 -25
  132. data/lib/active_admin/dsl.rb +1 -8
  133. data/lib/active_admin/dynamic_setting.rb +38 -0
  134. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  135. data/lib/active_admin/engine.rb +5 -0
  136. data/lib/active_admin/error.rb +4 -2
  137. data/lib/active_admin/filters/active_filter.rb +49 -12
  138. data/lib/active_admin/filters/active_sidebar.rb +6 -2
  139. data/lib/active_admin/filters/forms.rb +7 -4
  140. data/lib/active_admin/filters/formtastic_addons.rb +1 -1
  141. data/lib/active_admin/filters/resource_extension.rb +28 -4
  142. data/lib/active_admin/form_builder.rb +98 -63
  143. data/lib/active_admin/generators/boilerplate.rb +12 -4
  144. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  145. data/lib/active_admin/inputs/datepicker_input.rb +8 -1
  146. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  147. data/lib/active_admin/inputs/filters/date_range_input.rb +4 -4
  148. data/lib/active_admin/inputs/filters/select_input.rb +5 -1
  149. data/lib/active_admin/menu.rb +2 -8
  150. data/lib/active_admin/menu_item.rb +4 -32
  151. data/lib/active_admin/namespace.rb +20 -8
  152. data/lib/active_admin/namespace_settings.rb +123 -0
  153. data/lib/active_admin/order_clause.rb +2 -2
  154. data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
  155. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +17 -7
  156. data/lib/active_admin/orm/active_record/comments.rb +15 -4
  157. data/lib/active_admin/page_dsl.rb +1 -1
  158. data/lib/active_admin/page_presenter.rb +2 -1
  159. data/lib/active_admin/pundit_adapter.rb +18 -5
  160. data/lib/active_admin/resource/action_items.rb +7 -2
  161. data/lib/active_admin/resource/attributes.rb +7 -4
  162. data/lib/active_admin/resource/belongs_to.rb +6 -1
  163. data/lib/active_admin/resource/menu.rb +3 -3
  164. data/lib/active_admin/resource/model.rb +15 -0
  165. data/lib/active_admin/resource/naming.rb +3 -3
  166. data/lib/active_admin/resource/routes.rb +20 -7
  167. data/lib/active_admin/resource/scopes.rb +3 -3
  168. data/lib/active_admin/resource/sidebars.rb +1 -1
  169. data/lib/active_admin/resource.rb +18 -4
  170. data/lib/active_admin/resource_collection.rb +2 -2
  171. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  172. data/lib/active_admin/resource_controller/data_access.rb +5 -1
  173. data/lib/active_admin/resource_controller/decorators.rb +5 -5
  174. data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
  175. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  176. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  177. data/lib/active_admin/resource_controller.rb +2 -0
  178. data/lib/active_admin/resource_dsl.rb +7 -3
  179. data/lib/active_admin/router.rb +90 -84
  180. data/lib/active_admin/scope.rb +16 -8
  181. data/lib/active_admin/settings_node.rb +19 -0
  182. data/lib/active_admin/sidebar_section.rb +3 -1
  183. data/lib/active_admin/version.rb +1 -1
  184. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
  185. data/lib/active_admin/view_helpers/display_helper.rb +13 -4
  186. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  187. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
  188. data/lib/active_admin/view_helpers.rb +1 -1
  189. data/lib/active_admin/views/components/active_admin_form.rb +9 -4
  190. data/lib/active_admin/views/components/attributes_table.rb +3 -3
  191. data/lib/active_admin/views/components/menu.rb +32 -0
  192. data/lib/active_admin/views/components/menu_item.rb +58 -0
  193. data/lib/active_admin/views/components/paginated_collection.rb +4 -3
  194. data/lib/active_admin/views/components/scopes.rb +11 -4
  195. data/lib/active_admin/views/components/sidebar.rb +13 -0
  196. data/lib/active_admin/views/components/site_title.rb +5 -6
  197. data/lib/active_admin/views/components/status_tag.rb +6 -19
  198. data/lib/active_admin/views/components/table_for.rb +4 -12
  199. data/lib/active_admin/views/components/tabs.rb +15 -3
  200. data/lib/active_admin/views/footer.rb +3 -7
  201. data/lib/active_admin/views/header.rb +3 -15
  202. data/lib/active_admin/views/index_as_blog.rb +1 -1
  203. data/lib/active_admin/views/index_as_grid.rb +25 -25
  204. data/lib/active_admin/views/index_as_table.rb +18 -10
  205. data/lib/active_admin/views/pages/base.rb +31 -54
  206. data/lib/active_admin/views/pages/index.rb +1 -0
  207. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  208. data/lib/active_admin/views.rb +1 -1
  209. data/lib/active_admin.rb +9 -4
  210. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  211. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  212. data/lib/generators/active_admin/install/install_generator.rb +7 -3
  213. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +38 -3
  214. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  215. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  216. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  217. data/lib/generators/active_admin/resource/resource_generator.rb +2 -2
  218. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  219. data/lib/ransack_ext.rb +3 -3
  220. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  221. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  222. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  223. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  224. metadata +115 -527
  225. data/.github/ISSUE_TEMPLATE.md +0 -20
  226. data/.gitignore +0 -49
  227. data/.mdlrc +0 -1
  228. data/.rubocop.yml +0 -76
  229. data/.simplecov +0 -13
  230. data/.travis.yml +0 -51
  231. data/.yardopts +0 -7
  232. data/Gemfile +0 -58
  233. data/Rakefile +0 -54
  234. data/activeadmin.gemspec +0 -32
  235. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  236. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  237. data/app/assets/images/active_admin/orderable.png +0 -0
  238. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  239. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  240. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  241. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  242. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  243. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  244. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  245. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  246. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  247. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  248. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  249. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  250. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  251. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  252. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  253. data/codecov.yml +0 -25
  254. data/config/i18n-tasks.yml +0 -26
  255. data/config/mdl_style.rb +0 -9
  256. data/cucumber.yml +0 -3
  257. data/features/action_item.feature +0 -73
  258. data/features/authorization.feature +0 -64
  259. data/features/authorization_cancan.feature +0 -52
  260. data/features/authorization_pundit.feature +0 -37
  261. data/features/belongs_to.feature +0 -124
  262. data/features/breadcrumb.feature +0 -75
  263. data/features/comments/commenting.feature +0 -178
  264. data/features/comments/viewing_index.feature +0 -19
  265. data/features/create_another.feature +0 -55
  266. data/features/dashboard.feature +0 -16
  267. data/features/decorators.feature +0 -43
  268. data/features/development_reloading.feature +0 -28
  269. data/features/edit_page.feature +0 -116
  270. data/features/favicon.feature +0 -20
  271. data/features/first_boot.feature +0 -16
  272. data/features/footer.feature +0 -28
  273. data/features/global_navigation.feature +0 -29
  274. data/features/i18n.feature +0 -55
  275. data/features/index/batch_actions.feature +0 -218
  276. data/features/index/filters.feature +0 -239
  277. data/features/index/format_as_csv.feature +0 -220
  278. data/features/index/formats.feature +0 -88
  279. data/features/index/index_as_block.feature +0 -15
  280. data/features/index/index_as_blog.feature +0 -69
  281. data/features/index/index_as_grid.feature +0 -45
  282. data/features/index/index_as_table.feature +0 -291
  283. data/features/index/index_blank_slate.feature +0 -83
  284. data/features/index/index_parameters.feature +0 -75
  285. data/features/index/index_scope_to.feature +0 -56
  286. data/features/index/index_scopes.feature +0 -285
  287. data/features/index/page_title.feature +0 -41
  288. data/features/index/pagination.feature +0 -63
  289. data/features/index/switch_index_view.feature +0 -73
  290. data/features/menu.feature +0 -72
  291. data/features/meta_tags.feature +0 -21
  292. data/features/new_page.feature +0 -107
  293. data/features/registering_assets.feature +0 -38
  294. data/features/registering_pages.feature +0 -237
  295. data/features/registering_resources.feature +0 -33
  296. data/features/renamed_resource.feature +0 -30
  297. data/features/root_to.feature +0 -17
  298. data/features/show/attributes_table_title.feature +0 -54
  299. data/features/show/columns.feature +0 -40
  300. data/features/show/default_content.feature +0 -44
  301. data/features/show/page_title.feature +0 -58
  302. data/features/show/tabs.feature +0 -33
  303. data/features/sidebar_sections.feature +0 -210
  304. data/features/site_title.feature +0 -47
  305. data/features/specifying_actions.feature +0 -118
  306. data/features/step_definitions/action_item_steps.rb +0 -7
  307. data/features/step_definitions/action_link_steps.rb +0 -19
  308. data/features/step_definitions/additional_web_steps.rb +0 -81
  309. data/features/step_definitions/asset_steps.rb +0 -15
  310. data/features/step_definitions/attribute_steps.rb +0 -18
  311. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  312. data/features/step_definitions/batch_action_steps.rb +0 -81
  313. data/features/step_definitions/blog_steps.rb +0 -3
  314. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  315. data/features/step_definitions/column_steps.rb +0 -8
  316. data/features/step_definitions/comment_steps.rb +0 -32
  317. data/features/step_definitions/configuration_steps.rb +0 -100
  318. data/features/step_definitions/dashboard_steps.rb +0 -15
  319. data/features/step_definitions/factory_steps.rb +0 -35
  320. data/features/step_definitions/filter_steps.rb +0 -48
  321. data/features/step_definitions/flash_steps.rb +0 -11
  322. data/features/step_definitions/footer_steps.rb +0 -11
  323. data/features/step_definitions/format_steps.rb +0 -56
  324. data/features/step_definitions/i18n_steps.rb +0 -11
  325. data/features/step_definitions/index_scope_steps.rb +0 -29
  326. data/features/step_definitions/index_views_steps.rb +0 -3
  327. data/features/step_definitions/layout_steps.rb +0 -3
  328. data/features/step_definitions/member_link_steps.rb +0 -7
  329. data/features/step_definitions/menu_steps.rb +0 -11
  330. data/features/step_definitions/meta_tag_steps.rb +0 -3
  331. data/features/step_definitions/pagination_steps.rb +0 -15
  332. data/features/step_definitions/sidebar_steps.rb +0 -11
  333. data/features/step_definitions/site_title_steps.rb +0 -17
  334. data/features/step_definitions/tab_steps.rb +0 -8
  335. data/features/step_definitions/table_steps.rb +0 -116
  336. data/features/step_definitions/user_steps.rb +0 -52
  337. data/features/step_definitions/web_steps.rb +0 -86
  338. data/features/sti_resource.feature +0 -65
  339. data/features/strong_parameters.feature +0 -69
  340. data/features/support/env.rb +0 -122
  341. data/features/support/paths.rb +0 -73
  342. data/features/support/regular_env.rb +0 -7
  343. data/features/support/reload_env.rb +0 -7
  344. data/features/support/selectors.rb +0 -45
  345. data/features/users/logging_in.feature +0 -36
  346. data/features/users/logging_out.feature +0 -13
  347. data/features/users/resetting_password.feature +0 -34
  348. data/gemfiles/rails_42.gemfile +0 -10
  349. data/gemfiles/rails_50.gemfile +0 -10
  350. data/gemfiles/rails_51.gemfile +0 -10
  351. data/lib/active_admin/event.rb +0 -24
  352. data/lib/active_admin/helpers/settings.rb +0 -114
  353. data/lib/active_admin/reloader.rb +0 -25
  354. data/lib/bug_report_templates/active_admin_master.rb +0 -113
  355. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  356. data/spec/bug_report_templates_spec.rb +0 -26
  357. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  358. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  359. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  360. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  361. data/spec/javascripts/fixtures/flashes.html +0 -2
  362. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  363. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  364. data/spec/javascripts/support/jasmine.yml +0 -74
  365. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  366. data/spec/rails_helper.rb +0 -59
  367. data/spec/requests/default_namespace_spec.rb +0 -81
  368. data/spec/requests/memory_spec.rb +0 -25
  369. data/spec/requests/stylesheets_spec.rb +0 -18
  370. data/spec/spec_helper.rb +0 -1
  371. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  372. data/spec/support/active_admin_request_helpers.rb +0 -39
  373. data/spec/support/rails_template.rb +0 -150
  374. data/spec/support/rails_template_with_data.rb +0 -327
  375. data/spec/support/templates/admin/stores.rb +0 -7
  376. data/spec/support/templates/en.yml +0 -8
  377. data/spec/support/templates/manifest.js +0 -3
  378. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  379. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  380. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  381. data/spec/support/templates/policies/application_policy.rb +0 -44
  382. data/spec/support/templates/policies/category_policy.rb +0 -7
  383. data/spec/support/templates/policies/post_policy.rb +0 -15
  384. data/spec/support/templates/policies/store_policy.rb +0 -11
  385. data/spec/support/templates/policies/user_policy.rb +0 -11
  386. data/spec/support/templates/post_decorator.rb +0 -10
  387. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  388. data/spec/unit/action_builder_spec.rb +0 -125
  389. data/spec/unit/active_admin_spec.rb +0 -11
  390. data/spec/unit/application_spec.rb +0 -184
  391. data/spec/unit/asset_registration_spec.rb +0 -81
  392. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  393. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  394. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  395. data/spec/unit/auto_link_spec.rb +0 -93
  396. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  397. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  398. data/spec/unit/belongs_to_spec.rb +0 -76
  399. data/spec/unit/cancan_adapter_spec.rb +0 -43
  400. data/spec/unit/comments_spec.rb +0 -176
  401. data/spec/unit/component_spec.rb +0 -18
  402. data/spec/unit/config_shared_examples.rb +0 -59
  403. data/spec/unit/controller_filters_spec.rb +0 -41
  404. data/spec/unit/csv_builder_spec.rb +0 -304
  405. data/spec/unit/dependency_spec.rb +0 -135
  406. data/spec/unit/devise_spec.rb +0 -110
  407. data/spec/unit/dsl_spec.rb +0 -120
  408. data/spec/unit/filters/active_filter_spec.rb +0 -135
  409. data/spec/unit/filters/active_spec.rb +0 -24
  410. data/spec/unit/filters/filter_form_builder_spec.rb +0 -502
  411. data/spec/unit/filters/resource_spec.rb +0 -128
  412. data/spec/unit/form_builder_spec.rb +0 -990
  413. data/spec/unit/generators/install_spec.rb +0 -31
  414. data/spec/unit/helpers/collection_spec.rb +0 -68
  415. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  416. data/spec/unit/helpers/settings_spec.rb +0 -30
  417. data/spec/unit/i18n_spec.rb +0 -29
  418. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  419. data/spec/unit/menu_collection_spec.rb +0 -62
  420. data/spec/unit/menu_item_spec.rb +0 -141
  421. data/spec/unit/menu_spec.rb +0 -71
  422. data/spec/unit/namespace/authorization_spec.rb +0 -27
  423. data/spec/unit/namespace/register_page_spec.rb +0 -99
  424. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  425. data/spec/unit/namespace_spec.rb +0 -124
  426. data/spec/unit/order_clause_spec.rb +0 -81
  427. data/spec/unit/page_controller_spec.rb +0 -5
  428. data/spec/unit/page_spec.rb +0 -128
  429. data/spec/unit/pretty_format_spec.rb +0 -82
  430. data/spec/unit/pundit_adapter_spec.rb +0 -98
  431. data/spec/unit/resource/action_items_spec.rb +0 -69
  432. data/spec/unit/resource/attributes_spec.rb +0 -49
  433. data/spec/unit/resource/includes_spec.rb +0 -21
  434. data/spec/unit/resource/menu_spec.rb +0 -18
  435. data/spec/unit/resource/naming_spec.rb +0 -122
  436. data/spec/unit/resource/ordering_spec.rb +0 -35
  437. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  438. data/spec/unit/resource/pagination_spec.rb +0 -38
  439. data/spec/unit/resource/routes_spec.rb +0 -125
  440. data/spec/unit/resource/scopes_spec.rb +0 -50
  441. data/spec/unit/resource/sidebars_spec.rb +0 -43
  442. data/spec/unit/resource_collection_spec.rb +0 -175
  443. data/spec/unit/resource_controller/data_access_spec.rb +0 -230
  444. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  445. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  446. data/spec/unit/resource_controller_spec.rb +0 -273
  447. data/spec/unit/resource_registration_spec.rb +0 -61
  448. data/spec/unit/resource_spec.rb +0 -320
  449. data/spec/unit/routing_spec.rb +0 -211
  450. data/spec/unit/scope_spec.rb +0 -209
  451. data/spec/unit/settings_spec.rb +0 -117
  452. data/spec/unit/view_factory_spec.rb +0 -19
  453. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -252
  454. data/spec/unit/view_helpers/display_helper_spec.rb +0 -195
  455. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  456. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  457. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  458. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  459. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  460. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  461. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  462. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  463. data/spec/unit/views/components/columns_spec.rb +0 -187
  464. data/spec/unit/views/components/index_list_spec.rb +0 -49
  465. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  466. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  467. data/spec/unit/views/components/panel_spec.rb +0 -58
  468. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  469. data/spec/unit/views/components/site_title_spec.rb +0 -76
  470. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  471. data/spec/unit/views/components/table_for_spec.rb +0 -436
  472. data/spec/unit/views/components/tabs_spec.rb +0 -67
  473. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  474. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  475. data/spec/unit/views/pages/form_spec.rb +0 -54
  476. data/spec/unit/views/pages/index_spec.rb +0 -60
  477. data/spec/unit/views/pages/layout_spec.rb +0 -59
  478. data/spec/unit/views/pages/show_spec.rb +0 -32
  479. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  480. data/tasks/docs.rake +0 -64
  481. data/tasks/lint.rake +0 -21
  482. data/tasks/local.rake +0 -25
  483. data/tasks/parallel_tests.rake +0 -66
  484. data/tasks/test.rake +0 -29
  485. /data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
  486. /data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +0 -0
@@ -12,9 +12,9 @@ module ActiveAdmin
12
12
  # 1. try using `display_name` if we can locate a DB object
13
13
  # 2. try using the model name translation
14
14
  # 3. default to calling `titlecase` on the URL fragment
15
- if part =~ /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/ && parts[index-1]
15
+ if part =~ /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/ && parts[index - 1]
16
16
  parent = active_admin_config.belongs_to_config.try :target
17
- config = parent && parent.resource_name.route_key == parts[index-1] ? parent : active_admin_config
17
+ config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
18
18
  name = display_name config.find_resource part
19
19
  end
20
20
  name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
@@ -2,8 +2,9 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module DisplayHelper
4
4
 
5
- DISPLAY_NAME_FALLBACK = ->{
6
- name, klass = "", self.class
5
+ DISPLAY_NAME_FALLBACK = -> {
6
+ name = ""
7
+ klass = self.class
7
8
  name << klass.model_name.human if klass.respond_to? :model_name
8
9
  name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
9
10
  name.present? ? name : to_s
@@ -15,7 +16,7 @@ module ActiveAdmin
15
16
  # Attempts to call any known display name methods on the resource.
16
17
  # See the setting in `application.rb` for the list of methods and their priority.
17
18
  def display_name(resource)
18
- render_in_context resource, display_name_method_for(resource) unless resource.nil?
19
+ ERB::Util.html_escape(render_in_context(resource, display_name_method_for(resource))) unless resource.nil?
19
20
  end
20
21
 
21
22
  # Looks up and caches the first available display name method.
@@ -25,7 +26,7 @@ module ActiveAdmin
25
26
  @@display_name_methods_cache ||= {}
26
27
  @@display_name_methods_cache[resource.class] ||= begin
27
28
  methods = active_admin_application.display_name_methods - association_methods_for(resource)
28
- method = methods.detect{ |method| resource.respond_to? method }
29
+ method = methods.detect { |method| resource.respond_to? method }
29
30
 
30
31
  if method != :to_s || resource.method(method).source_location
31
32
  method
@@ -69,16 +70,24 @@ module ActiveAdmin
69
70
  object.to_s
70
71
  when Date, Time
71
72
  I18n.localize object, format: active_admin_application.localize_format
73
+ when Array
74
+ format_collection(object)
72
75
  else
73
76
  if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
74
77
  defined?(::Mongoid) && object.class.include?(Mongoid::Document)
75
78
  auto_link object
79
+ elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
80
+ format_collection(object)
76
81
  else
77
82
  display_name object
78
83
  end
79
84
  end
80
85
  end
81
86
 
87
+ def format_collection(collection)
88
+ safe_join(collection.map { |item| pretty_format(item) }, ', ')
89
+ end
90
+
82
91
  def boolean_attr?(resource, attr, value)
83
92
  case value
84
93
  when TrueClass, FalseClass
@@ -1,6 +1,7 @@
1
1
  module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module DownloadFormatLinksHelper
4
+ private
4
5
 
5
6
  def build_download_formats(download_links)
6
7
  download_links = instance_exec(&download_links) if download_links.is_a?(Proc)
@@ -1,4 +1,7 @@
1
+ # Utility methods for internal use.
2
+ # @private
1
3
  module MethodOrProcHelper
4
+ extend self
2
5
 
3
6
  # This method will either call the symbol on self or instance_exec the Proc
4
7
  # within self. Any args will be passed along to the method dispatch.
@@ -2,7 +2,7 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
 
4
4
  # Require all ruby files in the view helpers dir
5
- Dir[File.expand_path('../view_helpers', __FILE__) + "/*.rb"].each{|f| require f }
5
+ Dir[File.expand_path('view_helpers', __dir__) + "/*.rb"].each { |f| require f }
6
6
 
7
7
  include ActiveAdminApplicationHelper
8
8
  include AutoLinkHelper
@@ -57,6 +57,12 @@ module ActiveAdmin
57
57
  end
58
58
  insert_tag(SemanticInputsProxy, form_builder, *args, &wrapped_block)
59
59
  else
60
+ # Set except option to prevent sensitive fields from being shown in forms by default.
61
+ opts = args.extract_options!
62
+ opts[:except] ||= []
63
+ ActiveAdmin.application.filter_attributes.each { |e| opts[:except] << e }
64
+ args << opts
65
+
60
66
  proxy_call_to_form(:inputs, *args, &block)
61
67
  end
62
68
  end
@@ -105,13 +111,12 @@ module ActiveAdmin
105
111
  create_another = params[:create_another]
106
112
  label = @resource.class.model_name.human
107
113
  Arbre::Context.new do
108
- li do
114
+ li class: 'create_another' do
109
115
  input(
110
116
  checked: create_another,
111
117
  id: 'create_another',
112
- class: 'create_another',
113
118
  name: 'create_another',
114
- type: 'checkbox',
119
+ type: 'checkbox'
115
120
  )
116
121
  label(I18n.t('active_admin.create_another', model: label), for: 'create_another')
117
122
  end
@@ -126,7 +131,7 @@ module ActiveAdmin
126
131
  legend = args.shift if args.first.is_a?(::String)
127
132
  legend = html_options.delete(:name) if html_options.key?(:name)
128
133
  legend_tag = legend ? "<legend><span>#{legend}</span></legend>" : ""
129
- fieldset_attrs = html_options.map {|k, v| %Q{#{k}="#{v}"} }.join(" ")
134
+ fieldset_attrs = html_options.map { |k, v| %Q{#{k}="#{v}"} }.join(" ")
130
135
  @opening_tag = "<fieldset #{fieldset_attrs}>#{legend_tag}<ol>"
131
136
  @closing_tag = "</ol></fieldset>"
132
137
  super(*(args << html_options), &block)
@@ -7,7 +7,7 @@ module ActiveAdmin
7
7
  def build(obj, *attrs)
8
8
  @collection = Array.wrap(obj)
9
9
  @resource_class = @collection.first.class
10
- options = { }
10
+ options = {}
11
11
  options[:for] = @collection.first if single_record?
12
12
  super(options)
13
13
  @table = table
@@ -16,7 +16,7 @@ module ActiveAdmin
16
16
  end
17
17
 
18
18
  def rows(*attrs)
19
- attrs.each {|attr| row(attr) }
19
+ attrs.each { |attr| row(attr) }
20
20
  end
21
21
 
22
22
  def row(*args, &block)
@@ -26,7 +26,7 @@ module ActiveAdmin
26
26
  if options[:class]
27
27
  classes << options[:class]
28
28
  elsif title.present?
29
- classes << "row-#{ActiveAdmin::Dependency.rails.parameterize(title.to_s)}"
29
+ classes << "row-#{title.to_s.parameterize(separator: "_")}"
30
30
  end
31
31
  options[:class] = classes.join(' ')
32
32
 
@@ -0,0 +1,32 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Renders an ActiveAdmin::Menu as a set of unordered list items.
5
+ #
6
+ # This component takes cares of deciding which items should be
7
+ # displayed given the current context and renders them appropriately.
8
+ #
9
+ # The entire component is rendered within one ul element.
10
+ class Menu < Component
11
+ attr_reader :menu
12
+ builder_method :menu
13
+
14
+ # @param [ActiveAdmin::Menu] menu the Menu to render
15
+ # @param [Hash] options the options as passed to the underlying ul element.
16
+ #
17
+ def build(menu, options = {})
18
+ @menu = menu
19
+ super(options)
20
+
21
+ menu.items.each do |item|
22
+ menu_item(item) if helpers.render_in_context self, item.should_display
23
+ end
24
+ children.sort!
25
+ end
26
+
27
+ def tag_name
28
+ 'ul'
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,58 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Arbre component used to render ActiveAdmin::MenuItem
5
+ class MenuItem < Component
6
+ builder_method :menu_item
7
+ attr_reader :label
8
+ attr_reader :url
9
+ attr_reader :priority
10
+
11
+ def build(item, options = {})
12
+ super(options.merge(id: item.id))
13
+ @label = helpers.render_in_context self, item.label
14
+ @url = helpers.render_in_context self, item.url
15
+ @priority = item.priority
16
+ @submenu = nil
17
+
18
+ add_class "current" if item.current? assigns[:current_tab]
19
+
20
+ if url
21
+ text_node link_to label, url, item.html_options
22
+ else
23
+ span label, item.html_options
24
+ end
25
+
26
+ if item.items.any?
27
+ add_class "has_nested"
28
+ @submenu = menu(item)
29
+ end
30
+ end
31
+
32
+ def tag_name
33
+ 'li'
34
+ end
35
+
36
+ # Sorts by priority first, then alphabetically by label if needed.
37
+ def <=>(other)
38
+ result = priority <=> other.priority
39
+ result == 0 ? label <=> other.label : result
40
+ end
41
+
42
+ def visible?
43
+ url.nil? || real_url? || @submenu && @submenu.children.any?
44
+ end
45
+
46
+ def to_s
47
+ visible? ? super : ''
48
+ end
49
+
50
+ private
51
+
52
+ # URL is not nil, empty, or '#'
53
+ def real_url?
54
+ url && url.present? && url != '#'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -92,17 +92,17 @@ module ActiveAdmin
92
92
  end
93
93
 
94
94
  def build_pagination
95
- options = { theme: 'active_admin' }
95
+ options = { theme: @display_total ? 'active_admin' : 'active_admin_countless' }
96
96
  options[:params] = @params if @params
97
97
  options[:param_name] = @param_name if @param_name
98
98
 
99
- if !@display_total && collection.respond_to?(:offset)
99
+ if !@display_total
100
100
  # The #paginate method in kaminari will query the resource with a
101
101
  # count(*) to determine how many pages there should be unless
102
102
  # you pass in the :total_pages option. We issue a query to determine
103
103
  # if there is another page or not, but the limit/offset make this
104
104
  # query fast.
105
- offset = collection.offset(collection.current_page * @per_page.to_i).limit(1).count
105
+ offset = collection.offset(collection.current_page * collection.limit_value).limit(1).count
106
106
  options[:total_pages] = collection.current_page + offset
107
107
  options[:right] = 0
108
108
  end
@@ -123,6 +123,7 @@ module ActiveAdmin
123
123
  entries_name = I18n.t "active_admin.pagination.entry", count: 2, default: 'entries'
124
124
  else
125
125
  key = "activerecord.models." + collection.first.class.model_name.i18n_key.to_s
126
+
126
127
  entry_name = I18n.translate key, count: 1, default: collection.first.class.name.underscore.sub('_', ' ')
127
128
  entries_name = I18n.translate key, count: collection.size, default: entry_name.pluralize
128
129
  end
@@ -13,16 +13,20 @@ module ActiveAdmin
13
13
  include ::ActiveAdmin::Helpers::Collection
14
14
 
15
15
  def default_class_name
16
- "scopes table_tools_segmented_control"
16
+ "scopes"
17
17
  end
18
18
 
19
19
  def tag_name
20
- 'ul'
20
+ 'div'
21
21
  end
22
22
 
23
23
  def build(scopes, options = {})
24
- scopes.each do |scope|
25
- build_scope(scope, options) if call_method_or_proc_on(self, scope.display_if_block)
24
+ scopes.group_by(&:group).each do |group, group_scopes|
25
+ ul class: "table_tools_segmented_control #{group_class(group)}" do
26
+ group_scopes.each do |scope|
27
+ build_scope(scope, options) if call_method_or_exec_proc(scope.display_if_block)
28
+ end
29
+ end
26
30
  end
27
31
  end
28
32
 
@@ -60,6 +64,9 @@ module ActiveAdmin
60
64
  collection_size(scope_chain(scope, collection_before_scope))
61
65
  end
62
66
 
67
+ def group_class(group)
68
+ group.present? ? "scope-group-#{group}" : "scope-default-group"
69
+ end
63
70
  end
64
71
  end
65
72
  end
@@ -0,0 +1,13 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class Sidebar < Component
5
+ builder_method :sidebar
6
+
7
+ def build(sections, attributes = {})
8
+ super(attributes)
9
+ sections.map(&method(:sidebar_section))
10
+ end
11
+ end
12
+ end
13
+ end
@@ -22,8 +22,8 @@ module ActiveAdmin
22
22
  @namespace.site_title_link.present?
23
23
  end
24
24
 
25
- def site_title_image?
26
- @namespace.site_title_image.present?
25
+ def site_title_image
26
+ @site_title_image ||= @namespace.site_title_image(helpers)
27
27
  end
28
28
 
29
29
  private
@@ -33,7 +33,7 @@ module ActiveAdmin
33
33
  end
34
34
 
35
35
  def site_title_content
36
- if site_title_image?
36
+ if site_title_image.present?
37
37
  title_image
38
38
  else
39
39
  title_text
@@ -41,12 +41,11 @@ module ActiveAdmin
41
41
  end
42
42
 
43
43
  def title_text
44
- helpers.render_or_call_method_or_proc_on(helpers, @namespace.site_title)
44
+ @title_text ||= @namespace.site_title(helpers)
45
45
  end
46
46
 
47
47
  def title_image
48
- path = helpers.render_or_call_method_or_proc_on(helpers, @namespace.site_title_image)
49
- helpers.image_tag(path, id: "site_title_image", alt: title_text)
48
+ helpers.image_tag(site_title_image, id: "site_title_image", alt: title_text)
50
49
  end
51
50
 
52
51
  end
@@ -28,11 +28,7 @@ module ActiveAdmin
28
28
  # status_tag('active', class: 'important', id: 'status_123', label: 'on')
29
29
  # # => <span class='status_tag active important' id='status_123'>on</span>
30
30
  #
31
- def build(*args)
32
- options = args.extract_options!
33
- status = args[0]
34
- type = args[1]
35
-
31
+ def build(status, options = {})
36
32
  label = options.delete(:label)
37
33
  classes = options.delete(:class)
38
34
  status = convert_to_boolean_status(status)
@@ -46,19 +42,6 @@ module ActiveAdmin
46
42
  super(content, options)
47
43
 
48
44
  add_class(status_to_class(status)) if status
49
-
50
- if type
51
- Deprecation.warn <<-MSG.strip_heredoc
52
- The `type` parameter has been deprecated. Provide the "#{type}" type as
53
- a class instead. For example, `status_tag(status, :#{type}, class: "abc")`
54
- would change to `status_tag(status, class: "#{type} abc")`. Also note that
55
- the "#{type}" CSS rule will be removed too, so you'll have to provide
56
- the styles yourself. See https://github.com/activeadmin/activeadmin/blob/master/CHANGELOG.md#110-
57
- for more information.
58
- MSG
59
- add_class(type.to_s)
60
- end
61
-
62
45
  add_class(classes) if classes
63
46
  end
64
47
 
@@ -68,8 +51,10 @@ module ActiveAdmin
68
51
  case status
69
52
  when true, 'true'
70
53
  'Yes'
71
- when false, 'false', nil
54
+ when false, 'false'
72
55
  'No'
56
+ when nil
57
+ 'Unset'
73
58
  else
74
59
  status
75
60
  end
@@ -77,6 +62,8 @@ module ActiveAdmin
77
62
 
78
63
  def status_to_class(status)
79
64
  case status
65
+ when 'Unset'
66
+ 'unset no'
80
67
  when String, Symbol
81
68
  status.to_s.titleize.gsub(/\s/, '').underscore
82
69
  else
@@ -13,6 +13,7 @@ module ActiveAdmin
13
13
  @collection = obj.respond_to?(:each) && !obj.is_a?(Hash) ? obj : [obj]
14
14
  @resource_class = options.delete(:i18n)
15
15
  @resource_class ||= @collection.klass if @collection.respond_to? :klass
16
+
16
17
  @columns = []
17
18
  @row_class = options.delete(:row_class)
18
19
 
@@ -22,7 +23,7 @@ module ActiveAdmin
22
23
  end
23
24
 
24
25
  def columns(*attrs)
25
- attrs.each {|attr| column(attr) }
26
+ attrs.each { |attr| column(attr) }
26
27
  end
27
28
 
28
29
  def column(*args, &block)
@@ -147,7 +148,7 @@ module ActiveAdmin
147
148
  if @options.has_key?(:class)
148
149
  html_classes << @options.delete(:class)
149
150
  elsif @title.present?
150
- html_classes << "col-#{ActiveAdmin::Dependency.rails.parameterize(@title.to_s)}"
151
+ html_classes << "col-#{@title.to_s.parameterize(separator: "_")}"
151
152
  end
152
153
  @html_class = html_classes.join(' ')
153
154
  @data = args[1] || args[0]
@@ -176,18 +177,9 @@ module ActiveAdmin
176
177
  # to the sortable option:
177
178
  # column :username, sortable: 'other_column_to_sort_on'
178
179
  #
179
- # If you pass a block to be rendered for this column, the column
180
- # will not be sortable unless you pass a string to sortable to
181
- # sort the column on:
182
- #
183
- # column('Username', sortable: 'login'){ @user.pretty_name }
184
- # # => Sort key will be 'login'
185
- #
186
180
  def sort_key
187
181
  # If boolean or nil, use the default sort key.
188
- if @options[:sortable] == true || @options[:sortable] == false
189
- @data.to_s
190
- elsif @options[:sortable].nil?
182
+ if @options[:sortable].nil? || @options[:sortable] == true || @options[:sortable] == false
191
183
  sort_column_name
192
184
  else
193
185
  @options[:sortable].to_s
@@ -15,14 +15,26 @@ module ActiveAdmin
15
15
  end
16
16
 
17
17
  def build_menu_item(title, options, &block)
18
- fragment = options.fetch(:id, title.parameterize)
19
- li { link_to title, "##{fragment}" }
18
+ fragment = options.fetch(:id, fragmentize(title))
19
+
20
+ html_options = options.fetch(:html_options, {})
21
+ li html_options do
22
+ link_to title, "##{fragment}"
23
+ end
20
24
  end
21
25
 
22
26
  def build_content_item(title, options, &block)
23
- options = options.reverse_merge(id: title.parameterize)
27
+ options = options.reverse_merge(id: fragmentize(title))
24
28
  div(options, &block)
25
29
  end
30
+
31
+ private
32
+
33
+ def fragmentize(string)
34
+ result = string.parameterize
35
+ result = URI.encode(string) if result.blank?
36
+ result
37
+ end
26
38
  end
27
39
  end
28
40
  end
@@ -6,26 +6,22 @@ module ActiveAdmin
6
6
  super id: "footer"
7
7
  @namespace = namespace
8
8
 
9
- if footer?
9
+ if footer_text.present?
10
10
  para footer_text
11
11
  else
12
12
  para powered_by_message
13
13
  end
14
14
  end
15
15
 
16
- def footer?
17
- @namespace.footer.present?
18
- end
19
-
20
16
  private
21
17
 
22
18
  def footer_text
23
- helpers.render_or_call_method_or_proc_on(self, @namespace.footer)
19
+ @footer_text ||= @namespace.footer(self)
24
20
  end
25
21
 
26
22
  def powered_by_message
27
23
  I18n.t('active_admin.powered_by',
28
- active_admin: link_to("Active Admin", "http://www.activeadmin.info"),
24
+ active_admin: link_to("Active Admin", "https://activeadmin.info"),
29
25
  version: ActiveAdmin::VERSION).html_safe
30
26
  end
31
27
 
@@ -9,21 +9,9 @@ module ActiveAdmin
9
9
  @menu = menu
10
10
  @utility_menu = @namespace.fetch_menu(:utility_navigation)
11
11
 
12
- build_site_title
13
- build_global_navigation
14
- build_utility_navigation
15
- end
16
-
17
- def build_site_title
18
- insert_tag view_factory.site_title, @namespace
19
- end
20
-
21
- def build_global_navigation
22
- insert_tag view_factory.global_navigation, @menu, class: 'header-item tabs'
23
- end
24
-
25
- def build_utility_navigation
26
- insert_tag view_factory.utility_navigation, @utility_menu, id: "utility_nav", class: 'header-item tabs'
12
+ site_title @namespace
13
+ global_navigation @menu, class: 'header-item tabs'
14
+ utility_navigation @utility_menu, id: "utility_nav", class: 'header-item tabs'
27
15
  end
28
16
 
29
17
  end
@@ -27,7 +27,7 @@ module ActiveAdmin
27
27
  # ```
28
28
  #
29
29
  # Second, you can pass a block to the tile option which will then be
30
- # used as the contents fo the title. The resource being rendered
30
+ # used as the contents of the title. The resource being rendered
31
31
  # is passed in to the block. For Example:
32
32
  #
33
33
  # ```ruby
@@ -1,30 +1,30 @@
1
1
  module ActiveAdmin
2
2
  module Views
3
3
 
4
- # # Index as a Grid
5
- #
6
- # Sometimes you want to display the index screen for a set of resources as a grid
7
- # (possibly a grid of thumbnail images). To do so, use the :grid option for the
8
- # index block.
9
- #
10
- # ```ruby
11
- # index as: :grid do |product|
12
- # link_to image_tag(product.image_path), admin_product_path(product)
13
- # end
14
- # ```
15
- #
16
- # The block is rendered within a cell in the grid once for each resource in the
17
- # collection. The resource is passed into the block for you to use in the view.
18
- #
19
- # You can customize the number of columns that are rendered using the columns
20
- # option:
21
- #
22
- # ```ruby
23
- # index as: :grid, columns: 5 do |product|
24
- # link_to image_tag(product.image_path), admin_product_path(product)
25
- # end
26
- # ```
27
- #
4
+ # # Index as a Grid
5
+ #
6
+ # Sometimes you want to display the index screen for a set of resources as a grid
7
+ # (possibly a grid of thumbnail images). To do so, use the :grid option for the
8
+ # index block.
9
+ #
10
+ # ```ruby
11
+ # index as: :grid do |product|
12
+ # link_to image_tag(product.image_path), admin_product_path(product)
13
+ # end
14
+ # ```
15
+ #
16
+ # The block is rendered within a cell in the grid once for each resource in the
17
+ # collection. The resource is passed into the block for you to use in the view.
18
+ #
19
+ # You can customize the number of columns that are rendered using the columns
20
+ # option:
21
+ #
22
+ # ```ruby
23
+ # index as: :grid, columns: 5 do |product|
24
+ # link_to image_tag(product.image_path), admin_product_path(product)
25
+ # end
26
+ # ```
27
+ #
28
28
  class IndexAsGrid < ActiveAdmin::Component
29
29
 
30
30
  def build(page_presenter, collection)
@@ -42,7 +42,7 @@ module ActiveAdmin
42
42
  "grid"
43
43
  end
44
44
 
45
- protected
45
+ protected
46
46
 
47
47
  def build_table
48
48
  resource_selection_toggle_panel if active_admin_config.batch_actions.any?