activeadmin-rb 1.4.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 (614) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +64 -0
  3. data/.github/ISSUE_TEMPLATE.md +20 -0
  4. data/.gitignore +21 -0
  5. data/.mdlrc +1 -0
  6. data/.rubocop.yml +84 -0
  7. data/.simplecov +13 -0
  8. data/.travis.yml +49 -0
  9. data/.yardopts +7 -0
  10. data/CHANGELOG.md +389 -0
  11. data/CODE_OF_CONDUCT.md +22 -0
  12. data/CONTRIBUTING.md +184 -0
  13. data/Gemfile +58 -0
  14. data/LICENSE +20 -0
  15. data/README.md +75 -0
  16. data/Rakefile +54 -0
  17. data/activeadmin-rb.gemspec +32 -0
  18. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  20. data/app/assets/images/active_admin/orderable.png +0 -0
  21. data/app/assets/javascripts/active_admin/base.js.coffee +13 -0
  22. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  23. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  24. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +11 -0
  25. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +14 -0
  26. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +26 -0
  27. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +7 -0
  28. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +42 -0
  29. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +46 -0
  30. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +104 -0
  31. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  32. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  33. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +45 -0
  34. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +46 -0
  35. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +22 -0
  36. data/app/assets/stylesheets/active_admin/_base.scss +41 -0
  37. data/app/assets/stylesheets/active_admin/_forms.scss +338 -0
  38. data/app/assets/stylesheets/active_admin/_header.scss +156 -0
  39. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  40. data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  41. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
  42. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  43. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  44. data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  45. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  46. data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  47. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
  48. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
  49. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  50. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  51. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  52. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  53. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  54. data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
  55. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  56. data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
  57. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
  58. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  59. data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
  60. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  61. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  62. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
  71. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  72. data/app/assets/stylesheets/active_admin/print.scss +287 -0
  73. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  74. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  75. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
  76. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  77. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  78. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  79. data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
  80. data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  81. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  82. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  83. data/app/views/active_admin/devise/shared/_links.erb +33 -0
  84. data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  85. data/app/views/active_admin/page/index.html.arb +1 -0
  86. data/app/views/active_admin/resource/edit.html.arb +1 -0
  87. data/app/views/active_admin/resource/index.html.arb +1 -0
  88. data/app/views/active_admin/resource/new.html.arb +1 -0
  89. data/app/views/active_admin/resource/show.html.arb +1 -0
  90. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  91. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  92. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  93. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  94. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  95. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  96. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  97. data/app/views/layouts/active_admin.html.arb +1 -0
  98. data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
  99. data/codecov.yml +25 -0
  100. data/config/i18n-tasks.yml +26 -0
  101. data/config/locales/ar.yml +134 -0
  102. data/config/locales/bg.yml +119 -0
  103. data/config/locales/bs.yml +120 -0
  104. data/config/locales/ca.yml +105 -0
  105. data/config/locales/cs.yml +108 -0
  106. data/config/locales/da.yml +136 -0
  107. data/config/locales/de-CH.yml +100 -0
  108. data/config/locales/de.yml +143 -0
  109. data/config/locales/el.yml +125 -0
  110. data/config/locales/en-CA.yml +138 -0
  111. data/config/locales/en-GB.yml +138 -0
  112. data/config/locales/en.yml +161 -0
  113. data/config/locales/eo.yml +144 -0
  114. data/config/locales/es-MX.yml +95 -0
  115. data/config/locales/es.yml +161 -0
  116. data/config/locales/fa.yml +118 -0
  117. data/config/locales/fi.yml +111 -0
  118. data/config/locales/fr.yml +140 -0
  119. data/config/locales/he.yml +141 -0
  120. data/config/locales/hr.yml +122 -0
  121. data/config/locales/hu.yml +97 -0
  122. data/config/locales/id.yml +134 -0
  123. data/config/locales/it.yml +143 -0
  124. data/config/locales/ja.yml +140 -0
  125. data/config/locales/ko.yml +119 -0
  126. data/config/locales/lt.yml +141 -0
  127. data/config/locales/lv.yml +91 -0
  128. data/config/locales/nb.yml +129 -0
  129. data/config/locales/nl.yml +143 -0
  130. data/config/locales/pl.yml +167 -0
  131. data/config/locales/pt-BR.yml +142 -0
  132. data/config/locales/pt-PT.yml +91 -0
  133. data/config/locales/ro.yml +95 -0
  134. data/config/locales/ru.yml +140 -0
  135. data/config/locales/sk.yml +108 -0
  136. data/config/locales/sv-SE.yml +134 -0
  137. data/config/locales/tr.yml +143 -0
  138. data/config/locales/uk.yml +135 -0
  139. data/config/locales/vi.yml +133 -0
  140. data/config/locales/zh-CN.yml +142 -0
  141. data/config/locales/zh-TW.yml +134 -0
  142. data/config/mdl_style.rb +9 -0
  143. data/cucumber.yml +6 -0
  144. data/docs/0-installation.md +118 -0
  145. data/docs/1-general-configuration.md +204 -0
  146. data/docs/10-custom-pages.md +150 -0
  147. data/docs/11-decorators.md +59 -0
  148. data/docs/12-arbre-components.md +203 -0
  149. data/docs/13-authorization-adapter.md +285 -0
  150. data/docs/14-gotchas.md +138 -0
  151. data/docs/2-resource-customization.md +466 -0
  152. data/docs/3-index-pages.md +328 -0
  153. data/docs/3-index-pages/custom-index.md +35 -0
  154. data/docs/3-index-pages/index-as-block.md +19 -0
  155. data/docs/3-index-pages/index-as-blog.md +69 -0
  156. data/docs/3-index-pages/index-as-grid.md +27 -0
  157. data/docs/3-index-pages/index-as-table.md +225 -0
  158. data/docs/4-csv-format.md +74 -0
  159. data/docs/5-forms.md +231 -0
  160. data/docs/6-show-pages.md +81 -0
  161. data/docs/7-sidebars.md +75 -0
  162. data/docs/8-custom-actions.md +177 -0
  163. data/docs/9-batch-actions.md +237 -0
  164. data/docs/CNAME +1 -0
  165. data/docs/Gemfile +2 -0
  166. data/docs/README.md +24 -0
  167. data/docs/_config.yml +2 -0
  168. data/docs/_includes/footer.html +8 -0
  169. data/docs/_includes/google-analytics.html +16 -0
  170. data/docs/_includes/head.html +7 -0
  171. data/docs/_includes/toc.html +98 -0
  172. data/docs/_includes/top-menu.html +9 -0
  173. data/docs/_layouts/default.html +21 -0
  174. data/docs/documentation.md +60 -0
  175. data/docs/images/activeadmin.png +0 -0
  176. data/docs/images/code-header.png +0 -0
  177. data/docs/images/divider.png +0 -0
  178. data/docs/images/features.png +0 -0
  179. data/docs/index.html +125 -0
  180. data/docs/stylesheets/main.css +1152 -0
  181. data/features/action_item.feature +73 -0
  182. data/features/authorization.feature +64 -0
  183. data/features/authorization_cancan.feature +52 -0
  184. data/features/authorization_pundit.feature +37 -0
  185. data/features/belongs_to.feature +124 -0
  186. data/features/breadcrumb.feature +76 -0
  187. data/features/comments/commenting.feature +178 -0
  188. data/features/comments/viewing_index.feature +19 -0
  189. data/features/create_another.feature +55 -0
  190. data/features/dashboard.feature +16 -0
  191. data/features/decorators.feature +43 -0
  192. data/features/development_reloading.feature +28 -0
  193. data/features/edit_page.feature +116 -0
  194. data/features/favicon.feature +20 -0
  195. data/features/first_boot.feature +16 -0
  196. data/features/footer.feature +29 -0
  197. data/features/global_navigation.feature +29 -0
  198. data/features/i18n.feature +55 -0
  199. data/features/index/batch_actions.feature +218 -0
  200. data/features/index/filters.feature +251 -0
  201. data/features/index/format_as_csv.feature +227 -0
  202. data/features/index/formats.feature +88 -0
  203. data/features/index/index_as_block.feature +15 -0
  204. data/features/index/index_as_blog.feature +69 -0
  205. data/features/index/index_as_grid.feature +45 -0
  206. data/features/index/index_as_table.feature +291 -0
  207. data/features/index/index_blank_slate.feature +83 -0
  208. data/features/index/index_parameters.feature +75 -0
  209. data/features/index/index_scope_to.feature +56 -0
  210. data/features/index/index_scopes.feature +325 -0
  211. data/features/index/page_title.feature +41 -0
  212. data/features/index/pagination.feature +63 -0
  213. data/features/index/switch_index_view.feature +73 -0
  214. data/features/menu.feature +85 -0
  215. data/features/meta_tags.feature +21 -0
  216. data/features/new_page.feature +136 -0
  217. data/features/registering_assets.feature +38 -0
  218. data/features/registering_pages.feature +237 -0
  219. data/features/registering_resources.feature +33 -0
  220. data/features/renamed_resource.feature +30 -0
  221. data/features/root_to.feature +18 -0
  222. data/features/show/attributes_table_title.feature +54 -0
  223. data/features/show/columns.feature +40 -0
  224. data/features/show/default_content.feature +44 -0
  225. data/features/show/page_title.feature +58 -0
  226. data/features/show/tabs.feature +33 -0
  227. data/features/sidebar_sections.feature +210 -0
  228. data/features/site_title.feature +47 -0
  229. data/features/specifying_actions.feature +118 -0
  230. data/features/step_definitions/action_item_steps.rb +7 -0
  231. data/features/step_definitions/action_link_steps.rb +19 -0
  232. data/features/step_definitions/additional_web_steps.rb +81 -0
  233. data/features/step_definitions/asset_steps.rb +15 -0
  234. data/features/step_definitions/attribute_steps.rb +18 -0
  235. data/features/step_definitions/attributes_table_title_steps.rb +11 -0
  236. data/features/step_definitions/batch_action_steps.rb +81 -0
  237. data/features/step_definitions/blog_steps.rb +3 -0
  238. data/features/step_definitions/breadcrumb_steps.rb +13 -0
  239. data/features/step_definitions/column_steps.rb +8 -0
  240. data/features/step_definitions/comment_steps.rb +32 -0
  241. data/features/step_definitions/configuration_steps.rb +100 -0
  242. data/features/step_definitions/dashboard_steps.rb +15 -0
  243. data/features/step_definitions/factory_steps.rb +35 -0
  244. data/features/step_definitions/filter_steps.rb +57 -0
  245. data/features/step_definitions/flash_steps.rb +11 -0
  246. data/features/step_definitions/footer_steps.rb +21 -0
  247. data/features/step_definitions/format_steps.rb +58 -0
  248. data/features/step_definitions/i18n_steps.rb +11 -0
  249. data/features/step_definitions/index_scope_steps.rb +42 -0
  250. data/features/step_definitions/index_views_steps.rb +3 -0
  251. data/features/step_definitions/layout_steps.rb +3 -0
  252. data/features/step_definitions/member_link_steps.rb +7 -0
  253. data/features/step_definitions/menu_steps.rb +11 -0
  254. data/features/step_definitions/meta_tag_steps.rb +3 -0
  255. data/features/step_definitions/pagination_steps.rb +15 -0
  256. data/features/step_definitions/root_steps.rb +9 -0
  257. data/features/step_definitions/sidebar_steps.rb +11 -0
  258. data/features/step_definitions/site_title_steps.rb +31 -0
  259. data/features/step_definitions/tab_steps.rb +8 -0
  260. data/features/step_definitions/table_steps.rb +116 -0
  261. data/features/step_definitions/user_steps.rb +52 -0
  262. data/features/step_definitions/web_steps.rb +86 -0
  263. data/features/sti_resource.feature +65 -0
  264. data/features/strong_parameters.feature +69 -0
  265. data/features/support/env.rb +121 -0
  266. data/features/support/paths.rb +73 -0
  267. data/features/support/regular_env.rb +7 -0
  268. data/features/support/reload_env.rb +7 -0
  269. data/features/support/selectors.rb +45 -0
  270. data/features/users/logging_in.feature +32 -0
  271. data/features/users/logging_out.feature +29 -0
  272. data/features/users/resetting_password.feature +30 -0
  273. data/gemfiles/rails_42.gemfile +11 -0
  274. data/gemfiles/rails_50.gemfile +11 -0
  275. data/gemfiles/rails_51.gemfile +11 -0
  276. data/gemfiles/rails_52.gemfile +12 -0
  277. data/lib/active_admin.rb +128 -0
  278. data/lib/active_admin/abstract_view_factory.rb +47 -0
  279. data/lib/active_admin/application.rb +241 -0
  280. data/lib/active_admin/application_settings.rb +39 -0
  281. data/lib/active_admin/asset_registration.rb +37 -0
  282. data/lib/active_admin/authorization_adapter.rb +129 -0
  283. data/lib/active_admin/base_controller.rb +81 -0
  284. data/lib/active_admin/base_controller/authorization.rb +128 -0
  285. data/lib/active_admin/base_controller/menu.rb +34 -0
  286. data/lib/active_admin/batch_actions.rb +16 -0
  287. data/lib/active_admin/batch_actions/controller.rb +40 -0
  288. data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
  289. data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
  290. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
  291. data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
  292. data/lib/active_admin/callbacks.rb +88 -0
  293. data/lib/active_admin/cancan_adapter.rb +36 -0
  294. data/lib/active_admin/component.rb +5 -0
  295. data/lib/active_admin/controller_action.rb +12 -0
  296. data/lib/active_admin/csv_builder.rb +131 -0
  297. data/lib/active_admin/dependency.rb +172 -0
  298. data/lib/active_admin/deprecation.rb +10 -0
  299. data/lib/active_admin/devise.rb +80 -0
  300. data/lib/active_admin/dsl.rb +167 -0
  301. data/lib/active_admin/dynamic_setting.rb +38 -0
  302. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  303. data/lib/active_admin/engine.rb +21 -0
  304. data/lib/active_admin/error.rb +62 -0
  305. data/lib/active_admin/event.rb +24 -0
  306. data/lib/active_admin/filters.rb +11 -0
  307. data/lib/active_admin/filters/active.rb +29 -0
  308. data/lib/active_admin/filters/active_filter.rb +123 -0
  309. data/lib/active_admin/filters/active_sidebar.rb +50 -0
  310. data/lib/active_admin/filters/dsl.rb +21 -0
  311. data/lib/active_admin/filters/forms.rb +85 -0
  312. data/lib/active_admin/filters/formtastic_addons.rb +79 -0
  313. data/lib/active_admin/filters/resource_extension.rb +155 -0
  314. data/lib/active_admin/form_builder.rb +182 -0
  315. data/lib/active_admin/generators/boilerplate.rb +45 -0
  316. data/lib/active_admin/helpers/collection.rb +19 -0
  317. data/lib/active_admin/helpers/i18n.rb +7 -0
  318. data/lib/active_admin/helpers/optional_display.rb +38 -0
  319. data/lib/active_admin/helpers/output_safety_helper.rb +35 -0
  320. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  321. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  322. data/lib/active_admin/inputs.rb +21 -0
  323. data/lib/active_admin/inputs/datepicker_input.rb +27 -0
  324. data/lib/active_admin/inputs/filters/base.rb +44 -0
  325. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  326. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  327. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  328. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  329. data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
  330. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  331. data/lib/active_admin/inputs/filters/select_input.rb +58 -0
  332. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  333. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  334. data/lib/active_admin/localizers.rb +11 -0
  335. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  336. data/lib/active_admin/menu.rb +102 -0
  337. data/lib/active_admin/menu_collection.rb +91 -0
  338. data/lib/active_admin/menu_item.rb +69 -0
  339. data/lib/active_admin/namespace.rb +266 -0
  340. data/lib/active_admin/namespace_settings.rb +107 -0
  341. data/lib/active_admin/order_clause.rb +48 -0
  342. data/lib/active_admin/orm/active_record.rb +5 -0
  343. data/lib/active_admin/orm/active_record/comments.rb +101 -0
  344. data/lib/active_admin/orm/active_record/comments/comment.rb +31 -0
  345. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  346. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  347. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  348. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  349. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +95 -0
  350. data/lib/active_admin/orm/mongoid.rb +1 -0
  351. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  352. data/lib/active_admin/page.rb +111 -0
  353. data/lib/active_admin/page_controller.rb +29 -0
  354. data/lib/active_admin/page_dsl.rb +32 -0
  355. data/lib/active_admin/page_presenter.rb +32 -0
  356. data/lib/active_admin/pundit_adapter.rb +68 -0
  357. data/lib/active_admin/reloader.rb +25 -0
  358. data/lib/active_admin/resource.rb +206 -0
  359. data/lib/active_admin/resource/action_items.rb +120 -0
  360. data/lib/active_admin/resource/attributes.rb +44 -0
  361. data/lib/active_admin/resource/belongs_to.rb +48 -0
  362. data/lib/active_admin/resource/controllers.rb +19 -0
  363. data/lib/active_admin/resource/includes.rb +12 -0
  364. data/lib/active_admin/resource/menu.rb +67 -0
  365. data/lib/active_admin/resource/naming.rb +62 -0
  366. data/lib/active_admin/resource/ordering.rb +11 -0
  367. data/lib/active_admin/resource/page_presenters.rb +82 -0
  368. data/lib/active_admin/resource/pagination.rb +23 -0
  369. data/lib/active_admin/resource/routes.rb +134 -0
  370. data/lib/active_admin/resource/scope_to.rb +74 -0
  371. data/lib/active_admin/resource/scopes.rb +52 -0
  372. data/lib/active_admin/resource/sidebars.rb +28 -0
  373. data/lib/active_admin/resource_collection.rb +72 -0
  374. data/lib/active_admin/resource_controller.rb +64 -0
  375. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  376. data/lib/active_admin/resource_controller/data_access.rb +322 -0
  377. data/lib/active_admin/resource_controller/decorators.rb +102 -0
  378. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  379. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  380. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  381. data/lib/active_admin/resource_controller/streaming.rb +43 -0
  382. data/lib/active_admin/resource_dsl.rb +222 -0
  383. data/lib/active_admin/router.rb +113 -0
  384. data/lib/active_admin/scope.rb +60 -0
  385. data/lib/active_admin/settings_node.rb +19 -0
  386. data/lib/active_admin/sidebar_section.rb +37 -0
  387. data/lib/active_admin/version.rb +3 -0
  388. data/lib/active_admin/view_factory.rb +27 -0
  389. data/lib/active_admin/view_helpers.rb +20 -0
  390. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  391. data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
  392. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +33 -0
  393. data/lib/active_admin/view_helpers/display_helper.rb +95 -0
  394. data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
  395. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  396. data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
  397. data/lib/active_admin/view_helpers/form_helper.rb +20 -0
  398. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
  399. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  400. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  401. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  402. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  403. data/lib/active_admin/views.rb +8 -0
  404. data/lib/active_admin/views/action_items.rb +17 -0
  405. data/lib/active_admin/views/components/active_admin_form.rb +149 -0
  406. data/lib/active_admin/views/components/attributes_table.rb +94 -0
  407. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  408. data/lib/active_admin/views/components/columns.rb +161 -0
  409. data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
  410. data/lib/active_admin/views/components/index_list.rb +69 -0
  411. data/lib/active_admin/views/components/menu.rb +32 -0
  412. data/lib/active_admin/views/components/menu_item.rb +58 -0
  413. data/lib/active_admin/views/components/paginated_collection.rb +159 -0
  414. data/lib/active_admin/views/components/panel.rb +38 -0
  415. data/lib/active_admin/views/components/scopes.rb +72 -0
  416. data/lib/active_admin/views/components/sidebar.rb +13 -0
  417. data/lib/active_admin/views/components/sidebar_section.rb +37 -0
  418. data/lib/active_admin/views/components/site_title.rb +54 -0
  419. data/lib/active_admin/views/components/status_tag.rb +88 -0
  420. data/lib/active_admin/views/components/table_for.rb +209 -0
  421. data/lib/active_admin/views/components/tabs.rb +31 -0
  422. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  423. data/lib/active_admin/views/footer.rb +30 -0
  424. data/lib/active_admin/views/header.rb +19 -0
  425. data/lib/active_admin/views/index_as_block.rb +36 -0
  426. data/lib/active_admin/views/index_as_blog.rb +155 -0
  427. data/lib/active_admin/views/index_as_grid.rb +80 -0
  428. data/lib/active_admin/views/index_as_table.rb +389 -0
  429. data/lib/active_admin/views/pages/base.rb +123 -0
  430. data/lib/active_admin/views/pages/form.rb +64 -0
  431. data/lib/active_admin/views/pages/index.rb +163 -0
  432. data/lib/active_admin/views/pages/layout.rb +26 -0
  433. data/lib/active_admin/views/pages/page.rb +30 -0
  434. data/lib/active_admin/views/pages/show.rb +65 -0
  435. data/lib/active_admin/views/tabbed_navigation.rb +11 -0
  436. data/lib/active_admin/views/title_bar.rb +55 -0
  437. data/lib/activeadmin-rb.rb +1 -0
  438. data/lib/bug_report_templates/active_admin_master.rb +112 -0
  439. data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
  440. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  441. data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  442. data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
  443. data/lib/generators/active_admin/install/install_generator.rb +45 -0
  444. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +293 -0
  445. data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
  446. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  447. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +30 -0
  448. data/lib/generators/active_admin/page/USAGE +8 -0
  449. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  450. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  451. data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
  452. data/lib/generators/active_admin/resource/templates/admin.rb.erb +43 -0
  453. data/lib/ransack_ext.rb +20 -0
  454. data/spec/bug_report_templates_spec.rb +26 -0
  455. data/spec/changelog_spec.rb +15 -0
  456. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  457. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -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/flashes.html +2 -0
  461. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  462. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  463. data/spec/javascripts/support/jasmine.yml +74 -0
  464. data/spec/javascripts/support/jasmine_runner.rb +19 -0
  465. data/spec/rails_helper.rb +60 -0
  466. data/spec/requests/default_namespace_spec.rb +81 -0
  467. data/spec/requests/memory_spec.rb +25 -0
  468. data/spec/requests/stylesheets_spec.rb +18 -0
  469. data/spec/spec_helper.rb +1 -0
  470. data/spec/support/active_admin_integration_spec_helper.rb +73 -0
  471. data/spec/support/active_admin_request_helpers.rb +39 -0
  472. data/spec/support/rails_template.rb +156 -0
  473. data/spec/support/rails_template_with_data.rb +327 -0
  474. data/spec/support/templates/admin/stores.rb +7 -0
  475. data/spec/support/templates/en.yml +8 -0
  476. data/spec/support/templates/manifest.js +3 -0
  477. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  478. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  479. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  480. data/spec/support/templates/policies/application_policy.rb +44 -0
  481. data/spec/support/templates/policies/category_policy.rb +7 -0
  482. data/spec/support/templates/policies/post_policy.rb +15 -0
  483. data/spec/support/templates/policies/store_policy.rb +11 -0
  484. data/spec/support/templates/policies/user_policy.rb +11 -0
  485. data/spec/support/templates/post_decorator.rb +24 -0
  486. data/spec/unit/abstract_view_factory_spec.rb +78 -0
  487. data/spec/unit/action_builder_spec.rb +158 -0
  488. data/spec/unit/active_admin_spec.rb +11 -0
  489. data/spec/unit/application_spec.rb +180 -0
  490. data/spec/unit/asset_registration_spec.rb +81 -0
  491. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  492. data/spec/unit/authorization/controller_authorization_spec.rb +43 -0
  493. data/spec/unit/authorization/index_overriding_spec.rb +23 -0
  494. data/spec/unit/auto_link_spec.rb +93 -0
  495. data/spec/unit/batch_actions/resource_spec.rb +84 -0
  496. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  497. data/spec/unit/belongs_to_spec.rb +76 -0
  498. data/spec/unit/cancan_adapter_spec.rb +43 -0
  499. data/spec/unit/comments_spec.rb +189 -0
  500. data/spec/unit/component_spec.rb +18 -0
  501. data/spec/unit/config_shared_examples.rb +59 -0
  502. data/spec/unit/controller_filters_spec.rb +41 -0
  503. data/spec/unit/csv_builder_spec.rb +313 -0
  504. data/spec/unit/dependency_spec.rb +135 -0
  505. data/spec/unit/devise_spec.rb +110 -0
  506. data/spec/unit/dsl_spec.rb +120 -0
  507. data/spec/unit/dynamic_settings_spec.rb +28 -0
  508. data/spec/unit/filters/active_filter_spec.rb +218 -0
  509. data/spec/unit/filters/active_spec.rb +24 -0
  510. data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
  511. data/spec/unit/filters/resource_spec.rb +128 -0
  512. data/spec/unit/form_builder_spec.rb +1012 -0
  513. data/spec/unit/generators/install_spec.rb +31 -0
  514. data/spec/unit/helpers/collection_spec.rb +68 -0
  515. data/spec/unit/helpers/output_safety_helper_spec.rb +79 -0
  516. data/spec/unit/helpers/scope_chain_spec.rb +35 -0
  517. data/spec/unit/i18n_spec.rb +29 -0
  518. data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
  519. data/spec/unit/menu_collection_spec.rb +62 -0
  520. data/spec/unit/menu_item_spec.rb +82 -0
  521. data/spec/unit/menu_spec.rb +60 -0
  522. data/spec/unit/namespace/authorization_spec.rb +27 -0
  523. data/spec/unit/namespace/register_page_spec.rb +99 -0
  524. data/spec/unit/namespace/register_resource_spec.rb +162 -0
  525. data/spec/unit/namespace_spec.rb +126 -0
  526. data/spec/unit/order_clause_spec.rb +81 -0
  527. data/spec/unit/page_controller_spec.rb +5 -0
  528. data/spec/unit/page_spec.rb +128 -0
  529. data/spec/unit/pretty_format_spec.rb +82 -0
  530. data/spec/unit/pundit_adapter_spec.rb +98 -0
  531. data/spec/unit/resource/action_items_spec.rb +83 -0
  532. data/spec/unit/resource/attributes_spec.rb +49 -0
  533. data/spec/unit/resource/includes_spec.rb +21 -0
  534. data/spec/unit/resource/menu_spec.rb +18 -0
  535. data/spec/unit/resource/naming_spec.rb +120 -0
  536. data/spec/unit/resource/ordering_spec.rb +35 -0
  537. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  538. data/spec/unit/resource/pagination_spec.rb +38 -0
  539. data/spec/unit/resource/routes_spec.rb +125 -0
  540. data/spec/unit/resource/scopes_spec.rb +50 -0
  541. data/spec/unit/resource/sidebars_spec.rb +43 -0
  542. data/spec/unit/resource_collection_spec.rb +175 -0
  543. data/spec/unit/resource_controller/data_access_spec.rb +234 -0
  544. data/spec/unit/resource_controller/decorators_spec.rb +94 -0
  545. data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
  546. data/spec/unit/resource_controller_spec.rb +273 -0
  547. data/spec/unit/resource_registration_spec.rb +61 -0
  548. data/spec/unit/resource_spec.rb +320 -0
  549. data/spec/unit/routing_spec.rb +211 -0
  550. data/spec/unit/scope_spec.rb +225 -0
  551. data/spec/unit/settings_node_spec.rb +26 -0
  552. data/spec/unit/view_factory_spec.rb +19 -0
  553. data/spec/unit/view_helpers/breadcrumbs_spec.rb +253 -0
  554. data/spec/unit/view_helpers/display_helper_spec.rb +203 -0
  555. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  556. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  557. data/spec/unit/view_helpers/flash_helper_spec.rb +24 -0
  558. data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
  559. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
  560. data/spec/unit/views/components/attributes_table_spec.rb +271 -0
  561. data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
  562. data/spec/unit/views/components/blank_slate_spec.rb +27 -0
  563. data/spec/unit/views/components/columns_spec.rb +187 -0
  564. data/spec/unit/views/components/index_list_spec.rb +49 -0
  565. data/spec/unit/views/components/index_table_for_spec.rb +127 -0
  566. data/spec/unit/views/components/menu_item_spec.rb +29 -0
  567. data/spec/unit/views/components/menu_spec.rb +168 -0
  568. data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
  569. data/spec/unit/views/components/panel_spec.rb +58 -0
  570. data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
  571. data/spec/unit/views/components/sidebar_spec.rb +24 -0
  572. data/spec/unit/views/components/site_title_spec.rb +82 -0
  573. data/spec/unit/views/components/status_tag_spec.rb +265 -0
  574. data/spec/unit/views/components/table_for_spec.rb +441 -0
  575. data/spec/unit/views/components/tabs_spec.rb +71 -0
  576. data/spec/unit/views/components/unsupported_browser_spec.rb +39 -0
  577. data/spec/unit/views/index_as_blog_spec.rb +76 -0
  578. data/spec/unit/views/pages/base_spec.rb +14 -0
  579. data/spec/unit/views/pages/form_spec.rb +54 -0
  580. data/spec/unit/views/pages/index_spec.rb +60 -0
  581. data/spec/unit/views/pages/layout_spec.rb +59 -0
  582. data/spec/unit/views/pages/show_spec.rb +32 -0
  583. data/tasks/docs.rake +64 -0
  584. data/tasks/lint.rake +21 -0
  585. data/tasks/local.rake +25 -0
  586. data/tasks/parallel_tests.rake +66 -0
  587. data/tasks/test.rake +24 -0
  588. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  589. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  590. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  591. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  592. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  593. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  594. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  595. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  596. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  597. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  598. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  599. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  600. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  601. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  602. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  603. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  604. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +300 -0
  605. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  606. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  607. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  608. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  609. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  610. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  611. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  612. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  613. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  614. metadata +1037 -0
@@ -0,0 +1,31 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class Tabs < ActiveAdmin::Component
4
+ builder_method :tabs
5
+
6
+ def tab(title, options = {}, &block)
7
+ title = title.to_s.titleize if title.is_a? Symbol
8
+ @menu << build_menu_item(title, options, &block)
9
+ @tabs_content << build_content_item(title, options, &block)
10
+ end
11
+
12
+ def build(&block)
13
+ @menu = ul(class: 'nav nav-tabs', role: "tablist")
14
+ @tabs_content = div(class: 'tab-content')
15
+ end
16
+
17
+ def build_menu_item(title, options, &block)
18
+ fragment = options.fetch(:id, title.parameterize)
19
+ html_options = options.fetch(:html_options, {})
20
+ li html_options do
21
+ link_to title, "##{fragment}"
22
+ end
23
+ end
24
+
25
+ def build_content_item(title, options, &block)
26
+ options = options.reverse_merge(id: title.parameterize)
27
+ div(options, &block)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class UnsupportedBrowser < Component
4
+ def build
5
+ h1 I18n.t("active_admin.unsupported_browser.headline").html_safe
6
+ para I18n.t("active_admin.unsupported_browser.recommendation").html_safe
7
+ para I18n.t("active_admin.unsupported_browser.turn_off_compatibility_view").html_safe
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class Footer < Component
4
+
5
+ def build(namespace)
6
+ super id: "footer"
7
+ @namespace = namespace
8
+
9
+ if footer_text.present?
10
+ para footer_text
11
+ else
12
+ para powered_by_message
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def footer_text
19
+ @footer_text ||= @namespace.footer(self)
20
+ end
21
+
22
+ def powered_by_message
23
+ I18n.t('active_admin.powered_by',
24
+ active_admin: link_to("Active Admin", "http://www.activeadmin.info"),
25
+ version: ActiveAdmin::VERSION).html_safe
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class Header < Component
4
+
5
+ def build(namespace, menu)
6
+ super(id: "header")
7
+
8
+ @namespace = namespace
9
+ @menu = menu
10
+ @utility_menu = @namespace.fetch_menu(:utility_navigation)
11
+
12
+ site_title @namespace
13
+ global_navigation @menu, class: 'header-item tabs'
14
+ utility_navigation @utility_menu, id: "utility_nav", class: 'header-item tabs'
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,36 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # # Index as a Block
5
+ #
6
+ # If you want to fully customize the display of your resources on the index
7
+ # screen, Index as a Block allows you to render a block of content for each
8
+ # resource.
9
+ #
10
+ # ```ruby
11
+ # index as: :block do |product|
12
+ # div for: product do
13
+ # resource_selection_cell product
14
+ # h2 auto_link product.title
15
+ # div simple_format product.description
16
+ # end
17
+ # end
18
+ # ```
19
+ #
20
+ class IndexAsBlock < ActiveAdmin::Component
21
+
22
+ def build(page_presenter, collection)
23
+ add_class "index"
24
+ resource_selection_toggle_panel if active_admin_config.batch_actions.any?
25
+ collection.each do |obj|
26
+ instance_exec(obj, &page_presenter.block)
27
+ end
28
+ end
29
+
30
+ def self.index_name
31
+ "block"
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,155 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # # Index as Blog
5
+ #
6
+ # Render your index page as a set of posts. The post has two main options:
7
+ # title and body.
8
+ #
9
+ # ```ruby
10
+ # index as: :blog do
11
+ # title :my_title # Calls #my_title on each resource
12
+ # body :my_body # Calls #my_body on each resource
13
+ # end
14
+ # ```
15
+ #
16
+ # ## Post Title
17
+ #
18
+ # The title is the content that will be rendered within a link to the
19
+ # resource. There are two main ways to set the content for the title
20
+ #
21
+ # First, you can pass in a method to be called on your resource. For example:
22
+ #
23
+ # ```ruby
24
+ # index as: :blog do
25
+ # title :a_method_to_call
26
+ # end
27
+ # ```
28
+ #
29
+ # Second, you can pass a block to the tile option which will then be
30
+ # used as the contents of the title. The resource being rendered
31
+ # is passed in to the block. For Example:
32
+ #
33
+ # ```ruby
34
+ # index as: :blog do
35
+ # title do |post|
36
+ # span post.title, class: 'title'
37
+ # span post.created_at, class: 'created_at'
38
+ # end
39
+ # end
40
+ # ```
41
+ #
42
+ # ## Post Body
43
+ #
44
+ # The body is rendered underneath the title of each post. The same two
45
+ # style of options work as the Post Title above.
46
+ #
47
+ # Call a method on the resource as the body:
48
+ #
49
+ # ```ruby
50
+ # index as: :blog do
51
+ # title :my_title
52
+ # body :my_body
53
+ # end
54
+ # ```
55
+ #
56
+ # Or, render a block as the body:
57
+ #
58
+ # ```ruby
59
+ # index as: :blog do
60
+ # title :my_title
61
+ # body do |post|
62
+ # div truncate post.title
63
+ # div class: 'meta' do
64
+ # span "Post in #{post.categories.join(', ')}"
65
+ # end
66
+ # end
67
+ # end
68
+ # ```
69
+ #
70
+ class IndexAsBlog < ActiveAdmin::Component
71
+
72
+ def build(page_presenter, collection)
73
+ @page_presenter = page_presenter
74
+ @collection = collection
75
+
76
+ # Call the block passed in. This will set the
77
+ # title and body methods
78
+ instance_exec &page_presenter.block if page_presenter.block
79
+
80
+ add_class "index"
81
+ build_posts
82
+ end
83
+
84
+ # Setter method for the configuration of the title
85
+ def title(method = nil, &block)
86
+ if block_given? || method
87
+ @title = block_given? ? block : method
88
+ end
89
+ @title
90
+ end
91
+
92
+ # Setter method for the configuration of the body
93
+ #
94
+ def body(method = nil, &block)
95
+ if block_given? || method
96
+ @body = block_given? ? block : method
97
+ end
98
+ @body
99
+ end
100
+
101
+ def self.index_name
102
+ "blog"
103
+ end
104
+
105
+ private
106
+
107
+ def build_posts
108
+ resource_selection_toggle_panel if active_admin_config.batch_actions.any?
109
+ @collection.each do |post|
110
+ build_post(post)
111
+ end
112
+ end
113
+
114
+ def build_post(post)
115
+ div for: post do
116
+ resource_selection_cell(post) if active_admin_config.batch_actions.any?
117
+ build_title(post)
118
+ build_body(post)
119
+ end
120
+ end
121
+
122
+ def build_title(post)
123
+ if @title
124
+ h3 do
125
+ a(href: resource_path(post)) do
126
+ render_method_on_post_or_call_proc post, @title
127
+ end
128
+ end
129
+ else
130
+ h3 do
131
+ auto_link(post)
132
+ end
133
+ end
134
+ end
135
+
136
+ def build_body(post)
137
+ if @body
138
+ div class: 'content' do
139
+ render_method_on_post_or_call_proc post, @body
140
+ end
141
+ end
142
+ end
143
+
144
+ def render_method_on_post_or_call_proc(post, proc)
145
+ case proc
146
+ when String, Symbol
147
+ post.public_send proc
148
+ else
149
+ instance_exec post, &proc
150
+ end
151
+ end
152
+
153
+ end # Posts
154
+ end
155
+ end
@@ -0,0 +1,80 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # # Index as a Grid
5
+ #
6
+ # Sometimes you want to display the index screen for a set of resources as a grid
7
+ # (possibly a grid of thumbnail images). To do so, use the :grid option for the
8
+ # index block.
9
+ #
10
+ # ```ruby
11
+ # index as: :grid do |product|
12
+ # link_to image_tag(product.image_path), admin_product_path(product)
13
+ # end
14
+ # ```
15
+ #
16
+ # The block is rendered within a cell in the grid once for each resource in the
17
+ # collection. The resource is passed into the block for you to use in the view.
18
+ #
19
+ # You can customize the number of columns that are rendered using the columns
20
+ # option:
21
+ #
22
+ # ```ruby
23
+ # index as: :grid, columns: 5 do |product|
24
+ # link_to image_tag(product.image_path), admin_product_path(product)
25
+ # end
26
+ # ```
27
+ #
28
+ class IndexAsGrid < ActiveAdmin::Component
29
+
30
+ def build(page_presenter, collection)
31
+ @page_presenter = page_presenter
32
+ @collection = collection.to_a
33
+ add_class "index"
34
+ build_table
35
+ end
36
+
37
+ def number_of_columns
38
+ @page_presenter[:columns] || default_number_of_columns
39
+ end
40
+
41
+ def self.index_name
42
+ "grid"
43
+ end
44
+
45
+ protected
46
+
47
+ def build_table
48
+ resource_selection_toggle_panel if active_admin_config.batch_actions.any?
49
+ table class: "index_grid" do
50
+ @collection.in_groups_of(number_of_columns).each do |group|
51
+ build_row(group)
52
+ end
53
+ end
54
+ end
55
+
56
+ def build_row(group)
57
+ tr do
58
+ group.each do |item|
59
+ item ? build_item(item) : build_empty_cell
60
+ end
61
+ end
62
+ end
63
+
64
+ def build_item(item)
65
+ td for: item do
66
+ instance_exec(item, &@page_presenter.block)
67
+ end
68
+ end
69
+
70
+ def build_empty_cell
71
+ td '&nbsp;'.html_safe
72
+ end
73
+
74
+ def default_number_of_columns
75
+ 3
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,389 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # # Index as a Table
5
+ #
6
+ # By default, the index page is a table with each of the models content columns and links to
7
+ # show, edit and delete the object. There are many ways to customize what gets
8
+ # displayed.
9
+ #
10
+ # ## Defining Columns
11
+ #
12
+ # To display an attribute or a method on a resource, simply pass a symbol into the
13
+ # column method:
14
+ #
15
+ # ```ruby
16
+ # index do
17
+ # selectable_column
18
+ # column :title
19
+ # end
20
+ # ```
21
+ #
22
+ # For association columns we make an educated guess on what to display by
23
+ # calling the following methods in the following order:
24
+ #
25
+ # ```ruby
26
+ # :display_name, :full_name, :name, :username, :login, :title, :email, :to_s
27
+ # ```
28
+ #
29
+ # This can be customized in `config/initializers/active_admin.rb`.
30
+ #
31
+ # If the default title does not work for you, pass it as the first argument:
32
+ #
33
+ # ```ruby
34
+ # index do
35
+ # selectable_column
36
+ # column "My Custom Title", :title
37
+ # end
38
+ # ```
39
+ #
40
+ # Sometimes that just isn't enough and you need to write some view-specific code.
41
+ # For example, say we wanted a "Title" column that links to the posts admin screen.
42
+ #
43
+ # `column` accepts a block that will be rendered for each of the objects in the collection.
44
+ # The block is called once for each resource, which is passed as an argument to the block.
45
+ #
46
+ # ```ruby
47
+ # index do
48
+ # selectable_column
49
+ # column "Title" do |post|
50
+ # link_to post.title, admin_post_path(post)
51
+ # end
52
+ # end
53
+ # ```
54
+ #
55
+ # ## Defining Actions
56
+ #
57
+ # To setup links to View, Edit and Delete a resource, use the `actions` method:
58
+ #
59
+ # ```ruby
60
+ # index do
61
+ # selectable_column
62
+ # column :title
63
+ # actions
64
+ # end
65
+ # ```
66
+ #
67
+ # You can also append custom links to the default links:
68
+ #
69
+ # ```ruby
70
+ # index do
71
+ # selectable_column
72
+ # column :title
73
+ # actions do |post|
74
+ # item "Preview", admin_preview_post_path(post), class: "member_link"
75
+ # end
76
+ # end
77
+ # ```
78
+ #
79
+ # Or forego the default links entirely:
80
+ #
81
+ # ```ruby
82
+ # index do
83
+ # column :title
84
+ # actions defaults: false do |post|
85
+ # item "View", admin_post_path(post)
86
+ # end
87
+ # end
88
+ # ```
89
+ #
90
+ # Or append custom action with custom html via arbre:
91
+ #
92
+ # ```ruby
93
+ # index do
94
+ # column :title
95
+ # actions do |post|
96
+ # a "View", href: admin_post_path(post)
97
+ # end
98
+ # end
99
+ # ```
100
+ #
101
+ # In case you prefer to list actions links in a dropdown menu:
102
+ #
103
+ # ```ruby
104
+ # index do
105
+ # selectable_column
106
+ # column :title
107
+ # actions dropdown: true do |post|
108
+ # item "Preview", admin_preview_post_path(post)
109
+ # end
110
+ # end
111
+ # ```
112
+ #
113
+ # In addition, you can insert the position of the row in the greater collection by using the index_column special command:
114
+ #
115
+ # ```ruby
116
+ # index do
117
+ # selectable_column
118
+ # index_column
119
+ # column :title
120
+ # end
121
+ # ```
122
+ #
123
+ # index_column take an optional offset parameter to allow a developer to set the starting number for the index (default is 1).
124
+ #
125
+ # ## Sorting
126
+ #
127
+ # When a column is generated from an Active Record attribute, the table is
128
+ # sortable by default. If you are creating a custom column, you may need to give
129
+ # Active Admin a hint for how to sort the table.
130
+ #
131
+ # You can pass the key specifying the attribute which gets used to sort objects using Active Record.
132
+ # By default, this is the column on the resource's table that the attribute corresponds to.
133
+ # Otherwise, any attribute that the resource collection responds to can be used.
134
+ #
135
+ # ```ruby
136
+ # index do
137
+ # column :title, sortable: :title do |post|
138
+ # link_to post.title, admin_post_path(post)
139
+ # end
140
+ # end
141
+ # ```
142
+ #
143
+ # You can turn off sorting on any column by passing false:
144
+ #
145
+ # ```ruby
146
+ # index do
147
+ # column :title, sortable: false
148
+ # end
149
+ # ```
150
+ #
151
+ # It's also possible to sort by PostgreSQL's hstore column key. You should set `sortable`
152
+ # option to a `column->'key'` value:
153
+ #
154
+ # ```ruby
155
+ # index do
156
+ # column :keywords, sortable: "meta->'keywords'"
157
+ # end
158
+ # ```
159
+ #
160
+ # ## Custom sorting
161
+ #
162
+ # It is also possible to use database specific expressions and options for sorting by column
163
+ #
164
+ # ```ruby
165
+ # order_by(:title) do |order_clause|
166
+ # if order_clause.order == 'desc'
167
+ # [order_clause.to_sql, 'NULLS LAST'].join(' ')
168
+ # else
169
+ # [order_clause.to_sql, 'NULLS FIRST'].join(' ')
170
+ # end
171
+ # end
172
+ #
173
+ # index do
174
+ # column :title
175
+ # end
176
+ # ```
177
+ #
178
+ # ## Associated Sorting
179
+ #
180
+ # You're normally able to sort columns alphabetically, but by default you
181
+ # can't sort by associated objects. Though with a few simple changes, you can.
182
+ #
183
+ # Assuming you're on the Books index page, and Book has_one Publisher:
184
+ #
185
+ # ```ruby
186
+ # controller do
187
+ # def scoped_collection
188
+ # super.includes :publisher # prevents N+1 queries to your database
189
+ # end
190
+ # end
191
+ # ```
192
+ #
193
+ # Then it's simple to sort by any Publisher attribute from within the index table:
194
+ #
195
+ # ```ruby
196
+ # index do
197
+ # column :publisher, sortable: 'publishers.name'
198
+ # end
199
+ # ```
200
+ #
201
+ # ## Showing and Hiding Columns
202
+ #
203
+ # The entire index block is rendered within the context of the view, so you can
204
+ # easily do things that show or hide columns based on the current context.
205
+ #
206
+ # For example, if you were using CanCan:
207
+ #
208
+ # ```ruby
209
+ # index do
210
+ # column :title, sortable: false
211
+ # column :secret_data if can? :manage, Post
212
+ # end
213
+ # ```
214
+ #
215
+ # ## Custom row class
216
+ #
217
+ # In order to add special class to table rows pass the proc object as a `:row_class` option
218
+ # of the `index` method.
219
+ #
220
+ # ```ruby
221
+ # index row_class: ->elem { 'active' if elem.active? } do
222
+ # # columns
223
+ # end
224
+ # ```
225
+ #
226
+ class IndexAsTable < ActiveAdmin::Component
227
+
228
+ def build(page_presenter, collection)
229
+ table_options = {
230
+ id: "index_table_#{active_admin_config.resource_name.plural}",
231
+ sortable: true,
232
+ class: "index_table index",
233
+ i18n: active_admin_config.resource_class,
234
+ paginator: page_presenter[:paginator] != false,
235
+ row_class: page_presenter[:row_class]
236
+ }
237
+
238
+ table_for collection, table_options do |t|
239
+ table_config_block = page_presenter.block || default_table
240
+ instance_exec(t, &table_config_block)
241
+ end
242
+ end
243
+
244
+ def table_for(*args, &block)
245
+ insert_tag IndexTableFor, *args, &block
246
+ end
247
+
248
+ def default_table
249
+ proc do
250
+ selectable_column
251
+ id_column if resource_class.primary_key
252
+ active_admin_config.resource_columns.each do |attribute|
253
+ column attribute
254
+ end
255
+ actions
256
+ end
257
+ end
258
+
259
+ def self.index_name
260
+ "table"
261
+ end
262
+
263
+ #
264
+ # Extend the default ActiveAdmin::Views::TableFor with some
265
+ # methods for quickly displaying items on the index page
266
+ #
267
+ class IndexTableFor < ::ActiveAdmin::Views::TableFor
268
+
269
+ # Display a column for checkbox
270
+ def selectable_column
271
+ return unless active_admin_config.batch_actions.any?
272
+ column resource_selection_toggle_cell, class: 'col-selectable', sortable: false do |resource|
273
+ resource_selection_cell resource
274
+ end
275
+ end
276
+
277
+ def index_column(start_value = 1)
278
+ column '#', class: 'col-index', sortable: false do |resource|
279
+ @collection.offset_value + @collection.index(resource) + start_value
280
+ end
281
+ end
282
+
283
+ # Display a column for the id
284
+ def id_column
285
+ raise "#{resource_class.name} has no primary_key!" unless resource_class.primary_key
286
+ column(resource_class.human_attribute_name(resource_class.primary_key), sortable: resource_class.primary_key) do |resource|
287
+ if controller.action_methods.include?('show')
288
+ link_to resource.id, resource_path(resource), class: "resource_id_link"
289
+ elsif controller.action_methods.include?('edit')
290
+ link_to resource.id, edit_resource_path(resource), class: "resource_id_link"
291
+ else
292
+ resource.id
293
+ end
294
+ end
295
+ end
296
+
297
+ def default_actions
298
+ raise '`default_actions` is no longer provided in ActiveAdmin 1.x. Use `actions` instead.'
299
+ end
300
+
301
+ # Add links to perform actions.
302
+ #
303
+ # ```ruby
304
+ # # Add default links.
305
+ # actions
306
+ #
307
+ # # Add default links with a custom column title (empty by default).
308
+ # actions name: 'A title!'
309
+ #
310
+ # # Append some actions onto the end of the default actions.
311
+ # actions do |admin_user|
312
+ # item 'Grant Admin', grant_admin_admin_user_path(admin_user)
313
+ # item 'Grant User', grant_user_admin_user_path(admin_user)
314
+ # end
315
+ #
316
+ # # Append some actions onto the end of the default actions using arbre dsl.
317
+ # actions do |admin_user|
318
+ # a 'Grant Admin', href: grant_admin_admin_user_path(admin_user)
319
+ # end
320
+ #
321
+ # # Custom actions without the defaults.
322
+ # actions defaults: false do |admin_user|
323
+ # item 'Grant Admin', grant_admin_admin_user_path(admin_user)
324
+ # end
325
+ #
326
+ # # Append some actions onto the end of the default actions displayed in a Dropdown Menu
327
+ # actions dropdown: true do |admin_user|
328
+ # item 'Grant Admin', grant_admin_admin_user_path(admin_user)
329
+ # end
330
+ #
331
+ # # Custom actions without the defaults displayed in a Dropdown Menu.
332
+ # actions defaults: false, dropdown: true, dropdown_name: 'Additional actions' do |admin_user|
333
+ # item 'Grant Admin', grant_admin_admin_user_path(admin_user)
334
+ # end
335
+ #
336
+ # ```
337
+ def actions(options = {}, &block)
338
+ name = options.delete(:name) { '' }
339
+ defaults = options.delete(:defaults) { true }
340
+ dropdown = options.delete(:dropdown) { false }
341
+ dropdown_name = options.delete(:dropdown_name) { I18n.t 'active_admin.dropdown_actions.button_label', default: 'Actions' }
342
+
343
+ options[:class] ||= 'col-actions'
344
+
345
+ column name, options do |resource|
346
+ if dropdown
347
+ dropdown_menu dropdown_name do
348
+ defaults(resource) if defaults
349
+ instance_exec(resource, &block) if block_given?
350
+ end
351
+ else
352
+ table_actions do
353
+ defaults(resource, css_class: :member_link) if defaults
354
+ if block_given?
355
+ block_result = instance_exec(resource, &block)
356
+ text_node block_result unless block_result.is_a? Arbre::Element
357
+ end
358
+ end
359
+ end
360
+ end
361
+ end
362
+
363
+ private
364
+
365
+ def defaults(resource, options = {})
366
+ if controller.action_methods.include?('show') && authorized?(ActiveAdmin::Auth::READ, resource)
367
+ item I18n.t('active_admin.view'), resource_path(resource), class: "view_link #{options[:css_class]}", title: I18n.t('active_admin.view')
368
+ end
369
+ if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
370
+ item I18n.t('active_admin.edit'), edit_resource_path(resource), class: "edit_link #{options[:css_class]}", title: I18n.t('active_admin.edit')
371
+ end
372
+ if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
373
+ item I18n.t('active_admin.delete'), resource_path(resource), class: "delete_link #{options[:css_class]}", title: I18n.t('active_admin.delete'),
374
+ method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
375
+ end
376
+ end
377
+
378
+ class TableActions < ActiveAdmin::Component
379
+ builder_method :table_actions
380
+
381
+ def item *args
382
+ text_node link_to *args
383
+ end
384
+ end
385
+ end # IndexTableFor
386
+
387
+ end
388
+ end
389
+ end