yousty-activeadmin 1.0.4.pre → 1.0.5.pre
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 +4 -4
- data/CHANGELOG.md +261 -211
- data/CONTRIBUTING.md +73 -39
- data/Gemfile +38 -20
- data/Guardfile +1 -0
- data/LICENSE +1 -1
- data/README.md +48 -24
- data/Rakefile +12 -4
- data/activeadmin.gemspec +21 -26
- data/app/assets/javascripts/active_admin/application.js.coffee +34 -5
- data/app/assets/javascripts/active_admin/base.js.coffee +11 -2
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +3 -4
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +51 -55
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +29 -58
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +2 -3
- data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
- data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +51 -15
- data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
- data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
- data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -12
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +3 -1
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +1 -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.css.scss → _all.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_gradients.css.scss → _gradients.scss} +1 -1
- data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
- data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_rounded.css.scss → _rounded.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +7 -1
- data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
- data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +10 -7
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
- data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +8 -8
- data/app/views/active_admin/devise/shared/_links.erb +1 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
- data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
- data/config/locales/ar.yml +120 -0
- data/config/locales/bg.yml +26 -6
- data/config/locales/bs.yml +122 -0
- data/config/locales/ca.yml +10 -1
- data/config/locales/cs.yml +7 -2
- data/config/locales/da.yml +7 -3
- data/config/locales/de-CH.yml +14 -31
- data/config/locales/de.yml +33 -33
- data/config/locales/el.yml +127 -0
- data/config/locales/en-GB.yml +11 -4
- data/config/locales/en.yml +21 -4
- data/config/locales/{es_MX.yml → es-MX.yml} +14 -24
- data/config/locales/es.yml +32 -25
- data/config/locales/fa.yml +120 -0
- data/config/locales/fi.yml +9 -5
- data/config/locales/fr.yml +28 -12
- data/config/locales/he.yml +7 -3
- data/config/locales/hr.yml +42 -11
- data/config/locales/hu.yml +10 -3
- data/config/locales/it.yml +31 -3
- data/config/locales/ja.yml +17 -4
- data/config/locales/ko.yml +7 -1
- data/config/locales/lt.yml +42 -11
- data/config/locales/lv.yml +7 -3
- data/config/locales/{no-NB.yml → nb.yml} +46 -15
- data/config/locales/nl.yml +36 -5
- data/config/locales/pl.yml +13 -8
- data/config/locales/pt-BR.yml +36 -5
- data/config/locales/pt-PT.yml +8 -4
- data/config/locales/ro.yml +7 -3
- data/config/locales/ru.yml +26 -5
- data/config/locales/sv-SE.yml +9 -5
- data/config/locales/tr.yml +10 -3
- data/config/locales/uk.yml +36 -12
- data/config/locales/vi.yml +7 -3
- data/config/locales/zh-CN.yml +26 -10
- data/config/locales/zh-TW.yml +19 -13
- data/docs/0-installation.md +14 -6
- data/docs/1-general-configuration.md +8 -5
- data/docs/10-custom-pages.md +68 -70
- data/docs/11-decorators.md +48 -59
- data/docs/12-arbre-components.md +79 -73
- data/docs/13-authorization-adapter.md +128 -107
- data/docs/14-gotchas.md +90 -0
- data/docs/2-resource-customization.md +82 -15
- data/docs/3-index-pages.md +71 -12
- data/docs/3-index-pages/custom-index.md +31 -0
- data/docs/3-index-pages/index-as-table.md +45 -2
- data/docs/4-csv-format.md +1 -1
- data/docs/5-forms.md +78 -29
- data/docs/6-show-pages.md +31 -3
- data/docs/7-sidebars.md +46 -25
- data/docs/8-custom-actions.md +98 -77
- data/docs/9-batch-actions.md +211 -133
- data/docs/README.md +24 -0
- data/features/action_item.feature +3 -3
- data/features/authorization_pundit.feature +37 -0
- data/features/belongs_to.feature +3 -0
- data/features/breadcrumb.feature +48 -0
- data/features/comments/commenting.feature +44 -13
- data/features/development_reloading.feature +3 -4
- data/features/edit_page.feature +9 -19
- data/features/favicon.feature +3 -3
- data/features/i18n.feature +5 -0
- data/features/index/batch_actions.feature +41 -0
- data/features/index/filters.feature +23 -0
- data/features/index/format_as_csv.feature +90 -4
- data/features/index/index_as_blog.feature +4 -4
- data/features/index/index_as_table.feature +102 -6
- data/features/index/index_blank_slate.feature +22 -0
- data/features/index/index_scope_to.feature +16 -16
- data/features/index/page_title.feature +11 -0
- data/features/index/pagination.feature +1 -1
- data/features/index/switch_index_view.feature +14 -14
- data/features/new_page.feature +10 -20
- data/features/registering_pages.feature +1 -1
- data/features/renamed_resource.feature +32 -0
- data/features/show/page_title.feature +11 -0
- data/features/show/tabs.feature +27 -0
- data/features/sidebar_sections.feature +12 -0
- data/features/specifying_actions.feature +3 -3
- data/features/step_definitions/action_item_steps.rb +2 -2
- data/features/step_definitions/action_link_steps.rb +14 -1
- data/features/step_definitions/additional_web_steps.rb +17 -18
- data/features/step_definitions/asset_steps.rb +3 -3
- data/features/step_definitions/attribute_steps.rb +8 -3
- data/features/step_definitions/batch_action_steps.rb +26 -9
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +1 -1
- data/features/step_definitions/comment_steps.rb +1 -1
- data/features/step_definitions/configuration_steps.rb +1 -1
- data/features/step_definitions/dashboard_steps.rb +2 -2
- data/features/step_definitions/factory_steps.rb +6 -6
- data/features/step_definitions/filter_steps.rb +25 -3
- data/features/step_definitions/flash_steps.rb +3 -3
- data/features/step_definitions/format_steps.rb +17 -10
- data/features/step_definitions/index_scope_steps.rb +5 -5
- data/features/step_definitions/layout_steps.rb +1 -1
- data/features/step_definitions/member_link_steps.rb +2 -2
- data/features/step_definitions/menu_steps.rb +3 -3
- data/features/step_definitions/pagination_steps.rb +2 -3
- data/features/step_definitions/sidebar_steps.rb +8 -3
- data/features/step_definitions/site_title_steps.rb +6 -4
- data/features/step_definitions/symbol_leak_steps.rb +1 -1
- data/features/step_definitions/tab_steps.rb +5 -0
- data/features/step_definitions/table_steps.rb +4 -4
- data/features/step_definitions/user_steps.rb +15 -9
- data/features/step_definitions/web_steps.rb +10 -11
- data/features/sti_resource.feature +2 -10
- data/features/strong_parameters.feature +73 -0
- data/features/support/env.rb +35 -2
- data/features/support/paths.rb +2 -2
- data/features/support/selectors.rb +1 -1
- data/features/users/resetting_password.feature +7 -7
- data/lib/active_admin.rb +18 -13
- data/lib/active_admin/abstract_view_factory.rb +7 -17
- data/lib/active_admin/application.rb +50 -25
- data/lib/active_admin/asset_registration.rb +2 -2
- data/lib/active_admin/authorization_adapter.rb +2 -2
- data/lib/active_admin/base_controller.rb +2 -3
- data/lib/active_admin/base_controller/authorization.rb +13 -31
- data/lib/active_admin/batch_actions.rb +1 -1
- data/lib/active_admin/batch_actions/controller.rb +13 -7
- data/lib/active_admin/batch_actions/resource_extension.rb +43 -17
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
- data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
- data/lib/active_admin/callbacks.rb +25 -24
- data/lib/active_admin/cancan_adapter.rb +7 -11
- data/lib/active_admin/csv_builder.rb +92 -15
- data/lib/active_admin/dependency.rb +93 -0
- data/lib/active_admin/deprecation.rb +6 -7
- data/lib/active_admin/devise.rb +26 -14
- data/lib/active_admin/dsl.rb +18 -11
- data/lib/active_admin/engine.rb +7 -2
- data/lib/active_admin/error.rb +59 -0
- data/lib/active_admin/filters/dsl.rb +2 -2
- data/lib/active_admin/filters/forms.rb +19 -30
- data/lib/active_admin/filters/formtastic_addons.rb +20 -11
- data/lib/active_admin/filters/resource_extension.rb +16 -9
- data/lib/active_admin/form_builder.rb +94 -105
- data/lib/active_admin/helpers/collection.rb +7 -13
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +5 -5
- data/lib/active_admin/helpers/scope_chain.rb +1 -1
- data/lib/active_admin/helpers/settings.rb +16 -9
- data/lib/active_admin/iconic.rb +17 -15
- data/lib/active_admin/iconic/icons.rb +136 -136
- data/lib/active_admin/inputs.rb +11 -7
- data/lib/active_admin/inputs/datepicker_input.rb +1 -1
- data/lib/active_admin/inputs/filters/base.rb +42 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
- data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
- data/lib/active_admin/inputs/filters/select_input.rb +54 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/menu.rb +3 -3
- data/lib/active_admin/menu_collection.rb +1 -4
- data/lib/active_admin/namespace.rb +52 -29
- data/lib/active_admin/order_clause.rb +26 -0
- data/lib/active_admin/orm/active_record.rb +2 -0
- data/lib/active_admin/orm/active_record/comments.rb +48 -51
- data/lib/active_admin/orm/active_record/comments/comment.rb +16 -10
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -1
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -1
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +15 -13
- data/lib/active_admin/page.rb +5 -1
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/page_presenter.rb +2 -2
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/resource.rb +12 -3
- data/lib/active_admin/resource/action_items.rb +15 -8
- data/lib/active_admin/resource/belongs_to.rb +7 -3
- data/lib/active_admin/resource/controllers.rb +1 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +5 -5
- data/lib/active_admin/resource/naming.rb +25 -47
- data/lib/active_admin/resource/page_presenters.rb +1 -1
- data/lib/active_admin/resource/routes.rb +26 -10
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/sidebars.rb +1 -0
- data/lib/active_admin/resource_collection.rb +44 -16
- data/lib/active_admin/resource_controller.rb +6 -5
- data/lib/active_admin/resource_controller/data_access.rb +87 -82
- data/lib/active_admin/resource_controller/decorators.rb +91 -9
- data/lib/active_admin/resource_controller/streaming.rb +37 -0
- data/lib/active_admin/resource_dsl.rb +54 -10
- data/lib/active_admin/router.rb +7 -7
- data/lib/active_admin/scope.rb +6 -6
- data/lib/active_admin/sidebar_section.rb +10 -2
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -16
- data/lib/active_admin/view_helpers.rb +0 -1
- data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +13 -6
- data/lib/active_admin/view_helpers/display_helper.rb +30 -17
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -24
- data/lib/active_admin/view_helpers/fields_for.rb +2 -2
- data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
- data/lib/active_admin/view_helpers/form_helper.rb +5 -9
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
- data/lib/active_admin/views/action_items.rb +2 -2
- data/lib/active_admin/views/components/action_list_popover.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +123 -0
- data/lib/active_admin/views/components/attributes_table.rb +22 -13
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/columns.rb +13 -7
- data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
- data/lib/active_admin/views/components/index_list.rb +7 -7
- data/lib/active_admin/views/components/paginated_collection.rb +33 -17
- data/lib/active_admin/views/components/panel.rb +8 -2
- data/lib/active_admin/views/components/popover.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +1 -1
- data/lib/active_admin/views/components/sidebar_section.rb +3 -2
- data/lib/active_admin/views/components/site_title.rb +2 -2
- data/lib/active_admin/views/components/status_tag.rb +34 -11
- data/lib/active_admin/views/components/table_for.rb +67 -22
- data/lib/active_admin/views/components/tabs.rb +28 -0
- data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
- data/lib/active_admin/views/footer.rb +3 -3
- data/lib/active_admin/views/header.rb +3 -3
- data/lib/active_admin/views/index_as_blog.rb +6 -6
- data/lib/active_admin/views/index_as_grid.rb +2 -2
- data/lib/active_admin/views/index_as_table.rb +127 -40
- data/lib/active_admin/views/pages/base.rb +22 -18
- data/lib/active_admin/views/pages/form.rb +16 -6
- data/lib/active_admin/views/pages/index.rb +36 -20
- data/lib/active_admin/views/pages/layout.rb +1 -1
- data/lib/active_admin/views/pages/show.rb +4 -4
- data/lib/active_admin/views/tabbed_navigation.rb +7 -3
- data/lib/active_admin/views/title_bar.rb +10 -8
- data/lib/generators/active_admin/assets/assets_generator.rb +1 -3
- data/lib/generators/active_admin/devise/devise_generator.rb +20 -28
- data/lib/generators/active_admin/install/install_generator.rb +8 -9
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -22
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -9
- data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
- data/lib/generators/active_admin/page/USAGE +8 -0
- data/lib/generators/active_admin/page/page_generator.rb +12 -0
- data/lib/generators/active_admin/page/templates/page.rb +5 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +2 -4
- data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
- data/lib/ransack_ext.rb +4 -4
- data/script/local +2 -2
- data/script/travis_cache +107 -0
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
- data/spec/javascripts/fixtures/flashes.html +2 -0
- data/spec/rails_helper.rb +154 -0
- data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
- data/spec/{integration → requests}/javascript_spec.rb +5 -5
- data/spec/requests/memory_spec.rb +23 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +12 -170
- data/spec/support/detect_rails_version.rb +31 -39
- data/spec/support/rails_template.rb +61 -34
- data/spec/support/rails_template_with_data.rb +14 -14
- data/spec/support/templates/admin/stores.rb +3 -5
- data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
- data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
- data/spec/support/templates/policies/admin_user_policy.rb +11 -0
- data/spec/support/templates/policies/application_policy.rb +45 -0
- data/spec/support/templates/policies/category_policy.rb +7 -0
- data/spec/support/templates/policies/post_policy.rb +15 -0
- data/spec/support/templates/policies/store_policy.rb +11 -0
- data/spec/support/templates/policies/user_policy.rb +11 -0
- data/spec/support/templates/post_decorator.rb +4 -46
- data/spec/unit/abstract_view_factory_spec.rb +11 -11
- data/spec/unit/action_builder_spec.rb +24 -18
- data/spec/unit/active_admin_spec.rb +2 -2
- data/spec/unit/application_spec.rb +30 -31
- data/spec/unit/asset_registration_spec.rb +11 -11
- data/spec/unit/authorization/authorization_adapter_spec.rb +7 -7
- data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
- data/spec/unit/authorization/index_overriding_spec.rb +22 -0
- data/spec/unit/auto_link_spec.rb +42 -5
- data/spec/unit/batch_actions/resource_spec.rb +15 -14
- data/spec/unit/batch_actions/settings_spec.rb +18 -18
- data/spec/unit/belongs_to_spec.rb +26 -17
- data/spec/unit/cancan_adapter_spec.rb +4 -4
- data/spec/unit/comments_spec.rb +99 -39
- data/spec/unit/component_spec.rb +3 -3
- data/spec/unit/config_shared_examples.rb +8 -8
- data/spec/unit/controller_filters_spec.rb +26 -14
- data/spec/unit/csv_builder_spec.rb +152 -24
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +17 -37
- data/spec/unit/dsl_spec.rb +70 -9
- data/spec/unit/event_spec.rb +9 -9
- data/spec/unit/filters/filter_form_builder_spec.rb +167 -157
- data/spec/unit/filters/resource_spec.rb +35 -33
- data/spec/unit/form_builder_spec.rb +383 -145
- data/spec/unit/generators/install_spec.rb +5 -5
- data/spec/unit/helpers/collection_spec.rb +18 -18
- data/spec/unit/helpers/scope_chain_spec.rb +5 -5
- data/spec/unit/helpers/settings_spec.rb +4 -4
- data/spec/unit/i18n_spec.rb +12 -0
- data/spec/unit/menu_collection_spec.rb +14 -14
- data/spec/unit/menu_item_spec.rb +42 -42
- data/spec/unit/menu_spec.rb +20 -20
- data/spec/unit/namespace/authorization_spec.rb +5 -5
- data/spec/unit/namespace/register_page_spec.rb +9 -9
- data/spec/unit/namespace/register_resource_spec.rb +26 -28
- data/spec/unit/namespace_spec.rb +20 -20
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +1 -1
- data/spec/unit/page_spec.rb +18 -12
- data/spec/unit/pretty_format_spec.rb +42 -14
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +13 -10
- data/spec/unit/resource/includes_spec.rb +21 -0
- data/spec/unit/resource/menu_spec.rb +1 -1
- data/spec/unit/resource/naming_spec.rb +23 -23
- data/spec/unit/resource/page_presenters_spec.rb +8 -8
- data/spec/unit/resource/pagination_spec.rb +6 -6
- data/spec/unit/resource/routes_spec.rb +10 -10
- data/spec/unit/resource/scopes_spec.rb +14 -7
- data/spec/unit/resource/sidebars_spec.rb +6 -6
- data/spec/unit/resource_collection_spec.rb +66 -68
- data/spec/unit/resource_controller/data_access_spec.rb +39 -21
- data/spec/unit/resource_controller/decorators_spec.rb +83 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
- data/spec/unit/resource_controller_spec.rb +66 -62
- data/spec/unit/resource_registration_spec.rb +12 -12
- data/spec/unit/resource_spec.rb +75 -40
- data/spec/unit/routing_spec.rb +39 -31
- data/spec/unit/scope_spec.rb +112 -30
- data/spec/unit/settings_spec.rb +51 -21
- data/spec/unit/view_factory_spec.rb +2 -2
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +137 -69
- data/spec/unit/view_helpers/display_name_spec.rb +49 -21
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
- data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
- data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +9 -22
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +59 -21
- data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
- data/spec/unit/views/components/attributes_table_spec.rb +94 -52
- data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
- data/spec/unit/views/components/blank_slate_spec.rb +14 -4
- data/spec/unit/views/components/columns_spec.rb +52 -22
- data/spec/unit/views/components/index_list_spec.rb +11 -8
- data/spec/unit/views/components/index_table_for_spec.rb +46 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +68 -59
- data/spec/unit/views/components/panel_spec.rb +32 -21
- data/spec/unit/views/components/popover_spec.rb +7 -7
- data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
- data/spec/unit/views/components/site_title_spec.rb +8 -8
- data/spec/unit/views/components/status_tag_spec.rb +178 -38
- data/spec/unit/views/components/table_for_spec.rb +227 -44
- data/spec/unit/views/components/tabs_spec.rb +39 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
- data/spec/unit/views/pages/form_spec.rb +17 -10
- data/spec/unit/views/pages/index_spec.rb +60 -0
- data/spec/unit/views/pages/layout_spec.rb +17 -21
- data/spec/unit/views/pages/show_spec.rb +16 -3
- data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
- data/tasks/docs.rake +1 -1
- data/tasks/parallel_tests.rake +8 -2
- data/tasks/test.rake +8 -4
- data/tasks/yard.rake +7 -5
- metadata +180 -101
- data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/javascripts/active_admin/components/application.js.coffee +0 -23
- data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +0 -26
- data/app/assets/javascripts/active_admin/components/has_many.js.coffee +0 -41
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -39
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
- data/app/views/active_admin/dashboard/index.html.arb +0 -1
- data/app/views/active_admin/resource/index.csv.erb +0 -17
- data/docs/3-index-pages/create-an-index.md +0 -29
- data/lib/active_admin/inputs/filter_base.rb +0 -33
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
- data/lib/active_admin/inputs/filter_boolean_input.rb +0 -32
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -51
- data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
- data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
- data/lib/active_admin/inputs/filter_select_input.rb +0 -61
- data/lib/active_admin/inputs/filter_string_input.rb +0 -24
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
- data/spec/integration/memory_spec.rb +0 -29
- data/spec/integration/stylesheets_spec.rb +0 -41
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
- data/spec/javascripts/support/jquery.min.js +0 -4
- data/spec/spec_helper_without_rails.rb +0 -16
- data/tasks/js.rake +0 -32
|
@@ -4,20 +4,27 @@ module ActiveAdmin
|
|
|
4
4
|
|
|
5
5
|
# Returns an array of links to use in a breadcrumb
|
|
6
6
|
def breadcrumb_links(path = request.path)
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
# remove leading "/" and split up the URL
|
|
8
|
+
# and remove last since it's used as the page title
|
|
9
|
+
parts = path.split('/').select(&:present?)[0..-2]
|
|
9
10
|
|
|
10
11
|
parts.each_with_index.map do |part, index|
|
|
11
12
|
# 1. try using `display_name` if we can locate a DB object
|
|
12
13
|
# 2. try using the model name translation
|
|
13
14
|
# 3. default to calling `titlecase` on the URL fragment
|
|
14
15
|
if part =~ /\A(\d+|[a-f0-9]{24})\z/ && parts[index-1]
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
parent = active_admin_config.belongs_to_config.try :target
|
|
17
|
+
config = parent && parent.resource_name.route_key == parts[index-1] ? parent : active_admin_config
|
|
18
|
+
name = display_name config.find_resource part
|
|
17
19
|
end
|
|
18
|
-
name ||= I18n.t "activerecord.models.#{part.singularize}", :
|
|
20
|
+
name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
# Don't create a link if the resource's show action is disabled
|
|
23
|
+
if !config || config.defined_actions.include?(:show)
|
|
24
|
+
link_to name, '/' + parts[0..index].join('/')
|
|
25
|
+
else
|
|
26
|
+
name
|
|
27
|
+
end
|
|
21
28
|
end
|
|
22
29
|
end
|
|
23
30
|
|
|
@@ -2,45 +2,58 @@ module ActiveAdmin
|
|
|
2
2
|
module ViewHelpers
|
|
3
3
|
module DisplayHelper
|
|
4
4
|
|
|
5
|
+
DISPLAY_NAME_FALLBACK = ->{
|
|
6
|
+
name, klass = "", self.class
|
|
7
|
+
name << klass.model_name.human if klass.respond_to? :model_name
|
|
8
|
+
name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
|
|
9
|
+
name.present? ? name : to_s
|
|
10
|
+
}
|
|
11
|
+
def DISPLAY_NAME_FALLBACK.inspect
|
|
12
|
+
'DISPLAY_NAME_FALLBACK'
|
|
13
|
+
end
|
|
14
|
+
|
|
5
15
|
# Attempts to call any known display name methods on the resource.
|
|
6
16
|
# See the setting in `application.rb` for the list of methods and their priority.
|
|
7
17
|
def display_name(resource)
|
|
8
|
-
resource
|
|
18
|
+
render_in_context resource, display_name_method_for(resource) if resource
|
|
9
19
|
end
|
|
10
20
|
|
|
11
21
|
# Looks up and caches the first available display name method.
|
|
22
|
+
# To prevent conflicts, we exclude any methods that happen to be associations.
|
|
23
|
+
# If no methods are available and we're about to use the Kernel's `to_s`, provide our own.
|
|
12
24
|
def display_name_method_for(resource)
|
|
13
25
|
@@display_name_methods_cache ||= {}
|
|
14
26
|
@@display_name_methods_cache[resource.class] ||= begin
|
|
15
27
|
methods = active_admin_application.display_name_methods - association_methods_for(resource)
|
|
16
|
-
methods.detect{ |method| resource.respond_to? method }
|
|
28
|
+
method = methods.detect{ |method| resource.respond_to? method }
|
|
29
|
+
|
|
30
|
+
if method != :to_s || resource.method(method).source_location
|
|
31
|
+
method
|
|
32
|
+
else
|
|
33
|
+
DISPLAY_NAME_FALLBACK
|
|
34
|
+
end
|
|
17
35
|
end
|
|
18
36
|
end
|
|
19
37
|
|
|
20
|
-
# To prevent conflicts, we exclude any methods that happen to be associations.
|
|
21
38
|
def association_methods_for(resource)
|
|
22
39
|
return [] unless resource.class.respond_to? :reflect_on_all_associations
|
|
23
40
|
resource.class.reflect_on_all_associations.map(&:name)
|
|
24
41
|
end
|
|
25
42
|
|
|
26
|
-
#
|
|
27
|
-
# Date Time are formatted via #localize with :format => :long
|
|
28
|
-
# ActiveRecord and Mongoid objects are formatted via #auto_link
|
|
29
|
-
# We attempt to #display_name of any other objects
|
|
43
|
+
# Attempts to create a human-readable string for any object
|
|
30
44
|
def pretty_format(object)
|
|
31
45
|
case object
|
|
32
|
-
when String
|
|
33
|
-
object
|
|
34
|
-
when Arbre::Element
|
|
35
|
-
object
|
|
46
|
+
when String, Numeric, Arbre::Element
|
|
47
|
+
object.to_s
|
|
36
48
|
when Date, Time
|
|
37
|
-
localize
|
|
38
|
-
when ->(obj){defined?(::ActiveRecord) && obj.is_a?(ActiveRecord::Base)}
|
|
39
|
-
auto_link(object)
|
|
40
|
-
when ->(obj){defined?(::Mongoid) && obj.class.included_modules.include?(Mongoid::Document)}
|
|
41
|
-
auto_link(object)
|
|
49
|
+
localize object, format: :long
|
|
42
50
|
else
|
|
43
|
-
|
|
51
|
+
if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
|
|
52
|
+
defined?(::Mongoid) && object.class.include?(Mongoid::Document)
|
|
53
|
+
auto_link object
|
|
54
|
+
else
|
|
55
|
+
display_name object
|
|
56
|
+
end
|
|
44
57
|
end
|
|
45
58
|
end
|
|
46
59
|
|
|
@@ -2,6 +2,20 @@ module ActiveAdmin
|
|
|
2
2
|
module ViewHelpers
|
|
3
3
|
module DownloadFormatLinksHelper
|
|
4
4
|
|
|
5
|
+
def build_download_format_links(formats = self.class.formats)
|
|
6
|
+
params = request.query_parameters.except :format, :commit
|
|
7
|
+
div class: "download_links" do
|
|
8
|
+
span I18n.t('active_admin.download')
|
|
9
|
+
formats.each do |format|
|
|
10
|
+
a format.upcase, href: url_for(params: params, format: format)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.included base
|
|
16
|
+
base.extend ClassMethods
|
|
17
|
+
end
|
|
18
|
+
|
|
5
19
|
module ClassMethods
|
|
6
20
|
|
|
7
21
|
# A ready only of formats to make available in index/paginated
|
|
@@ -14,36 +28,19 @@ module ActiveAdmin
|
|
|
14
28
|
@formats.clone
|
|
15
29
|
end
|
|
16
30
|
|
|
17
|
-
# Adds a mime type
|
|
18
|
-
# You must register the extension prior to adding it
|
|
19
|
-
#
|
|
20
|
-
# to add additional formats to the download format links.
|
|
21
|
-
# @param [Symbol] extension the mime extension to add
|
|
31
|
+
# Adds a mime type to the list of available formats available for data
|
|
32
|
+
# export. You must register the extension prior to adding it here.
|
|
33
|
+
# @param [Symbol] format the mime type to add
|
|
22
34
|
# @return [Array] A copy of the updated formats array.
|
|
23
|
-
def add_format
|
|
24
|
-
unless
|
|
25
|
-
|
|
26
|
-
raise ArgumentError, "The mime extension you defined: #{extension} is not registered. Please register it via Mime::Type.register before adding it to the available formats."
|
|
27
|
-
end
|
|
28
|
-
@formats << extension
|
|
35
|
+
def add_format(format)
|
|
36
|
+
unless Mime::Type.lookup_by_extension format
|
|
37
|
+
raise ArgumentError, "Please register the #{format} mime type with `Mime::Type.register`"
|
|
29
38
|
end
|
|
39
|
+
@formats << format unless formats.include? format
|
|
30
40
|
formats
|
|
31
41
|
end
|
|
32
42
|
end
|
|
33
43
|
|
|
34
|
-
# TODO: Refactor to new HTML DSL
|
|
35
|
-
def build_download_format_links(formats = self.class.formats)
|
|
36
|
-
params = request.query_parameters.except :format, :commit
|
|
37
|
-
links = formats.map { |format| link_to format.to_s.upcase, params: params, format: format }
|
|
38
|
-
div :class => "download_links" do
|
|
39
|
-
text_node [I18n.t('active_admin.download'), links].flatten.join(" ").html_safe
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def self.included base
|
|
44
|
-
base.extend ClassMethods
|
|
45
|
-
end
|
|
46
44
|
end
|
|
47
45
|
end
|
|
48
46
|
end
|
|
49
|
-
|
|
@@ -31,13 +31,13 @@ module ActiveAdmin
|
|
|
31
31
|
when Symbol
|
|
32
32
|
{ k => v.to_s }
|
|
33
33
|
when Hash
|
|
34
|
-
fields_for_params(v, :
|
|
34
|
+
fields_for_params(v, namespace: k)
|
|
35
35
|
when Array
|
|
36
36
|
v.map do |v|
|
|
37
37
|
{ "#{k}[]" => v }
|
|
38
38
|
end
|
|
39
39
|
when nil
|
|
40
|
-
|
|
40
|
+
{ k => '' }
|
|
41
41
|
when TrueClass,FalseClass
|
|
42
42
|
{ k => v }
|
|
43
43
|
else
|
|
@@ -3,9 +3,10 @@ module ActiveAdmin
|
|
|
3
3
|
module FlashHelper
|
|
4
4
|
|
|
5
5
|
# Returns all the flash keys to display in any Active Admin view.
|
|
6
|
-
# This method removes the :timedout key that Devise uses by default
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
# This method removes the :timedout key that Devise uses by default.
|
|
7
|
+
# Note Rails >= 4.1 normalizes keys to strings automatically.
|
|
8
|
+
def flash_messages
|
|
9
|
+
@flash_messages ||= flash.to_hash.with_indifferent_access.except(*active_admin_application.flash_keys_to_except)
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
end
|
|
@@ -3,22 +3,18 @@ module ActiveAdmin
|
|
|
3
3
|
module FormHelper
|
|
4
4
|
|
|
5
5
|
def active_admin_form_for(resource, options = {}, &block)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
if ! options.fetch(:decorate, true)
|
|
10
|
-
resource = resource.model
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
semantic_form_for resource, options, &block
|
|
6
|
+
Arbre::Context.new({}, self) do
|
|
7
|
+
active_admin_form_for resource, options, &block
|
|
8
|
+
end.content
|
|
14
9
|
end
|
|
15
10
|
|
|
16
11
|
def hidden_field_tags_for(params, options={})
|
|
17
12
|
fields_for_params(params, options).map do |kv|
|
|
18
13
|
k, v = kv.first
|
|
19
|
-
hidden_field_tag k, v, :
|
|
14
|
+
hidden_field_tag k, v, id: sanitize_to_id("hidden_active_admin_#{k}")
|
|
20
15
|
end.join("\n").html_safe
|
|
21
16
|
end
|
|
17
|
+
|
|
22
18
|
end
|
|
23
19
|
end
|
|
24
20
|
end
|
|
@@ -25,7 +25,7 @@ module MethodOrProcHelper
|
|
|
25
25
|
# or instance_exec a proc passing in the object as the first parameter. This
|
|
26
26
|
# method wraps that pattern.
|
|
27
27
|
#
|
|
28
|
-
# Calling with a Symbol:
|
|
28
|
+
# Calling with a String or Symbol:
|
|
29
29
|
#
|
|
30
30
|
# call_method_or_proc_on(@my_obj, :size) same as @my_obj.size
|
|
31
31
|
#
|
|
@@ -35,11 +35,11 @@ module MethodOrProcHelper
|
|
|
35
35
|
# call_method_or_proc_on(@my_obj, proc)
|
|
36
36
|
#
|
|
37
37
|
# By default, the Proc will be instance_exec'd within self. If you would rather
|
|
38
|
-
# not instance exec, but just call the Proc, then pass along
|
|
38
|
+
# not instance exec, but just call the Proc, then pass along `exec: false` in
|
|
39
39
|
# the options hash.
|
|
40
40
|
#
|
|
41
41
|
# proc = Proc.new{|s| s.size }
|
|
42
|
-
# call_method_or_proc_on(@my_obj, proc, :
|
|
42
|
+
# call_method_or_proc_on(@my_obj, proc, exec: false)
|
|
43
43
|
#
|
|
44
44
|
# You can pass along any necessary arguments to the method / Proc as arguments. For
|
|
45
45
|
# example:
|
|
@@ -47,13 +47,13 @@ module MethodOrProcHelper
|
|
|
47
47
|
# call_method_or_proc_on(@my_obj, :find, 1) #=> @my_obj.find(1)
|
|
48
48
|
#
|
|
49
49
|
def call_method_or_proc_on(receiver, *args)
|
|
50
|
-
options = { :
|
|
50
|
+
options = { exec: true }.merge(args.extract_options!)
|
|
51
51
|
|
|
52
52
|
symbol_or_proc = args.shift
|
|
53
53
|
|
|
54
54
|
case symbol_or_proc
|
|
55
55
|
when Symbol, String
|
|
56
|
-
receiver.
|
|
56
|
+
receiver.public_send symbol_or_proc.to_sym, *args
|
|
57
57
|
when Proc
|
|
58
58
|
if options[:exec]
|
|
59
59
|
instance_exec(receiver, *args, &symbol_or_proc)
|
|
@@ -85,7 +85,7 @@ module MethodOrProcHelper
|
|
|
85
85
|
when Proc
|
|
86
86
|
context.instance_exec *args, &obj
|
|
87
87
|
when Symbol
|
|
88
|
-
context.
|
|
88
|
+
context.public_send obj, *args
|
|
89
89
|
else
|
|
90
90
|
obj
|
|
91
91
|
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
class FormtasticProxy < ::Arbre::Rails::Forms::FormBuilderProxy
|
|
4
|
+
def split_string_on(string, match)
|
|
5
|
+
return "" unless string && match
|
|
6
|
+
part_1 = string.split(Regexp.new("#{match}\\z")).first
|
|
7
|
+
[part_1, match]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def opening_tag
|
|
11
|
+
@opening_tag || ""
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def closing_tag
|
|
15
|
+
@closing_tag || ""
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def to_s
|
|
19
|
+
opening_tag << children.to_s << closing_tag
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class ActiveAdminForm < FormtasticProxy
|
|
24
|
+
builder_method :active_admin_form_for
|
|
25
|
+
|
|
26
|
+
def build(resource, options = {}, &block)
|
|
27
|
+
@resource = resource
|
|
28
|
+
options = options.deep_dup
|
|
29
|
+
options[:builder] ||= ActiveAdmin::FormBuilder
|
|
30
|
+
form_string = semantic_form_for(resource, options) do |f|
|
|
31
|
+
@form_builder = f
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
@opening_tag, @closing_tag = split_string_on(form_string, "</form>")
|
|
35
|
+
instance_eval(&block) if block_given?
|
|
36
|
+
|
|
37
|
+
# Rails 4 sets multipart automatically if a file field is present,
|
|
38
|
+
# but the form tag has already been rendered before the block eval.
|
|
39
|
+
if multipart? && @opening_tag !~ /multipart/
|
|
40
|
+
@opening_tag.sub!(/<form/, '<form enctype="multipart/form-data"')
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def inputs(*args, &block)
|
|
45
|
+
if block_given? && block.arity == 0
|
|
46
|
+
wrapped_block = proc do
|
|
47
|
+
wrap_it = form_builder.already_in_an_inputs_block ? true : false
|
|
48
|
+
form_builder.already_in_an_inputs_block = true
|
|
49
|
+
form_builder.template.assign('has_many_block'=> true)
|
|
50
|
+
content = form_builder.template.capture do
|
|
51
|
+
block.call
|
|
52
|
+
end
|
|
53
|
+
form_builder.already_in_an_inputs_block = wrap_it
|
|
54
|
+
content
|
|
55
|
+
end
|
|
56
|
+
insert_tag(SemanticInputsProxy, form_builder, *args, &wrapped_block)
|
|
57
|
+
else
|
|
58
|
+
proxy_call_to_form(:inputs, *args, &block)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def input(*args)
|
|
63
|
+
proxy_call_to_form :input, *args
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def actions(*args, &block)
|
|
67
|
+
block_given? ?
|
|
68
|
+
insert_tag(SemanticActionsProxy, form_builder, *args, &block) :
|
|
69
|
+
actions(*args) { commit_action_with_cancel_link }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def commit_action_with_cancel_link
|
|
73
|
+
action(:submit)
|
|
74
|
+
cancel_link
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def has_many(*args, &block)
|
|
78
|
+
insert_tag(HasManyProxy, form_builder, *args, &block)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def multipart?
|
|
82
|
+
form_builder && form_builder.multipart?
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def object
|
|
86
|
+
form_builder.object
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def form_buffers
|
|
90
|
+
raise "'form_buffers' has been removed from ActiveAdmin::FormBuilder, please read https://github.com/activeadmin/activeadmin/blob/master/docs/5-forms.md for details."
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
class SemanticInputsProxy < FormtasticProxy
|
|
95
|
+
def build(form_builder, *args, &block)
|
|
96
|
+
options = args.extract_options!
|
|
97
|
+
legend = args.shift
|
|
98
|
+
legend_tag = legend ? "<legend><span>#{legend}</span></legend>" : ""
|
|
99
|
+
klasses = ["inputs"]
|
|
100
|
+
klasses << options[:class] if options[:class]
|
|
101
|
+
@opening_tag = "<fieldset class=\"#{klasses.join(" ")}\">#{legend_tag}<ol>"
|
|
102
|
+
@closing_tag = "</ol></fieldset>"
|
|
103
|
+
super(*(args << options), &block)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
class SemanticActionsProxy < FormtasticProxy
|
|
108
|
+
def build(form_builder, *args, &block)
|
|
109
|
+
@opening_tag = "<fieldset class=\"actions\"><ol>"
|
|
110
|
+
@closing_tag = "</ol></fieldset>"
|
|
111
|
+
super(*args, &block)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
class HasManyProxy < FormtasticProxy
|
|
116
|
+
def build(form_builder, *args, &block)
|
|
117
|
+
assoc = args[0]
|
|
118
|
+
builder_options = args[1] || {}
|
|
119
|
+
text_node form_builder.has_many(*args, &block)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
@@ -4,8 +4,8 @@ module ActiveAdmin
|
|
|
4
4
|
class AttributesTable < ActiveAdmin::Component
|
|
5
5
|
builder_method :attributes_table_for
|
|
6
6
|
|
|
7
|
-
def build(
|
|
8
|
-
@collection
|
|
7
|
+
def build(obj, *attrs)
|
|
8
|
+
@collection = is_array?(obj) ? obj : [obj]
|
|
9
9
|
@resource_class = @collection.first.class
|
|
10
10
|
options = { }
|
|
11
11
|
options[:for] = @collection.first if single_record?
|
|
@@ -59,44 +59,53 @@ module ActiveAdmin
|
|
|
59
59
|
col # column for row headers
|
|
60
60
|
@collection.each do |record|
|
|
61
61
|
classes = Arbre::HTML::ClassList.new
|
|
62
|
-
classes << cycle(:even, :odd, :
|
|
62
|
+
classes << cycle(:even, :odd, name: self.class.to_s)
|
|
63
63
|
classes << dom_class_name_for(record)
|
|
64
|
-
col(:
|
|
64
|
+
col(id: dom_id_for(record), class: classes)
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
def header_content_for(attr)
|
|
70
70
|
if @resource_class.respond_to?(:human_attribute_name)
|
|
71
|
-
@resource_class.human_attribute_name(attr, :
|
|
71
|
+
@resource_class.human_attribute_name(attr, default: attr.to_s.titleize)
|
|
72
72
|
else
|
|
73
73
|
attr.to_s.titleize
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
def empty_value
|
|
78
|
-
span I18n.t('active_admin.empty'), :
|
|
78
|
+
span I18n.t('active_admin.empty'), class: "empty"
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def content_for(record, attr)
|
|
82
|
-
|
|
83
|
-
value
|
|
84
|
-
value.blank? && previous == current_arbre_element.to_s ? empty_value : value
|
|
82
|
+
value = pretty_format find_attr_value(record, attr)
|
|
83
|
+
value.blank? && current_arbre_element.children.to_s.empty? ? empty_value : value
|
|
85
84
|
end
|
|
86
85
|
|
|
87
86
|
def find_attr_value(record, attr)
|
|
88
87
|
if attr.is_a?(Proc)
|
|
89
88
|
attr.call(record)
|
|
90
|
-
elsif attr
|
|
91
|
-
record.
|
|
92
|
-
|
|
93
|
-
record.
|
|
89
|
+
elsif attr =~ /\A(.+)_id\z/ && reflection_for(record.class, $1.to_sym)
|
|
90
|
+
record.public_send $1
|
|
91
|
+
elsif record.respond_to? attr
|
|
92
|
+
record.public_send attr
|
|
93
|
+
elsif record.respond_to? :[]
|
|
94
|
+
record[attr]
|
|
94
95
|
end
|
|
95
96
|
end
|
|
96
97
|
|
|
98
|
+
def reflection_for(klass, method)
|
|
99
|
+
klass.reflect_on_association method if klass.respond_to? :reflect_on_association
|
|
100
|
+
end
|
|
101
|
+
|
|
97
102
|
def single_record?
|
|
98
103
|
@single_record ||= @collection.size == 1
|
|
99
104
|
end
|
|
105
|
+
|
|
106
|
+
def is_array?(obj)
|
|
107
|
+
obj.respond_to?(:each) && obj.respond_to?(:first) && !obj.is_a?(Hash)
|
|
108
|
+
end
|
|
100
109
|
end
|
|
101
110
|
|
|
102
111
|
end
|