activeadmin 1.4.2 → 2.9.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 +4 -4
- data/CHANGELOG.md +501 -157
- data/CONTRIBUTING.md +57 -72
- data/README.md +47 -14
- data/app/assets/javascripts/active_admin/base.js +517 -0
- data/app/assets/stylesheets/active_admin/_base.scss +29 -29
- data/app/assets/stylesheets/active_admin/_forms.scss +2 -14
- data/app/assets/stylesheets/active_admin/_header.scss +40 -8
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
- data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
- data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +8 -0
- data/app/assets/stylesheets/active_admin/print.scss +2 -2
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
- data/app/javascript/active_admin/base.js +28 -0
- data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
- data/app/javascript/active_admin/ext/jquery.js +9 -0
- data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
- data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/datepicker.js +16 -0
- data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/app/javascript/active_admin/initializers/filters.js +10 -0
- data/app/javascript/active_admin/initializers/has-many.js +95 -0
- data/app/javascript/active_admin/initializers/per-page.js +13 -0
- data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/tabs.js +6 -0
- data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
- data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
- data/app/javascript/active_admin/lib/filters.js +39 -0
- data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
- data/app/javascript/active_admin/lib/per-page.js +38 -0
- data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
- data/app/javascript/active_admin/lib/utils.js +40 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
- 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 +2 -2
- data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
- data/app/views/active_admin/devise/registrations/new.html.erb +1 -2
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
- data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
- data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +16 -6
- data/config/locales/ar.yml +9 -8
- data/config/locales/az.yml +138 -0
- data/config/locales/bg.yml +1 -1
- data/config/locales/bs.yml +1 -0
- data/config/locales/ca.yml +1 -1
- data/config/locales/cs.yml +1 -0
- data/config/locales/da.yml +1 -0
- data/config/locales/de-CH.yml +1 -0
- data/config/locales/de.yml +19 -0
- data/config/locales/el.yml +1 -0
- data/config/locales/en-CA.yml +4 -3
- data/config/locales/en-GB.yml +4 -3
- data/config/locales/en.yml +4 -3
- data/config/locales/eo.yml +1 -0
- data/config/locales/es-MX.yml +3 -1
- data/config/locales/es.yml +6 -5
- data/config/locales/fa.yml +1 -0
- data/config/locales/fi.yml +1 -0
- data/config/locales/fr.yml +6 -5
- data/config/locales/he.yml +1 -1
- data/config/locales/hr.yml +1 -0
- data/config/locales/hu.yml +5 -0
- data/config/locales/id.yml +1 -0
- data/config/locales/it.yml +19 -0
- data/config/locales/ja.yml +4 -3
- data/config/locales/ko.yml +1 -0
- data/config/locales/lt.yml +3 -2
- data/config/locales/lv.yml +3 -2
- data/config/locales/mk.yml +134 -0
- data/config/locales/nb.yml +1 -0
- data/config/locales/nl.yml +1 -0
- data/config/locales/pl.yml +1 -0
- data/config/locales/pt-BR.yml +1 -0
- data/config/locales/pt-PT.yml +1 -0
- data/config/locales/ro.yml +1 -0
- data/config/locales/ru.yml +1 -0
- data/config/locales/sk.yml +60 -0
- data/config/locales/sv-SE.yml +1 -0
- data/config/locales/tr.yml +1 -0
- data/config/locales/uk.yml +3 -0
- data/config/locales/vi.yml +7 -5
- data/config/locales/zh-CN.yml +1 -0
- data/config/locales/zh-TW.yml +1 -0
- data/docs/0-installation.md +28 -4
- data/docs/1-general-configuration.md +20 -0
- data/docs/11-decorators.md +16 -5
- data/docs/12-arbre-components.md +13 -0
- data/docs/13-authorization-adapter.md +6 -6
- data/docs/2-resource-customization.md +11 -2
- data/docs/3-index-pages.md +1 -1
- data/docs/3-index-pages/index-as-table.md +7 -0
- data/docs/5-forms.md +6 -1
- data/docs/6-show-pages.md +12 -0
- data/docs/9-batch-actions.md +2 -2
- data/docs/CNAME +1 -1
- data/docs/Gemfile +2 -3
- data/docs/Gemfile.lock +126 -116
- data/docs/_config.yml +2 -0
- data/docs/_includes/top-menu.html +2 -2
- data/docs/documentation.md +1 -1
- data/docs/index.html +110 -9
- data/docs/stylesheets/main.css +29 -0
- data/lib/active_admin.rb +67 -63
- data/lib/active_admin/application.rb +20 -27
- data/lib/active_admin/application_settings.rb +6 -3
- data/lib/active_admin/asset_registration.rb +0 -8
- data/lib/active_admin/authorization_adapter.rb +3 -3
- data/lib/active_admin/base_controller.rb +10 -10
- data/lib/active_admin/base_controller/authorization.rb +15 -15
- data/lib/active_admin/batch_actions/controller.rb +5 -5
- data/lib/active_admin/batch_actions/resource_extension.rb +15 -10
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +6 -6
- data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/cancan_adapter.rb +1 -1
- data/lib/active_admin/collection_decorator.rb +31 -0
- data/lib/active_admin/controller_action.rb +2 -1
- data/lib/active_admin/csv_builder.rb +14 -9
- data/lib/active_admin/dependency.rb +13 -85
- data/lib/active_admin/devise.rb +5 -5
- data/lib/active_admin/dsl.rb +2 -9
- data/lib/active_admin/dynamic_settings_node.rb +2 -2
- data/lib/active_admin/engine.rb +10 -8
- data/lib/active_admin/error.rb +4 -4
- data/lib/active_admin/filters.rb +7 -7
- data/lib/active_admin/filters/active.rb +1 -1
- data/lib/active_admin/filters/active_filter.rb +10 -10
- data/lib/active_admin/filters/active_sidebar.rb +9 -5
- data/lib/active_admin/filters/forms.rb +7 -7
- data/lib/active_admin/filters/formtastic_addons.rb +2 -7
- data/lib/active_admin/filters/resource_extension.rb +28 -4
- data/lib/active_admin/form_builder.rb +26 -22
- data/lib/active_admin/generators/boilerplate.rb +12 -4
- data/lib/active_admin/helpers/optional_display.rb +2 -2
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +2 -2
- data/lib/active_admin/inputs/filters/base.rb +1 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +6 -6
- data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
- data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
- data/lib/active_admin/inputs/filters/select_input.rb +2 -2
- data/lib/active_admin/localizers.rb +1 -1
- data/lib/active_admin/localizers/resource_localizer.rb +3 -3
- data/lib/active_admin/menu.rb +6 -3
- data/lib/active_admin/menu_item.rb +7 -7
- data/lib/active_admin/namespace.rb +12 -12
- data/lib/active_admin/namespace_settings.rb +27 -8
- data/lib/active_admin/order_clause.rb +2 -2
- data/lib/active_admin/orm/active_record.rb +1 -1
- data/lib/active_admin/orm/active_record/comments.rb +23 -23
- data/lib/active_admin/orm/active_record/comments/comment.rb +4 -4
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +29 -24
- data/lib/active_admin/page.rb +1 -1
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/page_presenter.rb +2 -1
- data/lib/active_admin/pundit_adapter.rb +22 -9
- data/lib/active_admin/resource.rb +34 -20
- data/lib/active_admin/resource/action_items.rb +5 -5
- data/lib/active_admin/resource/attributes.rb +8 -5
- data/lib/active_admin/resource/belongs_to.rb +8 -3
- data/lib/active_admin/resource/controllers.rb +1 -1
- data/lib/active_admin/resource/menu.rb +5 -5
- data/lib/active_admin/resource/model.rb +15 -0
- data/lib/active_admin/resource/naming.rb +5 -5
- data/lib/active_admin/resource/routes.rb +25 -14
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/scopes.rb +3 -3
- data/lib/active_admin/resource/sidebars.rb +2 -2
- data/lib/active_admin/resource_collection.rb +2 -2
- data/lib/active_admin/resource_controller.rb +13 -10
- data/lib/active_admin/resource_controller/action_builder.rb +10 -0
- data/lib/active_admin/resource_controller/data_access.rb +1 -1
- data/lib/active_admin/resource_controller/decorators.rb +7 -29
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/resource_controller/streaming.rb +7 -6
- data/lib/active_admin/resource_dsl.rb +11 -9
- data/lib/active_admin/router.rb +3 -2
- data/lib/active_admin/scope.rb +15 -11
- data/lib/active_admin/settings_node.rb +1 -1
- data/lib/active_admin/sidebar_section.rb +3 -1
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -17
- data/lib/active_admin/view_helpers.rb +1 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +5 -5
- data/lib/active_admin/view_helpers/display_helper.rb +16 -7
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
- data/lib/active_admin/view_helpers/fields_for.rb +2 -2
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +12 -6
- data/lib/active_admin/views/components/attributes_table.rb +8 -8
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
- data/lib/active_admin/views/components/index_list.rb +3 -3
- data/lib/active_admin/views/components/menu.rb +1 -1
- data/lib/active_admin/views/components/menu_item.rb +4 -4
- data/lib/active_admin/views/components/paginated_collection.rb +21 -20
- data/lib/active_admin/views/components/panel.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +7 -5
- data/lib/active_admin/views/components/sidebar_section.rb +0 -3
- data/lib/active_admin/views/components/site_title.rb +1 -1
- data/lib/active_admin/views/components/status_tag.rb +13 -26
- data/lib/active_admin/views/components/table_for.rb +20 -19
- data/lib/active_admin/views/components/tabs.rb +13 -4
- data/lib/active_admin/views/footer.rb +3 -2
- data/lib/active_admin/views/header.rb +2 -2
- data/lib/active_admin/views/index_as_blog.rb +1 -1
- data/lib/active_admin/views/index_as_grid.rb +1 -1
- data/lib/active_admin/views/index_as_table.rb +27 -19
- data/lib/active_admin/views/pages/base.rb +18 -11
- data/lib/active_admin/views/pages/index.rb +15 -13
- data/lib/active_admin/views/tabbed_navigation.rb +2 -2
- data/lib/active_admin/views/title_bar.rb +1 -1
- data/lib/activeadmin.rb +1 -1
- data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
- data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
- data/lib/generators/active_admin/install/install_generator.rb +18 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +45 -3
- data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
- data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
- data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
- data/lib/ransack_ext.rb +9 -9
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
- data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
- metadata +108 -127
- data/.circleci/config.yml +0 -467
- data/.github/ISSUE_TEMPLATE.md +0 -20
- data/.gitignore +0 -46
- data/.mdlrc +0 -1
- data/.rspec +0 -1
- data/.rspec_parallel +0 -2
- data/.rubocop.yml +0 -94
- data/.simplecov +0 -11
- data/.yardopts +0 -7
- data/Gemfile +0 -10
- data/Gemfile.common +0 -53
- data/Gemfile.lock +0 -431
- data/Rakefile +0 -23
- data/activeadmin.gemspec +0 -32
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
- data/bin/install_chromedriver.sh +0 -17
- data/codecov.yml +0 -25
- data/config/i18n-tasks.yml +0 -26
- data/config/mdl_style.rb +0 -11
- data/cucumber.yml +0 -7
- data/gemfiles/rails_42.gemfile +0 -10
- data/gemfiles/rails_42.gemfile.lock +0 -410
- data/gemfiles/rails_50.gemfile +0 -10
- data/gemfiles/rails_50.gemfile.lock +0 -424
- data/gemfiles/rails_51.gemfile +0 -10
- data/gemfiles/rails_51.gemfile.lock +0 -423
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
- data/lib/active_admin/reloader.rb +0 -25
- data/lib/bug_report_templates/active_admin_master.rb +0 -111
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- data/tasks/application_generator.rb +0 -48
- data/tasks/docs.rake +0 -64
- data/tasks/gemfiles.rake +0 -8
- data/tasks/lint.rake +0 -110
- data/tasks/local.rake +0 -27
- data/tasks/test.rake +0 -43
data/lib/active_admin/version.rb
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "active_admin/abstract_view_factory"
|
|
2
2
|
|
|
3
3
|
module ActiveAdmin
|
|
4
4
|
class ViewFactory < AbstractViewFactory
|
|
5
5
|
|
|
6
6
|
# Register Helper Renderers
|
|
7
|
-
register
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
register global_navigation: ActiveAdmin::Views::TabbedNavigation,
|
|
8
|
+
utility_navigation: ActiveAdmin::Views::TabbedNavigation,
|
|
9
|
+
site_title: ActiveAdmin::Views::SiteTitle,
|
|
10
|
+
unsupported_browser: ActiveAdmin::Views::UnsupportedBrowser,
|
|
11
|
+
action_items: ActiveAdmin::Views::ActionItems,
|
|
12
|
+
title_bar: ActiveAdmin::Views::TitleBar,
|
|
13
|
+
header: ActiveAdmin::Views::Header,
|
|
14
|
+
footer: ActiveAdmin::Views::Footer,
|
|
15
|
+
index_scopes: ActiveAdmin::Views::Scopes,
|
|
16
|
+
blank_slate: ActiveAdmin::Views::BlankSlate
|
|
17
17
|
|
|
18
18
|
# Register All The Pages
|
|
19
|
-
register
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
register index_page: ActiveAdmin::Views::Pages::Index,
|
|
20
|
+
show_page: ActiveAdmin::Views::Pages::Show,
|
|
21
|
+
new_page: ActiveAdmin::Views::Pages::Form,
|
|
22
|
+
edit_page: ActiveAdmin::Views::Pages::Form,
|
|
23
|
+
layout: ActiveAdmin::Views::Pages::Layout,
|
|
24
|
+
page: ActiveAdmin::Views::Pages::Page
|
|
25
25
|
|
|
26
26
|
end
|
|
27
27
|
end
|
|
@@ -2,7 +2,7 @@ module ActiveAdmin
|
|
|
2
2
|
module ViewHelpers
|
|
3
3
|
|
|
4
4
|
# Require all ruby files in the view helpers dir
|
|
5
|
-
Dir[File.expand_path(
|
|
5
|
+
Dir[File.expand_path("view_helpers", __dir__) + "/*.rb"].each { |f| require f }
|
|
6
6
|
|
|
7
7
|
include ActiveAdminApplicationHelper
|
|
8
8
|
include AutoLinkHelper
|
|
@@ -6,22 +6,22 @@ module ActiveAdmin
|
|
|
6
6
|
def breadcrumb_links(path = request.path)
|
|
7
7
|
# remove leading "/" and split up the URL
|
|
8
8
|
# and remove last since it's used as the page title
|
|
9
|
-
parts = path.split(
|
|
9
|
+
parts = path.split("/").select(&:present?)[0..-2]
|
|
10
10
|
|
|
11
11
|
parts.each_with_index.map do |part, index|
|
|
12
12
|
# 1. try using `display_name` if we can locate a DB object
|
|
13
13
|
# 2. try using the model name translation
|
|
14
14
|
# 3. default to calling `titlecase` on the URL fragment
|
|
15
|
-
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]
|
|
15
|
+
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]
|
|
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
|
|
17
|
+
config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
|
|
18
|
+
name = display_name config.find_resource part
|
|
19
19
|
end
|
|
20
20
|
name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
|
|
21
21
|
|
|
22
22
|
# Don't create a link if the resource's show action is disabled
|
|
23
23
|
if !config || config.defined_actions.include?(:show)
|
|
24
|
-
link_to name,
|
|
24
|
+
link_to name, "/" + parts[0..index].join("/")
|
|
25
25
|
else
|
|
26
26
|
name
|
|
27
27
|
end
|
|
@@ -2,20 +2,21 @@ module ActiveAdmin
|
|
|
2
2
|
module ViewHelpers
|
|
3
3
|
module DisplayHelper
|
|
4
4
|
|
|
5
|
-
DISPLAY_NAME_FALLBACK = ->{
|
|
6
|
-
name
|
|
7
|
-
|
|
5
|
+
DISPLAY_NAME_FALLBACK = -> {
|
|
6
|
+
name = ""
|
|
7
|
+
klass = self.class
|
|
8
|
+
name << klass.model_name.human if klass.respond_to? :model_name
|
|
8
9
|
name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
|
|
9
10
|
name.present? ? name : to_s
|
|
10
11
|
}
|
|
11
12
|
def DISPLAY_NAME_FALLBACK.inspect
|
|
12
|
-
|
|
13
|
+
"DISPLAY_NAME_FALLBACK"
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
# Attempts to call any known display name methods on the resource.
|
|
16
17
|
# See the setting in `application.rb` for the list of methods and their priority.
|
|
17
18
|
def display_name(resource)
|
|
18
|
-
|
|
19
|
+
ERB::Util.html_escape(render_in_context(resource, display_name_method_for(resource))) unless resource.nil?
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
# Looks up and caches the first available display name method.
|
|
@@ -25,7 +26,7 @@ module ActiveAdmin
|
|
|
25
26
|
@@display_name_methods_cache ||= {}
|
|
26
27
|
@@display_name_methods_cache[resource.class] ||= begin
|
|
27
28
|
methods = active_admin_application.display_name_methods - association_methods_for(resource)
|
|
28
|
-
method
|
|
29
|
+
method = methods.detect { |method| resource.respond_to? method }
|
|
29
30
|
|
|
30
31
|
if method != :to_s || resource.method(method).source_location
|
|
31
32
|
method
|
|
@@ -69,16 +70,24 @@ module ActiveAdmin
|
|
|
69
70
|
object.to_s
|
|
70
71
|
when Date, Time
|
|
71
72
|
I18n.localize object, format: active_admin_application.localize_format
|
|
73
|
+
when Array
|
|
74
|
+
format_collection(object)
|
|
72
75
|
else
|
|
73
76
|
if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
|
|
74
|
-
defined?(::Mongoid)
|
|
77
|
+
defined?(::Mongoid) && object.class.include?(Mongoid::Document)
|
|
75
78
|
auto_link object
|
|
79
|
+
elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
|
|
80
|
+
format_collection(object)
|
|
76
81
|
else
|
|
77
82
|
display_name object
|
|
78
83
|
end
|
|
79
84
|
end
|
|
80
85
|
end
|
|
81
86
|
|
|
87
|
+
def format_collection(collection)
|
|
88
|
+
safe_join(collection.map { |item| pretty_format(item) }, ", ")
|
|
89
|
+
end
|
|
90
|
+
|
|
82
91
|
def boolean_attr?(resource, attr, value)
|
|
83
92
|
case value
|
|
84
93
|
when TrueClass, FalseClass
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
module ViewHelpers
|
|
3
3
|
module DownloadFormatLinksHelper
|
|
4
|
+
private
|
|
4
5
|
|
|
5
6
|
def build_download_formats(download_links)
|
|
6
7
|
download_links = instance_exec(&download_links) if download_links.is_a?(Proc)
|
|
@@ -17,7 +18,7 @@ module ActiveAdmin
|
|
|
17
18
|
def build_download_format_links(formats = self.class.formats)
|
|
18
19
|
params = request.query_parameters.except :format, :commit
|
|
19
20
|
div class: "download_links" do
|
|
20
|
-
span I18n.t(
|
|
21
|
+
span I18n.t("active_admin.download")
|
|
21
22
|
formats.each do |format|
|
|
22
23
|
a format.upcase, href: url_for(params: params, format: format)
|
|
23
24
|
end
|
|
@@ -15,7 +15,7 @@ module ActiveAdmin
|
|
|
15
15
|
#
|
|
16
16
|
def fields_for_params(params, options = {})
|
|
17
17
|
namespace = options[:namespace]
|
|
18
|
-
except
|
|
18
|
+
except = Array.wrap(options[:except]).map &:to_s
|
|
19
19
|
|
|
20
20
|
params.flat_map do |k, v|
|
|
21
21
|
next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
|
|
@@ -37,7 +37,7 @@ module ActiveAdmin
|
|
|
37
37
|
{ "#{k}[]" => v }
|
|
38
38
|
end
|
|
39
39
|
when nil
|
|
40
|
-
{ k =>
|
|
40
|
+
{ k => "" }
|
|
41
41
|
when TrueClass, FalseClass
|
|
42
42
|
{ k => v }
|
|
43
43
|
else
|
data/lib/active_admin/views.rb
CHANGED
|
@@ -57,6 +57,12 @@ module ActiveAdmin
|
|
|
57
57
|
end
|
|
58
58
|
insert_tag(SemanticInputsProxy, form_builder, *args, &wrapped_block)
|
|
59
59
|
else
|
|
60
|
+
# Set except option to prevent sensitive fields from being shown in forms by default.
|
|
61
|
+
opts = args.extract_options!
|
|
62
|
+
opts[:except] ||= []
|
|
63
|
+
ActiveAdmin.application.filter_attributes.each { |e| opts[:except] << e }
|
|
64
|
+
args << opts
|
|
65
|
+
|
|
60
66
|
proxy_call_to_form(:inputs, *args, &block)
|
|
61
67
|
end
|
|
62
68
|
end
|
|
@@ -105,14 +111,14 @@ module ActiveAdmin
|
|
|
105
111
|
create_another = params[:create_another]
|
|
106
112
|
label = @resource.class.model_name.human
|
|
107
113
|
Arbre::Context.new do
|
|
108
|
-
li class:
|
|
114
|
+
li class: "create_another" do
|
|
109
115
|
input(
|
|
110
116
|
checked: create_another,
|
|
111
|
-
id:
|
|
112
|
-
name:
|
|
113
|
-
type:
|
|
117
|
+
id: "create_another",
|
|
118
|
+
name: "create_another",
|
|
119
|
+
type: "checkbox"
|
|
114
120
|
)
|
|
115
|
-
label(I18n.t(
|
|
121
|
+
label(I18n.t("active_admin.create_another", model: label), for: "create_another")
|
|
116
122
|
end
|
|
117
123
|
end
|
|
118
124
|
end
|
|
@@ -125,7 +131,7 @@ module ActiveAdmin
|
|
|
125
131
|
legend = args.shift if args.first.is_a?(::String)
|
|
126
132
|
legend = html_options.delete(:name) if html_options.key?(:name)
|
|
127
133
|
legend_tag = legend ? "<legend><span>#{legend}</span></legend>" : ""
|
|
128
|
-
fieldset_attrs = html_options.map {|k, v| %Q{#{k}="#{v}"} }.join(" ")
|
|
134
|
+
fieldset_attrs = html_options.map { |k, v| %Q{#{k}="#{v}"} }.join(" ")
|
|
129
135
|
@opening_tag = "<fieldset #{fieldset_attrs}>#{legend_tag}<ol>"
|
|
130
136
|
@closing_tag = "</ol></fieldset>"
|
|
131
137
|
super(*(args << html_options), &block)
|
|
@@ -5,9 +5,9 @@ module ActiveAdmin
|
|
|
5
5
|
builder_method :attributes_table_for
|
|
6
6
|
|
|
7
7
|
def build(obj, *attrs)
|
|
8
|
-
@collection
|
|
8
|
+
@collection = Array.wrap(obj)
|
|
9
9
|
@resource_class = @collection.first.class
|
|
10
|
-
options = {
|
|
10
|
+
options = {}
|
|
11
11
|
options[:for] = @collection.first if single_record?
|
|
12
12
|
super(options)
|
|
13
13
|
@table = table
|
|
@@ -16,19 +16,19 @@ module ActiveAdmin
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def rows(*attrs)
|
|
19
|
-
attrs.each {|attr| row(attr) }
|
|
19
|
+
attrs.each { |attr| row(attr) }
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def row(*args, &block)
|
|
23
|
-
title
|
|
23
|
+
title = args[0]
|
|
24
24
|
options = args.extract_options!
|
|
25
25
|
classes = [:row]
|
|
26
26
|
if options[:class]
|
|
27
27
|
classes << options[:class]
|
|
28
28
|
elsif title.present?
|
|
29
|
-
classes << "row-#{
|
|
29
|
+
classes << "row-#{title.to_s.parameterize(separator: "_")}"
|
|
30
30
|
end
|
|
31
|
-
options[:class] = classes.join(
|
|
31
|
+
options[:class] = classes.join(" ")
|
|
32
32
|
|
|
33
33
|
@table << tr(options) do
|
|
34
34
|
th do
|
|
@@ -45,7 +45,7 @@ module ActiveAdmin
|
|
|
45
45
|
protected
|
|
46
46
|
|
|
47
47
|
def default_id_for_prefix
|
|
48
|
-
|
|
48
|
+
"attributes_table"
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# Build Colgroups
|
|
@@ -75,7 +75,7 @@ module ActiveAdmin
|
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
def empty_value
|
|
78
|
-
span I18n.t(
|
|
78
|
+
span I18n.t("active_admin.empty"), class: "empty"
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def content_for(record, attr)
|
|
@@ -35,30 +35,30 @@ module ActiveAdmin
|
|
|
35
35
|
super(options)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def item(*args)
|
|
38
|
+
def item(*args, **kwargs)
|
|
39
39
|
within @menu do
|
|
40
|
-
li link_to(*args)
|
|
40
|
+
li link_to(*args, **kwargs)
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
private
|
|
45
45
|
|
|
46
46
|
def build_button(name, button_options)
|
|
47
|
-
button_options[:class] ||=
|
|
48
|
-
button_options[:class] <<
|
|
47
|
+
button_options[:class] ||= ""
|
|
48
|
+
button_options[:class] << " dropdown_menu_button"
|
|
49
49
|
|
|
50
|
-
button_options[:href] =
|
|
50
|
+
button_options[:href] = "#"
|
|
51
51
|
|
|
52
52
|
a name, button_options
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def build_menu(options)
|
|
56
|
-
options[:class] ||=
|
|
57
|
-
options[:class] <<
|
|
56
|
+
options[:class] ||= ""
|
|
57
|
+
options[:class] << " dropdown_menu_list"
|
|
58
58
|
|
|
59
59
|
menu_list = nil
|
|
60
60
|
|
|
61
|
-
div class:
|
|
61
|
+
div class: "dropdown_menu_list_wrapper" do
|
|
62
62
|
menu_list = ul(options)
|
|
63
63
|
end
|
|
64
64
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "active_admin/helpers/collection"
|
|
2
2
|
|
|
3
3
|
module ActiveAdmin
|
|
4
4
|
module Views
|
|
@@ -15,7 +15,7 @@ module ActiveAdmin
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def tag_name
|
|
18
|
-
|
|
18
|
+
"ul"
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
# Builds the links for presenting different index views to the user
|
|
@@ -37,7 +37,7 @@ module ActiveAdmin
|
|
|
37
37
|
def build_index_list(index_class)
|
|
38
38
|
li class: classes_for_index(index_class) do
|
|
39
39
|
params = request.query_parameters.except :page, :commit, :format
|
|
40
|
-
url_with_params = url_for(params.merge(as: index_class.index_name.to_sym))
|
|
40
|
+
url_with_params = url_for(**params.merge(as: index_class.index_name.to_sym).symbolize_keys)
|
|
41
41
|
|
|
42
42
|
a href: url_with_params, class: "table_tools_button" do
|
|
43
43
|
name = index_class.index_name
|
|
@@ -18,7 +18,7 @@ module ActiveAdmin
|
|
|
18
18
|
add_class "current" if item.current? assigns[:current_tab]
|
|
19
19
|
|
|
20
20
|
if url
|
|
21
|
-
text_node link_to label, url, item.html_options
|
|
21
|
+
text_node link_to label, url, **item.html_options
|
|
22
22
|
else
|
|
23
23
|
span label, item.html_options
|
|
24
24
|
end
|
|
@@ -30,7 +30,7 @@ module ActiveAdmin
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def tag_name
|
|
33
|
-
|
|
33
|
+
"li"
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
# Sorts by priority first, then alphabetically by label if needed.
|
|
@@ -44,14 +44,14 @@ module ActiveAdmin
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def to_s
|
|
47
|
-
visible? ? super :
|
|
47
|
+
visible? ? super : ""
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
private
|
|
51
51
|
|
|
52
52
|
# URL is not nil, empty, or '#'
|
|
53
53
|
def real_url?
|
|
54
|
-
url && url.present? && url !=
|
|
54
|
+
url && url.present? && url != "#"
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require "active_admin/helpers/collection"
|
|
2
|
+
require "active_admin/view_helpers/download_format_links_helper"
|
|
3
3
|
|
|
4
4
|
module ActiveAdmin
|
|
5
5
|
module Views
|
|
@@ -38,12 +38,12 @@ module ActiveAdmin
|
|
|
38
38
|
# download_links => Download links override (false or [:csv, :pdf])
|
|
39
39
|
#
|
|
40
40
|
def build(collection, options = {})
|
|
41
|
-
@collection
|
|
42
|
-
@params
|
|
43
|
-
@param_name
|
|
41
|
+
@collection = collection
|
|
42
|
+
@params = options.delete(:params)
|
|
43
|
+
@param_name = options.delete(:param_name)
|
|
44
44
|
@download_links = options.delete(:download_links)
|
|
45
|
-
@display_total
|
|
46
|
-
@per_page
|
|
45
|
+
@display_total = options.delete(:pagination_total) { true }
|
|
46
|
+
@per_page = options.delete(:per_page)
|
|
47
47
|
|
|
48
48
|
unless collection.respond_to?(:total_pages)
|
|
49
49
|
raise(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
|
|
@@ -92,22 +92,22 @@ module ActiveAdmin
|
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
def build_pagination
|
|
95
|
-
options = { theme:
|
|
96
|
-
options[:params]
|
|
95
|
+
options = { theme: @display_total ? "active_admin" : "active_admin_countless" }
|
|
96
|
+
options[:params] = @params if @params
|
|
97
97
|
options[:param_name] = @param_name if @param_name
|
|
98
98
|
|
|
99
|
-
if !@display_total
|
|
99
|
+
if !@display_total
|
|
100
100
|
# The #paginate method in kaminari will query the resource with a
|
|
101
101
|
# count(*) to determine how many pages there should be unless
|
|
102
102
|
# you pass in the :total_pages option. We issue a query to determine
|
|
103
103
|
# if there is another page or not, but the limit/offset make this
|
|
104
104
|
# query fast.
|
|
105
|
-
offset = collection.offset(collection.current_page *
|
|
105
|
+
offset = collection.offset(collection.current_page * collection.limit_value).limit(1).count
|
|
106
106
|
options[:total_pages] = collection.current_page + offset
|
|
107
107
|
options[:right] = 0
|
|
108
108
|
end
|
|
109
109
|
|
|
110
|
-
text_node paginate collection, options
|
|
110
|
+
text_node paginate collection, **options
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
include ::ActiveAdmin::Helpers::Collection
|
|
@@ -116,27 +116,28 @@ module ActiveAdmin
|
|
|
116
116
|
# modified from will_paginate
|
|
117
117
|
def page_entries_info(options = {})
|
|
118
118
|
if options[:entry_name]
|
|
119
|
-
entry_name
|
|
119
|
+
entry_name = options[:entry_name]
|
|
120
120
|
entries_name = options[:entries_name] || entry_name.pluralize
|
|
121
121
|
elsif collection_is_empty?
|
|
122
|
-
entry_name
|
|
123
|
-
entries_name = I18n.t "active_admin.pagination.entry", count: 2, default:
|
|
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
124
|
else
|
|
125
125
|
key = "activerecord.models." + collection.first.class.model_name.i18n_key.to_s
|
|
126
|
-
|
|
126
|
+
|
|
127
|
+
entry_name = I18n.translate key, count: 1, default: collection.first.class.name.underscore.sub("_", " ")
|
|
127
128
|
entries_name = I18n.translate key, count: collection.size, default: entry_name.pluralize
|
|
128
129
|
end
|
|
129
130
|
|
|
130
131
|
if @display_total
|
|
131
132
|
if collection.total_pages < 2
|
|
132
133
|
case collection_size
|
|
133
|
-
when 0; I18n.t("active_admin.pagination.empty",
|
|
134
|
-
when 1; I18n.t("active_admin.pagination.one",
|
|
135
|
-
else;
|
|
134
|
+
when 0; I18n.t("active_admin.pagination.empty", model: entries_name)
|
|
135
|
+
when 1; I18n.t("active_admin.pagination.one", model: entry_name)
|
|
136
|
+
else; I18n.t("active_admin.pagination.one_page", model: entries_name, n: collection.total_count)
|
|
136
137
|
end
|
|
137
138
|
else
|
|
138
139
|
offset = (collection.current_page - 1) * collection.limit_value
|
|
139
|
-
total
|
|
140
|
+
total = collection.total_count
|
|
140
141
|
I18n.t "active_admin.pagination.multiple",
|
|
141
142
|
model: entries_name,
|
|
142
143
|
total: total,
|