activeadmin-rb 1.4.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/.gitignore +21 -0
- data/.mdlrc +1 -0
- data/.rubocop.yml +84 -0
- data/.simplecov +13 -0
- data/.travis.yml +49 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +389 -0
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +184 -0
- data/Gemfile +58 -0
- data/LICENSE +20 -0
- data/README.md +75 -0
- data/Rakefile +54 -0
- data/activeadmin-rb.gemspec +32 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +13 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +11 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +14 -0
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +26 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +42 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +46 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +104 -0
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +45 -0
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +46 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +22 -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/devise/confirmations/new.html.erb +15 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/app/views/active_admin/devise/shared/_links.erb +33 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/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.arb +1 -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 +134 -0
- data/config/locales/bg.yml +119 -0
- data/config/locales/bs.yml +120 -0
- data/config/locales/ca.yml +105 -0
- data/config/locales/cs.yml +108 -0
- data/config/locales/da.yml +136 -0
- data/config/locales/de-CH.yml +100 -0
- data/config/locales/de.yml +143 -0
- data/config/locales/el.yml +125 -0
- data/config/locales/en-CA.yml +138 -0
- data/config/locales/en-GB.yml +138 -0
- data/config/locales/en.yml +161 -0
- data/config/locales/eo.yml +144 -0
- data/config/locales/es-MX.yml +95 -0
- data/config/locales/es.yml +161 -0
- data/config/locales/fa.yml +118 -0
- data/config/locales/fi.yml +111 -0
- data/config/locales/fr.yml +140 -0
- data/config/locales/he.yml +141 -0
- data/config/locales/hr.yml +122 -0
- data/config/locales/hu.yml +97 -0
- data/config/locales/id.yml +134 -0
- data/config/locales/it.yml +143 -0
- data/config/locales/ja.yml +140 -0
- data/config/locales/ko.yml +119 -0
- data/config/locales/lt.yml +141 -0
- data/config/locales/lv.yml +91 -0
- data/config/locales/nb.yml +129 -0
- data/config/locales/nl.yml +143 -0
- data/config/locales/pl.yml +167 -0
- data/config/locales/pt-BR.yml +142 -0
- data/config/locales/pt-PT.yml +91 -0
- data/config/locales/ro.yml +95 -0
- data/config/locales/ru.yml +140 -0
- data/config/locales/sk.yml +108 -0
- data/config/locales/sv-SE.yml +134 -0
- data/config/locales/tr.yml +143 -0
- data/config/locales/uk.yml +135 -0
- data/config/locales/vi.yml +133 -0
- data/config/locales/zh-CN.yml +142 -0
- data/config/locales/zh-TW.yml +134 -0
- data/config/mdl_style.rb +9 -0
- data/cucumber.yml +6 -0
- data/docs/0-installation.md +118 -0
- data/docs/1-general-configuration.md +204 -0
- data/docs/10-custom-pages.md +150 -0
- data/docs/11-decorators.md +59 -0
- data/docs/12-arbre-components.md +203 -0
- data/docs/13-authorization-adapter.md +285 -0
- data/docs/14-gotchas.md +138 -0
- data/docs/2-resource-customization.md +466 -0
- data/docs/3-index-pages.md +328 -0
- data/docs/3-index-pages/custom-index.md +35 -0
- data/docs/3-index-pages/index-as-block.md +19 -0
- data/docs/3-index-pages/index-as-blog.md +69 -0
- data/docs/3-index-pages/index-as-grid.md +27 -0
- data/docs/3-index-pages/index-as-table.md +225 -0
- data/docs/4-csv-format.md +74 -0
- data/docs/5-forms.md +231 -0
- data/docs/6-show-pages.md +81 -0
- data/docs/7-sidebars.md +75 -0
- data/docs/8-custom-actions.md +177 -0
- data/docs/9-batch-actions.md +237 -0
- data/docs/CNAME +1 -0
- data/docs/Gemfile +2 -0
- data/docs/README.md +24 -0
- data/docs/_config.yml +2 -0
- data/docs/_includes/footer.html +8 -0
- data/docs/_includes/google-analytics.html +16 -0
- data/docs/_includes/head.html +7 -0
- data/docs/_includes/toc.html +98 -0
- data/docs/_includes/top-menu.html +9 -0
- data/docs/_layouts/default.html +21 -0
- data/docs/documentation.md +60 -0
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/code-header.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/index.html +125 -0
- data/docs/stylesheets/main.css +1152 -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 +19 -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/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 +227 -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 +38 -0
- data/features/registering_pages.feature +237 -0
- data/features/registering_resources.feature +33 -0
- data/features/renamed_resource.feature +30 -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 +33 -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 +81 -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 +100 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +35 -0
- data/features/step_definitions/filter_steps.rb +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 +58 -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 +8 -0
- data/features/step_definitions/table_steps.rb +116 -0
- data/features/step_definitions/user_steps.rb +52 -0
- data/features/step_definitions/web_steps.rb +86 -0
- data/features/sti_resource.feature +65 -0
- data/features/strong_parameters.feature +69 -0
- data/features/support/env.rb +121 -0
- data/features/support/paths.rb +73 -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 +11 -0
- data/gemfiles/rails_50.gemfile +11 -0
- data/gemfiles/rails_51.gemfile +11 -0
- data/gemfiles/rails_52.gemfile +12 -0
- data/lib/active_admin.rb +128 -0
- data/lib/active_admin/abstract_view_factory.rb +47 -0
- data/lib/active_admin/application.rb +241 -0
- data/lib/active_admin/application_settings.rb +39 -0
- data/lib/active_admin/asset_registration.rb +37 -0
- data/lib/active_admin/authorization_adapter.rb +129 -0
- data/lib/active_admin/base_controller.rb +81 -0
- data/lib/active_admin/base_controller/authorization.rb +128 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/batch_actions.rb +16 -0
- data/lib/active_admin/batch_actions/controller.rb +40 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -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 +131 -0
- data/lib/active_admin/dependency.rb +172 -0
- data/lib/active_admin/deprecation.rb +10 -0
- data/lib/active_admin/devise.rb +80 -0
- data/lib/active_admin/dsl.rb +167 -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 +21 -0
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/event.rb +24 -0
- data/lib/active_admin/filters.rb +11 -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 +155 -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/output_safety_helper.rb +35 -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.rb +21 -0
- data/lib/active_admin/inputs/datepicker_input.rb +27 -0
- data/lib/active_admin/inputs/filters/base.rb +44 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
- data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +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/localizers.rb +11 -0
- data/lib/active_admin/localizers/resource_localizer.rb +35 -0
- data/lib/active_admin/menu.rb +102 -0
- data/lib/active_admin/menu_collection.rb +91 -0
- data/lib/active_admin/menu_item.rb +69 -0
- data/lib/active_admin/namespace.rb +266 -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.rb +5 -0
- data/lib/active_admin/orm/active_record/comments.rb +101 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +31 -0
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +95 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/page.rb +111 -0
- data/lib/active_admin/page_controller.rb +29 -0
- data/lib/active_admin/page_dsl.rb +32 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/reloader.rb +25 -0
- data/lib/active_admin/resource.rb +206 -0
- data/lib/active_admin/resource/action_items.rb +120 -0
- data/lib/active_admin/resource/attributes.rb +44 -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 +67 -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 +82 -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 +28 -0
- data/lib/active_admin/resource_collection.rb +72 -0
- data/lib/active_admin/resource_controller.rb +64 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +322 -0
- data/lib/active_admin/resource_controller/decorators.rb +102 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
- data/lib/active_admin/resource_controller/scoping.rb +31 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/resource_controller/streaming.rb +43 -0
- data/lib/active_admin/resource_dsl.rb +222 -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 +27 -0
- data/lib/active_admin/view_helpers.rb +20 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +33 -0
- data/lib/active_admin/view_helpers/display_helper.rb +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/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/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/active_admin_form.rb +149 -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.rb +13 -0
- data/lib/active_admin/views/components/sidebar_section.rb +37 -0
- data/lib/active_admin/views/components/site_title.rb +54 -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 +31 -0
- data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
- data/lib/active_admin/views/footer.rb +30 -0
- data/lib/active_admin/views/header.rb +19 -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 +389 -0
- data/lib/active_admin/views/pages/base.rb +123 -0
- data/lib/active_admin/views/pages/form.rb +64 -0
- data/lib/active_admin/views/pages/index.rb +163 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/page.rb +30 -0
- data/lib/active_admin/views/pages/show.rb +65 -0
- data/lib/active_admin/views/tabbed_navigation.rb +11 -0
- data/lib/active_admin/views/title_bar.rb +55 -0
- data/lib/activeadmin-rb.rb +1 -0
- data/lib/bug_report_templates/active_admin_master.rb +112 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
- data/lib/generators/active_admin/install/install_generator.rb +45 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +293 -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 +30 -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 +43 -0
- data/lib/ransack_ext.rb +20 -0
- data/spec/bug_report_templates_spec.rb +26 -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.flash.js.coffee +25 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/flashes.html +2 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_runner.rb +19 -0
- data/spec/rails_helper.rb +60 -0
- data/spec/requests/default_namespace_spec.rb +81 -0
- data/spec/requests/memory_spec.rb +25 -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 +73 -0
- data/spec/support/active_admin_request_helpers.rb +39 -0
- data/spec/support/rails_template.rb +156 -0
- data/spec/support/rails_template_with_data.rb +327 -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 +158 -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 +81 -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 +93 -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 +189 -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 +313 -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 +218 -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 +1012 -0
- data/spec/unit/generators/install_spec.rb +31 -0
- data/spec/unit/helpers/collection_spec.rb +68 -0
- data/spec/unit/helpers/output_safety_helper_spec.rb +79 -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 +62 -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 +126 -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 +82 -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 +49 -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 +273 -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 +19 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +253 -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/sidebar_spec.rb +24 -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 +71 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +39 -0
- data/spec/unit/views/index_as_blog_spec.rb +76 -0
- data/spec/unit/views/pages/base_spec.rb +14 -0
- data/spec/unit/views/pages/form_spec.rb +54 -0
- data/spec/unit/views/pages/index_spec.rb +60 -0
- data/spec/unit/views/pages/layout_spec.rb +59 -0
- data/spec/unit/views/pages/show_spec.rb +32 -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/javascripts/jquery-ui/data.js +41 -0
- data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
- data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
- data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
- data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
- data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +300 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
- data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
- metadata +1037 -0
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
fragment = options.fetch(:id, title.parameterize)
|
|
19
|
+
html_options = options.fetch(:html_options, {})
|
|
20
|
+
li html_options do
|
|
21
|
+
link_to title, "##{fragment}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def build_content_item(title, options, &block)
|
|
26
|
+
options = options.reverse_merge(id: title.parameterize)
|
|
27
|
+
div(options, &block)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
class Footer < Component
|
|
4
|
+
|
|
5
|
+
def build(namespace)
|
|
6
|
+
super id: "footer"
|
|
7
|
+
@namespace = namespace
|
|
8
|
+
|
|
9
|
+
if footer_text.present?
|
|
10
|
+
para footer_text
|
|
11
|
+
else
|
|
12
|
+
para powered_by_message
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def footer_text
|
|
19
|
+
@footer_text ||= @namespace.footer(self)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def powered_by_message
|
|
23
|
+
I18n.t('active_admin.powered_by',
|
|
24
|
+
active_admin: link_to("Active Admin", "http://www.activeadmin.info"),
|
|
25
|
+
version: ActiveAdmin::VERSION).html_safe
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
class Header < Component
|
|
4
|
+
|
|
5
|
+
def build(namespace, menu)
|
|
6
|
+
super(id: "header")
|
|
7
|
+
|
|
8
|
+
@namespace = namespace
|
|
9
|
+
@menu = menu
|
|
10
|
+
@utility_menu = @namespace.fetch_menu(:utility_navigation)
|
|
11
|
+
|
|
12
|
+
site_title @namespace
|
|
13
|
+
global_navigation @menu, class: 'header-item tabs'
|
|
14
|
+
utility_navigation @utility_menu, id: "utility_nav", class: 'header-item tabs'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# # Index as a Block
|
|
5
|
+
#
|
|
6
|
+
# If you want to fully customize the display of your resources on the index
|
|
7
|
+
# screen, Index as a Block allows you to render a block of content for each
|
|
8
|
+
# resource.
|
|
9
|
+
#
|
|
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
|
+
#
|
|
20
|
+
class IndexAsBlock < ActiveAdmin::Component
|
|
21
|
+
|
|
22
|
+
def build(page_presenter, collection)
|
|
23
|
+
add_class "index"
|
|
24
|
+
resource_selection_toggle_panel if active_admin_config.batch_actions.any?
|
|
25
|
+
collection.each do |obj|
|
|
26
|
+
instance_exec(obj, &page_presenter.block)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.index_name
|
|
31
|
+
"block"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# # Index as Blog
|
|
5
|
+
#
|
|
6
|
+
# Render your index page as a set of posts. The post has two main options:
|
|
7
|
+
# title and body.
|
|
8
|
+
#
|
|
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
|
+
# ```
|
|
15
|
+
#
|
|
16
|
+
# ## Post Title
|
|
17
|
+
#
|
|
18
|
+
# The title is the content that will be rendered within a link to the
|
|
19
|
+
# resource. There are two main ways to set the content for the title
|
|
20
|
+
#
|
|
21
|
+
# First, you can pass in a method to be called on your resource. For example:
|
|
22
|
+
#
|
|
23
|
+
# ```ruby
|
|
24
|
+
# index as: :blog do
|
|
25
|
+
# title :a_method_to_call
|
|
26
|
+
# end
|
|
27
|
+
# ```
|
|
28
|
+
#
|
|
29
|
+
# Second, you can pass a block to the tile option which will then be
|
|
30
|
+
# used as the contents of the title. The resource being rendered
|
|
31
|
+
# is passed in to the block. For Example:
|
|
32
|
+
#
|
|
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
|
+
# ```
|
|
41
|
+
#
|
|
42
|
+
# ## Post Body
|
|
43
|
+
#
|
|
44
|
+
# The body is rendered underneath the title of each post. The same two
|
|
45
|
+
# style of options work as the Post Title above.
|
|
46
|
+
#
|
|
47
|
+
# Call a method on the resource as the body:
|
|
48
|
+
#
|
|
49
|
+
# ```ruby
|
|
50
|
+
# index as: :blog do
|
|
51
|
+
# title :my_title
|
|
52
|
+
# body :my_body
|
|
53
|
+
# end
|
|
54
|
+
# ```
|
|
55
|
+
#
|
|
56
|
+
# Or, render a block as the body:
|
|
57
|
+
#
|
|
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(', ')}"
|
|
65
|
+
# end
|
|
66
|
+
# end
|
|
67
|
+
# end
|
|
68
|
+
# ```
|
|
69
|
+
#
|
|
70
|
+
class IndexAsBlog < ActiveAdmin::Component
|
|
71
|
+
|
|
72
|
+
def build(page_presenter, collection)
|
|
73
|
+
@page_presenter = page_presenter
|
|
74
|
+
@collection = collection
|
|
75
|
+
|
|
76
|
+
# Call the block passed in. This will set the
|
|
77
|
+
# title and body methods
|
|
78
|
+
instance_exec &page_presenter.block if page_presenter.block
|
|
79
|
+
|
|
80
|
+
add_class "index"
|
|
81
|
+
build_posts
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Setter method for the configuration of the title
|
|
85
|
+
def title(method = nil, &block)
|
|
86
|
+
if block_given? || method
|
|
87
|
+
@title = block_given? ? block : method
|
|
88
|
+
end
|
|
89
|
+
@title
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Setter method for the configuration of the body
|
|
93
|
+
#
|
|
94
|
+
def body(method = nil, &block)
|
|
95
|
+
if block_given? || method
|
|
96
|
+
@body = block_given? ? block : method
|
|
97
|
+
end
|
|
98
|
+
@body
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self.index_name
|
|
102
|
+
"blog"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
|
|
107
|
+
def build_posts
|
|
108
|
+
resource_selection_toggle_panel if active_admin_config.batch_actions.any?
|
|
109
|
+
@collection.each do |post|
|
|
110
|
+
build_post(post)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def build_post(post)
|
|
115
|
+
div for: post do
|
|
116
|
+
resource_selection_cell(post) if active_admin_config.batch_actions.any?
|
|
117
|
+
build_title(post)
|
|
118
|
+
build_body(post)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def build_title(post)
|
|
123
|
+
if @title
|
|
124
|
+
h3 do
|
|
125
|
+
a(href: resource_path(post)) do
|
|
126
|
+
render_method_on_post_or_call_proc post, @title
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
else
|
|
130
|
+
h3 do
|
|
131
|
+
auto_link(post)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def build_body(post)
|
|
137
|
+
if @body
|
|
138
|
+
div class: 'content' do
|
|
139
|
+
render_method_on_post_or_call_proc post, @body
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def render_method_on_post_or_call_proc(post, proc)
|
|
145
|
+
case proc
|
|
146
|
+
when String, Symbol
|
|
147
|
+
post.public_send proc
|
|
148
|
+
else
|
|
149
|
+
instance_exec post, &proc
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
end # Posts
|
|
154
|
+
end
|
|
155
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# # Index as a Grid
|
|
5
|
+
#
|
|
6
|
+
# Sometimes you want to display the index screen for a set of resources as a grid
|
|
7
|
+
# (possibly a grid of thumbnail images). To do so, use the :grid option for the
|
|
8
|
+
# index block.
|
|
9
|
+
#
|
|
10
|
+
# ```ruby
|
|
11
|
+
# index as: :grid do |product|
|
|
12
|
+
# link_to image_tag(product.image_path), admin_product_path(product)
|
|
13
|
+
# end
|
|
14
|
+
# ```
|
|
15
|
+
#
|
|
16
|
+
# The block is rendered within a cell in the grid once for each resource in the
|
|
17
|
+
# collection. The resource is passed into the block for you to use in the view.
|
|
18
|
+
#
|
|
19
|
+
# You can customize the number of columns that are rendered using the columns
|
|
20
|
+
# option:
|
|
21
|
+
#
|
|
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
|
+
# ```
|
|
27
|
+
#
|
|
28
|
+
class IndexAsGrid < ActiveAdmin::Component
|
|
29
|
+
|
|
30
|
+
def build(page_presenter, collection)
|
|
31
|
+
@page_presenter = page_presenter
|
|
32
|
+
@collection = collection.to_a
|
|
33
|
+
add_class "index"
|
|
34
|
+
build_table
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def number_of_columns
|
|
38
|
+
@page_presenter[:columns] || default_number_of_columns
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.index_name
|
|
42
|
+
"grid"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
protected
|
|
46
|
+
|
|
47
|
+
def build_table
|
|
48
|
+
resource_selection_toggle_panel if active_admin_config.batch_actions.any?
|
|
49
|
+
table class: "index_grid" do
|
|
50
|
+
@collection.in_groups_of(number_of_columns).each do |group|
|
|
51
|
+
build_row(group)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def build_row(group)
|
|
57
|
+
tr do
|
|
58
|
+
group.each do |item|
|
|
59
|
+
item ? build_item(item) : build_empty_cell
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def build_item(item)
|
|
65
|
+
td for: item do
|
|
66
|
+
instance_exec(item, &@page_presenter.block)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def build_empty_cell
|
|
71
|
+
td ' '.html_safe
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def default_number_of_columns
|
|
75
|
+
3
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# # Index as a Table
|
|
5
|
+
#
|
|
6
|
+
# By default, the index page is a table with each of the models content columns and links to
|
|
7
|
+
# show, edit and delete the object. There are many ways to customize what gets
|
|
8
|
+
# displayed.
|
|
9
|
+
#
|
|
10
|
+
# ## Defining Columns
|
|
11
|
+
#
|
|
12
|
+
# To display an attribute or a method on a resource, simply pass a symbol into the
|
|
13
|
+
# column method:
|
|
14
|
+
#
|
|
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`.
|
|
30
|
+
#
|
|
31
|
+
# If the default title does not work for you, pass it as the first argument:
|
|
32
|
+
#
|
|
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
|
+
# ```
|
|
54
|
+
#
|
|
55
|
+
# ## Defining Actions
|
|
56
|
+
#
|
|
57
|
+
# To setup links to View, Edit and Delete a resource, use the `actions` method:
|
|
58
|
+
#
|
|
59
|
+
# ```ruby
|
|
60
|
+
# index do
|
|
61
|
+
# selectable_column
|
|
62
|
+
# column :title
|
|
63
|
+
# actions
|
|
64
|
+
# end
|
|
65
|
+
# ```
|
|
66
|
+
#
|
|
67
|
+
# You can also append custom links to the default links:
|
|
68
|
+
#
|
|
69
|
+
# ```ruby
|
|
70
|
+
# index do
|
|
71
|
+
# selectable_column
|
|
72
|
+
# column :title
|
|
73
|
+
# actions do |post|
|
|
74
|
+
# item "Preview", admin_preview_post_path(post), class: "member_link"
|
|
75
|
+
# end
|
|
76
|
+
# end
|
|
77
|
+
# ```
|
|
78
|
+
#
|
|
79
|
+
# Or forego the default links entirely:
|
|
80
|
+
#
|
|
81
|
+
# ```ruby
|
|
82
|
+
# index do
|
|
83
|
+
# column :title
|
|
84
|
+
# actions defaults: false do |post|
|
|
85
|
+
# item "View", admin_post_path(post)
|
|
86
|
+
# end
|
|
87
|
+
# end
|
|
88
|
+
# ```
|
|
89
|
+
#
|
|
90
|
+
# Or append custom action with custom html via arbre:
|
|
91
|
+
#
|
|
92
|
+
# ```ruby
|
|
93
|
+
# index do
|
|
94
|
+
# column :title
|
|
95
|
+
# actions do |post|
|
|
96
|
+
# a "View", href: admin_post_path(post)
|
|
97
|
+
# end
|
|
98
|
+
# end
|
|
99
|
+
# ```
|
|
100
|
+
#
|
|
101
|
+
# In case you prefer to list actions links in a dropdown menu:
|
|
102
|
+
#
|
|
103
|
+
# ```ruby
|
|
104
|
+
# index do
|
|
105
|
+
# selectable_column
|
|
106
|
+
# column :title
|
|
107
|
+
# actions dropdown: true do |post|
|
|
108
|
+
# item "Preview", admin_preview_post_path(post)
|
|
109
|
+
# end
|
|
110
|
+
# end
|
|
111
|
+
# ```
|
|
112
|
+
#
|
|
113
|
+
# In addition, you can insert the position of the row in the greater collection by using the index_column special command:
|
|
114
|
+
#
|
|
115
|
+
# ```ruby
|
|
116
|
+
# index do
|
|
117
|
+
# selectable_column
|
|
118
|
+
# index_column
|
|
119
|
+
# column :title
|
|
120
|
+
# end
|
|
121
|
+
# ```
|
|
122
|
+
#
|
|
123
|
+
# index_column take an optional offset parameter to allow a developer to set the starting number for the index (default is 1).
|
|
124
|
+
#
|
|
125
|
+
# ## Sorting
|
|
126
|
+
#
|
|
127
|
+
# When a column is generated from an Active Record attribute, the table is
|
|
128
|
+
# sortable by default. If you are creating a custom column, you may need to give
|
|
129
|
+
# Active Admin a hint for how to sort the table.
|
|
130
|
+
#
|
|
131
|
+
# You can pass the key specifying the attribute which gets used to sort objects using Active Record.
|
|
132
|
+
# By default, this is the column on the resource's table that the attribute corresponds to.
|
|
133
|
+
# Otherwise, any attribute that the resource collection responds to can be used.
|
|
134
|
+
#
|
|
135
|
+
# ```ruby
|
|
136
|
+
# index do
|
|
137
|
+
# column :title, sortable: :title do |post|
|
|
138
|
+
# link_to post.title, admin_post_path(post)
|
|
139
|
+
# end
|
|
140
|
+
# end
|
|
141
|
+
# ```
|
|
142
|
+
#
|
|
143
|
+
# You can turn off sorting on any column by passing false:
|
|
144
|
+
#
|
|
145
|
+
# ```ruby
|
|
146
|
+
# index do
|
|
147
|
+
# column :title, sortable: false
|
|
148
|
+
# end
|
|
149
|
+
# ```
|
|
150
|
+
#
|
|
151
|
+
# It's also possible to sort by PostgreSQL's hstore column key. You should set `sortable`
|
|
152
|
+
# option to a `column->'key'` value:
|
|
153
|
+
#
|
|
154
|
+
# ```ruby
|
|
155
|
+
# index do
|
|
156
|
+
# column :keywords, sortable: "meta->'keywords'"
|
|
157
|
+
# end
|
|
158
|
+
# ```
|
|
159
|
+
#
|
|
160
|
+
# ## Custom sorting
|
|
161
|
+
#
|
|
162
|
+
# It is also possible to use database specific expressions and options for sorting by column
|
|
163
|
+
#
|
|
164
|
+
# ```ruby
|
|
165
|
+
# order_by(:title) do |order_clause|
|
|
166
|
+
# if order_clause.order == 'desc'
|
|
167
|
+
# [order_clause.to_sql, 'NULLS LAST'].join(' ')
|
|
168
|
+
# else
|
|
169
|
+
# [order_clause.to_sql, 'NULLS FIRST'].join(' ')
|
|
170
|
+
# end
|
|
171
|
+
# end
|
|
172
|
+
#
|
|
173
|
+
# index do
|
|
174
|
+
# column :title
|
|
175
|
+
# end
|
|
176
|
+
# ```
|
|
177
|
+
#
|
|
178
|
+
# ## Associated Sorting
|
|
179
|
+
#
|
|
180
|
+
# You're normally able to sort columns alphabetically, but by default you
|
|
181
|
+
# can't sort by associated objects. Though with a few simple changes, you can.
|
|
182
|
+
#
|
|
183
|
+
# Assuming you're on the Books index page, and Book has_one Publisher:
|
|
184
|
+
#
|
|
185
|
+
# ```ruby
|
|
186
|
+
# controller do
|
|
187
|
+
# def scoped_collection
|
|
188
|
+
# super.includes :publisher # prevents N+1 queries to your database
|
|
189
|
+
# end
|
|
190
|
+
# end
|
|
191
|
+
# ```
|
|
192
|
+
#
|
|
193
|
+
# Then it's simple to sort by any Publisher attribute from within the index table:
|
|
194
|
+
#
|
|
195
|
+
# ```ruby
|
|
196
|
+
# index do
|
|
197
|
+
# column :publisher, sortable: 'publishers.name'
|
|
198
|
+
# end
|
|
199
|
+
# ```
|
|
200
|
+
#
|
|
201
|
+
# ## Showing and Hiding Columns
|
|
202
|
+
#
|
|
203
|
+
# The entire index block is rendered within the context of the view, so you can
|
|
204
|
+
# easily do things that show or hide columns based on the current context.
|
|
205
|
+
#
|
|
206
|
+
# For example, if you were using CanCan:
|
|
207
|
+
#
|
|
208
|
+
# ```ruby
|
|
209
|
+
# index do
|
|
210
|
+
# column :title, sortable: false
|
|
211
|
+
# column :secret_data if can? :manage, Post
|
|
212
|
+
# end
|
|
213
|
+
# ```
|
|
214
|
+
#
|
|
215
|
+
# ## Custom row class
|
|
216
|
+
#
|
|
217
|
+
# In order to add special class to table rows pass the proc object as a `:row_class` option
|
|
218
|
+
# of the `index` method.
|
|
219
|
+
#
|
|
220
|
+
# ```ruby
|
|
221
|
+
# index row_class: ->elem { 'active' if elem.active? } do
|
|
222
|
+
# # columns
|
|
223
|
+
# end
|
|
224
|
+
# ```
|
|
225
|
+
#
|
|
226
|
+
class IndexAsTable < ActiveAdmin::Component
|
|
227
|
+
|
|
228
|
+
def build(page_presenter, collection)
|
|
229
|
+
table_options = {
|
|
230
|
+
id: "index_table_#{active_admin_config.resource_name.plural}",
|
|
231
|
+
sortable: true,
|
|
232
|
+
class: "index_table index",
|
|
233
|
+
i18n: active_admin_config.resource_class,
|
|
234
|
+
paginator: page_presenter[:paginator] != false,
|
|
235
|
+
row_class: page_presenter[:row_class]
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
table_for collection, table_options do |t|
|
|
239
|
+
table_config_block = page_presenter.block || default_table
|
|
240
|
+
instance_exec(t, &table_config_block)
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def table_for(*args, &block)
|
|
245
|
+
insert_tag IndexTableFor, *args, &block
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
def default_table
|
|
249
|
+
proc do
|
|
250
|
+
selectable_column
|
|
251
|
+
id_column if resource_class.primary_key
|
|
252
|
+
active_admin_config.resource_columns.each do |attribute|
|
|
253
|
+
column attribute
|
|
254
|
+
end
|
|
255
|
+
actions
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def self.index_name
|
|
260
|
+
"table"
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
#
|
|
264
|
+
# Extend the default ActiveAdmin::Views::TableFor with some
|
|
265
|
+
# methods for quickly displaying items on the index page
|
|
266
|
+
#
|
|
267
|
+
class IndexTableFor < ::ActiveAdmin::Views::TableFor
|
|
268
|
+
|
|
269
|
+
# Display a column for checkbox
|
|
270
|
+
def selectable_column
|
|
271
|
+
return unless active_admin_config.batch_actions.any?
|
|
272
|
+
column resource_selection_toggle_cell, class: 'col-selectable', sortable: false do |resource|
|
|
273
|
+
resource_selection_cell resource
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def index_column(start_value = 1)
|
|
278
|
+
column '#', class: 'col-index', sortable: false do |resource|
|
|
279
|
+
@collection.offset_value + @collection.index(resource) + start_value
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# Display a column for the id
|
|
284
|
+
def id_column
|
|
285
|
+
raise "#{resource_class.name} has no primary_key!" unless resource_class.primary_key
|
|
286
|
+
column(resource_class.human_attribute_name(resource_class.primary_key), sortable: resource_class.primary_key) do |resource|
|
|
287
|
+
if controller.action_methods.include?('show')
|
|
288
|
+
link_to resource.id, resource_path(resource), class: "resource_id_link"
|
|
289
|
+
elsif controller.action_methods.include?('edit')
|
|
290
|
+
link_to resource.id, edit_resource_path(resource), class: "resource_id_link"
|
|
291
|
+
else
|
|
292
|
+
resource.id
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def default_actions
|
|
298
|
+
raise '`default_actions` is no longer provided in ActiveAdmin 1.x. Use `actions` instead.'
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
# Add links to perform actions.
|
|
302
|
+
#
|
|
303
|
+
# ```ruby
|
|
304
|
+
# # Add default links.
|
|
305
|
+
# actions
|
|
306
|
+
#
|
|
307
|
+
# # Add default links with a custom column title (empty by default).
|
|
308
|
+
# actions name: 'A title!'
|
|
309
|
+
#
|
|
310
|
+
# # Append some actions onto the end of the default actions.
|
|
311
|
+
# actions do |admin_user|
|
|
312
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
|
313
|
+
# item 'Grant User', grant_user_admin_user_path(admin_user)
|
|
314
|
+
# end
|
|
315
|
+
#
|
|
316
|
+
# # Append some actions onto the end of the default actions using arbre dsl.
|
|
317
|
+
# actions do |admin_user|
|
|
318
|
+
# a 'Grant Admin', href: grant_admin_admin_user_path(admin_user)
|
|
319
|
+
# end
|
|
320
|
+
#
|
|
321
|
+
# # Custom actions without the defaults.
|
|
322
|
+
# actions defaults: false do |admin_user|
|
|
323
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
|
324
|
+
# end
|
|
325
|
+
#
|
|
326
|
+
# # Append some actions onto the end of the default actions displayed in a Dropdown Menu
|
|
327
|
+
# actions dropdown: true do |admin_user|
|
|
328
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
|
329
|
+
# end
|
|
330
|
+
#
|
|
331
|
+
# # Custom actions without the defaults displayed in a Dropdown Menu.
|
|
332
|
+
# actions defaults: false, dropdown: true, dropdown_name: 'Additional actions' do |admin_user|
|
|
333
|
+
# item 'Grant Admin', grant_admin_admin_user_path(admin_user)
|
|
334
|
+
# end
|
|
335
|
+
#
|
|
336
|
+
# ```
|
|
337
|
+
def actions(options = {}, &block)
|
|
338
|
+
name = options.delete(:name) { '' }
|
|
339
|
+
defaults = options.delete(:defaults) { true }
|
|
340
|
+
dropdown = options.delete(:dropdown) { false }
|
|
341
|
+
dropdown_name = options.delete(:dropdown_name) { I18n.t 'active_admin.dropdown_actions.button_label', default: 'Actions' }
|
|
342
|
+
|
|
343
|
+
options[:class] ||= 'col-actions'
|
|
344
|
+
|
|
345
|
+
column name, options do |resource|
|
|
346
|
+
if dropdown
|
|
347
|
+
dropdown_menu dropdown_name do
|
|
348
|
+
defaults(resource) if defaults
|
|
349
|
+
instance_exec(resource, &block) if block_given?
|
|
350
|
+
end
|
|
351
|
+
else
|
|
352
|
+
table_actions do
|
|
353
|
+
defaults(resource, css_class: :member_link) if defaults
|
|
354
|
+
if block_given?
|
|
355
|
+
block_result = instance_exec(resource, &block)
|
|
356
|
+
text_node block_result unless block_result.is_a? Arbre::Element
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
end
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
private
|
|
364
|
+
|
|
365
|
+
def defaults(resource, options = {})
|
|
366
|
+
if controller.action_methods.include?('show') && authorized?(ActiveAdmin::Auth::READ, resource)
|
|
367
|
+
item I18n.t('active_admin.view'), resource_path(resource), class: "view_link #{options[:css_class]}", title: I18n.t('active_admin.view')
|
|
368
|
+
end
|
|
369
|
+
if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
|
|
370
|
+
item I18n.t('active_admin.edit'), edit_resource_path(resource), class: "edit_link #{options[:css_class]}", title: I18n.t('active_admin.edit')
|
|
371
|
+
end
|
|
372
|
+
if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
|
|
373
|
+
item I18n.t('active_admin.delete'), resource_path(resource), class: "delete_link #{options[:css_class]}", title: I18n.t('active_admin.delete'),
|
|
374
|
+
method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
|
|
375
|
+
end
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
class TableActions < ActiveAdmin::Component
|
|
379
|
+
builder_method :table_actions
|
|
380
|
+
|
|
381
|
+
def item *args
|
|
382
|
+
text_node link_to *args
|
|
383
|
+
end
|
|
384
|
+
end
|
|
385
|
+
end # IndexTableFor
|
|
386
|
+
|
|
387
|
+
end
|
|
388
|
+
end
|
|
389
|
+
end
|