rails_admin_next 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +46 -0
- data/LICENSE.md +21 -0
- data/README.md +317 -0
- data/Rakefile +25 -0
- data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
- data/app/assets/stylesheets/rails_admin/framework.css +2375 -0
- data/app/assets/stylesheets/rails_admin/skin.css +472 -0
- data/app/assets/stylesheets/rails_admin/tokens.css +281 -0
- data/app/assets/stylesheets/rails_admin.css +47 -0
- data/app/controllers/rails_admin_next/application_controller.rb +98 -0
- data/app/controllers/rails_admin_next/main_controller.rb +185 -0
- data/app/helpers/rails_admin_next/application_helper.rb +254 -0
- data/app/helpers/rails_admin_next/form_builder.rb +173 -0
- data/app/helpers/rails_admin_next/main_helper.rb +63 -0
- data/app/views/layouts/rails_admin_next/_head.html.erb +29 -0
- data/app/views/layouts/rails_admin_next/_navigation.html.erb +18 -0
- data/app/views/layouts/rails_admin_next/_secondary_navigation.html.erb +27 -0
- data/app/views/layouts/rails_admin_next/_sidebar_navigation.html.erb +6 -0
- data/app/views/layouts/rails_admin_next/application.html.erb +42 -0
- data/app/views/layouts/rails_admin_next/content.html.erb +22 -0
- data/app/views/layouts/rails_admin_next/modal.js.erb +7 -0
- data/app/views/rails_admin_next/main/_dashboard_history.html.erb +46 -0
- data/app/views/rails_admin_next/main/_delete_notice.html.erb +36 -0
- data/app/views/rails_admin_next/main/_form_action_text.html.erb +2 -0
- data/app/views/rails_admin_next/main/_form_boolean.html.erb +15 -0
- data/app/views/rails_admin_next/main/_form_colorpicker.html.erb +6 -0
- data/app/views/rails_admin_next/main/_form_datetime.html.erb +14 -0
- data/app/views/rails_admin_next/main/_form_enumeration.html.erb +26 -0
- data/app/views/rails_admin_next/main/_form_field.html.erb +2 -0
- data/app/views/rails_admin_next/main/_form_file_upload.html.erb +18 -0
- data/app/views/rails_admin_next/main/_form_filtering_multiselect.html.erb +20 -0
- data/app/views/rails_admin_next/main/_form_filtering_select.html.erb +22 -0
- data/app/views/rails_admin_next/main/_form_multiple_file_upload.html.erb +21 -0
- data/app/views/rails_admin_next/main/_form_nested_many.html.erb +20 -0
- data/app/views/rails_admin_next/main/_form_nested_one.html.erb +19 -0
- data/app/views/rails_admin_next/main/_form_polymorphic_association.html.erb +24 -0
- data/app/views/rails_admin_next/main/_form_text.html.erb +2 -0
- data/app/views/rails_admin_next/main/_pagination.html.erb +54 -0
- data/app/views/rails_admin_next/main/_submit_buttons.html.erb +26 -0
- data/app/views/rails_admin_next/main/bulk_delete.html.erb +19 -0
- data/app/views/rails_admin_next/main/dashboard.html.erb +64 -0
- data/app/views/rails_admin_next/main/delete.html.erb +21 -0
- data/app/views/rails_admin_next/main/edit.html.erb +3 -0
- data/app/views/rails_admin_next/main/export.html.erb +149 -0
- data/app/views/rails_admin_next/main/history.html.erb +80 -0
- data/app/views/rails_admin_next/main/index.html.erb +186 -0
- data/app/views/rails_admin_next/main/new.html.erb +3 -0
- data/app/views/rails_admin_next/main/show.html.erb +30 -0
- data/config/brakeman.ignore +145 -0
- data/config/importmap.rails_admin.rb +29 -0
- data/config/initializers/active_record_extensions.rb +21 -0
- data/config/locales/rails_admin_next.en.yml +158 -0
- data/config/routes.rb +14 -0
- data/lib/generators/rails_admin_next/install_generator.rb +39 -0
- data/lib/generators/rails_admin_next/templates/initializer.erb +40 -0
- data/lib/generators/rails_admin_next/utils.rb +21 -0
- data/lib/rails_admin_next/abstract_model.rb +266 -0
- data/lib/rails_admin_next/adapters/active_record/association.rb +130 -0
- data/lib/rails_admin_next/adapters/active_record/object_extension.rb +13 -0
- data/lib/rails_admin_next/adapters/active_record/property.rb +58 -0
- data/lib/rails_admin_next/adapters/active_record.rb +371 -0
- data/lib/rails_admin_next/config/actions/base.rb +160 -0
- data/lib/rails_admin_next/config/actions/bulk_delete.rb +67 -0
- data/lib/rails_admin_next/config/actions/dashboard.rb +62 -0
- data/lib/rails_admin_next/config/actions/delete.rb +58 -0
- data/lib/rails_admin_next/config/actions/edit.rb +56 -0
- data/lib/rails_admin_next/config/actions/export.rb +47 -0
- data/lib/rails_admin_next/config/actions/history_index.rb +40 -0
- data/lib/rails_admin_next/config/actions/history_show.rb +40 -0
- data/lib/rails_admin_next/config/actions/index.rb +108 -0
- data/lib/rails_admin_next/config/actions/new.rb +69 -0
- data/lib/rails_admin_next/config/actions/show.rb +36 -0
- data/lib/rails_admin_next/config/actions/show_in_app.rb +37 -0
- data/lib/rails_admin_next/config/actions.rb +122 -0
- data/lib/rails_admin_next/config/configurable.rb +107 -0
- data/lib/rails_admin_next/config/const_load_suppressor.rb +78 -0
- data/lib/rails_admin_next/config/fields/association.rb +169 -0
- data/lib/rails_admin_next/config/fields/base.rb +391 -0
- data/lib/rails_admin_next/config/fields/collection_association.rb +90 -0
- data/lib/rails_admin_next/config/fields/factories/action_text.rb +14 -0
- data/lib/rails_admin_next/config/fields/factories/active_storage.rb +34 -0
- data/lib/rails_admin_next/config/fields/factories/association.rb +32 -0
- data/lib/rails_admin_next/config/fields/factories/encrypted_password.rb +28 -0
- data/lib/rails_admin_next/config/fields/factories/enum.rb +23 -0
- data/lib/rails_admin_next/config/fields/factories/password.rb +19 -0
- data/lib/rails_admin_next/config/fields/group.rb +77 -0
- data/lib/rails_admin_next/config/fields/singular_association.rb +62 -0
- data/lib/rails_admin_next/config/fields/types/action_text.rb +20 -0
- data/lib/rails_admin_next/config/fields/types/active_record_enum.rb +62 -0
- data/lib/rails_admin_next/config/fields/types/active_storage.rb +70 -0
- data/lib/rails_admin_next/config/fields/types/all.rb +32 -0
- data/lib/rails_admin_next/config/fields/types/belongs_to_association.rb +48 -0
- data/lib/rails_admin_next/config/fields/types/boolean.rb +70 -0
- data/lib/rails_admin_next/config/fields/types/citext.rb +15 -0
- data/lib/rails_admin_next/config/fields/types/color.rb +43 -0
- data/lib/rails_admin_next/config/fields/types/date.rb +38 -0
- data/lib/rails_admin_next/config/fields/types/datetime.rb +79 -0
- data/lib/rails_admin_next/config/fields/types/decimal.rb +23 -0
- data/lib/rails_admin_next/config/fields/types/enum.rb +52 -0
- data/lib/rails_admin_next/config/fields/types/file_upload.rb +87 -0
- data/lib/rails_admin_next/config/fields/types/float.rb +23 -0
- data/lib/rails_admin_next/config/fields/types/has_and_belongs_to_many_association.rb +16 -0
- data/lib/rails_admin_next/config/fields/types/has_many_association.rb +16 -0
- data/lib/rails_admin_next/config/fields/types/has_one_association.rb +35 -0
- data/lib/rails_admin_next/config/fields/types/hidden.rb +31 -0
- data/lib/rails_admin_next/config/fields/types/inet.rb +15 -0
- data/lib/rails_admin_next/config/fields/types/integer.rb +20 -0
- data/lib/rails_admin_next/config/fields/types/json.rb +37 -0
- data/lib/rails_admin_next/config/fields/types/multiple_active_storage.rb +82 -0
- data/lib/rails_admin_next/config/fields/types/multiple_file_upload.rb +134 -0
- data/lib/rails_admin_next/config/fields/types/numeric.rb +24 -0
- data/lib/rails_admin_next/config/fields/types/password.rb +45 -0
- data/lib/rails_admin_next/config/fields/types/polymorphic_association.rb +118 -0
- data/lib/rails_admin_next/config/fields/types/serialized.rb +28 -0
- data/lib/rails_admin_next/config/fields/types/string.rb +50 -0
- data/lib/rails_admin_next/config/fields/types/string_like.rb +25 -0
- data/lib/rails_admin_next/config/fields/types/text.rb +28 -0
- data/lib/rails_admin_next/config/fields/types/time.rb +39 -0
- data/lib/rails_admin_next/config/fields/types/timestamp.rb +16 -0
- data/lib/rails_admin_next/config/fields/types/uuid.rb +15 -0
- data/lib/rails_admin_next/config/fields/types.rb +29 -0
- data/lib/rails_admin_next/config/fields.rb +88 -0
- data/lib/rails_admin_next/config/groupable.rb +20 -0
- data/lib/rails_admin_next/config/has_description.rb +14 -0
- data/lib/rails_admin_next/config/has_fields.rb +144 -0
- data/lib/rails_admin_next/config/has_groups.rb +27 -0
- data/lib/rails_admin_next/config/hideable.rb +30 -0
- data/lib/rails_admin_next/config/inspectable.rb +39 -0
- data/lib/rails_admin_next/config/lazy_model.rb +74 -0
- data/lib/rails_admin_next/config/model.rb +126 -0
- data/lib/rails_admin_next/config/proxyable/proxy.rb +42 -0
- data/lib/rails_admin_next/config/proxyable.rb +26 -0
- data/lib/rails_admin_next/config/sections/base.rb +36 -0
- data/lib/rails_admin_next/config/sections/create.rb +13 -0
- data/lib/rails_admin_next/config/sections/edit.rb +13 -0
- data/lib/rails_admin_next/config/sections/export.rb +13 -0
- data/lib/rails_admin_next/config/sections/list.rb +63 -0
- data/lib/rails_admin_next/config/sections/modal.rb +12 -0
- data/lib/rails_admin_next/config/sections/nested.rb +12 -0
- data/lib/rails_admin_next/config/sections/show.rb +12 -0
- data/lib/rails_admin_next/config/sections/update.rb +12 -0
- data/lib/rails_admin_next/config/sections.rb +39 -0
- data/lib/rails_admin_next/config.rb +436 -0
- data/lib/rails_admin_next/engine.rb +91 -0
- data/lib/rails_admin_next/extension.rb +35 -0
- data/lib/rails_admin_next/extensions/cancancan/authorization_adapter.rb +90 -0
- data/lib/rails_admin_next/extensions/cancancan.rb +5 -0
- data/lib/rails_admin_next/extensions/controller_extension.rb +8 -0
- data/lib/rails_admin_next/extensions/paper_trail/auditing_adapter.rb +192 -0
- data/lib/rails_admin_next/extensions/paper_trail.rb +5 -0
- data/lib/rails_admin_next/extensions/pundit/authorization_adapter.rb +72 -0
- data/lib/rails_admin_next/extensions/pundit.rb +5 -0
- data/lib/rails_admin_next/extensions/url_for_extension.rb +15 -0
- data/lib/rails_admin_next/icons.rb +143 -0
- data/lib/rails_admin_next/support/composite_keys_serializer.rb +15 -0
- data/lib/rails_admin_next/support/csv_converter.rb +100 -0
- data/lib/rails_admin_next/support/hash_helper.rb +31 -0
- data/lib/rails_admin_next/support/paginated_collection.rb +79 -0
- data/lib/rails_admin_next/version.rb +17 -0
- data/lib/rails_admin_next.rb +72 -0
- data/lib/tasks/rails_admin.rake +40 -0
- data/src/rails_admin/application.js +15 -0
- data/src/rails_admin/base.js +12 -0
- data/src/rails_admin/controllers/alert_controller.js +28 -0
- data/src/rails_admin/controllers/collapse_controller.js +16 -0
- data/src/rails_admin/controllers/dropdown_controller.js +110 -0
- data/src/rails_admin/controllers/feedback_controller.js +73 -0
- data/src/rails_admin/controllers/filter_box_controller.js +346 -0
- data/src/rails_admin/controllers/filtering_multiselect_controller.js +386 -0
- data/src/rails_admin/controllers/filtering_select_controller.js +509 -0
- data/src/rails_admin/controllers/index.js +31 -0
- data/src/rails_admin/controllers/modal_controller.js +142 -0
- data/src/rails_admin/controllers/nested_form_controller.js +117 -0
- data/src/rails_admin/controllers/polymorphic_controller.js +26 -0
- data/src/rails_admin/controllers/remote_form_controller.js +173 -0
- data/src/rails_admin/controllers/sidescroll_controller.js +23 -0
- data/src/rails_admin/dom-ready.js +20 -0
- data/src/rails_admin/dom.js +19 -0
- data/src/rails_admin/i18n.js +20 -0
- data/src/rails_admin/icons.js +64 -0
- data/src/rails_admin/interactions.js +221 -0
- data/src/rails_admin/select_query.js +65 -0
- metadata +346 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/types/string"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class Enum < RailsAdminNext::Config::Fields::Base
|
|
10
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
11
|
+
|
|
12
|
+
register_instance_option :filter_operators do
|
|
13
|
+
%w[_discard] +
|
|
14
|
+
enum.map do |label, value|
|
|
15
|
+
{label: label, value: value || label}
|
|
16
|
+
end + (required? ? [] : %w[_separator _present _blank])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
register_instance_option :partial do
|
|
20
|
+
:form_enumeration
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
register_instance_option :enum_method do
|
|
24
|
+
@enum_method ||= (bindings[:object].class.respond_to?("#{name}_enum") || (bindings[:object] || abstract_model.model.new).respond_to?("#{name}_enum")) ? "#{name}_enum" : name
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
register_instance_option :enum do
|
|
28
|
+
if abstract_model.model.respond_to?(enum_method)
|
|
29
|
+
abstract_model.model.send(enum_method)
|
|
30
|
+
else
|
|
31
|
+
(bindings[:object] || abstract_model.model.new).send(enum_method)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
register_instance_option :pretty_value do
|
|
36
|
+
if enum.is_a?(::Hash)
|
|
37
|
+
enum.select { |_k, v| v.to_s == value.to_s }.keys.first.to_s.presence || value.presence || " - "
|
|
38
|
+
elsif enum.is_a?(::Array) && enum.first.is_a?(::Array)
|
|
39
|
+
enum.detect { |e| e[1].to_s == value.to_s }.try(:first).to_s.presence || value.presence || " - "
|
|
40
|
+
else
|
|
41
|
+
value.presence || " - "
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
register_instance_option :multiple? do
|
|
46
|
+
properties && [:serialized].include?(properties.type)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/types/string"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class FileUpload < RailsAdminNext::Config::Fields::Base
|
|
10
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
11
|
+
|
|
12
|
+
register_instance_option :partial do
|
|
13
|
+
:form_file_upload
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
register_instance_option :thumb_method do
|
|
17
|
+
nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
register_instance_option :delete_method do
|
|
21
|
+
nil
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
register_instance_option :cache_method do
|
|
25
|
+
nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
register_instance_option :cache_value do
|
|
29
|
+
bindings[:object].public_send(cache_method) if cache_method
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
register_instance_option :export_value do
|
|
33
|
+
resource_url.to_s
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
register_instance_option :link_name do
|
|
37
|
+
value
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
register_instance_option :pretty_value do
|
|
41
|
+
if value.presence
|
|
42
|
+
v = bindings[:view]
|
|
43
|
+
url = resource_url
|
|
44
|
+
if image
|
|
45
|
+
thumb_url = resource_url(thumb_method)
|
|
46
|
+
image_html = v.image_tag(thumb_url, class: "img-thumbnail")
|
|
47
|
+
(url == thumb_url) ? image_html : v.link_to(image_html, url, target: "_blank", rel: "noopener noreferrer")
|
|
48
|
+
else
|
|
49
|
+
v.link_to(link_name, url, target: "_blank", rel: "noopener noreferrer")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
register_instance_option :image? do
|
|
55
|
+
mime_type = Mime::Type.lookup_by_extension(extension)
|
|
56
|
+
mime_type.to_s.match?(/^image/)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
register_instance_option :allowed_methods do
|
|
60
|
+
[method_name, delete_method, cache_method].compact
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
register_instance_option :html_attributes do
|
|
64
|
+
{
|
|
65
|
+
required: required? && !value.present?
|
|
66
|
+
}
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def extension
|
|
70
|
+
URI.parse(resource_url).path.split(".").last
|
|
71
|
+
rescue URI::InvalidURIError
|
|
72
|
+
nil
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# virtual class
|
|
76
|
+
def resource_url
|
|
77
|
+
raise "not implemented"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def virtual?
|
|
81
|
+
true
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/types/numeric"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class Float < RailsAdminNext::Config::Fields::Types::Numeric
|
|
10
|
+
# Register field type for the type loader
|
|
11
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
12
|
+
|
|
13
|
+
register_instance_option :html_attributes do
|
|
14
|
+
{
|
|
15
|
+
required: required?,
|
|
16
|
+
step: "any"
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/collection_association"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class HasAndBelongsToManyAssociation < RailsAdminNext::Config::Fields::CollectionAssociation
|
|
10
|
+
# Register field type for the type loader
|
|
11
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/collection_association"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class HasManyAssociation < RailsAdminNext::Config::Fields::CollectionAssociation
|
|
10
|
+
# Register field type for the type loader
|
|
11
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/singular_association"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class HasOneAssociation < RailsAdminNext::Config::Fields::SingularAssociation
|
|
10
|
+
# Register field type for the type loader
|
|
11
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
12
|
+
|
|
13
|
+
register_instance_option :allowed_methods do
|
|
14
|
+
nested_form ? [method_name] : [name]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def associated_prepopulate_params
|
|
18
|
+
{associated_model_config.abstract_model.param_key => {association.foreign_key => bindings[:object].try(:id)}}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def parse_input(params)
|
|
22
|
+
return super if nested_form
|
|
23
|
+
|
|
24
|
+
id = params.delete(method_name)
|
|
25
|
+
params[name] = associated_model_config.abstract_model.get(id) if id
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def selected_id
|
|
29
|
+
format_key(value.try(:id)).try(:to_s)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/types/string_like"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class Hidden < StringLike
|
|
10
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
11
|
+
|
|
12
|
+
register_instance_option :view_helper do
|
|
13
|
+
:hidden_field
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
register_instance_option :label do
|
|
17
|
+
false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
register_instance_option :help do
|
|
21
|
+
false
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def generic_help
|
|
25
|
+
false
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/base"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class Inet < RailsAdminNext::Config::Fields::Base
|
|
10
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/types/numeric"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class Integer < RailsAdminNext::Config::Fields::Types::Numeric
|
|
10
|
+
# Register field type for the type loader
|
|
11
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
12
|
+
|
|
13
|
+
register_instance_option :sort_reverse? do
|
|
14
|
+
serial?
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/types/text"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class Json < RailsAdminNext::Config::Fields::Types::Text
|
|
10
|
+
# Register field type for the type loader
|
|
11
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
12
|
+
RailsAdminNext::Config::Fields::Types.register(:jsonb, self)
|
|
13
|
+
|
|
14
|
+
register_instance_option :formatted_value do
|
|
15
|
+
value ? JSON.pretty_generate(value) : nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
register_instance_option :pretty_value do
|
|
19
|
+
bindings[:view].content_tag(:pre) { formatted_value }.html_safe
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
register_instance_option :export_value do
|
|
23
|
+
formatted_value
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def parse_value(value)
|
|
27
|
+
value.present? ? JSON.parse(value) : nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def parse_input(params)
|
|
31
|
+
params[name] = parse_value(params[name]) if params[name].is_a?(::String)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/types/multiple_file_upload"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class MultipleActiveStorage < RailsAdminNext::Config::Fields::Types::MultipleFileUpload
|
|
10
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
11
|
+
|
|
12
|
+
class ActiveStorageAttachment < RailsAdminNext::Config::Fields::Types::MultipleFileUpload::AbstractAttachment
|
|
13
|
+
register_instance_option :thumb_method do
|
|
14
|
+
{resize_to_limit: [100, 100]}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
register_instance_option :keep_value do
|
|
18
|
+
value.signed_id
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
register_instance_option :delete_value do
|
|
22
|
+
value.id
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
register_instance_option :image? do
|
|
26
|
+
value && (value.representable? || value.content_type.match?(/^image/))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def resource_url(thumb = false)
|
|
30
|
+
return nil unless value
|
|
31
|
+
|
|
32
|
+
if thumb && value.representable?
|
|
33
|
+
representation = value.representation(thumb_method)
|
|
34
|
+
Rails.application.routes.url_helpers.rails_blob_representation_path(
|
|
35
|
+
representation.blob.signed_id, representation.variation.key, representation.blob.filename, only_path: true
|
|
36
|
+
)
|
|
37
|
+
else
|
|
38
|
+
Rails.application.routes.url_helpers.rails_blob_path(value, only_path: true)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
register_instance_option :attachment_class do
|
|
44
|
+
ActiveStorageAttachment
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
register_instance_option :keep_method do
|
|
48
|
+
method_name
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
register_instance_option :delete_method do
|
|
52
|
+
"remove_#{name}" if bindings[:object].respond_to?("remove_#{name}")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
register_instance_option :eager_load do
|
|
56
|
+
{"#{name}_attachments": :blob}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
register_instance_option :direct? do
|
|
60
|
+
false
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
register_instance_option :html_attributes do
|
|
64
|
+
{
|
|
65
|
+
required: required? && !value.present?
|
|
66
|
+
}.merge(
|
|
67
|
+
direct? && {data: {direct_upload_url: bindings[:view].main_app.rails_direct_uploads_url}} || {}
|
|
68
|
+
)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
register_instance_option :searchable do
|
|
72
|
+
false
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
register_instance_option :sortable do
|
|
76
|
+
false
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAdminNext
|
|
4
|
+
module Config
|
|
5
|
+
module Fields
|
|
6
|
+
module Types
|
|
7
|
+
class MultipleFileUpload < RailsAdminNext::Config::Fields::Base
|
|
8
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
9
|
+
|
|
10
|
+
class AbstractAttachment
|
|
11
|
+
include RailsAdminNext::Config::Proxyable
|
|
12
|
+
include RailsAdminNext::Config::Configurable
|
|
13
|
+
|
|
14
|
+
attr_reader :value
|
|
15
|
+
|
|
16
|
+
def initialize(value)
|
|
17
|
+
@value = value
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
register_instance_option :thumb_method do
|
|
21
|
+
nil
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
register_instance_option :keep_value do
|
|
25
|
+
nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
register_instance_option :delete_value do
|
|
29
|
+
nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
register_deprecated_instance_option :delete_key, :delete_value
|
|
33
|
+
|
|
34
|
+
register_instance_option :pretty_value do
|
|
35
|
+
if value.presence
|
|
36
|
+
v = bindings[:view]
|
|
37
|
+
url = resource_url
|
|
38
|
+
if image
|
|
39
|
+
thumb_url = resource_url(thumb_method)
|
|
40
|
+
image_html = v.image_tag(thumb_url, class: "img-thumbnail")
|
|
41
|
+
(url == thumb_url) ? image_html : v.link_to(image_html, url, target: "_blank", rel: "noopener noreferrer")
|
|
42
|
+
else
|
|
43
|
+
display_value = value.respond_to?(:filename) ? value.filename : value
|
|
44
|
+
v.link_to(display_value, url, target: "_blank", rel: "noopener noreferrer")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
register_instance_option :image? do
|
|
50
|
+
mime_type = Mime::Type.lookup_by_extension(extension)
|
|
51
|
+
mime_type.to_s.match?(/^image/)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def resource_url(_thumb = false)
|
|
55
|
+
raise "not implemented"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def extension
|
|
59
|
+
URI.parse(resource_url).path.split(".").last
|
|
60
|
+
rescue URI::InvalidURIError
|
|
61
|
+
nil
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def initialize(*args)
|
|
66
|
+
super
|
|
67
|
+
@attachment_configurations = []
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
register_instance_option :attachment_class do
|
|
71
|
+
AbstractAttachment
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
register_instance_option :partial do
|
|
75
|
+
:form_multiple_file_upload
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
register_instance_option :cache_method do
|
|
79
|
+
nil
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
register_instance_option :delete_method do
|
|
83
|
+
nil
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
register_instance_option :keep_method do
|
|
87
|
+
nil
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
register_instance_option :reorderable? do
|
|
91
|
+
false
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
register_instance_option :export_value do
|
|
95
|
+
attachments.map(&:resource_url).join(",")
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
register_instance_option :pretty_value do
|
|
99
|
+
bindings[:view].safe_join attachments.map(&:pretty_value), " "
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
register_instance_option :allowed_methods do
|
|
103
|
+
[method_name, cache_method, delete_method].compact
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
register_instance_option :html_attributes do
|
|
107
|
+
{
|
|
108
|
+
required: required? && !value.present?
|
|
109
|
+
}
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def attachment(&block)
|
|
113
|
+
@attachment_configurations << block
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def attachments
|
|
117
|
+
Array(value).map do |attached|
|
|
118
|
+
attachment = attachment_class.new(attached)
|
|
119
|
+
@attachment_configurations.each do |config|
|
|
120
|
+
attachment.instance_eval(&config)
|
|
121
|
+
end
|
|
122
|
+
attachment.with(bindings)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# virtual class
|
|
127
|
+
def virtual?
|
|
128
|
+
true
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/base"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class Numeric < RailsAdminNext::Config::Fields::Base
|
|
10
|
+
# Register field type for the type loader
|
|
11
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
12
|
+
|
|
13
|
+
register_instance_option :filter_operators do
|
|
14
|
+
%w[default between] + (required? ? [] : %w[_separator _not_null _null])
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
register_instance_option :view_helper do
|
|
18
|
+
:number_field
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_admin_next/config/fields/types/string"
|
|
4
|
+
|
|
5
|
+
module RailsAdminNext
|
|
6
|
+
module Config
|
|
7
|
+
module Fields
|
|
8
|
+
module Types
|
|
9
|
+
class Password < RailsAdminNext::Config::Fields::Types::String
|
|
10
|
+
# Register field type for the type loader
|
|
11
|
+
RailsAdminNext::Config::Fields::Types.register(self)
|
|
12
|
+
|
|
13
|
+
register_instance_option :view_helper do
|
|
14
|
+
:password_field
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def parse_input(params)
|
|
18
|
+
if params[name].present?
|
|
19
|
+
params[name] = params[name]
|
|
20
|
+
else
|
|
21
|
+
params.delete(name)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
register_instance_option :formatted_value do
|
|
26
|
+
"".html_safe
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Password field's value does not need to be read
|
|
30
|
+
def value
|
|
31
|
+
""
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
register_instance_option :visible do
|
|
35
|
+
section.is_a?(RailsAdminNext::Config::Sections::Edit)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
register_instance_option :pretty_value do
|
|
39
|
+
"*****"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|