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,58 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module DownloadFormatLinksHelper
4
+
5
+ def build_download_formats(download_links)
6
+ download_links = instance_exec(&download_links) if download_links.is_a?(Proc)
7
+
8
+ if download_links.is_a?(Array) && !download_links.empty?
9
+ download_links
10
+ elsif download_links == false
11
+ []
12
+ else
13
+ self.class.formats
14
+ end
15
+ end
16
+
17
+ def build_download_format_links(formats = self.class.formats)
18
+ params = request.query_parameters.except :format, :commit
19
+ div class: "download_links" do
20
+ span I18n.t('active_admin.download')
21
+ formats.each do |format|
22
+ a format.upcase, href: url_for(params: params, format: format)
23
+ end
24
+ end
25
+ end
26
+
27
+ def self.included base
28
+ base.extend ClassMethods
29
+ end
30
+
31
+ module ClassMethods
32
+
33
+ # A ready only of formats to make available in index/paginated
34
+ # collection view.
35
+ # @return [Array]
36
+ # @see add_format for information on adding custom download link
37
+ # formats
38
+ def formats
39
+ @formats ||= [:csv, :xml, :json]
40
+ @formats.clone
41
+ end
42
+
43
+ # Adds a mime type to the list of available formats available for data
44
+ # export. You must register the extension prior to adding it here.
45
+ # @param [Symbol] format the mime type to add
46
+ # @return [Array] A copy of the updated formats array.
47
+ def add_format(format)
48
+ unless Mime::Type.lookup_by_extension format
49
+ raise ArgumentError, "Please register the #{format} mime type with `Mime::Type.register`"
50
+ end
51
+ @formats << format unless formats.include? format
52
+ formats
53
+ end
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,50 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module FormHelper
4
+
5
+ # Flatten a params Hash to an array of fields.
6
+ #
7
+ # @param params [Hash]
8
+ # @param options [Hash] :namespace and :except
9
+ #
10
+ # @return [Array] of [Hash] with one element.
11
+ #
12
+ # @example
13
+ # fields_for_params(scope: "all", users: ["greg"])
14
+ # => [ {"scope" => "all"} , {"users[]" => "greg"} ]
15
+ #
16
+ def fields_for_params(params, options = {})
17
+ namespace = options[:namespace]
18
+ except = Array.wrap(options[:except]).map &:to_s
19
+
20
+ params.flat_map do |k, v|
21
+ next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
22
+ next if except.include?(k.to_s)
23
+
24
+ if namespace
25
+ k = "#{namespace}[#{k}]"
26
+ end
27
+
28
+ case v
29
+ when String
30
+ { k => v }
31
+ when Symbol
32
+ { k => v.to_s }
33
+ when Hash
34
+ fields_for_params(v, namespace: k)
35
+ when Array
36
+ v.map do |v|
37
+ { "#{k}[]" => v }
38
+ end
39
+ when nil
40
+ { k => '' }
41
+ when TrueClass, FalseClass
42
+ { k => v }
43
+ else
44
+ raise "I don't know what to do with #{v.class} params: #{v.inspect}"
45
+ end
46
+ end.compact
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,14 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module FlashHelper
4
+
5
+ # Returns all the flash keys to display in any Active Admin view.
6
+ # This method removes the :timedout key that Devise uses by default.
7
+ # Note Rails >= 4.1 normalizes keys to strings automatically.
8
+ def flash_messages
9
+ @flash_messages ||= flash.to_hash.with_indifferent_access.except(*active_admin_application.flash_keys_to_except)
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module FormHelper
4
+
5
+ def active_admin_form_for(resource, options = {}, &block)
6
+ Arbo::Context.new({}, self) do
7
+ active_admin_form_for resource, options, &block
8
+ end.render_in.html_safe
9
+ end
10
+
11
+ def hidden_field_tags_for(params, options = {})
12
+ fields_for_params(params.to_unsafe_hash, options).map do |kv|
13
+ k, v = kv.first
14
+ hidden_field_tag k, v, id: sanitize_to_id("hidden_active_admin_#{k}")
15
+ end.join("\n").html_safe
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,32 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module LayoutHelper
4
+
5
+ def action_items_for_action
6
+ if active_admin_config && active_admin_config.action_items?
7
+ active_admin_config.action_items_for(params[:action], self)
8
+ else
9
+ []
10
+ end
11
+ end
12
+
13
+ def body_classes
14
+ Arbo::HTML::ClassList.new [
15
+ params[:action],
16
+ params[:controller].tr('/', '_'),
17
+ 'active_admin', 'logged_in',
18
+ active_admin_namespace.name.to_s + '_namespace'
19
+ ]
20
+ end
21
+
22
+ # Returns the sidebar sections to render for the current action
23
+ def sidebar_sections_for_action
24
+ if active_admin_config && active_admin_config.sidebar_sections?
25
+ active_admin_config.sidebar_sections_for(params[:action], self)
26
+ else
27
+ []
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,97 @@
1
+ module MethodOrProcHelper
2
+
3
+ # This method will either call the symbol on self or instance_exec the Proc
4
+ # within self. Any args will be passed along to the method dispatch.
5
+ #
6
+ # Calling with a Symbol:
7
+ #
8
+ # call_method_or_exec_proc(:to_s) #=> will call #to_s
9
+ #
10
+ # Calling with a Proc
11
+ #
12
+ # my_proc = Proc.new{ to_s }
13
+ # call_method_or_exec_proc(my_proc) #=> will instance_exec in self
14
+ #
15
+ def call_method_or_exec_proc(symbol_or_proc, *args)
16
+ case symbol_or_proc
17
+ when Symbol, String
18
+ send(symbol_or_proc, *args)
19
+ when Proc
20
+ instance_exec(*args, &symbol_or_proc)
21
+ else
22
+ symbol_or_proc
23
+ end
24
+ end
25
+
26
+ # Many times throughout the views we want to either call a method on an object
27
+ # or instance_exec a proc passing in the object as the first parameter. This
28
+ # method wraps that pattern.
29
+ #
30
+ # Calling with a String or Symbol:
31
+ #
32
+ # call_method_or_proc_on(@my_obj, :size) same as @my_obj.size
33
+ #
34
+ # Calling with a Proc:
35
+ #
36
+ # proc = Proc.new{|s| s.size }
37
+ # call_method_or_proc_on(@my_obj, proc)
38
+ #
39
+ # By default, the Proc will be instance_exec'd within self. If you would rather
40
+ # not instance exec, but just call the Proc, then pass along `exec: false` in
41
+ # the options hash.
42
+ #
43
+ # proc = Proc.new{|s| s.size }
44
+ # call_method_or_proc_on(@my_obj, proc, exec: false)
45
+ #
46
+ # You can pass along any necessary arguments to the method / Proc as arguments. For
47
+ # example:
48
+ #
49
+ # call_method_or_proc_on(@my_obj, :find, 1) #=> @my_obj.find(1)
50
+ #
51
+ def call_method_or_proc_on(receiver, *args)
52
+ options = { exec: true }.merge(args.extract_options!)
53
+
54
+ symbol_or_proc = args.shift
55
+
56
+ case symbol_or_proc
57
+ when Symbol, String
58
+ receiver.public_send symbol_or_proc.to_sym, *args
59
+ when Proc
60
+ if options[:exec]
61
+ instance_exec(receiver, *args, &symbol_or_proc)
62
+ else
63
+ symbol_or_proc.call(receiver, *args)
64
+ end
65
+ else
66
+ symbol_or_proc
67
+ end
68
+ end
69
+
70
+ # Many configuration options (Ex: site_title, title_image) could either be
71
+ # static (String), methods (Symbol) or procs (Proc). This helper takes care of
72
+ # returning the content when String or call call_method_or_proc_on when Symbol or Proc.
73
+ #
74
+ def render_or_call_method_or_proc_on(obj, string_symbol_or_proc, options = {})
75
+ case string_symbol_or_proc
76
+ when Symbol, Proc
77
+ call_method_or_proc_on(obj, string_symbol_or_proc, options)
78
+ else
79
+ string_symbol_or_proc
80
+ end
81
+ end
82
+
83
+ # This method is different from the others in that it calls `instance_exec` on the receiver,
84
+ # passing it the proc. This evaluates the proc in the context of the receiver, thus changing
85
+ # what `self` means inside the proc.
86
+ def render_in_context(context, obj, *args)
87
+ context = self if context.nil? # default to `self` only when nil
88
+ case obj
89
+ when Proc
90
+ context.instance_exec *args, &obj
91
+ when Symbol
92
+ context.public_send obj, *args
93
+ else
94
+ obj
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,16 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module ScopeNameHelper
4
+
5
+ def scope_name(scope)
6
+ case scope.name
7
+ when Proc then
8
+ self.instance_exec(&scope.name).to_s
9
+ else
10
+ scope.name.to_s
11
+ end
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module SidebarHelper
4
+
5
+ def skip_sidebar!
6
+ @skip_sidebar = true
7
+ end
8
+
9
+ def skip_sidebar?
10
+ @skip_sidebar == true
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module TitleHelper
4
+
5
+ def title(_title)
6
+ @page_title = _title
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module ViewFactoryHelper
4
+
5
+ def view_factory
6
+ active_admin_namespace.view_factory
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+
4
+ # Require all ruby files in the view helpers dir
5
+ Dir[File.expand_path('../view_helpers', __FILE__) + "/*.rb"].each{|f| require f }
6
+
7
+ include ActiveAdminApplicationHelper
8
+ include AutoLinkHelper
9
+ include BreadcrumbHelper
10
+ include DisplayHelper
11
+ include LayoutHelper
12
+ include MethodOrProcHelper
13
+ include SidebarHelper
14
+ include FormHelper
15
+ include TitleHelper
16
+ include ViewFactoryHelper
17
+ include FlashHelper
18
+ include ScopeNameHelper
19
+
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class ActionLink < Arbo::HTML::Span
4
+ builder_method :action_link
5
+
6
+ def build(name, path, options = {})
7
+ @tag_name = 'span'
8
+ set_attribute(:class, :action_item)
9
+ text_node link_to(localizer.t(name), path, options)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,163 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class FormtasticProxy < ::Arbo::Rails::Forms::FormBuilderProxy
4
+ def split_string_on(string, match)
5
+ return "" unless string && match
6
+ part_1 = string.split(Regexp.new("#{match}\\z")).first
7
+ [part_1, match]
8
+ end
9
+
10
+ def opening_tag
11
+ @opening_tag || ""
12
+ end
13
+
14
+ def closing_tag
15
+ @closing_tag || ""
16
+ end
17
+
18
+ def render_in(context = arbo_context)
19
+ pos = context.output_buffer.length
20
+ context.output_buffer << opening_tag.html_safe
21
+ children.map { |element| element.render_in(context) }
22
+ context.output_buffer << closing_tag.html_safe
23
+ pos > 0 ? context.output_buffer.to_str[pos..] : context.output_buffer
24
+ end
25
+
26
+ def to_s
27
+ opening_tag + children.to_s + closing_tag
28
+ end
29
+ end
30
+
31
+ class ActiveAdminForm < FormtasticProxy
32
+ builder_method :active_admin_form_for
33
+
34
+ def build(resource, options = {}, &block)
35
+ @resource = resource
36
+ options = options.deep_dup
37
+ options[:builder] ||= ActiveAdmin::FormBuilder
38
+ form_string = helpers.semantic_form_for(resource, options) do |f|
39
+ @form_builder = f
40
+ end
41
+
42
+ @opening_tag, @closing_tag = split_string_on(form_string, "</form>")
43
+ instance_eval(&block) if block_given?
44
+
45
+ # Rails sets multipart automatically if a file field is present,
46
+ # but the form tag has already been rendered before the block eval.
47
+ if multipart? && @opening_tag !~ /multipart/
48
+ @opening_tag.sub!(/<form/, '<form enctype="multipart/form-data"')
49
+ end
50
+ end
51
+
52
+ def inputs(*args, &block)
53
+ if block_given?
54
+ form_builder.template.assigns[:has_many_block] = true
55
+ end
56
+ if block_given? && block.arity == 0
57
+ wrapped_block = proc do
58
+ wrap_it = form_builder.already_in_an_inputs_block ? true : false
59
+ form_builder.already_in_an_inputs_block = true
60
+ content = form_builder.template.capture do
61
+ block.call
62
+ end
63
+ form_builder.already_in_an_inputs_block = wrap_it
64
+ content
65
+ end
66
+ insert_tag(SemanticInputsProxy, form_builder, *args, &wrapped_block)
67
+ else
68
+ # Set except option to prevent sensitive fields from being shown in forms by default.
69
+ opts = args.extract_options!
70
+ opts[:except] ||= []
71
+ ActiveAdmin.application.filter_attributes.each { |e| opts[:except] << e }
72
+ args << opts
73
+
74
+ proxy_call_to_form(:inputs, *args, &block)
75
+ end
76
+ end
77
+
78
+ def input(*args)
79
+ proxy_call_to_form :input, *args
80
+ end
81
+
82
+ def actions(*args, &block)
83
+ block_given? ?
84
+ insert_tag(SemanticActionsProxy, form_builder, *args, &block) :
85
+ actions(*args) { commit_action_with_cancel_link }
86
+ end
87
+
88
+ def commit_action_with_cancel_link
89
+ add_create_another_checkbox
90
+ action(:submit)
91
+ cancel_link
92
+ end
93
+
94
+ def add_create_another_checkbox
95
+ if %w(new create).include?(helpers.action_name) && active_admin_config && active_admin_config.create_another
96
+ current_arbo_element.add_child(create_another_checkbox)
97
+ end
98
+ end
99
+
100
+ def has_many(*args, &block)
101
+ insert_tag(HasManyProxy, form_builder, *args, &block)
102
+ end
103
+
104
+ def multipart?
105
+ form_builder && form_builder.multipart?
106
+ end
107
+
108
+ def object
109
+ form_builder.object
110
+ end
111
+
112
+ def form_buffers
113
+ raise "'form_buffers' has been removed from ActiveAdmin::FormBuilder, please read https://github.com/varyonic/activeadmin/blob/main/docs/5-forms.md for details."
114
+ end
115
+
116
+ private
117
+
118
+ def create_another_checkbox
119
+ create_another = params[:create_another]
120
+ label = @resource.class.model_name.human
121
+ Arbo::Context.new do
122
+ li class: 'create_another' do
123
+ input(
124
+ checked: create_another,
125
+ id: 'create_another',
126
+ name: 'create_another',
127
+ type: 'checkbox'
128
+ )
129
+ label(I18n.t('active_admin.create_another', model: label), for: 'create_another')
130
+ end
131
+ end
132
+ end
133
+ end
134
+
135
+ class SemanticInputsProxy < FormtasticProxy
136
+ def build(form_builder, *args, &block)
137
+ html_options = args.extract_options!
138
+ html_options[:class] ||= "inputs"
139
+ legend = args.shift if args.first.is_a?(::String)
140
+ legend = html_options.delete(:name) if html_options.key?(:name)
141
+ legend_tag = legend ? "<legend><span>#{legend}</span></legend>" : ""
142
+ fieldset_attrs = html_options.map {|k, v| %Q{#{k}="#{v}"} }.join(" ")
143
+ @opening_tag = "<fieldset #{fieldset_attrs}>#{legend_tag}<ol>"
144
+ @closing_tag = "</ol></fieldset>"
145
+ super(*(args << html_options), &block)
146
+ end
147
+ end
148
+
149
+ class SemanticActionsProxy < FormtasticProxy
150
+ def build(form_builder, *args, &block)
151
+ @opening_tag = "<fieldset class=\"actions\"><ol>"
152
+ @closing_tag = "</ol></fieldset>"
153
+ super(*args, &block)
154
+ end
155
+ end
156
+
157
+ class HasManyProxy < FormtasticProxy
158
+ def build(form_builder, *args, &block)
159
+ text_node form_builder.has_many(*args, &block)
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,23 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class AttributesPanel < ActiveAdmin::Component
5
+ builder_method :attributes_panel
6
+ builder_method :attributes_table # TODO: deprecate
7
+
8
+ def build(*args, &block)
9
+ opts = args.extract_options!
10
+ table_title = if opts.has_key?(:title)
11
+ render_or_call_method_or_proc_on(resource, opts[:title])
12
+ else
13
+ ActiveAdmin::Localizers.resource(active_admin_config).t(:details)
14
+ end
15
+ resource_columns = args.present? ? args : active_admin_config.resource_columns
16
+ panel(table_title) do
17
+ attributes_table_for(resource, *resource_columns, &block)
18
+ active_admin_comments_for(resource) if active_admin_config.comments?
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,94 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class AttributesTable < ActiveAdmin::Component
5
+ builder_method :attributes_table_for
6
+
7
+ def build(obj, *attrs)
8
+ @collection = Array.wrap(obj)
9
+ @resource_class = @collection.first.class
10
+ options = { }
11
+ options[:for] = @collection.first if single_record?
12
+ super(options)
13
+ @table = table
14
+ build_colgroups
15
+ rows(*attrs)
16
+ end
17
+
18
+ def rows(*attrs)
19
+ attrs.each {|attr| row(attr) }
20
+ end
21
+
22
+ def row(*args, &block)
23
+ title = args[0]
24
+ options = args.extract_options!
25
+ classes = [:row]
26
+ if options[:class]
27
+ classes << options[:class]
28
+ elsif title.present?
29
+ classes << "row-#{title.to_s.parameterize(separator: "_")}"
30
+ end
31
+ options[:class] = classes.join(' ')
32
+
33
+ @table << tr(options) do
34
+ th do
35
+ header_content_for(title)
36
+ end
37
+ @collection.each do |record|
38
+ td do
39
+ content_for(record, block || title)
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ protected
46
+
47
+ def default_id_for_prefix
48
+ 'attributes_table'
49
+ end
50
+
51
+ # Build Colgroups
52
+ #
53
+ # Colgroups are only necessary for a collection of records; not
54
+ # a single record.
55
+ def build_colgroups
56
+ return if single_record?
57
+ reset_cycle(self.class.to_s)
58
+ within @table do
59
+ col # column for row headers
60
+ @collection.each do |record|
61
+ classes = Arbo::HTML::ClassList.new
62
+ classes << cycle(:even, :odd, name: self.class.to_s)
63
+ classes << dom_class_name_for(record)
64
+ col(id: dom_id_for(record), class: classes)
65
+ end
66
+ end
67
+ end
68
+
69
+ def header_content_for(attr)
70
+ if @resource_class.respond_to?(:human_attribute_name)
71
+ @resource_class.human_attribute_name(attr, default: attr.to_s.titleize)
72
+ else
73
+ attr.to_s.titleize
74
+ end
75
+ end
76
+
77
+ def empty_value
78
+ span I18n.t('active_admin.empty'), class: "empty"
79
+ end
80
+
81
+ def content_for(record, attr)
82
+ value = helpers.format_attribute record, attr
83
+ value.blank? && current_arbo_element.children.to_s.empty? ? empty_value : value
84
+ # Don't add the same Arbre twice, while still allowing format_attribute to call status_tag
85
+ current_arbo_element << value unless current_arbo_element.children.include? value
86
+ end
87
+
88
+ def single_record?
89
+ @single_record ||= @collection.size == 1
90
+ end
91
+ end
92
+
93
+ end
94
+ end
@@ -0,0 +1,17 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ # Build a Blank Slate
4
+ class BlankSlate < ActiveAdmin::Component
5
+ builder_method :blank_slate
6
+
7
+ def default_class_name
8
+ 'blank_slate_container'
9
+ end
10
+
11
+ def build(content)
12
+ super(span(content.html_safe, class: "blank_slate"))
13
+ end
14
+
15
+ end
16
+ end
17
+ end