activeadmin 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

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
@@ -0,0 +1,3 @@
1
+ // This file is included when using Rails 3.0
2
+ @import "active_admin/mixins";
3
+ @import "active_admin/base";
@@ -0,0 +1,16 @@
1
+ require 'sass/importers'
2
+
3
+ # This monkey patches the SASS filesystem importer to work with files
4
+ # that are named *.css.scss. This allows us to be compatible with both
5
+ # Rails 3.0.* and Rails 3.1
6
+ #
7
+ # This should only be loaded in Rails 3.0 apps.
8
+ class Sass::Importers::Filesystem
9
+
10
+ # We want to ensure that all *.css.scss files are loaded as scss files
11
+ def extensions_with_css
12
+ extensions_without_css.merge('css.scss' => :scss)
13
+ end
14
+ alias_method_chain :extensions, :css
15
+
16
+ end
@@ -0,0 +1,45 @@
1
+ require 'sass'
2
+ require 'sass/script/functions'
3
+ require 'sass-rails' if ActiveAdmin::DependencyChecker.rails_3_1?
4
+
5
+ module ActiveAdmin
6
+ module Sass
7
+ module Helpers
8
+
9
+ if ActiveAdmin::DependencyChecker.rails_3_1?
10
+ include ::Sass::Rails::Helpers
11
+ end
12
+
13
+ # Provides a helper in SASS to ensure that the paths to image
14
+ # assets are always correct across Rails versions.
15
+ #
16
+ # Example:
17
+ #
18
+ # background: url(active_admin_image_path('some_image.png')) 0 0 repeat-x;
19
+ #
20
+ # Will result in:
21
+ #
22
+ # background: url("/images/active_admin/some_image.png") 0 0 repeat-x;
23
+ #
24
+ # Or in Rails 3.1 with asset pipeline enebaled:
25
+ #
26
+ # background: url("/assets/active_admin/some_image.png") 0 0 repeat-x;
27
+ #
28
+ # @param [Sass::Script::String] asset the path to the image after */active_admin/
29
+ #
30
+ # @return [Sass::Script::String] path to the image
31
+ #
32
+ def active_admin_image_path(asset)
33
+ if ActiveAdmin.use_asset_pipeline?
34
+ asset_path(::Sass::Script::String.new("active_admin/#{asset.value}"), ::Sass::Script::String.new('image'))
35
+ else
36
+ ::Sass::Script::String.new("/images/active_admin/#{asset.value}", true)
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+
44
+ # Install for use in Sass
45
+ Sass::Script::Functions.send :include, ActiveAdmin::Sass::Helpers
@@ -3,15 +3,29 @@ module ActiveAdmin
3
3
 
4
4
  attr_reader :name, :scope_method, :id, :scope_block
5
5
 
6
+ # Create a Scope
7
+ #
8
+ # Examples:
9
+ #
10
+ # Scope.new(:published)
11
+ # # => Scope with name 'Published' and scope method :published
12
+ #
13
+ # Scope.new('Published', :public)
14
+ # # => Scope with name 'Published' and scope method :public
15
+ #
16
+ # Scope.new('Published') { |articles| articles.where(:published => true) }
17
+ # # => Scope with name 'Published' using a block to scope
18
+ #
6
19
  def initialize(name, method = nil, &block)
7
20
  @name = name.to_s.titleize
8
- @scope_method = method || name.to_sym
21
+ @scope_method = method
22
+ # Scope ':all' means no scoping
23
+ @scope_method ||= name.to_sym unless name.to_sym == :all
9
24
  @id = @name.gsub(' ', '').underscore
10
25
  if block_given?
11
26
  @scope_method = nil
12
27
  @scope_block = block
13
28
  end
14
29
  end
15
-
16
30
  end
17
31
  end
@@ -0,0 +1,41 @@
1
+ module ActiveAdmin
2
+
3
+ class SidebarSection
4
+ include ActiveAdmin::OptionalDisplay
5
+
6
+ attr_accessor :name, :options, :block
7
+
8
+ def initialize(name, options = {}, &block)
9
+ @name, @options, @block = name, options, block
10
+ normalize_display_options!
11
+ end
12
+
13
+ # The id gets used for the div in the view
14
+ def id
15
+ name.to_s.downcase.underscore + '_sidebar_section'
16
+ end
17
+
18
+ def icon?
19
+ options[:icon]
20
+ end
21
+
22
+ def icon
23
+ options[:icon] if icon?
24
+ end
25
+
26
+ # The title gets displayed within the section in the view
27
+ def title
28
+ begin
29
+ I18n.t!("active_admin.sidebars.#{name.to_s}")
30
+ rescue I18n::MissingTranslationData
31
+ name.to_s.titlecase
32
+ end
33
+ end
34
+
35
+ # If a block is not passed in, the name of the partial to render
36
+ def partial_name
37
+ options[:partial] || "#{name.to_s.downcase.gsub(' ', '_')}_sidebar"
38
+ end
39
+ end
40
+
41
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveAdmin
2
- VERSION = '0.2.2'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -4,18 +4,20 @@ module ActiveAdmin
4
4
  class ViewFactory < AbstractViewFactory
5
5
 
6
6
  # Register Helper Renderers
7
- register :global_navigation => ActiveAdmin::Views::TabsRenderer,
7
+ register :global_navigation => ActiveAdmin::Views::TabbedNavigation,
8
8
  :action_items => ActiveAdmin::Views::ActionItems,
9
9
  :header => ActiveAdmin::Views::HeaderRenderer,
10
10
  :dashboard_section => ActiveAdmin::Views::DashboardSection,
11
- :index_scopes => ActiveAdmin::Views::Scopes
11
+ :index_scopes => ActiveAdmin::Views::Scopes,
12
+ :blank_slate => ActiveAdmin::Views::BlankSlate
12
13
 
13
14
  # Register All The Pages
14
15
  register :dashboard_page => ActiveAdmin::Views::Pages::Dashboard,
15
16
  :index_page => ActiveAdmin::Views::Pages::Index,
16
17
  :show_page => ActiveAdmin::Views::Pages::Show,
17
18
  :new_page => ActiveAdmin::Views::Pages::New,
18
- :edit_page => ActiveAdmin::Views::Pages::Edit
19
+ :edit_page => ActiveAdmin::Views::Pages::Edit,
20
+ :layout => ActiveAdmin::Views::Pages::Layout
19
21
 
20
22
  end
21
23
  end
@@ -5,6 +5,7 @@ module ActiveAdmin
5
5
  Dir[File.expand_path('../view_helpers', __FILE__) + "/*.rb"].each{|f| require f }
6
6
 
7
7
  include AssignsWithIndifferentAccessHelper
8
+ include ActiveAdminApplicationHelper
8
9
  include RendererHelper
9
10
  include AutoLinkHelper
10
11
  include BreadcrumbHelper
@@ -12,9 +13,7 @@ module ActiveAdmin
12
13
  include IconHelper
13
14
  include MethodOrProcHelper
14
15
  include SidebarHelper
15
- include TableHelper
16
16
  include FormHelper
17
- include StatusTagHelper
18
17
  include FilterFormHelper
19
18
  include TitleHelper
20
19
  include ViewFactoryHelper
@@ -0,0 +1,12 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module ActiveAdminApplicationHelper
4
+
5
+ # Returns the current Active Admin application instance
6
+ def active_admin_application
7
+ ActiveAdmin.application
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -32,7 +32,8 @@ module ActiveAdmin
32
32
  if respond_to?(:active_admin_config) && active_admin_config
33
33
  active_admin_config.namespace
34
34
  else
35
- ActiveAdmin::Namespace.new(ActiveAdmin.default_namespace)
35
+ # Return a default namespace if none exists
36
+ active_admin_application.find_or_create_namespace(active_admin_application.default_namespace)
36
37
  end
37
38
  end
38
39
 
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
  def display_name_method_for(resource)
6
6
  @@display_name_methods_cache ||= {}
7
7
  @@display_name_methods_cache[resource.class] ||=
8
- ActiveAdmin.display_name_methods.find{|method| resource.respond_to? method }
8
+ active_admin_application.display_name_methods.find{|method| resource.respond_to? method }
9
9
  end
10
10
 
11
11
  # Tries to display an object with as friendly of output
@@ -9,8 +9,9 @@ module ActiveAdmin
9
9
  options[:url] ||= collection_path
10
10
  options[:html] ||= {}
11
11
  options[:html][:method] = :get
12
+ options[:html][:class] ||= "filter_form"
12
13
  options[:as] = :q
13
- clear_link = link_to("Clear Filters", "#", :class => "clear_filters_btn")
14
+ clear_link = link_to(I18n.t('active_admin.clear_filters'), "#", :class => "clear_filters_btn")
14
15
  form_for search, options do |f|
15
16
  filters.each do |filter_options|
16
17
  filter_options = filter_options.dup
@@ -19,8 +20,8 @@ module ActiveAdmin
19
20
  end
20
21
 
21
22
  buttons = content_tag :div, :class => "buttons" do
22
- f.submit("Filter") +
23
- clear_link +
23
+ f.submit(I18n.t('active_admin.filter')) +
24
+ clear_link +
24
25
  hidden_field_tag("order", params[:order]) +
25
26
  hidden_field_tag("scope", params[:scope])
26
27
  end
@@ -35,12 +36,13 @@ module ActiveAdmin
35
36
  # This form builder defines methods to build filter forms such
36
37
  # as the one found in the sidebar of the index page of a standard resource.
37
38
  class FilterFormBuilder < FormBuilder
38
-
39
+
39
40
  def filter(method, options = {})
40
41
  return "" if method.nil? || method == ""
41
42
  options[:as] ||= default_filter_type(method)
42
43
  return "" unless options[:as]
43
44
  field_type = options.delete(:as)
45
+ options[:label] ||= default_filter_label(method)
44
46
  content = with_new_form_buffer do
45
47
  send("filter_#{field_type}_input", method, options)
46
48
  end
@@ -52,7 +54,7 @@ module ActiveAdmin
52
54
  def filter_string_input(method, options = {})
53
55
  field_name = "#{method}_contains"
54
56
 
55
- [ label(field_name, "Search #{method.to_s.titlecase}"),
57
+ [ label(field_name, I18n.t('active_admin.search_field', :field => options[:label])),
56
58
  text_field(field_name)
57
59
  ].join("\n").html_safe
58
60
  end
@@ -61,9 +63,9 @@ module ActiveAdmin
61
63
  gt_field_name = "#{method}_gte"
62
64
  lt_field_name = "#{method}_lte"
63
65
 
64
- [ label(gt_field_name, method.to_s.titlecase),
66
+ [ label(gt_field_name, options[:label]),
65
67
  filter_date_text_field(gt_field_name),
66
- " - ",
68
+ template.content_tag(:span, "-", :class => "seperator"),
67
69
  filter_date_text_field(lt_field_name)
68
70
  ].join("\n").html_safe
69
71
  end
@@ -76,7 +78,7 @@ module ActiveAdmin
76
78
  def filter_numeric_input(method, options = {})
77
79
  filters = numeric_filters_for_method(method, options.delete(:filters) || default_numeric_filters)
78
80
  current_filter = current_numeric_scope(filters)
79
- filter_select = @template.select_tag '', @template.options_for_select(filters, current_filter),
81
+ filter_select = @template.select_tag '', @template.options_for_select(filters, current_filter),
80
82
  :onchange => "document.getElementById('#{method}_numeric').name = 'q[' + this.value + ']';"
81
83
  filter_input = text_field current_filter, :size => 10, :id => "#{method}_numeric"
82
84
 
@@ -86,7 +88,7 @@ module ActiveAdmin
86
88
  filter_input
87
89
  ].join("\n").html_safe
88
90
  end
89
-
91
+
90
92
  def numeric_filters_for_method(method, filters)
91
93
  filters.collect{|scope| [scope[0], [method,scope[1]].join("_") ] }
92
94
  end
@@ -98,7 +100,7 @@ module ActiveAdmin
98
100
  end
99
101
 
100
102
  def default_numeric_filters
101
- [['Equal To', 'eq'], ['Greater Than', 'gt'], ['Less Than', 'lt']]
103
+ [[I18n.t('active_admin.equal_to'), 'eq'], [I18n.t('active_admin.greater_than'), 'gt'], [I18n.t('active_admin.less_than'), 'lt']]
102
104
  end
103
105
 
104
106
  def filter_select_input(method, options = {})
@@ -106,8 +108,8 @@ module ActiveAdmin
106
108
  input_name = (generate_association_input_name(method).to_s + "_eq").to_sym
107
109
  collection = find_collection_for_column(association_name, options)
108
110
 
109
- [ label(input_name, method.to_s.titlecase),
110
- select(input_name, collection, options.merge(:include_blank => 'Any'))
111
+ [ label(input_name, options[:label]),
112
+ select(input_name, collection, options.merge(:include_blank => I18n.t('active_admin.any')))
111
113
  ].join("\n").html_safe
112
114
  end
113
115
 
@@ -123,7 +125,7 @@ module ActiveAdmin
123
125
  end.join("\n").html_safe
124
126
  end
125
127
 
126
- [ label(input_name, method.to_s.titlecase),
128
+ [ label(input_name, options[:label]),
127
129
  checkboxes
128
130
  ].join("\n").html_safe
129
131
  end
@@ -159,6 +161,16 @@ module ActiveAdmin
159
161
  end
160
162
  end
161
163
 
164
+ # Returns the default label for a given attribute
165
+ # Will use ActiveModel I18n if possible
166
+ def default_filter_label(method)
167
+ if @object.base.respond_to?(:human_attribute_name)
168
+ @object.base.human_attribute_name(method)
169
+ else
170
+ method.to_s.titlecase
171
+ end
172
+ end
173
+
162
174
  # Returns the column for an attribute on the object being searched
163
175
  # if it exists. Otherwise returns nil
164
176
  def column_for(method)
@@ -170,5 +182,5 @@ module ActiveAdmin
170
182
  @object.base.reflect_on_association(method) if @object.base.respond_to?(:reflect_on_association)
171
183
  end
172
184
 
173
- end
185
+ end
174
186
  end
@@ -3,6 +3,7 @@ module ActiveAdmin
3
3
  module FormHelper
4
4
 
5
5
  def active_admin_form_for(resource, options = {}, &block)
6
+ options = Marshal.load( Marshal.dump(options) )
6
7
  options[:builder] ||= ActiveAdmin::FormBuilder
7
8
  semantic_form_for resource, options, &block
8
9
  end
@@ -3,7 +3,7 @@ module ActiveAdmin
3
3
  module ViewFactoryHelper
4
4
 
5
5
  def view_factory
6
- ActiveAdmin.view_factory
6
+ active_admin_application.view_factory
7
7
  end
8
8
 
9
9
  end
@@ -35,11 +35,11 @@ module ActiveAdmin
35
35
  end
36
36
 
37
37
  def header_content_for(attr)
38
- attr.to_s.titleize
38
+ @record.class.respond_to?(:human_attribute_name) ? @record.class.human_attribute_name(attr).titleize : attr.to_s.titleize
39
39
  end
40
40
 
41
41
  def empty_value
42
- span "Empty", :class => "empty"
42
+ span I18n.t('active_admin.empty'), :class => "empty"
43
43
  end
44
44
 
45
45
  def content_for(attr_or_proc)
@@ -0,0 +1,17 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ # Build a Blank Slate
4
+ class BlankSlate < ActiveAdmin::Component
5
+ builder_method :blank_slate
6
+
7
+ def default_class_name
8
+ 'blank_slate_container'
9
+ end
10
+
11
+ def build(content)
12
+ super(span(content.html_safe, :class => "blank_slate"))
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -36,9 +36,7 @@ module ActiveAdmin
36
36
  end
37
37
 
38
38
  def to_html
39
- html = super
40
- p html
41
- html.to_s + "<div style=\"clear:both;\"></div>".html_safe
39
+ super.to_s + "<div style=\"clear:both;\"></div>".html_safe
42
40
  end
43
41
 
44
42
  end
@@ -7,7 +7,7 @@ module ActiveAdmin
7
7
  #
8
8
  # paginated_collection collection, :entry_name => "Post" do
9
9
  # div do
10
- # h2 "Inside the
10
+ # h2 "Inside the
11
11
  # end
12
12
  # end
13
13
  #
@@ -26,14 +26,14 @@ module ActiveAdmin
26
26
 
27
27
  # Builds a new paginated collection component
28
28
  #
29
- # @param [Array] collection A "paginated" collection from will_paginate
29
+ # @param [Array] collection A "paginated" collection from kaminari
30
30
  # @param [Hash] options These options will be passed on to the page_entries_info
31
- # method supplied in will_paginate.
31
+ # method.
32
32
  # Useful keys:
33
- # :entry_name - The name to dislpay for this resource collection
33
+ # :entry_name - The name to display for this resource collection
34
34
  def build(collection, options = {})
35
35
  @collection = collection
36
- div(page_entries_info(@collection, options), :class => "pagination_information")
36
+ div(page_entries_info(options).html_safe, :class => "pagination_information")
37
37
  @contents = div(:class => "paginated_collection_contents")
38
38
  build_pagination_with_formats
39
39
  @built = true
@@ -58,15 +58,33 @@ module ActiveAdmin
58
58
  end
59
59
 
60
60
  def build_pagination
61
- text_node will_paginate(collection, :previous_label => "Previous", :next_label => "Next")
61
+ text_node paginate(collection)
62
62
  end
63
63
 
64
64
  # TODO: Refactor to new HTML DSL
65
65
  def build_download_format_links(formats = [:csv, :xml, :json])
66
66
  links = formats.collect do |format|
67
- link_to format.to_s.upcase, { :format => format}.merge(request.query_parameters.except(:commit, :format))
67
+ link_to format.to_s.upcase, { :format => format}.merge(request.query_parameters.except(:commit, :format))
68
+ end
69
+ text_node [I18n.t('active_admin.download'), links].flatten.join("&nbsp;").html_safe
70
+ end
71
+
72
+ # modified from will_paginate
73
+ def page_entries_info(options = {})
74
+ entry_name = options[:entry_name] ||
75
+ (collection.empty?? 'entry' : collection.first.class.name.underscore.sub('_', ' '))
76
+
77
+ if collection.num_pages < 2
78
+ case collection.size
79
+ when 0; I18n.t('active_admin.pagination.empty', :model => entry_name.pluralize)
80
+ when 1; I18n.t('active_admin.pagination.one', :model => entry_name)
81
+ else; I18n.t('active_admin.pagination.one_page', :model => entry_name.pluralize, :n => collection.size)
82
+ end
83
+ else
84
+ offset = collection.current_page * active_admin_application.default_per_page
85
+ total = collection.total_count
86
+ I18n.t('active_admin.pagination.multiple', :model => entry_name.pluralize, :from => (offset - active_admin_application.default_per_page + 1), :to => offset > total ? total : offset, :total => total)
68
87
  end
69
- text_node ["Download:", links].flatten.join("&nbsp;").html_safe
70
88
  end
71
89
 
72
90
  end