activeadmin 0.2.2 → 0.3.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 (277) hide show
  1. data/.gitignore +34 -0
  2. data/.travis.yml +4 -0
  3. data/.yardopts +8 -0
  4. data/CHANGELOG.md +177 -0
  5. data/Gemfile +21 -32
  6. data/Guardfile +8 -0
  7. data/README.rdoc +75 -14
  8. data/Rakefile +7 -100
  9. data/activeadmin.gemspec +21 -353
  10. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/admin_notes_icon.png +0 -0
  11. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  12. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  16. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/loading.gif +0 -0
  17. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow.gif +0 -0
  18. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow_dark.gif +0 -0
  19. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/orderable.png +0 -0
  20. data/app/assets/javascripts/active_admin/base.js +12 -0
  21. data/{lib/generators/active_admin/install/templates/active_admin_vendor.js → app/assets/javascripts/active_admin/vendor.js} +0 -0
  22. data/{lib/active_admin/stylesheets/active_admin.scss → app/assets/stylesheets/active_admin/_base.css.scss} +58 -82
  23. data/{lib/active_admin/stylesheets/active_admin/_forms.scss → app/assets/stylesheets/active_admin/_forms.css.scss} +94 -5
  24. data/{lib/active_admin/stylesheets/active_admin/_header.scss → app/assets/stylesheets/active_admin/_header.css.scss} +13 -11
  25. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  26. data/{lib/active_admin/stylesheets/active_admin/_typography.scss → app/assets/stylesheets/active_admin/_typography.css.scss} +0 -0
  27. data/{lib/active_admin/stylesheets/active_admin/_comments.scss → app/assets/stylesheets/active_admin/components/_comments.css.scss} +0 -0
  28. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  29. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
  30. data/{lib/active_admin/stylesheets/active_admin/mixins/_all.scss → app/assets/stylesheets/active_admin/mixins/_all.css.scss} +0 -0
  31. data/{lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss → app/assets/stylesheets/active_admin/mixins/_buttons.css.scss} +0 -0
  32. data/{lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss → app/assets/stylesheets/active_admin/mixins/_gradients.css.scss} +8 -0
  33. data/{lib/active_admin/stylesheets/active_admin/mixins/_icons.scss → app/assets/stylesheets/active_admin/mixins/_icons.css.scss} +0 -0
  34. data/{lib/active_admin/stylesheets/active_admin/mixins/_reset.scss → app/assets/stylesheets/active_admin/mixins/_reset.css.scss} +0 -0
  35. data/{lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss → app/assets/stylesheets/active_admin/mixins/_rounded.css.scss} +0 -0
  36. data/{lib/active_admin/stylesheets/active_admin/mixins/_sections.scss → app/assets/stylesheets/active_admin/mixins/_sections.css.scss} +9 -2
  37. data/{lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss → app/assets/stylesheets/active_admin/mixins/_shadows.css.scss} +1 -1
  38. data/{lib/active_admin/stylesheets/active_admin/mixins/_variables.scss → app/assets/stylesheets/active_admin/mixins/_variables.css.scss} +12 -3
  39. data/{lib/active_admin/views/templates/active_admin_dashboard → app/views/active_admin/dashboard}/index.html.arb +0 -0
  40. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/reset_password_instructions.html.erb +0 -0
  41. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/unlock_instructions.html.erb +0 -0
  42. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/edit.html.erb +0 -0
  43. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/new.html.erb +0 -0
  44. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/sessions/new.html.erb +1 -1
  45. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/shared/_links.erb +0 -0
  46. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/unlocks/new.html.erb +0 -0
  47. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/edit.html.arb +0 -0
  48. data/app/views/active_admin/resource/index.csv.erb +20 -0
  49. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/index.html.arb +0 -0
  50. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/new.html.arb +0 -0
  51. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/show.html.arb +0 -0
  52. data/app/views/layouts/active_admin.html.arb +1 -0
  53. data/{lib/active_admin/views/templates → app/views}/layouts/active_admin_logged_out.html.erb +8 -4
  54. data/docs/0-installation.md +50 -0
  55. data/docs/1-general-configuration.md +43 -0
  56. data/docs/2-resource-customization.md +35 -0
  57. data/docs/3-index-pages.md +55 -0
  58. data/docs/3-index-pages/index-as-block.md +16 -0
  59. data/docs/3-index-pages/index-as-blog.md +61 -0
  60. data/docs/3-index-pages/index-as-grid.md +21 -0
  61. data/docs/3-index-pages/index-as-table.md +90 -0
  62. data/docs/4-csv-format.md +14 -0
  63. data/docs/5-forms.md +39 -0
  64. data/docs/6-show-screens.md +22 -0
  65. data/docs/7-sidebars.md +35 -0
  66. data/docs/8-custom-actions.md +123 -0
  67. data/features/comments/commenting.feature +31 -4
  68. data/features/edit_page.feature +30 -1
  69. data/features/index/filters.feature +35 -0
  70. data/features/index/format_as_csv.feature +46 -0
  71. data/features/index/formats.feature +2 -0
  72. data/features/index/index_as_block.feature +1 -1
  73. data/features/index/index_as_grid.feature +1 -1
  74. data/features/index/index_as_table.feature +2 -0
  75. data/features/index/index_blank_slate.feature +56 -0
  76. data/features/index/pagination.feature +0 -6
  77. data/features/registering_assets.feature +2 -2
  78. data/features/sidebar_sections.feature +7 -8
  79. data/features/specifying_actions.feature +72 -1
  80. data/features/step_definitions/action_item_steps.rb +2 -2
  81. data/features/step_definitions/additional_web_steps.rb +26 -16
  82. data/features/step_definitions/attribute_steps.rb +5 -7
  83. data/features/step_definitions/configuration_steps.rb +9 -9
  84. data/features/step_definitions/factory_steps.rb +4 -3
  85. data/features/step_definitions/format_steps.rb +29 -1
  86. data/features/step_definitions/layout_steps.rb +3 -0
  87. data/features/step_definitions/menu_steps.rb +2 -2
  88. data/features/step_definitions/sidebar_steps.rb +1 -5
  89. data/features/step_definitions/user_steps.rb +8 -2
  90. data/features/step_definitions/web_steps.rb +82 -90
  91. data/features/sti_resource.feature +12 -0
  92. data/features/support/env.rb +12 -10
  93. data/features/support/paths.rb +2 -0
  94. data/features/support/selectors.rb +45 -0
  95. data/lib/active_admin.rb +33 -263
  96. data/lib/active_admin/application.rb +228 -0
  97. data/lib/active_admin/arbre.rb +10 -10
  98. data/lib/active_admin/arbre/{html.rb → builder.rb} +29 -2
  99. data/lib/active_admin/arbre/context.rb +8 -0
  100. data/lib/active_admin/arbre/{attributes.rb → html/attributes.rb} +0 -0
  101. data/lib/active_admin/arbre/{class_list.rb → html/class_list.rb} +0 -0
  102. data/lib/active_admin/arbre/{collection.rb → html/collection.rb} +0 -0
  103. data/lib/active_admin/arbre/{document.rb → html/document.rb} +0 -0
  104. data/lib/active_admin/arbre/{element.rb → html/element.rb} +6 -6
  105. data/lib/active_admin/arbre/{html5_elements.rb → html/html5_elements.rb} +0 -0
  106. data/lib/active_admin/arbre/{tag.rb → html/tag.rb} +0 -0
  107. data/lib/active_admin/arbre/{text_node.rb → html/text_node.rb} +0 -0
  108. data/lib/active_admin/asset_registration.rb +1 -1
  109. data/lib/active_admin/callbacks.rb +5 -3
  110. data/lib/active_admin/comments.rb +3 -3
  111. data/lib/active_admin/comments/comment.rb +6 -0
  112. data/lib/active_admin/comments/configuration.rb +8 -6
  113. data/lib/active_admin/comments/namespace_helper.rb +1 -1
  114. data/lib/active_admin/comments/views/active_admin_comments.rb +1 -1
  115. data/lib/active_admin/csv_builder.rb +45 -0
  116. data/lib/active_admin/dashboards.rb +1 -1
  117. data/lib/active_admin/dashboards/dashboard_controller.rb +3 -10
  118. data/lib/active_admin/dependency_checker.rb +28 -0
  119. data/lib/active_admin/deprecation.rb +36 -0
  120. data/lib/active_admin/devise.rb +14 -3
  121. data/lib/active_admin/dsl.rb +26 -4
  122. data/lib/active_admin/engine.rb +4 -0
  123. data/lib/active_admin/form_builder.rb +18 -9
  124. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  125. data/lib/active_admin/helpers/settings.rb +70 -0
  126. data/lib/active_admin/locales/cs.yml +34 -0
  127. data/lib/active_admin/locales/da.yml +28 -0
  128. data/lib/active_admin/locales/en.yml +40 -0
  129. data/lib/active_admin/locales/es.yml +40 -0
  130. data/lib/active_admin/locales/fr.yml +40 -0
  131. data/lib/active_admin/locales/it.yml +39 -0
  132. data/lib/active_admin/locales/pl.yml +34 -0
  133. data/lib/active_admin/locales/pt-BR.yml +41 -0
  134. data/lib/active_admin/locales/ru.yml +40 -0
  135. data/lib/active_admin/locales/zh_cn.yml +40 -0
  136. data/lib/active_admin/menu_item.rb +6 -0
  137. data/lib/active_admin/namespace.rb +14 -5
  138. data/lib/active_admin/reloader.rb +30 -0
  139. data/lib/active_admin/renderer.rb +1 -1
  140. data/lib/active_admin/resource.rb +45 -88
  141. data/lib/active_admin/resource/action_items.rb +88 -0
  142. data/lib/active_admin/resource/menu.rb +45 -0
  143. data/lib/active_admin/resource/naming.rb +46 -0
  144. data/lib/active_admin/resource/scopes.rb +33 -0
  145. data/lib/active_admin/resource/sidebars.rb +36 -0
  146. data/lib/active_admin/resource_controller.rb +32 -37
  147. data/lib/active_admin/resource_controller/action_builder.rb +1 -1
  148. data/lib/active_admin/resource_controller/actions.rb +66 -40
  149. data/lib/active_admin/resource_controller/callbacks.rb +1 -1
  150. data/lib/active_admin/resource_controller/collection.rb +9 -14
  151. data/lib/active_admin/resource_controller/filters.rb +1 -1
  152. data/lib/active_admin/resource_controller/form.rb +1 -1
  153. data/lib/active_admin/resource_controller/menu.rb +1 -1
  154. data/lib/active_admin/resource_controller/page_configurations.rb +2 -2
  155. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  156. data/lib/active_admin/resource_controller/sidebars.rb +1 -21
  157. data/lib/active_admin/router.rb +85 -0
  158. data/lib/active_admin/sass/active_admin.scss +3 -0
  159. data/lib/active_admin/sass/css_loader.rb +16 -0
  160. data/lib/active_admin/sass/helpers.rb +45 -0
  161. data/lib/active_admin/scope.rb +16 -2
  162. data/lib/active_admin/sidebar_section.rb +41 -0
  163. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  164. data/lib/active_admin/version.rb +1 -1
  165. data/lib/active_admin/view_factory.rb +5 -3
  166. data/lib/active_admin/view_helpers.rb +1 -2
  167. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  168. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  169. data/lib/active_admin/view_helpers/display_helper.rb +1 -1
  170. data/lib/active_admin/view_helpers/filter_form_helper.rb +26 -14
  171. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  172. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
  173. data/lib/active_admin/views/components/attributes_table.rb +2 -2
  174. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  175. data/lib/active_admin/views/components/columns.rb +1 -3
  176. data/lib/active_admin/views/components/paginated_collection.rb +26 -8
  177. data/lib/active_admin/views/components/scopes.rb +13 -8
  178. data/lib/active_admin/views/components/sidebar_section.rb +1 -3
  179. data/lib/active_admin/views/components/status_tag.rb +55 -0
  180. data/lib/active_admin/views/components/table_for.rb +25 -6
  181. data/lib/active_admin/views/header_renderer.rb +20 -4
  182. data/lib/active_admin/views/index_as_block.rb +12 -7
  183. data/lib/active_admin/views/index_as_blog.rb +61 -21
  184. data/lib/active_admin/views/index_as_grid.rb +22 -1
  185. data/lib/active_admin/views/index_as_table.rb +97 -6
  186. data/lib/active_admin/views/pages/base.rb +20 -9
  187. data/lib/active_admin/views/pages/dashboard.rb +7 -4
  188. data/lib/active_admin/views/pages/edit.rb +3 -2
  189. data/lib/active_admin/views/pages/index.rb +30 -5
  190. data/lib/active_admin/views/pages/layout.rb +26 -0
  191. data/lib/active_admin/views/pages/new.rb +3 -2
  192. data/lib/active_admin/views/pages/show.rb +1 -1
  193. data/lib/active_admin/views/tabbed_navigation.rb +94 -0
  194. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  195. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  196. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  197. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  198. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  199. data/lib/generators/active_admin/install/install_generator.rb +2 -4
  200. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +26 -4
  201. data/lib/generators/active_admin/install/templates/dashboards.rb +4 -2
  202. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +2 -2
  203. data/script/local +44 -0
  204. data/script/use_rails +46 -0
  205. data/spec/integration/belongs_to_spec.rb +1 -1
  206. data/spec/integration/default_namespace.rb +77 -0
  207. data/spec/integration/javascript_spec.rb +20 -0
  208. data/spec/integration/stylesheets_spec.rb +41 -0
  209. data/spec/spec_helper.rb +21 -11
  210. data/spec/support/detect_rails_version.rb +10 -0
  211. data/spec/support/integration_example_group.rb +1 -1
  212. data/spec/support/jslint.yml +80 -0
  213. data/spec/support/rails_template.rb +1 -1
  214. data/spec/support/rails_template_with_data.rb +2 -1
  215. data/spec/support/templates/cucumber.rb +0 -4
  216. data/spec/unit/active_admin_spec.rb +8 -44
  217. data/spec/unit/application_spec.rb +78 -0
  218. data/spec/unit/arbre/context_spec.rb +22 -0
  219. data/spec/unit/arbre/html/element_finder_methods_spec.rb +2 -2
  220. data/spec/unit/arbre/html/element_spec.rb +2 -3
  221. data/spec/unit/arbre/html/tag_attributes_spec.rb +2 -2
  222. data/spec/unit/arbre/html/tag_spec.rb +2 -2
  223. data/spec/unit/arbre/html_spec.rb +2 -3
  224. data/spec/unit/auto_link_spec.rb +2 -1
  225. data/spec/unit/belongs_to_spec.rb +2 -1
  226. data/spec/unit/comments_spec.rb +43 -39
  227. data/spec/unit/controller_filters_spec.rb +11 -3
  228. data/spec/unit/csv_builder_spec.rb +83 -0
  229. data/spec/unit/devise_spec.rb +66 -0
  230. data/spec/unit/display_name_spec.rb +2 -2
  231. data/spec/unit/filter_form_builder_spec.rb +6 -3
  232. data/spec/unit/form_builder_spec.rb +20 -2
  233. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  234. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  235. data/spec/unit/helpers/settings_spec.rb +30 -0
  236. data/spec/unit/menu_item_spec.rb +6 -0
  237. data/spec/unit/namespace_spec.rb +68 -19
  238. data/spec/unit/rails_spec.rb +43 -0
  239. data/spec/unit/registration_spec.rb +18 -27
  240. data/spec/unit/reloader_spec.rb +28 -0
  241. data/spec/unit/resource/action_items_spec.rb +62 -0
  242. data/spec/unit/resource/menu_spec.rb +80 -0
  243. data/spec/unit/resource/naming_spec.rb +64 -0
  244. data/spec/unit/resource/scopes_spec.rb +30 -0
  245. data/spec/unit/resource/sidebars_spec.rb +50 -0
  246. data/spec/unit/resource_controller/collection_spec.rb +1 -1
  247. data/spec/unit/resource_controller_spec.rb +29 -24
  248. data/spec/unit/resource_spec.rb +78 -94
  249. data/spec/unit/sass/helpers_spec.rb +47 -0
  250. data/spec/unit/scope_spec.rb +11 -1
  251. data/spec/unit/view_factory_spec.rb +4 -1
  252. data/spec/unit/{components → views/components}/attributes_table_spec.rb +2 -2
  253. data/spec/unit/views/components/blank_slate_spec.rb +15 -0
  254. data/spec/unit/{components → views/components}/columns_spec.rb +2 -2
  255. data/spec/unit/{components → views/components}/panel_spec.rb +1 -3
  256. data/spec/unit/{components → views/components}/sidebar_section_spec.rb +3 -3
  257. data/spec/unit/views/components/status_tag_spec.rb +79 -0
  258. data/spec/unit/{components → views/components}/table_for_spec.rb +2 -1
  259. data/spec/unit/views/pages/layout_spec.rb +22 -0
  260. data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
  261. data/tasks/docs.rake +39 -0
  262. data/tasks/test.rake +55 -0
  263. data/tasks/yard.rake +6 -0
  264. metadata +310 -189
  265. data/CHANGELOG.rdoc +0 -76
  266. data/lib/active_admin/action_items.rb +0 -37
  267. data/lib/active_admin/sidebar.rb +0 -39
  268. data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +0 -13
  269. data/lib/active_admin/view_helpers/status_tag_helper.rb +0 -13
  270. data/lib/active_admin/view_helpers/table_helper.rb +0 -12
  271. data/lib/active_admin/views/tabs_renderer.rb +0 -52
  272. data/lib/active_admin/views/templates/active_admin_default/index.csv.erb +0 -2
  273. data/lib/active_admin/views/templates/layouts/active_admin.html.erb +0 -39
  274. data/lib/generators/active_admin/install/templates/active_admin.js +0 -51
  275. data/spec/controllers/index_as_csv_spec.rb +0 -35
  276. data/spec/unit/action_items_spec.rb +0 -27
  277. data/spec/unit/tabs_renderer_spec.rb +0 -56
@@ -16,10 +16,16 @@ module ActiveAdmin
16
16
 
17
17
  def build_scope(scope)
18
18
  span :class => classes_for_scope(scope) do
19
- if current_scope?(scope)
20
- em(scope.name)
19
+ begin
20
+ scope_name = I18n.t!("active_admin.scopes.#{scope.scope_method}")
21
+ rescue I18n::MissingTranslationData
22
+ scope_name = scope.name
23
+ end
24
+
25
+ if current_scope?(scope)
26
+ em(scope_name)
21
27
  else
22
- a(scope.name, :href => url_for(params.merge(:scope => scope.id, :page => 1)))
28
+ a(scope_name, :href => url_for(params.merge(:scope => scope.id, :page => 1)))
23
29
  end
24
30
  text_node(" ")
25
31
  scope_count(scope)
@@ -47,12 +53,11 @@ module ActiveAdmin
47
53
  end
48
54
  end
49
55
 
56
+ include ActiveAdmin::ScopeChain
57
+
58
+ # Return the count for the scope passed in.
50
59
  def get_scope_count(scope)
51
- if scope.scope_method
52
- scoping_class.send(scope.scope_method).count
53
- else
54
- instance_exec(scoping_class, &scope.scope_block).count
55
- end
60
+ scope_chain(scope, scoping_class).count
56
61
  end
57
62
 
58
63
  def scoping_class
@@ -19,9 +19,7 @@ module ActiveAdmin
19
19
  rvalue = instance_eval(&@section.block)
20
20
  self << rvalue if rvalue.is_a?(String)
21
21
  else
22
- self << capture do
23
- render @section.partial_name
24
- end
22
+ text_node render(@section.partial_name)
25
23
  end
26
24
  end
27
25
  end
@@ -0,0 +1,55 @@
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'
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 etc
20
+ #
21
+ # @return [ActiveAdmin::Views::StatusTag]
22
+ #
23
+ # Examples:
24
+ # status_tag('In Progress')
25
+ # # => <span class='status in_progress'>In Progress</span>
26
+ #
27
+ # status_tag('active', :ok)
28
+ # # => <span class='status active ok'>Active</span>
29
+ #
30
+ # status_tag('active', :ok, :class => 'important', :id => 'status_123')
31
+ # # => <span class='status active ok important' id='status_123'>Active</span>
32
+ #
33
+ def build(*args)
34
+ options = args.extract_options!
35
+ status = args[0]
36
+ type = args[1]
37
+ classes = options.delete(:class)
38
+
39
+ status = status.titleize if status
40
+
41
+ super(status, options)
42
+
43
+ add_class(status_to_class(status)) if status
44
+ add_class(type.to_s) if type
45
+ add_class(classes) if classes
46
+ end
47
+
48
+ protected
49
+
50
+ def status_to_class(status)
51
+ status.titleize.gsub(/\s/, '').underscore
52
+ end
53
+ end
54
+ end
55
+ end
@@ -9,6 +9,7 @@ module ActiveAdmin
9
9
 
10
10
  def build(collection, options = {})
11
11
  @sortable = options.delete(:sortable)
12
+ @resource_class = options.delete(:i18n)
12
13
  @collection = collection
13
14
  @columns = []
14
15
  build_table
@@ -16,7 +17,11 @@ module ActiveAdmin
16
17
  end
17
18
 
18
19
  def column(*args, &block)
19
- col = Column.new(*args, &block)
20
+ options = default_options.merge(args.last.is_a?(::Hash) ? args.pop : {})
21
+ title = args[0]
22
+ data = args[1] || args[0]
23
+
24
+ col = Column.new(title, data, options, &block)
20
25
  @columns << col
21
26
 
22
27
  # Build our header item
@@ -69,7 +74,7 @@ module ActiveAdmin
69
74
  end
70
75
 
71
76
  th :class => classes do
72
- link_to(title, request.query_parameters.merge(:order => "#{sort_key}_#{order_for_sort_key(sort_key)}").except(:page))
77
+ link_to(title, params.merge(:order => "#{sort_key}_#{order_for_sort_key(sort_key)}").except(:page))
73
78
  end
74
79
  end
75
80
 
@@ -102,7 +107,7 @@ module ActiveAdmin
102
107
  end
103
108
 
104
109
  # Returns the order to use for a given sort key
105
- #
110
+ #
106
111
  # Default is to use 'desc'. If the current sort key is
107
112
  # 'desc' it will return 'asc'
108
113
  def order_for_sort_key(sort_key)
@@ -111,6 +116,12 @@ module ActiveAdmin
111
116
  current_order == 'desc' ? 'asc' : 'desc'
112
117
  end
113
118
 
119
+ def default_options
120
+ {
121
+ :i18n => @resource_class
122
+ }
123
+ end
124
+
114
125
  class Column
115
126
 
116
127
  attr_accessor :title, :data
@@ -142,12 +153,12 @@ module ActiveAdmin
142
153
  # column :username, :sortable => 'other_column_to_sort_on'
143
154
  #
144
155
  # If you pass a block to be rendered for this column, the column
145
- # will not be sortable unless you pass a string to sortable to
156
+ # will not be sortable unless you pass a string to sortable to
146
157
  # sort the column on:
147
158
  #
148
159
  # column('Username', :sortable => 'login'){ @user.pretty_name }
149
160
  # # => Sort key will be 'login'
150
- #
161
+ #
151
162
  def sort_key
152
163
  if @options[:sortable] == true || @options[:sortable] == false
153
164
  @data.to_s
@@ -159,7 +170,15 @@ module ActiveAdmin
159
170
  private
160
171
 
161
172
  def pretty_title(raw)
162
- raw.is_a?(Symbol) ? raw.to_s.titleize : raw
173
+ if raw.is_a?(Symbol)
174
+ if @options[:i18n] && @options[:i18n].respond_to?(:human_attribute_name) && human_name = @options[:i18n].human_attribute_name(raw)
175
+ raw = human_name
176
+ end
177
+
178
+ raw.to_s.titleize
179
+ else
180
+ raw
181
+ end
163
182
  end
164
183
 
165
184
  def default_options
@@ -12,10 +12,10 @@ module ActiveAdmin
12
12
  protected
13
13
 
14
14
  def title
15
- content_tag 'h1', ActiveAdmin.site_title, :id => 'site_title'
15
+ content_tag 'h1', active_admin_application.site_title, :id => 'site_title'
16
16
  end
17
17
 
18
- # Renders the global navigation returned by
18
+ # Renders the global navigation returned by
19
19
  # ActiveAdmin::ResourceController#current_menu
20
20
  #
21
21
  # It uses the ActiveAdmin.tabs_renderer option
@@ -26,11 +26,27 @@ module ActiveAdmin
26
26
  def utility_navigation
27
27
  content_tag 'p', :id => "utility_nav" do
28
28
  if current_active_admin_user?
29
- content_tag(:span, display_name(current_active_admin_user), :class => "current_user") +
30
- link_to("Logout", "/#{ActiveAdmin.default_namespace}/logout")
29
+ html = content_tag(:span, display_name(current_active_admin_user), :class => "current_user")
30
+
31
+ if active_admin_application.logout_link_path
32
+ html << link_to(I18n.t('active_admin.logout'), logout_path, :method => logout_method)
33
+ end
31
34
  end
32
35
  end
33
36
  end
37
+
38
+ # Returns the logout path from the application settings
39
+ def logout_path
40
+ if active_admin_application.logout_link_path.is_a?(Symbol)
41
+ send(active_admin_application.logout_link_path)
42
+ else
43
+ active_admin_application.logout_link_path
44
+ end
45
+ end
46
+
47
+ def logout_method
48
+ active_admin_application.logout_link_method || :get
49
+ end
34
50
  end
35
51
 
36
52
  end
@@ -1,16 +1,21 @@
1
1
  module ActiveAdmin
2
2
  module Views
3
3
 
4
- # Simplest rendering possible. Calls the block for each element in the collection.
4
+ # = Index as a Block
5
5
  #
6
- # Example:
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.
7
9
  #
8
- # ActiveAdmin.register Post do
9
- # index :as => :block do |post|
10
- # # render the post partial (app/views/admin/posts/_post)
11
- # render 'post', :post => post
10
+ # index :as => :block do |product|
11
+ # div :for => product do
12
+ # h2 auto_link(product.title)
13
+ # div do
14
+ # simple_format product.description
15
+ # end
16
+ # end
12
17
  # end
13
- # end
18
+ #
14
19
  class IndexAsBlock < ActiveAdmin::Component
15
20
 
16
21
  def build(page_config, collection)
@@ -1,5 +1,66 @@
1
1
  module ActiveAdmin
2
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
+ # index :as => :blog do
10
+ # title :my_title # Calls #my_title on each resource
11
+ # body :my_body # Calls #my_body on each resource
12
+ # end
13
+ #
14
+ # == Post Title
15
+ #
16
+ # The title is the content that will be rendered within a link to the
17
+ # resource. There are two main ways to set the content for the title
18
+ #
19
+ # First, you can pass in a method to be called on your
20
+ # resource. For example:
21
+ #
22
+ # index :as => :blog do
23
+ # title :a_method_to_call
24
+ # end
25
+ #
26
+ # This will result in the title of the post being the return value of
27
+ # Resource#a_method_to_call
28
+ #
29
+ # Second, you can pass a block to the tile option which will then be
30
+ # used as the contents fo the title. The resource being rendered
31
+ # is passed in to the block. For Example:
32
+ #
33
+ # index :as => :blog do
34
+ # title do |post|
35
+ # span post.title, :class => 'title'
36
+ # span post.created_at, :class => 'created_at'
37
+ # end
38
+ # end
39
+ #
40
+ # == Post Body
41
+ #
42
+ # The body is rendered underneath the title of each post. The same two
43
+ # style of options work as the Post Title above.
44
+ #
45
+ # Call a method on the resource as the body:
46
+ #
47
+ # index :as => :blog do
48
+ # title :my_title
49
+ # body :my_body # Return value of #my_body will be the body
50
+ # end
51
+ #
52
+ # Or, render a block as the body:
53
+ #
54
+ # index :as => :blog do
55
+ # title :my_title
56
+ # body do |post|
57
+ # div truncate(post.title)
58
+ # div :class => 'meta' do
59
+ # span "Post in #{post.categories.join(', ')}"
60
+ # end
61
+ # end
62
+ # end
63
+ #
3
64
  class IndexAsBlog < ActiveAdmin::Component
4
65
 
5
66
  def build(page_config, collection)
@@ -14,16 +75,6 @@ module ActiveAdmin
14
75
  end
15
76
 
16
77
  # Setter method for the configuration of the title
17
- #
18
- # index :as => :blog do
19
- # title :a_method_to_call #=> Calls #a_method_to_call on the resource
20
- #
21
- # # OR
22
- #
23
- # title do |post|
24
- # post.a_method_to_call
25
- # end
26
- # end
27
78
  def title(method = nil, &block)
28
79
  if block_given? || method
29
80
  @title = block_given? ? block : method
@@ -33,17 +84,6 @@ module ActiveAdmin
33
84
 
34
85
  # Setter method for the configuration of the body
35
86
  #
36
- # index :as => :blog do
37
- # title :my_title
38
- #
39
- # body :a_method_to_call #=> Calls #a_method_to_call on the resource
40
- #
41
- # # OR
42
- #
43
- # title do |post|
44
- # post.a_method_to_call
45
- # end
46
- # end
47
87
  def body(method = nil, &block)
48
88
  if block_given? || method
49
89
  @body = block_given? ? block : method
@@ -1,6 +1,27 @@
1
1
  module ActiveAdmin
2
2
  module Views
3
- class IndexAsGrid < ActiveAdmin::Component
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
+ # index :as => :grid do |product|
11
+ # link_to(image_tag(product.image_path), admin_products_path(product))
12
+ # end
13
+ #
14
+ # The block is rendered within a cell in the grid once for each resource in the
15
+ # collection. The resource is passed into the block for you to use in the view.
16
+ #
17
+ # You can customize the number of colums that are rendered using the columns
18
+ # option:
19
+ #
20
+ # index :as => :grid, :columns => 5 do |product|
21
+ # link_to(image_tag(product.image_path), admin_products_path(product))
22
+ # end
23
+ #
24
+ class IndexAsGrid < ActiveAdmin::Component
4
25
 
5
26
  def build(page_config, collection)
6
27
  @page_config = page_config
@@ -1,14 +1,105 @@
1
1
  module ActiveAdmin
2
2
  module Views
3
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
+ # index do
16
+ # column :title
17
+ # end
18
+ #
19
+ # If the default title does not work for you, pass it as the first argument:
20
+ #
21
+ # index do
22
+ # column "My Custom Title", :title
23
+ # end
24
+ #
25
+ # Sometimes calling methods just isn't enough and you need to write some view
26
+ # specific code. For example, say we wanted a colum called Title which holds a
27
+ # link to the posts admin screen.
28
+ #
29
+ # The column method accepts a block as an argument which will then be rendered
30
+ # within the context of the view for each of the objects in the collection.
31
+ #
32
+ # index do
33
+ # column "Title" do |post|
34
+ # link_to post.title, admin_post_path(post)
35
+ # end
36
+ # end
37
+ #
38
+ # The block gets called once for each resource in the collection. The resource gets passed into
39
+ # the block as an argument.
40
+ #
41
+ # To setup links to View, Edit and Delete a resource, use the default_actions method:
42
+ #
43
+ # index do
44
+ # column :title
45
+ # default_actions
46
+ # end
47
+ #
48
+ # Alternatively, you can create a column with custom links:
49
+ #
50
+ # index do
51
+ # column :title
52
+ # column "Actions" do |post|
53
+ # link_to "View", admin_post_path(post)
54
+ # end
55
+ # end
56
+ #
57
+ #
58
+ # == Sorting
59
+ #
60
+ # When a column is generated from an Active Record attribute, the table is
61
+ # sortable by default. If you are creating a custom column, you may need to give
62
+ # Active Admin a hint for how to sort the table.
63
+ #
64
+ # If a column is defined using a block, you must pass the key to turn on sorting. The key
65
+ # is the attribute which gets used to sort objects using Active Record.
66
+ #
67
+ # index do
68
+ # column "Title", :sortable => :title do |post|
69
+ # link_to post.title, admin_post_path(post)
70
+ # end
71
+ # end
72
+ #
73
+ # You can turn off sorting on any column by passing false:
74
+ #
75
+ # index do
76
+ # column :title, :sortable => false
77
+ # end
78
+ #
79
+ # == Showing and Hiding Columns
80
+ #
81
+ # The entire index block is rendered within the context of the view, so you can
82
+ # easily do things that show or hide columns based on the current context.
83
+ #
84
+ # For example, if you were using CanCan:
85
+ #
86
+ # index do
87
+ # column :title, :sortable => false
88
+ # if can? :manage, Post
89
+ # column :some_secret_data
90
+ # end
91
+ # end
92
+ #
4
93
  class IndexAsTable < ActiveAdmin::Component
5
94
 
6
95
  def build(page_config, collection)
7
96
  table_options = {
8
- :id => active_admin_config.plural_resource_name.underscore,
97
+ :id => active_admin_config.plural_resource_name.underscore,
9
98
  :sortable => true,
10
- :class => "index_table"
99
+ :class => "index_table",
100
+ :i18n => active_admin_config.resource
11
101
  }
102
+
12
103
  table_for collection, table_options do |t|
13
104
  instance_exec(t, &page_config.block)
14
105
  end
@@ -35,9 +126,9 @@ module ActiveAdmin
35
126
  :name => ""
36
127
  }.merge(options)
37
128
  column options[:name] do |resource|
38
- links = link_to "View", resource_path(resource), :class => "view_link"
39
- links += link_to "Edit", edit_resource_path(resource), :class => "edit_link"
40
- links += link_to "Delete", resource_path(resource), :method => :delete, :confirm => "Are you sure you want to delete this?", :class => "delete_link"
129
+ links = link_to I18n.t('active_admin.view'), resource_path(resource), :class => "member_link view_link"
130
+ links += link_to I18n.t('active_admin.edit'), edit_resource_path(resource), :class => "member_link edit_link"
131
+ links += link_to I18n.t('active_admin.delete'), resource_path(resource), :method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'), :class => "member_link delete_link"
41
132
  links
42
133
  end
43
134
  end
@@ -57,7 +148,7 @@ module ActiveAdmin
57
148
  # post.published? ? 'published' : 'draft'
58
149
  # end
59
150
  # end
60
- #
151
+ #
61
152
  def status_tag(*args, &block)
62
153
  col = Column.new(*args, &block)
63
154
  data = col.data