activeadmin 3.4.0 → 4.0.0.beta18
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 +4 -102
- data/CONTRIBUTING.md +32 -117
- data/README.md +17 -30
- data/UPGRADING.md +241 -0
- data/app/assets/config/active_admin_manifest.js +2 -0
- data/{lib → app/controllers}/active_admin/base_controller/authorization.rb +1 -1
- data/app/controllers/active_admin/base_controller/menu.rb +39 -0
- data/{lib → app/controllers}/active_admin/base_controller.rb +46 -18
- data/{lib → app/controllers}/active_admin/page_controller.rb +0 -4
- data/{lib → app/controllers}/active_admin/resource_controller/action_builder.rb +1 -1
- data/{lib → app/controllers}/active_admin/resource_controller/data_access.rb +11 -6
- data/{lib → app/controllers}/active_admin/resource_controller/scoping.rb +1 -1
- data/{lib → app/controllers}/active_admin/resource_controller/streaming.rb +4 -4
- data/app/controllers/active_admin/resource_controller.rb +102 -0
- data/app/helpers/active_admin/auto_link_helper.rb +66 -0
- data/app/helpers/active_admin/breadcrumb_helper.rb +41 -0
- data/app/helpers/active_admin/display_helper.rb +117 -0
- data/app/helpers/active_admin/form_helper.rb +95 -0
- data/app/helpers/active_admin/index_helper.rb +40 -0
- data/app/helpers/active_admin/layout_helper.rb +63 -0
- data/app/javascript/active_admin/features/batch_actions.js +95 -0
- data/app/javascript/active_admin/features/dark_mode_toggle.js +37 -0
- data/app/javascript/active_admin/features/filters.js +34 -0
- data/app/javascript/active_admin/features/has_many.js +28 -0
- data/app/javascript/active_admin/features/main_menu.js +12 -0
- data/app/javascript/active_admin/features/per_page.js +9 -0
- data/app/javascript/active_admin/utils/dom.js +17 -0
- data/app/javascript/active_admin.js +10 -0
- data/app/views/active_admin/_flash_messages.html.erb +22 -0
- data/app/views/active_admin/_html_head.html.erb +13 -0
- data/app/views/active_admin/_main_navigation.html.erb +28 -0
- data/app/views/active_admin/_page_header.html.erb +27 -0
- data/app/views/active_admin/_sidebar.html.erb +5 -0
- data/app/views/active_admin/_site_footer.html.erb +7 -0
- data/app/views/active_admin/_site_header.html.erb +30 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +5 -3
- data/app/views/active_admin/devise/passwords/edit.html.erb +5 -3
- data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
- data/app/views/active_admin/devise/registrations/new.html.erb +6 -4
- data/app/views/active_admin/devise/sessions/new.html.erb +6 -4
- data/app/views/active_admin/devise/shared/_links.erb +3 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +6 -4
- data/app/views/{kaminari/active_admin_countless → active_admin/kaminari}/_gap.html.erb +3 -1
- data/app/views/active_admin/kaminari/_next_page.html.erb +16 -0
- data/app/views/active_admin/kaminari/_page.html.erb +14 -0
- data/app/views/{kaminari/active_admin_countless → active_admin/kaminari}/_paginator.html.erb +1 -2
- data/app/views/active_admin/kaminari/_prev_page.html.erb +16 -0
- data/app/views/active_admin/page/index.html.arb +5 -2
- data/app/views/active_admin/resource/_active_filters.html.erb +32 -0
- data/app/views/active_admin/resource/_batch_actions_dropdown.html.erb +19 -0
- data/app/views/active_admin/resource/_form.html.arb +15 -0
- data/app/views/active_admin/resource/_form_default.html.arb +11 -0
- data/app/views/active_admin/resource/_index_as_table_default.html.arb +8 -0
- data/app/views/active_admin/resource/_index_blank_slate.html.erb +14 -0
- data/app/views/active_admin/resource/_index_empty_results.html.erb +5 -0
- data/app/views/active_admin/resource/_index_table_actions_default.html.erb +9 -0
- data/app/views/active_admin/resource/_show_default.html.arb +2 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -2
- data/app/views/active_admin/resource/index.html.arb +94 -2
- data/app/views/active_admin/resource/new.html.arb +1 -2
- data/app/views/active_admin/resource/show.html.arb +12 -2
- data/app/views/active_admin/shared/_action_items.html.erb +3 -0
- data/app/views/active_admin/shared/_download_format_links.html.erb +7 -0
- data/app/views/active_admin/shared/_resource_comments.html.erb +51 -0
- data/app/views/active_admin/shared/_sidebar_section.html.arb +6 -0
- data/app/views/active_admin/shared/_sidebar_sections.html.erb +5 -0
- data/app/views/layouts/active_admin.html.erb +20 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +8 -45
- data/config/importmap.rb +5 -0
- data/config/locales/ar.yml +136 -116
- data/config/locales/az.yml +103 -118
- data/config/locales/bg.yml +91 -99
- data/config/locales/bs.yml +95 -101
- data/config/locales/ca.yml +131 -86
- data/config/locales/cs.yml +82 -90
- data/config/locales/da.yml +102 -117
- data/config/locales/de.yml +130 -141
- data/config/locales/el.yml +94 -106
- data/config/locales/en-CA.yml +104 -119
- data/config/locales/en-GB.yml +104 -119
- data/config/locales/en.yml +134 -140
- data/config/locales/eo.yml +107 -123
- data/config/locales/es-MX.yml +70 -78
- data/config/locales/es.yml +129 -138
- data/config/locales/fa.yml +91 -99
- data/config/locales/fi.yml +84 -92
- data/config/locales/fr.yml +135 -120
- data/config/locales/he.yml +103 -118
- data/config/locales/hr.yml +95 -103
- data/config/locales/hu.yml +76 -81
- data/config/locales/id.yml +97 -112
- data/config/locales/it.yml +134 -140
- data/config/locales/ja.yml +109 -120
- data/config/locales/ko.yml +136 -101
- data/config/locales/lt.yml +106 -121
- data/config/locales/lv.yml +70 -75
- data/config/locales/mk.yml +100 -114
- data/config/locales/nb.yml +98 -109
- data/config/locales/nl.yml +113 -122
- data/config/locales/pl.yml +137 -146
- data/config/locales/pt-BR.yml +134 -121
- data/config/locales/pt-PT.yml +71 -76
- data/config/locales/ro.yml +74 -79
- data/config/locales/ru.yml +142 -122
- data/config/locales/sk.yml +131 -146
- data/config/locales/sv-SE.yml +126 -141
- data/config/locales/tr.yml +105 -120
- data/config/locales/uk.yml +140 -119
- data/config/locales/vi.yml +125 -140
- data/config/locales/zh-CN.yml +135 -141
- data/config/locales/zh-TW.yml +136 -116
- data/lib/active_admin/application.rb +6 -14
- data/lib/active_admin/application_settings.rb +1 -1
- data/lib/active_admin/async_count.rb +23 -0
- data/lib/active_admin/batch_actions/controller.rb +1 -4
- data/lib/active_admin/batch_actions/resource_extension.rb +8 -15
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -7
- data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
- data/lib/active_admin/batch_actions.rb +4 -9
- data/lib/active_admin/callbacks.rb +6 -4
- data/lib/active_admin/collection_decorator.rb +1 -1
- data/lib/active_admin/component.rb +0 -1
- data/lib/active_admin/csv_builder.rb +2 -2
- data/lib/active_admin/devise.rb +3 -3
- data/lib/active_admin/dsl.rb +3 -3
- data/lib/active_admin/dynamic_settings_node.rb +6 -6
- data/lib/active_admin/engine.rb +23 -7
- data/lib/active_admin/filters/active.rb +8 -6
- data/lib/active_admin/filters/active_filter.rb +2 -10
- data/lib/active_admin/filters/forms.rb +1 -45
- data/lib/active_admin/filters/resource_extension.rb +18 -10
- data/lib/active_admin/filters.rb +5 -7
- data/lib/active_admin/form_builder.rb +14 -17
- data/lib/active_admin/helpers/optional_display.rb +1 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +10 -12
- data/lib/active_admin/inputs/filters/base.rb +1 -1
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -6
- data/lib/active_admin/inputs/filters/date_range_input.rb +4 -2
- data/lib/active_admin/inputs.rb +0 -3
- data/lib/active_admin/localizers.rb +1 -1
- data/lib/active_admin/menu.rb +10 -7
- data/lib/active_admin/menu_collection.rb +1 -1
- data/lib/active_admin/menu_item.rb +24 -3
- data/lib/active_admin/namespace.rb +3 -45
- data/lib/active_admin/namespace_settings.rb +3 -36
- data/lib/active_admin/order_clause.rb +4 -1
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +4 -76
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
- data/lib/active_admin/orm/active_record/comments.rb +13 -8
- data/lib/active_admin/orm/active_record.rb +1 -1
- data/lib/active_admin/pundit_adapter.rb +3 -3
- data/lib/active_admin/resource/action_items.rb +18 -23
- data/lib/active_admin/resource/naming.rb +2 -3
- data/lib/active_admin/resource/page_presenters.rb +2 -2
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource.rb +17 -16
- data/lib/active_admin/resource_collection.rb +1 -1
- data/lib/active_admin/resource_dsl.rb +3 -3
- data/lib/active_admin/scope.rb +11 -1
- data/lib/active_admin/settings_node.rb +1 -1
- data/lib/active_admin/sidebar_section.rb +0 -5
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -1
- data/lib/active_admin/view_helpers.rb +0 -12
- data/lib/active_admin/views/components/active_admin_form.rb +21 -29
- data/lib/active_admin/views/components/attributes_table.rb +14 -16
- data/lib/active_admin/views/components/index_list.rb +10 -23
- data/lib/active_admin/views/components/paginated_collection.rb +34 -39
- data/lib/active_admin/views/components/panel.rb +3 -11
- data/lib/active_admin/views/components/scopes.rb +39 -26
- data/lib/active_admin/views/components/status_tag.rb +22 -19
- data/lib/active_admin/views/components/table_for.rb +25 -25
- data/lib/active_admin/views/index_as_table.rb +39 -101
- data/lib/active_admin.rb +16 -15
- data/lib/activeadmin.rb +1 -1
- data/lib/generators/active_admin/assets/assets_generator.rb +4 -4
- data/lib/generators/active_admin/assets/templates/active_admin.css +3 -0
- data/lib/generators/active_admin/assets/templates/tailwind.config.js +21 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +2 -2
- data/lib/generators/active_admin/install/install_generator.rb +2 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +10 -87
- data/lib/generators/active_admin/install/templates/dashboard.rb +8 -25
- data/lib/generators/active_admin/page/page_generator.rb +0 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +50 -7
- data/lib/generators/active_admin/resource/templates/resource.rb.erb +42 -0
- data/lib/generators/active_admin/views_generator.rb +18 -0
- data/plugin.js +414 -0
- data/vendor/bundle/offense.rb +1 -0
- data/vendor/javascript/flowbite.js +1 -0
- data/vendor/javascript/rails_ujs_esm.js +1 -0
- metadata +80 -207
- data/app/assets/javascripts/active_admin/base.js +0 -517
- data/app/assets/stylesheets/active_admin/_base.scss +0 -57
- data/app/assets/stylesheets/active_admin/_forms.scss +0 -315
- data/app/assets/stylesheets/active_admin/_header.scss +0 -188
- data/app/assets/stylesheets/active_admin/_mixins.scss +0 -1
- data/app/assets/stylesheets/active_admin/_normalize.scss +0 -349
- data/app/assets/stylesheets/active_admin/_print.scss +0 -287
- data/app/assets/stylesheets/active_admin/_typography.scss +0 -100
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -6
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -30
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +0 -20
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +0 -6
- data/app/assets/stylesheets/active_admin/components/_columns.scss +0 -3
- data/app/assets/stylesheets/active_admin/components/_comments.scss +0 -41
- data/app/assets/stylesheets/active_admin/components/_date_picker.scss +0 -148
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -154
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +0 -37
- data/app/assets/stylesheets/active_admin/components/_grid.scss +0 -9
- data/app/assets/stylesheets/active_admin/components/_index_list.scss +0 -12
- data/app/assets/stylesheets/active_admin/components/_links.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +0 -34
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +0 -58
- data/app/assets/stylesheets/active_admin/components/_panels.scss +0 -6
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +0 -13
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -12
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +0 -70
- data/app/assets/stylesheets/active_admin/components/_tables.scss +0 -112
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +0 -68
- data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +0 -16
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +0 -8
- data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +0 -65
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +0 -28
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +0 -22
- data/app/assets/stylesheets/active_admin/mixins/_sections.scss +0 -41
- data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +0 -15
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +0 -3
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -17
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +0 -51
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +0 -44
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +0 -19
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +0 -29
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -43
- data/app/javascript/active_admin/base.js +0 -28
- data/app/javascript/active_admin/ext/jquery-ui.js +0 -7
- data/app/javascript/active_admin/ext/jquery.js +0 -9
- data/app/javascript/active_admin/initializers/batch-actions.js +0 -61
- data/app/javascript/active_admin/initializers/checkbox-toggler.js +0 -3
- data/app/javascript/active_admin/initializers/datepicker.js +0 -16
- data/app/javascript/active_admin/initializers/dropdown-menu.js +0 -9
- data/app/javascript/active_admin/initializers/filters.js +0 -10
- data/app/javascript/active_admin/initializers/has-many.js +0 -98
- data/app/javascript/active_admin/initializers/per-page.js +0 -13
- data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +0 -3
- data/app/javascript/active_admin/initializers/tabs.js +0 -6
- data/app/javascript/active_admin/lib/checkbox-toggler.js +0 -49
- data/app/javascript/active_admin/lib/dropdown-menu.js +0 -116
- data/app/javascript/active_admin/lib/filters.js +0 -39
- data/app/javascript/active_admin/lib/modal-dialog.js +0 -63
- data/app/javascript/active_admin/lib/per-page.js +0 -38
- data/app/javascript/active_admin/lib/table-checkbox-toggler.js +0 -38
- data/app/javascript/active_admin/lib/utils.js +0 -40
- data/app/views/kaminari/active_admin/_first_page.html.erb +0 -11
- data/app/views/kaminari/active_admin/_gap.html.erb +0 -8
- data/app/views/kaminari/active_admin/_last_page.html.erb +0 -11
- data/app/views/kaminari/active_admin/_next_page.html.erb +0 -11
- data/app/views/kaminari/active_admin/_page.html.erb +0 -12
- data/app/views/kaminari/active_admin/_paginator.html.erb +0 -25
- data/app/views/kaminari/active_admin/_prev_page.html.erb +0 -11
- data/app/views/kaminari/active_admin_countless/_first_page.html.erb +0 -11
- data/app/views/kaminari/active_admin_countless/_next_page.html.erb +0 -11
- data/app/views/kaminari/active_admin_countless/_page.html.erb +0 -12
- data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +0 -11
- data/app/views/layouts/active_admin.html.arb +0 -2
- data/config/locales/de-CH.yml +0 -94
- data/lib/active_admin/abstract_view_factory.rb +0 -48
- data/lib/active_admin/asset_registration.rb +0 -30
- data/lib/active_admin/base_controller/menu.rb +0 -35
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +0 -59
- data/lib/active_admin/filters/active_sidebar.rb +0 -28
- data/lib/active_admin/generators/boilerplate.rb +0 -54
- data/lib/active_admin/helpers/collection.rb +0 -21
- data/lib/active_admin/helpers/i18n.rb +0 -8
- data/lib/active_admin/inputs/datepicker_input.rb +0 -28
- data/lib/active_admin/inputs/filters/date_picker_input.rb +0 -14
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +0 -24
- data/lib/active_admin/orm/mongoid.rb +0 -2
- data/lib/active_admin/resource_controller/sidebars.rb +0 -19
- data/lib/active_admin/resource_controller.rb +0 -68
- data/lib/active_admin/view_factory.rb +0 -28
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +0 -13
- data/lib/active_admin/view_helpers/auto_link_helper.rb +0 -46
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +0 -34
- data/lib/active_admin/view_helpers/display_helper.rb +0 -119
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +0 -60
- data/lib/active_admin/view_helpers/fields_for.rb +0 -51
- data/lib/active_admin/view_helpers/flash_helper.rb +0 -15
- data/lib/active_admin/view_helpers/form_helper.rb +0 -21
- data/lib/active_admin/view_helpers/scope_name_helper.rb +0 -17
- data/lib/active_admin/view_helpers/sidebar_helper.rb +0 -16
- data/lib/active_admin/view_helpers/title_helper.rb +0 -12
- data/lib/active_admin/view_helpers/view_factory_helper.rb +0 -12
- data/lib/active_admin/views/action_items.rb +0 -18
- data/lib/active_admin/views/components/active_filters_sidebar_content.rb +0 -59
- data/lib/active_admin/views/components/blank_slate.rb +0 -18
- data/lib/active_admin/views/components/columns.rb +0 -162
- data/lib/active_admin/views/components/dropdown_menu.rb +0 -69
- data/lib/active_admin/views/components/menu.rb +0 -33
- data/lib/active_admin/views/components/menu_item.rb +0 -59
- data/lib/active_admin/views/components/sidebar.rb +0 -14
- data/lib/active_admin/views/components/sidebar_section.rb +0 -35
- data/lib/active_admin/views/components/site_title.rb +0 -55
- data/lib/active_admin/views/components/tabs.rb +0 -41
- data/lib/active_admin/views/components/unsupported_browser.rb +0 -12
- data/lib/active_admin/views/footer.rb +0 -32
- data/lib/active_admin/views/header.rb +0 -20
- data/lib/active_admin/views/index_as_block.rb +0 -37
- data/lib/active_admin/views/index_as_blog.rb +0 -156
- data/lib/active_admin/views/index_as_grid.rb +0 -81
- data/lib/active_admin/views/pages/base.rb +0 -134
- data/lib/active_admin/views/pages/form.rb +0 -65
- data/lib/active_admin/views/pages/index.rb +0 -166
- data/lib/active_admin/views/pages/layout.rb +0 -27
- data/lib/active_admin/views/pages/page.rb +0 -31
- data/lib/active_admin/views/pages/show.rb +0 -60
- data/lib/active_admin/views/tabbed_navigation.rb +0 -12
- data/lib/active_admin/views/title_bar.rb +0 -56
- data/lib/generators/active_admin/assets/templates/active_admin.js +0 -1
- data/lib/generators/active_admin/assets/templates/active_admin.scss +0 -17
- data/lib/generators/active_admin/resource/templates/admin.rb.erb +0 -46
- data/lib/generators/active_admin/webpacker/plugins/jquery.js +0 -7
- data/lib/generators/active_admin/webpacker/templates/active_admin.js +0 -5
- data/lib/generators/active_admin/webpacker/templates/active_admin.scss +0 -17
- data/lib/generators/active_admin/webpacker/templates/print.scss +0 -2
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +0 -27
- data/vendor/assets/javascripts/jquery-ui/data.js +0 -45
- data/vendor/assets/javascripts/jquery-ui/disable-selection.js +0 -51
- data/vendor/assets/javascripts/jquery-ui/focusable.js +0 -89
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +0 -83
- data/vendor/assets/javascripts/jquery-ui/form.js +0 -25
- data/vendor/assets/javascripts/jquery-ui/ie.js +0 -20
- data/vendor/assets/javascripts/jquery-ui/keycode.js +0 -51
- data/vendor/assets/javascripts/jquery-ui/labels.js +0 -71
- data/vendor/assets/javascripts/jquery-ui/plugin.js +0 -49
- data/vendor/assets/javascripts/jquery-ui/position.js +0 -513
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +0 -46
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +0 -27
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +0 -50
- data/vendor/assets/javascripts/jquery-ui/tabbable.js +0 -41
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +0 -54
- data/vendor/assets/javascripts/jquery-ui/version.js +0 -20
- data/vendor/assets/javascripts/jquery-ui/widget.js +0 -758
- data/vendor/assets/javascripts/jquery-ui/widgets/button.js +0 -454
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +0 -294
- data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +0 -304
- data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +0 -2243
- data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +0 -971
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +0 -1268
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +0 -241
- data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +0 -1228
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +0 -1622
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +0 -931
- /data/{lib → app/controllers}/active_admin/resource_controller/decorators.rb +0 -0
- /data/{lib → app/controllers}/active_admin/resource_controller/polymorphic_routes.rb +0 -0
- /data/{lib → app/controllers}/active_admin/resource_controller/resource_class_methods.rb +0 -0
- /data/lib/{active_admin/orm/mongoid/.gitkeep → generators/active_admin/assets/templates/builds/.keep} +0 -0
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module ViewHelpers
|
|
4
|
-
module ActiveAdminApplicationHelper
|
|
5
|
-
|
|
6
|
-
# Returns the current Active Admin application instance
|
|
7
|
-
def active_admin_application
|
|
8
|
-
ActiveAdmin.application
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module ViewHelpers
|
|
4
|
-
module AutoLinkHelper
|
|
5
|
-
|
|
6
|
-
# Automatically links objects to their resource controllers. If
|
|
7
|
-
# the resource has not been registered, a string representation of
|
|
8
|
-
# the object is returned.
|
|
9
|
-
#
|
|
10
|
-
# The default content in the link is returned from ActiveAdmin::ViewHelpers::DisplayHelper#display_name
|
|
11
|
-
#
|
|
12
|
-
# You can pass in the content to display
|
|
13
|
-
# eg: auto_link(@post, "My Link")
|
|
14
|
-
#
|
|
15
|
-
def auto_link(resource, content = display_name(resource))
|
|
16
|
-
if url = auto_url_for(resource)
|
|
17
|
-
link_to content, url
|
|
18
|
-
else
|
|
19
|
-
content
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Like `auto_link`, except that it only returns a URL instead of a full <a> tag
|
|
24
|
-
def auto_url_for(resource)
|
|
25
|
-
config = active_admin_resource_for(resource.class)
|
|
26
|
-
return unless config
|
|
27
|
-
|
|
28
|
-
if config.controller.action_methods.include?("show") &&
|
|
29
|
-
authorized?(ActiveAdmin::Auth::READ, resource)
|
|
30
|
-
url_for config.route_instance_path resource, url_options
|
|
31
|
-
elsif config.controller.action_methods.include?("edit") &&
|
|
32
|
-
authorized?(ActiveAdmin::Auth::EDIT, resource)
|
|
33
|
-
url_for config.route_edit_instance_path resource, url_options
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Returns the ActiveAdmin::Resource instance for a class
|
|
38
|
-
def active_admin_resource_for(klass)
|
|
39
|
-
if respond_to? :active_admin_namespace
|
|
40
|
-
active_admin_namespace.resource_for klass
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module ViewHelpers
|
|
4
|
-
module BreadcrumbHelper
|
|
5
|
-
|
|
6
|
-
# Returns an array of links to use in a breadcrumb
|
|
7
|
-
def breadcrumb_links(path = request.path)
|
|
8
|
-
# remove leading "/" and split up the URL
|
|
9
|
-
# and remove last since it's used as the page title
|
|
10
|
-
parts = path.split("/").select(&:present?)[0..-2]
|
|
11
|
-
|
|
12
|
-
parts.each_with_index.map do |part, index|
|
|
13
|
-
# 1. try using `display_name` if we can locate a DB object
|
|
14
|
-
# 2. try using the model name translation
|
|
15
|
-
# 3. default to calling `titlecase` on the URL fragment
|
|
16
|
-
if part =~ /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/ && parts[index - 1]
|
|
17
|
-
parent = active_admin_config.belongs_to_config.try :target
|
|
18
|
-
config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
|
|
19
|
-
name = display_name config.find_resource part
|
|
20
|
-
end
|
|
21
|
-
name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
|
|
22
|
-
|
|
23
|
-
# Don't create a link if the resource's show action is disabled
|
|
24
|
-
if !config || config.defined_actions.include?(:show)
|
|
25
|
-
link_to name, "/" + parts[0..index].join("/")
|
|
26
|
-
else
|
|
27
|
-
name
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module ViewHelpers
|
|
4
|
-
module DisplayHelper
|
|
5
|
-
|
|
6
|
-
DISPLAY_NAME_FALLBACK = -> {
|
|
7
|
-
klass = self.class
|
|
8
|
-
name = if klass.respond_to?(:model_name)
|
|
9
|
-
if klass.respond_to?(:primary_key)
|
|
10
|
-
"#{klass.model_name.human} ##{send(klass.primary_key)}"
|
|
11
|
-
else
|
|
12
|
-
klass.model_name.human
|
|
13
|
-
end
|
|
14
|
-
elsif klass.respond_to?(:primary_key)
|
|
15
|
-
" ##{send(klass.primary_key)}"
|
|
16
|
-
end
|
|
17
|
-
name.present? ? name : to_s
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
def DISPLAY_NAME_FALLBACK.inspect
|
|
21
|
-
"DISPLAY_NAME_FALLBACK"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Attempts to call any known display name methods on the resource.
|
|
25
|
-
# See the setting in `application.rb` for the list of methods and their priority.
|
|
26
|
-
def display_name(resource)
|
|
27
|
-
unless resource.nil?
|
|
28
|
-
result = render_in_context(resource, display_name_method_for(resource))
|
|
29
|
-
if result.to_s&.strip&.present?
|
|
30
|
-
ERB::Util.html_escape(result)
|
|
31
|
-
else
|
|
32
|
-
ERB::Util.html_escape(render_in_context(resource, DISPLAY_NAME_FALLBACK))
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Looks up and caches the first available display name method.
|
|
38
|
-
# To prevent conflicts, we exclude any methods that happen to be associations.
|
|
39
|
-
# If no methods are available and we're about to use the Kernel's `to_s`, provide our own.
|
|
40
|
-
def display_name_method_for(resource)
|
|
41
|
-
@@display_name_methods_cache ||= {}
|
|
42
|
-
@@display_name_methods_cache[resource.class] ||= begin
|
|
43
|
-
methods = active_admin_application.display_name_methods - association_methods_for(resource)
|
|
44
|
-
method = methods.detect { |method| resource.respond_to? method }
|
|
45
|
-
|
|
46
|
-
if method != :to_s || resource.method(method).source_location
|
|
47
|
-
method
|
|
48
|
-
else
|
|
49
|
-
DISPLAY_NAME_FALLBACK
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def association_methods_for(resource)
|
|
55
|
-
return [] unless resource.class.respond_to? :reflect_on_all_associations
|
|
56
|
-
resource.class.reflect_on_all_associations.map(&:name)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def format_attribute(resource, attr)
|
|
60
|
-
value = find_value resource, attr
|
|
61
|
-
|
|
62
|
-
if value.is_a?(Arbre::Element)
|
|
63
|
-
value
|
|
64
|
-
elsif boolean_attr?(resource, attr, value)
|
|
65
|
-
Arbre::Context.new { status_tag value }
|
|
66
|
-
else
|
|
67
|
-
pretty_format value
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def find_value(resource, attr)
|
|
72
|
-
if attr.is_a? Proc
|
|
73
|
-
attr.call resource
|
|
74
|
-
elsif resource.respond_to? attr
|
|
75
|
-
resource.public_send attr
|
|
76
|
-
elsif resource.respond_to? :[]
|
|
77
|
-
resource[attr]
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Attempts to create a human-readable string for any object
|
|
82
|
-
def pretty_format(object)
|
|
83
|
-
case object
|
|
84
|
-
when String, Numeric, Symbol, Arbre::Element
|
|
85
|
-
object.to_s
|
|
86
|
-
when Date, Time
|
|
87
|
-
I18n.localize object, format: active_admin_application.localize_format
|
|
88
|
-
when Array
|
|
89
|
-
format_collection(object)
|
|
90
|
-
else
|
|
91
|
-
if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
|
|
92
|
-
defined?(::Mongoid) && object.class.include?(Mongoid::Document)
|
|
93
|
-
auto_link object
|
|
94
|
-
elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
|
|
95
|
-
format_collection(object)
|
|
96
|
-
else
|
|
97
|
-
display_name object
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def format_collection(collection)
|
|
103
|
-
safe_join(collection.map { |item| pretty_format(item) }, ", ")
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def boolean_attr?(resource, attr, value)
|
|
107
|
-
case value
|
|
108
|
-
when TrueClass, FalseClass
|
|
109
|
-
true
|
|
110
|
-
else
|
|
111
|
-
if resource.class.respond_to? :attribute_types
|
|
112
|
-
resource.class.attribute_types[attr.to_s].is_a?(ActiveModel::Type::Boolean)
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module ViewHelpers
|
|
4
|
-
module DownloadFormatLinksHelper
|
|
5
|
-
private
|
|
6
|
-
|
|
7
|
-
def build_download_formats(download_links)
|
|
8
|
-
download_links = instance_exec(&download_links) if download_links.is_a?(Proc)
|
|
9
|
-
|
|
10
|
-
if download_links.is_a?(Array) && !download_links.empty?
|
|
11
|
-
download_links
|
|
12
|
-
elsif download_links == false
|
|
13
|
-
[]
|
|
14
|
-
else
|
|
15
|
-
self.class.formats
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def build_download_format_links(formats = self.class.formats)
|
|
20
|
-
params = request.query_parameters.except :format, :commit
|
|
21
|
-
div class: "download_links" do
|
|
22
|
-
span I18n.t("active_admin.download")
|
|
23
|
-
formats.each do |format|
|
|
24
|
-
a format.upcase, href: url_for(params: params, format: format)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def self.included base
|
|
30
|
-
base.extend ClassMethods
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
module ClassMethods
|
|
34
|
-
|
|
35
|
-
# A ready only of formats to make available in index/paginated
|
|
36
|
-
# collection view.
|
|
37
|
-
# @return [Array]
|
|
38
|
-
# @see add_format for information on adding custom download link
|
|
39
|
-
# formats
|
|
40
|
-
def formats
|
|
41
|
-
@formats ||= [:csv, :xml, :json]
|
|
42
|
-
@formats.clone
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Adds a mime type to the list of available formats available for data
|
|
46
|
-
# export. You must register the extension prior to adding it here.
|
|
47
|
-
# @param [Symbol] format the mime type to add
|
|
48
|
-
# @return [Array] A copy of the updated formats array.
|
|
49
|
-
def add_format(format)
|
|
50
|
-
unless Mime::Type.lookup_by_extension format
|
|
51
|
-
raise ArgumentError, "Please register the #{format} mime type with `Mime::Type.register`"
|
|
52
|
-
end
|
|
53
|
-
@formats << format unless formats.include? format
|
|
54
|
-
formats
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module ViewHelpers
|
|
4
|
-
module FormHelper
|
|
5
|
-
|
|
6
|
-
# Flatten a params Hash to an array of fields.
|
|
7
|
-
#
|
|
8
|
-
# @param params [Hash]
|
|
9
|
-
# @param options [Hash] :namespace and :except
|
|
10
|
-
#
|
|
11
|
-
# @return [Array] of [Hash] with one element.
|
|
12
|
-
#
|
|
13
|
-
# @example
|
|
14
|
-
# fields_for_params(scope: "all", users: ["greg"])
|
|
15
|
-
# => [ {"scope" => "all"} , {"users[]" => "greg"} ]
|
|
16
|
-
#
|
|
17
|
-
def fields_for_params(params, options = {})
|
|
18
|
-
namespace = options[:namespace]
|
|
19
|
-
except = Array.wrap(options[:except]).map &:to_s
|
|
20
|
-
|
|
21
|
-
params.flat_map do |k, v|
|
|
22
|
-
next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
|
|
23
|
-
next if except.include?(k.to_s)
|
|
24
|
-
|
|
25
|
-
if namespace
|
|
26
|
-
k = "#{namespace}[#{k}]"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
case v
|
|
30
|
-
when String
|
|
31
|
-
{ k => v }
|
|
32
|
-
when Symbol
|
|
33
|
-
{ k => v.to_s }
|
|
34
|
-
when Hash
|
|
35
|
-
fields_for_params(v, namespace: k)
|
|
36
|
-
when Array
|
|
37
|
-
v.map do |v|
|
|
38
|
-
{ "#{k}[]" => v }
|
|
39
|
-
end
|
|
40
|
-
when nil
|
|
41
|
-
{ k => "" }
|
|
42
|
-
when TrueClass, FalseClass
|
|
43
|
-
{ k => v }
|
|
44
|
-
else
|
|
45
|
-
raise "I don't know what to do with #{v.class} params: #{v.inspect}"
|
|
46
|
-
end
|
|
47
|
-
end.compact
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module ViewHelpers
|
|
4
|
-
module FlashHelper
|
|
5
|
-
|
|
6
|
-
# Returns all the flash keys to display in any Active Admin view.
|
|
7
|
-
# This method removes the :timedout key that Devise uses by default.
|
|
8
|
-
# Note Rails >= 4.1 normalizes keys to strings automatically.
|
|
9
|
-
def flash_messages
|
|
10
|
-
@flash_messages ||= flash.to_hash.with_indifferent_access.except(*active_admin_application.flash_keys_to_except)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module ViewHelpers
|
|
4
|
-
module FormHelper
|
|
5
|
-
|
|
6
|
-
def active_admin_form_for(resource, options = {}, &block)
|
|
7
|
-
Arbre::Context.new({}, self) do
|
|
8
|
-
active_admin_form_for resource, options, &block
|
|
9
|
-
end.content
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def hidden_field_tags_for(params, options = {})
|
|
13
|
-
fields_for_params(params.to_unsafe_hash, options).map do |kv|
|
|
14
|
-
k, v = kv.first
|
|
15
|
-
hidden_field_tag k, v, id: sanitize_to_id("hidden_active_admin_#{k}")
|
|
16
|
-
end.join("\n").html_safe
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module ViewHelpers
|
|
4
|
-
module ScopeNameHelper
|
|
5
|
-
|
|
6
|
-
def scope_name(scope)
|
|
7
|
-
case scope.name
|
|
8
|
-
when Proc then
|
|
9
|
-
self.instance_exec(&scope.name).to_s
|
|
10
|
-
else
|
|
11
|
-
scope.name.to_s
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module Views
|
|
4
|
-
|
|
5
|
-
class ActionItems < ActiveAdmin::Component
|
|
6
|
-
|
|
7
|
-
def build(action_items)
|
|
8
|
-
action_items.each do |action_item|
|
|
9
|
-
span class: action_item.html_class do
|
|
10
|
-
instance_exec(&action_item.block)
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "active_admin/filters/active"
|
|
3
|
-
|
|
4
|
-
module ActiveAdmin
|
|
5
|
-
module Views
|
|
6
|
-
|
|
7
|
-
class ActiveFiltersSidebarContent < ActiveAdmin::Component
|
|
8
|
-
builder_method :active_filters_sidebar_content
|
|
9
|
-
|
|
10
|
-
def build
|
|
11
|
-
active_filters = ActiveAdmin::Filters::Active.new(active_admin_config, assigns[:search])
|
|
12
|
-
active_scopes = assigns[:search].instance_variable_get("@scope_args")
|
|
13
|
-
|
|
14
|
-
scope_block(current_scope)
|
|
15
|
-
filters_list(active_filters, active_scopes)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def scope_block(current_scope)
|
|
19
|
-
return unless current_scope
|
|
20
|
-
|
|
21
|
-
h4 I18n.t("active_admin.search_status.current_scope"), style: "display: inline"
|
|
22
|
-
b scope_name(current_scope), class: "current_scope_name"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def filters_list(active_filters, active_scopes)
|
|
26
|
-
div style: "margin-top: 10px" do
|
|
27
|
-
h4 I18n.t("active_admin.search_status.current_filters"), style: "margin-bottom: 10px"
|
|
28
|
-
ul do
|
|
29
|
-
if active_filters.filters.blank? && active_scopes.blank?
|
|
30
|
-
li I18n.t("active_admin.search_status.no_current_filters")
|
|
31
|
-
else
|
|
32
|
-
active_filters.filters.each { |filter| filter_item(filter) }
|
|
33
|
-
active_scopes.each { |name, value| scope_item(name, value) }
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def filter_item(filter)
|
|
40
|
-
li filter.html_options do
|
|
41
|
-
span filter.label
|
|
42
|
-
b to_sentence(filter.values.map { |v| pretty_format(v) })
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def scope_item(name, value)
|
|
47
|
-
filter_name = name.gsub(/_eq$/, "")
|
|
48
|
-
filter = active_admin_config.filters[filter_name.to_sym]
|
|
49
|
-
label = filter.try(:[], :label) || filter_name.titleize
|
|
50
|
-
|
|
51
|
-
li class: "current_filter_#{name}" do
|
|
52
|
-
span "#{label} #{Ransack::Translate.predicate('eq')}"
|
|
53
|
-
b value
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
end
|
|
59
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module Views
|
|
4
|
-
# Build a Blank Slate
|
|
5
|
-
class BlankSlate < ActiveAdmin::Component
|
|
6
|
-
builder_method :blank_slate
|
|
7
|
-
|
|
8
|
-
def default_class_name
|
|
9
|
-
"blank_slate_container"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def build(content)
|
|
13
|
-
super(span(content.html_safe, class: "blank_slate"))
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module ActiveAdmin
|
|
3
|
-
module Views
|
|
4
|
-
|
|
5
|
-
# = Columns Component
|
|
6
|
-
#
|
|
7
|
-
# The Columns component allows you draw content into scalable columns. All
|
|
8
|
-
# you need to do is define the number of columns and the component will
|
|
9
|
-
# take care of the rest.
|
|
10
|
-
#
|
|
11
|
-
# == Simple Columns
|
|
12
|
-
#
|
|
13
|
-
# To display columns, use the #columns method. Within the block, call the
|
|
14
|
-
# #column method to create a new column.
|
|
15
|
-
#
|
|
16
|
-
# To create a two column layout:
|
|
17
|
-
#
|
|
18
|
-
# columns do
|
|
19
|
-
# column do
|
|
20
|
-
# span "Column # 1
|
|
21
|
-
# end
|
|
22
|
-
# column do
|
|
23
|
-
# span "Column # 2
|
|
24
|
-
# end
|
|
25
|
-
# end
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
# == Multiple Span Columns
|
|
29
|
-
#
|
|
30
|
-
# To make a column span multiple, pass the :span option to the column method:
|
|
31
|
-
#
|
|
32
|
-
# columns do
|
|
33
|
-
# column span: 2 do
|
|
34
|
-
# span "Column # 1
|
|
35
|
-
# end
|
|
36
|
-
# column do
|
|
37
|
-
# span "Column # 2
|
|
38
|
-
# end
|
|
39
|
-
# end
|
|
40
|
-
#
|
|
41
|
-
# By default, each column spans 1 column. So the above layout would have 2 columns,
|
|
42
|
-
# the first being 2 time bigger than the second.
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
# == Max and Min Column Sizes
|
|
46
|
-
#
|
|
47
|
-
# Active Admin is a fluid width layout, which means that columns are all defined
|
|
48
|
-
# using percentages. Sometimes this can cause issues if you don't want a column
|
|
49
|
-
# to shrink or expand past a certain point.
|
|
50
|
-
#
|
|
51
|
-
# To overcome this, columns include a :max_width and :min_width option.
|
|
52
|
-
#
|
|
53
|
-
# columns do
|
|
54
|
-
# column max_width: "200px", min_width: "100px" do
|
|
55
|
-
# span "Column # 1
|
|
56
|
-
# end
|
|
57
|
-
# column do
|
|
58
|
-
# span "Column # 2
|
|
59
|
-
# end
|
|
60
|
-
# end
|
|
61
|
-
#
|
|
62
|
-
# Now the first column will not grow bigger than 200px and will not shrink smaller
|
|
63
|
-
# than 100px.
|
|
64
|
-
class Columns < ActiveAdmin::Component
|
|
65
|
-
builder_method :columns
|
|
66
|
-
|
|
67
|
-
# For documentation, please take a look at Column#build
|
|
68
|
-
def column(*args, &block)
|
|
69
|
-
insert_tag Column, *args, &block
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# Override add child to set widths
|
|
73
|
-
def add_child(*)
|
|
74
|
-
super
|
|
75
|
-
calculate_columns!
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
protected
|
|
79
|
-
|
|
80
|
-
# Override the closing tag to include a clear
|
|
81
|
-
def closing_tag
|
|
82
|
-
"<div style=\"clear:both;\"></div>" + super
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def margin_size
|
|
86
|
-
2
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# Calculate our columns sizes and margins
|
|
90
|
-
def calculate_columns!
|
|
91
|
-
span_count = columns_span_count
|
|
92
|
-
columns_count = children.size
|
|
93
|
-
|
|
94
|
-
all_margins_width = margin_size * (span_count - 1)
|
|
95
|
-
column_width = (100.00 - all_margins_width) / span_count
|
|
96
|
-
|
|
97
|
-
columns.each_with_index do |column, i|
|
|
98
|
-
is_last_column = i == (columns_count - 1)
|
|
99
|
-
column.set_column_styles(column_width, margin_size, is_last_column)
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def columns_span_count
|
|
104
|
-
count = 0
|
|
105
|
-
columns.each do |column|
|
|
106
|
-
count += column.span_size
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
count
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
def columns
|
|
113
|
-
children.select { |child| child.is_a?(Column) }
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
class Column < ActiveAdmin::Component
|
|
118
|
-
|
|
119
|
-
attr_accessor :span_size, :max_width, :min_width
|
|
120
|
-
|
|
121
|
-
# @param [Hash] options An options hash for the column
|
|
122
|
-
#
|
|
123
|
-
# @option options [Integer] :span The columns this column should span
|
|
124
|
-
def build(options = {})
|
|
125
|
-
options = options.dup
|
|
126
|
-
@span_size = options.delete(:span) || 1
|
|
127
|
-
@max_width = options.delete(:max_width)
|
|
128
|
-
@min_width = options.delete(:min_width)
|
|
129
|
-
|
|
130
|
-
super(options)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def set_column_styles(column_width, margin_width, is_last_column = false)
|
|
134
|
-
column_with_span_width = (span_size * column_width) + ((span_size - 1) * margin_width)
|
|
135
|
-
|
|
136
|
-
styles = []
|
|
137
|
-
|
|
138
|
-
styles << "width: #{column_with_span_width}%;"
|
|
139
|
-
|
|
140
|
-
if max_width
|
|
141
|
-
styles << "max-width: #{safe_width(max_width)};"
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
if min_width
|
|
145
|
-
styles << "min-width: #{safe_width(min_width)};"
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
styles << "margin-right: #{margin_width}%;" unless is_last_column
|
|
149
|
-
|
|
150
|
-
set_attribute :style, styles.join(" ")
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
private
|
|
154
|
-
|
|
155
|
-
# Converts values without a '%' or 'px' suffix to a pixel value
|
|
156
|
-
def safe_width(width)
|
|
157
|
-
width.to_s.gsub(/\A(\d+)\z/, '\1px')
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
end
|