rails_admin 1.4.3 → 2.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.
Files changed (213) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -2
  3. data/README.md +2 -12
  4. data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
  5. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +1 -1
  6. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +9 -7
  7. data/app/assets/javascripts/rails_admin/ra.i18n.js +28 -0
  8. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +57 -0
  9. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
  10. data/app/assets/javascripts/rails_admin/ra.widgets.js +371 -0
  11. data/app/assets/javascripts/rails_admin/rails_admin.js +1 -0
  12. data/app/assets/javascripts/rails_admin/ui.js +135 -0
  13. data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +29 -0
  14. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +4 -0
  15. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +2 -1
  16. data/app/helpers/rails_admin/application_helper.rb +18 -3
  17. data/app/helpers/rails_admin/main_helper.rb +4 -4
  18. data/app/views/layouts/rails_admin/_head.html.haml +7 -0
  19. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
  20. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
  21. data/app/views/layouts/rails_admin/application.html.haml +3 -11
  22. data/app/views/layouts/rails_admin/pjax.html.haml +1 -5
  23. data/app/views/rails_admin/main/_form_action_text.html.haml +7 -0
  24. data/app/views/rails_admin/main/_form_file_upload.html.haml +4 -4
  25. data/app/views/rails_admin/main/_form_filtering_select.html.haml +1 -1
  26. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +7 -5
  27. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +18 -3
  28. data/app/views/rails_admin/main/dashboard.html.haml +1 -2
  29. data/app/views/rails_admin/main/export.html.haml +2 -2
  30. data/app/views/rails_admin/main/index.html.haml +18 -14
  31. data/app/views/rails_admin/main/show.html.haml +6 -7
  32. data/config/locales/rails_admin.en.yml +2 -0
  33. data/lib/generators/rails_admin/templates/initializer.erb +2 -2
  34. data/lib/rails_admin/abstract_model.rb +1 -1
  35. data/lib/rails_admin/adapters/active_record/property.rb +1 -5
  36. data/lib/rails_admin/adapters/active_record.rb +22 -9
  37. data/lib/rails_admin/adapters/mongoid/association.rb +1 -1
  38. data/lib/rails_admin/adapters/mongoid.rb +30 -13
  39. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +1 -3
  40. data/lib/rails_admin/bootstrap-sass.rb +5 -3
  41. data/lib/rails_admin/config/actions/base.rb +17 -1
  42. data/lib/rails_admin/config/actions/edit.rb +1 -3
  43. data/lib/rails_admin/config/actions/index.rb +3 -3
  44. data/lib/rails_admin/config/actions/new.rb +1 -3
  45. data/lib/rails_admin/config/configurable.rb +5 -3
  46. data/lib/rails_admin/config/fields/association.rb +1 -1
  47. data/lib/rails_admin/config/fields/base.rb +1 -1
  48. data/lib/rails_admin/config/fields/factories/action_text.rb +12 -0
  49. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  50. data/lib/rails_admin/config/fields/factories/shrine.rb +27 -0
  51. data/lib/rails_admin/config/fields/types/action_text.rb +30 -0
  52. data/lib/rails_admin/config/fields/types/active_record_enum.rb +3 -19
  53. data/lib/rails_admin/config/fields/types/active_storage.rb +1 -0
  54. data/lib/rails_admin/config/fields/types/all.rb +2 -1
  55. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +4 -0
  56. data/lib/rails_admin/config/fields/types/ck_editor.rb +7 -7
  57. data/lib/rails_admin/config/fields/types/code_mirror.rb +10 -12
  58. data/lib/rails_admin/config/fields/types/color.rb +2 -2
  59. data/lib/rails_admin/config/fields/types/file_upload.rb +6 -2
  60. data/lib/rails_admin/config/fields/types/froala.rb +9 -11
  61. data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
  62. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +1 -1
  63. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +15 -3
  64. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +17 -3
  65. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +7 -0
  66. data/lib/rails_admin/config/fields/types/shrine.rb +52 -0
  67. data/lib/rails_admin/config/fields/types/simple_mde.rb +8 -5
  68. data/lib/rails_admin/config/fields/types/string.rb +2 -2
  69. data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
  70. data/lib/rails_admin/config/fields/types/text.rb +2 -20
  71. data/lib/rails_admin/config/fields/types/wysihtml5.rb +14 -10
  72. data/lib/rails_admin/config/fields.rb +2 -1
  73. data/lib/rails_admin/config/model.rb +3 -2
  74. data/lib/rails_admin/config/proxyable/proxy.rb +3 -5
  75. data/lib/rails_admin/config/proxyable.rb +13 -1
  76. data/lib/rails_admin/config/sections/list.rb +23 -0
  77. data/lib/rails_admin/config.rb +8 -6
  78. data/lib/rails_admin/engine.rb +1 -2
  79. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +45 -21
  80. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +19 -4
  81. data/lib/rails_admin/version.rb +3 -3
  82. data/lib/rails_admin.rb +0 -1
  83. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  84. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  85. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +2671 -0
  86. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  87. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  88. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  89. data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +1 -3
  90. data/vendor/assets/stylesheets/rails_admin/font-awesome.css.erb +2342 -0
  91. metadata +163 -171
  92. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  93. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -10
  94. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -58
  95. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -359
  96. data/app/assets/javascripts/rails_admin/ui.coffee +0 -102
  97. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  98. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  99. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
  100. data/lib/rails_admin/extensions/cancan.rb +0 -3
  101. /data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  102. /data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  103. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  104. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  105. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  106. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  107. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  108. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  109. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  110. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  111. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  112. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  113. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  114. /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  115. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  116. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  117. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  118. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  119. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  120. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  121. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  122. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  123. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  124. /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  125. /data/{app → vendor}/assets/images/rails_admin/colorpicker/select.png +0 -0
  126. /data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
  127. /data/{app → vendor}/assets/images/rails_admin/colorpicker/slider.png +0 -0
  128. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -0
  129. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -0
  130. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -0
  131. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -0
  132. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -0
  133. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -0
  134. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -0
  135. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -0
  136. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -0
  137. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -0
  138. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -0
  139. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -0
  140. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
  141. /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
  142. /data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
  143. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
  144. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
  145. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
  146. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
  147. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
  148. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
  149. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
  150. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
  151. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
  152. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
  153. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
  154. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
  155. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
  156. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
  157. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
  158. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
  159. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
  160. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
  161. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
  162. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
  163. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
  164. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
  165. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
  166. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
  167. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
  168. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
  169. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
  170. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
  171. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
  172. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
  173. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
  174. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
  175. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
  176. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
  177. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
  178. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
  179. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
  180. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
  181. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
  182. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
  183. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
  184. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
  185. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
  186. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
  187. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
  188. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
  189. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
  190. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
  191. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
  192. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
  193. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
  194. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
  195. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
  196. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
  197. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
  198. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
  199. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  200. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
  201. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
  202. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
  203. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
  204. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
  205. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
  206. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
  207. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
  208. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
  209. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
  210. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
  211. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
  212. /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  213. /data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
@@ -1,35 +1,33 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/text'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class Froala < RailsAdmin::Config::Fields::Types::Text
7
+ class Froala < Text
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
11
- # If you want to have a different toolbar configuration for wysihtml5
12
- # you can use a Ruby hash to configure these options:
13
- # https://github.com/jhollingworth/bootstrap-wysihtml5/#advanced
11
+ # See https://www.froala.com/wysiwyg-editor/docs/options
14
12
  register_instance_option :config_options do
15
13
  nil
16
14
  end
17
15
 
16
+ register_instance_option :version do
17
+ '2.9.5'
18
+ end
19
+
18
20
  register_instance_option :css_location do
19
- ActionController::Base.helpers.asset_path('froala_editor.min.css')
21
+ "https://cdnjs.cloudflare.com/ajax/libs/froala-editor/#{version}/css/froala_editor.min.css"
20
22
  end
21
23
 
22
24
  register_instance_option :js_location do
23
- ActionController::Base.helpers.asset_path('froala_editor.min.js')
25
+ "https://cdnjs.cloudflare.com/ajax/libs/froala-editor/#{version}/js/froala_editor.min.js"
24
26
  end
25
27
 
26
28
  register_instance_option :partial do
27
29
  :form_froala
28
30
  end
29
-
30
- [:config_options, :css_location, :js_location].each do |key|
31
- register_deprecated_instance_option :"froala_#{key}", key
32
- end
33
31
  end
34
32
  end
35
33
  end
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/string_like'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class Hidden < RailsAdmin::Config::Fields::Base
7
+ class Hidden < StringLike
8
8
  RailsAdmin::Config::Fields::Types.register(self)
9
9
 
10
10
  register_instance_option :view_helper do
@@ -12,7 +12,7 @@ module RailsAdmin
12
12
  {resize: '100x100>'}
13
13
  end
14
14
 
15
- register_instance_option :delete_key do
15
+ register_instance_option :delete_value do
16
16
  value.id
17
17
  end
18
18
 
@@ -12,8 +12,12 @@ module RailsAdmin
12
12
  @thumb_method ||= ((versions = value.versions.keys).detect { |k| k.in?([:thumb, :thumbnail, 'thumb', 'thumbnail']) } || versions.first.to_s)
13
13
  end
14
14
 
15
- register_instance_option :delete_key do
16
- value.file.identifier
15
+ register_instance_option :keep_value do
16
+ value.cache_name || value.identifier
17
+ end
18
+
19
+ register_instance_option :delete_value do
20
+ value.file.filename
17
21
  end
18
22
 
19
23
  def resource_url(thumb = false)
@@ -27,7 +31,15 @@ module RailsAdmin
27
31
  end
28
32
 
29
33
  register_instance_option :cache_method do
30
- "#{name}_cache"
34
+ "#{name}_cache" unless ::CarrierWave::VERSION >= '2'
35
+ end
36
+
37
+ register_instance_option :keep_method do
38
+ name if ::CarrierWave::VERSION >= '2'
39
+ end
40
+
41
+ register_instance_option :reorderable? do
42
+ ::CarrierWave::VERSION >= '2'
31
43
  end
32
44
 
33
45
  register_instance_option :delete_method do
@@ -19,10 +19,16 @@ module RailsAdmin
19
19
  nil
20
20
  end
21
21
 
22
- register_instance_option :delete_key do
22
+ register_instance_option :keep_value do
23
23
  nil
24
24
  end
25
25
 
26
+ register_instance_option :delete_value do
27
+ nil
28
+ end
29
+
30
+ register_deprecated_instance_option :delete_key, :delete_value
31
+
26
32
  register_instance_option :pretty_value do
27
33
  if value.presence
28
34
  v = bindings[:view]
@@ -30,9 +36,9 @@ module RailsAdmin
30
36
  if image
31
37
  thumb_url = resource_url(thumb_method)
32
38
  image_html = v.image_tag(thumb_url, class: 'img-thumbnail')
33
- url != thumb_url ? v.link_to(image_html, url, target: '_blank') : image_html
39
+ url != thumb_url ? v.link_to(image_html, url, target: '_blank', rel: 'noopener noreferrer') : image_html
34
40
  else
35
- v.link_to(value, url, target: '_blank')
41
+ v.link_to(value, url, target: '_blank', rel: 'noopener noreferrer')
36
42
  end
37
43
  end
38
44
  end
@@ -67,6 +73,14 @@ module RailsAdmin
67
73
  nil
68
74
  end
69
75
 
76
+ register_instance_option :keep_method do
77
+ nil
78
+ end
79
+
80
+ register_instance_option :reorderable? do
81
+ false
82
+ end
83
+
70
84
  register_instance_option :export_value do
71
85
  attachments.map(&:resource_url).map(&:to_s).join(',')
72
86
  end
@@ -78,6 +78,13 @@ module RailsAdmin
78
78
  def value
79
79
  bindings[:object].send(association.name)
80
80
  end
81
+
82
+ def parse_input(params)
83
+ if (type_value = params[association.foreign_type.to_sym]).present?
84
+ config = associated_model_config.find { |c| type_value == c.abstract_model.model.name }
85
+ params[association.foreign_type.to_sym] = config.abstract_model.base_class.name if config
86
+ end
87
+ end
81
88
  end
82
89
  end
83
90
  end
@@ -0,0 +1,52 @@
1
+ require 'rails_admin/config/fields/types/file_upload'
2
+
3
+ module RailsAdmin
4
+ module Config
5
+ module Fields
6
+ module Types
7
+ class Shrine < RailsAdmin::Config::Fields::Types::FileUpload
8
+ RailsAdmin::Config::Fields::Types.register(self)
9
+
10
+ register_instance_option :thumb_method do
11
+ unless defined? @thumb_method
12
+ @thumb_method = begin
13
+ next nil unless value.is_a?(Hash)
14
+
15
+ if value.key?(:thumb)
16
+ :thumb
17
+ elsif value.key?(:thumbnail)
18
+ :thumbnail
19
+ else
20
+ value.keys.first
21
+ end
22
+ end
23
+ end
24
+ @thumb_method
25
+ end
26
+
27
+ register_instance_option :delete_method do
28
+ "remove_#{name}" if bindings[:object].respond_to?("remove_#{name}")
29
+ end
30
+
31
+ register_instance_option :cache_method do
32
+ name
33
+ end
34
+
35
+ register_instance_option :cache_value do
36
+ bindings[:object].public_send("cached_#{name}_data") if bindings[:object].respond_to?("cached_#{name}_data")
37
+ end
38
+
39
+ def resource_url(thumb = nil)
40
+ return nil unless value
41
+
42
+ if value.is_a?(Hash)
43
+ value[thumb || value.keys.first].url
44
+ else
45
+ value.url
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/text'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class SimpleMDE < RailsAdmin::Config::Fields::Types::Text
7
+ class SimpleMDE < Text
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
@@ -14,13 +14,16 @@ module RailsAdmin
14
14
  nil
15
15
  end
16
16
 
17
- # Use this if you want to point to a cloud instance of the base SimpleMDE
17
+ register_instance_option :version do
18
+ '1.11.2'
19
+ end
20
+
18
21
  register_instance_option :js_location do
19
- "#{Rails.application.config.assets.prefix}/simplemde.min.js"
22
+ "https://cdnjs.cloudflare.com/ajax/libs/simplemde/#{version}/simplemde.min.js"
20
23
  end
21
24
 
22
25
  register_instance_option :css_location do
23
- "#{Rails.application.config.assets.prefix}/simplemde.min.css"
26
+ "https://cdnjs.cloudflare.com/ajax/libs/simplemde/#{version}/simplemde.min.css"
24
27
  end
25
28
 
26
29
  register_instance_option :partial do
@@ -1,10 +1,10 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/string_like'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class String < RailsAdmin::Config::Fields::Base
7
+ class String < StringLike
8
8
  RailsAdmin::Config::Fields::Types.register(self)
9
9
 
10
10
  def input_size
@@ -0,0 +1,19 @@
1
+ require 'rails_admin/config/fields/base'
2
+
3
+ module RailsAdmin
4
+ module Config
5
+ module Fields
6
+ module Types
7
+ class StringLike < RailsAdmin::Config::Fields::Base
8
+ register_instance_option :treat_empty_as_nil? do
9
+ properties.try(:nullable?)
10
+ end
11
+
12
+ def parse_input(params)
13
+ params[name] = params[name].presence if params.key?(name) && treat_empty_as_nil?
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,31 +1,13 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/string_like'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class Text < RailsAdmin::Config::Fields::Base
7
+ class Text < StringLike
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
11
- [:ckeditor, :ckeditor_base_location, :ckeditor_config_js, :ckeditor_location].each do |key|
12
- register_deprecated_instance_option key do
13
- raise("The 'field(:foo){ ckeditor true }' style DSL is deprecated. Please use 'field :foo, :ck_editor' instead.")
14
- end
15
- end
16
-
17
- [:codemirror, :codemirror_assets, :codemirror_config, :codemirror_css_location, :codemirror_js_location].each do |key|
18
- register_deprecated_instance_option key do
19
- raise("The 'field(:foo){ codemirror true }' style DSL is deprecated. Please use 'field :foo, :code_mirror' instead.")
20
- end
21
- end
22
-
23
- [:bootstrap_wysihtml5, :bootstrap_wysihtml5_config_options, :bootstrap_wysihtml5_css_location, :bootstrap_wysihtml5_js_location].each do |key|
24
- register_deprecated_instance_option key do
25
- raise("The 'field(:foo){ bootstrap_wysihtml5 true }' style DSL is deprecated. Please use 'field :foo, :wysihtml5' instead.")
26
- end
27
- end
28
-
29
11
  register_instance_option :html_attributes do
30
12
  {
31
13
  required: required?,
@@ -1,35 +1,39 @@
1
- require 'rails_admin/config/fields/base'
1
+ require 'rails_admin/config/fields/types/text'
2
2
 
3
3
  module RailsAdmin
4
4
  module Config
5
5
  module Fields
6
6
  module Types
7
- class Wysihtml5 < RailsAdmin::Config::Fields::Types::Text
7
+ class Wysihtml5 < Text
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types.register(self)
10
10
 
11
11
  # If you want to have a different toolbar configuration for wysihtml5
12
12
  # you can use a Ruby hash to configure these options:
13
- # https://github.com/jhollingworth/bootstrap-wysihtml5/#advanced
13
+ # https://github.com/bootstrap-wysiwyg/bootstrap3-wysiwyg
14
14
  register_instance_option :config_options do
15
- nil
15
+ {
16
+ toolbar: {
17
+ fa: true,
18
+ },
19
+ }
20
+ end
21
+
22
+ register_instance_option :version do
23
+ '0.3.3'
16
24
  end
17
25
 
18
26
  register_instance_option :css_location do
19
- ActionController::Base.helpers.asset_path('bootstrap-wysihtml5/index.css')
27
+ "https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-wysiwyg/#{version}/bootstrap3-wysihtml5.min.css"
20
28
  end
21
29
 
22
30
  register_instance_option :js_location do
23
- ActionController::Base.helpers.asset_path('bootstrap-wysihtml5/index.js')
31
+ "https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-wysiwyg/#{version}/bootstrap3-wysihtml5.all.min.js"
24
32
  end
25
33
 
26
34
  register_instance_option :partial do
27
35
  :form_wysihtml5
28
36
  end
29
-
30
- [:config_options, :css_location, :js_location].each do |key|
31
- register_deprecated_instance_option :"bootstrap_wysihtml5_#{key}", key
32
- end
33
37
  end
34
38
  end
35
39
  end
@@ -82,6 +82,7 @@ require 'rails_admin/config/fields/factories/devise'
82
82
  require 'rails_admin/config/fields/factories/paperclip'
83
83
  require 'rails_admin/config/fields/factories/dragonfly'
84
84
  require 'rails_admin/config/fields/factories/carrierwave'
85
- require 'rails_admin/config/fields/factories/refile'
86
85
  require 'rails_admin/config/fields/factories/active_storage'
86
+ require 'rails_admin/config/fields/factories/shrine'
87
+ require 'rails_admin/config/fields/factories/action_text'
87
88
  require 'rails_admin/config/fields/factories/association'
@@ -44,7 +44,8 @@ module RailsAdmin
44
44
  end
45
45
 
46
46
  def excluded?
47
- @excluded ||= !RailsAdmin::AbstractModel.all.collect(&:model_name).include?(abstract_model.try(:model_name))
47
+ return @excluded if defined?(@excluded)
48
+ @excluded = !RailsAdmin::AbstractModel.all.collect(&:model_name).include?(abstract_model.try(:model_name))
48
49
  end
49
50
 
50
51
  def object_label
@@ -87,7 +88,7 @@ module RailsAdmin
87
88
 
88
89
  register_instance_option :navigation_label do
89
90
  @navigation_label ||= begin
90
- if (parent_module = abstract_model.model.parent) != Object
91
+ if (parent_module = abstract_model.model.try(:module_parent) || abstract_model.model.try!(:parent)) != Object
91
92
  parent_module.to_s
92
93
  end
93
94
  end
@@ -2,8 +2,6 @@ module RailsAdmin
2
2
  module Config
3
3
  module Proxyable
4
4
  class Proxy < BasicObject
5
- attr_reader :bindings
6
-
7
5
  def initialize(object, bindings = {})
8
6
  @object = object
9
7
  @bindings = bindings
@@ -21,12 +19,12 @@ module RailsAdmin
21
19
 
22
20
  def method_missing(name, *args, &block)
23
21
  if @object.respond_to?(name)
24
- reset = @object.instance_variable_get('@bindings')
22
+ reset = @object.bindings
25
23
  begin
26
- @object.instance_variable_set('@bindings', @bindings)
24
+ @object.bindings = @bindings
27
25
  response = @object.__send__(name, *args, &block)
28
26
  ensure
29
- @object.instance_variable_set('@bindings', reset)
27
+ @object.bindings = reset
30
28
  end
31
29
  response
32
30
  else
@@ -2,7 +2,19 @@ require 'rails_admin/config/proxyable/proxy'
2
2
  module RailsAdmin
3
3
  module Config
4
4
  module Proxyable
5
- attr_accessor :bindings
5
+ def bindings
6
+ Thread.current[:rails_admin_bindings] ||= {}
7
+ Thread.current[:rails_admin_bindings][self]
8
+ end
9
+
10
+ def bindings=(new_bindings)
11
+ Thread.current[:rails_admin_bindings] ||= {}
12
+ if new_bindings.nil?
13
+ Thread.current[:rails_admin_bindings].delete(self)
14
+ else
15
+ Thread.current[:rails_admin_bindings][self] = new_bindings
16
+ end
17
+ end
6
18
 
7
19
  def with(bindings = {})
8
20
  RailsAdmin::Config::Proxyable::Proxy.new(self, bindings)
@@ -24,6 +24,10 @@ module RailsAdmin
24
24
  false
25
25
  end
26
26
 
27
+ register_instance_option :search_by do
28
+ nil
29
+ end
30
+
27
31
  register_instance_option :sort_by do
28
32
  parent.abstract_model.primary_key
29
33
  end
@@ -39,6 +43,25 @@ module RailsAdmin
39
43
  register_instance_option :row_css_class do
40
44
  ''
41
45
  end
46
+
47
+ register_instance_option :sidescroll do
48
+ nil
49
+ end
50
+
51
+ def sidescroll_frozen_columns
52
+ global_config = RailsAdmin::Config.sidescroll
53
+ model_config = sidescroll
54
+ enabled = model_config.nil? ? global_config : model_config
55
+ if enabled
56
+ num_frozen = model_config[:num_frozen_columns] if model_config.is_a?(Hash)
57
+ unless num_frozen
58
+ num_frozen = global_config[:num_frozen_columns] if global_config.is_a?(Hash)
59
+ num_frozen ||= 3 # by default, freeze checkboxes, links & first property (usually primary key / id?)
60
+ num_frozen -= 1 unless checkboxes? # model config should be explicit about this, only adjust if using global config
61
+ end
62
+ num_frozen
63
+ end
64
+ end
42
65
  end
43
66
  end
44
67
  end
@@ -59,6 +59,9 @@ module RailsAdmin
59
59
  # Set the max width of columns in list view before a new set is created
60
60
  attr_accessor :total_columns_width
61
61
 
62
+ # Enable horizontal-scrolling table in list view, ignore total_columns_width
63
+ attr_accessor :sidescroll
64
+
62
65
  # set parent controller
63
66
  attr_accessor :parent_controller
64
67
 
@@ -138,11 +141,11 @@ module RailsAdmin
138
141
  # end
139
142
  #
140
143
  # To use an authorization adapter, pass the name of the adapter. For example,
141
- # to use with CanCan[https://github.com/ryanb/cancan], pass it like this.
144
+ # to use with CanCanCan[https://github.com/CanCanCommunity/cancancan/], pass it like this.
142
145
  #
143
- # @example CanCan
146
+ # @example CanCanCan
144
147
  # RailsAdmin.config do |config|
145
- # config.authorize_with :cancan
148
+ # config.authorize_with :cancancan
146
149
  # end
147
150
  #
148
151
  # See the wiki[https://github.com/sferik/rails_admin/wiki] for more on authorization.
@@ -207,9 +210,7 @@ module RailsAdmin
207
210
 
208
211
  # pool of all found model names from the whole application
209
212
  def models_pool
210
- excluded = (excluded_models.collect(&:to_s) + %w(RailsAdmin::History PaperTrail::Version PaperTrail::VersionAssociation ActiveStorage::Attachment ActiveStorage::Blob))
211
-
212
- (viable_models - excluded).uniq.sort
213
+ (viable_models - excluded_models.collect(&:to_s)).uniq.sort
213
214
  end
214
215
 
215
216
  # Loads a model configuration instance from the registry or registers
@@ -285,6 +286,7 @@ module RailsAdmin
285
286
  @excluded_models = []
286
287
  @included_models = []
287
288
  @total_columns_width = 697
289
+ @sidescroll = nil
288
290
  @label_methods = [:name, :title]
289
291
  @main_app_name = proc { [Rails.application.engine_name.titleize.chomp(' Application'), 'Admin'] }
290
292
  @registry = {}
@@ -1,4 +1,3 @@
1
- require 'font-awesome-rails'
2
1
  require 'jquery-rails'
3
2
  require 'jquery-ui-rails'
4
3
  require 'kaminari'
@@ -45,7 +44,7 @@ module RailsAdmin
45
44
 
46
45
  # Check for required middlewares, users may forget to use them in Rails API mode
47
46
  config.after_initialize do |app|
48
- has_session_store = ::Rails.version < '5.0' || app.config.middleware.to_a.any? do |m|
47
+ has_session_store = app.config.middleware.to_a.any? do |m|
49
48
  m.klass.try(:<=, ActionDispatch::Session::AbstractStore) ||
50
49
  m.klass.name =~ /^ActionDispatch::Session::/
51
50
  end
@@ -2,38 +2,62 @@ module RailsAdmin
2
2
  module Extensions
3
3
  module CanCanCan
4
4
  # This adapter is for the CanCanCan[https://github.com/CanCanCommunity/cancancan] authorization library.
5
- class AuthorizationAdapter < RailsAdmin::Extensions::CanCan::AuthorizationAdapter
5
+ class AuthorizationAdapter
6
+ module ControllerExtension
7
+ def current_ability
8
+ # use _current_user instead of default current_user so it works with
9
+ # whatever current user method is defined with RailsAdmin
10
+ @current_ability ||= @ability.new(_current_user)
11
+ end
12
+ end
13
+
14
+ # See the +authorize_with+ config method for where the initialization happens.
15
+ def initialize(controller, ability = ::Ability)
16
+ @controller = controller
17
+ @controller.instance_variable_set '@ability', ability
18
+ @controller.extend ControllerExtension
19
+ @controller.current_ability.authorize! :access, :rails_admin
20
+ end
21
+
22
+ # This method is called in every controller action and should raise an exception
23
+ # when the authorization fails. The first argument is the name of the controller
24
+ # action as a symbol (:create, :bulk_delete, etc.). The second argument is the
25
+ # AbstractModel instance that applies. The third argument is the actual model
26
+ # instance if it is available.
6
27
  def authorize(action, abstract_model = nil, model_object = nil)
7
28
  return unless action
8
- subject = model_object || abstract_model && abstract_model.model
9
- if authorized_for_dashboard_in_legacy_way?(action)
10
- subject
11
- else
12
- @controller.current_ability.authorize!(*resolve_with_compatibility(action, subject))
13
- end
29
+ action, subject = resolve_action_and_subject(action, abstract_model, model_object)
30
+ @controller.current_ability.authorize!(action, subject)
14
31
  end
15
32
 
33
+ # This method is called primarily from the view to determine whether the given user
34
+ # has access to perform the action on a given model. It should return true when authorized.
35
+ # This takes the same arguments as +authorize+. The difference is that this will
36
+ # return a boolean whereas +authorize+ will raise an exception when not authorized.
16
37
  def authorized?(action, abstract_model = nil, model_object = nil)
17
38
  return unless action
18
- subject = model_object || abstract_model && abstract_model.model
19
- authorized_for_dashboard_in_legacy_way?(action, true) ||
20
- @controller.current_ability.can?(*resolve_with_compatibility(action, subject))
39
+ action, subject = resolve_action_and_subject(action, abstract_model, model_object)
40
+ @controller.current_ability.can?(action, subject)
21
41
  end
22
42
 
23
- private
43
+ # This is called when needing to scope a database query. It is called within the list
44
+ # and bulk_delete/destroy actions and should return a scope which limits the records
45
+ # to those which the user can perform the given action on.
46
+ def query(action, abstract_model)
47
+ abstract_model.model.accessible_by(@controller.current_ability, action)
48
+ end
24
49
 
25
- def authorized_for_dashboard_in_legacy_way?(action, silent = false)
26
- return false unless action == :dashboard
27
- legacy_ability = @controller.current_ability.permissions[:can][:dashboard]
28
- if legacy_ability && (legacy_ability.empty? || legacy_ability.all?(&:empty?))
29
- ActiveSupport::Deprecation.warn('RailsAdmin CanCanCan Ability with `can :dashboard` is old and support will be removed in the next major release, use `can :read, :dashboard` instead. See https://github.com/sferik/rails_admin/issues/2901') unless silent
30
- true
31
- else
32
- false
33
- end
50
+ # This is called in the new/create actions to determine the initial attributes for new
51
+ # records. It should return a hash of attributes which match what the user
52
+ # is authorized to create.
53
+ def attributes_for(action, abstract_model)
54
+ @controller.current_ability.attributes_for(action, abstract_model && abstract_model.model)
34
55
  end
35
56
 
36
- def resolve_with_compatibility(action, subject)
57
+ private
58
+
59
+ def resolve_action_and_subject(action, abstract_model, model_object)
60
+ subject = model_object || abstract_model && abstract_model.model
37
61
  if subject
38
62
  [action, subject]
39
63
  else