activeadmin-rails 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.codeclimate.yml +64 -0
- data/.github/ISSUE_TEMPLATE.md +20 -0
- data/.github/workflows/ci.yaml +64 -0
- data/.github/workflows/daily.yaml +64 -0
- data/.github/workflows/pages.yml +72 -0
- data/.gitignore +23 -0
- data/.mdlrc +1 -0
- data/.rubocop.yml +84 -0
- data/.simplecov +13 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +514 -0
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +190 -0
- data/Gemfile +51 -0
- data/LICENSE +20 -0
- data/README.md +84 -0
- data/Rakefile +56 -0
- data/activeadmin-rails.gemspec +39 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.es6 +23 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
- data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
- data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
- data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
- data/app/assets/javascripts/active_admin/lib/has_many.es6 +89 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
- data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
- data/app/assets/stylesheets/active_admin/_base.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +338 -0
- data/app/assets/stylesheets/active_admin/_header.scss +156 -0
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
- data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/print.scss +287 -0
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
- data/app/views/active_admin/_head.html.erb +14 -0
- data/app/views/active_admin/base/_action_items.html.arb +7 -0
- data/app/views/active_admin/base/_breadcrumbs.html.arb +8 -0
- data/app/views/active_admin/base/_footer.html.arb +11 -0
- data/app/views/active_admin/base/_header.html.arb +5 -0
- data/app/views/active_admin/base/_sidebar.html.arb +3 -0
- data/app/views/active_admin/base/_title_bar.html.arb +9 -0
- data/app/views/active_admin/base/_unsupported_browser.html.erb +5 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/shared/_links.erb +33 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
- data/app/views/active_admin/page/_content.html.arb +1 -0
- data/app/views/active_admin/page/index.html.arb +8 -0
- data/app/views/active_admin/resource/_filters_form.html.erb +1 -0
- data/app/views/active_admin/resource/_form.html.arb +11 -0
- data/app/views/active_admin/resource/_index_as_table.html.arb +8 -0
- data/app/views/active_admin/resource/_show.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +13 -0
- data/app/views/active_admin/resource/index.html.arb +101 -0
- data/app/views/active_admin/resource/new.html.arb +13 -0
- data/app/views/active_admin/resource/show.html.arb +22 -0
- data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
- data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin.html.erb +33 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
- data/codecov.yml +25 -0
- data/config/i18n-tasks.yml +26 -0
- data/config/locales/ar.yml +133 -0
- data/config/locales/bg.yml +118 -0
- data/config/locales/bs.yml +119 -0
- data/config/locales/ca.yml +104 -0
- data/config/locales/cs.yml +107 -0
- data/config/locales/da.yml +135 -0
- data/config/locales/de-CH.yml +99 -0
- data/config/locales/de.yml +142 -0
- data/config/locales/el.yml +124 -0
- data/config/locales/en-CA.yml +137 -0
- data/config/locales/en-GB.yml +137 -0
- data/config/locales/en.yml +160 -0
- data/config/locales/eo.yml +143 -0
- data/config/locales/es-MX.yml +94 -0
- data/config/locales/es.yml +160 -0
- data/config/locales/fa.yml +117 -0
- data/config/locales/fi.yml +110 -0
- data/config/locales/fr.yml +139 -0
- data/config/locales/he.yml +140 -0
- data/config/locales/hr.yml +121 -0
- data/config/locales/hu.yml +96 -0
- data/config/locales/id.yml +133 -0
- data/config/locales/it.yml +142 -0
- data/config/locales/ja.yml +139 -0
- data/config/locales/ko.yml +118 -0
- data/config/locales/lt.yml +140 -0
- data/config/locales/lv.yml +90 -0
- data/config/locales/nb.yml +128 -0
- data/config/locales/nl.yml +142 -0
- data/config/locales/pl.yml +166 -0
- data/config/locales/pt-BR.yml +141 -0
- data/config/locales/pt-PT.yml +90 -0
- data/config/locales/ro.yml +94 -0
- data/config/locales/ru.yml +139 -0
- data/config/locales/sk.yml +107 -0
- data/config/locales/sv-SE.yml +133 -0
- data/config/locales/tr.yml +142 -0
- data/config/locales/uk.yml +134 -0
- data/config/locales/vi.yml +132 -0
- data/config/locales/zh-CN.yml +141 -0
- data/config/locales/zh-TW.yml +133 -0
- data/config/mdl_style.rb +9 -0
- data/cucumber.yml +6 -0
- data/docs/0-installation.md +121 -0
- data/docs/1-general-configuration.md +207 -0
- data/docs/10-custom-pages.md +148 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbo-components.md +200 -0
- data/docs/13-authorization-adapter.md +288 -0
- data/docs/14-gotchas.md +141 -0
- data/docs/2-resource-customization.md +480 -0
- data/docs/3-index-pages/custom-index.md +39 -0
- data/docs/3-index-pages/index-as-block.md +23 -0
- data/docs/3-index-pages/index-as-blog.md +73 -0
- data/docs/3-index-pages/index-as-grid.md +31 -0
- data/docs/3-index-pages/index-as-table.md +259 -0
- data/docs/3-index-pages.md +349 -0
- data/docs/4-csv-format.md +86 -0
- data/docs/5-forms.md +233 -0
- data/docs/6-show-pages.md +61 -0
- data/docs/7-sidebars.md +63 -0
- data/docs/8-custom-actions.md +160 -0
- data/docs/9-batch-actions.md +248 -0
- data/docs/CNAME +1 -0
- data/docs/Gemfile +7 -0
- data/docs/README.md +24 -0
- data/docs/_config.yml +15 -0
- data/docs/_includes/nav_footer_custom.html +3 -0
- data/docs/documentation.md +61 -0
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/index.css +835 -0
- data/docs/index.html +105 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/authorization_pundit.feature +37 -0
- data/features/belongs_to.feature +124 -0
- data/features/breadcrumb.feature +76 -0
- data/features/comments/commenting.feature +178 -0
- data/features/comments/viewing_index.feature +18 -0
- data/features/create_another.feature +55 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +43 -0
- data/features/development_reloading.feature +28 -0
- data/features/edit_page.feature +116 -0
- data/features/favicon.feature +20 -0
- data/features/filter_attributes.feature +46 -0
- data/features/first_boot.feature +16 -0
- data/features/footer.feature +29 -0
- data/features/global_navigation.feature +29 -0
- data/features/i18n.feature +55 -0
- data/features/index/batch_actions.feature +218 -0
- data/features/index/filters.feature +251 -0
- data/features/index/format_as_csv.feature +273 -0
- data/features/index/formats.feature +88 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +69 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +291 -0
- data/features/index/index_blank_slate.feature +83 -0
- data/features/index/index_parameters.feature +75 -0
- data/features/index/index_scope_to.feature +56 -0
- data/features/index/index_scopes.feature +325 -0
- data/features/index/page_title.feature +41 -0
- data/features/index/pagination.feature +63 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +85 -0
- data/features/meta_tags.feature +21 -0
- data/features/new_page.feature +136 -0
- data/features/registering_assets.feature +34 -0
- data/features/registering_pages.feature +237 -0
- data/features/registering_resources.feature +33 -0
- data/features/renamed_resource.feature +29 -0
- data/features/root_to.feature +18 -0
- data/features/show/attributes_table_title.feature +54 -0
- data/features/show/columns.feature +40 -0
- data/features/show/default_content.feature +44 -0
- data/features/show/page_title.feature +58 -0
- data/features/show/tabs.feature +47 -0
- data/features/sidebar_sections.feature +210 -0
- data/features/site_title.feature +47 -0
- data/features/specifying_actions.feature +118 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/action_link_steps.rb +19 -0
- data/features/step_definitions/additional_web_steps.rb +81 -0
- data/features/step_definitions/asset_steps.rb +15 -0
- data/features/step_definitions/attribute_steps.rb +18 -0
- data/features/step_definitions/attributes_table_title_steps.rb +11 -0
- data/features/step_definitions/batch_action_steps.rb +78 -0
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +13 -0
- data/features/step_definitions/column_steps.rb +8 -0
- data/features/step_definitions/comment_steps.rb +32 -0
- data/features/step_definitions/configuration_steps.rb +102 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +35 -0
- data/features/step_definitions/filter_steps.rb +57 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/footer_steps.rb +21 -0
- data/features/step_definitions/format_steps.rb +60 -0
- data/features/step_definitions/i18n_steps.rb +11 -0
- data/features/step_definitions/index_scope_steps.rb +42 -0
- data/features/step_definitions/index_views_steps.rb +3 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/member_link_steps.rb +7 -0
- data/features/step_definitions/menu_steps.rb +11 -0
- data/features/step_definitions/meta_tag_steps.rb +3 -0
- data/features/step_definitions/pagination_steps.rb +15 -0
- data/features/step_definitions/root_steps.rb +9 -0
- data/features/step_definitions/sidebar_steps.rb +11 -0
- data/features/step_definitions/site_title_steps.rb +31 -0
- data/features/step_definitions/tab_steps.rb +17 -0
- data/features/step_definitions/table_steps.rb +116 -0
- data/features/step_definitions/user_steps.rb +52 -0
- data/features/step_definitions/web_steps.rb +86 -0
- data/features/sti_resource.feature +65 -0
- data/features/strong_parameters.feature +69 -0
- data/features/support/env.rb +129 -0
- data/features/support/paths.rb +75 -0
- data/features/support/regular_env.rb +7 -0
- data/features/support/reload_env.rb +7 -0
- data/features/support/selectors.rb +45 -0
- data/features/users/logging_in.feature +32 -0
- data/features/users/logging_out.feature +29 -0
- data/features/users/resetting_password.feature +30 -0
- data/gemfiles/rails_42.gemfile +12 -0
- data/gemfiles/rails_52.gemfile +15 -0
- data/gemfiles/rails_60.gemfile +16 -0
- data/gemfiles/rails_61.gemfile +15 -0
- data/gemfiles/rails_61_turbolinks.gemfile +15 -0
- data/gemfiles/rails_70.gemfile +15 -0
- data/gemfiles/rails_70_hotwire.gemfile +15 -0
- data/gemfiles/rails_71.gemfile +17 -0
- data/lib/active_admin/abstract_view_factory.rb +47 -0
- data/lib/active_admin/application.rb +255 -0
- data/lib/active_admin/application_settings.rb +42 -0
- data/lib/active_admin/asset_registration.rb +29 -0
- data/lib/active_admin/authorization_adapter.rb +129 -0
- data/lib/active_admin/base_controller/authorization.rb +126 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/base_controller.rb +91 -0
- data/lib/active_admin/batch_actions/controller.rb +45 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +45 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
- data/lib/active_admin/batch_actions.rb +16 -0
- data/lib/active_admin/callbacks.rb +88 -0
- data/lib/active_admin/cancan_adapter.rb +36 -0
- data/lib/active_admin/component.rb +5 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +136 -0
- data/lib/active_admin/dependency.rb +96 -0
- data/lib/active_admin/deprecation.rb +10 -0
- data/lib/active_admin/devise.rb +80 -0
- data/lib/active_admin/dsl.rb +193 -0
- data/lib/active_admin/dynamic_setting.rb +38 -0
- data/lib/active_admin/dynamic_settings_node.rb +28 -0
- data/lib/active_admin/engine.rb +22 -0
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/event.rb +24 -0
- data/lib/active_admin/filters/active.rb +29 -0
- data/lib/active_admin/filters/active_filter.rb +123 -0
- data/lib/active_admin/filters/active_sidebar.rb +50 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +85 -0
- data/lib/active_admin/filters/formtastic_addons.rb +79 -0
- data/lib/active_admin/filters/resource_extension.rb +153 -0
- data/lib/active_admin/filters.rb +11 -0
- data/lib/active_admin/form_builder.rb +182 -0
- data/lib/active_admin/generators/boilerplate.rb +45 -0
- data/lib/active_admin/helpers/collection.rb +19 -0
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +38 -0
- data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/inputs/datepicker_input.rb +27 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
- data/lib/active_admin/inputs/filters/base.rb +44 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
- data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
- data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
- data/lib/active_admin/inputs/filters/select_input.rb +58 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/inputs/filters/text_input.rb +25 -0
- data/lib/active_admin/inputs.rb +21 -0
- data/lib/active_admin/localizers/resource_localizer.rb +35 -0
- data/lib/active_admin/localizers.rb +11 -0
- data/lib/active_admin/menu.rb +106 -0
- data/lib/active_admin/menu_collection.rb +55 -0
- data/lib/active_admin/menu_item.rb +79 -0
- data/lib/active_admin/namespace.rb +325 -0
- data/lib/active_admin/namespace_settings.rb +107 -0
- data/lib/active_admin/order_clause.rb +48 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +35 -0
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +95 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments.rb +99 -0
- data/lib/active_admin/orm/active_record.rb +5 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +114 -0
- data/lib/active_admin/page_controller.rb +29 -0
- data/lib/active_admin/page_dsl.rb +35 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/resource/action_items.rb +120 -0
- data/lib/active_admin/resource/attributes.rb +47 -0
- data/lib/active_admin/resource/belongs_to.rb +48 -0
- data/lib/active_admin/resource/controllers.rb +19 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +65 -0
- data/lib/active_admin/resource/naming.rb +62 -0
- data/lib/active_admin/resource/ordering.rb +11 -0
- data/lib/active_admin/resource/page_presenters.rb +90 -0
- data/lib/active_admin/resource/pagination.rb +23 -0
- data/lib/active_admin/resource/routes.rb +134 -0
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +52 -0
- data/lib/active_admin/resource/sidebars.rb +32 -0
- data/lib/active_admin/resource.rb +215 -0
- data/lib/active_admin/resource_collection.rb +72 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +341 -0
- data/lib/active_admin/resource_controller/decorators.rb +102 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
- data/lib/active_admin/resource_controller/scoping.rb +31 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/resource_controller/streaming.rb +47 -0
- data/lib/active_admin/resource_controller.rb +116 -0
- data/lib/active_admin/resource_dsl.rb +221 -0
- data/lib/active_admin/router.rb +113 -0
- data/lib/active_admin/scope.rb +60 -0
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/sidebar_section.rb +37 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +10 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +52 -0
- data/lib/active_admin/view_helpers/display_helper.rb +95 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
- data/lib/active_admin/view_helpers/fields_for.rb +50 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
- data/lib/active_admin/view_helpers/form_helper.rb +20 -0
- data/lib/active_admin/view_helpers/layout_helper.rb +32 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
- data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/view_helpers.rb +21 -0
- data/lib/active_admin/views/components/action_link.rb +13 -0
- data/lib/active_admin/views/components/active_admin_form.rb +163 -0
- data/lib/active_admin/views/components/attributes_panel.rb +23 -0
- data/lib/active_admin/views/components/attributes_table.rb +94 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +161 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
- data/lib/active_admin/views/components/index_list.rb +69 -0
- data/lib/active_admin/views/components/menu.rb +32 -0
- data/lib/active_admin/views/components/menu_item.rb +58 -0
- data/lib/active_admin/views/components/paginated_collection.rb +159 -0
- data/lib/active_admin/views/components/panel.rb +38 -0
- data/lib/active_admin/views/components/scopes.rb +72 -0
- data/lib/active_admin/views/components/sidebar_section.rb +34 -0
- data/lib/active_admin/views/components/site_title.rb +28 -0
- data/lib/active_admin/views/components/status_tag.rb +88 -0
- data/lib/active_admin/views/components/table_for.rb +209 -0
- data/lib/active_admin/views/components/tabs.rb +40 -0
- data/lib/active_admin/views/index_as_block.rb +36 -0
- data/lib/active_admin/views/index_as_blog.rb +155 -0
- data/lib/active_admin/views/index_as_grid.rb +80 -0
- data/lib/active_admin/views/index_as_table.rb +377 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +132 -0
- data/lib/activeadmin-rails.rb +1 -0
- data/lib/bug_report_templates/active_admin_main.rb +110 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
- data/lib/generators/active_admin/install/install_generator.rb +45 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +300 -0
- data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
- data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
- data/lib/generators/active_admin/page/USAGE +8 -0
- data/lib/generators/active_admin/page/page_generator.rb +12 -0
- data/lib/generators/active_admin/page/templates/page.rb +5 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
- data/lib/generators/active_admin/resource/templates/admin.rb.erb +6 -0
- data/lib/ransack_ext.rb +20 -0
- data/spec/bug_report_templates_spec.rb +28 -0
- data/spec/changelog_spec.rb +15 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_runner.rb +19 -0
- data/spec/rails_helper.rb +67 -0
- data/spec/requests/default_namespace_spec.rb +81 -0
- data/spec/requests/memory_spec.rb +25 -0
- data/spec/requests/pages/form_spec.rb +73 -0
- data/spec/requests/pages/index_spec.rb +96 -0
- data/spec/requests/pages/layout_spec.rb +59 -0
- data/spec/requests/pages/show_spec.rb +38 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/active_admin_integration_spec_helper.rb +79 -0
- data/spec/support/active_admin_request_helpers.rb +39 -0
- data/spec/support/rails_template.rb +224 -0
- data/spec/support/rails_template_with_data.rb +328 -0
- data/spec/support/templates/admin/stores.rb +7 -0
- data/spec/support/templates/en.yml +8 -0
- data/spec/support/templates/manifest.js +3 -0
- data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
- data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
- data/spec/support/templates/policies/admin_user_policy.rb +11 -0
- data/spec/support/templates/policies/application_policy.rb +44 -0
- data/spec/support/templates/policies/category_policy.rb +7 -0
- data/spec/support/templates/policies/post_policy.rb +15 -0
- data/spec/support/templates/policies/store_policy.rb +11 -0
- data/spec/support/templates/policies/user_policy.rb +11 -0
- data/spec/support/templates/post_decorator.rb +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +78 -0
- data/spec/unit/action_builder_spec.rb +160 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +180 -0
- data/spec/unit/asset_registration_spec.rb +52 -0
- data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
- data/spec/unit/authorization/controller_authorization_spec.rb +43 -0
- data/spec/unit/authorization/index_overriding_spec.rb +23 -0
- data/spec/unit/auto_link_spec.rb +103 -0
- data/spec/unit/batch_actions/resource_spec.rb +84 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +76 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +204 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/config_shared_examples.rb +59 -0
- data/spec/unit/controller_filters_spec.rb +41 -0
- data/spec/unit/csv_builder_spec.rb +321 -0
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +110 -0
- data/spec/unit/dsl_spec.rb +120 -0
- data/spec/unit/dynamic_settings_spec.rb +28 -0
- data/spec/unit/filters/active_filter_spec.rb +222 -0
- data/spec/unit/filters/active_spec.rb +24 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
- data/spec/unit/filters/resource_spec.rb +128 -0
- data/spec/unit/form_builder_spec.rb +1013 -0
- data/spec/unit/generators/install_spec.rb +31 -0
- data/spec/unit/helpers/collection_spec.rb +68 -0
- data/spec/unit/helpers/scope_chain_spec.rb +35 -0
- data/spec/unit/i18n_spec.rb +29 -0
- data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
- data/spec/unit/menu_collection_spec.rb +40 -0
- data/spec/unit/menu_item_spec.rb +82 -0
- data/spec/unit/menu_spec.rb +60 -0
- data/spec/unit/namespace/authorization_spec.rb +27 -0
- data/spec/unit/namespace/register_page_spec.rb +99 -0
- data/spec/unit/namespace/register_resource_spec.rb +162 -0
- data/spec/unit/namespace_spec.rb +132 -0
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +128 -0
- data/spec/unit/pretty_format_spec.rb +133 -0
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +83 -0
- data/spec/unit/resource/attributes_spec.rb +56 -0
- data/spec/unit/resource/includes_spec.rb +21 -0
- data/spec/unit/resource/menu_spec.rb +18 -0
- data/spec/unit/resource/naming_spec.rb +120 -0
- data/spec/unit/resource/ordering_spec.rb +35 -0
- data/spec/unit/resource/page_presenters_spec.rb +44 -0
- data/spec/unit/resource/pagination_spec.rb +38 -0
- data/spec/unit/resource/routes_spec.rb +125 -0
- data/spec/unit/resource/scopes_spec.rb +50 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +175 -0
- data/spec/unit/resource_controller/data_access_spec.rb +234 -0
- data/spec/unit/resource_controller/decorators_spec.rb +94 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
- data/spec/unit/resource_controller_spec.rb +290 -0
- data/spec/unit/resource_registration_spec.rb +61 -0
- data/spec/unit/resource_spec.rb +320 -0
- data/spec/unit/routing_spec.rb +211 -0
- data/spec/unit/scope_spec.rb +225 -0
- data/spec/unit/settings_node_spec.rb +26 -0
- data/spec/unit/view_factory_spec.rb +13 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +255 -0
- data/spec/unit/view_helpers/display_helper_spec.rb +203 -0
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
- data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
- data/spec/unit/view_helpers/flash_helper_spec.rb +24 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
- data/spec/unit/views/components/attributes_table_spec.rb +271 -0
- data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
- data/spec/unit/views/components/blank_slate_spec.rb +27 -0
- data/spec/unit/views/components/columns_spec.rb +187 -0
- data/spec/unit/views/components/index_list_spec.rb +49 -0
- data/spec/unit/views/components/index_table_for_spec.rb +127 -0
- data/spec/unit/views/components/menu_item_spec.rb +29 -0
- data/spec/unit/views/components/menu_spec.rb +168 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
- data/spec/unit/views/components/panel_spec.rb +58 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
- data/spec/unit/views/components/site_title_spec.rb +82 -0
- data/spec/unit/views/components/status_tag_spec.rb +265 -0
- data/spec/unit/views/components/table_for_spec.rb +441 -0
- data/spec/unit/views/components/tabs_spec.rb +99 -0
- data/spec/unit/views/index_as_blog_spec.rb +76 -0
- data/tasks/docs.rake +64 -0
- data/tasks/lint.rake +21 -0
- data/tasks/local.rake +25 -0
- data/tasks/parallel_tests.rake +66 -0
- data/tasks/test.rake +24 -0
- data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
- metadata +1012 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# = Columns Component
|
|
5
|
+
#
|
|
6
|
+
# The Columns component allows you draw content into scalable columns. All
|
|
7
|
+
# you need to do is define the number of columns and the component will
|
|
8
|
+
# take care of the rest.
|
|
9
|
+
#
|
|
10
|
+
# == Simple Columns
|
|
11
|
+
#
|
|
12
|
+
# To display columns, use the #columns method. Within the block, call the
|
|
13
|
+
# #column method to create a new column.
|
|
14
|
+
#
|
|
15
|
+
# To create a two column layout:
|
|
16
|
+
#
|
|
17
|
+
# columns do
|
|
18
|
+
# column do
|
|
19
|
+
# span "Column # 1
|
|
20
|
+
# end
|
|
21
|
+
# column do
|
|
22
|
+
# span "Column # 2
|
|
23
|
+
# end
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
#
|
|
27
|
+
# == Multiple Span Columns
|
|
28
|
+
#
|
|
29
|
+
# To make a column span multiple, pass the :span option to the column method:
|
|
30
|
+
#
|
|
31
|
+
# columns do
|
|
32
|
+
# column span: 2 do
|
|
33
|
+
# span "Column # 1
|
|
34
|
+
# end
|
|
35
|
+
# column do
|
|
36
|
+
# span "Column # 2
|
|
37
|
+
# end
|
|
38
|
+
# end
|
|
39
|
+
#
|
|
40
|
+
# By default, each column spans 1 column. So the above layout would have 2 columns,
|
|
41
|
+
# the first being 2 time bigger than the second.
|
|
42
|
+
#
|
|
43
|
+
#
|
|
44
|
+
# == Max and Min Column Sizes
|
|
45
|
+
#
|
|
46
|
+
# Active Admin is a fluid width layout, which means that columns are all defined
|
|
47
|
+
# using percentages. Sometimes this can cause issues if you don't want a column
|
|
48
|
+
# to shrink or expand past a certain point.
|
|
49
|
+
#
|
|
50
|
+
# To overcome this, columns include a :max_width and :min_width option.
|
|
51
|
+
#
|
|
52
|
+
# columns do
|
|
53
|
+
# column max_width: "200px", min_width: "100px" do
|
|
54
|
+
# span "Column # 1
|
|
55
|
+
# end
|
|
56
|
+
# column do
|
|
57
|
+
# span "Column # 2
|
|
58
|
+
# end
|
|
59
|
+
# end
|
|
60
|
+
#
|
|
61
|
+
# Now the first column will not grow bigger than 200px and will not shrink smaller
|
|
62
|
+
# than 100px.
|
|
63
|
+
class Columns < ActiveAdmin::Component
|
|
64
|
+
builder_method :columns
|
|
65
|
+
|
|
66
|
+
# For documentation, please take a look at Column#build
|
|
67
|
+
def column(*args, &block)
|
|
68
|
+
insert_tag Column, *args, &block
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Override add child to set widths
|
|
72
|
+
def add_child(*)
|
|
73
|
+
super
|
|
74
|
+
calculate_columns!
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
protected
|
|
78
|
+
|
|
79
|
+
# Override the closing tag to include a clear
|
|
80
|
+
def closing_tag
|
|
81
|
+
"<div style=\"clear:both;\"></div>" + super
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def margin_size
|
|
85
|
+
2
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Calculate our columns sizes and margins
|
|
89
|
+
def calculate_columns!
|
|
90
|
+
span_count = columns_span_count
|
|
91
|
+
columns_count = children.size
|
|
92
|
+
|
|
93
|
+
all_margins_width = margin_size * (span_count - 1)
|
|
94
|
+
column_width = (100.00 - all_margins_width) / span_count
|
|
95
|
+
|
|
96
|
+
columns.each_with_index do |column, i|
|
|
97
|
+
is_last_column = i == (columns_count - 1)
|
|
98
|
+
column.set_column_styles(column_width, margin_size, is_last_column)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def columns_span_count
|
|
103
|
+
count = 0
|
|
104
|
+
columns.each do |column|
|
|
105
|
+
count += column.span_size
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
count
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def columns
|
|
112
|
+
children.select { |child| child.is_a?(Column) }
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
class Column < ActiveAdmin::Component
|
|
117
|
+
|
|
118
|
+
attr_accessor :span_size, :max_width, :min_width
|
|
119
|
+
|
|
120
|
+
# @param [Hash] options An options hash for the column
|
|
121
|
+
#
|
|
122
|
+
# @option options [Integer] :span The columns this column should span
|
|
123
|
+
def build(options = {})
|
|
124
|
+
options = options.dup
|
|
125
|
+
@span_size = options.delete(:span) || 1
|
|
126
|
+
@max_width = options.delete(:max_width)
|
|
127
|
+
@min_width = options.delete(:min_width)
|
|
128
|
+
|
|
129
|
+
super(options)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def set_column_styles(column_width, margin_width, is_last_column = false)
|
|
133
|
+
column_with_span_width = (span_size * column_width) + ((span_size - 1) * margin_width)
|
|
134
|
+
|
|
135
|
+
styles = []
|
|
136
|
+
|
|
137
|
+
styles << "width: #{column_with_span_width}%;"
|
|
138
|
+
|
|
139
|
+
if max_width
|
|
140
|
+
styles << "max-width: #{safe_width(max_width)};"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
if min_width
|
|
144
|
+
styles << "min-width: #{safe_width(min_width)};"
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
styles << "margin-right: #{margin_width}%;" unless is_last_column
|
|
148
|
+
|
|
149
|
+
set_attribute :style, styles.join(" ")
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
private
|
|
153
|
+
|
|
154
|
+
# Converts values without a '%' or 'px' suffix to a pixel value
|
|
155
|
+
def safe_width(width)
|
|
156
|
+
width.to_s.gsub(/\A(\d+)\z/, '\1px')
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# Action List - A button with a drop down menu of links
|
|
5
|
+
#
|
|
6
|
+
# Creating a new action list:
|
|
7
|
+
#
|
|
8
|
+
# dropdown_menu "Administration" do
|
|
9
|
+
# item "Edit Details", edit_details_path
|
|
10
|
+
# item "Edit My Account", edit_my_account_path
|
|
11
|
+
# end
|
|
12
|
+
#
|
|
13
|
+
# This will create a button with the label "Administration" and
|
|
14
|
+
# a drop down once clicked with 2 options.
|
|
15
|
+
#
|
|
16
|
+
class DropdownMenu < ActiveAdmin::Component
|
|
17
|
+
builder_method :dropdown_menu
|
|
18
|
+
|
|
19
|
+
# Build a new action list
|
|
20
|
+
#
|
|
21
|
+
# @param [String] name The name to display in the button
|
|
22
|
+
#
|
|
23
|
+
# @param [Hash] options A set of options that get passed along to
|
|
24
|
+
# to the parent dom element.
|
|
25
|
+
def build(name, options = {})
|
|
26
|
+
options = options.dup
|
|
27
|
+
|
|
28
|
+
# Easily set options for the button or menu
|
|
29
|
+
button_options = options.delete(:button) || {}
|
|
30
|
+
menu_options = options.delete(:menu) || {}
|
|
31
|
+
|
|
32
|
+
@button = build_button(name, button_options)
|
|
33
|
+
@menu = build_menu(menu_options)
|
|
34
|
+
|
|
35
|
+
super(options)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def item(*args, **kwargs)
|
|
39
|
+
within @menu do
|
|
40
|
+
li link_to(*args, **kwargs)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def build_button(name, button_options)
|
|
47
|
+
button_options[:class] ||= ''
|
|
48
|
+
button_options[:class] << ' dropdown_menu_button'
|
|
49
|
+
|
|
50
|
+
button_options[:href] = '#'
|
|
51
|
+
|
|
52
|
+
a name, button_options
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def build_menu(options)
|
|
56
|
+
options[:class] ||= ''
|
|
57
|
+
options[:class] << ' dropdown_menu_list'
|
|
58
|
+
|
|
59
|
+
menu_list = nil
|
|
60
|
+
|
|
61
|
+
div class: 'dropdown_menu_list_wrapper' do
|
|
62
|
+
menu_list = ul(options)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
menu_list
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require 'active_admin/helpers/collection'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
module Views
|
|
5
|
+
|
|
6
|
+
# Renders a collection of index views available to the resource
|
|
7
|
+
# as a list with a separator
|
|
8
|
+
class IndexList < ActiveAdmin::Component
|
|
9
|
+
builder_method :index_list_renderer
|
|
10
|
+
|
|
11
|
+
include ::ActiveAdmin::Helpers::Collection
|
|
12
|
+
|
|
13
|
+
def default_class_name
|
|
14
|
+
"indexes table_tools_segmented_control"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def tag_name
|
|
18
|
+
'ul'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Builds the links for presenting different index views to the user
|
|
22
|
+
#
|
|
23
|
+
# @param [Array] index_classes The class constants that represent index page presenters
|
|
24
|
+
def build(index_classes)
|
|
25
|
+
unless current_filter_search_empty?
|
|
26
|
+
index_classes.each do |index_class|
|
|
27
|
+
build_index_list(index_class)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
protected
|
|
33
|
+
|
|
34
|
+
# Builds the individual link and HTML classes for each index page presenter
|
|
35
|
+
#
|
|
36
|
+
# @param [Class] index_class The class on which to build the link and html classes
|
|
37
|
+
def build_index_list(index_class)
|
|
38
|
+
li class: classes_for_index(index_class) do
|
|
39
|
+
params = request.query_parameters.except :page, :commit, :format
|
|
40
|
+
url_with_params = url_for(**params.merge(as: index_class.index_name.to_sym).symbolize_keys)
|
|
41
|
+
|
|
42
|
+
a href: url_with_params, class: "table_tools_button" do
|
|
43
|
+
name = index_class.index_name
|
|
44
|
+
I18n.t("active_admin.index_list.#{name}", default: name.to_s.titleize)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def classes_for_index(index_class)
|
|
50
|
+
classes = ["index"]
|
|
51
|
+
classes << "selected" if current_index?(index_class)
|
|
52
|
+
classes.join(" ")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def current_index?(index_class)
|
|
56
|
+
if params[:as]
|
|
57
|
+
params[:as] == index_class.index_name
|
|
58
|
+
else
|
|
59
|
+
active_admin_config.default_index_class == index_class
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def current_filter_search_empty?
|
|
64
|
+
params.include?(:q) && collection_is_empty?
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# Renders an ActiveAdmin::Menu as a set of unordered list items.
|
|
5
|
+
#
|
|
6
|
+
# This component takes cares of deciding which items should be
|
|
7
|
+
# displayed given the current context and renders them appropriately.
|
|
8
|
+
#
|
|
9
|
+
# The entire component is rendered within one ul element.
|
|
10
|
+
class Menu < Component
|
|
11
|
+
attr_reader :menu
|
|
12
|
+
builder_method :menu
|
|
13
|
+
|
|
14
|
+
# @param [ActiveAdmin::Menu] menu the Menu to render
|
|
15
|
+
# @param [Hash] options the options as passed to the underlying ul element.
|
|
16
|
+
#
|
|
17
|
+
def build(menu, options = {})
|
|
18
|
+
@menu = menu
|
|
19
|
+
super(options)
|
|
20
|
+
|
|
21
|
+
menu.items.each do |item|
|
|
22
|
+
menu_item(item) if helpers.render_in_context self, item.should_display
|
|
23
|
+
end
|
|
24
|
+
children.sort!
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def tag_name
|
|
28
|
+
'ul'
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# Arbre component used to render ActiveAdmin::MenuItem
|
|
5
|
+
class MenuItem < Component
|
|
6
|
+
builder_method :menu_item
|
|
7
|
+
attr_reader :label
|
|
8
|
+
attr_reader :url
|
|
9
|
+
attr_reader :priority
|
|
10
|
+
|
|
11
|
+
def build(item, options = {})
|
|
12
|
+
super(options.merge(id: item.id))
|
|
13
|
+
@label = helpers.render_in_context self, item.label
|
|
14
|
+
@url = helpers.render_in_context self, item.url
|
|
15
|
+
@priority = item.priority
|
|
16
|
+
@submenu = nil
|
|
17
|
+
|
|
18
|
+
add_class "current" if item.current? assigns[:current_tab]
|
|
19
|
+
|
|
20
|
+
if url
|
|
21
|
+
text_node link_to label, url, **item.html_options
|
|
22
|
+
else
|
|
23
|
+
span label, item.html_options
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
if item.items.any?
|
|
27
|
+
add_class "has_nested"
|
|
28
|
+
@submenu = menu(item)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def tag_name
|
|
33
|
+
'li'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Sorts by priority first, then alphabetically by label if needed.
|
|
37
|
+
def <=>(other)
|
|
38
|
+
result = priority <=> other.priority
|
|
39
|
+
result == 0 ? label <=> other.label : result
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def visible?
|
|
43
|
+
url.nil? || real_url? || @submenu && @submenu.children.any?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def to_s
|
|
47
|
+
visible? ? super : ''
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
# URL is not nil, empty, or '#'
|
|
53
|
+
def real_url?
|
|
54
|
+
url && url.present? && url != '#'
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
require 'active_admin/helpers/collection'
|
|
2
|
+
require 'active_admin/view_helpers/download_format_links_helper'
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
module Views
|
|
6
|
+
|
|
7
|
+
# Wraps the content with pagination and available formats.
|
|
8
|
+
#
|
|
9
|
+
# *Example:*
|
|
10
|
+
#
|
|
11
|
+
# paginated_collection collection, entry_name: "Post" do
|
|
12
|
+
# div do
|
|
13
|
+
# h2 "Inside the
|
|
14
|
+
# end
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# This will create a div with a sentence describing the number of
|
|
18
|
+
# posts in one of the following formats:
|
|
19
|
+
#
|
|
20
|
+
# * "No Posts found"
|
|
21
|
+
# * "Displaying all 10 Posts"
|
|
22
|
+
# * "Displaying Posts 1 - 30 of 31 in total"
|
|
23
|
+
#
|
|
24
|
+
# It will also generate pagination links.
|
|
25
|
+
#
|
|
26
|
+
class PaginatedCollection < ActiveAdmin::Component
|
|
27
|
+
builder_method :paginated_collection
|
|
28
|
+
|
|
29
|
+
attr_reader :collection
|
|
30
|
+
|
|
31
|
+
# Builds a new paginated collection component
|
|
32
|
+
#
|
|
33
|
+
# collection => A paginated collection from kaminari
|
|
34
|
+
# options => These options will be passed to `page_entries_info`
|
|
35
|
+
# entry_name => The name to display for this resource collection
|
|
36
|
+
# params => Extra parameters for pagination (e.g. { anchor: 'details' })
|
|
37
|
+
# param_name => Parameter name for page number in the links (:page by default)
|
|
38
|
+
# download_links => Download links override (false or [:csv, :pdf])
|
|
39
|
+
#
|
|
40
|
+
def build(collection, options = {})
|
|
41
|
+
@collection = collection
|
|
42
|
+
@params = options.delete(:params)
|
|
43
|
+
@param_name = options.delete(:param_name)
|
|
44
|
+
@download_links = options.delete(:download_links)
|
|
45
|
+
@display_total = options.delete(:pagination_total) { true }
|
|
46
|
+
@per_page = options.delete(:per_page)
|
|
47
|
+
|
|
48
|
+
unless collection.respond_to?(:total_pages)
|
|
49
|
+
raise(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
@contents = div(class: "paginated_collection_contents")
|
|
53
|
+
build_pagination_with_formats(options)
|
|
54
|
+
@built = true
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Override add_child to insert all children into the @contents div
|
|
58
|
+
def add_child(*args, &block)
|
|
59
|
+
if @built
|
|
60
|
+
@contents.add_child(*args, &block)
|
|
61
|
+
else
|
|
62
|
+
super
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
protected
|
|
67
|
+
|
|
68
|
+
def build_pagination_with_formats(options)
|
|
69
|
+
div id: "index_footer" do
|
|
70
|
+
build_per_page_select if @per_page.is_a?(Array)
|
|
71
|
+
build_pagination
|
|
72
|
+
div(page_entries_info(options).html_safe, class: "pagination_information")
|
|
73
|
+
|
|
74
|
+
formats = build_download_formats @download_links
|
|
75
|
+
build_download_format_links formats if formats.any?
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def build_per_page_select
|
|
80
|
+
div class: "pagination_per_page" do
|
|
81
|
+
text_node I18n.t("active_admin.pagination.per_page")
|
|
82
|
+
select do
|
|
83
|
+
@per_page.each do |per_page|
|
|
84
|
+
option(
|
|
85
|
+
per_page,
|
|
86
|
+
value: per_page,
|
|
87
|
+
selected: collection.limit_value == per_page ? "selected" : nil
|
|
88
|
+
)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def build_pagination
|
|
95
|
+
options = { theme: 'active_admin' }
|
|
96
|
+
options[:params] = @params if @params
|
|
97
|
+
options[:param_name] = @param_name if @param_name
|
|
98
|
+
|
|
99
|
+
if !@display_total && collection.respond_to?(:offset)
|
|
100
|
+
# The #paginate method in kaminari will query the resource with a
|
|
101
|
+
# count(*) to determine how many pages there should be unless
|
|
102
|
+
# you pass in the :total_pages option. We issue a query to determine
|
|
103
|
+
# if there is another page or not, but the limit/offset make this
|
|
104
|
+
# query fast.
|
|
105
|
+
offset = collection.offset(collection.current_page * @per_page.to_i).limit(1).count
|
|
106
|
+
options[:total_pages] = collection.current_page + offset
|
|
107
|
+
options[:right] = 0
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
text_node paginate collection, **options
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
include ::ActiveAdmin::Helpers::Collection
|
|
114
|
+
include ::ActiveAdmin::ViewHelpers::DownloadFormatLinksHelper
|
|
115
|
+
|
|
116
|
+
# modified from will_paginate
|
|
117
|
+
def page_entries_info(options = {})
|
|
118
|
+
if options[:entry_name]
|
|
119
|
+
entry_name = options[:entry_name]
|
|
120
|
+
entries_name = options[:entries_name] || entry_name.pluralize
|
|
121
|
+
elsif collection_is_empty?
|
|
122
|
+
entry_name = I18n.t "active_admin.pagination.entry", count: 1, default: 'entry'
|
|
123
|
+
entries_name = I18n.t "active_admin.pagination.entry", count: 2, default: 'entries'
|
|
124
|
+
else
|
|
125
|
+
key = "activerecord.models." + collection.first.class.model_name.i18n_key.to_s
|
|
126
|
+
entry_name = I18n.translate key, count: 1, default: collection.first.class.name.underscore.sub('_', ' ')
|
|
127
|
+
entries_name = I18n.translate key, count: collection.size, default: entry_name.pluralize
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
if @display_total
|
|
131
|
+
if collection.total_pages < 2
|
|
132
|
+
case collection_size
|
|
133
|
+
when 0; I18n.t("active_admin.pagination.empty", model: entries_name)
|
|
134
|
+
when 1; I18n.t("active_admin.pagination.one", model: entry_name)
|
|
135
|
+
else; I18n.t("active_admin.pagination.one_page", model: entries_name, n: collection.total_count)
|
|
136
|
+
end
|
|
137
|
+
else
|
|
138
|
+
offset = (collection.current_page - 1) * collection.limit_value
|
|
139
|
+
total = collection.total_count
|
|
140
|
+
I18n.t "active_admin.pagination.multiple",
|
|
141
|
+
model: entries_name,
|
|
142
|
+
total: total,
|
|
143
|
+
from: offset + 1,
|
|
144
|
+
to: offset + collection_size
|
|
145
|
+
end
|
|
146
|
+
else
|
|
147
|
+
# Do not display total count, in order to prevent a `SELECT count(*)`.
|
|
148
|
+
# To do so we must not call `collection.total_pages`
|
|
149
|
+
offset = (collection.current_page - 1) * collection.limit_value
|
|
150
|
+
I18n.t "active_admin.pagination.multiple_without_total",
|
|
151
|
+
model: entries_name,
|
|
152
|
+
from: offset + 1,
|
|
153
|
+
to: offset + collection_size
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
class Panel < ActiveAdmin::Component
|
|
5
|
+
builder_method :panel
|
|
6
|
+
|
|
7
|
+
def build(title, attributes = {})
|
|
8
|
+
super(attributes)
|
|
9
|
+
add_class "panel"
|
|
10
|
+
@title = h3(title.to_s)
|
|
11
|
+
@contents = div(class: "panel_contents")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def add_child(child)
|
|
15
|
+
if @contents
|
|
16
|
+
@contents << child
|
|
17
|
+
else
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Override children? to only report children when the panel's
|
|
23
|
+
# contents have been added to. This ensures that the panel
|
|
24
|
+
# correcly appends string values, etc.
|
|
25
|
+
def children?
|
|
26
|
+
@contents.children?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def header_action(*args)
|
|
30
|
+
action = args[0]
|
|
31
|
+
|
|
32
|
+
@title << div(class: 'header_action') do
|
|
33
|
+
action
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require 'active_admin/helpers/collection'
|
|
2
|
+
require 'active_admin/view_helpers/method_or_proc_helper'
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
module Views
|
|
6
|
+
|
|
7
|
+
# Renders a collection of ActiveAdmin::Scope objects as a
|
|
8
|
+
# simple list with a seperator
|
|
9
|
+
class Scopes < ActiveAdmin::Component
|
|
10
|
+
builder_method :scopes_renderer
|
|
11
|
+
|
|
12
|
+
include ActiveAdmin::ScopeChain
|
|
13
|
+
include ::ActiveAdmin::Helpers::Collection
|
|
14
|
+
|
|
15
|
+
def default_class_name
|
|
16
|
+
"scopes"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def tag_name
|
|
20
|
+
'div'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def build(scopes, options = {})
|
|
24
|
+
scopes.group_by(&:group).each do |group, group_scopes|
|
|
25
|
+
ul class: "table_tools_segmented_control #{group_class(group)}" do
|
|
26
|
+
group_scopes.each do |scope|
|
|
27
|
+
build_scope(scope, options) if call_method_or_exec_proc(scope.display_if_block)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
protected
|
|
34
|
+
|
|
35
|
+
def build_scope(scope, options)
|
|
36
|
+
li class: classes_for_scope(scope) do
|
|
37
|
+
params = request.query_parameters.except :page, :scope, :commit, :format
|
|
38
|
+
|
|
39
|
+
a href: url_for(scope: scope.id, params: params), class: 'table_tools_button' do
|
|
40
|
+
text_node scope_name(scope)
|
|
41
|
+
span class: 'count' do
|
|
42
|
+
"(#{get_scope_count(scope)})"
|
|
43
|
+
end if options[:scope_count] && scope.show_count
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def classes_for_scope(scope)
|
|
49
|
+
classes = ["scope", scope.id]
|
|
50
|
+
classes << "selected" if current_scope?(scope)
|
|
51
|
+
classes.join(" ")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def current_scope?(scope)
|
|
55
|
+
if params[:scope]
|
|
56
|
+
params[:scope] == scope.id
|
|
57
|
+
else
|
|
58
|
+
active_admin_config.default_scope(self) == scope
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Return the count for the scope passed in.
|
|
63
|
+
def get_scope_count(scope)
|
|
64
|
+
collection_size(scope_chain(scope, collection_before_scope))
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def group_class(group)
|
|
68
|
+
group.present? ? "scope-group-#{group}" : "scope-default-group"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
class SidebarSection < Panel
|
|
5
|
+
builder_method :sidebar_section
|
|
6
|
+
|
|
7
|
+
# Takes a ActiveAdmin::SidebarSection instance
|
|
8
|
+
def build(section)
|
|
9
|
+
@section = section
|
|
10
|
+
super(@section.title)
|
|
11
|
+
add_class @section.custom_class if @section.custom_class
|
|
12
|
+
self.id = @section.id
|
|
13
|
+
build_sidebar_content
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Renders attributes_table_for current resource
|
|
17
|
+
def attributes_table(*args, &block)
|
|
18
|
+
attributes_table_for resource, *args, &block
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
|
|
23
|
+
def build_sidebar_content
|
|
24
|
+
if @section.block
|
|
25
|
+
rvalue = instance_exec(&@section.block)
|
|
26
|
+
self << rvalue if rvalue.is_a?(String)
|
|
27
|
+
else
|
|
28
|
+
render(@section.partial_name)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|