activeadmin-rails 1.7.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 (584) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +64 -0
  3. data/.github/ISSUE_TEMPLATE.md +20 -0
  4. data/.github/workflows/ci.yaml +64 -0
  5. data/.github/workflows/daily.yaml +64 -0
  6. data/.github/workflows/pages.yml +72 -0
  7. data/.gitignore +23 -0
  8. data/.mdlrc +1 -0
  9. data/.rubocop.yml +84 -0
  10. data/.simplecov +13 -0
  11. data/.yardopts +7 -0
  12. data/CHANGELOG.md +514 -0
  13. data/CODE_OF_CONDUCT.md +22 -0
  14. data/CONTRIBUTING.md +190 -0
  15. data/Gemfile +51 -0
  16. data/LICENSE +20 -0
  17. data/README.md +84 -0
  18. data/Rakefile +56 -0
  19. data/activeadmin-rails.gemspec +39 -0
  20. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  21. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  22. data/app/assets/images/active_admin/orderable.png +0 -0
  23. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  24. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  25. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  26. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  27. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  28. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  29. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  30. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
  31. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  32. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  33. data/app/assets/javascripts/active_admin/lib/has_many.es6 +89 -0
  34. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  35. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  36. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  37. data/app/assets/stylesheets/active_admin/_base.scss +41 -0
  38. data/app/assets/stylesheets/active_admin/_forms.scss +338 -0
  39. data/app/assets/stylesheets/active_admin/_header.scss +156 -0
  40. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  41. data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  42. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
  43. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  44. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  45. data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  46. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  47. data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  48. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
  49. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
  50. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  51. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  52. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  53. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  54. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  55. data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
  56. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  57. data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
  58. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
  59. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  60. data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
  61. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  62. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  71. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
  72. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  73. data/app/assets/stylesheets/active_admin/print.scss +287 -0
  74. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  75. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  76. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
  77. data/app/views/active_admin/_head.html.erb +14 -0
  78. data/app/views/active_admin/base/_action_items.html.arb +7 -0
  79. data/app/views/active_admin/base/_breadcrumbs.html.arb +8 -0
  80. data/app/views/active_admin/base/_footer.html.arb +11 -0
  81. data/app/views/active_admin/base/_header.html.arb +5 -0
  82. data/app/views/active_admin/base/_sidebar.html.arb +3 -0
  83. data/app/views/active_admin/base/_title_bar.html.arb +9 -0
  84. data/app/views/active_admin/base/_unsupported_browser.html.erb +5 -0
  85. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  86. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  87. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  88. data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
  89. data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  90. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  91. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  92. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  93. data/app/views/active_admin/devise/shared/_links.erb +33 -0
  94. data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  95. data/app/views/active_admin/page/_content.html.arb +1 -0
  96. data/app/views/active_admin/page/index.html.arb +8 -0
  97. data/app/views/active_admin/resource/_filters_form.html.erb +1 -0
  98. data/app/views/active_admin/resource/_form.html.arb +11 -0
  99. data/app/views/active_admin/resource/_index_as_table.html.arb +8 -0
  100. data/app/views/active_admin/resource/_show.html.arb +1 -0
  101. data/app/views/active_admin/resource/edit.html.arb +13 -0
  102. data/app/views/active_admin/resource/index.html.arb +101 -0
  103. data/app/views/active_admin/resource/new.html.arb +13 -0
  104. data/app/views/active_admin/resource/show.html.arb +22 -0
  105. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  106. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  107. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  108. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  109. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  110. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  111. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  112. data/app/views/layouts/active_admin.html.erb +33 -0
  113. data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
  114. data/codecov.yml +25 -0
  115. data/config/i18n-tasks.yml +26 -0
  116. data/config/locales/ar.yml +133 -0
  117. data/config/locales/bg.yml +118 -0
  118. data/config/locales/bs.yml +119 -0
  119. data/config/locales/ca.yml +104 -0
  120. data/config/locales/cs.yml +107 -0
  121. data/config/locales/da.yml +135 -0
  122. data/config/locales/de-CH.yml +99 -0
  123. data/config/locales/de.yml +142 -0
  124. data/config/locales/el.yml +124 -0
  125. data/config/locales/en-CA.yml +137 -0
  126. data/config/locales/en-GB.yml +137 -0
  127. data/config/locales/en.yml +160 -0
  128. data/config/locales/eo.yml +143 -0
  129. data/config/locales/es-MX.yml +94 -0
  130. data/config/locales/es.yml +160 -0
  131. data/config/locales/fa.yml +117 -0
  132. data/config/locales/fi.yml +110 -0
  133. data/config/locales/fr.yml +139 -0
  134. data/config/locales/he.yml +140 -0
  135. data/config/locales/hr.yml +121 -0
  136. data/config/locales/hu.yml +96 -0
  137. data/config/locales/id.yml +133 -0
  138. data/config/locales/it.yml +142 -0
  139. data/config/locales/ja.yml +139 -0
  140. data/config/locales/ko.yml +118 -0
  141. data/config/locales/lt.yml +140 -0
  142. data/config/locales/lv.yml +90 -0
  143. data/config/locales/nb.yml +128 -0
  144. data/config/locales/nl.yml +142 -0
  145. data/config/locales/pl.yml +166 -0
  146. data/config/locales/pt-BR.yml +141 -0
  147. data/config/locales/pt-PT.yml +90 -0
  148. data/config/locales/ro.yml +94 -0
  149. data/config/locales/ru.yml +139 -0
  150. data/config/locales/sk.yml +107 -0
  151. data/config/locales/sv-SE.yml +133 -0
  152. data/config/locales/tr.yml +142 -0
  153. data/config/locales/uk.yml +134 -0
  154. data/config/locales/vi.yml +132 -0
  155. data/config/locales/zh-CN.yml +141 -0
  156. data/config/locales/zh-TW.yml +133 -0
  157. data/config/mdl_style.rb +9 -0
  158. data/cucumber.yml +6 -0
  159. data/docs/0-installation.md +121 -0
  160. data/docs/1-general-configuration.md +207 -0
  161. data/docs/10-custom-pages.md +148 -0
  162. data/docs/11-decorators.md +66 -0
  163. data/docs/12-arbo-components.md +200 -0
  164. data/docs/13-authorization-adapter.md +288 -0
  165. data/docs/14-gotchas.md +141 -0
  166. data/docs/2-resource-customization.md +480 -0
  167. data/docs/3-index-pages/custom-index.md +39 -0
  168. data/docs/3-index-pages/index-as-block.md +23 -0
  169. data/docs/3-index-pages/index-as-blog.md +73 -0
  170. data/docs/3-index-pages/index-as-grid.md +31 -0
  171. data/docs/3-index-pages/index-as-table.md +259 -0
  172. data/docs/3-index-pages.md +349 -0
  173. data/docs/4-csv-format.md +86 -0
  174. data/docs/5-forms.md +233 -0
  175. data/docs/6-show-pages.md +61 -0
  176. data/docs/7-sidebars.md +63 -0
  177. data/docs/8-custom-actions.md +160 -0
  178. data/docs/9-batch-actions.md +248 -0
  179. data/docs/CNAME +1 -0
  180. data/docs/Gemfile +7 -0
  181. data/docs/README.md +24 -0
  182. data/docs/_config.yml +15 -0
  183. data/docs/_includes/nav_footer_custom.html +3 -0
  184. data/docs/documentation.md +61 -0
  185. data/docs/images/activeadmin.png +0 -0
  186. data/docs/images/divider.png +0 -0
  187. data/docs/images/features.png +0 -0
  188. data/docs/index.css +835 -0
  189. data/docs/index.html +105 -0
  190. data/features/action_item.feature +73 -0
  191. data/features/authorization.feature +64 -0
  192. data/features/authorization_cancan.feature +52 -0
  193. data/features/authorization_pundit.feature +37 -0
  194. data/features/belongs_to.feature +124 -0
  195. data/features/breadcrumb.feature +76 -0
  196. data/features/comments/commenting.feature +178 -0
  197. data/features/comments/viewing_index.feature +18 -0
  198. data/features/create_another.feature +55 -0
  199. data/features/dashboard.feature +16 -0
  200. data/features/decorators.feature +43 -0
  201. data/features/development_reloading.feature +28 -0
  202. data/features/edit_page.feature +116 -0
  203. data/features/favicon.feature +20 -0
  204. data/features/filter_attributes.feature +46 -0
  205. data/features/first_boot.feature +16 -0
  206. data/features/footer.feature +29 -0
  207. data/features/global_navigation.feature +29 -0
  208. data/features/i18n.feature +55 -0
  209. data/features/index/batch_actions.feature +218 -0
  210. data/features/index/filters.feature +251 -0
  211. data/features/index/format_as_csv.feature +273 -0
  212. data/features/index/formats.feature +88 -0
  213. data/features/index/index_as_block.feature +15 -0
  214. data/features/index/index_as_blog.feature +69 -0
  215. data/features/index/index_as_grid.feature +45 -0
  216. data/features/index/index_as_table.feature +291 -0
  217. data/features/index/index_blank_slate.feature +83 -0
  218. data/features/index/index_parameters.feature +75 -0
  219. data/features/index/index_scope_to.feature +56 -0
  220. data/features/index/index_scopes.feature +325 -0
  221. data/features/index/page_title.feature +41 -0
  222. data/features/index/pagination.feature +63 -0
  223. data/features/index/switch_index_view.feature +73 -0
  224. data/features/menu.feature +85 -0
  225. data/features/meta_tags.feature +21 -0
  226. data/features/new_page.feature +136 -0
  227. data/features/registering_assets.feature +34 -0
  228. data/features/registering_pages.feature +237 -0
  229. data/features/registering_resources.feature +33 -0
  230. data/features/renamed_resource.feature +29 -0
  231. data/features/root_to.feature +18 -0
  232. data/features/show/attributes_table_title.feature +54 -0
  233. data/features/show/columns.feature +40 -0
  234. data/features/show/default_content.feature +44 -0
  235. data/features/show/page_title.feature +58 -0
  236. data/features/show/tabs.feature +47 -0
  237. data/features/sidebar_sections.feature +210 -0
  238. data/features/site_title.feature +47 -0
  239. data/features/specifying_actions.feature +118 -0
  240. data/features/step_definitions/action_item_steps.rb +7 -0
  241. data/features/step_definitions/action_link_steps.rb +19 -0
  242. data/features/step_definitions/additional_web_steps.rb +81 -0
  243. data/features/step_definitions/asset_steps.rb +15 -0
  244. data/features/step_definitions/attribute_steps.rb +18 -0
  245. data/features/step_definitions/attributes_table_title_steps.rb +11 -0
  246. data/features/step_definitions/batch_action_steps.rb +78 -0
  247. data/features/step_definitions/blog_steps.rb +3 -0
  248. data/features/step_definitions/breadcrumb_steps.rb +13 -0
  249. data/features/step_definitions/column_steps.rb +8 -0
  250. data/features/step_definitions/comment_steps.rb +32 -0
  251. data/features/step_definitions/configuration_steps.rb +102 -0
  252. data/features/step_definitions/dashboard_steps.rb +15 -0
  253. data/features/step_definitions/factory_steps.rb +35 -0
  254. data/features/step_definitions/filter_steps.rb +57 -0
  255. data/features/step_definitions/flash_steps.rb +11 -0
  256. data/features/step_definitions/footer_steps.rb +21 -0
  257. data/features/step_definitions/format_steps.rb +60 -0
  258. data/features/step_definitions/i18n_steps.rb +11 -0
  259. data/features/step_definitions/index_scope_steps.rb +42 -0
  260. data/features/step_definitions/index_views_steps.rb +3 -0
  261. data/features/step_definitions/layout_steps.rb +3 -0
  262. data/features/step_definitions/member_link_steps.rb +7 -0
  263. data/features/step_definitions/menu_steps.rb +11 -0
  264. data/features/step_definitions/meta_tag_steps.rb +3 -0
  265. data/features/step_definitions/pagination_steps.rb +15 -0
  266. data/features/step_definitions/root_steps.rb +9 -0
  267. data/features/step_definitions/sidebar_steps.rb +11 -0
  268. data/features/step_definitions/site_title_steps.rb +31 -0
  269. data/features/step_definitions/tab_steps.rb +17 -0
  270. data/features/step_definitions/table_steps.rb +116 -0
  271. data/features/step_definitions/user_steps.rb +52 -0
  272. data/features/step_definitions/web_steps.rb +86 -0
  273. data/features/sti_resource.feature +65 -0
  274. data/features/strong_parameters.feature +69 -0
  275. data/features/support/env.rb +129 -0
  276. data/features/support/paths.rb +75 -0
  277. data/features/support/regular_env.rb +7 -0
  278. data/features/support/reload_env.rb +7 -0
  279. data/features/support/selectors.rb +45 -0
  280. data/features/users/logging_in.feature +32 -0
  281. data/features/users/logging_out.feature +29 -0
  282. data/features/users/resetting_password.feature +30 -0
  283. data/gemfiles/rails_42.gemfile +12 -0
  284. data/gemfiles/rails_52.gemfile +15 -0
  285. data/gemfiles/rails_60.gemfile +16 -0
  286. data/gemfiles/rails_61.gemfile +15 -0
  287. data/gemfiles/rails_61_turbolinks.gemfile +15 -0
  288. data/gemfiles/rails_70.gemfile +15 -0
  289. data/gemfiles/rails_70_hotwire.gemfile +15 -0
  290. data/gemfiles/rails_71.gemfile +17 -0
  291. data/lib/active_admin/abstract_view_factory.rb +47 -0
  292. data/lib/active_admin/application.rb +255 -0
  293. data/lib/active_admin/application_settings.rb +42 -0
  294. data/lib/active_admin/asset_registration.rb +29 -0
  295. data/lib/active_admin/authorization_adapter.rb +129 -0
  296. data/lib/active_admin/base_controller/authorization.rb +126 -0
  297. data/lib/active_admin/base_controller/menu.rb +34 -0
  298. data/lib/active_admin/base_controller.rb +91 -0
  299. data/lib/active_admin/batch_actions/controller.rb +45 -0
  300. data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
  301. data/lib/active_admin/batch_actions/views/batch_action_form.rb +45 -0
  302. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
  303. data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
  304. data/lib/active_admin/batch_actions.rb +16 -0
  305. data/lib/active_admin/callbacks.rb +88 -0
  306. data/lib/active_admin/cancan_adapter.rb +36 -0
  307. data/lib/active_admin/component.rb +5 -0
  308. data/lib/active_admin/controller_action.rb +12 -0
  309. data/lib/active_admin/csv_builder.rb +136 -0
  310. data/lib/active_admin/dependency.rb +96 -0
  311. data/lib/active_admin/deprecation.rb +10 -0
  312. data/lib/active_admin/devise.rb +80 -0
  313. data/lib/active_admin/dsl.rb +193 -0
  314. data/lib/active_admin/dynamic_setting.rb +38 -0
  315. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  316. data/lib/active_admin/engine.rb +22 -0
  317. data/lib/active_admin/error.rb +62 -0
  318. data/lib/active_admin/event.rb +24 -0
  319. data/lib/active_admin/filters/active.rb +29 -0
  320. data/lib/active_admin/filters/active_filter.rb +123 -0
  321. data/lib/active_admin/filters/active_sidebar.rb +50 -0
  322. data/lib/active_admin/filters/dsl.rb +21 -0
  323. data/lib/active_admin/filters/forms.rb +85 -0
  324. data/lib/active_admin/filters/formtastic_addons.rb +79 -0
  325. data/lib/active_admin/filters/resource_extension.rb +153 -0
  326. data/lib/active_admin/filters.rb +11 -0
  327. data/lib/active_admin/form_builder.rb +182 -0
  328. data/lib/active_admin/generators/boilerplate.rb +45 -0
  329. data/lib/active_admin/helpers/collection.rb +19 -0
  330. data/lib/active_admin/helpers/i18n.rb +7 -0
  331. data/lib/active_admin/helpers/optional_display.rb +38 -0
  332. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  333. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  334. data/lib/active_admin/inputs/datepicker_input.rb +27 -0
  335. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  336. data/lib/active_admin/inputs/filters/base.rb +44 -0
  337. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  338. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  339. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  340. data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
  341. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  342. data/lib/active_admin/inputs/filters/select_input.rb +58 -0
  343. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  344. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  345. data/lib/active_admin/inputs.rb +21 -0
  346. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  347. data/lib/active_admin/localizers.rb +11 -0
  348. data/lib/active_admin/menu.rb +106 -0
  349. data/lib/active_admin/menu_collection.rb +55 -0
  350. data/lib/active_admin/menu_item.rb +79 -0
  351. data/lib/active_admin/namespace.rb +325 -0
  352. data/lib/active_admin/namespace_settings.rb +107 -0
  353. data/lib/active_admin/order_clause.rb +48 -0
  354. data/lib/active_admin/orm/active_record/comments/comment.rb +35 -0
  355. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  356. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  357. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +95 -0
  358. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  359. data/lib/active_admin/orm/active_record/comments.rb +99 -0
  360. data/lib/active_admin/orm/active_record.rb +5 -0
  361. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  362. data/lib/active_admin/orm/mongoid.rb +1 -0
  363. data/lib/active_admin/page.rb +114 -0
  364. data/lib/active_admin/page_controller.rb +29 -0
  365. data/lib/active_admin/page_dsl.rb +35 -0
  366. data/lib/active_admin/page_presenter.rb +32 -0
  367. data/lib/active_admin/pundit_adapter.rb +68 -0
  368. data/lib/active_admin/resource/action_items.rb +120 -0
  369. data/lib/active_admin/resource/attributes.rb +47 -0
  370. data/lib/active_admin/resource/belongs_to.rb +48 -0
  371. data/lib/active_admin/resource/controllers.rb +19 -0
  372. data/lib/active_admin/resource/includes.rb +12 -0
  373. data/lib/active_admin/resource/menu.rb +65 -0
  374. data/lib/active_admin/resource/naming.rb +62 -0
  375. data/lib/active_admin/resource/ordering.rb +11 -0
  376. data/lib/active_admin/resource/page_presenters.rb +90 -0
  377. data/lib/active_admin/resource/pagination.rb +23 -0
  378. data/lib/active_admin/resource/routes.rb +134 -0
  379. data/lib/active_admin/resource/scope_to.rb +74 -0
  380. data/lib/active_admin/resource/scopes.rb +52 -0
  381. data/lib/active_admin/resource/sidebars.rb +32 -0
  382. data/lib/active_admin/resource.rb +215 -0
  383. data/lib/active_admin/resource_collection.rb +72 -0
  384. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  385. data/lib/active_admin/resource_controller/data_access.rb +341 -0
  386. data/lib/active_admin/resource_controller/decorators.rb +102 -0
  387. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  388. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  389. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  390. data/lib/active_admin/resource_controller/streaming.rb +47 -0
  391. data/lib/active_admin/resource_controller.rb +116 -0
  392. data/lib/active_admin/resource_dsl.rb +221 -0
  393. data/lib/active_admin/router.rb +113 -0
  394. data/lib/active_admin/scope.rb +60 -0
  395. data/lib/active_admin/settings_node.rb +19 -0
  396. data/lib/active_admin/sidebar_section.rb +37 -0
  397. data/lib/active_admin/version.rb +3 -0
  398. data/lib/active_admin/view_factory.rb +10 -0
  399. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  400. data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
  401. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +52 -0
  402. data/lib/active_admin/view_helpers/display_helper.rb +95 -0
  403. data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
  404. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  405. data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
  406. data/lib/active_admin/view_helpers/form_helper.rb +20 -0
  407. data/lib/active_admin/view_helpers/layout_helper.rb +32 -0
  408. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
  409. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  410. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  411. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  412. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  413. data/lib/active_admin/view_helpers.rb +21 -0
  414. data/lib/active_admin/views/components/action_link.rb +13 -0
  415. data/lib/active_admin/views/components/active_admin_form.rb +163 -0
  416. data/lib/active_admin/views/components/attributes_panel.rb +23 -0
  417. data/lib/active_admin/views/components/attributes_table.rb +94 -0
  418. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  419. data/lib/active_admin/views/components/columns.rb +161 -0
  420. data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
  421. data/lib/active_admin/views/components/index_list.rb +69 -0
  422. data/lib/active_admin/views/components/menu.rb +32 -0
  423. data/lib/active_admin/views/components/menu_item.rb +58 -0
  424. data/lib/active_admin/views/components/paginated_collection.rb +159 -0
  425. data/lib/active_admin/views/components/panel.rb +38 -0
  426. data/lib/active_admin/views/components/scopes.rb +72 -0
  427. data/lib/active_admin/views/components/sidebar_section.rb +34 -0
  428. data/lib/active_admin/views/components/site_title.rb +28 -0
  429. data/lib/active_admin/views/components/status_tag.rb +88 -0
  430. data/lib/active_admin/views/components/table_for.rb +209 -0
  431. data/lib/active_admin/views/components/tabs.rb +40 -0
  432. data/lib/active_admin/views/index_as_block.rb +36 -0
  433. data/lib/active_admin/views/index_as_blog.rb +155 -0
  434. data/lib/active_admin/views/index_as_grid.rb +80 -0
  435. data/lib/active_admin/views/index_as_table.rb +377 -0
  436. data/lib/active_admin/views.rb +8 -0
  437. data/lib/active_admin.rb +132 -0
  438. data/lib/activeadmin-rails.rb +1 -0
  439. data/lib/bug_report_templates/active_admin_main.rb +110 -0
  440. data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
  441. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  442. data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  443. data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
  444. data/lib/generators/active_admin/install/install_generator.rb +45 -0
  445. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +300 -0
  446. data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
  447. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  448. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
  449. data/lib/generators/active_admin/page/USAGE +8 -0
  450. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  451. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  452. data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
  453. data/lib/generators/active_admin/resource/templates/admin.rb.erb +6 -0
  454. data/lib/ransack_ext.rb +20 -0
  455. data/spec/bug_report_templates_spec.rb +28 -0
  456. data/spec/changelog_spec.rb +15 -0
  457. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  458. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  459. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  460. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  461. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  462. data/spec/javascripts/support/jasmine.yml +74 -0
  463. data/spec/javascripts/support/jasmine_runner.rb +19 -0
  464. data/spec/rails_helper.rb +67 -0
  465. data/spec/requests/default_namespace_spec.rb +81 -0
  466. data/spec/requests/memory_spec.rb +25 -0
  467. data/spec/requests/pages/form_spec.rb +73 -0
  468. data/spec/requests/pages/index_spec.rb +96 -0
  469. data/spec/requests/pages/layout_spec.rb +59 -0
  470. data/spec/requests/pages/show_spec.rb +38 -0
  471. data/spec/requests/stylesheets_spec.rb +18 -0
  472. data/spec/spec_helper.rb +1 -0
  473. data/spec/support/active_admin_integration_spec_helper.rb +79 -0
  474. data/spec/support/active_admin_request_helpers.rb +39 -0
  475. data/spec/support/rails_template.rb +224 -0
  476. data/spec/support/rails_template_with_data.rb +328 -0
  477. data/spec/support/templates/admin/stores.rb +7 -0
  478. data/spec/support/templates/en.yml +8 -0
  479. data/spec/support/templates/manifest.js +3 -0
  480. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  481. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  482. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  483. data/spec/support/templates/policies/application_policy.rb +44 -0
  484. data/spec/support/templates/policies/category_policy.rb +7 -0
  485. data/spec/support/templates/policies/post_policy.rb +15 -0
  486. data/spec/support/templates/policies/store_policy.rb +11 -0
  487. data/spec/support/templates/policies/user_policy.rb +11 -0
  488. data/spec/support/templates/post_decorator.rb +24 -0
  489. data/spec/unit/abstract_view_factory_spec.rb +78 -0
  490. data/spec/unit/action_builder_spec.rb +160 -0
  491. data/spec/unit/active_admin_spec.rb +11 -0
  492. data/spec/unit/application_spec.rb +180 -0
  493. data/spec/unit/asset_registration_spec.rb +52 -0
  494. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  495. data/spec/unit/authorization/controller_authorization_spec.rb +43 -0
  496. data/spec/unit/authorization/index_overriding_spec.rb +23 -0
  497. data/spec/unit/auto_link_spec.rb +103 -0
  498. data/spec/unit/batch_actions/resource_spec.rb +84 -0
  499. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  500. data/spec/unit/belongs_to_spec.rb +76 -0
  501. data/spec/unit/cancan_adapter_spec.rb +43 -0
  502. data/spec/unit/comments_spec.rb +204 -0
  503. data/spec/unit/component_spec.rb +18 -0
  504. data/spec/unit/config_shared_examples.rb +59 -0
  505. data/spec/unit/controller_filters_spec.rb +41 -0
  506. data/spec/unit/csv_builder_spec.rb +321 -0
  507. data/spec/unit/dependency_spec.rb +135 -0
  508. data/spec/unit/devise_spec.rb +110 -0
  509. data/spec/unit/dsl_spec.rb +120 -0
  510. data/spec/unit/dynamic_settings_spec.rb +28 -0
  511. data/spec/unit/filters/active_filter_spec.rb +222 -0
  512. data/spec/unit/filters/active_spec.rb +24 -0
  513. data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
  514. data/spec/unit/filters/resource_spec.rb +128 -0
  515. data/spec/unit/form_builder_spec.rb +1013 -0
  516. data/spec/unit/generators/install_spec.rb +31 -0
  517. data/spec/unit/helpers/collection_spec.rb +68 -0
  518. data/spec/unit/helpers/scope_chain_spec.rb +35 -0
  519. data/spec/unit/i18n_spec.rb +29 -0
  520. data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
  521. data/spec/unit/menu_collection_spec.rb +40 -0
  522. data/spec/unit/menu_item_spec.rb +82 -0
  523. data/spec/unit/menu_spec.rb +60 -0
  524. data/spec/unit/namespace/authorization_spec.rb +27 -0
  525. data/spec/unit/namespace/register_page_spec.rb +99 -0
  526. data/spec/unit/namespace/register_resource_spec.rb +162 -0
  527. data/spec/unit/namespace_spec.rb +132 -0
  528. data/spec/unit/order_clause_spec.rb +81 -0
  529. data/spec/unit/page_controller_spec.rb +5 -0
  530. data/spec/unit/page_spec.rb +128 -0
  531. data/spec/unit/pretty_format_spec.rb +133 -0
  532. data/spec/unit/pundit_adapter_spec.rb +98 -0
  533. data/spec/unit/resource/action_items_spec.rb +83 -0
  534. data/spec/unit/resource/attributes_spec.rb +56 -0
  535. data/spec/unit/resource/includes_spec.rb +21 -0
  536. data/spec/unit/resource/menu_spec.rb +18 -0
  537. data/spec/unit/resource/naming_spec.rb +120 -0
  538. data/spec/unit/resource/ordering_spec.rb +35 -0
  539. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  540. data/spec/unit/resource/pagination_spec.rb +38 -0
  541. data/spec/unit/resource/routes_spec.rb +125 -0
  542. data/spec/unit/resource/scopes_spec.rb +50 -0
  543. data/spec/unit/resource/sidebars_spec.rb +43 -0
  544. data/spec/unit/resource_collection_spec.rb +175 -0
  545. data/spec/unit/resource_controller/data_access_spec.rb +234 -0
  546. data/spec/unit/resource_controller/decorators_spec.rb +94 -0
  547. data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
  548. data/spec/unit/resource_controller_spec.rb +290 -0
  549. data/spec/unit/resource_registration_spec.rb +61 -0
  550. data/spec/unit/resource_spec.rb +320 -0
  551. data/spec/unit/routing_spec.rb +211 -0
  552. data/spec/unit/scope_spec.rb +225 -0
  553. data/spec/unit/settings_node_spec.rb +26 -0
  554. data/spec/unit/view_factory_spec.rb +13 -0
  555. data/spec/unit/view_helpers/breadcrumbs_spec.rb +255 -0
  556. data/spec/unit/view_helpers/display_helper_spec.rb +203 -0
  557. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  558. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  559. data/spec/unit/view_helpers/flash_helper_spec.rb +24 -0
  560. data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
  561. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
  562. data/spec/unit/views/components/attributes_table_spec.rb +271 -0
  563. data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
  564. data/spec/unit/views/components/blank_slate_spec.rb +27 -0
  565. data/spec/unit/views/components/columns_spec.rb +187 -0
  566. data/spec/unit/views/components/index_list_spec.rb +49 -0
  567. data/spec/unit/views/components/index_table_for_spec.rb +127 -0
  568. data/spec/unit/views/components/menu_item_spec.rb +29 -0
  569. data/spec/unit/views/components/menu_spec.rb +168 -0
  570. data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
  571. data/spec/unit/views/components/panel_spec.rb +58 -0
  572. data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
  573. data/spec/unit/views/components/site_title_spec.rb +82 -0
  574. data/spec/unit/views/components/status_tag_spec.rb +265 -0
  575. data/spec/unit/views/components/table_for_spec.rb +441 -0
  576. data/spec/unit/views/components/tabs_spec.rb +99 -0
  577. data/spec/unit/views/index_as_blog_spec.rb +76 -0
  578. data/tasks/docs.rake +64 -0
  579. data/tasks/lint.rake +21 -0
  580. data/tasks/local.rake +25 -0
  581. data/tasks/parallel_tests.rake +66 -0
  582. data/tasks/test.rake +24 -0
  583. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  584. metadata +1012 -0
@@ -0,0 +1,86 @@
1
+ ---
2
+ layout: default
3
+ nav_order: 4
4
+ title: CSV Format
5
+ redirect_from: /docs/4-csv-format.html
6
+ ---
7
+
8
+ # Customizing the CSV format
9
+
10
+ Active Admin provides CSV file downloads on the index screen for each Resource.
11
+ By default it will render a CSV file with all the content columns of your
12
+ registered model.
13
+
14
+ To customize the CSV format override [csv_builder]:
15
+
16
+ ```ruby
17
+ class Admin::PostsController < ActiveAdmin::ResourceController
18
+ protected
19
+ def csv_builder
20
+ @csv_builder ||= ActiveAdmin::CSVBuilder.new(resource: active_admin_config) do
21
+ column :title
22
+ column(:author) { |post| post.author.full_name }
23
+ column('bODY', humanize_name: false) # preserve case
24
+ end
25
+ end
26
+ end
27
+ ```
28
+
29
+ You can also set custom CSV settings:
30
+
31
+ ```ruby
32
+ class Admin::PostsController < ActiveAdmin::ResourceController
33
+ protected
34
+ def csv_builder
35
+ @csv_builder ||= ActiveAdmin::CSVBuilder.new(resource: active_admin_config, force_quotes: true, col_sep: ';', column_names: false) do
36
+ column :title
37
+ column(:author) { |post| post.author.full_name }
38
+ end
39
+ end
40
+ end
41
+ ```
42
+
43
+ Or system-wide in `config/initializers/active_admin.rb`:
44
+
45
+ ```ruby
46
+ Rails.application.reloader.to_prepare do
47
+ ActiveAdmin.setup do |config|
48
+ # Set the CSV builder separator
49
+ config.csv_options = { col_sep: ';' }
50
+ # Force the use of quotes
51
+ config.csv_options = { force_quotes: true }
52
+ ...
53
+ ```
54
+
55
+ You can customize the filename by overriding `csv_filename` in the controller block.
56
+
57
+ ```ruby
58
+ class Admin::UsersController < ActiveAdmin::ResourceController
59
+ protected
60
+ def csv_filename
61
+ 'User Details.csv'
62
+ end
63
+ end
64
+ end
65
+ ```
66
+
67
+ ## Streaming
68
+
69
+ By default Active Admin streams the CSV response to your browser as it's generated.
70
+ This is good because it prevents request timeouts, for example the infamous H12
71
+ error on Heroku.
72
+
73
+ However if an exception occurs while generating the CSV, the request will eventually
74
+ time out, with the last line containing the exception message. CSV streaming is
75
+ disabled in development to help debug these exceptions. That lets you use tools like
76
+ better_errors and web-console to debug the issue. If you want to customize the
77
+ environments where CSV streaming is disabled, you can change this setting in `config/initializers/active_admin.rb`:
78
+
79
+ ```ruby
80
+ ActiveAdmin.setup do |config|
81
+ config.disable_streaming_in = ['development', 'staging']
82
+ ...
83
+ ```
84
+
85
+ [csv_builder]: https://rubydoc.info/github/varyonic/activeadmin/master/ActiveAdmin/ResourceController/Streaming#csv_builder-instance_method
86
+ [csv_filename]: https://rubydoc.info/github/varyonic/activeadmin/master/ActiveAdmin/ResourceController/Streaming#csv_filename-instance_method
data/docs/5-forms.md ADDED
@@ -0,0 +1,233 @@
1
+ ---
2
+ layout: default
3
+ nav_order: 5
4
+ title: Forms
5
+ redirect_from: /docs/5-forms.html
6
+ ---
7
+
8
+ # Forms
9
+
10
+ ## Default
11
+
12
+ Active Admin renders `:create` and `:update` by default using partial `form`
13
+ which in turn by default uses an Arbo component `active_admin_form_for`
14
+ that wraps and extends [Formtastic].
15
+
16
+ The default `_form` partial is located in `app/views/active_admin/resource/_form.html.arb`:
17
+
18
+ ```ruby
19
+ options = {
20
+ url: resource.persisted? ? resource_path(resource) : collection_path,
21
+ as: active_admin_config.param_key
22
+ }
23
+ options.merge!(page_presenter.options)
24
+
25
+ active_admin_form_for(resource, options) do |f|
26
+ f.semantic_errors # show errors on :base by default
27
+ f.inputs
28
+ f.actions
29
+ end
30
+ ```
31
+
32
+ ## Partials
33
+
34
+ A customized `app/views/admin/posts/_form.html.arb` might look like:
35
+
36
+ ```ruby
37
+ content_for(:page_title) { 'A custom title' }
38
+
39
+ active_admin_form_for(resource) do |f|
40
+ inputs 'Details' do
41
+ input :title
42
+ input :published_at, label: "Publish Post At"
43
+ li "Created at #{f.object.created_at}" unless f.object.new_record?
44
+ input :category
45
+ end
46
+ panel 'Markup' do
47
+ "The following can be used in the content below..."
48
+ end
49
+ inputs 'Content', :body
50
+ para "Press cancel to return to the list without saving."
51
+ actions
52
+ end
53
+ ```
54
+
55
+ This is a regular Rails partial so any template engine may be used, eg. haml.
56
+
57
+ You can also use the `ActiveAdmin::FormBuilder` as builder in your Formtastic
58
+ Form for use the same helpers are used in the admin file:
59
+
60
+ ```ruby
61
+ = semantic_form_for [:admin, @post], builder: ActiveAdmin::FormBuilder do |f|
62
+ = f.inputs "Details" do
63
+ = f.input :title
64
+ - f.has_many :taggings, sortable: :position, sortable_start: 1 do |t|
65
+ - t.input :tag
66
+ = f.actions
67
+
68
+ ```
69
+
70
+ For more details, please see [Formtastic's documentation].
71
+
72
+ ## Nested Resources
73
+
74
+ You can create forms with nested models using the `has_many` method, even if
75
+ your model uses `has_one`:
76
+
77
+ ```ruby
78
+ class Admin::PostsController < ActiveAdmin::ResourceController
79
+ protected
80
+ def permitted_attr_names
81
+ [
82
+ :title,
83
+ :published_at,
84
+ :body,
85
+ categories_attributes: [:id, :title, :_destroy],
86
+ taggings_attributes: [:id, :tag],
87
+ comment_attributes: [:id, :body, :_destroy]
88
+ ]
89
+ end
90
+ end
91
+ ```
92
+
93
+ ```ruby
94
+ # app/views/admin/posts/_form.html.arb
95
+ active_admin_form_for(resource) do |f|
96
+ f.inputs 'Details' do
97
+ f.input :title
98
+ f.input :published_at, label: 'Publish Post At'
99
+ end
100
+ f.inputs 'Content', :body
101
+ f.inputs do
102
+ f.has_many :categories, heading: 'Themes',
103
+ allow_destroy: true,
104
+ new_record: false do |a|
105
+ a.input :title
106
+ end
107
+ end
108
+ f.inputs do
109
+ f.has_many :taggings, sortable: :position, sortable_start: 1 do |t|
110
+ t.input :tag
111
+ end
112
+ end
113
+ f.inputs do
114
+ f.has_many :comment,
115
+ new_record: 'Leave Comment',
116
+ allow_destroy: -> (c) { c.author?(current_admin_user) } do |b|
117
+ b.input :body
118
+ end
119
+ end
120
+ f.actions
121
+ end
122
+ ```
123
+
124
+ *NOTE: In addition to using `has_many` as illustrated above, you'll need to add
125
+ `accepts_nested_attributes` to your parent model and [configure strong parameters](https://activeadmin.org/2-resource-customization.html)*
126
+
127
+ The `:allow_destroy` option adds a checkbox to the end of the nested form allowing
128
+ removal of the child object upon submission. Be sure to set `allow_destroy: true`
129
+ on the association to use this option. It is possible to associate
130
+ `:allow_destroy` with a string or a symbol, corresponding to the name of a child
131
+ object's method that will get called, or with a Proc object. The Proc object
132
+ receives the child object as a parameter and should return either true or false.
133
+
134
+ The `:heading` option adds a custom heading. You can hide it entirely by passing
135
+ `false`.
136
+
137
+ The `:new_record` option controls the visibility of the new record button (shown
138
+ by default). If you pass a string, it will be used as the text for the new
139
+ record button.
140
+
141
+ The `:sortable` option adds a hidden field and will enable drag & drop sorting
142
+ of the children. It expects the name of the column that will store the index of
143
+ each child.
144
+
145
+ The `:sortable_start` option sets the value (0 by default) of the first position
146
+ in the list.
147
+
148
+ ## Datepicker
149
+
150
+ ActiveAdmin offers the `datepicker` input, which uses the [jQuery UI
151
+ datepicker](http://jqueryui.com/datepicker/). The datepicker input accepts any
152
+ of the options available to the standard jQueryUI Datepicker. For example:
153
+
154
+ ```ruby
155
+ active_admin_form_for(resource) do |f|
156
+ f.input :starts_at, as: :datepicker,
157
+ datepicker_options: {
158
+ min_date: "2013-10-8",
159
+ max_date: "+3D"
160
+ }
161
+
162
+ f.input :ends_at, as: :datepicker,
163
+ datepicker_options: {
164
+ min_date: 3.days.ago.to_date,
165
+ max_date: "+1W +5D"
166
+ }
167
+ end
168
+ ```
169
+
170
+ Datepicker also accepts the `:label` option as a string or proc to display.
171
+ If it's a proc, it will be called each time the datepicker is rendered.
172
+
173
+ ## Displaying Errors
174
+
175
+ To display a list of all validation errors:
176
+
177
+ ```ruby
178
+ active_admin_form_for(resource) do |f|
179
+ f.semantic_errors *f.object.errors.keys
180
+ # ...
181
+ end
182
+ ```
183
+
184
+ This is particularly useful to display errors on virtual or hidden attributes.
185
+
186
+ # Tabs
187
+
188
+ You can arrange content in tabs as shown below:
189
+
190
+ ```ruby
191
+ active_admin_form_for(resource) do |f|
192
+ tabs do
193
+ tab 'Basic' do
194
+ f.inputs 'Basic Details' do
195
+ f.input :email
196
+ f.input :password
197
+ f.input :password_confirmation
198
+ end
199
+ end
200
+
201
+ tab 'Advanced', html_options: { class: 'specific_css_class' } do
202
+ f.inputs 'Advanced Details' do
203
+ f.input :role
204
+ end
205
+ end
206
+ end
207
+ f.actions
208
+ end
209
+ ```
210
+ `html_options` allows you set additional html params for tab's menu item.
211
+
212
+ # Customize the Create Another checkbox
213
+
214
+ In order to simplify creating multiple resources you may enable ActiveAdmin to
215
+ show nice "Create Another" checkbox alongside of Create Model button. It may be
216
+ enabled for the whole application:
217
+
218
+ ```ruby
219
+ ActiveAdmin.setup do |config|
220
+ config.create_another = true
221
+ end
222
+ ```
223
+
224
+ or for the particular resource:
225
+
226
+ ```ruby
227
+ ActiveAdmin.configure_resource Post do |config|
228
+ config.create_another = true
229
+ end
230
+ ```
231
+
232
+ [Formtastic]: https://github.com/justinfrench/formtastic
233
+ [Formtastic's documentation]: https://github.com/justinfrench/formtastic/wiki
@@ -0,0 +1,61 @@
1
+ ---
2
+ layout: default
3
+ nav_order: 6
4
+ title: Show Pages
5
+ redirect_from: /docs/6-show-pages.html
6
+ ---
7
+ # Customize the Show Page
8
+
9
+ Active Admin renders `:show` using partial `show`
10
+
11
+ The default partial is located in `app/views/active_admin/resource/_show.html.arb` and simply renders `attributes_panel`
12
+
13
+ A customized `app/views/admin/posts/_show.html.arb` keeping the default AA look might look like:
14
+
15
+ ```ruby
16
+ content_for(:page_title) { resource.name }
17
+ attributes_table do
18
+ row :title
19
+ row :image do |ad|
20
+ image_tag ad.image.url
21
+ end
22
+ end
23
+ active_admin_comments_for(resource)
24
+ ```
25
+
26
+ A more generic partial might look like:
27
+
28
+ ```ruby
29
+ h3 post.title
30
+ div do
31
+ simple_format post.body
32
+ end
33
+ ```
34
+
35
+ If you want a more data-dense page, you can combine a sidebar:
36
+
37
+ ```ruby
38
+ panel "Table of Contents" do
39
+ table_for book.chapters do
40
+ column :number
41
+ column :title
42
+ column :page
43
+ end
44
+ end
45
+ active_admin_comments_for(resource)
46
+ ```
47
+
48
+ and
49
+
50
+ ```ruby
51
+ ActiveAdmin.register Book do
52
+ sidebar "Details", only: :show do
53
+ attributes_table_for book do
54
+ row :title
55
+ row :author
56
+ row :publisher
57
+ row('Published?') { |b| status_tag b.published? }
58
+ end
59
+ end
60
+ end
61
+ ```
@@ -0,0 +1,63 @@
1
+ ---
2
+ layout: default
3
+ nav_order: 7
4
+ title: Sidebars
5
+ redirect_from: /docs/7-sidebars.html
6
+ ---
7
+ # Sidebar Sections
8
+
9
+ Sidebars allow you to put whatever content you want on the side of the page.
10
+
11
+ ```ruby
12
+ config.add_sidebar_section :help
13
+
14
+ # app/views/admin/posts/_help_sidebar.html.arb
15
+ "Need help? Email us at help@example.com"
16
+ ```
17
+
18
+ This will generate a sidebar on every page for that resource. The first
19
+ argument is used as the title, and can be a symbol, string, or lambda.
20
+
21
+ Sidebars can be rendered on a specific action by passing `:only` or `:except`.
22
+
23
+ ```ruby
24
+ config.add_sidebar_section :help, only: :index
25
+ ```
26
+
27
+ If you want to conditionally display a sidebar section, use the :if option and
28
+ pass it a proc which will be rendered within the view context.
29
+
30
+ ```ruby
31
+ config.add_sidebar_section :help, if: proc{ current_admin_user.super_admin? }
32
+ ```
33
+
34
+ You can access your model as resource in the sidebar too:
35
+
36
+ ```ruby
37
+ # app/views/admin/posts/_custom_sidebar.html.arb
38
+ resource.a_method
39
+ ```
40
+
41
+ You can also override the partial name:
42
+
43
+ ```ruby
44
+ config.add_sidebar_section :help # app/views/admin/posts/_help_sidebar.html.erb
45
+ config.add_sidebar_section :help, partial: 'custom' # app/views/admin/posts/_custom.html.erb
46
+ ```
47
+
48
+ It's possible to add custom class name to the sidebar parent element by passing
49
+ `class` option:
50
+
51
+ ```ruby
52
+ config.add_sidebar_section :help, class: 'custom_class'
53
+ ```
54
+
55
+ By default sidebars are positioned in the same order as they defined, but it's also
56
+ possible to specify their position manually:
57
+
58
+ ```ruby
59
+ # will push Help section to the top (above default Filters section)
60
+ config.add_sidebar_section :help, priority: 0
61
+ ```
62
+
63
+ Default sidebar priority is `10`.
@@ -0,0 +1,160 @@
1
+ ---
2
+ layout: default
3
+ nav_order: 8
4
+ title: Custom Actions
5
+ redirect_from: /docs/8-custom-actions.html
6
+ ---
7
+
8
+ # Custom Controller Actions
9
+
10
+ Add custom actions the Rails Way:
11
+
12
+ ## Collection Actions
13
+
14
+ A collection action is a controller action which operates on the collection of
15
+ resources. Add both the action to the controller as well as a route.
16
+
17
+ ```ruby
18
+ class Admin::PostsController < ActiveAdmin::ResourceController
19
+ def import_csv
20
+ # Do some CSV importing work here...
21
+ redirect_to collection_path, notice: "CSV imported successfully!"
22
+ end
23
+ end
24
+ ```
25
+ and
26
+
27
+ ```ruby
28
+ Rails.application.routes.draw do
29
+ post '/admin/posts/import_csv', controller: 'admin/posts', action: 'import_csv'
30
+ ...
31
+ ```
32
+
33
+ This collection action will generate a route at `/admin/posts/import_csv`
34
+ pointing to the `Admin::PostsController#import_csv` controller action.
35
+
36
+ ## Member Actions
37
+
38
+ A member action is a controller action which operates on a single resource.
39
+
40
+ For example, to add a lock action to a user resource, you would do the
41
+ following:
42
+
43
+ ```ruby
44
+ class Admin::UsersController < ActiveAdmin::ResourceController
45
+ def lock
46
+ resource.lock!
47
+ redirect_to resource_path, notice: "Locked!"
48
+ end
49
+ ```
50
+ and
51
+ ```ruby
52
+ Rails.application.routes.draw do
53
+ put '/admin/users/:id/lock', controller: 'admin/users', action: 'lock'
54
+ ...
55
+ ```
56
+
57
+ ## HTTP Verbs
58
+
59
+ Sometimes you want to create an action that handles multiple
60
+ HTTP verbs. In that case, this is the suggested approach:
61
+
62
+ ```ruby
63
+ def foo
64
+ if request.post?
65
+ resource.update_attributes! foo: params[:foo] || {}
66
+ head :ok
67
+ else
68
+ render :foo
69
+ end
70
+ end
71
+ ```
72
+ and
73
+ ```ruby
74
+ Rails.application.routes.draw do
75
+ get 'admin/users/:id/foo', container: 'admin/users', action: 'foo'
76
+ post 'admin/users/:id/foo', container: 'admin/users', action: 'foo'
77
+ ...
78
+ ```
79
+
80
+ ## Rendering
81
+
82
+ Custom controller actions support rendering within the standard Active Admin
83
+ layout.
84
+
85
+ ```ruby
86
+ class Admin::PostsController < ActiveAdmin::ResourceController
87
+ # /admin/posts/:id/comments
88
+ def comments
89
+ @comments = resource.comments
90
+ # This will render app/views/admin/posts/comments.html.erb
91
+ end
92
+ end
93
+ ```
94
+
95
+ If you would like to use the same view syntax as the rest of Active Admin, you
96
+ can use the Arbo file extension: .arb.
97
+
98
+ For example, create `app/views/admin/posts/comments.html.arb` with:
99
+
100
+ ```ruby
101
+ table_for assigns[:post].comments do
102
+ column :id
103
+ column :author
104
+ column :body do |comment|
105
+ simple_format comment.body
106
+ end
107
+ end
108
+ ```
109
+
110
+ ## Page Titles
111
+
112
+ The page title for the custom action will be the translated version of
113
+ the controller action name. For example, a member_action named "upload_csv" will
114
+ look up a translation key of `active_admin.upload_csv`. If none are found, it
115
+ defaults to the name of the controller action.
116
+
117
+ If this doesn't work for you, you can always set the `@page_title` instance
118
+ variable in your controller action to customize the page title.
119
+
120
+ ```ruby
121
+ class Admin::PostsController < ActiveAdmin::ResourceController
122
+ def comments
123
+ @comments = resource.comments
124
+ @page_title = "#{resource.title}: Comments" # Sets the page title
125
+ end
126
+ end
127
+ ```
128
+ Alternately use `content_for(:page_title)` in the view template.
129
+
130
+ # Action Items
131
+
132
+ By default action items (like the New, Edit and Delete buttons) are rendered in
133
+ a partial included in the right hand side of the title bar.
134
+
135
+ For example, to add a "View on site" button to view a blog post customize the `action_item` partial as follows:
136
+
137
+ ```ruby
138
+ # app/views/admin/posts/_action_item.html.arb
139
+ div(class: :action_items) do
140
+ if params[:action] == 'index'
141
+ if controller.action_methods.include?('new') && authorized?(:create, Post)
142
+ action_link :new_model, new_resource_path
143
+ end
144
+ end
145
+
146
+ if params[:action] == 'show'
147
+ if controller.action_methods.include?('edit') && authorized?(:update, resource)
148
+ action_link :edit_model, edit_resource_path(resource)
149
+ end
150
+
151
+ if resource.published? && current_admin_user.super_admin?
152
+ action_link "View on site", post_path(resource)
153
+ end
154
+ end
155
+ end
156
+ ```
157
+
158
+ # Modifying the Controller
159
+
160
+ Using the `controller` method within the registration block is deprecated, create and modify the controller explicitly.