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.
- data/.gitignore +34 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +177 -0
- data/Gemfile +21 -32
- data/Guardfile +8 -0
- data/README.rdoc +75 -14
- data/Rakefile +7 -100
- data/activeadmin.gemspec +21 -353
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/loading.gif +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow.gif +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow_dark.gif +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js +12 -0
- data/{lib/generators/active_admin/install/templates/active_admin_vendor.js → app/assets/javascripts/active_admin/vendor.js} +0 -0
- data/{lib/active_admin/stylesheets/active_admin.scss → app/assets/stylesheets/active_admin/_base.css.scss} +58 -82
- data/{lib/active_admin/stylesheets/active_admin/_forms.scss → app/assets/stylesheets/active_admin/_forms.css.scss} +94 -5
- data/{lib/active_admin/stylesheets/active_admin/_header.scss → app/assets/stylesheets/active_admin/_header.css.scss} +13 -11
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/{lib/active_admin/stylesheets/active_admin/_typography.scss → app/assets/stylesheets/active_admin/_typography.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/_comments.scss → app/assets/stylesheets/active_admin/components/_comments.css.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_all.scss → app/assets/stylesheets/active_admin/mixins/_all.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss → app/assets/stylesheets/active_admin/mixins/_buttons.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss → app/assets/stylesheets/active_admin/mixins/_gradients.css.scss} +8 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_icons.scss → app/assets/stylesheets/active_admin/mixins/_icons.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_reset.scss → app/assets/stylesheets/active_admin/mixins/_reset.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss → app/assets/stylesheets/active_admin/mixins/_rounded.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_sections.scss → app/assets/stylesheets/active_admin/mixins/_sections.css.scss} +9 -2
- data/{lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss → app/assets/stylesheets/active_admin/mixins/_shadows.css.scss} +1 -1
- data/{lib/active_admin/stylesheets/active_admin/mixins/_variables.scss → app/assets/stylesheets/active_admin/mixins/_variables.css.scss} +12 -3
- data/{lib/active_admin/views/templates/active_admin_dashboard → app/views/active_admin/dashboard}/index.html.arb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/reset_password_instructions.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/unlock_instructions.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/edit.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/new.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/sessions/new.html.erb +1 -1
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/shared/_links.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/unlocks/new.html.erb +0 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/edit.html.arb +0 -0
- data/app/views/active_admin/resource/index.csv.erb +20 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/index.html.arb +0 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/new.html.arb +0 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/show.html.arb +0 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/{lib/active_admin/views/templates → app/views}/layouts/active_admin_logged_out.html.erb +8 -4
- data/docs/0-installation.md +50 -0
- data/docs/1-general-configuration.md +43 -0
- data/docs/2-resource-customization.md +35 -0
- data/docs/3-index-pages.md +55 -0
- data/docs/3-index-pages/index-as-block.md +16 -0
- data/docs/3-index-pages/index-as-blog.md +61 -0
- data/docs/3-index-pages/index-as-grid.md +21 -0
- data/docs/3-index-pages/index-as-table.md +90 -0
- data/docs/4-csv-format.md +14 -0
- data/docs/5-forms.md +39 -0
- data/docs/6-show-screens.md +22 -0
- data/docs/7-sidebars.md +35 -0
- data/docs/8-custom-actions.md +123 -0
- data/features/comments/commenting.feature +31 -4
- data/features/edit_page.feature +30 -1
- data/features/index/filters.feature +35 -0
- data/features/index/format_as_csv.feature +46 -0
- data/features/index/formats.feature +2 -0
- data/features/index/index_as_block.feature +1 -1
- data/features/index/index_as_grid.feature +1 -1
- data/features/index/index_as_table.feature +2 -0
- data/features/index/index_blank_slate.feature +56 -0
- data/features/index/pagination.feature +0 -6
- data/features/registering_assets.feature +2 -2
- data/features/sidebar_sections.feature +7 -8
- data/features/specifying_actions.feature +72 -1
- data/features/step_definitions/action_item_steps.rb +2 -2
- data/features/step_definitions/additional_web_steps.rb +26 -16
- data/features/step_definitions/attribute_steps.rb +5 -7
- data/features/step_definitions/configuration_steps.rb +9 -9
- data/features/step_definitions/factory_steps.rb +4 -3
- data/features/step_definitions/format_steps.rb +29 -1
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/menu_steps.rb +2 -2
- data/features/step_definitions/sidebar_steps.rb +1 -5
- data/features/step_definitions/user_steps.rb +8 -2
- data/features/step_definitions/web_steps.rb +82 -90
- data/features/sti_resource.feature +12 -0
- data/features/support/env.rb +12 -10
- data/features/support/paths.rb +2 -0
- data/features/support/selectors.rb +45 -0
- data/lib/active_admin.rb +33 -263
- data/lib/active_admin/application.rb +228 -0
- data/lib/active_admin/arbre.rb +10 -10
- data/lib/active_admin/arbre/{html.rb → builder.rb} +29 -2
- data/lib/active_admin/arbre/context.rb +8 -0
- data/lib/active_admin/arbre/{attributes.rb → html/attributes.rb} +0 -0
- data/lib/active_admin/arbre/{class_list.rb → html/class_list.rb} +0 -0
- data/lib/active_admin/arbre/{collection.rb → html/collection.rb} +0 -0
- data/lib/active_admin/arbre/{document.rb → html/document.rb} +0 -0
- data/lib/active_admin/arbre/{element.rb → html/element.rb} +6 -6
- data/lib/active_admin/arbre/{html5_elements.rb → html/html5_elements.rb} +0 -0
- data/lib/active_admin/arbre/{tag.rb → html/tag.rb} +0 -0
- data/lib/active_admin/arbre/{text_node.rb → html/text_node.rb} +0 -0
- data/lib/active_admin/asset_registration.rb +1 -1
- data/lib/active_admin/callbacks.rb +5 -3
- data/lib/active_admin/comments.rb +3 -3
- data/lib/active_admin/comments/comment.rb +6 -0
- data/lib/active_admin/comments/configuration.rb +8 -6
- data/lib/active_admin/comments/namespace_helper.rb +1 -1
- data/lib/active_admin/comments/views/active_admin_comments.rb +1 -1
- data/lib/active_admin/csv_builder.rb +45 -0
- data/lib/active_admin/dashboards.rb +1 -1
- data/lib/active_admin/dashboards/dashboard_controller.rb +3 -10
- data/lib/active_admin/dependency_checker.rb +28 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +14 -3
- data/lib/active_admin/dsl.rb +26 -4
- data/lib/active_admin/engine.rb +4 -0
- data/lib/active_admin/form_builder.rb +18 -9
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +70 -0
- data/lib/active_admin/locales/cs.yml +34 -0
- data/lib/active_admin/locales/da.yml +28 -0
- data/lib/active_admin/locales/en.yml +40 -0
- data/lib/active_admin/locales/es.yml +40 -0
- data/lib/active_admin/locales/fr.yml +40 -0
- data/lib/active_admin/locales/it.yml +39 -0
- data/lib/active_admin/locales/pl.yml +34 -0
- data/lib/active_admin/locales/pt-BR.yml +41 -0
- data/lib/active_admin/locales/ru.yml +40 -0
- data/lib/active_admin/locales/zh_cn.yml +40 -0
- data/lib/active_admin/menu_item.rb +6 -0
- data/lib/active_admin/namespace.rb +14 -5
- data/lib/active_admin/reloader.rb +30 -0
- data/lib/active_admin/renderer.rb +1 -1
- data/lib/active_admin/resource.rb +45 -88
- data/lib/active_admin/resource/action_items.rb +88 -0
- data/lib/active_admin/resource/menu.rb +45 -0
- data/lib/active_admin/resource/naming.rb +46 -0
- data/lib/active_admin/resource/scopes.rb +33 -0
- data/lib/active_admin/resource/sidebars.rb +36 -0
- data/lib/active_admin/resource_controller.rb +32 -37
- data/lib/active_admin/resource_controller/action_builder.rb +1 -1
- data/lib/active_admin/resource_controller/actions.rb +66 -40
- data/lib/active_admin/resource_controller/callbacks.rb +1 -1
- data/lib/active_admin/resource_controller/collection.rb +9 -14
- data/lib/active_admin/resource_controller/filters.rb +1 -1
- data/lib/active_admin/resource_controller/form.rb +1 -1
- data/lib/active_admin/resource_controller/menu.rb +1 -1
- data/lib/active_admin/resource_controller/page_configurations.rb +2 -2
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/resource_controller/sidebars.rb +1 -21
- data/lib/active_admin/router.rb +85 -0
- data/lib/active_admin/sass/active_admin.scss +3 -0
- data/lib/active_admin/sass/css_loader.rb +16 -0
- data/lib/active_admin/sass/helpers.rb +45 -0
- data/lib/active_admin/scope.rb +16 -2
- data/lib/active_admin/sidebar_section.rb +41 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +5 -3
- data/lib/active_admin/view_helpers.rb +1 -2
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
- data/lib/active_admin/view_helpers/display_helper.rb +1 -1
- data/lib/active_admin/view_helpers/filter_form_helper.rb +26 -14
- data/lib/active_admin/view_helpers/form_helper.rb +1 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
- data/lib/active_admin/views/components/attributes_table.rb +2 -2
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +1 -3
- data/lib/active_admin/views/components/paginated_collection.rb +26 -8
- data/lib/active_admin/views/components/scopes.rb +13 -8
- data/lib/active_admin/views/components/sidebar_section.rb +1 -3
- data/lib/active_admin/views/components/status_tag.rb +55 -0
- data/lib/active_admin/views/components/table_for.rb +25 -6
- data/lib/active_admin/views/header_renderer.rb +20 -4
- data/lib/active_admin/views/index_as_block.rb +12 -7
- data/lib/active_admin/views/index_as_blog.rb +61 -21
- data/lib/active_admin/views/index_as_grid.rb +22 -1
- data/lib/active_admin/views/index_as_table.rb +97 -6
- data/lib/active_admin/views/pages/base.rb +20 -9
- data/lib/active_admin/views/pages/dashboard.rb +7 -4
- data/lib/active_admin/views/pages/edit.rb +3 -2
- data/lib/active_admin/views/pages/index.rb +30 -5
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/new.rb +3 -2
- data/lib/active_admin/views/pages/show.rb +1 -1
- data/lib/active_admin/views/tabbed_navigation.rb +94 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
- data/lib/generators/active_admin/install/install_generator.rb +2 -4
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +26 -4
- data/lib/generators/active_admin/install/templates/dashboards.rb +4 -2
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +2 -2
- data/script/local +44 -0
- data/script/use_rails +46 -0
- data/spec/integration/belongs_to_spec.rb +1 -1
- data/spec/integration/default_namespace.rb +77 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/spec_helper.rb +21 -11
- data/spec/support/detect_rails_version.rb +10 -0
- data/spec/support/integration_example_group.rb +1 -1
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +1 -1
- data/spec/support/rails_template_with_data.rb +2 -1
- data/spec/support/templates/cucumber.rb +0 -4
- data/spec/unit/active_admin_spec.rb +8 -44
- data/spec/unit/application_spec.rb +78 -0
- data/spec/unit/arbre/context_spec.rb +22 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +2 -2
- data/spec/unit/arbre/html/element_spec.rb +2 -3
- data/spec/unit/arbre/html/tag_attributes_spec.rb +2 -2
- data/spec/unit/arbre/html/tag_spec.rb +2 -2
- data/spec/unit/arbre/html_spec.rb +2 -3
- data/spec/unit/auto_link_spec.rb +2 -1
- data/spec/unit/belongs_to_spec.rb +2 -1
- data/spec/unit/comments_spec.rb +43 -39
- data/spec/unit/controller_filters_spec.rb +11 -3
- data/spec/unit/csv_builder_spec.rb +83 -0
- data/spec/unit/devise_spec.rb +66 -0
- data/spec/unit/display_name_spec.rb +2 -2
- data/spec/unit/filter_form_builder_spec.rb +6 -3
- data/spec/unit/form_builder_spec.rb +20 -2
- data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_item_spec.rb +6 -0
- data/spec/unit/namespace_spec.rb +68 -19
- data/spec/unit/rails_spec.rb +43 -0
- data/spec/unit/registration_spec.rb +18 -27
- data/spec/unit/reloader_spec.rb +28 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +80 -0
- data/spec/unit/resource/naming_spec.rb +64 -0
- data/spec/unit/resource/scopes_spec.rb +30 -0
- data/spec/unit/resource/sidebars_spec.rb +50 -0
- data/spec/unit/resource_controller/collection_spec.rb +1 -1
- data/spec/unit/resource_controller_spec.rb +29 -24
- data/spec/unit/resource_spec.rb +78 -94
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +11 -1
- data/spec/unit/view_factory_spec.rb +4 -1
- data/spec/unit/{components → views/components}/attributes_table_spec.rb +2 -2
- data/spec/unit/views/components/blank_slate_spec.rb +15 -0
- data/spec/unit/{components → views/components}/columns_spec.rb +2 -2
- data/spec/unit/{components → views/components}/panel_spec.rb +1 -3
- data/spec/unit/{components → views/components}/sidebar_section_spec.rb +3 -3
- data/spec/unit/views/components/status_tag_spec.rb +79 -0
- data/spec/unit/{components → views/components}/table_for_spec.rb +2 -1
- data/spec/unit/views/pages/layout_spec.rb +22 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
- data/tasks/docs.rake +39 -0
- data/tasks/test.rake +55 -0
- data/tasks/yard.rake +6 -0
- metadata +310 -189
- data/CHANGELOG.rdoc +0 -76
- data/lib/active_admin/action_items.rb +0 -37
- data/lib/active_admin/sidebar.rb +0 -39
- data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +0 -13
- data/lib/active_admin/view_helpers/status_tag_helper.rb +0 -13
- data/lib/active_admin/view_helpers/table_helper.rb +0 -12
- data/lib/active_admin/views/tabs_renderer.rb +0 -52
- data/lib/active_admin/views/templates/active_admin_default/index.csv.erb +0 -2
- data/lib/active_admin/views/templates/layouts/active_admin.html.erb +0 -39
- data/lib/generators/active_admin/install/templates/active_admin.js +0 -51
- data/spec/controllers/index_as_csv_spec.rb +0 -35
- data/spec/unit/action_items_spec.rb +0 -27
- data/spec/unit/tabs_renderer_spec.rb +0 -56
@@ -0,0 +1,55 @@
|
|
1
|
+
# Customizing the Index Page
|
2
|
+
|
3
|
+
Filtering and listing resources is one of the most important tasks for
|
4
|
+
administering a web application. Active Admin provides many different tools for
|
5
|
+
you to build a compelling interface into your data for the admin staff.
|
6
|
+
|
7
|
+
Built in, Active Admin has the following index renderers:
|
8
|
+
|
9
|
+
* *Table*: A table drawn with each row being a resource ([View Table Docs](3-index-pages/index-as-table.md))
|
10
|
+
* *Grid*: A set of rows and columns each cell being a resource ([View Grid Docs](3-index-pages/index-as-grid.md))
|
11
|
+
* *Blocks*: A set of rows (not tabular) each row being a resource ([View Blocks Docs](3-index-pages/index-as-blocks.md))
|
12
|
+
* *Blog*: A title and body content, similar to a blog index ([View Blog Docs](3-index-pages/index-as-blog.md))
|
13
|
+
|
14
|
+
All index pages also support scopes, filters, pagination, action items, and
|
15
|
+
sidebar sections.
|
16
|
+
|
17
|
+
## Index Filters
|
18
|
+
|
19
|
+
By default the index screen includes a "Filters" sidebar on the right hand side
|
20
|
+
with a filter for each attribute of the registered model. You can customize the
|
21
|
+
filters that are displayed as well as the type of widgets they use.
|
22
|
+
|
23
|
+
To display a filter for an attribute, use the filter method
|
24
|
+
|
25
|
+
ActiveAdmin.register Post do
|
26
|
+
filter :title
|
27
|
+
end
|
28
|
+
|
29
|
+
Out of the box, Active Admin supports the following filter types:
|
30
|
+
|
31
|
+
* *:string* - A search field
|
32
|
+
* *:date_range* - A start and end date field with calendar inputs
|
33
|
+
* *:numeric* - A drop down for selecting "Equal To", "Greater Than" or "Less
|
34
|
+
Than" and an input for a value.
|
35
|
+
* *:select* - A drop down which filters based on a selected item in a collection
|
36
|
+
or all.
|
37
|
+
* *:check_boxes* - A list of check boxes users can turn on and off to filter
|
38
|
+
|
39
|
+
By default, Active Admin will pick the most relevant filter based on the
|
40
|
+
attribute type. You can force the type by passing the :as option.
|
41
|
+
|
42
|
+
filter :author, :as => :check_boxes
|
43
|
+
|
44
|
+
The :check_boxes and :select types accept options for the collection. By default
|
45
|
+
it attempts to create a collection based on an association. But you can pass in
|
46
|
+
the collection as a proc to be called at render time.
|
47
|
+
|
48
|
+
# Will call available
|
49
|
+
filter :author, :as => :check_boxes, :collection => proc { Author.all }
|
50
|
+
|
51
|
+
You can change the filter label by passing a label option:
|
52
|
+
|
53
|
+
filter :author, :label => 'Author'
|
54
|
+
|
55
|
+
By default, Active Admin will try to use ActiveModel I18n to determine the label.
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<!-- Please don't edit this file. It will be clobbered. -->
|
2
|
+
|
3
|
+
# Index as a Block
|
4
|
+
|
5
|
+
If you want to fully customize the display of your resources on the index
|
6
|
+
screen, Index as a Block allows you to render a block of content for each
|
7
|
+
resource.
|
8
|
+
|
9
|
+
index :as => :block do |product|
|
10
|
+
div :for => product do
|
11
|
+
h2 auto_link(product.title)
|
12
|
+
div do
|
13
|
+
simple_format product.description
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
<!-- Please don't edit this file. It will be clobbered. -->
|
2
|
+
|
3
|
+
# Index as Blog
|
4
|
+
|
5
|
+
Render your index page as a set of posts. The post has two main options:
|
6
|
+
title and body.
|
7
|
+
|
8
|
+
index :as => :blog do
|
9
|
+
title :my_title # Calls #my_title on each resource
|
10
|
+
body :my_body # Calls #my_body on each resource
|
11
|
+
end
|
12
|
+
|
13
|
+
## Post Title
|
14
|
+
|
15
|
+
The title is the content that will be rendered within a link to the
|
16
|
+
resource. There are two main ways to set the content for the title
|
17
|
+
|
18
|
+
First, you can pass in a method to be called on your
|
19
|
+
resource. For example:
|
20
|
+
|
21
|
+
index :as => :blog do
|
22
|
+
title :a_method_to_call
|
23
|
+
end
|
24
|
+
|
25
|
+
This will result in the title of the post being the return value of
|
26
|
+
Resource#a_method_to_call
|
27
|
+
|
28
|
+
Second, you can pass a block to the tile option which will then be
|
29
|
+
used as the contents fo the title. The resource being rendered
|
30
|
+
is passed in to the block. For Example:
|
31
|
+
|
32
|
+
index :as => :blog do
|
33
|
+
title do |post|
|
34
|
+
span post.title, :class => 'title'
|
35
|
+
span post.created_at, :class => 'created_at'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
## Post Body
|
40
|
+
|
41
|
+
The body is rendered underneath the title of each post. The same two
|
42
|
+
style of options work as the Post Title above.
|
43
|
+
|
44
|
+
Call a method on the resource as the body:
|
45
|
+
|
46
|
+
index :as => :blog do
|
47
|
+
title :my_title
|
48
|
+
body :my_body # Return value of #my_body will be the body
|
49
|
+
end
|
50
|
+
|
51
|
+
Or, render a block as the body:
|
52
|
+
|
53
|
+
index :as => :blog do
|
54
|
+
title :my_title
|
55
|
+
body do |post|
|
56
|
+
div truncate(post.title)
|
57
|
+
div :class => 'meta' do
|
58
|
+
span "Post in #{post.categories.join(', ')}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<!-- Please don't edit this file. It will be clobbered. -->
|
2
|
+
|
3
|
+
# Index as a Grid
|
4
|
+
|
5
|
+
Sometimes you want to display the index screen for a set of resources as a grid
|
6
|
+
(possibly a grid of thumbnail images). To do so, use the :grid option for the
|
7
|
+
index block.
|
8
|
+
|
9
|
+
index :as => :grid do |product|
|
10
|
+
link_to(image_tag(product.image_path), admin_products_path(product))
|
11
|
+
end
|
12
|
+
|
13
|
+
The block is rendered within a cell in the grid once for each resource in the
|
14
|
+
collection. The resource is passed into the block for you to use in the view.
|
15
|
+
|
16
|
+
You can customize the number of colums that are rendered using the columns
|
17
|
+
option:
|
18
|
+
|
19
|
+
index :as => :grid, :columns => 5 do |product|
|
20
|
+
link_to(image_tag(product.image_path), admin_products_path(product))
|
21
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
<!-- Please don't edit this file. It will be clobbered. -->
|
2
|
+
|
3
|
+
# Index as a Table
|
4
|
+
|
5
|
+
By default, the index page is a table with each of the models content columns and links to
|
6
|
+
show, edit and delete the object. There are many ways to customize what gets
|
7
|
+
displayed.
|
8
|
+
|
9
|
+
## Defining Columns
|
10
|
+
|
11
|
+
To display an attribute or a method on a resource, simply pass a symbol into the
|
12
|
+
column method:
|
13
|
+
|
14
|
+
index do
|
15
|
+
column :title
|
16
|
+
end
|
17
|
+
|
18
|
+
If the default title does not work for you, pass it as the first argument:
|
19
|
+
|
20
|
+
index do
|
21
|
+
column "My Custom Title", :title
|
22
|
+
end
|
23
|
+
|
24
|
+
Sometimes calling methods just isn't enough and you need to write some view
|
25
|
+
specific code. For example, say we wanted a colum called Title which holds a
|
26
|
+
link to the posts admin screen.
|
27
|
+
|
28
|
+
The column method accepts a block as an argument which will then be rendered
|
29
|
+
within the context of the view for each of the objects in the collection.
|
30
|
+
|
31
|
+
index do
|
32
|
+
column "Title" do |post|
|
33
|
+
link_to post.title, admin_post_path(post)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
The block gets called once for each resource in the collection. The resource gets passed into
|
38
|
+
the block as an argument.
|
39
|
+
|
40
|
+
To setup links to View, Edit and Delete a resource, use the default_actions method:
|
41
|
+
|
42
|
+
index do
|
43
|
+
column :title
|
44
|
+
default_actions
|
45
|
+
end
|
46
|
+
|
47
|
+
Alternatively, you can create a column with custom links:
|
48
|
+
|
49
|
+
index do
|
50
|
+
column :title
|
51
|
+
column "Actions" do |post|
|
52
|
+
link_to "View", admin_post_path(post)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
## Sorting
|
58
|
+
|
59
|
+
When a column is generated from an Active Record attribute, the table is
|
60
|
+
sortable by default. If you are creating a custom column, you may need to give
|
61
|
+
Active Admin a hint for how to sort the table.
|
62
|
+
|
63
|
+
If a column is defined using a block, you must pass the key to turn on sorting. The key
|
64
|
+
is the attribute which gets used to sort objects using Active Record.
|
65
|
+
|
66
|
+
index do
|
67
|
+
column "Title", :sortable => :title do |post|
|
68
|
+
link_to post.title, admin_post_path(post)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
You can turn off sorting on any column by passing false:
|
73
|
+
|
74
|
+
index do
|
75
|
+
column :title, :sortable => false
|
76
|
+
end
|
77
|
+
|
78
|
+
## Showing and Hiding Columns
|
79
|
+
|
80
|
+
The entire index block is rendered within the context of the view, so you can
|
81
|
+
easily do things that show or hide columns based on the current context.
|
82
|
+
|
83
|
+
For example, if you were using CanCan:
|
84
|
+
|
85
|
+
index do
|
86
|
+
column :title, :sortable => false
|
87
|
+
if can? :manage, Post
|
88
|
+
column :some_secret_data
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Customizing the CSV format
|
2
|
+
|
3
|
+
Active Admin provides CSV file downloads on the index screen for each Resource.
|
4
|
+
By default it will render a CSV file with all the content columns of your
|
5
|
+
registered model.
|
6
|
+
|
7
|
+
Customizing the CSV format is as simple as customizing the index page.
|
8
|
+
|
9
|
+
ActiveAdmin.register Post do
|
10
|
+
csv do
|
11
|
+
column :title
|
12
|
+
column("Author") { |post| post.author.full_name }
|
13
|
+
end
|
14
|
+
end
|
data/docs/5-forms.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# Customizing the Form
|
2
|
+
|
3
|
+
Active Admin gives complete control over the output of the form by creating a thin DSL on top of
|
4
|
+
the fabulous DSL created by Formtastic (http://github.com/justinfrench/formtastic).
|
5
|
+
|
6
|
+
ActiveAdmin.register Post do
|
7
|
+
|
8
|
+
form do |f|
|
9
|
+
f.inputs "Details" do
|
10
|
+
f.input :title
|
11
|
+
f.input :published_at, :label => "Publish Post At"
|
12
|
+
f.input :category
|
13
|
+
end
|
14
|
+
f.inputs "Content" do
|
15
|
+
f.input :body
|
16
|
+
end
|
17
|
+
f.buttons
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
Please view the documentation for Formtastic to see all the wonderful things you can do:
|
23
|
+
http://github.com/justinfrench/formtastic
|
24
|
+
|
25
|
+
If you require a more custom form than can be provided through the DSL, you can pass
|
26
|
+
a partial in to render the form yourself.
|
27
|
+
|
28
|
+
For example:
|
29
|
+
|
30
|
+
ActiveAdmin.register Post do
|
31
|
+
form :partial => "form"
|
32
|
+
end
|
33
|
+
|
34
|
+
Then implement app/views/admin/posts/_form.html.erb:
|
35
|
+
|
36
|
+
<%= semantic_form_for [:admin, @post] do |f| %>
|
37
|
+
<%= f.inputs :title, :body %>
|
38
|
+
<%= f.buttons :commit %>
|
39
|
+
<% end %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Customizing the Show Screen
|
2
|
+
|
3
|
+
Customizing the show screen is as simple as implementing the show block:
|
4
|
+
|
5
|
+
ActiveAdmin.register Post do
|
6
|
+
show do
|
7
|
+
h3 post.title
|
8
|
+
div do
|
9
|
+
simple_format post.body
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
The show block is rendered within the context of the view and uses the Arbre HTML DSL. You
|
15
|
+
can also render a partial at any point.
|
16
|
+
|
17
|
+
ActiveAdmin.register Post do
|
18
|
+
show do
|
19
|
+
# renders app/views/admin/posts/_some_partial.html.erb
|
20
|
+
render "some_partial"
|
21
|
+
end
|
22
|
+
end
|
data/docs/7-sidebars.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Sidebar Sections
|
2
|
+
|
3
|
+
To add a sidebar section to all the screen within a section, use the sidebar method:
|
4
|
+
|
5
|
+
sidebar :help do
|
6
|
+
"Need help? Email us at help@example.com"
|
7
|
+
end
|
8
|
+
|
9
|
+
This will generate a sidebar section on each screen of the resource. With the block as
|
10
|
+
the contents of the section. The first argument is the section title.
|
11
|
+
|
12
|
+
You can also use Arbre syntax to define the content.
|
13
|
+
|
14
|
+
sidebar :help do
|
15
|
+
ul do
|
16
|
+
li "Second List First Item"
|
17
|
+
li "Second List Second Item"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Sidebar sections can be rendered on a specific action by using the :only or :except
|
22
|
+
options.
|
23
|
+
|
24
|
+
sidebar :help, :only => :index do
|
25
|
+
"Need help? Email us at help@example.com"
|
26
|
+
end
|
27
|
+
|
28
|
+
If you only pass a symbol, Active Admin will attempt to locate a partial to render.
|
29
|
+
|
30
|
+
# Will render app/views/admin/posts/_help_sidebar.html.erb
|
31
|
+
sidebar :help
|
32
|
+
|
33
|
+
Or you can pass your own custom partial to render.
|
34
|
+
|
35
|
+
sidebar :help, :partial => "custom_help_partial"
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# Custom Controller Actions
|
2
|
+
|
3
|
+
Active Admin allows you to override and modify the underlying controller which
|
4
|
+
is generated for you. There are helpers to add collection and member actions, or
|
5
|
+
you can drop right in to the controller and modify its behavior.
|
6
|
+
|
7
|
+
## Collection Actions
|
8
|
+
|
9
|
+
A collection action is a controller action which operates on the collection of
|
10
|
+
resources. This method adds both the action to the controller as well as
|
11
|
+
generating a route for you.
|
12
|
+
|
13
|
+
To add a collection action, use the collection_action method:
|
14
|
+
|
15
|
+
|
16
|
+
ActiveAdmin.register Post do
|
17
|
+
|
18
|
+
collection_action :import_csv, :method => :post do
|
19
|
+
# Do some CSV importing work here...
|
20
|
+
redirect_to :action => :index, :notice => "CSV imported successfully!"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
This collection action will generate a route at "/admin/posts/import_csv"
|
26
|
+
pointing to the Admin::PostsController#import_csv controller action.
|
27
|
+
|
28
|
+
## Member Actions
|
29
|
+
|
30
|
+
A member action is a controller action which operates on a single resource.
|
31
|
+
|
32
|
+
For example, to add a lock action to a user resource, you would do the
|
33
|
+
following:
|
34
|
+
|
35
|
+
ActiveAdmin.register User do
|
36
|
+
|
37
|
+
member_action :lock, :method => :put do
|
38
|
+
user = User.find(params[:id])
|
39
|
+
user.lock!
|
40
|
+
redirect_to :action => :show, :notice => "Locked!"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
This will generate a route at "/admin/users/:id/lock" pointing to the
|
46
|
+
Admin::UserController#lock controller action.
|
47
|
+
|
48
|
+
## Controller Action HTTP Verb
|
49
|
+
|
50
|
+
The collection_action and member_actions methods both accept the "method"
|
51
|
+
argument to set the HTTP verb for the controller action and route.
|
52
|
+
|
53
|
+
The generated routes will be scoped to the given method you pass in. By default
|
54
|
+
your action will use the :get verb.
|
55
|
+
|
56
|
+
## Rendering in Custom Actions
|
57
|
+
|
58
|
+
Custom controller actions support rendering within the standard Active Admin
|
59
|
+
layout.
|
60
|
+
|
61
|
+
ActiveAdmin.register Post do
|
62
|
+
|
63
|
+
# /admin/posts/:id/comments
|
64
|
+
member_action :comments do
|
65
|
+
@post = Post.find(params[:id])
|
66
|
+
|
67
|
+
# This will render app/views/admin/posts/comments.html.erb
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
If you would like to use the same view syntax as the rest of Active Admin, you
|
73
|
+
can use the Arbre file extension: .arb.
|
74
|
+
|
75
|
+
For example, create app/views/admin/posts/comments.html.arb with:
|
76
|
+
|
77
|
+
table_for assigns[:post].comments do
|
78
|
+
column :id
|
79
|
+
column :author
|
80
|
+
column :body do |comment|
|
81
|
+
simple_format comment.body
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
### Page Titles
|
86
|
+
|
87
|
+
The page title for the custom action will be the internationalized version of
|
88
|
+
the controller action name. For example, a member_action named "upload_csv" will
|
89
|
+
look up a translation key of "active_admin.upload_csv". If none are found, it
|
90
|
+
just title cases the controller action's name.
|
91
|
+
|
92
|
+
If this method doesn't work for your requirements, you can always set the
|
93
|
+
@page_title instance variable in your controller action to customize the page
|
94
|
+
title.
|
95
|
+
|
96
|
+
ActiveAdmin.register Post do
|
97
|
+
|
98
|
+
# /admin/posts/:id/comments
|
99
|
+
member_action :comments do
|
100
|
+
@post = Post.find(params[:id])
|
101
|
+
@page_title = "#{@post.title}: Comments" # Set the page title
|
102
|
+
|
103
|
+
# This will render app/views/admin/posts/comments.html.erb
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
## Modify the Controller
|
109
|
+
|
110
|
+
The generated controller is available to you within the registration block by
|
111
|
+
using the #controller method.
|
112
|
+
|
113
|
+
ActiveAdmin.register Post do
|
114
|
+
|
115
|
+
controller do
|
116
|
+
# This code is evaluated within the controller class
|
117
|
+
|
118
|
+
def define_a_method
|
119
|
+
# Instance method
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|