activeadmin 2.6.1 → 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 +119 -8
- data/CONTRIBUTING.md +8 -24
- data/README.md +4 -4
- data/app/assets/javascripts/active_admin/base.js +14 -16
- data/app/assets/stylesheets/active_admin/_header.scss +37 -3
- data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +3 -0
- data/app/javascript/active_admin/initializers/per-page.js +1 -1
- data/app/javascript/active_admin/lib/checkbox-toggler.js +3 -3
- data/app/javascript/active_admin/lib/dropdown-menu.js +1 -1
- data/app/javascript/active_admin/lib/modal-dialog.js +7 -7
- data/app/javascript/active_admin/lib/per-page.js +1 -1
- data/app/javascript/active_admin/lib/table-checkbox-toggler.js +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/layouts/active_admin_logged_out.html.erb +15 -5
- data/config/locales/ar.yml +6 -6
- data/config/locales/es-MX.yml +2 -1
- data/config/locales/es.yml +2 -2
- data/config/locales/it.yml +18 -0
- data/config/locales/ja.yml +3 -3
- data/config/locales/vi.yml +5 -5
- data/docs/0-installation.md +26 -2
- data/docs/11-decorators.md +16 -5
- data/docs/2-resource-customization.md +10 -1
- data/docs/5-forms.md +6 -1
- data/docs/6-show-pages.md +12 -0
- data/docs/Gemfile +2 -2
- data/docs/Gemfile.lock +52 -41
- data/docs/_includes/top-menu.html +1 -1
- data/docs/documentation.md +1 -1
- data/docs/index.html +6 -6
- data/lib/active_admin.rb +59 -60
- data/lib/active_admin/application.rb +13 -13
- data/lib/active_admin/application_settings.rb +3 -3
- data/lib/active_admin/authorization_adapter.rb +3 -3
- data/lib/active_admin/base_controller.rb +4 -4
- data/lib/active_admin/base_controller/authorization.rb +13 -12
- data/lib/active_admin/batch_actions/controller.rb +3 -3
- data/lib/active_admin/batch_actions/resource_extension.rb +9 -8
- 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/cancan_adapter.rb +1 -1
- data/lib/active_admin/collection_decorator.rb +31 -0
- data/lib/active_admin/csv_builder.rb +4 -4
- data/lib/active_admin/dependency.rb +11 -11
- data/lib/active_admin/devise.rb +5 -5
- data/lib/active_admin/dsl.rb +1 -1
- data/lib/active_admin/dynamic_settings_node.rb +2 -2
- data/lib/active_admin/engine.rb +10 -8
- data/lib/active_admin/error.rb +0 -2
- 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 +5 -6
- data/lib/active_admin/filters/active_sidebar.rb +5 -5
- data/lib/active_admin/filters/forms.rb +6 -6
- data/lib/active_admin/filters/formtastic_addons.rb +1 -6
- data/lib/active_admin/filters/resource_extension.rb +1 -1
- data/lib/active_admin/form_builder.rb +24 -20
- data/lib/active_admin/generators/boilerplate.rb +1 -1
- data/lib/active_admin/helpers/optional_display.rb +2 -2
- data/lib/active_admin/inputs/datepicker_input.rb +1 -1
- data/lib/active_admin/inputs/filters/base.rb +1 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +4 -4
- 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/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 +8 -5
- data/lib/active_admin/order_clause.rb +1 -1
- data/lib/active_admin/orm/active_record.rb +1 -1
- data/lib/active_admin/orm/active_record/comments.rb +19 -19
- data/lib/active_admin/orm/active_record/comments/comment.rb +3 -3
- 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 +19 -19
- data/lib/active_admin/page.rb +1 -1
- data/lib/active_admin/pundit_adapter.rb +5 -5
- data/lib/active_admin/resource.rb +17 -17
- data/lib/active_admin/resource/action_items.rb +5 -5
- data/lib/active_admin/resource/attributes.rb +1 -1
- data/lib/active_admin/resource/belongs_to.rb +2 -2
- data/lib/active_admin/resource/controllers.rb +1 -1
- data/lib/active_admin/resource/menu.rb +4 -4
- data/lib/active_admin/resource/naming.rb +4 -4
- data/lib/active_admin/resource/routes.rb +5 -7
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource_controller.rb +12 -11
- data/lib/active_admin/resource_controller/data_access.rb +1 -1
- data/lib/active_admin/resource_controller/decorators.rb +6 -28
- data/lib/active_admin/resource_controller/streaming.rb +7 -6
- data/lib/active_admin/resource_dsl.rb +5 -5
- data/lib/active_admin/scope.rb +6 -6
- 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 +3 -3
- data/lib/active_admin/view_helpers/display_helper.rb +5 -5
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -1
- data/lib/active_admin/view_helpers/fields_for.rb +2 -2
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +5 -5
- data/lib/active_admin/views/components/attributes_table.rb +5 -5
- 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 +18 -18
- 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/site_title.rb +1 -1
- data/lib/active_admin/views/components/status_tag.rb +11 -11
- data/lib/active_admin/views/components/table_for.rb +17 -17
- data/lib/active_admin/views/components/tabs.rb +3 -3
- data/lib/active_admin/views/footer.rb +2 -1
- 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 +16 -16
- data/lib/active_admin/views/pages/base.rb +10 -8
- data/lib/active_admin/views/pages/index.rb +14 -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.scss +2 -2
- data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
- data/lib/generators/active_admin/install/install_generator.rb +14 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
- 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/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 +8 -8
- metadata +22 -44
data/lib/active_admin/dsl.rb
CHANGED
|
@@ -101,7 +101,7 @@ module ActiveAdmin
|
|
|
101
101
|
def batch_action(title, options = {}, &block)
|
|
102
102
|
# Create symbol & title information
|
|
103
103
|
if title.is_a? String
|
|
104
|
-
sym = title.titleize.tr(
|
|
104
|
+
sym = title.titleize.tr(" ", "").underscore.to_sym
|
|
105
105
|
else
|
|
106
106
|
sym = title
|
|
107
107
|
title = sym.to_s.titleize
|
data/lib/active_admin/engine.rb
CHANGED
|
@@ -2,20 +2,22 @@ module ActiveAdmin
|
|
|
2
2
|
class Engine < ::Rails::Engine
|
|
3
3
|
initializer "active_admin.load_app_path" do |app|
|
|
4
4
|
ActiveAdmin::Application.setting :app_path, app.root
|
|
5
|
-
ActiveAdmin::Application.setting :load_paths, [File.expand_path(
|
|
5
|
+
ActiveAdmin::Application.setting :load_paths, [File.expand_path("app/admin", app.root)]
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
initializer "active_admin.precompile", group: :all do |app|
|
|
9
|
-
ActiveAdmin.application.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
unless ActiveAdmin.application.use_webpacker
|
|
10
|
+
ActiveAdmin.application.stylesheets.each do |path, _|
|
|
11
|
+
app.config.assets.precompile << path
|
|
12
|
+
end
|
|
13
|
+
ActiveAdmin.application.javascripts.each do |path|
|
|
14
|
+
app.config.assets.precompile << path
|
|
15
|
+
end
|
|
14
16
|
end
|
|
15
17
|
end
|
|
16
18
|
|
|
17
|
-
initializer
|
|
18
|
-
require
|
|
19
|
+
initializer "active_admin.routes" do
|
|
20
|
+
require "active_admin/helpers/routes/url_helpers"
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
23
|
end
|
data/lib/active_admin/error.rb
CHANGED
data/lib/active_admin/filters.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
1
|
+
require "active_admin/filters/dsl"
|
|
2
|
+
require "active_admin/filters/resource_extension"
|
|
3
|
+
require "active_admin/filters/formtastic_addons"
|
|
4
|
+
require "active_admin/filters/forms"
|
|
5
|
+
require "active_admin/helpers/optional_display"
|
|
6
|
+
require "active_admin/filters/active_sidebar"
|
|
7
7
|
|
|
8
8
|
# Add our Extensions
|
|
9
9
|
ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Filters::DSL
|
|
10
|
-
ActiveAdmin::Resource.send
|
|
10
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::Filters::ResourceExtension
|
|
11
11
|
ActiveAdmin::ViewHelpers.send :include, ActiveAdmin::Filters::ViewHelper
|
|
@@ -39,8 +39,9 @@ module ActiveAdmin
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def predicate_name
|
|
42
|
-
I18n.t(
|
|
43
|
-
|
|
42
|
+
I18n.t(
|
|
43
|
+
"active_admin.filters.predicates.#{condition.predicate.name}",
|
|
44
|
+
default: ransack_predicate_name)
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
def html_options
|
|
@@ -66,7 +67,7 @@ module ActiveAdmin
|
|
|
66
67
|
def filter_label
|
|
67
68
|
return unless filter
|
|
68
69
|
|
|
69
|
-
filter[:label] || I18n.t(name, scope: [
|
|
70
|
+
filter[:label] || I18n.t(name, scope: ["formtastic", "labels"], default: nil)
|
|
70
71
|
end
|
|
71
72
|
|
|
72
73
|
#@return Ransack::Nodes::Attribute
|
|
@@ -83,7 +84,7 @@ module ActiveAdmin
|
|
|
83
84
|
end
|
|
84
85
|
|
|
85
86
|
def find_class?
|
|
86
|
-
[
|
|
87
|
+
["eq", "in"].include? condition.predicate.arel_predicate
|
|
87
88
|
end
|
|
88
89
|
|
|
89
90
|
# detect related class for Ransack::Nodes::Attribute
|
|
@@ -112,8 +113,6 @@ module ActiveAdmin
|
|
|
112
113
|
@predicate_association
|
|
113
114
|
end
|
|
114
115
|
|
|
115
|
-
private
|
|
116
|
-
|
|
117
116
|
def find_predicate_association
|
|
118
117
|
condition_attribute.klass.reflect_on_all_associations.
|
|
119
118
|
reject { |r| r.options[:polymorphic] }. #skip polymorphic
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "active_admin/filters/active"
|
|
2
2
|
|
|
3
3
|
module ActiveAdmin
|
|
4
4
|
module Filters
|
|
5
5
|
class ActiveSidebar < ActiveAdmin::SidebarSection
|
|
6
6
|
|
|
7
7
|
def initialize
|
|
8
|
-
super
|
|
8
|
+
super "search_status", sidebar_options
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def block
|
|
@@ -13,11 +13,11 @@ module ActiveAdmin
|
|
|
13
13
|
active_filters = ActiveAdmin::Filters::Active.new(active_admin_config, assigns[:search])
|
|
14
14
|
span do
|
|
15
15
|
if current_scope
|
|
16
|
-
h4 I18n.t("active_admin.search_status.current_scope"), style:
|
|
17
|
-
b scope_name(current_scope), class:
|
|
16
|
+
h4 I18n.t("active_admin.search_status.current_scope"), style: "display: inline"
|
|
17
|
+
b scope_name(current_scope), class: "current_scope_name", style: "display: inline"
|
|
18
18
|
end
|
|
19
19
|
div style: "margin-top: 10px" do
|
|
20
|
-
h4 I18n.t("active_admin.search_status.current_filters"), style:
|
|
20
|
+
h4 I18n.t("active_admin.search_status.current_filters"), style: "margin-bottom: 10px"
|
|
21
21
|
ul do
|
|
22
22
|
if active_filters.filters.blank?
|
|
23
23
|
li I18n.t("active_admin.search_status.no_current_filters")
|
|
@@ -48,15 +48,15 @@ module ActiveAdmin
|
|
|
48
48
|
def active_admin_filters_form_for(search, filters, options = {})
|
|
49
49
|
defaults = { builder: ActiveAdmin::Filters::FormBuilder,
|
|
50
50
|
url: collection_path,
|
|
51
|
-
html: { class:
|
|
51
|
+
html: { class: "filter_form" } }
|
|
52
52
|
required = { html: { method: :get },
|
|
53
53
|
as: :q }
|
|
54
|
-
options
|
|
54
|
+
options = defaults.deep_merge(options).deep_merge(required)
|
|
55
55
|
|
|
56
56
|
form_for search, options do |f|
|
|
57
57
|
filters.each do |attribute, opts|
|
|
58
|
-
next if opts.key?(:if)
|
|
59
|
-
next if opts.key?(:unless) &&
|
|
58
|
+
next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
|
|
59
|
+
next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
|
|
60
60
|
|
|
61
61
|
filter_opts = opts.except(:if, :unless)
|
|
62
62
|
filter_opts[:input_html] = instance_exec(&filter_opts[:input_html]) if filter_opts[:input_html].is_a?(Proc)
|
|
@@ -65,8 +65,8 @@ module ActiveAdmin
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
buttons = content_tag :div, class: "buttons" do
|
|
68
|
-
f.submit(I18n.t(
|
|
69
|
-
link_to(I18n.t(
|
|
68
|
+
f.submit(I18n.t("active_admin.filters.buttons.filter")) +
|
|
69
|
+
link_to(I18n.t("active_admin.filters.buttons.clear"), "#", class: "clear_filters_btn") +
|
|
70
70
|
hidden_field_tags_for(params, except: except_hidden_fields)
|
|
71
71
|
end
|
|
72
72
|
|
|
@@ -54,7 +54,7 @@ module ActiveAdmin
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def seems_searchable?
|
|
57
|
-
has_predicate? || scope?
|
|
57
|
+
column_for(method).nil? && (has_predicate? || scope?)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
# If the given method has a predicate (like _eq or _lteq), it's pretty
|
|
@@ -63,11 +63,6 @@ module ActiveAdmin
|
|
|
63
63
|
!!Ransack::Predicate.detect_from_string(method.to_s)
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
-
# Ransack lets you define custom search methods, called ransackers.
|
|
67
|
-
def ransacker?
|
|
68
|
-
klass._ransackers.key? method.to_s
|
|
69
|
-
end
|
|
70
|
-
|
|
71
66
|
# Ransack supports exposing selected scopes on your model for advanced searches.
|
|
72
67
|
def scope?
|
|
73
68
|
context = Ransack::Context.for klass
|
|
@@ -165,7 +165,7 @@ module ActiveAdmin
|
|
|
165
165
|
|
|
166
166
|
def filters_sidebar_section
|
|
167
167
|
ActiveAdmin::SidebarSection.new :filters, only: :index, if: -> { active_admin_config.filters.any? } do
|
|
168
|
-
active_admin_filters_form_for assigns[:search], active_admin_config.filters
|
|
168
|
+
active_admin_filters_form_for assigns[:search], **active_admin_config.filters
|
|
169
169
|
end
|
|
170
170
|
end
|
|
171
171
|
|
|
@@ -22,7 +22,7 @@ module ActiveAdmin
|
|
|
22
22
|
|
|
23
23
|
def cancel_link(url = { action: "index" }, html_options = {}, li_attrs = {})
|
|
24
24
|
li_attrs[:class] ||= "cancel"
|
|
25
|
-
li_content = template.link_to I18n.t(
|
|
25
|
+
li_content = template.link_to I18n.t("active_admin.cancel"), url, html_options
|
|
26
26
|
template.content_tag(:li, li_content, li_attrs)
|
|
27
27
|
end
|
|
28
28
|
|
|
@@ -40,14 +40,14 @@ module ActiveAdmin
|
|
|
40
40
|
attr_reader :assoc
|
|
41
41
|
attr_reader :options
|
|
42
42
|
attr_reader :heading, :sortable_column, :sortable_start
|
|
43
|
-
attr_reader :new_record, :destroy_option
|
|
43
|
+
attr_reader :new_record, :destroy_option, :remove_record
|
|
44
44
|
|
|
45
45
|
def initialize(has_many_form, assoc, options)
|
|
46
46
|
super has_many_form
|
|
47
47
|
@assoc = assoc
|
|
48
48
|
@options = extract_custom_settings!(options.dup)
|
|
49
49
|
@options.reverse_merge!(for: assoc)
|
|
50
|
-
@options[:class] = [options[:class], "inputs has_many_fields"].compact.join(
|
|
50
|
+
@options[:class] = [options[:class], "inputs has_many_fields"].compact.join(" ")
|
|
51
51
|
|
|
52
52
|
if sortable_column
|
|
53
53
|
@options[:for] = [assoc, sorted_children(sortable_column)]
|
|
@@ -69,9 +69,10 @@ module ActiveAdmin
|
|
|
69
69
|
def extract_custom_settings!(options)
|
|
70
70
|
@heading = options.key?(:heading) ? options.delete(:heading) : default_heading
|
|
71
71
|
@sortable_column = options.delete(:sortable)
|
|
72
|
-
@sortable_start
|
|
72
|
+
@sortable_start = options.delete(:sortable_start) || 0
|
|
73
73
|
@new_record = options.key?(:new_record) ? options.delete(:new_record) : true
|
|
74
74
|
@destroy_option = options.delete(:allow_destroy)
|
|
75
|
+
@remove_record = options.delete(:remove_record)
|
|
75
76
|
options
|
|
76
77
|
end
|
|
77
78
|
|
|
@@ -93,7 +94,7 @@ module ActiveAdmin
|
|
|
93
94
|
contents = without_wrapper { inputs(options, &form_block) }
|
|
94
95
|
contents ||= "".html_safe
|
|
95
96
|
|
|
96
|
-
js = new_record ? js_for_has_many(options[:class], &form_block) :
|
|
97
|
+
js = new_record ? js_for_has_many(options[:class], &form_block) : ""
|
|
97
98
|
contents << js
|
|
98
99
|
end
|
|
99
100
|
|
|
@@ -107,19 +108,21 @@ module ActiveAdmin
|
|
|
107
108
|
def has_many_actions(form_builder, contents)
|
|
108
109
|
if form_builder.object.new_record?
|
|
109
110
|
contents << template.content_tag(:li) do
|
|
110
|
-
|
|
111
|
+
remove_text = remove_record.is_a?(String) ? remove_record : I18n.t("active_admin.has_many_remove")
|
|
112
|
+
template.link_to remove_text, "#", class: "button has_many_remove"
|
|
111
113
|
end
|
|
112
114
|
elsif allow_destroy?(form_builder.object)
|
|
113
|
-
form_builder.input(
|
|
114
|
-
|
|
115
|
-
|
|
115
|
+
form_builder.input(
|
|
116
|
+
:_destroy, as: :boolean,
|
|
117
|
+
wrapper_html: { class: "has_many_delete" },
|
|
118
|
+
label: I18n.t("active_admin.has_many_delete"))
|
|
116
119
|
end
|
|
117
120
|
|
|
118
121
|
if sortable_column
|
|
119
122
|
form_builder.input sortable_column, as: :hidden
|
|
120
123
|
|
|
121
|
-
contents << template.content_tag(:li, class:
|
|
122
|
-
I18n.t(
|
|
124
|
+
contents << template.content_tag(:li, class: "handle") do
|
|
125
|
+
I18n.t("active_admin.move")
|
|
123
126
|
end
|
|
124
127
|
end
|
|
125
128
|
|
|
@@ -156,27 +159,28 @@ module ActiveAdmin
|
|
|
156
159
|
|
|
157
160
|
# Capture the ADD JS
|
|
158
161
|
def js_for_has_many(class_string, &form_block)
|
|
159
|
-
assoc_name
|
|
160
|
-
placeholder
|
|
162
|
+
assoc_name = assoc_klass.model_name
|
|
163
|
+
placeholder = "NEW_#{assoc_name.to_s.underscore.upcase.gsub(/\//, '_')}_RECORD"
|
|
161
164
|
opts = {
|
|
162
165
|
for: [assoc, assoc_klass.new],
|
|
163
166
|
class: class_string,
|
|
164
167
|
for_options: { child_index: placeholder }
|
|
165
168
|
}
|
|
166
169
|
html = template.capture { __getobj__.send(:inputs_for_nested_attributes, opts, &form_block) }
|
|
167
|
-
text = new_record.is_a?(String) ? new_record : I18n.t(
|
|
170
|
+
text = new_record.is_a?(String) ? new_record : I18n.t("active_admin.has_many_new", model: assoc_name.human)
|
|
168
171
|
|
|
169
|
-
template.link_to text,
|
|
172
|
+
template.link_to text, "#", class: "button has_many_add", data: {
|
|
170
173
|
html: CGI.escapeHTML(html).html_safe, placeholder: placeholder
|
|
171
174
|
}
|
|
172
175
|
end
|
|
173
176
|
|
|
174
177
|
def wrap_div_or_li(html)
|
|
175
|
-
template.content_tag(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
template.content_tag(
|
|
179
|
+
already_in_an_inputs_block ? :li : :div,
|
|
180
|
+
html,
|
|
181
|
+
class: "has_many_container #{assoc}",
|
|
182
|
+
"data-sortable" => sortable_column,
|
|
183
|
+
"data-sortable-start" => sortable_start)
|
|
180
184
|
end
|
|
181
185
|
end
|
|
182
186
|
end
|
|
@@ -15,7 +15,7 @@ module ActiveAdmin
|
|
|
15
15
|
|
|
16
16
|
module OptionalDisplay
|
|
17
17
|
def display_on?(action, render_context = self)
|
|
18
|
-
return false if @options[:only]
|
|
18
|
+
return false if @options[:only] && !@options[:only].include?(action.to_sym)
|
|
19
19
|
return false if @options[:except] && @options[:except].include?(action.to_sym)
|
|
20
20
|
|
|
21
21
|
case condition = @options[:if]
|
|
@@ -31,7 +31,7 @@ module ActiveAdmin
|
|
|
31
31
|
private
|
|
32
32
|
|
|
33
33
|
def normalize_display_options!
|
|
34
|
-
@options[:only]
|
|
34
|
+
@options[:only] = Array(@options[:only]) if @options[:only]
|
|
35
35
|
@options[:except] = Array(@options[:except]) if @options[:except]
|
|
36
36
|
end
|
|
37
37
|
end
|
|
@@ -3,7 +3,7 @@ module ActiveAdmin
|
|
|
3
3
|
class DatepickerInput < ::Formtastic::Inputs::StringInput
|
|
4
4
|
def input_html_options
|
|
5
5
|
super.tap do |options|
|
|
6
|
-
options[:class] = [options[:class], "datepicker"].compact.join(
|
|
6
|
+
options[:class] = [options[:class], "datepicker"].compact.join(" ")
|
|
7
7
|
options[:data] ||= {}
|
|
8
8
|
options[:data].merge! datepicker_options
|
|
9
9
|
end
|
|
@@ -31,15 +31,15 @@ module ActiveAdmin
|
|
|
31
31
|
|
|
32
32
|
def wrapper_html_options
|
|
33
33
|
opts = super
|
|
34
|
-
(opts[:class] ||=
|
|
34
|
+
(opts[:class] ||= "") << " select_and_search" unless seems_searchable?
|
|
35
35
|
opts
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def to_html
|
|
39
39
|
input_wrapping do
|
|
40
|
-
label_html
|
|
40
|
+
label_html << # your label
|
|
41
41
|
select_html << # the dropdown that holds the available search methods
|
|
42
|
-
input_html
|
|
42
|
+
input_html # your input field
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -48,7 +48,7 @@ module ActiveAdmin
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def select_html
|
|
51
|
-
template.select_tag
|
|
51
|
+
template.select_tag "", template.options_for_select(filter_options, current_filter)
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
def filters
|
|
@@ -7,7 +7,7 @@ module ActiveAdmin
|
|
|
7
7
|
def input_name
|
|
8
8
|
return method if seems_searchable?
|
|
9
9
|
|
|
10
|
-
searchable_method_name + (multiple? ?
|
|
10
|
+
searchable_method_name + (multiple? ? "_in" : "_eq")
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def searchable_method_name
|
|
@@ -22,7 +22,7 @@ module ActiveAdmin
|
|
|
22
22
|
|
|
23
23
|
# Provide the AA translation to the blank input field.
|
|
24
24
|
def include_blank
|
|
25
|
-
I18n.t
|
|
25
|
+
I18n.t "active_admin.any" if super
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def input_html_options_name
|