rails_admin 3.0.0.beta2 → 3.0.0.rc3

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.

Potentially problematic release.


This version of rails_admin might be problematic. Click here for more details.

Files changed (261) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -9
  3. data/Rakefile +11 -0
  4. data/app/assets/javascripts/{rails_admin.js → rails_admin/application.js} +4 -4
  5. data/app/assets/stylesheets/rails_admin/application.scss +31 -0
  6. data/app/controllers/rails_admin/application_controller.rb +1 -1
  7. data/app/controllers/rails_admin/main_controller.rb +12 -21
  8. data/app/helpers/rails_admin/application_helper.rb +43 -22
  9. data/app/helpers/rails_admin/form_builder.rb +3 -3
  10. data/app/helpers/rails_admin/main_helper.rb +1 -1
  11. data/app/views/kaminari/ra-twitter-bootstrap/_gap.html.erb +2 -2
  12. data/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.erb +4 -4
  13. data/app/views/kaminari/ra-twitter-bootstrap/_page.html.erb +4 -4
  14. data/app/views/kaminari/ra-twitter-bootstrap/_paginator.html.erb +12 -10
  15. data/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.erb +4 -4
  16. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.erb +4 -4
  17. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.erb +6 -4
  18. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.erb +4 -4
  19. data/app/views/layouts/rails_admin/_head.html.erb +2 -2
  20. data/app/views/layouts/rails_admin/_navigation.html.erb +12 -16
  21. data/app/views/layouts/rails_admin/_secondary_navigation.html.erb +8 -8
  22. data/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +1 -5
  23. data/app/views/layouts/rails_admin/application.html.erb +4 -7
  24. data/app/views/layouts/rails_admin/{pjax.html.erb → content.html.erb} +7 -5
  25. data/app/views/layouts/rails_admin/modal.js.erb +1 -1
  26. data/app/views/rails_admin/main/_dashboard_history.html.erb +1 -1
  27. data/app/views/rails_admin/main/_delete_notice.html.erb +2 -2
  28. data/app/views/rails_admin/main/_form_boolean.html.erb +6 -8
  29. data/app/views/rails_admin/main/_form_colorpicker.html.erb +5 -1
  30. data/app/views/rails_admin/main/_form_datetime.html.erb +8 -7
  31. data/app/views/rails_admin/main/_form_enumeration.html.erb +5 -1
  32. data/app/views/rails_admin/main/_form_file_upload.html.erb +1 -1
  33. data/app/views/rails_admin/main/_form_filtering_multiselect.html.erb +14 -14
  34. data/app/views/rails_admin/main/_form_filtering_select.html.erb +16 -21
  35. data/app/views/rails_admin/main/_form_multiple_file_upload.html.erb +1 -1
  36. data/app/views/rails_admin/main/_form_nested_many.html.erb +4 -4
  37. data/app/views/rails_admin/main/_form_nested_one.html.erb +4 -4
  38. data/app/views/rails_admin/main/_form_polymorphic_association.html.erb +11 -6
  39. data/app/views/rails_admin/main/_submit_buttons.html.erb +8 -8
  40. data/app/views/rails_admin/main/bulk_delete.html.erb +1 -1
  41. data/app/views/rails_admin/main/dashboard.html.erb +4 -4
  42. data/app/views/rails_admin/main/delete.html.erb +1 -1
  43. data/app/views/rails_admin/main/edit.html.erb +1 -1
  44. data/app/views/rails_admin/main/export.html.erb +35 -32
  45. data/app/views/rails_admin/main/history.html.erb +16 -14
  46. data/app/views/rails_admin/main/index.html.erb +39 -36
  47. data/app/views/rails_admin/main/new.html.erb +1 -1
  48. data/config/locales/rails_admin.en.yml +0 -1
  49. data/lib/generators/rails_admin/install_generator.rb +8 -7
  50. data/lib/generators/rails_admin/templates/webpack.config.js +0 -3
  51. data/lib/rails_admin/abstract_model.rb +3 -4
  52. data/lib/rails_admin/adapters/active_record/object_extension.rb +1 -1
  53. data/lib/rails_admin/adapters/active_record/property.rb +1 -1
  54. data/lib/rails_admin/adapters/active_record.rb +8 -3
  55. data/lib/rails_admin/adapters/mongoid/property.rb +3 -3
  56. data/lib/rails_admin/adapters/mongoid.rb +4 -4
  57. data/lib/rails_admin/config/actions/base.rb +1 -6
  58. data/lib/rails_admin/config/actions/dashboard.rb +13 -9
  59. data/lib/rails_admin/config/actions/delete.rb +4 -0
  60. data/lib/rails_admin/config/actions/edit.rb +4 -0
  61. data/lib/rails_admin/config/actions/export.rb +2 -1
  62. data/lib/rails_admin/config/actions/index.rb +2 -1
  63. data/lib/rails_admin/config/actions/new.rb +7 -1
  64. data/lib/rails_admin/config/actions/show_in_app.rb +0 -4
  65. data/lib/rails_admin/config/fields/association.rb +6 -1
  66. data/lib/rails_admin/config/fields/base.rb +3 -3
  67. data/lib/rails_admin/config/fields/factories/active_storage.rb +2 -1
  68. data/lib/rails_admin/config/fields/factories/association.rb +4 -4
  69. data/lib/rails_admin/config/fields/factories/carrierwave.rb +2 -1
  70. data/lib/rails_admin/config/fields/factories/devise.rb +2 -1
  71. data/lib/rails_admin/config/fields/factories/dragonfly.rb +2 -1
  72. data/lib/rails_admin/config/fields/factories/paperclip.rb +2 -1
  73. data/lib/rails_admin/config/fields/types/action_text.rb +1 -1
  74. data/lib/rails_admin/config/fields/types/date.rb +7 -0
  75. data/lib/rails_admin/config/fields/types/datetime.rb +11 -5
  76. data/lib/rails_admin/config/fields/types/has_many_association.rb +4 -0
  77. data/lib/rails_admin/config/fields/types/has_one_association.rb +4 -0
  78. data/lib/rails_admin/config/fields/types/time.rb +9 -0
  79. data/lib/rails_admin/config/has_fields.rb +4 -0
  80. data/lib/rails_admin/config/model.rb +8 -0
  81. data/lib/rails_admin/config/sections/list.rb +4 -4
  82. data/lib/rails_admin/config.rb +18 -4
  83. data/lib/rails_admin/engine.rb +6 -13
  84. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +2 -2
  85. data/lib/rails_admin/support/datetime.rb +50 -53
  86. data/lib/rails_admin/support/esmodule_preprocessor.rb +2 -1
  87. data/lib/rails_admin/version.rb +1 -1
  88. data/package.json +7 -5
  89. data/src/rails_admin/base.js +3 -6
  90. data/src/rails_admin/filter-box.js +36 -37
  91. data/src/rails_admin/filtering-select.js +3 -6
  92. data/src/rails_admin/i18n.js +0 -3
  93. data/src/rails_admin/nested-form-hooks.js +16 -8
  94. data/src/rails_admin/remote-form.js +18 -15
  95. data/src/rails_admin/styles/base/theming.scss +80 -155
  96. data/src/rails_admin/styles/base/variables.scss +2 -0
  97. data/src/rails_admin/styles/base.scss +8 -45
  98. data/src/rails_admin/styles/filtering-multiselect.scss +2 -2
  99. data/src/rails_admin/styles/filtering-select.scss +1 -1
  100. data/src/rails_admin/styles/widgets.scss +1 -10
  101. data/src/rails_admin/ui.js +19 -57
  102. data/src/rails_admin/widgets.js +38 -48
  103. data/vendor/assets/javascripts/rails_admin/bootstrap.js +5046 -0
  104. data/vendor/assets/javascripts/rails_admin/flatpickr-with-locales.js +10683 -0
  105. data/vendor/assets/javascripts/rails_admin/popper.js +1974 -0
  106. data/vendor/assets/stylesheets/rails_admin/bootstrap/_accordion.scss +118 -0
  107. data/vendor/assets/stylesheets/rails_admin/bootstrap/_alert.scss +57 -0
  108. data/vendor/assets/stylesheets/rails_admin/bootstrap/_badge.scss +29 -0
  109. data/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumb.scss +28 -0
  110. data/vendor/assets/stylesheets/rails_admin/bootstrap/_button-group.scss +139 -0
  111. data/vendor/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +64 -110
  112. data/vendor/assets/stylesheets/rails_admin/bootstrap/_card.scss +216 -0
  113. data/vendor/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +162 -176
  114. data/vendor/assets/stylesheets/rails_admin/bootstrap/_close.scss +31 -26
  115. data/vendor/assets/stylesheets/rails_admin/bootstrap/_containers.scss +41 -0
  116. data/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdown.scss +240 -0
  117. data/vendor/assets/stylesheets/rails_admin/bootstrap/_forms.scss +9 -538
  118. data/vendor/assets/stylesheets/rails_admin/bootstrap/_functions.scss +302 -0
  119. data/vendor/assets/stylesheets/rails_admin/bootstrap/_grid.scss +18 -69
  120. data/vendor/assets/stylesheets/rails_admin/bootstrap/_helpers.scss +9 -0
  121. data/vendor/assets/stylesheets/rails_admin/bootstrap/_images.scss +42 -0
  122. data/vendor/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +127 -84
  123. data/vendor/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +26 -22
  124. data/vendor/assets/stylesheets/rails_admin/bootstrap/_modal.scss +209 -0
  125. data/vendor/assets/stylesheets/rails_admin/bootstrap/_nav.scss +139 -0
  126. data/vendor/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +218 -542
  127. data/vendor/assets/stylesheets/rails_admin/bootstrap/_offcanvas.scss +83 -0
  128. data/vendor/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +46 -70
  129. data/vendor/assets/stylesheets/rails_admin/bootstrap/_placeholders.scss +51 -0
  130. data/vendor/assets/stylesheets/rails_admin/bootstrap/_popover.scss +158 -0
  131. data/vendor/assets/stylesheets/rails_admin/bootstrap/_progress.scss +48 -0
  132. data/vendor/assets/stylesheets/rails_admin/bootstrap/_reboot.scss +625 -0
  133. data/vendor/assets/stylesheets/rails_admin/bootstrap/_root.scss +54 -0
  134. data/vendor/assets/stylesheets/rails_admin/bootstrap/_spinners.scss +69 -0
  135. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tables.scss +100 -178
  136. data/vendor/assets/stylesheets/rails_admin/bootstrap/_toasts.scss +51 -0
  137. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +97 -77
  138. data/vendor/assets/stylesheets/rails_admin/bootstrap/_transitions.scss +27 -0
  139. data/vendor/assets/stylesheets/rails_admin/bootstrap/_type.scss +54 -254
  140. data/vendor/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +628 -55
  141. data/vendor/assets/stylesheets/rails_admin/bootstrap/_variables.scss +1572 -781
  142. data/vendor/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +38 -35
  143. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_floating-labels.scss +63 -0
  144. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-check.scss +152 -0
  145. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-control.scss +219 -0
  146. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-range.scss +91 -0
  147. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-select.scss +72 -0
  148. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-text.scss +11 -0
  149. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_input-group.scss +121 -0
  150. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_labels.scss +36 -0
  151. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_validation.scss +12 -0
  152. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_clearfix.scss +3 -0
  153. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_colored-links.scss +12 -0
  154. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_position.scss +30 -0
  155. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_ratio.scss +26 -0
  156. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stacks.scss +15 -0
  157. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stretched-link.scss +15 -0
  158. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_text-truncation.scss +7 -0
  159. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_visually-hidden.scss +8 -0
  160. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_vr.scss +8 -0
  161. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alert.scss +11 -0
  162. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_backdrop.scss +14 -0
  163. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +72 -12
  164. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_box-shadow.scss +18 -0
  165. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_breakpoints.scss +127 -0
  166. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +113 -30
  167. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_caret.scss +64 -0
  168. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +5 -18
  169. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_color-scheme.scss +7 -0
  170. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_container.scss +9 -0
  171. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_deprecate.scss +10 -0
  172. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +130 -70
  173. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +27 -38
  174. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +127 -98
  175. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +6 -24
  176. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +13 -20
  177. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_lists.scss +7 -0
  178. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +24 -16
  179. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-text.scss +17 -0
  180. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +1 -1
  181. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-variants.scss +21 -0
  182. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/{_text-overflow.scss → _text-truncate.scss} +2 -2
  183. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_transition.scss +26 -0
  184. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_utilities.scss +89 -0
  185. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_visually-hidden.scss +29 -0
  186. data/vendor/assets/stylesheets/rails_admin/bootstrap/utilities/_api.scss +47 -0
  187. data/vendor/assets/stylesheets/rails_admin/bootstrap/vendor/_rfs.scss +354 -0
  188. data/vendor/assets/stylesheets/rails_admin/flatpickr.css +791 -0
  189. metadata +88 -94
  190. data/app/assets/stylesheets/rails_admin.scss.erb +0 -76
  191. data/lib/generators/rails_admin/templates/environment.js +0 -6
  192. data/src/rails_admin/styles/themes/cerulean/mixins.scss +0 -0
  193. data/src/rails_admin/styles/themes/cerulean/theming.scss +0 -135
  194. data/src/rails_admin/styles/themes/cerulean/variables.scss +0 -830
  195. data/src/rails_admin/styles/themes/default/mixins.scss +0 -8
  196. data/src/rails_admin/styles/themes/default/theming.scss +0 -11
  197. data/src/rails_admin/styles/themes/default/variables.scss +0 -12
  198. data/src/rails_admin/vendor/jquery.pjax.js +0 -899
  199. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -164
  200. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -95
  201. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -125
  202. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -246
  203. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -212
  204. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -165
  205. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -358
  206. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -123
  207. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -172
  208. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -155
  209. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -677
  210. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -59
  211. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -1782
  212. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -13
  213. data/vendor/assets/javascripts/rails_admin/bootstrap-datetimepicker.js +0 -2611
  214. data/vendor/assets/javascripts/rails_admin/jquery.pjax.js +0 -898
  215. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +0 -18085
  216. data/vendor/assets/stylesheets/rails_admin/_bootstrap-datetimepicker.scss +0 -343
  217. data/vendor/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -68
  218. data/vendor/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -57
  219. data/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -26
  220. data/vendor/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -240
  221. data/vendor/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -68
  222. data/vendor/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -35
  223. data/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -215
  224. data/vendor/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -237
  225. data/vendor/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -166
  226. data/vendor/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -48
  227. data/vendor/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -66
  228. data/vendor/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -56
  229. data/vendor/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -150
  230. data/vendor/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -242
  231. data/vendor/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -425
  232. data/vendor/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -55
  233. data/vendor/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -243
  234. data/vendor/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -133
  235. data/vendor/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -101
  236. data/vendor/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -105
  237. data/vendor/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -34
  238. data/vendor/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -174
  239. data/vendor/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -150
  240. data/vendor/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -258
  241. data/vendor/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -38
  242. data/vendor/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -29
  243. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -14
  244. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -11
  245. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -7
  246. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -81
  247. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -21
  248. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -12
  249. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -10
  250. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -9
  251. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -8
  252. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -24
  253. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -10
  254. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -8
  255. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -21
  256. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -10
  257. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -9
  258. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -28
  259. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -11
  260. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -219
  261. data/vendor/assets/stylesheets/rails_admin/bootstrap-datetimepicker-build.scss +0 -16
@@ -4,16 +4,18 @@
4
4
  <% sort = params[:sort] %>
5
5
  <% sort_reverse = params[:sort_reverse] %>
6
6
  <% path_method = params[:id] ? "history_show_path" : "history_index_path" %>
7
- <%= form_tag("", method: "get", class: "search pjax-form form-inline") do %>
8
- <div class="well">
9
- <div class="input-group">
10
- <input class="input-small form-control input-small" name="query" placeholder="<%= t("admin.misc.filter") %>" type="search" value="<%= query %>"></input>
11
- <span class="input-group-btn">
12
- <button class="btn btn-primary" data-disable-with="<%= '<i class="fas fa-sync"></i> '.html_safe + t('admin.misc.refresh') %>" type="submit">
13
- <i class="fas fa-sync"></i>
14
- <%= t("admin.misc.refresh") %>
15
- </button>
16
- </span>
7
+ <%= form_tag("", method: "get", class: "search form-inline") do %>
8
+ <div class="card mb-3 p-3 bg-light">
9
+ <div class="row">
10
+ <div class="col-sm-6">
11
+ <div class="input-group">
12
+ <input class="form-control" name="query" placeholder="<%= t("admin.misc.filter") %>" type="search" value="<%= query %>" />
13
+ <button class="btn btn-primary" data-disable-with="<%= '<i class="fas fa-sync"></i> ' + t('admin.misc.refresh') %>" type="submit">
14
+ <i class="fas fa-sync"></i>
15
+ <%= t("admin.misc.refresh") %>
16
+ </button>
17
+ </div>
18
+ </div>
17
19
  </div>
18
20
  </div>
19
21
  <% end %>
@@ -30,7 +32,7 @@
30
32
  <% selected = (sort == property_name) %>
31
33
  <% sort_direction = (sort_reverse ? "headerSortUp" : "headerSortDown" if selected) %>
32
34
  <% sort_location = send(path_method, params.except("sort_reverse").merge(model_name: @abstract_model.to_param, sort: property_name).merge(selected && sort_reverse != "true" ? {sort_reverse: "true"} : {})) %>
33
- <th class="header pjax <%= column[:css_class] %> <%= sort_direction if selected %>" data-href="<%= sort_location %>">
35
+ <th class="header <%= column[:css_class] %> <%= sort_direction if selected %>">
34
36
  <%= column[:link_text] %>
35
37
  </th>
36
38
  <% end %>
@@ -52,7 +54,7 @@
52
54
  <% label = o.send(@abstract_model.config.object_label_method) %>
53
55
  <% if show_action = action(:show, @abstract_model, o) %>
54
56
  <td>
55
- <%= link_to(label, url_for(action: show_action.action_name, model_name: @abstract_model.to_param, id: o.id), class: 'pjax') %>
57
+ <%= link_to(label, url_for(action: show_action.action_name, model_name: @abstract_model.to_param, id: o.id)) %>
56
58
  </td>
57
59
  <% else %>
58
60
  <td>
@@ -73,6 +75,6 @@
73
75
  </tbody>
74
76
  </table>
75
77
  <% unless params[:all] || !@history.respond_to?(:current_page) %>
76
- <%= paginate(@history, theme: 'ra-twitter-bootstrap', remote: true) %>
77
- <%= link_to(t("admin.misc.show_all"), send(path_method, params.merge(all: true)), class: "show-all btn pjax") unless (tc = @history.total_count) <= @history.size || tc > 100 %>
78
+ <%= paginate(@history, theme: 'ra-twitter-bootstrap') %>
79
+ <%= link_to(t("admin.misc.show_all"), send(path_method, params.merge(all: true)), class: "show-all btn btn-light") unless (tc = @history.total_count) <= @history.size || tc > 100 %>
78
80
  <% end %>
@@ -1,6 +1,6 @@
1
1
  <%
2
2
  query = params[:query]
3
- params = request.params.except(:authenticity_token, :action, :controller, :utf8, :bulk_export, :_pjax)
3
+ params = request.params.except(:authenticity_token, :action, :controller, :utf8, :bulk_export)
4
4
  params.delete(:query) if params[:query].blank?
5
5
  params.delete(:sort_reverse) unless params[:sort_reverse] == 'true'
6
6
  sort_reverse = params[:sort_reverse]
@@ -18,16 +18,13 @@
18
18
  %>
19
19
 
20
20
  <% content_for :contextual_tabs do %>
21
- <% if checkboxes %>
22
- <%= bulk_menu %>
23
- <% end %>
24
21
  <% if filterable_fields.present? %>
25
- <li class="dropdown" style="float:right">
26
- <a class="dropdown-toggle" data-toggle="dropdown" href="#">
22
+ <li class="nav-item dropdown">
23
+ <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#">
27
24
  <%= t('admin.misc.add_filter') %>
28
25
  <b class="caret"></b>
29
26
  </a>
30
- <ul class="dropdown-menu" id="filters" style="left:auto; right:0;">
27
+ <ul class="dropdown-menu dropdown-menu-end" id="filters">
31
28
  <% filterable_fields.each do |field| %>
32
29
  <%
33
30
  field_options = case field.type
@@ -40,6 +37,7 @@
40
37
  <li>
41
38
  <a
42
39
  href="#"
40
+ class="dropdown-item"
43
41
  data-field-label="<%= field.label %>"
44
42
  data-field-name="<%= field.name %>"
45
43
  data-field-operator="<%= field.default_filter_operator %>"
@@ -47,7 +45,7 @@
47
45
  data-field-required="<%= field.required.to_s %>"
48
46
  data-field-type="<%= field.type %>"
49
47
  data-field-value=""
50
- data-field-datetimepicker-format="<%= field.try(:momentjs_format) %>"
48
+ data-field-datetimepicker-options="<%= field.try(:datepicker_options).try(:to_json) %>"
51
49
  >
52
50
  <%= field.label %>
53
51
  </a>
@@ -56,6 +54,9 @@
56
54
  </ul>
57
55
  </li>
58
56
  <% end %>
57
+ <% if checkboxes %>
58
+ <%= bulk_menu %>
59
+ <% end %>
59
60
  <% end %>
60
61
 
61
62
  <style>
@@ -66,42 +67,44 @@
66
67
  </style>
67
68
 
68
69
  <div id="list">
69
- <%= form_tag(index_path(params.except(*%w[page f query])), method: :get, class: "pjax-form form-inline") do %>
70
- <div class="well">
71
- <span data-options="<%= ordered_filter_options.to_json %>" id="filters_box"></span>
70
+ <%= form_tag(index_path(params.except(*%w[page f query])), method: :get) do %>
71
+ <div class="card mb-3 p-3 bg-light">
72
+ <div class="row" data-options="<%= ordered_filter_options.to_json %>" id="filters_box"></div>
72
73
  <hr class="filters_box" style="display:<%= ordered_filters.empty? ? 'none' : 'block' %>"/>
73
- <div class="input-group">
74
- <input class="form-control input-small" name="query" placeholder="<%= t("admin.misc.filter") %>" type="search" value="<%= query %>"></input>
75
- <span class="input-group-btn">
76
- <button class="btn btn-primary" data-disable-with="<%= '<i class="fas fa-sync"></i>' + t('admin.misc.refresh') %>" type="submit">
77
- <i class="fas fa-sync"></i>
78
- <%= t('admin.misc.refresh') %>
79
- </button>
80
- <button class="btn btn-info" id="remove_filter" title="<%= t('admin.misc.reset_filters') %>">
81
- <i class="fas fa-times"></i>
82
- </button>
83
- </span>
74
+ <div class="row">
75
+ <div class="col-sm-6">
76
+ <div class="input-group">
77
+ <input class="form-control" name="query" placeholder="<%= t("admin.misc.filter") %>" type="search" value="<%= query %>" />
78
+ <button class="btn btn-primary" data-disable-with="<%= '<i class="fas fa-sync"></i>' + t('admin.misc.refresh') %>" type="submit">
79
+ <i class="fas fa-sync"></i>
80
+ <%= t('admin.misc.refresh') %>
81
+ </button>
82
+ <button class="btn btn-info" id="remove_filter" title="<%= t('admin.misc.reset_filters') %>">
83
+ <i class="fas fa-times"></i>
84
+ </button>
85
+ </div>
86
+ </div>
87
+ <div class="col-sm-6 text-end">
88
+ <% if export_action %>
89
+ <%= link_to wording_for(:link, export_action), export_path(params.except('page')), class: 'btn btn-info' %>
90
+ <% end %>
91
+ </div>
84
92
  </div>
85
- <% if export_action %>
86
- <span style="float:right">
87
- <%= link_to wording_for(:link, export_action), export_path(params.except('page')), class: 'btn btn-info' %>
88
- </span>
89
- <% end %>
90
93
  </div>
91
94
  <% end %>
92
95
  <% unless @model_config.list.scopes.empty? %>
93
96
  <ul class="nav nav-tabs" id="scope_selector">
94
97
  <% @model_config.list.scopes.each_with_index do |scope, index| %>
95
98
  <% scope = '_all' if scope.nil? %>
96
- <li class="<%= 'active' if scope.to_s == params[:scope] || (params[:scope].blank? && index == 0) %>">
97
- <a class="pjax" href="<%= index_path(params.merge(scope: scope, page: nil)) %>">
99
+ <li class="nav-item">
100
+ <a href="<%= index_path(params.merge(scope: scope, page: nil)) %>" class="nav-link <%= 'active' if scope.to_s == params[:scope] || (params[:scope].blank? && index == 0) %>">
98
101
  <%= I18n.t("admin.scopes.#{@abstract_model.to_param}.#{scope}", default: I18n.t("admin.scopes.#{scope}", default: scope.to_s.titleize)) %>
99
102
  </a>
100
103
  </li>
101
104
  <% end %>
102
105
  </ul>
103
106
  <% end %>
104
- <%= form_tag bulk_action_path(model_name: @abstract_model.to_param), method: :post, id: "bulk_form", class: ["form"] do %>
107
+ <%= form_tag bulk_action_path(model_name: @abstract_model.to_param), method: :post, id: "bulk_form", class: ["form", "mb-3"] do %>
105
108
  <%= hidden_field_tag :bulk_action %>
106
109
  <% if description.present? %>
107
110
  <p>
@@ -116,7 +119,7 @@
116
119
  <tr>
117
120
  <% if checkboxes %>
118
121
  <th class="shrink sticky">
119
- <input class="toggle" type="checkbox"></input>
122
+ <input class="toggle" type="checkbox" />
120
123
  </th>
121
124
  <% end %>
122
125
  <% properties.each do |property| %>
@@ -125,7 +128,7 @@
125
128
  <% sort_location = index_path params.except('sort_reverse').except('page').merge(sort: property.name).merge(selected && sort_reverse != "true" ? {sort_reverse: "true"} : {}) %>
126
129
  <% sort_direction = (sort_reverse == 'true' ? "headerSortUp" : "headerSortDown" if selected) %>
127
130
  <% end %>
128
- <th class="<%= [property.sortable && "header pjax", property.sortable && sort_direction, property.sticky? && 'sticky', property.css_class, property.type_css_class].compact.join(' ') %>" data-href="<%= property.sortable && sort_location %>" rel="tooltip" title="<%= property.hint %>">
131
+ <th class="<%= [property.sortable && "header", property.sortable && sort_direction, property.sticky? && 'sticky', property.css_class, property.type_css_class].select(&:present?).join(' ') %>" data-href="<%= property.sortable && sort_location %>" rel="tooltip" title="<%= property.hint %>">
129
132
  <%= property.label %>
130
133
  </th>
131
134
  <% end %>
@@ -142,7 +145,7 @@
142
145
  <% end %>
143
146
  <% properties.map{ |property| property.bind(:object, object) }.each do |property| %>
144
147
  <% value = property.pretty_value %>
145
- <td class="<%= [property.sticky? && 'sticky', property.css_class, property.type_css_class].compact.join(' ') %>" title="<%= strip_tags(value.to_s) %>">
148
+ <td class="<%= [property.sticky? && 'sticky', property.css_class, property.type_css_class].select(&:present?).join(' ') %>" title="<%= strip_tags(value.to_s) %>">
146
149
  <%= value %>
147
150
  </td>
148
151
  <% end %>
@@ -166,19 +169,19 @@
166
169
  <% if @model_config.list.limited_pagination %>
167
170
  <div class="row">
168
171
  <div class="col-md-6">
169
- <%= paginate(@objects, theme: 'ra-twitter-bootstrap/without_count', total_pages: Float::INFINITY, remote: true) %>
172
+ <%= paginate(@objects, theme: 'ra-twitter-bootstrap/without_count', total_pages: Float::INFINITY) %>
170
173
  </div>
171
174
  </div>
172
175
  <% elsif @objects.respond_to?(:total_count) %>
173
176
  <% total_count = @objects.total_count.to_i %>
174
177
  <div class="row">
175
178
  <div class="col-md-6">
176
- <%= paginate(@objects, theme: 'ra-twitter-bootstrap', remote: true) %>
179
+ <%= paginate(@objects, theme: 'ra-twitter-bootstrap') %>
177
180
  </div>
178
181
  </div>
179
182
  <div class="row">
180
183
  <div class="col-md-6">
181
- <%= link_to(t("admin.misc.show_all"), index_path(params.merge(all: true)), class: "show-all btn btn-default clearfix pjax") unless total_count > 100 || total_count <= @objects.to_a.size %>
184
+ <%= link_to(t("admin.misc.show_all"), index_path(params.merge(all: true)), class: "show-all btn btn-light clearfix") unless total_count > 100 || total_count <= @objects.to_a.size %>
182
185
  </div>
183
186
  </div>
184
187
  <div class="clearfix total-count">
@@ -1,3 +1,3 @@
1
- <%= rails_admin_form_for @object, url: new_path(model_name: @abstract_model.to_param), as: @abstract_model.param_key, html: { multipart: true, class: "form-horizontal denser", data: { title: @page_name } } do |form| %>
1
+ <%= rails_admin_form_for @object, url: new_path(model_name: @abstract_model.to_param), as: @abstract_model.param_key, html: { multipart: true, class: "main", data: { title: @page_name } } do |form| %>
2
2
  <%= form.generate action: :create %>
3
3
  <% end %>
@@ -21,7 +21,6 @@ en:
21
21
  too_many_objects: "Too many objects, use search box above"
22
22
  no_objects: "No objects found"
23
23
  clear: Clear
24
- loading: "Loading..."
25
24
  toggle_navigation: Toggle navigation
26
25
  home:
27
26
  name: "Home"
@@ -8,12 +8,16 @@ module RailsAdmin
8
8
  include Generators::Utils::InstanceMethods
9
9
 
10
10
  argument :_namespace, type: :string, required: false, desc: 'RailsAdmin url namespace'
11
- class_option :asset, type: :string, required: false, default: nil, desc: 'Asset delivery method [options: webpack, webpacker, sprockets]'
11
+ class_option :asset, type: :string, required: false, default: nil, desc: 'Asset delivery method [options: webpacker, sprockets]'
12
12
  desc 'RailsAdmin installation generator'
13
13
 
14
14
  def install
15
- namespace = ask_for('Where do you want to mount rails_admin?', 'admin', _namespace)
16
- route("mount RailsAdmin::Engine => '/#{namespace}', as: 'rails_admin'")
15
+ if File.read(File.join(destination_root, 'config/routes.rb')).include?('mount RailsAdmin::Engine')
16
+ display "Skipped route addition, since it's already there"
17
+ else
18
+ namespace = ask_for('Where do you want to mount rails_admin?', 'admin', _namespace)
19
+ route("mount RailsAdmin::Engine => '/#{namespace}', as: 'rails_admin'")
20
+ end
17
21
  if File.exist? File.join(destination_root, 'config/initializers/rails_admin.rb')
18
22
  insert_into_file 'config/initializers/rails_admin.rb', " config.asset_source = :#{asset}\n", after: "RailsAdmin.config do |config|\n"
19
23
  else
@@ -35,9 +39,7 @@ module RailsAdmin
35
39
  def asset
36
40
  return options['asset'] if options['asset']
37
41
 
38
- if Rails.root.join('webpack.config.js').exist?
39
- 'webpack'
40
- elsif defined?(Webpacker)
42
+ if defined?(Webpacker)
41
43
  'webpacker'
42
44
  else
43
45
  'sprockets'
@@ -53,7 +55,6 @@ module RailsAdmin
53
55
  @scss_relative_dir = '../stylesheets/'
54
56
  template 'rails_admin.js.erb', 'app/javascript/packs/rails_admin.js'
55
57
  template 'rails_admin.scss', 'app/javascript/stylesheets/rails_admin.scss'
56
- template 'environment.js', 'config/webpack/environment.js'
57
58
  end
58
59
 
59
60
  def configure_for_webpack
@@ -24,9 +24,6 @@ module.exports = {
24
24
  new webpack.optimize.LimitChunkCountPlugin({
25
25
  maxChunks: 1
26
26
  }),
27
- new webpack.ProvidePlugin({
28
- jQuery: "jquery"
29
- }),
30
27
  new MiniCssExtractPlugin(),
31
28
  ]
32
29
  }
@@ -19,7 +19,7 @@ module RailsAdmin
19
19
  def new(m)
20
20
  m = m.constantize unless m.is_a?(Class)
21
21
  (am = old_new(m)).model && am.adapter ? am : nil
22
- rescue *([LoadError, NameError] + (defined?(ActiveRecord) ? ['ActiveRecord::NoDatabaseError'.constantize] : []))
22
+ rescue *([LoadError, NameError] + (defined?(ActiveRecord) ? ['ActiveRecord::NoDatabaseError'.constantize, 'ActiveRecord::ConnectionNotEstablished'.constantize] : []))
23
23
  puts "[RailsAdmin] Could not load model #{m}, assuming model is non existing. (#{$ERROR_INFO})" unless Rails.env.test?
24
24
  nil
25
25
  end
@@ -86,9 +86,8 @@ module RailsAdmin
86
86
  associations.each do |association|
87
87
  case association.type
88
88
  when :has_one
89
- if child = object.send(association.name)
90
- yield(association, [child])
91
- end
89
+ child = object.send(association.name)
90
+ yield(association, [child]) if child
92
91
  when :has_many
93
92
  children = object.send(association.name)
94
93
  yield(association, Array.new(children))
@@ -13,7 +13,7 @@ module RailsAdmin
13
13
  end
14
14
 
15
15
  def #{association.name}_id=(item_id)
16
- self.#{association.name} = #{association.klass}.find_by_id(item_id)
16
+ self.#{association.name} = (#{association.klass}.find(item_id) rescue nil)
17
17
  end
18
18
  RUBY
19
19
  end
@@ -42,7 +42,7 @@ module RailsAdmin
42
42
  end
43
43
 
44
44
  def read_only?
45
- false
45
+ model.readonly_attributes.include? property.name.to_s
46
46
  end
47
47
 
48
48
  private
@@ -12,8 +12,9 @@ module RailsAdmin
12
12
  model.new(params).extend(ObjectExtension)
13
13
  end
14
14
 
15
- def get(id)
16
- return unless object = model.where(primary_key => id).first
15
+ def get(id, scope = scoped)
16
+ object = scope.where(primary_key => id).first
17
+ return unless object
17
18
 
18
19
  object.extend(ObjectExtension)
19
20
  end
@@ -80,7 +81,11 @@ module RailsAdmin
80
81
  when 'postgresql'
81
82
  ::ActiveRecord::Base.connection.select_one("SELECT ''::text AS str;").values.first.encoding
82
83
  when 'mysql2'
83
- ::ActiveRecord::Base.connection.raw_connection.encoding
84
+ if RUBY_ENGINE == 'jruby'
85
+ ::ActiveRecord::Base.connection.select_one("SELECT '' AS str;").values.first.encoding
86
+ else
87
+ ::ActiveRecord::Base.connection.raw_connection.encoding
88
+ end
84
89
  when 'oracle_enhanced'
85
90
  ::ActiveRecord::Base.connection.select_one('SELECT dummy FROM DUAL').values.first.encoding
86
91
  else
@@ -11,11 +11,11 @@ module RailsAdmin
11
11
  end
12
12
 
13
13
  def name
14
- property.name.to_sym
14
+ (property.options[:as] || property.name).to_sym
15
15
  end
16
16
 
17
17
  def pretty_name
18
- property.name.to_s.tr('_', ' ').capitalize
18
+ (property.options[:as] || property.name).to_s.tr('_', ' ').capitalize
19
19
  end
20
20
 
21
21
  def type
@@ -64,7 +64,7 @@ module RailsAdmin
64
64
  end
65
65
 
66
66
  def read_only?
67
- false
67
+ model.readonly_attributes.include? property.name.to_s
68
68
  end
69
69
 
70
70
  private
@@ -18,8 +18,8 @@ module RailsAdmin
18
18
  model.new(params).extend(ObjectExtension)
19
19
  end
20
20
 
21
- def get(id)
22
- object = model.find(id)
21
+ def get(id, scope = scoped)
22
+ object = scope.find(id)
23
23
  return nil unless object
24
24
 
25
25
  object.extend(ObjectExtension)
@@ -52,10 +52,10 @@ module RailsAdmin
52
52
  scope
53
53
  rescue NoMethodError => e
54
54
  if /page/.match?(e.message)
55
- e = e.exception <<-EOM.gsub(/^\s{12}/, '')
55
+ e = e.exception <<-ERROR.gsub(/^\s{12}/, '')
56
56
  #{e.message}
57
57
  If you don't have kaminari-mongoid installed, add `gem 'kaminari-mongoid'` to your Gemfile.
58
- EOM
58
+ ERROR
59
59
  end
60
60
  raise e
61
61
  end
@@ -49,7 +49,7 @@ module RailsAdmin
49
49
  (only.nil? || [only].flatten.collect(&:to_s).include?(bindings[:abstract_model].to_s)) &&
50
50
  ![except].flatten.collect(&:to_s).include?(bindings[:abstract_model].to_s) &&
51
51
  !bindings[:abstract_model].config.excluded?
52
- )
52
+ ) && (!respond_to?(:writable?) || writable?)
53
53
  end
54
54
 
55
55
  register_instance_option :authorized? do
@@ -73,11 +73,6 @@ module RailsAdmin
73
73
  false
74
74
  end
75
75
 
76
- # Render via pjax?
77
- register_instance_option :pjax? do
78
- link_target.blank?
79
- end
80
-
81
76
  # Target window [_self, _blank]
82
77
  register_instance_option :link_target do
83
78
  nil
@@ -18,21 +18,21 @@ module RailsAdmin
18
18
 
19
19
  register_instance_option :controller do
20
20
  proc do
21
- @history = @auditing_adapter&.latest(@action.auditing_versions_limit) || []
21
+ @history = @auditing_adapter&.latest(@action.auditing_versions_limit) if @action.history?
22
22
  if @action.statistics?
23
- @abstract_models = RailsAdmin::Config.visible_models(controller: self).collect(&:abstract_model)
23
+ model_configs = RailsAdmin::Config.visible_models(controller: self)
24
24
 
25
+ @abstract_models = model_configs.map(&:abstract_model)
25
26
  @most_recent_created = {}
26
27
  @count = {}
27
28
  @max = 0
28
- @abstract_models.each do |t|
29
- scope = @authorization_adapter&.query(:index, t)
30
- current_count = t.count({}, scope)
29
+ model_configs.each do |config|
30
+ scope = @authorization_adapter&.query(:index, config.abstract_model)
31
+ current_count = config.abstract_model.count({}, scope)
31
32
  @max = current_count > @max ? current_count : @max
32
- @count[t.model.name] = current_count
33
- next unless t.properties.detect { |c| c.name == :created_at }
34
-
35
- @most_recent_created[t.model.name] = t.model.last.try(:created_at)
33
+ name = config.abstract_model.model.name
34
+ @count[name] = current_count
35
+ @most_recent_created[name] = config.last_created_at
36
36
  end
37
37
  end
38
38
  render @action.template_name, status: @status_code || :ok
@@ -50,6 +50,10 @@ module RailsAdmin
50
50
  register_instance_option :statistics? do
51
51
  true
52
52
  end
53
+
54
+ register_instance_option :history? do
55
+ true
56
+ end
53
57
  end
54
58
  end
55
59
  end
@@ -46,6 +46,10 @@ module RailsAdmin
46
46
  register_instance_option :link_icon do
47
47
  'fas fa-times'
48
48
  end
49
+
50
+ register_instance_option :writable? do
51
+ !(bindings[:object] && bindings[:object].readonly?)
52
+ end
49
53
  end
50
54
  end
51
55
  end
@@ -44,6 +44,10 @@ module RailsAdmin
44
44
  register_instance_option :link_icon do
45
45
  'fas fa-pencil-alt'
46
46
  end
47
+
48
+ register_instance_option :writable? do
49
+ !(bindings[:object] && bindings[:object].readonly?)
50
+ end
47
51
  end
48
52
  end
49
53
  end
@@ -14,7 +14,8 @@ module RailsAdmin
14
14
 
15
15
  register_instance_option :controller do
16
16
  proc do
17
- if format = params[:json] && :json || params[:csv] && :csv || params[:xml] && :xml
17
+ format = params[:json] && :json || params[:csv] && :csv || params[:xml] && :xml
18
+ if format
18
19
  request.format = format
19
20
  @schema = HashHelper.symbolize(params[:schema].slice(:except, :include, :methods, :only).permit!.to_h) if params[:schema] # to_json and to_xml expect symbols for keys AND values.
20
21
  @objects = list_entries(@model_config, :export)
@@ -20,7 +20,8 @@ module RailsAdmin
20
20
 
21
21
  register_instance_option :breadcrumb_parent do
22
22
  parent_model = bindings[:abstract_model].try(:config).try(:parent)
23
- if am = parent_model && RailsAdmin.config(parent_model).try(:abstract_model)
23
+ am = parent_model && RailsAdmin.config(parent_model).try(:abstract_model)
24
+ if am
24
25
  [:index, am]
25
26
  else
26
27
  [:dashboard]
@@ -17,10 +17,12 @@ module RailsAdmin
17
17
  if request.get? # NEW
18
18
 
19
19
  @object = @abstract_model.new
20
+ @action = @action.with(@action.bindings.merge(object: @object))
20
21
  @authorization_adapter&.attributes_for(:new, @abstract_model)&.each do |name, value|
21
22
  @object.send("#{name}=", value)
22
23
  end
23
- if object_params = params[@abstract_model.param_key]
24
+ object_params = params[@abstract_model.param_key]
25
+ if object_params
24
26
  sanitize_params_for!(request.xhr? ? :modal : :create)
25
27
  @object.assign_attributes(@object.attributes.merge(object_params.to_h))
26
28
  end
@@ -55,6 +57,10 @@ module RailsAdmin
55
57
  register_instance_option :link_icon do
56
58
  'fas fa-plus'
57
59
  end
60
+
61
+ register_instance_option :writable? do
62
+ !(bindings[:object] && bindings[:object].readonly?)
63
+ end
58
64
  end
59
65
  end
60
66
  end
@@ -25,10 +25,6 @@ module RailsAdmin
25
25
  register_instance_option :link_icon do
26
26
  'fas fa-eye'
27
27
  end
28
-
29
- register_instance_option :pjax? do
30
- false
31
- end
32
28
  end
33
29
  end
34
30
  end
@@ -21,7 +21,7 @@ module RailsAdmin
21
21
  am = amc.abstract_model
22
22
  wording = associated.send(amc.object_label_method)
23
23
  can_see = !am.embedded? && (show_action = v.action(:show, am, associated))
24
- can_see ? v.link_to(wording, v.url_for(action: show_action.action_name, model_name: am.to_param, id: associated.id), class: 'pjax') : ERB::Util.html_escape(wording)
24
+ can_see ? v.link_to(wording, v.url_for(action: show_action.action_name, model_name: am.to_param, id: associated.id)) : ERB::Util.html_escape(wording)
25
25
  end.to_sentence.html_safe.presence || '-'
26
26
  end
27
27
 
@@ -89,6 +89,11 @@ module RailsAdmin
89
89
  association.primary_key
90
90
  end
91
91
 
92
+ # Returns params which are to be set in modals
93
+ def associated_prepopulate_params
94
+ {}
95
+ end
96
+
92
97
  # Reader whether this is a polymorphic association
93
98
  def polymorphic?
94
99
  association.polymorphic?
@@ -252,7 +252,7 @@ module RailsAdmin
252
252
  end
253
253
 
254
254
  def editable?
255
- !(@properties && @properties.read_only?)
255
+ !((@properties && @properties.read_only?) || (bindings[:object] && bindings[:object].readonly?))
256
256
  end
257
257
 
258
258
  # Is this an association
@@ -301,14 +301,14 @@ module RailsAdmin
301
301
  def value
302
302
  bindings[:object].safe_send(name)
303
303
  rescue NoMethodError => e
304
- raise e.exception <<-EOM.gsub(/^\s{10}/, '')
304
+ raise e.exception <<-ERROR.gsub(/^\s{10}/, '')
305
305
  #{e.message}
306
306
  If you want to use a RailsAdmin virtual field(= a field without corresponding instance method),
307
307
  you should declare 'formatted_value' in the field definition.
308
308
  field :#{name} do
309
309
  formatted_value{ bindings[:object].call_some_method }
310
310
  end
311
- EOM
311
+ ERROR
312
312
  end
313
313
 
314
314
  # Reader for nested attributes
@@ -16,7 +16,8 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
16
16
  ["#{name}_attachment".to_sym, "#{name}_blob".to_sym]
17
17
  end
18
18
  children_fields = associations.map do |child_name|
19
- next unless child_association = parent.abstract_model.associations.detect { |p| p.name.to_sym == child_name }
19
+ child_association = parent.abstract_model.associations.detect { |p| p.name.to_sym == child_name }
20
+ next unless child_association
20
21
 
21
22
  child_field = fields.detect { |f| f.name == child_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_association, fields)
22
23
  child_field.hide unless field == child_field
@@ -3,7 +3,8 @@ require 'rails_admin/config/fields/types'
3
3
  require 'rails_admin/config/fields/types/belongs_to_association'
4
4
 
5
5
  RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
6
- if association = parent.abstract_model.associations.detect { |a| a.foreign_key == properties.name && %i[belongs_to has_and_belongs_to_many].include?(a.type) }
6
+ association = parent.abstract_model.associations.detect { |a| a.foreign_key == properties.name && %i[belongs_to has_and_belongs_to_many].include?(a.type) }
7
+ if association
7
8
  field = RailsAdmin::Config::Fields::Types.load("#{association.polymorphic? ? :polymorphic : association.type}_association").new(parent, association.name, association)
8
9
  fields << field
9
10
 
@@ -15,9 +16,8 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
15
16
  end.collect { |k| association.send(k) }.compact
16
17
 
17
18
  parent.abstract_model.properties.select { |p| possible_field_names.include? p.name }.each do |column|
18
- unless child_field = fields.detect { |f| f.name.to_s == column.name.to_s }
19
- child_field = RailsAdmin::Config::Fields.default_factory.call(parent, column, fields)
20
- end
19
+ child_field = fields.detect { |f| f.name.to_s == column.name.to_s }
20
+ child_field ||= RailsAdmin::Config::Fields.default_factory.call(parent, column, fields)
21
21
  child_columns << child_field
22
22
  end
23
23