activeadmin 0.6.6 → 1.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +11 -8
- data/.hound.yml +11 -0
- data/.travis.yml +36 -10
- data/.yardopts +2 -1
- data/CHANGELOG.md +118 -67
- data/CONTRIBUTING.md +96 -73
- data/Gemfile +35 -35
- data/Guardfile +1 -0
- data/LICENSE +1 -1
- data/README.md +98 -0
- data/Rakefile +12 -4
- data/activeadmin.gemspec +21 -24
- data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +14 -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/lib/batch_actions.js.coffee +39 -0
- data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
- 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 +37 -0
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
- data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
- data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
- data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
- data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
- data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
- data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
- 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.css.scss → _all.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
- data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
- data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
- data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
- data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
- data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
- data/app/views/active_admin/devise/shared/_links.erb +1 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
- data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
- data/config/locales/ar.yml +120 -0
- data/config/locales/bg.yml +26 -6
- data/config/locales/bs.yml +122 -0
- data/config/locales/ca.yml +10 -1
- data/config/locales/cs.yml +7 -2
- data/config/locales/da.yml +7 -3
- data/config/locales/de-CH.yml +14 -31
- data/config/locales/de.yml +33 -33
- data/config/locales/el.yml +28 -2
- data/config/locales/en-GB.yml +12 -4
- data/config/locales/en.yml +29 -3
- data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
- data/config/locales/es.yml +32 -25
- data/config/locales/fa.yml +120 -0
- data/config/locales/fi.yml +113 -0
- data/config/locales/fr.yml +21 -11
- data/config/locales/he.yml +7 -3
- data/config/locales/hr.yml +42 -11
- data/config/locales/hu.yml +10 -3
- data/config/locales/it.yml +31 -3
- data/config/locales/ja.yml +8 -3
- data/config/locales/ko.yml +7 -1
- data/config/locales/lt.yml +42 -11
- data/config/locales/lv.yml +7 -3
- data/config/locales/{no-NB.yml → nb.yml} +46 -15
- data/config/locales/nl.yml +36 -5
- data/config/locales/pl.yml +13 -8
- data/config/locales/pt-BR.yml +37 -5
- data/config/locales/pt-PT.yml +8 -4
- data/config/locales/ro.yml +7 -3
- data/config/locales/ru.yml +26 -5
- data/config/locales/sv-SE.yml +9 -5
- data/config/locales/tr.yml +10 -3
- data/config/locales/uk.yml +36 -12
- data/config/locales/vi.yml +7 -3
- data/config/locales/zh-CN.yml +26 -10
- data/config/locales/zh-TW.yml +19 -13
- data/docs/0-installation.md +65 -29
- data/docs/1-general-configuration.md +92 -81
- data/docs/10-custom-pages.md +68 -68
- data/docs/11-decorators.md +48 -59
- data/docs/12-arbre-components.md +80 -74
- data/docs/13-authorization-adapter.md +128 -107
- data/docs/14-gotchas.md +92 -0
- data/docs/2-resource-customization.md +293 -178
- data/docs/3-index-pages.md +160 -86
- data/docs/3-index-pages/custom-index.md +31 -0
- data/docs/3-index-pages/index-as-block.md +14 -9
- data/docs/3-index-pages/index-as-blog.md +41 -31
- data/docs/3-index-pages/index-as-grid.md +16 -8
- data/docs/3-index-pages/index-as-table.md +129 -52
- data/docs/4-csv-format.md +31 -24
- data/docs/5-forms.md +133 -56
- data/docs/6-show-pages.md +89 -27
- data/docs/7-sidebars.md +48 -27
- data/docs/8-custom-actions.md +98 -77
- data/docs/9-batch-actions.md +210 -146
- data/docs/README.md +24 -0
- data/features/action_item.feature +3 -3
- data/features/authorization_pundit.feature +37 -0
- data/features/breadcrumb.feature +48 -0
- data/features/comments/commenting.feature +56 -13
- data/features/development_reloading.feature +17 -30
- data/features/edit_page.feature +12 -1
- data/features/favicon.feature +3 -3
- data/features/i18n.feature +5 -4
- data/features/index/batch_actions.feature +41 -0
- data/features/index/filters.feature +67 -0
- data/features/index/format_as_csv.feature +90 -4
- data/features/index/formats.feature +27 -0
- data/features/index/index_as_blog.feature +4 -4
- data/features/index/index_as_table.feature +102 -6
- data/features/index/index_blank_slate.feature +22 -0
- data/features/index/index_scope_to.feature +16 -16
- data/features/index/page_title.feature +11 -0
- data/features/index/pagination.feature +1 -1
- data/features/index/switch_index_view.feature +14 -14
- data/features/new_page.feature +13 -2
- data/features/registering_pages.feature +1 -1
- data/features/renamed_resource.feature +32 -0
- data/features/show/page_title.feature +11 -0
- data/features/show/tabs.feature +27 -0
- data/features/sidebar_sections.feature +12 -0
- data/features/site_title.feature +2 -2
- data/features/specifying_actions.feature +3 -3
- data/features/step_definitions/action_item_steps.rb +2 -2
- data/features/step_definitions/action_link_steps.rb +14 -1
- data/features/step_definitions/additional_web_steps.rb +19 -20
- data/features/step_definitions/asset_steps.rb +3 -3
- data/features/step_definitions/attribute_steps.rb +8 -3
- data/features/step_definitions/batch_action_steps.rb +26 -9
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +1 -1
- data/features/step_definitions/comment_steps.rb +1 -1
- data/features/step_definitions/configuration_steps.rb +9 -2
- data/features/step_definitions/dashboard_steps.rb +2 -2
- data/features/step_definitions/factory_steps.rb +9 -8
- data/features/step_definitions/filter_steps.rb +25 -3
- data/features/step_definitions/flash_steps.rb +3 -3
- data/features/step_definitions/format_steps.rb +18 -18
- data/features/step_definitions/index_scope_steps.rb +5 -5
- data/features/step_definitions/layout_steps.rb +1 -1
- data/features/step_definitions/member_link_steps.rb +2 -2
- data/features/step_definitions/menu_steps.rb +3 -3
- data/features/step_definitions/pagination_steps.rb +2 -3
- data/features/step_definitions/sidebar_steps.rb +8 -3
- data/features/step_definitions/site_title_steps.rb +6 -4
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +5 -0
- data/features/step_definitions/table_steps.rb +4 -4
- data/features/step_definitions/user_steps.rb +10 -7
- data/features/step_definitions/web_steps.rb +14 -11
- data/features/sti_resource.feature +6 -2
- data/features/strong_parameters.feature +73 -0
- data/features/support/env.rb +34 -9
- data/features/support/paths.rb +14 -6
- data/features/support/selectors.rb +1 -1
- data/features/symbol_leak.feature +35 -0
- data/features/users/resetting_password.feature +5 -6
- data/lib/active_admin.rb +26 -25
- data/lib/active_admin/abstract_view_factory.rb +7 -17
- data/lib/active_admin/application.rb +72 -59
- data/lib/active_admin/asset_registration.rb +2 -2
- data/lib/active_admin/authorization_adapter.rb +2 -2
- data/lib/active_admin/base_controller.rb +2 -3
- data/lib/active_admin/base_controller/authorization.rb +13 -31
- data/lib/active_admin/batch_actions.rb +1 -1
- data/lib/active_admin/batch_actions/controller.rb +24 -8
- data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
- data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
- data/lib/active_admin/callbacks.rb +25 -24
- data/lib/active_admin/cancan_adapter.rb +7 -11
- data/lib/active_admin/csv_builder.rb +92 -15
- data/lib/active_admin/dependency.rb +93 -0
- data/lib/active_admin/deprecation.rb +6 -7
- data/lib/active_admin/devise.rb +28 -18
- data/lib/active_admin/dsl.rb +18 -11
- data/lib/active_admin/engine.rb +10 -8
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/filters/dsl.rb +2 -2
- data/lib/active_admin/filters/forms.rb +17 -27
- data/lib/active_admin/filters/formtastic_addons.rb +49 -15
- data/lib/active_admin/filters/resource_extension.rb +43 -34
- data/lib/active_admin/form_builder.rb +93 -154
- data/lib/active_admin/helpers/collection.rb +7 -13
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +5 -5
- data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
- data/lib/active_admin/helpers/scope_chain.rb +1 -1
- data/lib/active_admin/helpers/settings.rb +16 -9
- data/lib/active_admin/iconic.rb +17 -15
- data/lib/active_admin/iconic/icons.rb +136 -136
- data/lib/active_admin/inputs.rb +11 -7
- data/lib/active_admin/inputs/datepicker_input.rb +12 -3
- data/lib/active_admin/inputs/filters/base.rb +42 -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_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 +54 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/menu.rb +6 -4
- data/lib/active_admin/menu_collection.rb +1 -4
- data/lib/active_admin/namespace.rb +55 -29
- 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 +81 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
- data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
- data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
- data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/page.rb +7 -3
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/page_presenter.rb +2 -2
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/resource.rb +16 -17
- data/lib/active_admin/resource/action_items.rb +23 -18
- data/lib/active_admin/resource/belongs_to.rb +7 -3
- data/lib/active_admin/resource/controllers.rb +1 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +5 -5
- data/lib/active_admin/resource/naming.rb +27 -43
- data/lib/active_admin/resource/page_presenters.rb +1 -1
- data/lib/active_admin/resource/routes.rb +27 -11
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/sidebars.rb +1 -0
- data/lib/active_admin/resource_controller.rb +6 -7
- data/lib/active_admin/resource_controller/data_access.rb +101 -93
- data/lib/active_admin/resource_controller/decorators.rb +91 -9
- data/lib/active_admin/resource_controller/streaming.rb +37 -0
- data/lib/active_admin/resource_dsl.rb +53 -10
- data/lib/active_admin/router.rb +7 -7
- data/lib/active_admin/scope.rb +6 -6
- data/lib/active_admin/sidebar_section.rb +10 -2
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -17
- data/lib/active_admin/view_helpers.rb +0 -1
- data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
- data/lib/active_admin/view_helpers/display_helper.rb +30 -15
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
- data/lib/active_admin/view_helpers/fields_for.rb +4 -4
- data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
- data/lib/active_admin/view_helpers/form_helper.rb +5 -9
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
- data/lib/active_admin/views/action_items.rb +2 -2
- data/lib/active_admin/views/components/action_list_popover.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +123 -0
- data/lib/active_admin/views/components/attributes_table.rb +63 -21
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/columns.rb +13 -7
- data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
- data/lib/active_admin/views/components/index_list.rb +7 -7
- data/lib/active_admin/views/components/paginated_collection.rb +38 -20
- data/lib/active_admin/views/components/panel.rb +8 -2
- data/lib/active_admin/views/components/popover.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +5 -4
- data/lib/active_admin/views/components/sidebar_section.rb +3 -2
- data/lib/active_admin/views/components/site_title.rb +2 -2
- data/lib/active_admin/views/components/status_tag.rb +34 -11
- data/lib/active_admin/views/components/table_for.rb +90 -45
- 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 +3 -3
- data/lib/active_admin/views/header.rb +3 -3
- data/lib/active_admin/views/index_as_block.rb +10 -10
- data/lib/active_admin/views/index_as_blog.rb +45 -39
- data/lib/active_admin/views/index_as_grid.rb +14 -10
- data/lib/active_admin/views/index_as_table.rb +242 -129
- data/lib/active_admin/views/pages/base.rb +22 -18
- data/lib/active_admin/views/pages/form.rb +21 -11
- data/lib/active_admin/views/pages/index.rb +40 -35
- data/lib/active_admin/views/pages/layout.rb +1 -1
- data/lib/active_admin/views/pages/show.rb +4 -4
- data/lib/active_admin/views/tabbed_navigation.rb +7 -3
- data/lib/active_admin/views/title_bar.rb +10 -8
- data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
- data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
- data/lib/generators/active_admin/install/install_generator.rb +8 -9
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
- data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
- 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 +3 -5
- data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
- data/lib/ransack_ext.rb +12 -0
- data/script/local +2 -2
- data/script/travis_cache +107 -0
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
- data/spec/javascripts/fixtures/flashes.html +2 -0
- data/spec/rails_helper.rb +154 -0
- data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
- data/spec/{integration → requests}/javascript_spec.rb +5 -5
- data/spec/requests/memory_spec.rb +23 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +12 -173
- data/spec/support/detect_rails_version.rb +9 -17
- data/spec/support/rails_template.rb +64 -35
- data/spec/support/rails_template_with_data.rb +14 -14
- data/spec/support/templates/admin/stores.rb +5 -1
- 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 +4 -46
- data/spec/unit/abstract_view_factory_spec.rb +16 -16
- data/spec/unit/action_builder_spec.rb +24 -18
- data/spec/unit/active_admin_spec.rb +2 -2
- data/spec/unit/application_spec.rb +33 -34
- data/spec/unit/asset_registration_spec.rb +25 -29
- data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
- data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
- data/spec/unit/authorization/index_overriding_spec.rb +22 -0
- data/spec/unit/auto_link_spec.rb +43 -13
- data/spec/unit/batch_actions/resource_spec.rb +15 -14
- data/spec/unit/batch_actions/settings_spec.rb +18 -18
- data/spec/unit/belongs_to_spec.rb +28 -19
- data/spec/unit/cancan_adapter_spec.rb +8 -8
- data/spec/unit/comments_spec.rb +99 -39
- data/spec/unit/component_spec.rb +3 -3
- data/spec/unit/config_shared_examples.rb +10 -10
- data/spec/unit/controller_filters_spec.rb +23 -16
- data/spec/unit/csv_builder_spec.rb +165 -24
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +17 -37
- data/spec/unit/dsl_spec.rb +70 -9
- data/spec/unit/event_spec.rb +11 -11
- data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
- data/spec/unit/filters/resource_spec.rb +60 -26
- data/spec/unit/form_builder_spec.rb +419 -145
- data/spec/unit/generators/install_spec.rb +23 -0
- data/spec/unit/helpers/collection_spec.rb +18 -18
- data/spec/unit/helpers/scope_chain_spec.rb +6 -6
- data/spec/unit/helpers/settings_spec.rb +4 -4
- data/spec/unit/i18n_spec.rb +12 -0
- data/spec/unit/menu_collection_spec.rb +14 -14
- data/spec/unit/menu_item_spec.rb +42 -42
- data/spec/unit/menu_spec.rb +20 -20
- data/spec/unit/namespace/authorization_spec.rb +8 -8
- data/spec/unit/namespace/register_page_spec.rb +11 -11
- data/spec/unit/namespace/register_resource_spec.rb +28 -30
- data/spec/unit/namespace_spec.rb +20 -20
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +1 -1
- data/spec/unit/page_spec.rb +18 -12
- data/spec/unit/pretty_format_spec.rb +42 -14
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +15 -12
- data/spec/unit/resource/includes_spec.rb +21 -0
- data/spec/unit/resource/menu_spec.rb +1 -1
- data/spec/unit/resource/naming_spec.rb +35 -21
- data/spec/unit/resource/page_presenters_spec.rb +8 -8
- data/spec/unit/resource/pagination_spec.rb +6 -6
- data/spec/unit/resource/routes_spec.rb +10 -10
- data/spec/unit/resource/scopes_spec.rb +14 -7
- data/spec/unit/resource/sidebars_spec.rb +6 -6
- data/spec/unit/resource_collection_spec.rb +31 -38
- data/spec/unit/resource_controller/data_access_spec.rb +96 -30
- data/spec/unit/resource_controller/decorators_spec.rb +83 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
- data/spec/unit/resource_controller_spec.rb +73 -70
- data/spec/unit/resource_registration_spec.rb +12 -12
- data/spec/unit/resource_spec.rb +77 -42
- data/spec/unit/routing_spec.rb +39 -31
- data/spec/unit/scope_spec.rb +112 -30
- data/spec/unit/settings_spec.rb +51 -21
- data/spec/unit/view_factory_spec.rb +2 -3
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
- data/spec/unit/view_helpers/display_name_spec.rb +49 -21
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
- data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
- data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
- data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
- data/spec/unit/views/components/attributes_table_spec.rb +171 -30
- data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
- data/spec/unit/views/components/blank_slate_spec.rb +14 -4
- data/spec/unit/views/components/columns_spec.rb +52 -22
- data/spec/unit/views/components/index_list_spec.rb +11 -8
- data/spec/unit/views/components/index_table_for_spec.rb +46 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
- data/spec/unit/views/components/panel_spec.rb +32 -21
- data/spec/unit/views/components/popover_spec.rb +7 -7
- data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
- data/spec/unit/views/components/site_title_spec.rb +26 -26
- data/spec/unit/views/components/status_tag_spec.rb +178 -38
- data/spec/unit/views/components/table_for_spec.rb +237 -35
- data/spec/unit/views/components/tabs_spec.rb +39 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
- data/spec/unit/views/pages/form_spec.rb +17 -10
- data/spec/unit/views/pages/index_spec.rb +60 -0
- data/spec/unit/views/pages/layout_spec.rb +17 -21
- data/spec/unit/views/pages/show_spec.rb +18 -6
- data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
- data/tasks/docs.rake +9 -11
- data/tasks/parallel_tests.rake +8 -2
- data/tasks/test.rake +13 -9
- data/tasks/yard.rake +7 -4
- metadata +219 -163
- data/.document +0 -5
- data/README.rdoc +0 -88
- data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/javascripts/active_admin/application.js +0 -3
- data/app/assets/javascripts/active_admin/base.js +0 -5
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
- data/app/views/active_admin/dashboard/index.html.arb +0 -1
- data/app/views/active_admin/resource/index.csv.erb +0 -23
- data/docs/3-index-pages/create-an-index.md +0 -29
- data/lib/active_admin/comments.rb +0 -83
- data/lib/active_admin/comments/comment.rb +0 -42
- data/lib/active_admin/comments/views.rb +0 -2
- data/lib/active_admin/dependency_checker.rb +0 -46
- data/lib/active_admin/inputs/filter_base.rb +0 -33
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
- data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
- data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
- data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
- data/lib/active_admin/inputs/filter_select_input.rb +0 -49
- data/lib/active_admin/inputs/filter_string_input.rb +0 -24
- data/lib/active_admin/reloader.rb +0 -130
- data/lib/active_admin/resource_controller/actions.rb +0 -81
- data/lib/active_admin/sass/active_admin.scss +0 -3
- data/lib/active_admin/sass/css_loader.rb +0 -16
- data/lib/active_admin/sass/helpers.rb +0 -45
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
- data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
- data/lib/active_admin/views/pages/dashboard.rb +0 -62
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
- data/lib/meta_search_ext.rb +0 -10
- data/spec/integration/memory_spec.rb +0 -29
- data/spec/integration/stylesheets_spec.rb +0 -41
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
- data/spec/javascripts/support/jquery.min.js +0 -4
- data/spec/spec_helper_without_rails.rb +0 -11
- data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
- data/spec/unit/rails_spec.rb +0 -43
- data/spec/unit/reloader_spec.rb +0 -124
- data/spec/unit/sass/helpers_spec.rb +0 -47
- data/tasks/js.rake +0 -32
@@ -0,0 +1,28 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module Views
|
3
|
+
class Tabs < ActiveAdmin::Component
|
4
|
+
builder_method :tabs
|
5
|
+
|
6
|
+
def tab(title, options = {}, &block)
|
7
|
+
title = title.to_s.titleize if title.is_a? Symbol
|
8
|
+
@menu << build_menu_item(title, options, &block)
|
9
|
+
@tabs_content << build_content_item(title, options, &block)
|
10
|
+
end
|
11
|
+
|
12
|
+
def build(&block)
|
13
|
+
@menu = ul(class: 'nav nav-tabs', role: "tablist")
|
14
|
+
@tabs_content = div(class: 'tab-content')
|
15
|
+
end
|
16
|
+
|
17
|
+
def build_menu_item(title, options, &block)
|
18
|
+
options = options.reverse_merge({})
|
19
|
+
li { link_to title, "##{title.parameterize}", options }
|
20
|
+
end
|
21
|
+
|
22
|
+
def build_content_item(title, options, &block)
|
23
|
+
options = options.reverse_merge(id: title.parameterize)
|
24
|
+
div(options, &block)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module Views
|
3
|
+
class UnsupportedBrowser < Component
|
4
|
+
def build
|
5
|
+
h1 I18n.t("active_admin.unsupported_browser.headline").html_safe
|
6
|
+
para I18n.t("active_admin.unsupported_browser.recommendation").html_safe
|
7
|
+
para I18n.t("active_admin.unsupported_browser.turn_off_compatibility_view").html_safe
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -3,7 +3,7 @@ module ActiveAdmin
|
|
3
3
|
class Footer < Component
|
4
4
|
|
5
5
|
def build
|
6
|
-
super :
|
6
|
+
super id: "footer"
|
7
7
|
powered_by_message
|
8
8
|
end
|
9
9
|
|
@@ -11,8 +11,8 @@ module ActiveAdmin
|
|
11
11
|
|
12
12
|
def powered_by_message
|
13
13
|
para I18n.t('active_admin.powered_by',
|
14
|
-
:
|
15
|
-
:
|
14
|
+
active_admin: link_to("Active Admin", "http://www.activeadmin.info"),
|
15
|
+
version: ActiveAdmin::VERSION).html_safe
|
16
16
|
end
|
17
17
|
|
18
18
|
end
|
@@ -3,7 +3,7 @@ module ActiveAdmin
|
|
3
3
|
class Header < Component
|
4
4
|
|
5
5
|
def build(namespace, menu)
|
6
|
-
super(:
|
6
|
+
super(id: "header")
|
7
7
|
|
8
8
|
@namespace = namespace
|
9
9
|
@menu = menu
|
@@ -20,11 +20,11 @@ module ActiveAdmin
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def build_global_navigation
|
23
|
-
insert_tag view_factory.global_navigation, @menu, :
|
23
|
+
insert_tag view_factory.global_navigation, @menu, class: 'header-item tabs'
|
24
24
|
end
|
25
25
|
|
26
26
|
def build_utility_navigation
|
27
|
-
insert_tag view_factory.utility_navigation, @utility_menu, :
|
27
|
+
insert_tag view_factory.utility_navigation, @utility_menu, id: "utility_nav", class: 'header-item tabs'
|
28
28
|
end
|
29
29
|
|
30
30
|
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
module ActiveAdmin
|
2
2
|
module Views
|
3
3
|
|
4
|
-
#
|
4
|
+
# # Index as a Block
|
5
5
|
#
|
6
6
|
# If you want to fully customize the display of your resources on the index
|
7
7
|
# screen, Index as a Block allows you to render a block of content for each
|
8
8
|
# resource.
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
10
|
+
# ```ruby
|
11
|
+
# index as: :block do |product|
|
12
|
+
# div for: product do
|
13
|
+
# resource_selection_cell product
|
14
|
+
# h2 auto_link product.title
|
15
|
+
# div simple_format product.description
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
# ```
|
19
19
|
#
|
20
20
|
class IndexAsBlock < ActiveAdmin::Component
|
21
21
|
|
@@ -1,65 +1,71 @@
|
|
1
1
|
module ActiveAdmin
|
2
2
|
module Views
|
3
3
|
|
4
|
-
#
|
4
|
+
# # Index as Blog
|
5
5
|
#
|
6
6
|
# Render your index page as a set of posts. The post has two main options:
|
7
7
|
# title and body.
|
8
8
|
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
9
|
+
# ```ruby
|
10
|
+
# index as: :blog do
|
11
|
+
# title :my_title # Calls #my_title on each resource
|
12
|
+
# body :my_body # Calls #my_body on each resource
|
13
|
+
# end
|
14
|
+
# ```
|
13
15
|
#
|
14
|
-
#
|
16
|
+
# ## Post Title
|
15
17
|
#
|
16
18
|
# The title is the content that will be rendered within a link to the
|
17
19
|
# resource. There are two main ways to set the content for the title
|
18
20
|
#
|
19
|
-
# First, you can pass in a method to be called on your
|
20
|
-
# resource. For example:
|
21
|
-
#
|
22
|
-
# index :as => :blog do
|
23
|
-
# title :a_method_to_call
|
24
|
-
# end
|
21
|
+
# First, you can pass in a method to be called on your resource. For example:
|
25
22
|
#
|
26
|
-
#
|
27
|
-
#
|
23
|
+
# ```ruby
|
24
|
+
# index as: :blog do
|
25
|
+
# title :a_method_to_call
|
26
|
+
# end
|
27
|
+
# ```
|
28
28
|
#
|
29
29
|
# Second, you can pass a block to the tile option which will then be
|
30
30
|
# used as the contents fo the title. The resource being rendered
|
31
31
|
# is passed in to the block. For Example:
|
32
32
|
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
33
|
+
# ```ruby
|
34
|
+
# index as: :blog do
|
35
|
+
# title do |post|
|
36
|
+
# span post.title, class: 'title'
|
37
|
+
# span post.created_at, class: 'created_at'
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
# ```
|
39
41
|
#
|
40
|
-
#
|
42
|
+
# ## Post Body
|
41
43
|
#
|
42
44
|
# The body is rendered underneath the title of each post. The same two
|
43
45
|
# style of options work as the Post Title above.
|
44
46
|
#
|
45
47
|
# Call a method on the resource as the body:
|
46
48
|
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
49
|
+
# ```ruby
|
50
|
+
# index as: :blog do
|
51
|
+
# title :my_title
|
52
|
+
# body :my_body
|
53
|
+
# end
|
54
|
+
# ```
|
51
55
|
#
|
52
56
|
# Or, render a block as the body:
|
53
57
|
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
# end
|
58
|
+
# ```ruby
|
59
|
+
# index as: :blog do
|
60
|
+
# title :my_title
|
61
|
+
# body do |post|
|
62
|
+
# div truncate post.title
|
63
|
+
# div class: 'meta' do
|
64
|
+
# span "Post in #{post.categories.join(', ')}"
|
62
65
|
# end
|
66
|
+
# end
|
67
|
+
# end
|
68
|
+
# ```
|
63
69
|
#
|
64
70
|
class IndexAsBlog < ActiveAdmin::Component
|
65
71
|
|
@@ -69,7 +75,7 @@ module ActiveAdmin
|
|
69
75
|
|
70
76
|
# Call the block passed in. This will set the
|
71
77
|
# title and body methods
|
72
|
-
|
78
|
+
instance_exec &page_presenter.block if page_presenter.block
|
73
79
|
|
74
80
|
add_class "index"
|
75
81
|
build_posts
|
@@ -107,7 +113,7 @@ module ActiveAdmin
|
|
107
113
|
end
|
108
114
|
|
109
115
|
def build_post(post)
|
110
|
-
div :
|
116
|
+
div for: post do
|
111
117
|
resource_selection_cell(post) if active_admin_config.batch_actions.any?
|
112
118
|
build_title(post)
|
113
119
|
build_body(post)
|
@@ -117,7 +123,7 @@ module ActiveAdmin
|
|
117
123
|
def build_title(post)
|
118
124
|
if @title
|
119
125
|
h3 do
|
120
|
-
a(:
|
126
|
+
a(href: resource_path(post)) do
|
121
127
|
render_method_on_post_or_call_proc post, @title
|
122
128
|
end
|
123
129
|
end
|
@@ -130,7 +136,7 @@ module ActiveAdmin
|
|
130
136
|
|
131
137
|
def build_body(post)
|
132
138
|
if @body
|
133
|
-
div :
|
139
|
+
div class: 'content' do
|
134
140
|
render_method_on_post_or_call_proc post, @body
|
135
141
|
end
|
136
142
|
end
|
@@ -138,8 +144,8 @@ module ActiveAdmin
|
|
138
144
|
|
139
145
|
def render_method_on_post_or_call_proc(post, proc)
|
140
146
|
case proc
|
141
|
-
when String,Symbol
|
142
|
-
post.
|
147
|
+
when String, Symbol
|
148
|
+
post.public_send proc
|
143
149
|
else
|
144
150
|
instance_exec post, &proc
|
145
151
|
end
|
@@ -1,25 +1,29 @@
|
|
1
1
|
module ActiveAdmin
|
2
2
|
module Views
|
3
3
|
|
4
|
-
#
|
4
|
+
# # Index as a Grid
|
5
5
|
#
|
6
6
|
# Sometimes you want to display the index screen for a set of resources as a grid
|
7
7
|
# (possibly a grid of thumbnail images). To do so, use the :grid option for the
|
8
8
|
# index block.
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
10
|
+
# ```ruby
|
11
|
+
# index as: :grid do |product|
|
12
|
+
# link_to image_tag(product.image_path), admin_product_path(product)
|
13
|
+
# end
|
14
|
+
# ```
|
13
15
|
#
|
14
16
|
# The block is rendered within a cell in the grid once for each resource in the
|
15
17
|
# collection. The resource is passed into the block for you to use in the view.
|
16
18
|
#
|
17
|
-
# You can customize the number of
|
19
|
+
# You can customize the number of columns that are rendered using the columns
|
18
20
|
# option:
|
19
21
|
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
22
|
+
# ```ruby
|
23
|
+
# index as: :grid, columns: 5 do |product|
|
24
|
+
# link_to image_tag(product.image_path), admin_product_path(product)
|
25
|
+
# end
|
26
|
+
# ```
|
23
27
|
#
|
24
28
|
class IndexAsGrid < ActiveAdmin::Component
|
25
29
|
|
@@ -42,7 +46,7 @@ module ActiveAdmin
|
|
42
46
|
|
43
47
|
def build_table
|
44
48
|
resource_selection_toggle_panel if active_admin_config.batch_actions.any?
|
45
|
-
table :
|
49
|
+
table class: "index_grid" do
|
46
50
|
collection.in_groups_of(number_of_columns).each do |group|
|
47
51
|
build_row(group)
|
48
52
|
end
|
@@ -58,7 +62,7 @@ module ActiveAdmin
|
|
58
62
|
end
|
59
63
|
|
60
64
|
def build_item(item)
|
61
|
-
td :
|
65
|
+
td for: item do
|
62
66
|
instance_exec(item, &@page_presenter.block)
|
63
67
|
end
|
64
68
|
end
|
@@ -1,66 +1,114 @@
|
|
1
1
|
module ActiveAdmin
|
2
2
|
module Views
|
3
3
|
|
4
|
-
#
|
4
|
+
# # Index as a Table
|
5
5
|
#
|
6
6
|
# By default, the index page is a table with each of the models content columns and links to
|
7
7
|
# show, edit and delete the object. There are many ways to customize what gets
|
8
8
|
# displayed.
|
9
9
|
#
|
10
|
-
#
|
10
|
+
# ## Defining Columns
|
11
11
|
#
|
12
12
|
# To display an attribute or a method on a resource, simply pass a symbol into the
|
13
13
|
# column method:
|
14
14
|
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
15
|
+
# ```ruby
|
16
|
+
# index do
|
17
|
+
# selectable_column
|
18
|
+
# column :title
|
19
|
+
# end
|
20
|
+
# ```
|
21
|
+
#
|
22
|
+
# For association columns we make an educated guess on what to display by
|
23
|
+
# calling the following methods in the following order:
|
24
|
+
#
|
25
|
+
# ```ruby
|
26
|
+
# :display_name, :full_name, :name, :username, :login, :title, :email, :to_s
|
27
|
+
# ```
|
28
|
+
#
|
29
|
+
# This can be customized in `config/initializers/active_admin.rb`.
|
19
30
|
#
|
20
31
|
# If the default title does not work for you, pass it as the first argument:
|
21
32
|
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
33
|
+
# ```ruby
|
34
|
+
# index do
|
35
|
+
# selectable_column
|
36
|
+
# column "My Custom Title", :title
|
37
|
+
# end
|
38
|
+
# ```
|
39
|
+
#
|
40
|
+
# Sometimes that just isn't enough and you need to write some view-specific code.
|
41
|
+
# For example, say we wanted a "Title" column that links to the posts admin screen.
|
42
|
+
#
|
43
|
+
# `column` accepts a block that will be rendered for each of the objects in the collection.
|
44
|
+
# The block is called once for each resource, which is passed as an argument to the block.
|
45
|
+
#
|
46
|
+
# ```ruby
|
47
|
+
# index do
|
48
|
+
# selectable_column
|
49
|
+
# column "Title" do |post|
|
50
|
+
# link_to post.title, admin_post_path(post)
|
51
|
+
# end
|
52
|
+
# end
|
53
|
+
# ```
|
26
54
|
#
|
27
|
-
#
|
28
|
-
# specific code. For example, say we wanted a colum called Title which holds a
|
29
|
-
# link to the posts admin screen.
|
55
|
+
# To setup links to View, Edit and Delete a resource, use the `actions` method:
|
30
56
|
#
|
31
|
-
#
|
32
|
-
#
|
57
|
+
# ```ruby
|
58
|
+
# index do
|
59
|
+
# selectable_column
|
60
|
+
# column :title
|
61
|
+
# actions
|
62
|
+
# end
|
63
|
+
# ```
|
33
64
|
#
|
34
|
-
#
|
35
|
-
# selectable_column
|
36
|
-
# column "Title" do |post|
|
37
|
-
# link_to post.title, admin_post_path(post)
|
38
|
-
# end
|
39
|
-
# end
|
65
|
+
# You can also append custom links to the default links:
|
40
66
|
#
|
41
|
-
#
|
42
|
-
#
|
67
|
+
# ```ruby
|
68
|
+
# index do
|
69
|
+
# selectable_column
|
70
|
+
# column :title
|
71
|
+
# actions do |post|
|
72
|
+
# item "Preview", admin_preview_post_path(post), class: "member_link"
|
73
|
+
# end
|
74
|
+
# end
|
75
|
+
# ```
|
43
76
|
#
|
44
|
-
#
|
77
|
+
# Or forego the default links entirely:
|
45
78
|
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
79
|
+
# ```ruby
|
80
|
+
# index do
|
81
|
+
# column :title
|
82
|
+
# actions defaults: false do |post|
|
83
|
+
# item "View", admin_post_path(post)
|
84
|
+
# end
|
85
|
+
# end
|
86
|
+
# ```
|
51
87
|
#
|
52
|
-
#
|
88
|
+
# Or append custom action with custom html via arbre:
|
53
89
|
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
90
|
+
# ```ruby
|
91
|
+
# index do
|
92
|
+
# column :title
|
93
|
+
# actions do |post|
|
94
|
+
# a link_to "View", admin_post_path(post)
|
95
|
+
# end
|
96
|
+
# end
|
97
|
+
# ```
|
61
98
|
#
|
99
|
+
# In case you prefer to list actions links in a dropdown menu:
|
62
100
|
#
|
63
|
-
#
|
101
|
+
# ```ruby
|
102
|
+
# index do
|
103
|
+
# selectable_column
|
104
|
+
# column :title
|
105
|
+
# actions dropdown: true do |post|
|
106
|
+
# item "Preview", admin_preview_post_path(post)
|
107
|
+
# end
|
108
|
+
# end
|
109
|
+
# ```
|
110
|
+
#
|
111
|
+
# ## Sorting
|
64
112
|
#
|
65
113
|
# When a column is generated from an Active Record attribute, the table is
|
66
114
|
# sortable by default. If you are creating a custom column, you may need to give
|
@@ -72,48 +120,89 @@ module ActiveAdmin
|
|
72
120
|
# By default, this is the column on the resource's table that the attribute corresponds to.
|
73
121
|
# Otherwise, any attribute that the resource collection responds to can be used.
|
74
122
|
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
#
|
78
|
-
#
|
79
|
-
#
|
123
|
+
# ```ruby
|
124
|
+
# index do
|
125
|
+
# column :title, sortable: :title do |post|
|
126
|
+
# link_to post.title, admin_post_path(post)
|
127
|
+
# end
|
128
|
+
# end
|
129
|
+
# ```
|
80
130
|
#
|
81
|
-
# You can
|
82
|
-
# and the attribute separated by a dot:
|
131
|
+
# You can turn off sorting on any column by passing false:
|
83
132
|
#
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
133
|
+
# ```ruby
|
134
|
+
# index do
|
135
|
+
# column :title, sortable: false
|
136
|
+
# end
|
137
|
+
# ```
|
87
138
|
#
|
88
|
-
#
|
139
|
+
# It's also possible to sort by PostgreSQL's hstore column key. You should set `sortable`
|
140
|
+
# option to a `column->'key'` value:
|
141
|
+
#
|
142
|
+
# ```ruby
|
143
|
+
# index do
|
144
|
+
# column :keywords, sortable: "meta->'keywords'"
|
145
|
+
# end
|
146
|
+
# ```
|
147
|
+
#
|
148
|
+
# ## Associated Sorting
|
89
149
|
#
|
90
|
-
#
|
91
|
-
#
|
92
|
-
# end
|
150
|
+
# You're normally able to sort columns alphabetically, but by default you
|
151
|
+
# can't sort by associated objects. Though with a few simple changes, you can.
|
93
152
|
#
|
94
|
-
#
|
153
|
+
# Assuming you're on the Books index page, and Book has_one Publisher:
|
154
|
+
#
|
155
|
+
# ```ruby
|
156
|
+
# controller do
|
157
|
+
# def scoped_collection
|
158
|
+
# super.includes :publisher # prevents N+1 queries to your database
|
159
|
+
# end
|
160
|
+
# end
|
161
|
+
# ```
|
162
|
+
#
|
163
|
+
# Then it's simple to sort by any Publisher attribute from within the index table:
|
164
|
+
#
|
165
|
+
# ```ruby
|
166
|
+
# index do
|
167
|
+
# column :publisher, sortable: 'publishers.name'
|
168
|
+
# end
|
169
|
+
# ```
|
170
|
+
#
|
171
|
+
# ## Showing and Hiding Columns
|
95
172
|
#
|
96
173
|
# The entire index block is rendered within the context of the view, so you can
|
97
174
|
# easily do things that show or hide columns based on the current context.
|
98
175
|
#
|
99
176
|
# For example, if you were using CanCan:
|
100
177
|
#
|
101
|
-
#
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
105
|
-
#
|
106
|
-
#
|
178
|
+
# ```ruby
|
179
|
+
# index do
|
180
|
+
# column :title, sortable: false
|
181
|
+
# column :secret_data if can? :manage, Post
|
182
|
+
# end
|
183
|
+
# ```
|
184
|
+
#
|
185
|
+
# ## Custom row class
|
186
|
+
#
|
187
|
+
# In order to add special class to table rows pass the proc object as a `:row_class` option
|
188
|
+
# of the `index` method.
|
189
|
+
#
|
190
|
+
# ```ruby
|
191
|
+
# index row_class: ->elem { 'active' if elem.active? } do
|
192
|
+
# # columns
|
193
|
+
# end
|
194
|
+
# ```
|
107
195
|
#
|
108
196
|
class IndexAsTable < ActiveAdmin::Component
|
109
197
|
|
110
198
|
def build(page_presenter, collection)
|
111
199
|
table_options = {
|
112
|
-
:
|
113
|
-
:
|
114
|
-
:
|
115
|
-
:
|
116
|
-
:
|
200
|
+
id: "index_table_#{active_admin_config.resource_name.plural}",
|
201
|
+
sortable: true,
|
202
|
+
class: "index_table index",
|
203
|
+
i18n: active_admin_config.resource_class,
|
204
|
+
paginator: page_presenter[:paginator] != false,
|
205
|
+
row_class: page_presenter[:row_class]
|
117
206
|
}
|
118
207
|
|
119
208
|
table_for collection, table_options do |t|
|
@@ -128,11 +217,12 @@ module ActiveAdmin
|
|
128
217
|
|
129
218
|
def default_table
|
130
219
|
proc do
|
131
|
-
|
220
|
+
selectable_column
|
221
|
+
id_column if resource_class.primary_key # View based Models have no primary_key
|
132
222
|
resource_class.content_columns.each do |col|
|
133
223
|
column col.name.to_sym
|
134
224
|
end
|
135
|
-
|
225
|
+
actions
|
136
226
|
end
|
137
227
|
end
|
138
228
|
|
@@ -149,90 +239,113 @@ module ActiveAdmin
|
|
149
239
|
# Display a column for checkbox
|
150
240
|
def selectable_column
|
151
241
|
return unless active_admin_config.batch_actions.any?
|
152
|
-
column
|
242
|
+
column resource_selection_toggle_cell, class: 'col-selectable', sortable: false do |resource|
|
243
|
+
resource_selection_cell resource
|
244
|
+
end
|
153
245
|
end
|
154
246
|
|
155
247
|
# Display a column for the id
|
156
248
|
def id_column
|
157
|
-
|
158
|
-
|
249
|
+
raise "#{resource_class.name} as no primary_key!" unless resource_class.primary_key
|
250
|
+
column(resource_class.human_attribute_name(resource_class.primary_key), sortable: resource_class.primary_key) do |resource|
|
251
|
+
if controller.action_methods.include?('show')
|
252
|
+
link_to resource.id, resource_path(resource), class: "resource_id_link"
|
253
|
+
else
|
254
|
+
resource.id
|
255
|
+
end
|
159
256
|
end
|
160
257
|
end
|
161
258
|
|
259
|
+
def default_actions
|
260
|
+
raise '`default_actions` is no longer provided in ActiveAdmin 1.x. Use `actions` instead.'
|
261
|
+
end
|
262
|
+
|
162
263
|
# Add links to perform actions.
|
163
264
|
#
|
164
|
-
#
|
165
|
-
#
|
265
|
+
# ```ruby
|
266
|
+
# # Add default links.
|
267
|
+
# actions
|
268
|
+
#
|
269
|
+
# # Add default links with a custom column title (empty by default).
|
270
|
+
# actions name: 'A title!'
|
271
|
+
#
|
272
|
+
# # Append some actions onto the end of the default actions.
|
273
|
+
# actions do |admin_user|
|
274
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
275
|
+
# item 'Grant User', grant_user_admin_user_path(admin_user)
|
276
|
+
# end
|
277
|
+
#
|
278
|
+
# # Append some actions onto the end of the default actions using arbre dsl.
|
279
|
+
# actions do |admin_user|
|
280
|
+
# a link_to 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
281
|
+
# end
|
282
|
+
#
|
283
|
+
# # Custom actions without the defaults.
|
284
|
+
# actions defaults: false do |admin_user|
|
285
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
286
|
+
# end
|
166
287
|
#
|
167
|
-
#
|
168
|
-
#
|
169
|
-
#
|
170
|
-
#
|
288
|
+
# # Append some actions onto the end of the default actions displayed in a Dropdown Menu
|
289
|
+
# actions dropdown: true do |admin_user|
|
290
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
291
|
+
# end
|
171
292
|
#
|
172
|
-
#
|
173
|
-
#
|
174
|
-
#
|
175
|
-
#
|
293
|
+
# # Custom actions without the defaults displayed in a Dropdown Menu.
|
294
|
+
# actions defaults: false, dropdown: true, dropdown_name: 'Additional actions' do |admin_user|
|
295
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
296
|
+
# end
|
297
|
+
#
|
298
|
+
# ```
|
176
299
|
def actions(options = {}, &block)
|
177
|
-
options
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
column options[:name] do |resource|
|
182
|
-
text_node default_actions(resource) if options[:defaults]
|
183
|
-
text_node instance_exec(resource, &block) if block_given?
|
184
|
-
end
|
185
|
-
end
|
300
|
+
name = options.delete(:name) { '' }
|
301
|
+
defaults = options.delete(:defaults) { true }
|
302
|
+
dropdown = options.delete(:dropdown) { false }
|
303
|
+
dropdown_name = options.delete(:dropdown_name) { I18n.t 'active_admin.dropdown_actions.button_label', default: 'Actions' }
|
186
304
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
if
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
305
|
+
options[:class] ||= 'col-actions'
|
306
|
+
|
307
|
+
column name, options do |resource|
|
308
|
+
if dropdown
|
309
|
+
dropdown_menu dropdown_name do
|
310
|
+
defaults(resource) if defaults
|
311
|
+
instance_exec(resource, &block) if block_given?
|
312
|
+
end
|
313
|
+
else
|
314
|
+
table_actions do
|
315
|
+
defaults(resource, css_class: :member_link) if defaults
|
316
|
+
if block_given?
|
317
|
+
block_result = instance_exec(resource, &block)
|
318
|
+
text_node block_result unless block_result.is_a? Arbre::Element
|
319
|
+
end
|
320
|
+
end
|
198
321
|
end
|
199
|
-
links
|
200
322
|
end
|
323
|
+
end
|
324
|
+
|
325
|
+
private
|
201
326
|
|
202
|
-
|
203
|
-
if
|
204
|
-
|
205
|
-
|
206
|
-
|
327
|
+
def defaults(resource, options = {})
|
328
|
+
if controller.action_methods.include?('show') && authorized?(ActiveAdmin::Auth::READ, resource)
|
329
|
+
item I18n.t('active_admin.view'), resource_path(resource), class: "view_link #{options[:css_class]}"
|
330
|
+
end
|
331
|
+
if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
|
332
|
+
item I18n.t('active_admin.edit'), edit_resource_path(resource), class: "edit_link #{options[:css_class]}"
|
333
|
+
end
|
334
|
+
if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
|
335
|
+
item I18n.t('active_admin.delete'), resource_path(resource), class: "delete_link #{options[:css_class]}",
|
336
|
+
method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
|
207
337
|
end
|
208
338
|
end
|
209
339
|
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
#
|
216
|
-
# index do |i|
|
217
|
-
# i.status_tag "State", :status_name
|
218
|
-
# end
|
219
|
-
#
|
220
|
-
# index do |i|
|
221
|
-
# i.status_tag do |post|
|
222
|
-
# post.published? ? 'published' : 'draft'
|
223
|
-
# end
|
224
|
-
# end
|
225
|
-
#
|
226
|
-
def status_tag(*args, &block)
|
227
|
-
col = Column.new(*args, &block)
|
228
|
-
data = col.data
|
229
|
-
col.data = proc do |resource|
|
230
|
-
status_tag call_method_or_proc_on(resource, data)
|
340
|
+
class TableActions < ActiveAdmin::Component
|
341
|
+
builder_method :table_actions
|
342
|
+
|
343
|
+
def item *args
|
344
|
+
text_node link_to *args
|
231
345
|
end
|
232
|
-
add_column col
|
233
346
|
end
|
234
|
-
end #
|
347
|
+
end # IndexTableFor
|
235
348
|
|
236
|
-
end #
|
349
|
+
end # IndexAsTable
|
237
350
|
end
|
238
351
|
end
|