activeadmin-rails 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.codeclimate.yml +64 -0
- data/.github/ISSUE_TEMPLATE.md +20 -0
- data/.github/workflows/ci.yaml +64 -0
- data/.github/workflows/daily.yaml +64 -0
- data/.github/workflows/pages.yml +72 -0
- data/.gitignore +23 -0
- data/.mdlrc +1 -0
- data/.rubocop.yml +84 -0
- data/.simplecov +13 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +514 -0
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +190 -0
- data/Gemfile +51 -0
- data/LICENSE +20 -0
- data/README.md +84 -0
- data/Rakefile +56 -0
- data/activeadmin-rails.gemspec +39 -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.es6 +23 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
- data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
- data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
- data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
- data/app/assets/javascripts/active_admin/lib/has_many.es6 +89 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
- data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
- data/app/assets/stylesheets/active_admin/_base.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +338 -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 +6 -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 +55 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -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 +8 -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/_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 +287 -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/_head.html.erb +14 -0
- data/app/views/active_admin/base/_action_items.html.arb +7 -0
- data/app/views/active_admin/base/_breadcrumbs.html.arb +8 -0
- data/app/views/active_admin/base/_footer.html.arb +11 -0
- data/app/views/active_admin/base/_header.html.arb +5 -0
- data/app/views/active_admin/base/_sidebar.html.arb +3 -0
- data/app/views/active_admin/base/_title_bar.html.arb +9 -0
- data/app/views/active_admin/base/_unsupported_browser.html.erb +5 -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/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/shared/_links.erb +33 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
- data/app/views/active_admin/page/_content.html.arb +1 -0
- data/app/views/active_admin/page/index.html.arb +8 -0
- data/app/views/active_admin/resource/_filters_form.html.erb +1 -0
- data/app/views/active_admin/resource/_form.html.arb +11 -0
- data/app/views/active_admin/resource/_index_as_table.html.arb +8 -0
- data/app/views/active_admin/resource/_show.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +13 -0
- data/app/views/active_admin/resource/index.html.arb +101 -0
- data/app/views/active_admin/resource/new.html.arb +13 -0
- data/app/views/active_admin/resource/show.html.arb +22 -0
- data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
- data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin.html.erb +33 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
- data/codecov.yml +25 -0
- data/config/i18n-tasks.yml +26 -0
- data/config/locales/ar.yml +133 -0
- data/config/locales/bg.yml +118 -0
- data/config/locales/bs.yml +119 -0
- data/config/locales/ca.yml +104 -0
- data/config/locales/cs.yml +107 -0
- data/config/locales/da.yml +135 -0
- data/config/locales/de-CH.yml +99 -0
- data/config/locales/de.yml +142 -0
- data/config/locales/el.yml +124 -0
- data/config/locales/en-CA.yml +137 -0
- data/config/locales/en-GB.yml +137 -0
- data/config/locales/en.yml +160 -0
- data/config/locales/eo.yml +143 -0
- data/config/locales/es-MX.yml +94 -0
- data/config/locales/es.yml +160 -0
- data/config/locales/fa.yml +117 -0
- data/config/locales/fi.yml +110 -0
- data/config/locales/fr.yml +139 -0
- data/config/locales/he.yml +140 -0
- data/config/locales/hr.yml +121 -0
- data/config/locales/hu.yml +96 -0
- data/config/locales/id.yml +133 -0
- data/config/locales/it.yml +142 -0
- data/config/locales/ja.yml +139 -0
- data/config/locales/ko.yml +118 -0
- data/config/locales/lt.yml +140 -0
- data/config/locales/lv.yml +90 -0
- data/config/locales/nb.yml +128 -0
- data/config/locales/nl.yml +142 -0
- data/config/locales/pl.yml +166 -0
- data/config/locales/pt-BR.yml +141 -0
- data/config/locales/pt-PT.yml +90 -0
- data/config/locales/ro.yml +94 -0
- data/config/locales/ru.yml +139 -0
- data/config/locales/sk.yml +107 -0
- data/config/locales/sv-SE.yml +133 -0
- data/config/locales/tr.yml +142 -0
- data/config/locales/uk.yml +134 -0
- data/config/locales/vi.yml +132 -0
- data/config/locales/zh-CN.yml +141 -0
- data/config/locales/zh-TW.yml +133 -0
- data/config/mdl_style.rb +9 -0
- data/cucumber.yml +6 -0
- data/docs/0-installation.md +121 -0
- data/docs/1-general-configuration.md +207 -0
- data/docs/10-custom-pages.md +148 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbo-components.md +200 -0
- data/docs/13-authorization-adapter.md +288 -0
- data/docs/14-gotchas.md +141 -0
- data/docs/2-resource-customization.md +480 -0
- data/docs/3-index-pages/custom-index.md +39 -0
- data/docs/3-index-pages/index-as-block.md +23 -0
- data/docs/3-index-pages/index-as-blog.md +73 -0
- data/docs/3-index-pages/index-as-grid.md +31 -0
- data/docs/3-index-pages/index-as-table.md +259 -0
- data/docs/3-index-pages.md +349 -0
- data/docs/4-csv-format.md +86 -0
- data/docs/5-forms.md +233 -0
- data/docs/6-show-pages.md +61 -0
- data/docs/7-sidebars.md +63 -0
- data/docs/8-custom-actions.md +160 -0
- data/docs/9-batch-actions.md +248 -0
- data/docs/CNAME +1 -0
- data/docs/Gemfile +7 -0
- data/docs/README.md +24 -0
- data/docs/_config.yml +15 -0
- data/docs/_includes/nav_footer_custom.html +3 -0
- data/docs/documentation.md +61 -0
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/index.css +835 -0
- data/docs/index.html +105 -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 +124 -0
- data/features/breadcrumb.feature +76 -0
- data/features/comments/commenting.feature +178 -0
- data/features/comments/viewing_index.feature +18 -0
- data/features/create_another.feature +55 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +43 -0
- data/features/development_reloading.feature +28 -0
- data/features/edit_page.feature +116 -0
- data/features/favicon.feature +20 -0
- data/features/filter_attributes.feature +46 -0
- data/features/first_boot.feature +16 -0
- data/features/footer.feature +29 -0
- data/features/global_navigation.feature +29 -0
- data/features/i18n.feature +55 -0
- data/features/index/batch_actions.feature +218 -0
- data/features/index/filters.feature +251 -0
- data/features/index/format_as_csv.feature +273 -0
- data/features/index/formats.feature +88 -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 +325 -0
- data/features/index/page_title.feature +41 -0
- data/features/index/pagination.feature +63 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +85 -0
- data/features/meta_tags.feature +21 -0
- data/features/new_page.feature +136 -0
- data/features/registering_assets.feature +34 -0
- data/features/registering_pages.feature +237 -0
- data/features/registering_resources.feature +33 -0
- data/features/renamed_resource.feature +29 -0
- data/features/root_to.feature +18 -0
- data/features/show/attributes_table_title.feature +54 -0
- data/features/show/columns.feature +40 -0
- data/features/show/default_content.feature +44 -0
- data/features/show/page_title.feature +58 -0
- data/features/show/tabs.feature +47 -0
- data/features/sidebar_sections.feature +210 -0
- data/features/site_title.feature +47 -0
- data/features/specifying_actions.feature +118 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/action_link_steps.rb +19 -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/attributes_table_title_steps.rb +11 -0
- data/features/step_definitions/batch_action_steps.rb +78 -0
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +13 -0
- data/features/step_definitions/column_steps.rb +8 -0
- data/features/step_definitions/comment_steps.rb +32 -0
- data/features/step_definitions/configuration_steps.rb +102 -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 +57 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/footer_steps.rb +21 -0
- data/features/step_definitions/format_steps.rb +60 -0
- data/features/step_definitions/i18n_steps.rb +11 -0
- data/features/step_definitions/index_scope_steps.rb +42 -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/root_steps.rb +9 -0
- data/features/step_definitions/sidebar_steps.rb +11 -0
- data/features/step_definitions/site_title_steps.rb +31 -0
- data/features/step_definitions/tab_steps.rb +17 -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 +86 -0
- data/features/sti_resource.feature +65 -0
- data/features/strong_parameters.feature +69 -0
- data/features/support/env.rb +129 -0
- data/features/support/paths.rb +75 -0
- data/features/support/regular_env.rb +7 -0
- data/features/support/reload_env.rb +7 -0
- data/features/support/selectors.rb +45 -0
- data/features/users/logging_in.feature +32 -0
- data/features/users/logging_out.feature +29 -0
- data/features/users/resetting_password.feature +30 -0
- data/gemfiles/rails_42.gemfile +12 -0
- data/gemfiles/rails_52.gemfile +15 -0
- data/gemfiles/rails_60.gemfile +16 -0
- data/gemfiles/rails_61.gemfile +15 -0
- data/gemfiles/rails_61_turbolinks.gemfile +15 -0
- data/gemfiles/rails_70.gemfile +15 -0
- data/gemfiles/rails_70_hotwire.gemfile +15 -0
- data/gemfiles/rails_71.gemfile +17 -0
- data/lib/active_admin/abstract_view_factory.rb +47 -0
- data/lib/active_admin/application.rb +255 -0
- data/lib/active_admin/application_settings.rb +42 -0
- data/lib/active_admin/asset_registration.rb +29 -0
- data/lib/active_admin/authorization_adapter.rb +129 -0
- data/lib/active_admin/base_controller/authorization.rb +126 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/base_controller.rb +91 -0
- data/lib/active_admin/batch_actions/controller.rb +45 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +45 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
- data/lib/active_admin/batch_actions.rb +16 -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 +136 -0
- data/lib/active_admin/dependency.rb +96 -0
- data/lib/active_admin/deprecation.rb +10 -0
- data/lib/active_admin/devise.rb +80 -0
- data/lib/active_admin/dsl.rb +193 -0
- data/lib/active_admin/dynamic_setting.rb +38 -0
- data/lib/active_admin/dynamic_settings_node.rb +28 -0
- data/lib/active_admin/engine.rb +22 -0
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/event.rb +24 -0
- data/lib/active_admin/filters/active.rb +29 -0
- data/lib/active_admin/filters/active_filter.rb +123 -0
- data/lib/active_admin/filters/active_sidebar.rb +50 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +85 -0
- data/lib/active_admin/filters/formtastic_addons.rb +79 -0
- data/lib/active_admin/filters/resource_extension.rb +153 -0
- data/lib/active_admin/filters.rb +11 -0
- data/lib/active_admin/form_builder.rb +182 -0
- data/lib/active_admin/generators/boilerplate.rb +45 -0
- data/lib/active_admin/helpers/collection.rb +19 -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/inputs/datepicker_input.rb +27 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
- data/lib/active_admin/inputs/filters/base.rb +44 -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 +49 -0
- data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
- data/lib/active_admin/inputs/filters/select_input.rb +58 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/inputs/filters/text_input.rb +25 -0
- data/lib/active_admin/inputs.rb +21 -0
- data/lib/active_admin/localizers/resource_localizer.rb +35 -0
- data/lib/active_admin/localizers.rb +11 -0
- data/lib/active_admin/menu.rb +106 -0
- data/lib/active_admin/menu_collection.rb +55 -0
- data/lib/active_admin/menu_item.rb +79 -0
- data/lib/active_admin/namespace.rb +325 -0
- data/lib/active_admin/namespace_settings.rb +107 -0
- data/lib/active_admin/order_clause.rb +48 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +35 -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/views/active_admin_comments.rb +95 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments.rb +99 -0
- data/lib/active_admin/orm/active_record.rb +5 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +114 -0
- data/lib/active_admin/page_controller.rb +29 -0
- data/lib/active_admin/page_dsl.rb +35 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/resource/action_items.rb +120 -0
- data/lib/active_admin/resource/attributes.rb +47 -0
- data/lib/active_admin/resource/belongs_to.rb +48 -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 +65 -0
- data/lib/active_admin/resource/naming.rb +62 -0
- data/lib/active_admin/resource/ordering.rb +11 -0
- data/lib/active_admin/resource/page_presenters.rb +90 -0
- data/lib/active_admin/resource/pagination.rb +23 -0
- data/lib/active_admin/resource/routes.rb +134 -0
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +52 -0
- data/lib/active_admin/resource/sidebars.rb +32 -0
- data/lib/active_admin/resource.rb +215 -0
- data/lib/active_admin/resource_collection.rb +72 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +341 -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 +47 -0
- data/lib/active_admin/resource_controller.rb +116 -0
- data/lib/active_admin/resource_dsl.rb +221 -0
- data/lib/active_admin/router.rb +113 -0
- data/lib/active_admin/scope.rb +60 -0
- data/lib/active_admin/settings_node.rb +19 -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 +10 -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 +52 -0
- data/lib/active_admin/view_helpers/display_helper.rb +95 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
- data/lib/active_admin/view_helpers/fields_for.rb +50 -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/layout_helper.rb +32 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
- data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -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/view_helpers.rb +21 -0
- data/lib/active_admin/views/components/action_link.rb +13 -0
- data/lib/active_admin/views/components/active_admin_form.rb +163 -0
- data/lib/active_admin/views/components/attributes_panel.rb +23 -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 +69 -0
- data/lib/active_admin/views/components/menu.rb +32 -0
- data/lib/active_admin/views/components/menu_item.rb +58 -0
- data/lib/active_admin/views/components/paginated_collection.rb +159 -0
- data/lib/active_admin/views/components/panel.rb +38 -0
- data/lib/active_admin/views/components/scopes.rb +72 -0
- data/lib/active_admin/views/components/sidebar_section.rb +34 -0
- data/lib/active_admin/views/components/site_title.rb +28 -0
- data/lib/active_admin/views/components/status_tag.rb +88 -0
- data/lib/active_admin/views/components/table_for.rb +209 -0
- data/lib/active_admin/views/components/tabs.rb +40 -0
- data/lib/active_admin/views/index_as_block.rb +36 -0
- data/lib/active_admin/views/index_as_blog.rb +155 -0
- data/lib/active_admin/views/index_as_grid.rb +80 -0
- data/lib/active_admin/views/index_as_table.rb +377 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +132 -0
- data/lib/activeadmin-rails.rb +1 -0
- data/lib/bug_report_templates/active_admin_main.rb +110 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
- data/lib/generators/active_admin/install/install_generator.rb +45 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +300 -0
- data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -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.erb +16 -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.erb +6 -0
- data/lib/ransack_ext.rb +20 -0
- data/spec/bug_report_templates_spec.rb +28 -0
- data/spec/changelog_spec.rb +15 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -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/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_runner.rb +19 -0
- data/spec/rails_helper.rb +67 -0
- data/spec/requests/default_namespace_spec.rb +81 -0
- data/spec/requests/memory_spec.rb +25 -0
- data/spec/requests/pages/form_spec.rb +73 -0
- data/spec/requests/pages/index_spec.rb +96 -0
- data/spec/requests/pages/layout_spec.rb +59 -0
- data/spec/requests/pages/show_spec.rb +38 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/active_admin_integration_spec_helper.rb +79 -0
- data/spec/support/active_admin_request_helpers.rb +39 -0
- data/spec/support/rails_template.rb +224 -0
- data/spec/support/rails_template_with_data.rb +328 -0
- data/spec/support/templates/admin/stores.rb +7 -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 +44 -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 +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +78 -0
- data/spec/unit/action_builder_spec.rb +160 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +180 -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 +43 -0
- data/spec/unit/authorization/index_overriding_spec.rb +23 -0
- data/spec/unit/auto_link_spec.rb +103 -0
- data/spec/unit/batch_actions/resource_spec.rb +84 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +76 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +204 -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 +321 -0
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +110 -0
- data/spec/unit/dsl_spec.rb +120 -0
- data/spec/unit/dynamic_settings_spec.rb +28 -0
- data/spec/unit/filters/active_filter_spec.rb +222 -0
- data/spec/unit/filters/active_spec.rb +24 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
- data/spec/unit/filters/resource_spec.rb +128 -0
- data/spec/unit/form_builder_spec.rb +1013 -0
- data/spec/unit/generators/install_spec.rb +31 -0
- data/spec/unit/helpers/collection_spec.rb +68 -0
- data/spec/unit/helpers/scope_chain_spec.rb +35 -0
- data/spec/unit/i18n_spec.rb +29 -0
- data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
- data/spec/unit/menu_collection_spec.rb +40 -0
- data/spec/unit/menu_item_spec.rb +82 -0
- data/spec/unit/menu_spec.rb +60 -0
- data/spec/unit/namespace/authorization_spec.rb +27 -0
- data/spec/unit/namespace/register_page_spec.rb +99 -0
- data/spec/unit/namespace/register_resource_spec.rb +162 -0
- data/spec/unit/namespace_spec.rb +132 -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 +128 -0
- data/spec/unit/pretty_format_spec.rb +133 -0
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +83 -0
- data/spec/unit/resource/attributes_spec.rb +56 -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 +120 -0
- data/spec/unit/resource/ordering_spec.rb +35 -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 +125 -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 +234 -0
- data/spec/unit/resource_controller/decorators_spec.rb +94 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
- data/spec/unit/resource_controller_spec.rb +290 -0
- data/spec/unit/resource_registration_spec.rb +61 -0
- data/spec/unit/resource_spec.rb +320 -0
- data/spec/unit/routing_spec.rb +211 -0
- data/spec/unit/scope_spec.rb +225 -0
- data/spec/unit/settings_node_spec.rb +26 -0
- data/spec/unit/view_factory_spec.rb +13 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +255 -0
- data/spec/unit/view_helpers/display_helper_spec.rb +203 -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 +24 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
- data/spec/unit/views/components/attributes_table_spec.rb +271 -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 +187 -0
- data/spec/unit/views/components/index_list_spec.rb +49 -0
- data/spec/unit/views/components/index_table_for_spec.rb +127 -0
- data/spec/unit/views/components/menu_item_spec.rb +29 -0
- data/spec/unit/views/components/menu_spec.rb +168 -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 +82 -0
- data/spec/unit/views/components/status_tag_spec.rb +265 -0
- data/spec/unit/views/components/table_for_spec.rb +441 -0
- data/spec/unit/views/components/tabs_spec.rb +99 -0
- data/spec/unit/views/index_as_blog_spec.rb +76 -0
- data/tasks/docs.rake +64 -0
- data/tasks/lint.rake +21 -0
- data/tasks/local.rake +25 -0
- data/tasks/parallel_tests.rake +66 -0
- data/tasks/test.rake +24 -0
- data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
- metadata +1012 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
nav_order: 4
|
|
4
|
+
title: CSV Format
|
|
5
|
+
redirect_from: /docs/4-csv-format.html
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Customizing the CSV format
|
|
9
|
+
|
|
10
|
+
Active Admin provides CSV file downloads on the index screen for each Resource.
|
|
11
|
+
By default it will render a CSV file with all the content columns of your
|
|
12
|
+
registered model.
|
|
13
|
+
|
|
14
|
+
To customize the CSV format override [csv_builder]:
|
|
15
|
+
|
|
16
|
+
```ruby
|
|
17
|
+
class Admin::PostsController < ActiveAdmin::ResourceController
|
|
18
|
+
protected
|
|
19
|
+
def csv_builder
|
|
20
|
+
@csv_builder ||= ActiveAdmin::CSVBuilder.new(resource: active_admin_config) do
|
|
21
|
+
column :title
|
|
22
|
+
column(:author) { |post| post.author.full_name }
|
|
23
|
+
column('bODY', humanize_name: false) # preserve case
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
You can also set custom CSV settings:
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
class Admin::PostsController < ActiveAdmin::ResourceController
|
|
33
|
+
protected
|
|
34
|
+
def csv_builder
|
|
35
|
+
@csv_builder ||= ActiveAdmin::CSVBuilder.new(resource: active_admin_config, force_quotes: true, col_sep: ';', column_names: false) do
|
|
36
|
+
column :title
|
|
37
|
+
column(:author) { |post| post.author.full_name }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Or system-wide in `config/initializers/active_admin.rb`:
|
|
44
|
+
|
|
45
|
+
```ruby
|
|
46
|
+
Rails.application.reloader.to_prepare do
|
|
47
|
+
ActiveAdmin.setup do |config|
|
|
48
|
+
# Set the CSV builder separator
|
|
49
|
+
config.csv_options = { col_sep: ';' }
|
|
50
|
+
# Force the use of quotes
|
|
51
|
+
config.csv_options = { force_quotes: true }
|
|
52
|
+
...
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
You can customize the filename by overriding `csv_filename` in the controller block.
|
|
56
|
+
|
|
57
|
+
```ruby
|
|
58
|
+
class Admin::UsersController < ActiveAdmin::ResourceController
|
|
59
|
+
protected
|
|
60
|
+
def csv_filename
|
|
61
|
+
'User Details.csv'
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Streaming
|
|
68
|
+
|
|
69
|
+
By default Active Admin streams the CSV response to your browser as it's generated.
|
|
70
|
+
This is good because it prevents request timeouts, for example the infamous H12
|
|
71
|
+
error on Heroku.
|
|
72
|
+
|
|
73
|
+
However if an exception occurs while generating the CSV, the request will eventually
|
|
74
|
+
time out, with the last line containing the exception message. CSV streaming is
|
|
75
|
+
disabled in development to help debug these exceptions. That lets you use tools like
|
|
76
|
+
better_errors and web-console to debug the issue. If you want to customize the
|
|
77
|
+
environments where CSV streaming is disabled, you can change this setting in `config/initializers/active_admin.rb`:
|
|
78
|
+
|
|
79
|
+
```ruby
|
|
80
|
+
ActiveAdmin.setup do |config|
|
|
81
|
+
config.disable_streaming_in = ['development', 'staging']
|
|
82
|
+
...
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
[csv_builder]: https://rubydoc.info/github/varyonic/activeadmin/master/ActiveAdmin/ResourceController/Streaming#csv_builder-instance_method
|
|
86
|
+
[csv_filename]: https://rubydoc.info/github/varyonic/activeadmin/master/ActiveAdmin/ResourceController/Streaming#csv_filename-instance_method
|
data/docs/5-forms.md
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
nav_order: 5
|
|
4
|
+
title: Forms
|
|
5
|
+
redirect_from: /docs/5-forms.html
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Forms
|
|
9
|
+
|
|
10
|
+
## Default
|
|
11
|
+
|
|
12
|
+
Active Admin renders `:create` and `:update` by default using partial `form`
|
|
13
|
+
which in turn by default uses an Arbo component `active_admin_form_for`
|
|
14
|
+
that wraps and extends [Formtastic].
|
|
15
|
+
|
|
16
|
+
The default `_form` partial is located in `app/views/active_admin/resource/_form.html.arb`:
|
|
17
|
+
|
|
18
|
+
```ruby
|
|
19
|
+
options = {
|
|
20
|
+
url: resource.persisted? ? resource_path(resource) : collection_path,
|
|
21
|
+
as: active_admin_config.param_key
|
|
22
|
+
}
|
|
23
|
+
options.merge!(page_presenter.options)
|
|
24
|
+
|
|
25
|
+
active_admin_form_for(resource, options) do |f|
|
|
26
|
+
f.semantic_errors # show errors on :base by default
|
|
27
|
+
f.inputs
|
|
28
|
+
f.actions
|
|
29
|
+
end
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Partials
|
|
33
|
+
|
|
34
|
+
A customized `app/views/admin/posts/_form.html.arb` might look like:
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
content_for(:page_title) { 'A custom title' }
|
|
38
|
+
|
|
39
|
+
active_admin_form_for(resource) do |f|
|
|
40
|
+
inputs 'Details' do
|
|
41
|
+
input :title
|
|
42
|
+
input :published_at, label: "Publish Post At"
|
|
43
|
+
li "Created at #{f.object.created_at}" unless f.object.new_record?
|
|
44
|
+
input :category
|
|
45
|
+
end
|
|
46
|
+
panel 'Markup' do
|
|
47
|
+
"The following can be used in the content below..."
|
|
48
|
+
end
|
|
49
|
+
inputs 'Content', :body
|
|
50
|
+
para "Press cancel to return to the list without saving."
|
|
51
|
+
actions
|
|
52
|
+
end
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
This is a regular Rails partial so any template engine may be used, eg. haml.
|
|
56
|
+
|
|
57
|
+
You can also use the `ActiveAdmin::FormBuilder` as builder in your Formtastic
|
|
58
|
+
Form for use the same helpers are used in the admin file:
|
|
59
|
+
|
|
60
|
+
```ruby
|
|
61
|
+
= semantic_form_for [:admin, @post], builder: ActiveAdmin::FormBuilder do |f|
|
|
62
|
+
= f.inputs "Details" do
|
|
63
|
+
= f.input :title
|
|
64
|
+
- f.has_many :taggings, sortable: :position, sortable_start: 1 do |t|
|
|
65
|
+
- t.input :tag
|
|
66
|
+
= f.actions
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
For more details, please see [Formtastic's documentation].
|
|
71
|
+
|
|
72
|
+
## Nested Resources
|
|
73
|
+
|
|
74
|
+
You can create forms with nested models using the `has_many` method, even if
|
|
75
|
+
your model uses `has_one`:
|
|
76
|
+
|
|
77
|
+
```ruby
|
|
78
|
+
class Admin::PostsController < ActiveAdmin::ResourceController
|
|
79
|
+
protected
|
|
80
|
+
def permitted_attr_names
|
|
81
|
+
[
|
|
82
|
+
:title,
|
|
83
|
+
:published_at,
|
|
84
|
+
:body,
|
|
85
|
+
categories_attributes: [:id, :title, :_destroy],
|
|
86
|
+
taggings_attributes: [:id, :tag],
|
|
87
|
+
comment_attributes: [:id, :body, :_destroy]
|
|
88
|
+
]
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```ruby
|
|
94
|
+
# app/views/admin/posts/_form.html.arb
|
|
95
|
+
active_admin_form_for(resource) do |f|
|
|
96
|
+
f.inputs 'Details' do
|
|
97
|
+
f.input :title
|
|
98
|
+
f.input :published_at, label: 'Publish Post At'
|
|
99
|
+
end
|
|
100
|
+
f.inputs 'Content', :body
|
|
101
|
+
f.inputs do
|
|
102
|
+
f.has_many :categories, heading: 'Themes',
|
|
103
|
+
allow_destroy: true,
|
|
104
|
+
new_record: false do |a|
|
|
105
|
+
a.input :title
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
f.inputs do
|
|
109
|
+
f.has_many :taggings, sortable: :position, sortable_start: 1 do |t|
|
|
110
|
+
t.input :tag
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
f.inputs do
|
|
114
|
+
f.has_many :comment,
|
|
115
|
+
new_record: 'Leave Comment',
|
|
116
|
+
allow_destroy: -> (c) { c.author?(current_admin_user) } do |b|
|
|
117
|
+
b.input :body
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
f.actions
|
|
121
|
+
end
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
*NOTE: In addition to using `has_many` as illustrated above, you'll need to add
|
|
125
|
+
`accepts_nested_attributes` to your parent model and [configure strong parameters](https://activeadmin.org/2-resource-customization.html)*
|
|
126
|
+
|
|
127
|
+
The `:allow_destroy` option adds a checkbox to the end of the nested form allowing
|
|
128
|
+
removal of the child object upon submission. Be sure to set `allow_destroy: true`
|
|
129
|
+
on the association to use this option. It is possible to associate
|
|
130
|
+
`:allow_destroy` with a string or a symbol, corresponding to the name of a child
|
|
131
|
+
object's method that will get called, or with a Proc object. The Proc object
|
|
132
|
+
receives the child object as a parameter and should return either true or false.
|
|
133
|
+
|
|
134
|
+
The `:heading` option adds a custom heading. You can hide it entirely by passing
|
|
135
|
+
`false`.
|
|
136
|
+
|
|
137
|
+
The `:new_record` option controls the visibility of the new record button (shown
|
|
138
|
+
by default). If you pass a string, it will be used as the text for the new
|
|
139
|
+
record button.
|
|
140
|
+
|
|
141
|
+
The `:sortable` option adds a hidden field and will enable drag & drop sorting
|
|
142
|
+
of the children. It expects the name of the column that will store the index of
|
|
143
|
+
each child.
|
|
144
|
+
|
|
145
|
+
The `:sortable_start` option sets the value (0 by default) of the first position
|
|
146
|
+
in the list.
|
|
147
|
+
|
|
148
|
+
## Datepicker
|
|
149
|
+
|
|
150
|
+
ActiveAdmin offers the `datepicker` input, which uses the [jQuery UI
|
|
151
|
+
datepicker](http://jqueryui.com/datepicker/). The datepicker input accepts any
|
|
152
|
+
of the options available to the standard jQueryUI Datepicker. For example:
|
|
153
|
+
|
|
154
|
+
```ruby
|
|
155
|
+
active_admin_form_for(resource) do |f|
|
|
156
|
+
f.input :starts_at, as: :datepicker,
|
|
157
|
+
datepicker_options: {
|
|
158
|
+
min_date: "2013-10-8",
|
|
159
|
+
max_date: "+3D"
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
f.input :ends_at, as: :datepicker,
|
|
163
|
+
datepicker_options: {
|
|
164
|
+
min_date: 3.days.ago.to_date,
|
|
165
|
+
max_date: "+1W +5D"
|
|
166
|
+
}
|
|
167
|
+
end
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Datepicker also accepts the `:label` option as a string or proc to display.
|
|
171
|
+
If it's a proc, it will be called each time the datepicker is rendered.
|
|
172
|
+
|
|
173
|
+
## Displaying Errors
|
|
174
|
+
|
|
175
|
+
To display a list of all validation errors:
|
|
176
|
+
|
|
177
|
+
```ruby
|
|
178
|
+
active_admin_form_for(resource) do |f|
|
|
179
|
+
f.semantic_errors *f.object.errors.keys
|
|
180
|
+
# ...
|
|
181
|
+
end
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
This is particularly useful to display errors on virtual or hidden attributes.
|
|
185
|
+
|
|
186
|
+
# Tabs
|
|
187
|
+
|
|
188
|
+
You can arrange content in tabs as shown below:
|
|
189
|
+
|
|
190
|
+
```ruby
|
|
191
|
+
active_admin_form_for(resource) do |f|
|
|
192
|
+
tabs do
|
|
193
|
+
tab 'Basic' do
|
|
194
|
+
f.inputs 'Basic Details' do
|
|
195
|
+
f.input :email
|
|
196
|
+
f.input :password
|
|
197
|
+
f.input :password_confirmation
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
tab 'Advanced', html_options: { class: 'specific_css_class' } do
|
|
202
|
+
f.inputs 'Advanced Details' do
|
|
203
|
+
f.input :role
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
f.actions
|
|
208
|
+
end
|
|
209
|
+
```
|
|
210
|
+
`html_options` allows you set additional html params for tab's menu item.
|
|
211
|
+
|
|
212
|
+
# Customize the Create Another checkbox
|
|
213
|
+
|
|
214
|
+
In order to simplify creating multiple resources you may enable ActiveAdmin to
|
|
215
|
+
show nice "Create Another" checkbox alongside of Create Model button. It may be
|
|
216
|
+
enabled for the whole application:
|
|
217
|
+
|
|
218
|
+
```ruby
|
|
219
|
+
ActiveAdmin.setup do |config|
|
|
220
|
+
config.create_another = true
|
|
221
|
+
end
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
or for the particular resource:
|
|
225
|
+
|
|
226
|
+
```ruby
|
|
227
|
+
ActiveAdmin.configure_resource Post do |config|
|
|
228
|
+
config.create_another = true
|
|
229
|
+
end
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
[Formtastic]: https://github.com/justinfrench/formtastic
|
|
233
|
+
[Formtastic's documentation]: https://github.com/justinfrench/formtastic/wiki
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
nav_order: 6
|
|
4
|
+
title: Show Pages
|
|
5
|
+
redirect_from: /docs/6-show-pages.html
|
|
6
|
+
---
|
|
7
|
+
# Customize the Show Page
|
|
8
|
+
|
|
9
|
+
Active Admin renders `:show` using partial `show`
|
|
10
|
+
|
|
11
|
+
The default partial is located in `app/views/active_admin/resource/_show.html.arb` and simply renders `attributes_panel`
|
|
12
|
+
|
|
13
|
+
A customized `app/views/admin/posts/_show.html.arb` keeping the default AA look might look like:
|
|
14
|
+
|
|
15
|
+
```ruby
|
|
16
|
+
content_for(:page_title) { resource.name }
|
|
17
|
+
attributes_table do
|
|
18
|
+
row :title
|
|
19
|
+
row :image do |ad|
|
|
20
|
+
image_tag ad.image.url
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
active_admin_comments_for(resource)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
A more generic partial might look like:
|
|
27
|
+
|
|
28
|
+
```ruby
|
|
29
|
+
h3 post.title
|
|
30
|
+
div do
|
|
31
|
+
simple_format post.body
|
|
32
|
+
end
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
If you want a more data-dense page, you can combine a sidebar:
|
|
36
|
+
|
|
37
|
+
```ruby
|
|
38
|
+
panel "Table of Contents" do
|
|
39
|
+
table_for book.chapters do
|
|
40
|
+
column :number
|
|
41
|
+
column :title
|
|
42
|
+
column :page
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
active_admin_comments_for(resource)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
and
|
|
49
|
+
|
|
50
|
+
```ruby
|
|
51
|
+
ActiveAdmin.register Book do
|
|
52
|
+
sidebar "Details", only: :show do
|
|
53
|
+
attributes_table_for book do
|
|
54
|
+
row :title
|
|
55
|
+
row :author
|
|
56
|
+
row :publisher
|
|
57
|
+
row('Published?') { |b| status_tag b.published? }
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
```
|
data/docs/7-sidebars.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
nav_order: 7
|
|
4
|
+
title: Sidebars
|
|
5
|
+
redirect_from: /docs/7-sidebars.html
|
|
6
|
+
---
|
|
7
|
+
# Sidebar Sections
|
|
8
|
+
|
|
9
|
+
Sidebars allow you to put whatever content you want on the side of the page.
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
config.add_sidebar_section :help
|
|
13
|
+
|
|
14
|
+
# app/views/admin/posts/_help_sidebar.html.arb
|
|
15
|
+
"Need help? Email us at help@example.com"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
This will generate a sidebar on every page for that resource. The first
|
|
19
|
+
argument is used as the title, and can be a symbol, string, or lambda.
|
|
20
|
+
|
|
21
|
+
Sidebars can be rendered on a specific action by passing `:only` or `:except`.
|
|
22
|
+
|
|
23
|
+
```ruby
|
|
24
|
+
config.add_sidebar_section :help, only: :index
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If you want to conditionally display a sidebar section, use the :if option and
|
|
28
|
+
pass it a proc which will be rendered within the view context.
|
|
29
|
+
|
|
30
|
+
```ruby
|
|
31
|
+
config.add_sidebar_section :help, if: proc{ current_admin_user.super_admin? }
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
You can access your model as resource in the sidebar too:
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
# app/views/admin/posts/_custom_sidebar.html.arb
|
|
38
|
+
resource.a_method
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
You can also override the partial name:
|
|
42
|
+
|
|
43
|
+
```ruby
|
|
44
|
+
config.add_sidebar_section :help # app/views/admin/posts/_help_sidebar.html.erb
|
|
45
|
+
config.add_sidebar_section :help, partial: 'custom' # app/views/admin/posts/_custom.html.erb
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
It's possible to add custom class name to the sidebar parent element by passing
|
|
49
|
+
`class` option:
|
|
50
|
+
|
|
51
|
+
```ruby
|
|
52
|
+
config.add_sidebar_section :help, class: 'custom_class'
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
By default sidebars are positioned in the same order as they defined, but it's also
|
|
56
|
+
possible to specify their position manually:
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
# will push Help section to the top (above default Filters section)
|
|
60
|
+
config.add_sidebar_section :help, priority: 0
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Default sidebar priority is `10`.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
nav_order: 8
|
|
4
|
+
title: Custom Actions
|
|
5
|
+
redirect_from: /docs/8-custom-actions.html
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Custom Controller Actions
|
|
9
|
+
|
|
10
|
+
Add custom actions the Rails Way:
|
|
11
|
+
|
|
12
|
+
## Collection Actions
|
|
13
|
+
|
|
14
|
+
A collection action is a controller action which operates on the collection of
|
|
15
|
+
resources. Add both the action to the controller as well as a route.
|
|
16
|
+
|
|
17
|
+
```ruby
|
|
18
|
+
class Admin::PostsController < ActiveAdmin::ResourceController
|
|
19
|
+
def import_csv
|
|
20
|
+
# Do some CSV importing work here...
|
|
21
|
+
redirect_to collection_path, notice: "CSV imported successfully!"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
```
|
|
25
|
+
and
|
|
26
|
+
|
|
27
|
+
```ruby
|
|
28
|
+
Rails.application.routes.draw do
|
|
29
|
+
post '/admin/posts/import_csv', controller: 'admin/posts', action: 'import_csv'
|
|
30
|
+
...
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This collection action will generate a route at `/admin/posts/import_csv`
|
|
34
|
+
pointing to the `Admin::PostsController#import_csv` controller action.
|
|
35
|
+
|
|
36
|
+
## Member Actions
|
|
37
|
+
|
|
38
|
+
A member action is a controller action which operates on a single resource.
|
|
39
|
+
|
|
40
|
+
For example, to add a lock action to a user resource, you would do the
|
|
41
|
+
following:
|
|
42
|
+
|
|
43
|
+
```ruby
|
|
44
|
+
class Admin::UsersController < ActiveAdmin::ResourceController
|
|
45
|
+
def lock
|
|
46
|
+
resource.lock!
|
|
47
|
+
redirect_to resource_path, notice: "Locked!"
|
|
48
|
+
end
|
|
49
|
+
```
|
|
50
|
+
and
|
|
51
|
+
```ruby
|
|
52
|
+
Rails.application.routes.draw do
|
|
53
|
+
put '/admin/users/:id/lock', controller: 'admin/users', action: 'lock'
|
|
54
|
+
...
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## HTTP Verbs
|
|
58
|
+
|
|
59
|
+
Sometimes you want to create an action that handles multiple
|
|
60
|
+
HTTP verbs. In that case, this is the suggested approach:
|
|
61
|
+
|
|
62
|
+
```ruby
|
|
63
|
+
def foo
|
|
64
|
+
if request.post?
|
|
65
|
+
resource.update_attributes! foo: params[:foo] || {}
|
|
66
|
+
head :ok
|
|
67
|
+
else
|
|
68
|
+
render :foo
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
```
|
|
72
|
+
and
|
|
73
|
+
```ruby
|
|
74
|
+
Rails.application.routes.draw do
|
|
75
|
+
get 'admin/users/:id/foo', container: 'admin/users', action: 'foo'
|
|
76
|
+
post 'admin/users/:id/foo', container: 'admin/users', action: 'foo'
|
|
77
|
+
...
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Rendering
|
|
81
|
+
|
|
82
|
+
Custom controller actions support rendering within the standard Active Admin
|
|
83
|
+
layout.
|
|
84
|
+
|
|
85
|
+
```ruby
|
|
86
|
+
class Admin::PostsController < ActiveAdmin::ResourceController
|
|
87
|
+
# /admin/posts/:id/comments
|
|
88
|
+
def comments
|
|
89
|
+
@comments = resource.comments
|
|
90
|
+
# This will render app/views/admin/posts/comments.html.erb
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
If you would like to use the same view syntax as the rest of Active Admin, you
|
|
96
|
+
can use the Arbo file extension: .arb.
|
|
97
|
+
|
|
98
|
+
For example, create `app/views/admin/posts/comments.html.arb` with:
|
|
99
|
+
|
|
100
|
+
```ruby
|
|
101
|
+
table_for assigns[:post].comments do
|
|
102
|
+
column :id
|
|
103
|
+
column :author
|
|
104
|
+
column :body do |comment|
|
|
105
|
+
simple_format comment.body
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Page Titles
|
|
111
|
+
|
|
112
|
+
The page title for the custom action will be the translated version of
|
|
113
|
+
the controller action name. For example, a member_action named "upload_csv" will
|
|
114
|
+
look up a translation key of `active_admin.upload_csv`. If none are found, it
|
|
115
|
+
defaults to the name of the controller action.
|
|
116
|
+
|
|
117
|
+
If this doesn't work for you, you can always set the `@page_title` instance
|
|
118
|
+
variable in your controller action to customize the page title.
|
|
119
|
+
|
|
120
|
+
```ruby
|
|
121
|
+
class Admin::PostsController < ActiveAdmin::ResourceController
|
|
122
|
+
def comments
|
|
123
|
+
@comments = resource.comments
|
|
124
|
+
@page_title = "#{resource.title}: Comments" # Sets the page title
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
```
|
|
128
|
+
Alternately use `content_for(:page_title)` in the view template.
|
|
129
|
+
|
|
130
|
+
# Action Items
|
|
131
|
+
|
|
132
|
+
By default action items (like the New, Edit and Delete buttons) are rendered in
|
|
133
|
+
a partial included in the right hand side of the title bar.
|
|
134
|
+
|
|
135
|
+
For example, to add a "View on site" button to view a blog post customize the `action_item` partial as follows:
|
|
136
|
+
|
|
137
|
+
```ruby
|
|
138
|
+
# app/views/admin/posts/_action_item.html.arb
|
|
139
|
+
div(class: :action_items) do
|
|
140
|
+
if params[:action] == 'index'
|
|
141
|
+
if controller.action_methods.include?('new') && authorized?(:create, Post)
|
|
142
|
+
action_link :new_model, new_resource_path
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
if params[:action] == 'show'
|
|
147
|
+
if controller.action_methods.include?('edit') && authorized?(:update, resource)
|
|
148
|
+
action_link :edit_model, edit_resource_path(resource)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
if resource.published? && current_admin_user.super_admin?
|
|
152
|
+
action_link "View on site", post_path(resource)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
# Modifying the Controller
|
|
159
|
+
|
|
160
|
+
Using the `controller` method within the registration block is deprecated, create and modify the controller explicitly.
|