rails_admin 3.2.1 → 4.0.0.beta
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/Gemfile +8 -6
- data/README.md +11 -11
- data/Rakefile +3 -11
- data/app/assets/builds/rails_admin.css +10 -0
- data/app/assets/builds/rails_admin.js +34 -0
- data/app/controllers/rails_admin/main_controller.rb +3 -3
- data/app/helpers/rails_admin/application_helper.rb +3 -15
- data/app/helpers/rails_admin/form_builder.rb +10 -9
- data/app/views/layouts/rails_admin/_head.html.erb +10 -27
- data/app/views/layouts/rails_admin/_head_custom.html.erb +3 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.erb +1 -1
- data/app/views/rails_admin/main/_dashboard_history.html.erb +1 -1
- data/app/views/rails_admin/main/_delete_notice.html.erb +3 -3
- data/app/views/rails_admin/main/_form_boolean.html.erb +9 -13
- data/app/views/rails_admin/main/_submit_buttons.html.erb +4 -4
- data/app/views/rails_admin/main/bulk_delete.html.erb +2 -2
- data/app/views/rails_admin/main/dashboard.html.erb +3 -3
- data/app/views/rails_admin/main/delete.html.erb +2 -2
- data/app/views/rails_admin/main/export.html.erb +2 -2
- data/app/views/rails_admin/main/history.html.erb +2 -2
- data/app/views/rails_admin/main/index.html.erb +3 -3
- data/config/initializers/active_record_extensions.rb +1 -4
- data/lib/generators/rails_admin/install_generator.rb +37 -92
- data/lib/generators/rails_admin/templates/rails_admin.scss.erb +1 -1
- data/lib/rails_admin/abstract_model.rb +69 -191
- data/lib/rails_admin/adapters/active_record/association.rb +1 -1
- data/lib/rails_admin/adapters/active_record/property.rb +7 -0
- data/lib/rails_admin/adapters/active_record/reflection.rb +87 -0
- data/lib/rails_admin/adapters/active_record/repository.rb +216 -0
- data/lib/rails_admin/adapters/active_record/statement_builder.rb +148 -0
- data/lib/rails_admin/adapters/active_record/where_builder.rb +40 -0
- data/lib/rails_admin/adapters/active_record.rb +7 -356
- data/lib/rails_admin/adapters/mongoid/association.rb +1 -1
- data/lib/rails_admin/adapters/mongoid/extension.rb +16 -6
- data/lib/rails_admin/adapters/mongoid/property.rb +7 -0
- data/lib/rails_admin/adapters/mongoid/reflection.rb +58 -0
- data/lib/rails_admin/adapters/mongoid/repository.rb +237 -0
- data/lib/rails_admin/adapters/mongoid/statement_builder.rb +93 -0
- data/lib/rails_admin/adapters/mongoid.rb +7 -300
- data/lib/rails_admin/adapters/reflection.rb +105 -0
- data/lib/rails_admin/adapters/repository.rb +169 -0
- data/lib/rails_admin/adapters/statement_builder.rb +109 -0
- data/lib/rails_admin/adapters.rb +94 -0
- data/lib/rails_admin/config/actions/base.rb +8 -0
- data/lib/rails_admin/config/actions/bulk_delete.rb +4 -4
- data/lib/rails_admin/config/actions/dashboard.rb +1 -1
- data/lib/rails_admin/config/actions/edit.rb +3 -2
- data/lib/rails_admin/config/actions/index.rb +1 -1
- data/lib/rails_admin/config/actions/new.rb +3 -2
- data/lib/rails_admin/config/actions/show.rb +1 -1
- data/lib/rails_admin/config/configurable.rb +4 -3
- data/lib/rails_admin/config/fields/association.rb +9 -8
- data/lib/rails_admin/config/fields/base.rb +55 -37
- data/lib/rails_admin/config/fields/collection_association.rb +2 -2
- data/lib/rails_admin/config/fields/factories/carrierwave.rb +35 -20
- data/lib/rails_admin/config/fields/factories/dragonfly.rb +30 -18
- data/lib/rails_admin/config/fields/factories/enum.rb +14 -8
- data/lib/rails_admin/config/fields/factories/paperclip.rb +29 -19
- data/lib/rails_admin/config/fields/factories/shrine.rb +19 -8
- data/lib/rails_admin/config/fields/singular_association.rb +6 -1
- data/lib/rails_admin/config/fields/types/active_record_enum.rb +3 -7
- data/lib/rails_admin/config/fields/types/belongs_to_association.rb +8 -4
- data/lib/rails_admin/config/fields/types/bson_object_id.rb +1 -1
- data/lib/rails_admin/config/fields/types/datetime.rb +0 -4
- data/lib/rails_admin/config/fields/types/dragonfly.rb +1 -1
- data/lib/rails_admin/config/fields/types/enum.rb +11 -2
- data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +0 -2
- data/lib/rails_admin/config/fields/types/polymorphic_association.rb +4 -4
- data/lib/rails_admin/config/fields/types/time.rb +1 -1
- data/lib/rails_admin/config/model.rb +27 -5
- data/lib/rails_admin/config/sections/list.rb +0 -8
- data/lib/rails_admin/config.rb +7 -21
- data/lib/rails_admin/criteria/path.rb +66 -0
- data/lib/rails_admin/criteria/period.rb +67 -0
- data/lib/rails_admin/engine.rb +11 -15
- data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +2 -2
- data/lib/rails_admin/extensions/url_for_extension.rb +8 -0
- data/lib/rails_admin/support/asset_source.rb +42 -0
- data/lib/rails_admin/support/composite_keys_serializer.rb +28 -2
- data/lib/rails_admin/support/csv_converter.rb +3 -10
- data/lib/rails_admin/version.rb +8 -7
- data/lib/rails_admin.rb +7 -0
- data/lib/tasks/assets.rake +23 -0
- data/package.json +12 -7
- data/src/rails_admin/base.js +18 -15
- data/src/rails_admin/filter-box.js +7 -4
- data/src/rails_admin/filtering-multiselect.js +1 -1
- data/src/rails_admin/filtering-select.js +8 -8
- data/src/rails_admin/flatpickr.js +14 -0
- data/src/rails_admin/remote-form.js +74 -48
- data/src/rails_admin/styles/base/theming.scss +48 -25
- data/src/rails_admin/styles/base.scss +25 -1
- data/src/rails_admin/styles/filtering-select.scss +23 -62
- data/src/rails_admin/ui.js +1 -1
- data/src/rails_admin/vendor/jquery_nested_form.js +4 -4
- data/src/rails_admin/widgets.js +44 -11
- metadata +34 -130
- data/app/assets/javascripts/rails_admin/application.js.erb +0 -30
- data/app/assets/javascripts/rails_admin/custom/ui.js +0 -1
- data/app/assets/stylesheets/rails_admin/application.scss.erb +0 -35
- data/app/assets/stylesheets/rails_admin/custom/mixins.scss +0 -11
- data/app/assets/stylesheets/rails_admin/custom/theming.scss +0 -13
- data/app/assets/stylesheets/rails_admin/custom/variables.scss +0 -15
- data/lib/generators/rails_admin/importmap_formatter.rb +0 -28
- data/lib/generators/rails_admin/templates/rails_admin.vite.js +0 -2
- data/lib/generators/rails_admin/templates/rails_admin.webpacker.js +0 -2
- data/lib/rails_admin/adapters/active_record/object_extension.rb +0 -13
- data/lib/rails_admin/adapters/active_record.rb.bak +0 -348
- data/lib/rails_admin/adapters/mongoid/object_extension.rb +0 -29
- data/lib/rails_admin/support/es_module_processor.rb +0 -23
- data/vendor/assets/fonts/rails_admin/fa-solid-900.ttf +0 -0
- data/vendor/assets/javascripts/rails_admin/bootstrap.js +0 -5046
- data/vendor/assets/javascripts/rails_admin/flatpickr-with-locales.js +0 -11246
- data/vendor/assets/javascripts/rails_admin/jquery-ui/data.js +0 -41
- data/vendor/assets/javascripts/rails_admin/jquery-ui/effect.js +0 -1637
- data/vendor/assets/javascripts/rails_admin/jquery-ui/ie.js +0 -17
- data/vendor/assets/javascripts/rails_admin/jquery-ui/keycode.js +0 -47
- data/vendor/assets/javascripts/rails_admin/jquery-ui/position.js +0 -500
- data/vendor/assets/javascripts/rails_admin/jquery-ui/safe-active-element.js +0 -42
- data/vendor/assets/javascripts/rails_admin/jquery-ui/scroll-parent.js +0 -47
- data/vendor/assets/javascripts/rails_admin/jquery-ui/unique-id.js +0 -51
- data/vendor/assets/javascripts/rails_admin/jquery-ui/version.js +0 -17
- data/vendor/assets/javascripts/rails_admin/jquery-ui/widget.js +0 -735
- data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/autocomplete.js +0 -689
- data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/menu.js +0 -680
- data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/mouse.js +0 -230
- data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/sortable.js +0 -1561
- data/vendor/assets/javascripts/rails_admin/jquery3.js +0 -10881
- data/vendor/assets/javascripts/rails_admin/popper.js +0 -1974
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_accordion.scss +0 -118
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_alert.scss +0 -57
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_badge.scss +0 -29
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumb.scss +0 -28
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_button-group.scss +0 -139
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -111
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_card.scss +0 -216
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -229
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -40
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_containers.scss +0 -41
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdown.scss +0 -240
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -9
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_functions.scss +0 -302
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -33
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_helpers.scss +0 -9
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_images.scss +0 -42
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -174
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -43
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_modal.scss +0 -209
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_nav.scss +0 -139
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -335
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_offcanvas.scss +0 -83
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -64
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_placeholders.scss +0 -51
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_popover.scss +0 -158
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_progress.scss +0 -48
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_reboot.scss +0 -625
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_root.scss +0 -54
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_spinners.scss +0 -69
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -155
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_toasts.scss +0 -51
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -115
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_transitions.scss +0 -27
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -104
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -630
- data/vendor/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -1641
- data/vendor/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -53
- data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_floating-labels.scss +0 -63
- data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-check.scss +0 -152
- data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-control.scss +0 -219
- data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-range.scss +0 -91
- data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-select.scss +0 -72
- data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-text.scss +0 -11
- data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_input-group.scss +0 -121
- data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_labels.scss +0 -36
- data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_validation.scss +0 -12
- data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_clearfix.scss +0 -3
- data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_colored-links.scss +0 -12
- data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_position.scss +0 -30
- data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_ratio.scss +0 -26
- data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stacks.scss +0 -15
- data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stretched-link.scss +0 -15
- data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_text-truncation.scss +0 -7
- data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_visually-hidden.scss +0 -8
- data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_vr.scss +0 -8
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alert.scss +0 -11
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_backdrop.scss +0 -14
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -78
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_box-shadow.scss +0 -18
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_breakpoints.scss +0 -127
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -133
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_caret.scss +0 -64
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -9
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_color-scheme.scss +0 -7
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_container.scss +0 -9
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_deprecate.scss +0 -10
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -144
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -47
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -151
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -16
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -24
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_lists.scss +0 -7
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -31
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-text.scss +0 -17
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -6
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-variants.scss +0 -21
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_text-truncate.scss +0 -8
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_transition.scss +0 -26
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_utilities.scss +0 -89
- data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_visually-hidden.scss +0 -29
- data/vendor/assets/stylesheets/rails_admin/bootstrap/utilities/_api.scss +0 -47
- data/vendor/assets/stylesheets/rails_admin/bootstrap/vendor/_rfs.scss +0 -354
- data/vendor/assets/stylesheets/rails_admin/flatpickr.css +0 -791
- data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +0 -6351
|
@@ -17,8 +17,8 @@ module RailsAdmin
|
|
|
17
17
|
scope = model_config.scope
|
|
18
18
|
auth_scope = @authorization_adapter&.query(auth_scope_key, model_config.abstract_model)
|
|
19
19
|
scope = scope.merge(auth_scope) if auth_scope
|
|
20
|
-
scope =
|
|
21
|
-
|
|
20
|
+
scope = get_collection(model_config, scope, pagination)
|
|
21
|
+
additional_scope ? scope.instance_eval(&additional_scope) : scope
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
private
|
|
@@ -72,7 +72,7 @@ module RailsAdmin
|
|
|
72
72
|
if field.nil? || field.sortable == false # use default sort, asked field does not exist or is not sortable
|
|
73
73
|
model_config.list.sort_by
|
|
74
74
|
else
|
|
75
|
-
field.
|
|
75
|
+
field.sort_order
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
params[:sort_reverse] ||= 'false'
|
|
@@ -75,7 +75,7 @@ module RailsAdmin
|
|
|
75
75
|
"admin.actions.#{action.i18n_key}.#{label}",
|
|
76
76
|
model_label: model_config&.label,
|
|
77
77
|
model_label_plural: model_config&.label_plural,
|
|
78
|
-
object_label:
|
|
78
|
+
object_label: object && model_config&.object_label(object),
|
|
79
79
|
)
|
|
80
80
|
end
|
|
81
81
|
|
|
@@ -147,7 +147,7 @@ module RailsAdmin
|
|
|
147
147
|
content_tag(:li, class: ['breadcrumb-item', current_action?(a, am, o) && 'active']) do
|
|
148
148
|
if current_action?(a, am, o)
|
|
149
149
|
wording_for(:breadcrumb, a, am, o)
|
|
150
|
-
elsif a.
|
|
150
|
+
elsif a.linkable?
|
|
151
151
|
link_to rails_admin.url_for(action: a.action_name, controller: 'rails_admin/main', model_name: am.try(:to_param), id: (o.try(:persisted?) && o.try(:id) || nil)) do
|
|
152
152
|
wording_for(:breadcrumb, a, am, o)
|
|
153
153
|
end
|
|
@@ -162,7 +162,7 @@ module RailsAdmin
|
|
|
162
162
|
# parent => :root, :collection, :member
|
|
163
163
|
# perf matters here (no action view trickery)
|
|
164
164
|
def menu_for(parent, abstract_model = nil, object = nil, only_icon = false)
|
|
165
|
-
actions = actions(parent, abstract_model, object).select { |a| a.
|
|
165
|
+
actions = actions(parent, abstract_model, object).select { |a| a.linkable? && a.show_in_menu }
|
|
166
166
|
actions.collect do |action|
|
|
167
167
|
wording = wording_for(:menu, action)
|
|
168
168
|
li_class = ['nav-item', 'icon', "#{action.key}_#{parent}_link"].
|
|
@@ -209,18 +209,6 @@ module RailsAdmin
|
|
|
209
209
|
end
|
|
210
210
|
end
|
|
211
211
|
|
|
212
|
-
def handle_asset_dependency_error
|
|
213
|
-
yield
|
|
214
|
-
rescue LoadError => e
|
|
215
|
-
if /sassc/.match?(e.message)
|
|
216
|
-
e = e.exception <<~MSG
|
|
217
|
-
#{e.message}
|
|
218
|
-
RailsAdmin requires the gem sassc-rails, make sure to put `gem 'sassc-rails'` to Gemfile.
|
|
219
|
-
MSG
|
|
220
|
-
end
|
|
221
|
-
raise e
|
|
222
|
-
end
|
|
223
|
-
|
|
224
212
|
# Workaround for https://github.com/rails/rails/issues/31325
|
|
225
213
|
def image_tag(source, options = {})
|
|
226
214
|
if %w[ActiveStorage::Variant ActiveStorage::VariantWithRecord ActiveStorage::Preview].include? source.class.to_s
|
|
@@ -84,7 +84,9 @@ module RailsAdmin
|
|
|
84
84
|
if object.new_record?
|
|
85
85
|
I18n.t('admin.form.new_model', name: model_label)
|
|
86
86
|
else
|
|
87
|
-
|
|
87
|
+
# A record whose label method has nothing to say is named after the
|
|
88
|
+
# model label here, where the rest of the admin uses the class name.
|
|
89
|
+
model_config.object_label(object, "#{model_label} ##{object.id}")
|
|
88
90
|
end
|
|
89
91
|
|
|
90
92
|
%(<span style="display:none" class="object-infos" data-model-label="#{model_label}" data-object-label="#{CGI.escapeHTML(object_label.to_s)}"></span>).html_safe
|
|
@@ -108,11 +110,9 @@ module RailsAdmin
|
|
|
108
110
|
end
|
|
109
111
|
|
|
110
112
|
def hidden_field(method, options = {})
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
super
|
|
115
|
-
end
|
|
113
|
+
return super unless method == :id && object.id.is_a?(Array)
|
|
114
|
+
|
|
115
|
+
super method, {value: RailsAdmin.config(object.class).abstract_model.format_id(object.id)}
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
protected
|
|
@@ -149,9 +149,10 @@ module RailsAdmin
|
|
|
149
149
|
private
|
|
150
150
|
|
|
151
151
|
def nested_field_association?(field, nested_in)
|
|
152
|
-
|
|
153
|
-
(
|
|
154
|
-
field.
|
|
152
|
+
nested_in.presence &&
|
|
153
|
+
(field.name == nested_in.inverse_of ||
|
|
154
|
+
(field.inverse_of.presence && field.inverse_of == nested_in.name &&
|
|
155
|
+
@template.instance_variable_get(:@model_config).abstract_model == field.abstract_model))
|
|
155
156
|
end
|
|
156
157
|
end
|
|
157
158
|
end
|
|
@@ -1,32 +1,15 @@
|
|
|
1
1
|
<meta content="IE=edge" http-equiv="X-UA-Compatible">
|
|
2
2
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
|
3
|
-
<meta content="width=device-width, initial-scale=1" name="viewport
|
|
3
|
+
<meta content="width=device-width, initial-scale=1" name="viewport">
|
|
4
4
|
<meta content="NONE,NOARCHIVE" name="robots">
|
|
5
5
|
<meta content="false" name="turbo-prefetch">
|
|
6
6
|
<%= csrf_meta_tag %>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
<%=
|
|
11
|
-
<%
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
<% when :vite %>
|
|
17
|
-
<%= vite_javascript_tag "rails_admin", defer: true, data: {'turbo-track': 'reload'} %>
|
|
18
|
-
<% when :webpack %>
|
|
19
|
-
<%= stylesheet_link_tag "rails_admin.css", media: :all, data: {'turbo-track': 'reload'} %>
|
|
20
|
-
<%= javascript_include_tag "rails_admin.js", defer: true, data: {'turbo-track': 'reload'} %>
|
|
21
|
-
<% when :importmap %>
|
|
22
|
-
<%= stylesheet_link_tag "rails_admin.css", media: :all, data: {'turbo-track': 'reload'} %>
|
|
23
|
-
<%= javascript_inline_importmap_tag(RailsAdmin::Engine.importmap.to_json(resolver: self)) %>
|
|
24
|
-
<%= javascript_importmap_module_preload_tags(RailsAdmin::Engine.importmap) %>
|
|
25
|
-
<%= javascript_importmap_shim_nonce_configuration_tag if respond_to? :javascript_importmap_shim_nonce_configuration_tag %>
|
|
26
|
-
<%= javascript_importmap_shim_tag if respond_to? :javascript_importmap_shim_tag %>
|
|
27
|
-
<%= # Preload jQuery and make it global, unless jQuery UI fails to initialize
|
|
28
|
-
tag.script "import jQuery from 'jquery'; window.jQuery = jQuery;".html_safe, type: "module" %>
|
|
29
|
-
<%= javascript_import_module_tag 'rails_admin' %>
|
|
30
|
-
<% else
|
|
31
|
-
raise "Unknown asset_source: #{RailsAdmin::config.asset_source}"
|
|
32
|
-
end %>
|
|
7
|
+
<%= csp_meta_tag %>
|
|
8
|
+
<% asset_source = RailsAdmin.config.asset_source %>
|
|
9
|
+
<% if asset_source.respond_to?(:call) %>
|
|
10
|
+
<%= asset_source.call(self) %>
|
|
11
|
+
<% else %>
|
|
12
|
+
<%= stylesheet_link_tag "rails_admin", media: :all, data: {'turbo-track': 'reload'}, nonce: true %>
|
|
13
|
+
<%= javascript_include_tag "rails_admin", defer: true, data: {'turbo-track': 'reload'}, nonce: true %>
|
|
14
|
+
<% end %>
|
|
15
|
+
<%= render "layouts/rails_admin/head_custom" %>
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<% end %>
|
|
18
18
|
<% if logout_path.present? %>
|
|
19
19
|
<li class="nav-item">
|
|
20
|
-
<%= link_to logout_path,
|
|
20
|
+
<%= link_to logout_path, class: 'nav-link', data: {turbo_method: logout_method} do %>
|
|
21
21
|
<span class="badge bg-danger"><%= t('admin.misc.log_out') %></span>
|
|
22
22
|
<% end %>
|
|
23
23
|
</li>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<%= t.try :username %>
|
|
21
21
|
</td>
|
|
22
22
|
<% if o = abstract_model.try(:get, t.item) %>
|
|
23
|
-
<% label =
|
|
23
|
+
<% label = abstract_model.config.object_label(o) %>
|
|
24
24
|
<% if show_action = action(:show, abstract_model, o) %>
|
|
25
25
|
<td>
|
|
26
26
|
<%= link_to(label, url_for(action: show_action.action_name, model_name: abstract_model.to_param, id: o.id)) %>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<span class="label label-default">
|
|
4
4
|
<%= @abstract_model.pretty_name %>
|
|
5
5
|
</span>
|
|
6
|
-
<% wording =
|
|
6
|
+
<% wording = @model_config.object_label(object) %>
|
|
7
7
|
<% if show_action = action(:show, @abstract_model, object) %>
|
|
8
8
|
<%= link_to(wording, url_for(action: show_action.action_name, model_name: @abstract_model.to_param, id: object.id)) %>
|
|
9
9
|
<% else %>
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
<% end %>
|
|
12
12
|
<ul>
|
|
13
13
|
<% @abstract_model.each_associated_children(object) do |association, children| %>
|
|
14
|
-
<% humanized_association = @abstract_model.
|
|
14
|
+
<% humanized_association = @abstract_model.human_attribute_name association.name %>
|
|
15
15
|
<% limit = children.count > 12 ? 10 : children.count %>
|
|
16
16
|
<% children.first(limit).each do |child| %>
|
|
17
17
|
<%= content_tag :li, class: dom_class(child) do %>
|
|
18
18
|
<% child_config = RailsAdmin.config(child) %>
|
|
19
19
|
<%= humanized_association.singularize %>
|
|
20
|
-
<% wording =
|
|
20
|
+
<% wording = child_config.object_label(child) %>
|
|
21
21
|
<% if child.id && (show_action = action(:show, child_config.abstract_model, child)) %>
|
|
22
22
|
<%= link_to(wording, url_for(action: show_action.action_name, model_name: child_config.abstract_model.to_param, id: child.id)) %>
|
|
23
23
|
<% else %>
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
<%
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
<% cases = {'1': [true, 'btn-outline-success'], '0': [false, 'btn-outline-danger']} %>
|
|
2
|
+
<% cases[:''] = [nil, 'btn-outline-secondary'] if field.nullable? %>
|
|
3
|
+
<div class="btn-group" role="group">
|
|
4
|
+
<% cases.each do |text, (value, btn_class)| %>
|
|
5
|
+
<%= form.radio_button field.method_name, text, field.html_attributes.reverse_merge({ checked: field.form_value == value, required: field.required, class: 'btn-check' }) %>
|
|
6
|
+
<%= form.label "#{field.method_name}_#{text}", class: "#{field.css_classes[value]} btn #{btn_class}" do %>
|
|
7
|
+
<%= field.labels[value].html_safe %>
|
|
8
8
|
<% end %>
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
<div class="col-form-label">
|
|
12
|
-
<%= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, checked: field.form_value.in?([true, '1']), required: field.required, class: 'form-check-input' }) %>
|
|
13
|
-
</div>
|
|
14
|
-
<% end %>
|
|
9
|
+
<% end %>
|
|
10
|
+
</div>
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
<div class="form-actions row justify-content-end my-3">
|
|
2
2
|
<div class="col-sm-10">
|
|
3
3
|
<input name="return_to" type="<%= :hidden %>" value="<%= (params[:return_to].presence || request.referer) %>" />
|
|
4
|
-
<button class="btn btn-primary" data-
|
|
4
|
+
<button class="btn btn-primary" data-turbo-submits-with="<%= t("admin.form.save") %>" name="_save" type="submit"<%= ' disabled' unless @action.enabled? %>>
|
|
5
5
|
<i class="fas fa-check"></i>
|
|
6
6
|
<%= t("admin.form.save") %>
|
|
7
7
|
</button>
|
|
8
8
|
<span class="extra_buttons">
|
|
9
9
|
<% if @action.enabled? && authorized?(:new, @abstract_model) %>
|
|
10
|
-
<button class="btn btn-info" data-
|
|
10
|
+
<button class="btn btn-info" data-turbo-submits-with="<%= t("admin.form.save_and_add_another") %>" name="_add_another" type="submit">
|
|
11
11
|
<%= t("admin.form.save_and_add_another") %>
|
|
12
12
|
</button>
|
|
13
13
|
<% end %>
|
|
14
14
|
<% if @action.enabled? && authorized?(:edit, @abstract_model) %>
|
|
15
|
-
<button class="btn btn-info" data-
|
|
15
|
+
<button class="btn btn-info" data-turbo-submits-with="<%= t("admin.form.save_and_edit") %>" name="_add_edit" type="submit"<%= ' disabled' unless @action.enabled? %>>
|
|
16
16
|
<%= t("admin.form.save_and_edit") %>
|
|
17
17
|
</button>
|
|
18
18
|
<% end %>
|
|
19
|
-
<button class="btn btn-light" data-
|
|
19
|
+
<button class="btn btn-light" data-turbo-submits-with="<%= t("admin.form.cancel") %>" formnovalidate="<%= true %>" name="_continue" type="submit">
|
|
20
20
|
<i class="fas fa-times"></i>
|
|
21
21
|
<%= t("admin.form.cancel") %>
|
|
22
22
|
</button>
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
<%= form_tag bulk_delete_path(model_name: @abstract_model.to_param, bulk_ids: @objects.map(&:id)), method: :delete do %>
|
|
8
8
|
<div class="form-actions">
|
|
9
9
|
<input name="return_to" type="<%= :hidden %>" value="<%= (params[:return_to].presence || request.referer) %>" />
|
|
10
|
-
<button class="btn btn-danger" data-
|
|
10
|
+
<button class="btn btn-danger" data-turbo-submits-with="<%= t("admin.form.confirmation") %>" type="submit">
|
|
11
11
|
<i class="fas fa-check"></i>
|
|
12
12
|
<%= t("admin.form.confirmation") %>
|
|
13
13
|
</button>
|
|
14
|
-
<button class="btn" data-
|
|
14
|
+
<button class="btn" data-turbo-submits-with="<%= t("admin.form.cancel") %>" name="_continue" type="submit">
|
|
15
15
|
<i class="fas fa-times"></i>
|
|
16
16
|
<%= t("admin.form.cancel") %>
|
|
17
17
|
</button>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<% index_path = index_path(model_name: abstract_model.to_param) %>
|
|
21
21
|
<% row_class = "#{cycle("odd", "even")}#{" link" if index_path} #{abstract_model.param_key}_links" %>
|
|
22
22
|
<tr class="<%= row_class %>" data-link="<%= index_path %>">
|
|
23
|
-
<% last_created = @most_recent_created[abstract_model.
|
|
23
|
+
<% last_created = @most_recent_created[abstract_model.model_name] %>
|
|
24
24
|
<% active = last_created.try(:today?) %>
|
|
25
25
|
<td>
|
|
26
26
|
<span class="show">
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
<% end %>
|
|
34
34
|
</td>
|
|
35
35
|
<td>
|
|
36
|
-
<% count = @count[abstract_model.
|
|
36
|
+
<% count = @count[abstract_model.model_name] %>
|
|
37
37
|
<% percent = count > 0 ? (@max <= 1 ? count : ((Math.log(count+1) * 100.0) / Math.log(@max+1)).to_i) : -1 %>
|
|
38
38
|
<div class="<%= active ? 'active progress-bar-striped ' : '' %>progress" style="margin-bottom:0px">
|
|
39
39
|
<div class="bg-<%= get_indicator(percent) %> progress-bar animate-width-to" data-animate-length="<%= ([1.0, percent].max.to_i * 20) %>" data-animate-width-to="<%= [2.0, percent].max.to_i %>%" style="width:2%">
|
|
40
|
-
<%= @count[abstract_model.
|
|
40
|
+
<%= @count[abstract_model.model_name] %>
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|
|
43
43
|
</td>
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
<%= form_for(@object, url: delete_path(model_name: @abstract_model.to_param, id: @object.id), html: {method: "delete"}) do %>
|
|
10
10
|
<input name="return_to" type="<%= :hidden %>" value="<%= (params[:return_to].presence || request.referer) %>" />
|
|
11
11
|
<div class="form-actions">
|
|
12
|
-
<button class="btn btn-danger" data-
|
|
12
|
+
<button class="btn btn-danger" data-turbo-submits-with="<%= t("admin.form.confirmation") %>" type="submit">
|
|
13
13
|
<i class="fas fa-check"></i>
|
|
14
14
|
<%= t("admin.form.confirmation") %>
|
|
15
15
|
</button>
|
|
16
|
-
<button class="btn" data-
|
|
16
|
+
<button class="btn" data-turbo-submits-with="<%= t("admin.form.cancel") %>" name="_continue" type="submit">
|
|
17
17
|
<i class="fas fa-times"></i>
|
|
18
18
|
<%= t("admin.form.cancel") %>
|
|
19
19
|
</button>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<% params = request.params.except(:action, :controller, :utf8, :page, :per_page, :format, :authenticity_token) %>
|
|
2
|
-
<% visible_fields = @model_config.export.with(view: self, object: @abstract_model.
|
|
2
|
+
<% visible_fields = @model_config.export.with(view: self, object: @abstract_model.dummy_record, controller: self.controller).visible_fields %>
|
|
3
3
|
<%= form_tag export_path(params.merge(all: true)), method: 'post', class: "main", data: {turbo: false} do %>
|
|
4
4
|
<input name="send_data" type="hidden" value="true" />
|
|
5
5
|
<fieldset id="fields_to_export" class="mb-3">
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
</div>
|
|
55
55
|
</div>
|
|
56
56
|
<% visible_fields.select{ |f| f.association? && !f.association.polymorphic? }.each do |field| %>
|
|
57
|
-
<% fields = field.associated_model_config.export.with(controller: self.controller, view: self, object:
|
|
57
|
+
<% fields = field.associated_model_config.export.with(controller: self.controller, view: self, object: field.associated_model_config.abstract_model.dummy_record).visible_fields.select{ |f| !f.association? } %>
|
|
58
58
|
<div class="control-group row">
|
|
59
59
|
<div class="col-sm-12">
|
|
60
60
|
<div class="card bg-light my-2 reverse-selection" rel="tooltip" role="button" title="<%= t('admin.export.click_to_reverse_selection') %>">
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<div class="col-sm-6">
|
|
11
11
|
<div class="input-group">
|
|
12
12
|
<input class="form-control" name="query" placeholder="<%= t("admin.misc.filter") %>" type="search" value="<%= query %>" />
|
|
13
|
-
<button class="btn btn-primary" data-
|
|
13
|
+
<button class="btn btn-primary" data-turbo-submits-with="<%= '<i class="fas fa-sync"></i> ' + t('admin.misc.refresh') %>" type="submit">
|
|
14
14
|
<i class="fas fa-sync"></i>
|
|
15
15
|
<%= t("admin.misc.refresh") %>
|
|
16
16
|
</button>
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
</td>
|
|
52
52
|
<% if @general %>
|
|
53
53
|
<% if o = @abstract_model.get(object.item) %>
|
|
54
|
-
<% label =
|
|
54
|
+
<% label = @abstract_model.config.object_label(o) %>
|
|
55
55
|
<% if show_action = action(:show, @abstract_model, o) %>
|
|
56
56
|
<td>
|
|
57
57
|
<%= link_to(label, url_for(action: show_action.action_name, model_name: @abstract_model.to_param, id: o.id)) %>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
export_action = RailsAdmin::Config::Actions.find(:export, { controller: self.controller, abstract_model: @abstract_model })
|
|
10
10
|
export_action = nil unless export_action && authorized?(export_action.authorization_key, @abstract_model)
|
|
11
11
|
description = RailsAdmin.config(@abstract_model.model_name).description
|
|
12
|
-
properties = @model_config.list.with(controller: self.controller, view: self, object: @abstract_model.
|
|
12
|
+
properties = @model_config.list.with(controller: self.controller, view: self, object: @abstract_model.dummy_record).fields_for_table
|
|
13
13
|
checkboxes = @model_config.list.checkboxes?
|
|
14
14
|
table_table_header_count = begin
|
|
15
15
|
count = checkboxes ? 1 : 0
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
<% end %>
|
|
45
45
|
<% end %>
|
|
46
46
|
|
|
47
|
-
<style>
|
|
47
|
+
<style nonce="<%= content_security_policy_nonce %>">
|
|
48
48
|
<% properties.select{ |p| p.column_width.present? }.each do |property| %>
|
|
49
49
|
<%= "#list th.#{property.css_class} { width: #{property.column_width}px; min-width: #{property.column_width}px; }" %>
|
|
50
50
|
<%= "#list td.#{property.css_class} { max-width: #{property.column_width}px;}" %>
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
<div class="col-sm-6">
|
|
61
61
|
<div class="input-group">
|
|
62
62
|
<input class="form-control" name="query" placeholder="<%= t("admin.misc.filter") %>" type="search" value="<%= query %>" />
|
|
63
|
-
<button class="btn btn-primary" data-
|
|
63
|
+
<button class="btn btn-primary" data-turbo-submits-with="<%= '<i class="fas fa-sync"></i>' + t('admin.misc.refresh') %>" type="submit">
|
|
64
64
|
<i class="fas fa-sync"></i>
|
|
65
65
|
<%= t('admin.misc.refresh') %>
|
|
66
66
|
</button>
|
|
@@ -7,11 +7,8 @@ ActiveSupport.on_load(:active_record) do
|
|
|
7
7
|
RailsAdmin.config(self, &block)
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def rails_admin_default_object_label_method
|
|
11
|
-
new_record? ? "new #{self.class}" : "#{self.class} ##{id}"
|
|
12
|
-
end
|
|
13
|
-
|
|
14
10
|
def safe_send(value)
|
|
11
|
+
RailsAdmin.deprecator.warn('#safe_send is deprecated, please use RailsAdmin::AbstractModel#read.')
|
|
15
12
|
if has_attribute?(value)
|
|
16
13
|
read_attribute(value)
|
|
17
14
|
else
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'rails/generators'
|
|
4
|
-
require 'rails_admin/version'
|
|
5
4
|
require File.expand_path('utils', __dir__)
|
|
6
5
|
|
|
7
6
|
module RailsAdmin
|
|
@@ -10,7 +9,7 @@ module RailsAdmin
|
|
|
10
9
|
include Generators::Utils::InstanceMethods
|
|
11
10
|
|
|
12
11
|
argument :_namespace, type: :string, required: false, desc: 'RailsAdmin url namespace'
|
|
13
|
-
class_option :asset, type: :string, required: false, default: nil, desc: 'Asset delivery method [options:
|
|
12
|
+
class_option :asset, type: :string, required: false, default: nil, desc: 'Asset delivery method [options: propshaft, sprockets, external]'
|
|
14
13
|
desc 'RailsAdmin installation generator'
|
|
15
14
|
|
|
16
15
|
def install
|
|
@@ -27,116 +26,62 @@ module RailsAdmin
|
|
|
27
26
|
end
|
|
28
27
|
display "Using [#{asset}] for asset delivery method"
|
|
29
28
|
case asset
|
|
30
|
-
when '
|
|
31
|
-
|
|
32
|
-
when '
|
|
33
|
-
|
|
34
|
-
when 'webpacker'
|
|
35
|
-
configure_for_webpacker5
|
|
36
|
-
when 'vite'
|
|
37
|
-
configure_for_vite
|
|
38
|
-
when 'sprockets'
|
|
39
|
-
configure_for_sprockets
|
|
29
|
+
when 'sprockets', 'propshaft'
|
|
30
|
+
# RailsAdmin serves the bundle shipped in the gem; nothing to configure.
|
|
31
|
+
when 'external'
|
|
32
|
+
configure_for_external
|
|
40
33
|
else
|
|
41
|
-
raise "Unknown asset source: #{asset}"
|
|
34
|
+
raise "Unknown asset source: #{asset.inspect}. Use propshaft, sprockets or external."
|
|
42
35
|
end
|
|
43
36
|
end
|
|
44
37
|
|
|
45
38
|
private
|
|
46
39
|
|
|
47
40
|
def asset
|
|
48
|
-
|
|
41
|
+
@asset ||= normalize_asset(options['asset'] || detect_asset)
|
|
42
|
+
end
|
|
49
43
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
44
|
+
def normalize_asset(value)
|
|
45
|
+
case value.to_s
|
|
46
|
+
when 'webpack', 'vite', 'shakapacker', 'jsbundling', 'cssbundling'
|
|
47
|
+
display "[#{value}] builds its own assets; configuring :external", :yellow
|
|
48
|
+
'external'
|
|
49
|
+
when 'webpacker', 'importmap'
|
|
50
|
+
display "[#{value}] is no longer supported; RailsAdmin ships a prebuilt bundle", :yellow
|
|
51
|
+
detect_asset
|
|
58
52
|
else
|
|
59
|
-
|
|
53
|
+
value.to_s
|
|
60
54
|
end
|
|
61
55
|
end
|
|
62
56
|
|
|
63
|
-
def
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
run "yarn add rails_admin@#{RailsAdmin::Version.js}"
|
|
69
|
-
template 'rails_admin.webpacker.js', 'app/javascript/packs/rails_admin.js'
|
|
70
|
-
template 'rails_admin.scss.erb', 'app/javascript/stylesheets/rails_admin.scss'
|
|
71
|
-
# To work around https://github.com/railsadminteam/rails_admin/issues/3565
|
|
72
|
-
add_package_json_field('resolutions', {'rails_admin/@fortawesome/fontawesome-free' => '^5.15.0'})
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def configure_for_vite
|
|
76
|
-
vite_source_code_dir = ViteRuby.config.source_code_dir
|
|
77
|
-
run "yarn add rails_admin@#{RailsAdmin::Version.js} sass"
|
|
78
|
-
template('rails_admin.vite.js', File.join(vite_source_code_dir, 'entrypoints', 'rails_admin.js'))
|
|
79
|
-
@fa_font_path = '@fortawesome/fontawesome-free/webfonts'
|
|
80
|
-
template('rails_admin.scss.erb', File.join(vite_source_code_dir, 'stylesheets', 'rails_admin.scss'))
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def configure_for_webpack
|
|
84
|
-
run "yarn add rails_admin@#{RailsAdmin::Version.js}"
|
|
85
|
-
template 'rails_admin.js', 'app/javascript/rails_admin.js'
|
|
86
|
-
webpack_config = File.join(destination_root, 'webpack.config.js')
|
|
87
|
-
marker = %r{application: ["']./app/javascript/application.js["']}
|
|
88
|
-
if File.exist?(webpack_config) && File.read(webpack_config) =~ marker
|
|
89
|
-
insert_into_file 'webpack.config.js', %(,\n rails_admin: "./app/javascript/rails_admin.js"), after: marker
|
|
57
|
+
def detect_asset
|
|
58
|
+
if defined?(Propshaft)
|
|
59
|
+
'propshaft'
|
|
60
|
+
elsif Rails.root.join('webpack.config.js').exist? || defined?(ViteRuby)
|
|
61
|
+
'external'
|
|
90
62
|
else
|
|
91
|
-
|
|
63
|
+
'sprockets'
|
|
92
64
|
end
|
|
93
|
-
setup_css({'build' => 'webpack --config webpack.config.js'})
|
|
94
65
|
end
|
|
95
66
|
|
|
96
|
-
def
|
|
97
|
-
run "yarn add rails_admin@#{RailsAdmin::Version.js}"
|
|
67
|
+
def configure_for_external
|
|
98
68
|
template 'rails_admin.js', 'app/javascript/rails_admin.js'
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
69
|
+
@fa_font_path = 'rails_admin'
|
|
70
|
+
# Not app/javascript: jsbundling builds that whole directory as JavaScript.
|
|
71
|
+
template 'rails_admin.scss.erb', 'app/assets/stylesheets/rails_admin.scss'
|
|
72
|
+
say <<~INSTRUCTIONS, :yellow
|
|
73
|
+
Add the `rails_admin` npm package, then wire the two entrypoints into the
|
|
74
|
+
build scripts your bundler runs, so they output app/assets/builds/rails_admin.js
|
|
75
|
+
and app/assets/builds/rails_admin.css. Going through the scripts matters:
|
|
76
|
+
that is what `rails assets:precompile` runs on deploy.
|
|
103
77
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
78
|
+
With the esbuild and sass setup jsbundling-rails and cssbundling-rails
|
|
79
|
+
generate, app/javascript/rails_admin.js is already covered by the "build"
|
|
80
|
+
script's app/javascript/*.* glob, and the stylesheet needs one more pair in
|
|
81
|
+
"build:css" - adapt it if you build your CSS some other way:
|
|
107
82
|
|
|
108
|
-
@fa_font_path = '.'
|
|
109
|
-
template 'rails_admin.scss.erb', 'app/assets/stylesheets/rails_admin.scss'
|
|
110
|
-
asset_config = %{Rails.application.config.assets.paths << Rails.root.join("node_modules/@fortawesome/fontawesome-free/webfonts")\n}
|
|
111
|
-
if File.exist? File.join(destination_root, 'config/initializers/assets.rb')
|
|
112
|
-
append_to_file 'config/initializers/assets.rb', asset_config
|
|
113
|
-
else
|
|
114
|
-
add_file 'config/initializers/assets.rb', asset_config
|
|
115
|
-
end
|
|
116
|
-
add_package_json_field('scripts', additional_script_entries.merge({'build:css' => 'sass ./app/assets/stylesheets/rails_admin.scss:./app/assets/builds/rails_admin.css --no-source-map --load-path=node_modules'}), <<~INSTRUCTION)
|
|
117
|
-
Taking 'build:css' as an example, if you're already have application.sass.css for the sass build, the resulting script would look like:
|
|
118
83
|
sass ./app/assets/stylesheets/application.sass.scss:./app/assets/builds/application.css ./app/assets/stylesheets/rails_admin.scss:./app/assets/builds/rails_admin.css --no-source-map --load-path=node_modules
|
|
119
|
-
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def add_package_json_field(name, entries, instruction = nil)
|
|
123
|
-
display "Add #{name} to package.json"
|
|
124
|
-
package = begin
|
|
125
|
-
JSON.parse(File.read(File.join(destination_root, 'package.json')))
|
|
126
|
-
rescue Errno::ENOENT, JSON::ParserError
|
|
127
|
-
{}
|
|
128
|
-
end
|
|
129
|
-
if package[name] && (package[name].keys & entries.keys).any?
|
|
130
|
-
say <<~MESSAGE, :red
|
|
131
|
-
You need to merge "#{name}": #{JSON.pretty_generate(entries)} into the existing #{name} in your package.json.#{instruction && "\n#{instruction}"}
|
|
132
|
-
MESSAGE
|
|
133
|
-
else
|
|
134
|
-
package[name] ||= {}
|
|
135
|
-
entries.each do |entry, value|
|
|
136
|
-
package[name][entry] = value
|
|
137
|
-
end
|
|
138
|
-
add_file 'package.json', "#{JSON.pretty_generate(package)}\n"
|
|
139
|
-
end
|
|
84
|
+
INSTRUCTIONS
|
|
140
85
|
end
|
|
141
86
|
end
|
|
142
87
|
end
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= @fa_font_path ? %
|
|
1
|
+
<%= @fa_font_path ? %($fa-font-path: "#{@fa_font_path}";\n) : '' %>@import "rails_admin/src/rails_admin/styles/base";
|