activeadmin-orac 1.0.0.pre4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +49 -0
- data/.hound.yml +14 -0
- data/.travis.yml +40 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +120 -0
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +144 -0
- data/Gemfile +78 -0
- data/Guardfile +8 -0
- data/LICENSE +20 -0
- data/README.md +102 -0
- data/Rakefile +33 -0
- data/activeadmin.gemspec +31 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +9 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +10 -0
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +22 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +3 -0
- data/app/assets/javascripts/active_admin/jquery_ui.js.erb +11 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +44 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +45 -0
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +42 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +24 -0
- data/app/assets/stylesheets/active_admin/_base.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +333 -0
- data/app/assets/stylesheets/active_admin/_header.scss +156 -0
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +44 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +16 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/_tables.scss +110 -0
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
- data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +10 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/print.scss +288 -0
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/app/views/active_admin/devise/shared/_links.erb +27 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
- data/config/locales/ar.yml +136 -0
- data/config/locales/bg.yml +121 -0
- data/config/locales/bs.yml +122 -0
- data/config/locales/ca.yml +107 -0
- data/config/locales/cs.yml +110 -0
- data/config/locales/da.yml +106 -0
- data/config/locales/de-CH.yml +102 -0
- data/config/locales/de.yml +135 -0
- data/config/locales/el.yml +127 -0
- data/config/locales/en-GB.yml +98 -0
- data/config/locales/en.yml +136 -0
- data/config/locales/es-MX.yml +94 -0
- data/config/locales/es.yml +136 -0
- data/config/locales/fa.yml +120 -0
- data/config/locales/fi.yml +113 -0
- data/config/locales/fr.yml +119 -0
- data/config/locales/he.yml +95 -0
- data/config/locales/hr.yml +124 -0
- data/config/locales/hu.yml +99 -0
- data/config/locales/id.yml +136 -0
- data/config/locales/it.yml +136 -0
- data/config/locales/ja.yml +136 -0
- data/config/locales/ko.yml +121 -0
- data/config/locales/lt.yml +121 -0
- data/config/locales/lv.yml +93 -0
- data/config/locales/nb.yml +121 -0
- data/config/locales/nl.yml +134 -0
- data/config/locales/pl.yml +98 -0
- data/config/locales/pt-BR.yml +136 -0
- data/config/locales/pt-PT.yml +93 -0
- data/config/locales/ro.yml +97 -0
- data/config/locales/ru.yml +140 -0
- data/config/locales/sv-SE.yml +134 -0
- data/config/locales/tr.yml +136 -0
- data/config/locales/uk.yml +137 -0
- data/config/locales/vi.yml +94 -0
- data/config/locales/zh-CN.yml +112 -0
- data/config/locales/zh-TW.yml +136 -0
- data/cucumber.yml +3 -0
- data/docs/0-installation.md +112 -0
- data/docs/1-general-configuration.md +171 -0
- data/docs/10-custom-pages.md +106 -0
- data/docs/11-decorators.md +55 -0
- data/docs/12-arbre-components.md +150 -0
- data/docs/13-authorization-adapter.md +248 -0
- data/docs/14-gotchas.md +116 -0
- data/docs/2-resource-customization.md +422 -0
- data/docs/3-index-pages.md +272 -0
- data/docs/3-index-pages/custom-index.md +31 -0
- data/docs/3-index-pages/index-as-block.md +21 -0
- data/docs/3-index-pages/index-as-blog.md +71 -0
- data/docs/3-index-pages/index-as-grid.md +29 -0
- data/docs/3-index-pages/index-as-table.md +213 -0
- data/docs/4-csv-format.md +58 -0
- data/docs/5-forms.md +172 -0
- data/docs/6-show-pages.md +105 -0
- data/docs/7-sidebars.md +71 -0
- data/docs/8-custom-actions.md +160 -0
- data/docs/9-batch-actions.md +233 -0
- data/docs/README.md +24 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/authorization_pundit.feature +37 -0
- data/features/belongs_to.feature +66 -0
- data/features/breadcrumb.feature +75 -0
- data/features/comments/commenting.feature +171 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +43 -0
- data/features/development_reloading.feature +30 -0
- data/features/edit_page.feature +117 -0
- data/features/favicon.feature +20 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +29 -0
- data/features/i18n.feature +43 -0
- data/features/index/batch_actions.feature +196 -0
- data/features/index/filters.feature +161 -0
- data/features/index/format_as_csv.feature +203 -0
- data/features/index/formats.feature +66 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +69 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +291 -0
- data/features/index/index_blank_slate.feature +83 -0
- data/features/index/index_parameters.feature +75 -0
- data/features/index/index_scope_to.feature +56 -0
- data/features/index/index_scopes.feature +251 -0
- data/features/index/page_title.feature +42 -0
- data/features/index/pagination.feature +63 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +53 -0
- data/features/meta_tags.feature +21 -0
- data/features/new_page.feature +109 -0
- data/features/registering_assets.feature +34 -0
- data/features/registering_pages.feature +148 -0
- data/features/registering_resources.feature +33 -0
- data/features/renamed_resource.feature +32 -0
- data/features/root_to.feature +17 -0
- data/features/show/columns.feature +40 -0
- data/features/show/default_content.feature +44 -0
- data/features/show/page_title.feature +59 -0
- data/features/show/tabs.feature +27 -0
- data/features/sidebar_sections.feature +210 -0
- data/features/site_title.feature +47 -0
- data/features/specifying_actions.feature +93 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/action_link_steps.rb +20 -0
- data/features/step_definitions/additional_web_steps.rb +81 -0
- data/features/step_definitions/asset_steps.rb +15 -0
- data/features/step_definitions/attribute_steps.rb +18 -0
- data/features/step_definitions/batch_action_steps.rb +81 -0
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +3 -0
- data/features/step_definitions/column_steps.rb +8 -0
- data/features/step_definitions/comment_steps.rb +12 -0
- data/features/step_definitions/configuration_steps.rb +100 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +35 -0
- data/features/step_definitions/filter_steps.rb +39 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/format_steps.rb +52 -0
- data/features/step_definitions/i18n_steps.rb +3 -0
- data/features/step_definitions/index_scope_steps.rb +21 -0
- data/features/step_definitions/index_views_steps.rb +3 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/member_link_steps.rb +7 -0
- data/features/step_definitions/menu_steps.rb +11 -0
- data/features/step_definitions/meta_tag_steps.rb +3 -0
- data/features/step_definitions/pagination_steps.rb +15 -0
- data/features/step_definitions/sidebar_steps.rb +13 -0
- data/features/step_definitions/site_title_steps.rb +17 -0
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +8 -0
- data/features/step_definitions/table_steps.rb +116 -0
- data/features/step_definitions/user_steps.rb +52 -0
- data/features/step_definitions/web_steps.rb +85 -0
- data/features/sti_resource.feature +65 -0
- data/features/strong_parameters.feature +73 -0
- data/features/support/env.rb +162 -0
- data/features/support/paths.rb +71 -0
- data/features/support/selectors.rb +45 -0
- data/features/symbol_leak.feature +35 -0
- data/features/users/logging_in.feature +36 -0
- data/features/users/logging_out.feature +13 -0
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin.rb +130 -0
- data/lib/active_admin/abstract_view_factory.rb +85 -0
- data/lib/active_admin/application.rb +324 -0
- data/lib/active_admin/asset_registration.rb +29 -0
- data/lib/active_admin/authorization_adapter.rb +132 -0
- data/lib/active_admin/base_controller.rb +87 -0
- data/lib/active_admin/base_controller/authorization.rb +130 -0
- data/lib/active_admin/base_controller/menu.rb +38 -0
- data/lib/active_admin/batch_actions.rb +16 -0
- data/lib/active_admin/batch_actions/controller.rb +40 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +159 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/callbacks.rb +88 -0
- data/lib/active_admin/cancan_adapter.rb +36 -0
- data/lib/active_admin/component.rb +5 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +129 -0
- data/lib/active_admin/dependency.rb +168 -0
- data/lib/active_admin/deprecation.rb +35 -0
- data/lib/active_admin/devise.rb +80 -0
- data/lib/active_admin/dsl.rb +173 -0
- data/lib/active_admin/engine.rb +16 -0
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/event.rb +24 -0
- data/lib/active_admin/filters.rb +9 -0
- data/lib/active_admin/filters/active.rb +30 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +83 -0
- data/lib/active_admin/filters/formtastic_addons.rb +79 -0
- data/lib/active_admin/filters/humanized.rb +68 -0
- data/lib/active_admin/filters/resource_extension.rb +194 -0
- data/lib/active_admin/form_builder.rb +145 -0
- data/lib/active_admin/generators/boilerplate.rb +45 -0
- data/lib/active_admin/helpers/collection.rb +17 -0
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +38 -0
- data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +115 -0
- data/lib/active_admin/inputs.rb +20 -0
- data/lib/active_admin/inputs/datepicker_input.rb +20 -0
- data/lib/active_admin/inputs/filters/base.rb +44 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
- data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
- data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
- data/lib/active_admin/inputs/filters/select_input.rb +55 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/menu.rb +108 -0
- data/lib/active_admin/menu_collection.rb +93 -0
- data/lib/active_admin/menu_item.rb +97 -0
- data/lib/active_admin/namespace.rb +247 -0
- data/lib/active_admin/order_clause.rb +26 -0
- data/lib/active_admin/orm/active_record.rb +5 -0
- data/lib/active_admin/orm/active_record/comments.rb +95 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +88 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/page.rb +92 -0
- data/lib/active_admin/page_controller.rb +33 -0
- data/lib/active_admin/page_dsl.rb +28 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/reloader.rb +25 -0
- data/lib/active_admin/resource.rb +168 -0
- data/lib/active_admin/resource/action_items.rb +108 -0
- data/lib/active_admin/resource/belongs_to.rb +44 -0
- data/lib/active_admin/resource/controllers.rb +19 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +64 -0
- data/lib/active_admin/resource/naming.rb +62 -0
- data/lib/active_admin/resource/page_presenters.rb +82 -0
- data/lib/active_admin/resource/pagination.rb +23 -0
- data/lib/active_admin/resource/routes.rb +115 -0
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +50 -0
- data/lib/active_admin/resource/sidebars.rb +28 -0
- data/lib/active_admin/resource_collection.rb +72 -0
- data/lib/active_admin/resource_controller.rb +51 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +317 -0
- data/lib/active_admin/resource_controller/decorators.rb +102 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
- data/lib/active_admin/resource_controller/scoping.rb +31 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/resource_controller/streaming.rb +43 -0
- data/lib/active_admin/resource_dsl.rb +190 -0
- data/lib/active_admin/router.rb +106 -0
- data/lib/active_admin/scope.rb +56 -0
- data/lib/active_admin/sidebar_section.rb +37 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +27 -0
- data/lib/active_admin/view_helpers.rb +19 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +33 -0
- data/lib/active_admin/view_helpers/display_helper.rb +97 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +46 -0
- data/lib/active_admin/view_helpers/fields_for.rb +51 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
- data/lib/active_admin/view_helpers/form_helper.rb +20 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/active_admin_form.rb +124 -0
- data/lib/active_admin/views/components/attributes_table.rb +94 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +161 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
- data/lib/active_admin/views/components/index_list.rb +68 -0
- data/lib/active_admin/views/components/paginated_collection.rb +163 -0
- data/lib/active_admin/views/components/panel.rb +38 -0
- data/lib/active_admin/views/components/scopes.rb +66 -0
- data/lib/active_admin/views/components/sidebar_section.rb +34 -0
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +80 -0
- data/lib/active_admin/views/components/table_for.rb +218 -0
- data/lib/active_admin/views/components/tabs.rb +28 -0
- data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
- data/lib/active_admin/views/footer.rb +20 -0
- data/lib/active_admin/views/header.rb +32 -0
- data/lib/active_admin/views/index_as_block.rb +36 -0
- data/lib/active_admin/views/index_as_blog.rb +156 -0
- data/lib/active_admin/views/index_as_grid.rb +80 -0
- data/lib/active_admin/views/index_as_table.rb +373 -0
- data/lib/active_admin/views/pages/base.rb +147 -0
- data/lib/active_admin/views/pages/form.rb +65 -0
- data/lib/active_admin/views/pages/index.rb +163 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/page.rb +30 -0
- data/lib/active_admin/views/pages/show.rb +59 -0
- data/lib/active_admin/views/tabbed_navigation.rb +66 -0
- data/lib/active_admin/views/title_bar.rb +55 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +65 -0
- data/lib/generators/active_admin/install/install_generator.rb +45 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +272 -0
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +30 -0
- data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
- data/lib/generators/active_admin/page/USAGE +8 -0
- data/lib/generators/active_admin/page/page_generator.rb +12 -0
- data/lib/generators/active_admin/page/templates/page.rb +5 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +45 -0
- data/lib/ransack_ext.rb +20 -0
- data/script/local +53 -0
- data/script/travis_cache +107 -0
- data/script/use_rails +53 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/flashes.html +2 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/rails_helper.rb +161 -0
- data/spec/requests/default_namespace_spec.rb +61 -0
- data/spec/requests/javascript_spec.rb +22 -0
- data/spec/requests/memory_spec.rb +21 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/active_admin_request_helpers.rb +27 -0
- data/spec/support/deferred_garbage_collection.rb +19 -0
- data/spec/support/detect_rails_version.rb +34 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +162 -0
- data/spec/support/rails_template_with_data.rb +74 -0
- data/spec/support/templates/admin/stores.rb +9 -0
- data/spec/support/templates/en.yml +8 -0
- data/spec/support/templates/manifest.js +3 -0
- data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
- data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
- data/spec/support/templates/policies/admin_user_policy.rb +11 -0
- data/spec/support/templates/policies/application_policy.rb +45 -0
- data/spec/support/templates/policies/category_policy.rb +7 -0
- data/spec/support/templates/policies/post_policy.rb +15 -0
- data/spec/support/templates/policies/store_policy.rb +11 -0
- data/spec/support/templates/policies/user_policy.rb +11 -0
- data/spec/support/templates/post_decorator.rb +11 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +134 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +165 -0
- data/spec/unit/asset_registration_spec.rb +52 -0
- data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
- data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
- data/spec/unit/authorization/index_overriding_spec.rb +23 -0
- data/spec/unit/auto_link_spec.rb +69 -0
- data/spec/unit/batch_actions/resource_spec.rb +97 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +65 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +188 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/config_shared_examples.rb +59 -0
- data/spec/unit/controller_filters_spec.rb +41 -0
- data/spec/unit/csv_builder_spec.rb +303 -0
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +96 -0
- data/spec/unit/dsl_spec.rb +122 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +434 -0
- data/spec/unit/filters/humanized_spec.rb +64 -0
- data/spec/unit/filters/resource_spec.rb +128 -0
- data/spec/unit/form_builder_spec.rb +932 -0
- data/spec/unit/generators/install_spec.rb +24 -0
- data/spec/unit/helpers/collection_spec.rb +65 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/i18n_spec.rb +12 -0
- data/spec/unit/menu_collection_spec.rb +62 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +71 -0
- data/spec/unit/namespace/authorization_spec.rb +27 -0
- data/spec/unit/namespace/register_page_spec.rb +73 -0
- data/spec/unit/namespace/register_resource_spec.rb +160 -0
- data/spec/unit/namespace_spec.rb +103 -0
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +78 -0
- data/spec/unit/pretty_format_spec.rb +77 -0
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +65 -0
- data/spec/unit/resource/includes_spec.rb +21 -0
- data/spec/unit/resource/menu_spec.rb +18 -0
- data/spec/unit/resource/naming_spec.rb +122 -0
- data/spec/unit/resource/page_presenters_spec.rb +44 -0
- data/spec/unit/resource/pagination_spec.rb +38 -0
- data/spec/unit/resource/routes_spec.rb +77 -0
- data/spec/unit/resource/scopes_spec.rb +50 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +175 -0
- data/spec/unit/resource_controller/data_access_spec.rb +140 -0
- data/spec/unit/resource_controller/decorators_spec.rb +94 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +38 -0
- data/spec/unit/resource_controller_spec.rb +269 -0
- data/spec/unit/resource_registration_spec.rb +56 -0
- data/spec/unit/resource_spec.rb +337 -0
- data/spec/unit/routing_spec.rb +185 -0
- data/spec/unit/scope_spec.rb +185 -0
- data/spec/unit/settings_spec.rb +118 -0
- data/spec/unit/view_factory_spec.rb +19 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +217 -0
- data/spec/unit/view_helpers/display_helper_spec.rb +165 -0
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
- data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
- data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +43 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +139 -0
- data/spec/unit/views/components/attributes_table_spec.rb +272 -0
- data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
- data/spec/unit/views/components/blank_slate_spec.rb +27 -0
- data/spec/unit/views/components/columns_spec.rb +189 -0
- data/spec/unit/views/components/index_list_spec.rb +35 -0
- data/spec/unit/views/components/index_table_for_spec.rb +127 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
- data/spec/unit/views/components/panel_spec.rb +58 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +249 -0
- data/spec/unit/views/components/table_for_spec.rb +434 -0
- data/spec/unit/views/components/tabs_spec.rb +39 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +41 -0
- data/spec/unit/views/index_as_blog_spec.rb +76 -0
- data/spec/unit/views/pages/form_spec.rb +51 -0
- data/spec/unit/views/pages/index_spec.rb +60 -0
- data/spec/unit/views/pages/layout_spec.rb +59 -0
- data/spec/unit/views/pages/show_spec.rb +33 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +158 -0
- data/tasks/docs.rake +37 -0
- data/tasks/parallel_tests.rake +66 -0
- data/tasks/test.rake +91 -0
- data/tasks/yard.rake +9 -0
- metadata +974 -0
@@ -0,0 +1,272 @@
|
|
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-block.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
|
+
## Multiple Index Pages
|
18
|
+
|
19
|
+
Sometime you may want more than one index page for a resource to represent
|
20
|
+
different views to the user. If multiple index pages exist, Active Admin will
|
21
|
+
automatically build links at the top of the default index page. Including
|
22
|
+
multiple views is simple and requires creating multiple index components in
|
23
|
+
your resource.
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
index do
|
27
|
+
id_column
|
28
|
+
column :image_title
|
29
|
+
actions
|
30
|
+
end
|
31
|
+
|
32
|
+
index as: :grid do |product|
|
33
|
+
link_to image_tag(product.image_path), admin_product_path(product)
|
34
|
+
end
|
35
|
+
```
|
36
|
+
|
37
|
+
The first index component will be the default index page unless you indicate
|
38
|
+
otherwise by setting `:default` to true.
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
index do
|
42
|
+
column :image_title
|
43
|
+
actions
|
44
|
+
end
|
45
|
+
|
46
|
+
index as: :grid, default: true do |product|
|
47
|
+
link_to image_tag(product.image_path), admin_product_path(product)
|
48
|
+
end
|
49
|
+
```
|
50
|
+
|
51
|
+
## Custom Index
|
52
|
+
|
53
|
+
Active Admin does not limit the index page to be a table, block, blog or grid.
|
54
|
+
If you've created your own [custom index](3-index-pages/custom-index.md) page it
|
55
|
+
can be included by setting `:as` to the class of the index component you created.
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
index as: ActiveAdmin::Views::IndexAsMyIdea do
|
59
|
+
column :image_title
|
60
|
+
actions
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
64
|
+
## Index Filters
|
65
|
+
|
66
|
+
By default the index screen includes a "Filters" sidebar on the right hand side
|
67
|
+
with a filter for each attribute of the registered model. You can customize the
|
68
|
+
filters that are displayed as well as the type of widgets they use.
|
69
|
+
|
70
|
+
To display a filter for an attribute, use the `filter` method
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
ActiveAdmin.register Post do
|
74
|
+
filter :title
|
75
|
+
end
|
76
|
+
```
|
77
|
+
|
78
|
+
Out of the box, Active Admin supports the following filter types:
|
79
|
+
|
80
|
+
* *:string* - A search field
|
81
|
+
* *:date_range* - A start and end date field with calendar inputs
|
82
|
+
* *:numeric* - A drop down for selecting "Equal To", "Greater Than" or "Less
|
83
|
+
Than" and an input for a value.
|
84
|
+
* *:select* - A drop down which filters based on a selected item in a collection
|
85
|
+
or all.
|
86
|
+
* *:check_boxes* - A list of check boxes users can turn on and off to filter
|
87
|
+
|
88
|
+
By default, Active Admin will pick the most relevant filter based on the
|
89
|
+
attribute type. You can force the type by passing the `:as` option.
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
filter :author, as: :check_boxes
|
93
|
+
```
|
94
|
+
|
95
|
+
The `:check_boxes` and `:select` types accept options for the collection. By default
|
96
|
+
it attempts to create a collection based on an association. But you can pass in
|
97
|
+
the collection as a proc to be called at render time.
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
filter :author, as: :check_boxes, collection: proc { Author.all }
|
101
|
+
```
|
102
|
+
|
103
|
+
You can change the filter label by passing a label option:
|
104
|
+
|
105
|
+
```ruby
|
106
|
+
filter :author, label: 'Something else'
|
107
|
+
```
|
108
|
+
|
109
|
+
By default, Active Admin will try to use ActiveModel I18n to determine the label.
|
110
|
+
|
111
|
+
You can also filter on more than one attribute of a model using the
|
112
|
+
[Ransack search predicate syntax](https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching). If using a custom search method, you will
|
113
|
+
also need to specify the field type using `:as` and the label.
|
114
|
+
|
115
|
+
```ruby
|
116
|
+
filter :first_name_or_last_name_cont, as: :string, label: "Name"
|
117
|
+
```
|
118
|
+
|
119
|
+
Filters can also be disabled for a resource, a namespace or the entire
|
120
|
+
application.
|
121
|
+
|
122
|
+
To disable for a specific resource:
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
ActiveAdmin.register Post do
|
126
|
+
config.filters = false
|
127
|
+
end
|
128
|
+
```
|
129
|
+
|
130
|
+
To disable for a namespace, in the initializer:
|
131
|
+
|
132
|
+
```ruby
|
133
|
+
ActiveAdmin.setup do |config|
|
134
|
+
config.namespace :my_namespace do |my_namespace|
|
135
|
+
my_namespace.filters = false
|
136
|
+
end
|
137
|
+
end
|
138
|
+
```
|
139
|
+
|
140
|
+
Or to disable for the entire application:
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
ActiveAdmin.setup do |config|
|
144
|
+
config.filters = false
|
145
|
+
end
|
146
|
+
```
|
147
|
+
|
148
|
+
You can also add a filter and still preserve the default filters:
|
149
|
+
|
150
|
+
```ruby
|
151
|
+
preserve_default_filters!
|
152
|
+
filter :author
|
153
|
+
```
|
154
|
+
|
155
|
+
Or you can also remove a filter and still preserve the default filters:
|
156
|
+
|
157
|
+
```ruby
|
158
|
+
preserve_default_filters!
|
159
|
+
remove_filter :id
|
160
|
+
```
|
161
|
+
|
162
|
+
## Index Scopes
|
163
|
+
|
164
|
+
You can define custom scopes for your index page. This will add a tab bar above
|
165
|
+
the index table to quickly filter your collection on pre-defined scopes. There are
|
166
|
+
a number of ways to define your scopes:
|
167
|
+
|
168
|
+
```ruby
|
169
|
+
scope :all, default: true
|
170
|
+
|
171
|
+
# assumes the model has a scope called ':active'
|
172
|
+
scope :active
|
173
|
+
|
174
|
+
# renames model scope ':leaves' to ':subcategories'
|
175
|
+
scope "Subcategories", :leaves
|
176
|
+
|
177
|
+
# Dynamic scope name
|
178
|
+
scope ->{ Date.today.strftime '%A' }, :published_today
|
179
|
+
|
180
|
+
# custom scope not defined on the model
|
181
|
+
scope("Inactive") { |scope| scope.where(active: false) }
|
182
|
+
|
183
|
+
# conditionally show a custom controller scope
|
184
|
+
scope "Published", if: proc { current_admin_user.can? :manage, Posts } do |posts|
|
185
|
+
posts.published
|
186
|
+
end
|
187
|
+
```
|
188
|
+
|
189
|
+
## Index default sort order
|
190
|
+
|
191
|
+
You can define the default sort order for index pages:
|
192
|
+
|
193
|
+
```ruby
|
194
|
+
ActiveAdmin.register Post do
|
195
|
+
config.sort_order = 'name_asc'
|
196
|
+
end
|
197
|
+
```
|
198
|
+
|
199
|
+
## Index pagination
|
200
|
+
|
201
|
+
You can set the number of records per page as default:
|
202
|
+
|
203
|
+
```ruby
|
204
|
+
ActiveAdmin.setup do |config|
|
205
|
+
config.default_per_page = 30
|
206
|
+
end
|
207
|
+
```
|
208
|
+
|
209
|
+
You can set the number of records per page per resources:
|
210
|
+
|
211
|
+
```ruby
|
212
|
+
ActiveAdmin.register Post do
|
213
|
+
config.per_page = 10
|
214
|
+
end
|
215
|
+
```
|
216
|
+
|
217
|
+
You can change it per request / action too:
|
218
|
+
|
219
|
+
```ruby
|
220
|
+
controller do
|
221
|
+
before_action only: :index do
|
222
|
+
@per_page = 100
|
223
|
+
end
|
224
|
+
end
|
225
|
+
```
|
226
|
+
|
227
|
+
You can also disable pagination:
|
228
|
+
|
229
|
+
```ruby
|
230
|
+
ActiveAdmin.register Post do
|
231
|
+
config.paginate = false
|
232
|
+
end
|
233
|
+
```
|
234
|
+
|
235
|
+
If you have a very large database, you might want to disable `SELECT COUNT(*)`
|
236
|
+
queries caused by the pagination info at the bottom of the page:
|
237
|
+
|
238
|
+
```ruby
|
239
|
+
ActiveAdmin.register Post do
|
240
|
+
index pagination_total: false do
|
241
|
+
# ...
|
242
|
+
end
|
243
|
+
end
|
244
|
+
```
|
245
|
+
|
246
|
+
## Customizing Download Links
|
247
|
+
|
248
|
+
You can easily remove or customize the download links you want displayed:
|
249
|
+
|
250
|
+
```ruby
|
251
|
+
# Per resource:
|
252
|
+
ActiveAdmin.register Post do
|
253
|
+
|
254
|
+
index download_links: false
|
255
|
+
index download_links: [:pdf]
|
256
|
+
index download_links: proc{ current_user.can_view_download_links? }
|
257
|
+
|
258
|
+
end
|
259
|
+
|
260
|
+
# For the entire application:
|
261
|
+
ActiveAdmin.setup do |config|
|
262
|
+
|
263
|
+
config.download_links = false
|
264
|
+
config.download_links = [:csv, :xml, :json, :pdf]
|
265
|
+
config.download_links = proc { current_user.can_view_download_links? }
|
266
|
+
|
267
|
+
end
|
268
|
+
```
|
269
|
+
|
270
|
+
Note: you have to actually implement PDF rendering for your action, ActiveAdmin does not provide this feature. This setting just allows you to specify formats that you want to show up under the index collection.
|
271
|
+
|
272
|
+
You'll need to use a PDF rendering library like PDFKit or WickedPDF to get the PDF generation you want.
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Custom Index
|
2
|
+
|
3
|
+
If the supplied Active Admin index components are insufficient for your project
|
4
|
+
feel free to define your own. Index classes inherit from `ActiveAdmin::Component`
|
5
|
+
and require a `build` method and an `index_name` class method.
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
module ActiveAdmin
|
9
|
+
module Views
|
10
|
+
class IndexAsMyIdea < ActiveAdmin::Component
|
11
|
+
|
12
|
+
def build(page_presenter, collection)
|
13
|
+
# ...
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.index_name
|
17
|
+
"my_idea"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
```
|
24
|
+
|
25
|
+
The build method takes a PagePresenter object and collection of whatever you
|
26
|
+
choose.
|
27
|
+
|
28
|
+
The `index_name` class method takes no arguments and returns a string that should
|
29
|
+
be representative of the the class name. If this method is not defined, your
|
30
|
+
index component will not be able take advantage of Active Admin's
|
31
|
+
*multiple index pages* feature.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<!--
|
2
|
+
WARNING: Please DO NOT edit this file! Update
|
3
|
+
source documentation in lib/active_admin/views
|
4
|
+
and execute rake yard to regenerate it.
|
5
|
+
-->
|
6
|
+
|
7
|
+
# Index as a Block
|
8
|
+
|
9
|
+
If you want to fully customize the display of your resources on the index
|
10
|
+
screen, Index as a Block allows you to render a block of content for each
|
11
|
+
resource.
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
index as: :block do |product|
|
15
|
+
div for: product do
|
16
|
+
resource_selection_cell product
|
17
|
+
h2 auto_link product.title
|
18
|
+
div simple_format product.description
|
19
|
+
end
|
20
|
+
end
|
21
|
+
```
|
@@ -0,0 +1,71 @@
|
|
1
|
+
<!--
|
2
|
+
WARNING: Please DO NOT edit this file! Update
|
3
|
+
source documentation in lib/active_admin/views
|
4
|
+
and execute rake yard to regenerate it.
|
5
|
+
-->
|
6
|
+
|
7
|
+
# Index as Blog
|
8
|
+
|
9
|
+
Render your index page as a set of posts. The post has two main options:
|
10
|
+
title and body.
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
index as: :blog do
|
14
|
+
title :my_title # Calls #my_title on each resource
|
15
|
+
body :my_body # Calls #my_body on each resource
|
16
|
+
end
|
17
|
+
```
|
18
|
+
|
19
|
+
## Post Title
|
20
|
+
|
21
|
+
The title is the content that will be rendered within a link to the
|
22
|
+
resource. There are two main ways to set the content for the title
|
23
|
+
|
24
|
+
First, you can pass in a method to be called on your resource. For example:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
index as: :blog do
|
28
|
+
title :a_method_to_call
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
Second, you can pass a block to the tile option which will then be
|
33
|
+
used as the contents fo the title. The resource being rendered
|
34
|
+
is passed in to the block. For Example:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
index as: :blog do
|
38
|
+
title do |post|
|
39
|
+
span post.title, class: 'title'
|
40
|
+
span post.created_at, class: 'created_at'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
## Post Body
|
46
|
+
|
47
|
+
The body is rendered underneath the title of each post. The same two
|
48
|
+
style of options work as the Post Title above.
|
49
|
+
|
50
|
+
Call a method on the resource as the body:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
index as: :blog do
|
54
|
+
title :my_title
|
55
|
+
body :my_body
|
56
|
+
end
|
57
|
+
```
|
58
|
+
|
59
|
+
Or, render a block as the body:
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
index as: :blog do
|
63
|
+
title :my_title
|
64
|
+
body do |post|
|
65
|
+
div truncate post.title
|
66
|
+
div class: 'meta' do
|
67
|
+
span "Post in #{post.categories.join(', ')}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
```
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<!--
|
2
|
+
WARNING: Please DO NOT edit this file! Update
|
3
|
+
source documentation in lib/active_admin/views
|
4
|
+
and execute rake yard to regenerate it.
|
5
|
+
-->
|
6
|
+
|
7
|
+
# Index as a Grid
|
8
|
+
|
9
|
+
Sometimes you want to display the index screen for a set of resources as a grid
|
10
|
+
(possibly a grid of thumbnail images). To do so, use the :grid option for the
|
11
|
+
index block.
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
index as: :grid do |product|
|
15
|
+
link_to image_tag(product.image_path), admin_product_path(product)
|
16
|
+
end
|
17
|
+
```
|
18
|
+
|
19
|
+
The block is rendered within a cell in the grid once for each resource in the
|
20
|
+
collection. The resource is passed into the block for you to use in the view.
|
21
|
+
|
22
|
+
You can customize the number of columns that are rendered using the columns
|
23
|
+
option:
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
index as: :grid, columns: 5 do |product|
|
27
|
+
link_to image_tag(product.image_path), admin_product_path(product)
|
28
|
+
end
|
29
|
+
```
|
@@ -0,0 +1,213 @@
|
|
1
|
+
<!--
|
2
|
+
WARNING: Please DO NOT edit this file! Update
|
3
|
+
source documentation in lib/active_admin/views
|
4
|
+
and execute rake yard to regenerate it.
|
5
|
+
-->
|
6
|
+
|
7
|
+
# Index as a Table
|
8
|
+
|
9
|
+
By default, the index page is a table with each of the models content columns and links to
|
10
|
+
show, edit and delete the object. There are many ways to customize what gets
|
11
|
+
displayed.
|
12
|
+
|
13
|
+
## Defining Columns
|
14
|
+
|
15
|
+
To display an attribute or a method on a resource, simply pass a symbol into the
|
16
|
+
column method:
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
index do
|
20
|
+
selectable_column
|
21
|
+
column :title
|
22
|
+
end
|
23
|
+
```
|
24
|
+
|
25
|
+
For association columns we make an educated guess on what to display by
|
26
|
+
calling the following methods in the following order:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
:display_name, :full_name, :name, :username, :login, :title, :email, :to_s
|
30
|
+
```
|
31
|
+
|
32
|
+
This can be customized in `config/initializers/active_admin.rb`.
|
33
|
+
|
34
|
+
If the default title does not work for you, pass it as the first argument:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
index do
|
38
|
+
selectable_column
|
39
|
+
column "My Custom Title", :title
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
Sometimes that just isn't enough and you need to write some view-specific code.
|
44
|
+
For example, say we wanted a "Title" column that links to the posts admin screen.
|
45
|
+
|
46
|
+
`column` accepts a block that will be rendered for each of the objects in the collection.
|
47
|
+
The block is called once for each resource, which is passed as an argument to the block.
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
index do
|
51
|
+
selectable_column
|
52
|
+
column "Title" do |post|
|
53
|
+
link_to post.title, admin_post_path(post)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
```
|
57
|
+
|
58
|
+
## Defining Actions
|
59
|
+
|
60
|
+
To setup links to View, Edit and Delete a resource, use the `actions` method:
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
index do
|
64
|
+
selectable_column
|
65
|
+
column :title
|
66
|
+
actions
|
67
|
+
end
|
68
|
+
```
|
69
|
+
|
70
|
+
You can also append custom links to the default links:
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
index do
|
74
|
+
selectable_column
|
75
|
+
column :title
|
76
|
+
actions do |post|
|
77
|
+
item "Preview", admin_preview_post_path(post), class: "member_link"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
```
|
81
|
+
|
82
|
+
Or forego the default links entirely:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
index do
|
86
|
+
column :title
|
87
|
+
actions defaults: false do |post|
|
88
|
+
item "View", admin_post_path(post)
|
89
|
+
item "Edit", edit_admin_post_path(post)
|
90
|
+
item "Delete", admin_post_path(post), method: :delete
|
91
|
+
end
|
92
|
+
end
|
93
|
+
```
|
94
|
+
|
95
|
+
Or append custom action with custom html via arbre:
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
index do
|
99
|
+
column :title
|
100
|
+
actions do |post|
|
101
|
+
a "View", href: admin_post_path(post)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
```
|
105
|
+
|
106
|
+
In case you prefer to list actions links in a dropdown menu:
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
index do
|
110
|
+
selectable_column
|
111
|
+
column :title
|
112
|
+
actions dropdown: true do |post|
|
113
|
+
item "Preview", admin_preview_post_path(post)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
```
|
117
|
+
|
118
|
+
In addition, you can insert the position of the row in the greater collection by using the index_column special command:
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
index do
|
122
|
+
selectable_column
|
123
|
+
index_column
|
124
|
+
column :title
|
125
|
+
end
|
126
|
+
```
|
127
|
+
|
128
|
+
index_column take an optional offset parameter to allow a developer to set the starting number for the index (default is 1).
|
129
|
+
|
130
|
+
## Sorting
|
131
|
+
|
132
|
+
When a column is generated from an Active Record attribute, the table is
|
133
|
+
sortable by default. If you are creating a custom column, you may need to give
|
134
|
+
Active Admin a hint for how to sort the table.
|
135
|
+
|
136
|
+
If a column is defined using a block, you must pass the key to turn on sorting. The key
|
137
|
+
is the attribute which gets used to sort objects using Active Record.
|
138
|
+
|
139
|
+
By default, this is the column on the resource's table that the attribute corresponds to.
|
140
|
+
Otherwise, any attribute that the resource collection responds to can be used.
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
index do
|
144
|
+
column :title, sortable: :title do |post|
|
145
|
+
link_to post.title, admin_post_path(post)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
```
|
149
|
+
|
150
|
+
You can turn off sorting on any column by passing false:
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
index do
|
154
|
+
column :title, sortable: false
|
155
|
+
end
|
156
|
+
```
|
157
|
+
|
158
|
+
It's also possible to sort by PostgreSQL's hstore column key. You should set `sortable`
|
159
|
+
option to a `column->'key'` value:
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
index do
|
163
|
+
column :keywords, sortable: "meta->'keywords'"
|
164
|
+
end
|
165
|
+
```
|
166
|
+
|
167
|
+
## Associated Sorting
|
168
|
+
|
169
|
+
You're normally able to sort columns alphabetically, but by default you
|
170
|
+
can't sort by associated objects. Though with a few simple changes, you can.
|
171
|
+
|
172
|
+
Assuming you're on the Books index page, and Book has_one Publisher:
|
173
|
+
|
174
|
+
```ruby
|
175
|
+
controller do
|
176
|
+
def scoped_collection
|
177
|
+
super.includes :publisher # prevents N+1 queries to your database
|
178
|
+
end
|
179
|
+
end
|
180
|
+
```
|
181
|
+
|
182
|
+
Then it's simple to sort by any Publisher attribute from within the index table:
|
183
|
+
|
184
|
+
```ruby
|
185
|
+
index do
|
186
|
+
column :publisher, sortable: 'publishers.name'
|
187
|
+
end
|
188
|
+
```
|
189
|
+
|
190
|
+
## Showing and Hiding Columns
|
191
|
+
|
192
|
+
The entire index block is rendered within the context of the view, so you can
|
193
|
+
easily do things that show or hide columns based on the current context.
|
194
|
+
|
195
|
+
For example, if you were using CanCan:
|
196
|
+
|
197
|
+
```ruby
|
198
|
+
index do
|
199
|
+
column :title, sortable: false
|
200
|
+
column :secret_data if can? :manage, Post
|
201
|
+
end
|
202
|
+
```
|
203
|
+
|
204
|
+
## Custom row class
|
205
|
+
|
206
|
+
In order to add special class to table rows pass the proc object as a `:row_class` option
|
207
|
+
of the `index` method.
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
index row_class: ->elem { 'active' if elem.active? } do
|
211
|
+
# columns
|
212
|
+
end
|
213
|
+
```
|