yousty-activeadmin 1.0.0.pre

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 (490) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +43 -0
  3. data/.travis.yml +8 -0
  4. data/.yardopts +9 -0
  5. data/CHANGELOG.md +1056 -0
  6. data/CONTRIBUTING.md +110 -0
  7. data/Gemfile +41 -0
  8. data/Guardfile +7 -0
  9. data/LICENSE +25 -0
  10. data/README.md +67 -0
  11. data/Rakefile +25 -0
  12. data/activeadmin.gemspec +33 -0
  13. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  17. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  18. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  19. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +10 -0
  20. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
  21. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
  22. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
  23. data/app/assets/images/active_admin/loading.gif +0 -0
  24. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  25. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  26. data/app/assets/images/active_admin/orderable.png +0 -0
  27. data/app/assets/javascripts/active_admin/application.js.coffee +6 -0
  28. data/app/assets/javascripts/active_admin/base.js.coffee +5 -0
  29. data/app/assets/javascripts/active_admin/components/application.js.coffee +23 -0
  30. data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +26 -0
  31. data/app/assets/javascripts/active_admin/components/has_many.js.coffee +41 -0
  32. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +37 -0
  33. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +105 -0
  34. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +97 -0
  35. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +25 -0
  36. data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
  37. data/app/assets/stylesheets/active_admin/_forms.css.scss +293 -0
  38. data/app/assets/stylesheets/active_admin/_header.css.scss +152 -0
  39. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  40. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  41. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  42. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
  43. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  44. data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
  45. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  46. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
  47. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  48. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  49. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -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/_pagination.scss +34 -0
  54. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  55. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  56. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  57. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
  58. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +95 -0
  59. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +110 -0
  60. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
  61. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
  62. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +21 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +32 -0
  71. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  72. data/app/assets/stylesheets/active_admin/print.css.scss +284 -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 +43 -0
  76. data/app/views/active_admin/dashboard/index.html.arb +1 -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 +19 -0
  80. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  81. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  82. data/app/views/active_admin/devise/shared/_links.erb +27 -0
  83. data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
  84. data/app/views/active_admin/page/index.html.arb +1 -0
  85. data/app/views/active_admin/resource/edit.html.arb +1 -0
  86. data/app/views/active_admin/resource/index.csv.erb +17 -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/layouts/active_admin.html.arb +1 -0
  91. data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
  92. data/config/locales/bg.yml +101 -0
  93. data/config/locales/ca.yml +98 -0
  94. data/config/locales/cs.yml +105 -0
  95. data/config/locales/da.yml +102 -0
  96. data/config/locales/de-CH.yml +117 -0
  97. data/config/locales/de.yml +119 -0
  98. data/config/locales/en-GB.yml +91 -0
  99. data/config/locales/en.yml +110 -0
  100. data/config/locales/es.yml +106 -0
  101. data/config/locales/es_MX.yml +104 -0
  102. data/config/locales/fi.yml +109 -0
  103. data/config/locales/fr.yml +97 -0
  104. data/config/locales/he.yml +91 -0
  105. data/config/locales/hr.yml +93 -0
  106. data/config/locales/hu.yml +92 -0
  107. data/config/locales/it.yml +89 -0
  108. data/config/locales/ja.yml +104 -0
  109. data/config/locales/ko.yml +84 -0
  110. data/config/locales/lt.yml +90 -0
  111. data/config/locales/lv.yml +89 -0
  112. data/config/locales/nl.yml +90 -0
  113. data/config/locales/no-NB.yml +85 -0
  114. data/config/locales/pl.yml +93 -0
  115. data/config/locales/pt-BR.yml +90 -0
  116. data/config/locales/pt-PT.yml +89 -0
  117. data/config/locales/ro.yml +93 -0
  118. data/config/locales/ru.yml +103 -0
  119. data/config/locales/sv-SE.yml +89 -0
  120. data/config/locales/tr.yml +90 -0
  121. data/config/locales/uk.yml +100 -0
  122. data/config/locales/vi.yml +90 -0
  123. data/config/locales/zh-CN.yml +90 -0
  124. data/config/locales/zh-TW.yml +90 -0
  125. data/cucumber.yml +3 -0
  126. data/docs/0-installation.md +84 -0
  127. data/docs/1-general-configuration.md +137 -0
  128. data/docs/10-custom-pages.md +98 -0
  129. data/docs/11-decorators.md +66 -0
  130. data/docs/12-arbre-components.md +144 -0
  131. data/docs/13-authorization-adapter.md +227 -0
  132. data/docs/2-resource-customization.md +340 -0
  133. data/docs/3-index-pages/create-an-index.md +29 -0
  134. data/docs/3-index-pages/index-as-block.md +21 -0
  135. data/docs/3-index-pages/index-as-blog.md +71 -0
  136. data/docs/3-index-pages/index-as-grid.md +29 -0
  137. data/docs/3-index-pages/index-as-table.md +154 -0
  138. data/docs/3-index-pages.md +206 -0
  139. data/docs/4-csv-format.md +39 -0
  140. data/docs/5-forms.md +110 -0
  141. data/docs/6-show-pages.md +77 -0
  142. data/docs/7-sidebars.md +42 -0
  143. data/docs/8-custom-actions.md +139 -0
  144. data/docs/9-batch-actions.md +155 -0
  145. data/features/action_item.feature +73 -0
  146. data/features/authorization.feature +64 -0
  147. data/features/authorization_cancan.feature +52 -0
  148. data/features/belongs_to.feature +63 -0
  149. data/features/breadcrumb.feature +27 -0
  150. data/features/comments/commenting.feature +140 -0
  151. data/features/comments/viewing_index.feature +19 -0
  152. data/features/dashboard.feature +16 -0
  153. data/features/decorators.feature +41 -0
  154. data/features/development_reloading.feature +31 -0
  155. data/features/edit_page.feature +127 -0
  156. data/features/favicon.feature +20 -0
  157. data/features/first_boot.feature +16 -0
  158. data/features/global_navigation.feature +29 -0
  159. data/features/i18n.feature +38 -0
  160. data/features/index/batch_actions.feature +123 -0
  161. data/features/index/filters.feature +138 -0
  162. data/features/index/format_as_csv.feature +117 -0
  163. data/features/index/formats.feature +66 -0
  164. data/features/index/index_as_block.feature +15 -0
  165. data/features/index/index_as_blog.feature +69 -0
  166. data/features/index/index_as_grid.feature +45 -0
  167. data/features/index/index_as_table.feature +195 -0
  168. data/features/index/index_blank_slate.feature +61 -0
  169. data/features/index/index_parameters.feature +75 -0
  170. data/features/index/index_scope_to.feature +56 -0
  171. data/features/index/index_scopes.feature +251 -0
  172. data/features/index/page_title.feature +30 -0
  173. data/features/index/pagination.feature +59 -0
  174. data/features/index/switch_index_view.feature +73 -0
  175. data/features/menu.feature +53 -0
  176. data/features/new_page.feature +119 -0
  177. data/features/registering_assets.feature +35 -0
  178. data/features/registering_pages.feature +148 -0
  179. data/features/registering_resources.feature +33 -0
  180. data/features/root_to.feature +17 -0
  181. data/features/show/default_content.feature +43 -0
  182. data/features/show/page_title.feature +47 -0
  183. data/features/sidebar_sections.feature +198 -0
  184. data/features/site_title.feature +47 -0
  185. data/features/specifying_actions.feature +93 -0
  186. data/features/step_definitions/action_item_steps.rb +7 -0
  187. data/features/step_definitions/action_link_steps.rb +7 -0
  188. data/features/step_definitions/additional_web_steps.rb +82 -0
  189. data/features/step_definitions/asset_steps.rb +15 -0
  190. data/features/step_definitions/attribute_steps.rb +13 -0
  191. data/features/step_definitions/batch_action_steps.rb +55 -0
  192. data/features/step_definitions/breadcrumb_steps.rb +3 -0
  193. data/features/step_definitions/comment_steps.rb +12 -0
  194. data/features/step_definitions/configuration_steps.rb +100 -0
  195. data/features/step_definitions/dashboard_steps.rb +15 -0
  196. data/features/step_definitions/factory_steps.rb +34 -0
  197. data/features/step_definitions/filter_steps.rb +17 -0
  198. data/features/step_definitions/flash_steps.rb +11 -0
  199. data/features/step_definitions/format_steps.rb +45 -0
  200. data/features/step_definitions/i18n_steps.rb +3 -0
  201. data/features/step_definitions/index_scope_steps.rb +21 -0
  202. data/features/step_definitions/index_views_steps.rb +3 -0
  203. data/features/step_definitions/layout_steps.rb +3 -0
  204. data/features/step_definitions/member_link_steps.rb +7 -0
  205. data/features/step_definitions/menu_steps.rb +11 -0
  206. data/features/step_definitions/pagination_steps.rb +8 -0
  207. data/features/step_definitions/sidebar_steps.rb +8 -0
  208. data/features/step_definitions/site_title_steps.rb +15 -0
  209. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  210. data/features/step_definitions/tab_steps.rb +3 -0
  211. data/features/step_definitions/table_steps.rb +119 -0
  212. data/features/step_definitions/user_steps.rb +39 -0
  213. data/features/step_definitions/web_steps.rb +86 -0
  214. data/features/sti_resource.feature +73 -0
  215. data/features/support/env.rb +112 -0
  216. data/features/support/paths.rb +71 -0
  217. data/features/support/selectors.rb +45 -0
  218. data/features/symbol_leak.feature +35 -0
  219. data/features/users/logging_in.feature +34 -0
  220. data/features/users/logging_out.feature +13 -0
  221. data/features/users/resetting_password.feature +34 -0
  222. data/lib/active_admin/abstract_view_factory.rb +95 -0
  223. data/lib/active_admin/application.rb +242 -0
  224. data/lib/active_admin/asset_registration.rb +29 -0
  225. data/lib/active_admin/authorization_adapter.rb +132 -0
  226. data/lib/active_admin/base_controller/authorization.rb +151 -0
  227. data/lib/active_admin/base_controller/menu.rb +34 -0
  228. data/lib/active_admin/base_controller.rb +78 -0
  229. data/lib/active_admin/batch_actions/controller.rb +24 -0
  230. data/lib/active_admin/batch_actions/resource_extension.rb +127 -0
  231. data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
  232. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  233. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +66 -0
  234. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  235. data/lib/active_admin/batch_actions.rb +17 -0
  236. data/lib/active_admin/callbacks.rb +87 -0
  237. data/lib/active_admin/cancan_adapter.rb +40 -0
  238. data/lib/active_admin/component.rb +5 -0
  239. data/lib/active_admin/controller_action.rb +12 -0
  240. data/lib/active_admin/csv_builder.rb +49 -0
  241. data/lib/active_admin/deprecation.rb +36 -0
  242. data/lib/active_admin/devise.rb +70 -0
  243. data/lib/active_admin/dsl.rb +166 -0
  244. data/lib/active_admin/engine.rb +7 -0
  245. data/lib/active_admin/event.rb +33 -0
  246. data/lib/active_admin/filters/dsl.rb +21 -0
  247. data/lib/active_admin/filters/forms.rb +89 -0
  248. data/lib/active_admin/filters/formtastic_addons.rb +70 -0
  249. data/lib/active_admin/filters/resource_extension.rb +136 -0
  250. data/lib/active_admin/filters.rb +9 -0
  251. data/lib/active_admin/form_builder.rb +152 -0
  252. data/lib/active_admin/helpers/collection.rb +23 -0
  253. data/lib/active_admin/helpers/optional_display.rb +38 -0
  254. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  255. data/lib/active_admin/helpers/settings.rb +108 -0
  256. data/lib/active_admin/iconic/icons.rb +142 -0
  257. data/lib/active_admin/iconic.rb +51 -0
  258. data/lib/active_admin/inputs/datepicker_input.rb +20 -0
  259. data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
  260. data/lib/active_admin/inputs/filter_base.rb +33 -0
  261. data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
  262. data/lib/active_admin/inputs/filter_check_boxes_input.rb +51 -0
  263. data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
  264. data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
  265. data/lib/active_admin/inputs/filter_select_input.rb +61 -0
  266. data/lib/active_admin/inputs/filter_string_input.rb +24 -0
  267. data/lib/active_admin/inputs.rb +15 -0
  268. data/lib/active_admin/menu.rb +107 -0
  269. data/lib/active_admin/menu_collection.rb +96 -0
  270. data/lib/active_admin/menu_item.rb +97 -0
  271. data/lib/active_admin/namespace.rb +224 -0
  272. data/lib/active_admin/orm/active_record/comments/comment.rb +39 -0
  273. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  274. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  275. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  276. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
  277. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  278. data/lib/active_admin/orm/active_record/comments.rb +84 -0
  279. data/lib/active_admin/orm/active_record.rb +3 -0
  280. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  281. data/lib/active_admin/orm/mongoid.rb +1 -0
  282. data/lib/active_admin/page.rb +88 -0
  283. data/lib/active_admin/page_controller.rb +29 -0
  284. data/lib/active_admin/page_dsl.rb +28 -0
  285. data/lib/active_admin/page_presenter.rb +32 -0
  286. data/lib/active_admin/resource/action_items.rb +91 -0
  287. data/lib/active_admin/resource/belongs_to.rb +36 -0
  288. data/lib/active_admin/resource/controllers.rb +18 -0
  289. data/lib/active_admin/resource/menu.rb +64 -0
  290. data/lib/active_admin/resource/naming.rb +84 -0
  291. data/lib/active_admin/resource/page_presenters.rb +82 -0
  292. data/lib/active_admin/resource/pagination.rb +19 -0
  293. data/lib/active_admin/resource/routes.rb +99 -0
  294. data/lib/active_admin/resource/scope_to.rb +74 -0
  295. data/lib/active_admin/resource/scopes.rb +50 -0
  296. data/lib/active_admin/resource/sidebars.rb +27 -0
  297. data/lib/active_admin/resource.rb +153 -0
  298. data/lib/active_admin/resource_collection.rb +42 -0
  299. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  300. data/lib/active_admin/resource_controller/data_access.rb +298 -0
  301. data/lib/active_admin/resource_controller/decorators.rb +20 -0
  302. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  303. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  304. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  305. data/lib/active_admin/resource_controller.rb +50 -0
  306. data/lib/active_admin/resource_dsl.rb +134 -0
  307. data/lib/active_admin/router.rb +106 -0
  308. data/lib/active_admin/scope.rb +57 -0
  309. data/lib/active_admin/sidebar_section.rb +37 -0
  310. data/lib/active_admin/version.rb +3 -0
  311. data/lib/active_admin/view_factory.rb +27 -0
  312. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  313. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  314. data/lib/active_admin/view_helpers/auto_link_helper.rb +34 -0
  315. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
  316. data/lib/active_admin/view_helpers/display_helper.rb +49 -0
  317. data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
  318. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  319. data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
  320. data/lib/active_admin/view_helpers/form_helper.rb +24 -0
  321. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  322. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
  323. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  324. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  325. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  326. data/lib/active_admin/view_helpers.rb +21 -0
  327. data/lib/active_admin/views/action_items.rb +17 -0
  328. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  329. data/lib/active_admin/views/components/attributes_table.rb +103 -0
  330. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  331. data/lib/active_admin/views/components/columns.rb +150 -0
  332. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  333. data/lib/active_admin/views/components/index_list.rb +68 -0
  334. data/lib/active_admin/views/components/paginated_collection.rb +125 -0
  335. data/lib/active_admin/views/components/panel.rb +34 -0
  336. data/lib/active_admin/views/components/popover.rb +27 -0
  337. data/lib/active_admin/views/components/scopes.rb +66 -0
  338. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  339. data/lib/active_admin/views/components/site_title.rb +55 -0
  340. data/lib/active_admin/views/components/status_tag.rb +56 -0
  341. data/lib/active_admin/views/components/table_for.rb +191 -0
  342. data/lib/active_admin/views/footer.rb +20 -0
  343. data/lib/active_admin/views/header.rb +32 -0
  344. data/lib/active_admin/views/index_as_block.rb +36 -0
  345. data/lib/active_admin/views/index_as_blog.rb +156 -0
  346. data/lib/active_admin/views/index_as_grid.rb +80 -0
  347. data/lib/active_admin/views/index_as_table.rb +264 -0
  348. data/lib/active_admin/views/pages/base.rb +139 -0
  349. data/lib/active_admin/views/pages/form.rb +51 -0
  350. data/lib/active_admin/views/pages/index.rb +147 -0
  351. data/lib/active_admin/views/pages/layout.rb +26 -0
  352. data/lib/active_admin/views/pages/page.rb +30 -0
  353. data/lib/active_admin/views/pages/show.rb +59 -0
  354. data/lib/active_admin/views/tabbed_navigation.rb +62 -0
  355. data/lib/active_admin/views/title_bar.rb +53 -0
  356. data/lib/active_admin/views.rb +8 -0
  357. data/lib/active_admin.rb +125 -0
  358. data/lib/activeadmin.rb +1 -0
  359. data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
  360. data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
  361. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  362. data/lib/generators/active_admin/devise/devise_generator.rb +86 -0
  363. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  364. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +235 -0
  365. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +27 -0
  366. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  367. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
  368. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  369. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  370. data/lib/ransack_ext.rb +12 -0
  371. data/script/local +44 -0
  372. data/script/use_rails +53 -0
  373. data/spec/integration/default_namespace_spec.rb +61 -0
  374. data/spec/integration/javascript_spec.rb +20 -0
  375. data/spec/integration/memory_spec.rb +29 -0
  376. data/spec/integration/stylesheets_spec.rb +41 -0
  377. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  378. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  379. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  380. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  381. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  382. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  383. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  384. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  385. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  386. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  387. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  388. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  389. data/spec/javascripts/support/jasmine.yml +74 -0
  390. data/spec/javascripts/support/jasmine_config.rb +23 -0
  391. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  392. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  393. data/spec/javascripts/support/jquery.min.js +4 -0
  394. data/spec/spec_helper.rb +175 -0
  395. data/spec/spec_helper_without_rails.rb +16 -0
  396. data/spec/support/deferred_garbage_collection.rb +19 -0
  397. data/spec/support/detect_rails_version.rb +42 -0
  398. data/spec/support/integration_example_group.rb +31 -0
  399. data/spec/support/jslint.yml +80 -0
  400. data/spec/support/rails_template.rb +111 -0
  401. data/spec/support/rails_template_with_data.rb +59 -0
  402. data/spec/support/templates/admin/stores.rb +11 -0
  403. data/spec/support/templates/cucumber.rb +24 -0
  404. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  405. data/spec/support/templates/en.yml +8 -0
  406. data/spec/support/templates/post_decorator.rb +53 -0
  407. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  408. data/spec/unit/action_builder_spec.rb +126 -0
  409. data/spec/unit/active_admin_spec.rb +11 -0
  410. data/spec/unit/application_spec.rb +141 -0
  411. data/spec/unit/asset_registration_spec.rb +52 -0
  412. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  413. data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
  414. data/spec/unit/auto_link_spec.rb +32 -0
  415. data/spec/unit/batch_actions/resource_spec.rb +91 -0
  416. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  417. data/spec/unit/belongs_to_spec.rb +42 -0
  418. data/spec/unit/cancan_adapter_spec.rb +43 -0
  419. data/spec/unit/comments_spec.rb +106 -0
  420. data/spec/unit/component_spec.rb +18 -0
  421. data/spec/unit/config_shared_examples.rb +59 -0
  422. data/spec/unit/controller_filters_spec.rb +32 -0
  423. data/spec/unit/csv_builder_spec.rb +103 -0
  424. data/spec/unit/devise_spec.rb +116 -0
  425. data/spec/unit/dsl_spec.rb +61 -0
  426. data/spec/unit/event_spec.rb +47 -0
  427. data/spec/unit/filters/filter_form_builder_spec.rb +423 -0
  428. data/spec/unit/filters/resource_spec.rb +119 -0
  429. data/spec/unit/form_builder_spec.rb +514 -0
  430. data/spec/unit/generators/install_spec.rb +23 -0
  431. data/spec/unit/helpers/collection_spec.rb +65 -0
  432. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  433. data/spec/unit/helpers/settings_spec.rb +30 -0
  434. data/spec/unit/menu_collection_spec.rb +62 -0
  435. data/spec/unit/menu_item_spec.rb +143 -0
  436. data/spec/unit/menu_spec.rb +71 -0
  437. data/spec/unit/namespace/authorization_spec.rb +27 -0
  438. data/spec/unit/namespace/register_page_spec.rb +74 -0
  439. data/spec/unit/namespace/register_resource_spec.rb +163 -0
  440. data/spec/unit/namespace_spec.rb +103 -0
  441. data/spec/unit/page_controller_spec.rb +5 -0
  442. data/spec/unit/page_spec.rb +72 -0
  443. data/spec/unit/pretty_format_spec.rb +35 -0
  444. data/spec/unit/resource/action_items_spec.rb +62 -0
  445. data/spec/unit/resource/menu_spec.rb +18 -0
  446. data/spec/unit/resource/naming_spec.rb +122 -0
  447. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  448. data/spec/unit/resource/pagination_spec.rb +38 -0
  449. data/spec/unit/resource/routes_spec.rb +73 -0
  450. data/spec/unit/resource/scopes_spec.rb +43 -0
  451. data/spec/unit/resource/sidebars_spec.rb +43 -0
  452. data/spec/unit/resource_collection_spec.rb +160 -0
  453. data/spec/unit/resource_controller/data_access_spec.rb +73 -0
  454. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  455. data/spec/unit/resource_controller_spec.rb +265 -0
  456. data/spec/unit/resource_registration_spec.rb +56 -0
  457. data/spec/unit/resource_spec.rb +243 -0
  458. data/spec/unit/routing_spec.rb +172 -0
  459. data/spec/unit/scope_spec.rb +108 -0
  460. data/spec/unit/settings_spec.rb +88 -0
  461. data/spec/unit/view_factory_spec.rb +21 -0
  462. data/spec/unit/view_helpers/breadcrumbs_spec.rb +149 -0
  463. data/spec/unit/view_helpers/display_name_spec.rb +41 -0
  464. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  465. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  466. data/spec/unit/view_helpers/form_helper_spec.rb +56 -0
  467. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +101 -0
  468. data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
  469. data/spec/unit/views/components/attributes_table_spec.rb +230 -0
  470. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  471. data/spec/unit/views/components/blank_slate_spec.rb +17 -0
  472. data/spec/unit/views/components/columns_spec.rb +142 -0
  473. data/spec/unit/views/components/index_list_spec.rb +32 -0
  474. data/spec/unit/views/components/paginated_collection_spec.rb +227 -0
  475. data/spec/unit/views/components/panel_spec.rb +51 -0
  476. data/spec/unit/views/components/popover_spec.rb +33 -0
  477. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  478. data/spec/unit/views/components/site_title_spec.rb +78 -0
  479. data/spec/unit/views/components/status_tag_spec.rb +95 -0
  480. data/spec/unit/views/components/table_for_spec.rb +201 -0
  481. data/spec/unit/views/pages/form_spec.rb +35 -0
  482. data/spec/unit/views/pages/layout_spec.rb +63 -0
  483. data/spec/unit/views/pages/show_spec.rb +20 -0
  484. data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
  485. data/tasks/docs.rake +37 -0
  486. data/tasks/js.rake +32 -0
  487. data/tasks/parallel_tests.rake +60 -0
  488. data/tasks/test.rake +79 -0
  489. data/tasks/yard.rake +7 -0
  490. metadata +896 -0
@@ -0,0 +1,125 @@
1
+ require 'active_admin/helpers/collection'
2
+
3
+ module ActiveAdmin
4
+ module Views
5
+
6
+ # Wraps the content with pagination and available formats.
7
+ #
8
+ # *Example:*
9
+ #
10
+ # paginated_collection collection, :entry_name => "Post" do
11
+ # div do
12
+ # h2 "Inside the
13
+ # end
14
+ # end
15
+ #
16
+ # This will create a div with a sentence describing the number of
17
+ # posts in one of the following formats:
18
+ #
19
+ # * "No Posts found"
20
+ # * "Displaying all 10 Posts"
21
+ # * "Displaying Posts 1 - 30 of 31 in total"
22
+ #
23
+ # It will also generate pagination links.
24
+ #
25
+ class PaginatedCollection < ActiveAdmin::Component
26
+ builder_method :paginated_collection
27
+
28
+ attr_reader :collection
29
+
30
+ # Builds a new paginated collection component
31
+ #
32
+ # collection => A paginated collection from kaminari
33
+ # options => These options will be passed to `page_entries_info`
34
+ # entry_name => The name to display for this resource collection
35
+ # param_name => Parameter name for page number in the links (:page by default)
36
+ # download_links => Download links override (false or [:csv, :pdf])
37
+ #
38
+ def build(collection, options = {})
39
+ @collection = collection
40
+ @param_name = options.delete(:param_name)
41
+ @download_links = options.delete(:download_links)
42
+ @display_total = options.delete(:pagination_total) { true }
43
+
44
+ unless collection.respond_to?(:num_pages)
45
+ raise(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
46
+ end
47
+
48
+ @contents = div(:class => "paginated_collection_contents")
49
+ build_pagination_with_formats(options)
50
+ @built = true
51
+ end
52
+
53
+ # Override add_child to insert all children into the @contents div
54
+ def add_child(*args, &block)
55
+ if @built
56
+ @contents.add_child(*args, &block)
57
+ else
58
+ super
59
+ end
60
+ end
61
+
62
+ protected
63
+
64
+ def build_pagination_with_formats(options)
65
+ div :id => "index_footer" do
66
+ build_pagination
67
+ div(page_entries_info(options).html_safe, :class => "pagination_information")
68
+
69
+ download_links = @download_links.is_a?(Proc) ? instance_exec(&@download_links) : @download_links
70
+
71
+ if download_links.is_a?(Array) && !download_links.empty?
72
+ build_download_format_links download_links
73
+ else
74
+ build_download_format_links unless download_links == false
75
+ end
76
+
77
+ end
78
+ end
79
+
80
+ def build_pagination
81
+ options = request.path_parameters
82
+ options[:param_name] = @param_name if @param_name
83
+
84
+ text_node paginate(collection, options.symbolize_keys)
85
+ end
86
+
87
+ include ::ActiveAdmin::Helpers::Collection
88
+ include ::ActiveAdmin::ViewHelpers::DownloadFormatLinksHelper
89
+
90
+ # modified from will_paginate
91
+ def page_entries_info(options = {})
92
+ if options[:entry_name]
93
+ entry_name = options[:entry_name]
94
+ entries_name = options[:entries_name] || entry_name.pluralize
95
+ elsif collection_is_empty?
96
+ entry_name = I18n.t "active_admin.pagination.entry", :count => 1, :default => 'entry'
97
+ entries_name = I18n.t "active_admin.pagination.entry", :count => 2, :default => 'entries'
98
+ else
99
+ key = "activerecord.models." + collection.first.class.model_name.i18n_key.to_s
100
+ entry_name = I18n.translate key, :count => 1, :default => collection.first.class.name.underscore.sub('_', ' ')
101
+ entries_name = I18n.translate key, :count => collection.size, :default => entry_name.pluralize
102
+ end
103
+
104
+ if collection.num_pages < 2
105
+ case collection_size
106
+ when 0; I18n.t('active_admin.pagination.empty', :model => entries_name)
107
+ when 1; I18n.t('active_admin.pagination.one', :model => entry_name)
108
+ else; I18n.t('active_admin.pagination.one_page', :model => entries_name, :n => collection.total_count)
109
+ end
110
+ else
111
+ offset = (collection.current_page - 1) * collection.limit_value
112
+ if @display_total
113
+ total = collection.total_count
114
+ I18n.t 'active_admin.pagination.multiple', :model => entries_name, :total => total,
115
+ :from => offset + 1, :to => offset + collection_size
116
+ else
117
+ I18n.t 'active_admin.pagination.multiple_without_total', :model => entries_name,
118
+ :from => offset + 1, :to => offset + collection_size
119
+ end
120
+ end
121
+ end
122
+
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,34 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class Panel < ActiveAdmin::Component
5
+ builder_method :panel
6
+
7
+ def build(title, attributes = {})
8
+ icon_name = attributes.delete(:icon)
9
+ icn = icon_name ? icon(icon_name) : "".html_safe
10
+ super(attributes)
11
+ add_class "panel"
12
+ @title = h3(icn + title.to_s)
13
+ @contents = div(:class => "panel_contents")
14
+ end
15
+
16
+ def add_child(child)
17
+ if @contents
18
+ @contents << child
19
+ else
20
+ super
21
+ end
22
+ end
23
+
24
+ # Override children? to only report children when the panel's
25
+ # contents have been added to. This ensures that the panel
26
+ # correcly appends string values, etc.
27
+ def children?
28
+ @contents.children?
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class Popover < ActiveAdmin::Component
5
+ builder_method :popover
6
+
7
+ def build(options = {}, &block)
8
+ options = options.dup
9
+ contents_root_tag = options.delete(:contents_root_tag) || :div
10
+ options[:style] = "display: none"
11
+
12
+ super(options)
13
+
14
+ @contents_root = send(contents_root_tag, :class => "popover_contents")
15
+ end
16
+
17
+ def add_child(child)
18
+ if @contents_root
19
+ @contents_root << child
20
+ else
21
+ super
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,66 @@
1
+ require 'active_admin/helpers/collection'
2
+ require 'active_admin/view_helpers/method_or_proc_helper'
3
+
4
+ module ActiveAdmin
5
+ module Views
6
+
7
+ # Renders a collection of ActiveAdmin::Scope objects as a
8
+ # simple list with a seperator
9
+ class Scopes < ActiveAdmin::Component
10
+ builder_method :scopes_renderer
11
+
12
+ include ActiveAdmin::ScopeChain
13
+ include ::ActiveAdmin::Helpers::Collection
14
+
15
+
16
+ def default_class_name
17
+ "scopes table_tools_segmented_control"
18
+ end
19
+
20
+ def tag_name
21
+ 'ul'
22
+ end
23
+
24
+ def build(scopes, options = {})
25
+ scopes.each do |scope|
26
+ build_scope(scope, options) if call_method_or_proc_on(self, scope.display_if_block)
27
+ end
28
+ end
29
+
30
+ protected
31
+
32
+ def build_scope(scope, options)
33
+ li :class => classes_for_scope(scope) do
34
+ scope_name = I18n.t "active_admin.scopes.#{scope.id}", default: scope.name
35
+ params = request.query_parameters.except :page, :scope, :commit, :format
36
+
37
+ a href: url_for(scope: scope.id, params: params), class: 'table_tools_button' do
38
+ text_node scope_name
39
+ span class: 'count' do
40
+ "(#{get_scope_count(scope)})"
41
+ end if options[:scope_count] && scope.show_count
42
+ end
43
+ end
44
+ end
45
+
46
+ def classes_for_scope(scope)
47
+ classes = ["scope", scope.id]
48
+ classes << "selected" if current_scope?(scope)
49
+ classes.join(" ")
50
+ end
51
+
52
+ def current_scope?(scope)
53
+ if params[:scope]
54
+ params[:scope] == scope.id
55
+ else
56
+ active_admin_config.default_scope(self) == scope
57
+ end
58
+ end
59
+
60
+ # Return the count for the scope passed in.
61
+ def get_scope_count(scope)
62
+ collection_size(scope_chain(scope, collection_before_scope))
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,28 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class SidebarSection < Panel
5
+ builder_method :sidebar_section
6
+
7
+ # Takes a ActiveAdmin::SidebarSection instance
8
+ def build(section)
9
+ @section = section
10
+ super(@section.title, :icon => @section.icon)
11
+ self.id = @section.id
12
+ build_sidebar_content
13
+ end
14
+
15
+ protected
16
+
17
+ def build_sidebar_content
18
+ if @section.block
19
+ rvalue = instance_eval(&@section.block)
20
+ self << rvalue if rvalue.is_a?(String)
21
+ else
22
+ render(@section.partial_name)
23
+ end
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,55 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class SiteTitle < Component
5
+
6
+ def tag_name
7
+ 'h1'
8
+ end
9
+
10
+ def build(namespace)
11
+ super(:id => "site_title")
12
+ @namespace = namespace
13
+
14
+ if site_title_link?
15
+ text_node site_title_with_link
16
+ else
17
+ text_node site_title_content
18
+ end
19
+ end
20
+
21
+ def site_title_link?
22
+ @namespace.site_title_link.present?
23
+ end
24
+
25
+ def site_title_image?
26
+ @namespace.site_title_image.present?
27
+ end
28
+
29
+ private
30
+
31
+ def site_title_with_link
32
+ helpers.link_to(site_title_content, @namespace.site_title_link)
33
+ end
34
+
35
+ def site_title_content
36
+ if site_title_image?
37
+ title_image
38
+ else
39
+ title_text
40
+ end
41
+ end
42
+
43
+ def title_text
44
+ helpers.render_or_call_method_or_proc_on(self, @namespace.site_title)
45
+ end
46
+
47
+ def title_image
48
+ path = helpers.render_or_call_method_or_proc_on(self, @namespace.site_title_image)
49
+ helpers.image_tag(path, :id => "site_title_image", :alt => @namespace.site_title)
50
+ end
51
+
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,56 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ # Build a StatusTag
4
+ class StatusTag < ActiveAdmin::Component
5
+ builder_method :status_tag
6
+
7
+ def tag_name
8
+ 'span'
9
+ end
10
+
11
+ def default_class_name
12
+ 'status_tag'
13
+ end
14
+
15
+ # @method status_tag(status, type = nil, options = {})
16
+ #
17
+ # @param [String] status the status to display. One of the span classes will be an underscored version of the status.
18
+ # @param [Symbol] type type of status. Will become a class of the span. ActiveAdmin provide style for :ok, :warning and :error.
19
+ # @param [Hash] options such as :class, :id and :label to override the default label
20
+ #
21
+ # @return [ActiveAdmin::Views::StatusTag]
22
+ #
23
+ # Examples:
24
+ # status_tag('In Progress')
25
+ # # => <span class='status_tag in_progress'>In Progress</span>
26
+ #
27
+ # status_tag('active', :ok)
28
+ # # => <span class='status_tag active ok'>Active</span>
29
+ #
30
+ # status_tag('active', :ok, :class => 'important', :id => 'status_123', :label => 'on')
31
+ # # => <span class='status_tag active ok important' id='status_123'>on</span>
32
+ #
33
+ def build(*args)
34
+ options = args.extract_options!
35
+ status = args[0]
36
+ type = args[1]
37
+ label = options.delete(:label)
38
+ classes = options.delete(:class)
39
+
40
+ content = label || status.titleize if status
41
+
42
+ super(content, options)
43
+
44
+ add_class(status_to_class(status)) if status
45
+ add_class(type.to_s) if type
46
+ add_class(classes) if classes
47
+ end
48
+
49
+ protected
50
+
51
+ def status_to_class(status)
52
+ status.titleize.gsub(/\s/, '').underscore
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,191 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class TableFor < Arbre::HTML::Table
4
+ builder_method :table_for
5
+
6
+ def tag_name
7
+ 'table'
8
+ end
9
+
10
+ def build(record_or_collection, options = {})
11
+ @sortable = options.delete(:sortable)
12
+ @resource_class = options.delete(:i18n)
13
+ @collection = Array(record_or_collection)
14
+ @columns = []
15
+ build_table
16
+ super(options)
17
+ end
18
+
19
+ def column(*args, &block)
20
+ options = default_options.merge(args.extract_options!)
21
+ title = args[0]
22
+ data = args[1] || args[0]
23
+
24
+ col = Column.new(title, data, @resource_class, options, &block)
25
+ @columns << col
26
+
27
+ # Build our header item
28
+ within @header_row do
29
+ build_table_header(col)
30
+ end
31
+
32
+ # Add a table cell for each item
33
+ @collection.each_with_index do |item, i|
34
+ within @tbody.children[i] do
35
+ build_table_cell col, item
36
+ end
37
+ end
38
+ end
39
+
40
+ def sortable?
41
+ !!@sortable
42
+ end
43
+
44
+ protected
45
+
46
+ def build_table
47
+ build_table_head
48
+ build_table_body
49
+ end
50
+
51
+ def build_table_head
52
+ @thead = thead do
53
+ @header_row = tr
54
+ end
55
+ end
56
+
57
+ def build_table_header(col)
58
+ classes = Arbre::HTML::ClassList.new
59
+ sort_key = sortable? && col.sortable? && col.sort_key
60
+ params = request.query_parameters.except :page, :order, :commit, :format
61
+
62
+ classes << 'sortable' if sort_key
63
+ classes << "sorted-#{current_sort[1]}" if sort_key && current_sort[0] == sort_key
64
+ classes << col.html_class
65
+
66
+ if sort_key
67
+ th class: classes do
68
+ link_to col.pretty_title, params: params, order: "#{sort_key}_#{order_for_sort_key(sort_key)}"
69
+ end
70
+ else
71
+ th col.pretty_title, class: classes
72
+ end
73
+ end
74
+
75
+ def build_table_body
76
+ @tbody = tbody do
77
+ # Build enough rows for our collection
78
+ @collection.each{|elem| tr(:class => cycle('odd', 'even'), :id => dom_id(elem)) }
79
+ end
80
+ end
81
+
82
+ def build_table_cell(col, item)
83
+ td class: col.html_class do
84
+ value = call_method_or_proc_on item, col.data, exec: false
85
+ value = pretty_format(value) if col.data.is_a?(Symbol)
86
+ value
87
+ end
88
+ end
89
+
90
+ # Returns an array for the current sort order
91
+ # current_sort[0] #=> sort_key
92
+ # current_sort[1] #=> asc | desc
93
+ def current_sort
94
+ @current_sort ||= if params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/
95
+ [$1,$2]
96
+ else
97
+ []
98
+ end
99
+ end
100
+
101
+ # Returns the order to use for a given sort key
102
+ #
103
+ # Default is to use 'desc'. If the current sort key is
104
+ # 'desc' it will return 'asc'
105
+ def order_for_sort_key(sort_key)
106
+ current_key, current_order = current_sort
107
+ return 'desc' unless current_key == sort_key
108
+ current_order == 'desc' ? 'asc' : 'desc'
109
+ end
110
+
111
+ def default_options
112
+ {
113
+ :i18n => @resource_class
114
+ }
115
+ end
116
+
117
+ class Column
118
+
119
+ attr_accessor :title, :data , :html_class
120
+
121
+ def initialize(*args, &block)
122
+ @options = args.extract_options!
123
+
124
+ @title = args[0]
125
+ html_classes = [:col]
126
+ if @options.has_key?(:class)
127
+ html_classes << @options.delete(:class)
128
+ elsif @title.present?
129
+ html_classes << "col-#{@title.to_s.parameterize('_')}"
130
+ end
131
+ @html_class = html_classes.join(' ')
132
+ @data = args[1] || args[0]
133
+ @data = block if block
134
+ @resource_class = args[2]
135
+ end
136
+
137
+ def sortable?
138
+ if @data.is_a?(Proc)
139
+ [String, Symbol].include?(@options[:sortable].class)
140
+ elsif @options.has_key?(:sortable)
141
+ @options[:sortable]
142
+ elsif @data.respond_to?(:to_sym) && @resource_class
143
+ !@resource_class.reflect_on_association(@data.to_sym)
144
+ else
145
+ true
146
+ end
147
+ end
148
+
149
+ #
150
+ # Returns the key to be used for sorting this column
151
+ #
152
+ # Defaults to the column's method if its a symbol
153
+ # column :username
154
+ # # => Sort key will be set to 'username'
155
+ #
156
+ # You can set the sort key by passing a string or symbol
157
+ # to the sortable option:
158
+ # column :username, :sortable => 'other_column_to_sort_on'
159
+ #
160
+ # If you pass a block to be rendered for this column, the column
161
+ # will not be sortable unless you pass a string to sortable to
162
+ # sort the column on:
163
+ #
164
+ # column('Username', :sortable => 'login'){ @user.pretty_name }
165
+ # # => Sort key will be 'login'
166
+ #
167
+ def sort_key
168
+ # If boolean or nil, use the default sort key.
169
+ if @options[:sortable] == true || @options[:sortable] == false || @options[:sortable].nil?
170
+ @data.to_s
171
+ else
172
+ @options[:sortable].to_s
173
+ end
174
+ end
175
+
176
+ def pretty_title
177
+ if @title.is_a? Symbol
178
+ default = @title.to_s.titleize
179
+ if @options[:i18n].respond_to? :human_attribute_name
180
+ @title = @options[:i18n].human_attribute_name @title, default: default
181
+ else
182
+ default
183
+ end
184
+ else
185
+ @title
186
+ end
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end
@@ -0,0 +1,20 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class Footer < Component
4
+
5
+ def build
6
+ super :id => "footer"
7
+ powered_by_message
8
+ end
9
+
10
+ private
11
+
12
+ def powered_by_message
13
+ para I18n.t('active_admin.powered_by',
14
+ :active_admin => link_to("Active Admin", "http://www.activeadmin.info"),
15
+ :version => ActiveAdmin::VERSION).html_safe
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,32 @@
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
+ build_site_title
13
+ build_global_navigation
14
+ build_utility_navigation
15
+ end
16
+
17
+
18
+ def build_site_title
19
+ insert_tag view_factory.site_title, @namespace
20
+ end
21
+
22
+ def build_global_navigation
23
+ insert_tag view_factory.global_navigation, @menu, :class => 'header-item tabs'
24
+ end
25
+
26
+ def build_utility_navigation
27
+ insert_tag view_factory.utility_navigation, @utility_menu, :id => "utility_nav", :class => 'header-item tabs'
28
+ end
29
+
30
+ end
31
+ end
32
+ 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