rails_admin 1.4.3 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +12 -4
  3. data/README.md +4 -7
  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 +59 -0
  9. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
  10. data/app/assets/javascripts/rails_admin/ra.widgets.js +379 -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/controllers/rails_admin/application_controller.rb +2 -0
  17. data/app/helpers/rails_admin/application_helper.rb +19 -4
  18. data/app/helpers/rails_admin/main_helper.rb +4 -4
  19. data/app/views/layouts/rails_admin/_head.html.haml +7 -0
  20. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
  21. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
  22. data/app/views/layouts/rails_admin/application.html.haml +3 -11
  23. data/app/views/layouts/rails_admin/pjax.html.haml +1 -5
  24. data/app/views/rails_admin/main/_form_action_text.html.haml +7 -0
  25. data/app/views/rails_admin/main/_form_file_upload.html.haml +4 -4
  26. data/app/views/rails_admin/main/_form_filtering_select.html.haml +1 -1
  27. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +7 -5
  28. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +18 -3
  29. data/app/views/rails_admin/main/dashboard.html.haml +1 -2
  30. data/app/views/rails_admin/main/export.html.haml +2 -2
  31. data/app/views/rails_admin/main/index.html.haml +19 -15
  32. data/app/views/rails_admin/main/show.html.haml +6 -7
  33. data/config/locales/rails_admin.en.yml +3 -0
  34. data/lib/generators/rails_admin/templates/initializer.erb +2 -2
  35. data/lib/rails_admin/abstract_model.rb +3 -3
  36. data/lib/rails_admin/adapters/active_record/abstract_object.rb +2 -2
  37. data/lib/rails_admin/adapters/active_record/property.rb +1 -5
  38. data/lib/rails_admin/adapters/active_record.rb +23 -10
  39. data/lib/rails_admin/adapters/mongoid/association.rb +1 -1
  40. data/lib/rails_admin/adapters/mongoid.rb +30 -13
  41. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +1 -3
  42. data/lib/rails_admin/bootstrap-sass.rb +7 -3
  43. data/lib/rails_admin/config/actions/base.rb +17 -1
  44. data/lib/rails_admin/config/actions/edit.rb +1 -3
  45. data/lib/rails_admin/config/actions/index.rb +3 -3
  46. data/lib/rails_admin/config/actions/new.rb +1 -3
  47. data/lib/rails_admin/config/configurable.rb +6 -4
  48. data/lib/rails_admin/config/fields/association.rb +1 -1
  49. data/lib/rails_admin/config/fields/base.rb +2 -2
  50. data/lib/rails_admin/config/fields/factories/action_text.rb +12 -0
  51. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  52. data/lib/rails_admin/config/fields/factories/shrine.rb +27 -0
  53. data/lib/rails_admin/config/fields/types/action_text.rb +30 -0
  54. data/lib/rails_admin/config/fields/types/active_record_enum.rb +3 -19
  55. data/lib/rails_admin/config/fields/types/active_storage.rb +1 -0
  56. data/lib/rails_admin/config/fields/types/all.rb +2 -1
  57. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +4 -0
  58. data/lib/rails_admin/config/fields/types/ck_editor.rb +7 -7
  59. data/lib/rails_admin/config/fields/types/code_mirror.rb +10 -12
  60. data/lib/rails_admin/config/fields/types/color.rb +2 -2
  61. data/lib/rails_admin/config/fields/types/file_upload.rb +6 -2
  62. data/lib/rails_admin/config/fields/types/froala.rb +9 -11
  63. data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
  64. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +1 -1
  65. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +15 -3
  66. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +17 -3
  67. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +7 -0
  68. data/lib/rails_admin/config/fields/types/shrine.rb +52 -0
  69. data/lib/rails_admin/config/fields/types/simple_mde.rb +8 -5
  70. data/lib/rails_admin/config/fields/types/string.rb +2 -2
  71. data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
  72. data/lib/rails_admin/config/fields/types/text.rb +2 -20
  73. data/lib/rails_admin/config/fields/types/wysihtml5.rb +14 -10
  74. data/lib/rails_admin/config/fields.rb +2 -1
  75. data/lib/rails_admin/config/has_groups.rb +1 -1
  76. data/lib/rails_admin/config/lazy_model.rb +4 -4
  77. data/lib/rails_admin/config/model.rb +5 -4
  78. data/lib/rails_admin/config/proxyable/proxy.rb +7 -9
  79. data/lib/rails_admin/config/proxyable.rb +13 -1
  80. data/lib/rails_admin/config/sections/list.rb +23 -0
  81. data/lib/rails_admin/config.rb +9 -7
  82. data/lib/rails_admin/engine.rb +1 -2
  83. data/lib/rails_admin/extension.rb +16 -4
  84. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +45 -21
  85. data/lib/rails_admin/extensions/controller_extension.rb +6 -0
  86. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +27 -10
  87. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +1 -3
  88. data/lib/rails_admin/support/csv_converter.rb +1 -1
  89. data/lib/rails_admin/version.rb +3 -3
  90. data/lib/rails_admin.rb +0 -1
  91. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  92. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  93. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +2671 -0
  94. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  95. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  96. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  97. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  98. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  99. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  100. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  101. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  102. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  103. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  104. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  105. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  106. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  107. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  108. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  109. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  110. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  111. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  112. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  113. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  114. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  115. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  116. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  117. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  118. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  119. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  120. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  121. data/{app → vendor}/assets/images/rails_admin/colorpicker/select.png +0 -0
  122. data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
  123. data/{app → vendor}/assets/images/rails_admin/colorpicker/slider.png +0 -0
  124. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -0
  125. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -0
  126. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -0
  127. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -0
  128. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -0
  129. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -0
  130. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -0
  131. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -0
  132. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -0
  133. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -0
  134. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -0
  135. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -0
  136. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
  137. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
  138. data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
  139. data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +1 -3
  140. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +9451 -3263
  141. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
  142. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
  143. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
  144. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
  145. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
  146. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
  147. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
  148. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
  149. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
  150. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
  151. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
  152. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
  153. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
  154. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
  155. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
  156. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
  157. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
  158. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
  159. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
  160. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
  161. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
  162. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
  163. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
  164. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
  165. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
  166. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
  167. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
  168. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
  169. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
  170. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
  171. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
  172. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
  173. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
  174. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
  175. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
  176. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
  177. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
  178. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
  179. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
  180. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
  181. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
  182. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
  183. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
  184. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
  185. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
  186. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
  187. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
  188. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
  189. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
  190. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
  191. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
  192. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
  193. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
  194. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
  195. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
  196. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
  197. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  198. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
  199. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
  200. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
  201. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
  202. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
  203. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
  204. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
  205. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
  206. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
  207. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
  208. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
  209. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
  210. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  211. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +2342 -0
  212. data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
  213. metadata +163 -170
  214. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  215. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -10
  216. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -58
  217. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -359
  218. data/app/assets/javascripts/rails_admin/ui.coffee +0 -102
  219. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  220. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  221. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
  222. data/lib/rails_admin/extensions/cancan.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2511d4339254d5f386a4b2730f4dd468526dc5bffec56a265113c003c8906b6
4
- data.tar.gz: bacfe19f0d8622834410c587a188061f1ed423a61e598bde8d23c8002b8e1a44
3
+ metadata.gz: b602512e6e725b80b4710d009beb60fffc8089f20a677579174f5af05ed7a728
4
+ data.tar.gz: b983654e17ee5f1a15bab17d2d5afbba7f06eb7d8b6f4be92112f5e9ad41ddf7
5
5
  SHA512:
6
- metadata.gz: 90a5aed673d2db9af5c31fa297a5e155cf9edbe23a281020cb30a7f07f644dfaf70b4fbddb6aaf806d8815f398c6861711441be6378d154c97736f7fcd6ebf13
7
- data.tar.gz: 44144612bdc0eb7be539d3d730b1a0bddfe4686161e322f56d05df758427959e4aba3ef73305e792038ae82cccaa410e72ba750f51be804674d2fd9ef08509cb
6
+ metadata.gz: d2ec664fd9c217fd62d3ca65af5718e095f8de4ac3919ea0fe29b2e8d203e984583dd11877aa1ff8c40e2e8a696e55f304f24312da87da08051ba0a2bc33c99a
7
+ data.tar.gz: d2350c08e53ba3ed67e65bdd75863f4fd02b7c26ace2fdcafae81363b6567d6c5db52bcb2631224d0f5d291e46a9e577187fdcdc4bbc6e96613083dd8266b948
data/Gemfile CHANGED
@@ -8,9 +8,9 @@ gem 'devise'
8
8
  group :active_record do
9
9
  gem 'paper_trail'
10
10
 
11
- platforms :ruby, :mswin, :mingw do
11
+ platforms :ruby, :mswin, :mingw, :x64_mingw do
12
12
  gem 'mysql2', '>= 0.3.14'
13
- gem 'sqlite3', '~> 1.3.0'
13
+ gem 'sqlite3', '>= 1.3'
14
14
  end
15
15
  end
16
16
 
@@ -19,7 +19,8 @@ group :development, :test do
19
19
  end
20
20
 
21
21
  group :test do
22
- gem 'carrierwave', '>= 0.8'
22
+ gem 'cancancan', '~> 3.0'
23
+ gem 'carrierwave', ['>= 2.0.0.rc', '< 3']
23
24
  gem 'coveralls'
24
25
  gem 'database_cleaner', ['>= 1.2', '!= 1.4.0', '!= 1.5.0']
25
26
  gem 'dragonfly', '~> 1.0'
@@ -32,13 +33,20 @@ group :test do
32
33
  gem 'pundit'
33
34
  gem 'rack-cache', require: 'rack/cache'
34
35
  gem 'rspec-rails', '>= 2.14'
35
- gem 'rubocop', '~> 0.41.2'
36
+ gem 'rspec-expectations', '!= 3.8.3'
37
+ gem 'rubocop', '~> 0.68.1'
38
+ gem 'rubocop-performance'
36
39
  gem 'simplecov', '>= 0.9', require: false
40
+ gem 'shrine', '~> 2.0'
41
+ gem 'shrine-memory'
37
42
  gem 'timecop', '>= 0.5'
38
43
 
39
44
  platforms :ruby_19 do
40
45
  gem 'tins', '~> 1.6.0', require: false
41
46
  end
47
+
48
+ # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
49
+ gem 'tzinfo-data', platforms: %i(mingw mswin x64_mingw jruby)
42
50
  end
43
51
 
44
52
  gemspec
data/README.md CHANGED
@@ -20,9 +20,7 @@ RailsAdmin is a Rails engine that provides an easy-to-use interface for managing
20
20
 
21
21
  ### [Action required] Security issue
22
22
 
23
- > **RailsAdmin prior to 1.3.0 have been reported to have XSS vulnerability.** We strongly recommend that you upgrade RailsAdmin to 1.3.0 or later as soon as possible, if you are on those versions. See [#2985](https://github.com/sferik/rails_admin/issues/2985) for the detail.
24
- >
25
- > Also, 1.0.0 and 1.1.0 is known to have [CSRF vulnerability](https://github.com/sferik/rails_admin/commit/b13e879eb93b661204e9fb5e55f7afa4f397537a), too.
23
+ **RailsAdmin 2.0.1, 2.0.0 and up to 1.4.2 have been reported to have XSS vulnerability.** We strongly recommend that you upgrade RailsAdmin to 2.0.2 (and higher) or 1.4.3 as soon as possible, if you are on those versions. See [d72090ec](https://github.com/sferik/rails_admin/commit/d72090ec6a07c3b9b7b48ab50f3d405f91ff4375) for the detail.
26
24
 
27
25
  ## Getting started
28
26
 
@@ -50,7 +48,7 @@ RailsAdmin is a Rails engine that provides an easy-to-use interface for managing
50
48
 
51
49
  ## Installation
52
50
 
53
- 1. On your gemfile: `gem 'rails_admin', '~> 1.3'`
51
+ 1. On your gemfile: `gem 'rails_admin', '~> 2.0'`
54
52
  2. Run `bundle install`
55
53
  3. Run `rails g rails_admin:install`
56
54
  4. Provide a namespace for the routes when asked
@@ -96,13 +94,12 @@ If you think you found a bug in RailsAdmin, you can [submit an issue](https://gi
96
94
  ## Supported Ruby Versions
97
95
  This library aims to support and is [tested against][travis] the following Ruby implementations:
98
96
 
99
- * Ruby 2.1
100
97
  * Ruby 2.2
101
98
  * Ruby 2.3
102
99
  * Ruby 2.4
103
100
  * Ruby 2.5
104
- * [Rubinius][]
101
+ * Ruby 2.6
102
+ * Ruby 2.7
105
103
  * [JRuby][]
106
104
 
107
- [rubinius]: http://rubinius.com
108
105
  [jruby]: http://jruby.org/
@@ -0,0 +1 @@
1
+ // override this file in your application to add custom behaviour
@@ -118,7 +118,7 @@
118
118
 
119
119
  /* Add all to selection */
120
120
  this.addAll.click(function(e){
121
- widget._select($('option', widget.collection));
121
+ widget._select($('option:not(:disabled)', widget.collection));
122
122
  e.preventDefault();
123
123
  widget.selection.trigger('change');
124
124
  });
@@ -31,21 +31,22 @@
31
31
  button: null,
32
32
  input: null,
33
33
  select: null,
34
+ filtering_select: null,
34
35
 
35
36
  _create: function() {
36
- var filtering_select = this.element.siblings(
37
+ this.filtering_select = this.element.siblings(
37
38
  '[data-input-for="' + this.element.attr('id') + '"]'
38
39
  );
39
40
 
40
41
  // When using the browser back and forward buttons, it is possible that
41
42
  // the autocomplete field will be cached which causes duplicate fields
42
43
  // to be generated.
43
- if (filtering_select.length > 0) {
44
- this.input = filtering_select.children('input');
45
- this.button = filtering_select.children('.input-group-btn');
44
+ if (this.filtering_select.length > 0) {
45
+ this.input = this.filtering_select.children('input');
46
+ this.button = this.filtering_select.children('.input-group-btn');
46
47
  } else {
47
48
  this.element.hide();
48
- filtering_select = this._inputGroup(this.element.attr('id'));
49
+ this.filtering_select = this._inputGroup(this.element.attr('id'));
49
50
  this.input = this._inputField();
50
51
  this.button = this._buttonField();
51
52
  }
@@ -56,7 +57,7 @@
56
57
  this._overloadRenderItem();
57
58
  this._autocompleteDropdownEvent(this.button);
58
59
 
59
- return filtering_select.append(this.input)
60
+ return this.filtering_select.append(this.input)
60
61
  .append(this.button)
61
62
  .insertAfter(this.element);
62
63
  },
@@ -201,7 +202,7 @@
201
202
  return $('<div>')
202
203
  .addClass('input-group filtering-select col-sm-2')
203
204
  .attr('data-input-for', inputFor)
204
- .css('float', 'left');
205
+ .css('float', this.element.css("float"));
205
206
  },
206
207
 
207
208
  _initAutocomplete: function() {
@@ -286,6 +287,7 @@
286
287
  this.input.remove();
287
288
  this.button.remove();
288
289
  this.element.show();
290
+ this.filtering_select.remove();
289
291
  $.Widget.prototype.destroy.call(this);
290
292
  }
291
293
  });
@@ -0,0 +1,28 @@
1
+ (function() {
2
+ var Locale;
3
+
4
+ this.RailsAdmin || (this.RailsAdmin = {});
5
+
6
+ this.RailsAdmin.I18n = Locale = (function() {
7
+ function Locale() {}
8
+
9
+ Locale.init = function(locale, translations) {
10
+ this.locale = locale;
11
+ this.translations = translations;
12
+ moment.locale(this.locale);
13
+ if (typeof this.translations === "string") {
14
+ this.translations = JSON.parse(this.translations);
15
+ }
16
+ };
17
+
18
+ Locale.t = function(key) {
19
+ var humanize;
20
+ humanize = key.charAt(0).toUpperCase() + key.replace(/_/g, " ").slice(1);
21
+ return this.translations[key] || humanize;
22
+ };
23
+
24
+ return Locale;
25
+
26
+ })();
27
+
28
+ }).call(this);
@@ -0,0 +1,59 @@
1
+ (function($) {
2
+ $(document).ready(function() {
3
+ return window.nestedFormEvents.insertFields = function(content, assoc, link) {
4
+ var tab_content;
5
+ tab_content = $(link).closest(".controls").siblings(".tab-content");
6
+ tab_content.append(content);
7
+ return tab_content.children().last();
8
+ };
9
+ });
10
+
11
+ $(document).on('nested:fieldAdded', 'form', function(content) {
12
+ var controls, field, nav, new_tab, one_to_one, parent_group, toggler;
13
+ field = content.field.addClass('tab-pane').attr('id', 'unique-id-' + (new Date().getTime()));
14
+ new_tab = $('<li></li>').append(
15
+ $('<a></a>').attr('data-toggle', 'tab').attr('href', '#' + field.attr('id')).text(field.children('.object-infos').data('object-label'))
16
+ )
17
+ parent_group = field.closest('.control-group');
18
+ controls = parent_group.children('.controls');
19
+ one_to_one = controls.data('nestedone') !== void 0;
20
+ nav = controls.children('.nav');
21
+ content = parent_group.children('.tab-content');
22
+ toggler = controls.find('.toggler');
23
+ nav.append(new_tab);
24
+ $(window.document).trigger('rails_admin.dom_ready', [field, parent_group]);
25
+ new_tab.children('a').tab('show');
26
+ if (!one_to_one) {
27
+ nav.select(':hidden').show('slow');
28
+ }
29
+ content.select(':hidden').show('slow');
30
+ toggler.addClass('active').removeClass('disabled').children('i').addClass('icon-chevron-down').removeClass('icon-chevron-right');
31
+ if (one_to_one) {
32
+ controls.find('.add_nested_fields').removeClass('add_nested_fields').text(field.children('.object-infos').data('object-label'));
33
+ }
34
+ });
35
+
36
+ $(document).on('nested:fieldRemoved', 'form', function(content) {
37
+ var add_button, controls, current_li, field, nav, one_to_one, parent_group, toggler;
38
+ field = content.field;
39
+ nav = field.closest(".control-group").children('.controls').children('.nav');
40
+ current_li = nav.children('li').has('a[href="#' + field.attr('id') + '"]');
41
+ parent_group = field.closest(".control-group");
42
+ controls = parent_group.children('.controls');
43
+ one_to_one = controls.data('nestedone') !== void 0;
44
+ toggler = controls.find('.toggler');
45
+ (current_li.next().length ? current_li.next() : current_li.prev()).children('a:first').tab('show');
46
+ current_li.remove();
47
+ if (nav.children().length === 0) {
48
+ nav.select(':visible').hide('slow');
49
+ toggler.removeClass('active').addClass('disabled').children('i').removeClass('icon-chevron-down').addClass('icon-chevron-right');
50
+ }
51
+ if (one_to_one) {
52
+ add_button = toggler.next();
53
+ add_button.addClass('add_nested_fields').html(add_button.data('add-label'));
54
+ }
55
+ field.find('[required]').each(function() {
56
+ $(this).removeAttr('required');
57
+ });
58
+ });
59
+ }(jQuery));
@@ -0,0 +1,31 @@
1
+ (function($) {
2
+ function setFrozenColPositions() {
3
+ var $listForm, frozenColumns;
4
+
5
+ $listForm = $('#bulk_form');
6
+ if (!$listForm.is('.ra-sidescroll')) {
7
+ return;
8
+ }
9
+ frozenColumns = $listForm.data('ra-sidescroll');
10
+
11
+ $listForm.find('table tr').each(function(index, tr) {
12
+ var firstPosition = 0;
13
+
14
+ $(tr).children().slice(0, frozenColumns).each(function(idx, td) {
15
+ var tdLeft;
16
+ $(td).addClass('ra-sidescroll-frozen');
17
+ if (idx === frozenColumns - 1) {
18
+ $(td).addClass('last-of-frozen');
19
+ }
20
+ tdLeft = $(td).position().left;
21
+ if (idx === 0) {
22
+ firstPosition = tdLeft;
23
+ }
24
+ td.style.left = (tdLeft - firstPosition) + "px";
25
+ });
26
+ });
27
+ };
28
+
29
+ $(window).on('load', setFrozenColPositions);
30
+ $(document).on('rails_admin.dom_ready', setFrozenColPositions);
31
+ })(jQuery);
@@ -0,0 +1,379 @@
1
+ (function($) {
2
+ $(document).on('rails_admin.dom_ready', function(e, content) {
3
+ var $editors, array, config_options, goBootstrapWysihtml5s, goCkeditors, goCodeMirrors, goFroalaWysiwygs, goSimpleMDEs, options;
4
+ content = content ? content : $('form');
5
+ if (content.length) {
6
+ content.find('[data-color]').each(function() {
7
+ var that;
8
+ that = this;
9
+ return $(this).ColorPicker({
10
+ color: $(that).val(),
11
+ onShow: function(el) {
12
+ $(el).fadeIn(500);
13
+ return false;
14
+ },
15
+ onHide: function(el) {
16
+ $(el).fadeOut(500);
17
+ return false;
18
+ },
19
+ onChange: function(hsb, hex, rgb) {
20
+ $(that).val(hex);
21
+ $(that).css('backgroundColor', '#' + hex);
22
+ }
23
+ });
24
+ });
25
+ $.fn.datetimepicker.defaults.icons = {
26
+ time: 'fa fa-clock-o',
27
+ date: 'fa fa-calendar',
28
+ up: 'fa fa-chevron-up',
29
+ down: 'fa fa-chevron-down',
30
+ previous: 'fa fa-angle-double-left',
31
+ next: 'fa fa-angle-double-right',
32
+ today: 'fa fa-dot-circle-o',
33
+ clear: 'fa fa-trash',
34
+ close: 'fa fa-times'
35
+ };
36
+ content.find('[data-datetimepicker]').each(function() {
37
+ var options;
38
+ options = $(this).data('options');
39
+ $.extend(options, {
40
+ locale: RailsAdmin.I18n.locale
41
+ });
42
+ $(this).datetimepicker(options);
43
+ });
44
+ content.find('[data-enumeration]').each(function() {
45
+ if ($(this).is('[multiple]')) {
46
+ $(this).filteringMultiselect($(this).data('options'));
47
+ } else {
48
+ $(this).filteringSelect($(this).data('options'));
49
+ }
50
+ });
51
+ content.find('[data-fileupload]').each(function() {
52
+ var parent;
53
+ parent = $(this).closest('.controls');
54
+ parent.find('.btn-remove-image').on('click', function() {
55
+ $(this).siblings('[type=checkbox]').click();
56
+ parent.find('.toggle').toggle('slow');
57
+ $(this).toggleClass('btn-danger btn-info');
58
+ return false;
59
+ });
60
+ });
61
+ content.find('[data-fileupload]').change(function() {
62
+ var ext, image_container, input, reader;
63
+ input = this;
64
+ image_container = $("#" + input.id).parent().children(".preview");
65
+ if (!image_container.length) {
66
+ image_container = $("#" + input.id).parent().prepend($('<img />').addClass('preview').addClass('img-thumbnail')).find('img.preview');
67
+ image_container.parent().find('img:not(.preview)').hide();
68
+ }
69
+ ext = $("#" + input.id).val().split('.').pop().toLowerCase();
70
+ if (input.files && input.files[0] && $.inArray(ext, ['gif', 'png', 'jpg', 'jpeg', 'bmp']) !== -1) {
71
+ reader = new FileReader();
72
+ reader.onload = function(e) {
73
+ image_container.attr("src", e.target.result);
74
+ };
75
+ reader.readAsDataURL(input.files[0]);
76
+ image_container.show();
77
+ } else {
78
+ image_container.hide();
79
+ }
80
+ });
81
+ content.find('[data-multiple-fileupload]').each(function() {
82
+ $(this).closest('.controls').find('.btn-remove-image').on('click', function() {
83
+ $(this).siblings('[type=checkbox]').click();
84
+ $(this).parent('.toggle').toggle('slow');
85
+ $(this).toggleClass('btn-danger btn-info');
86
+ return false;
87
+ }).end().sortable({
88
+ items: '.sortables'
89
+ });
90
+ });
91
+ content.find('[data-multiple-fileupload]').change(function() {
92
+ var ext, file, i, image_container, input, len, ref, results;
93
+ input = this;
94
+ $("#" + input.id).parent().children(".preview").remove();
95
+ ref = input.files;
96
+ results = [];
97
+ for (i = 0, len = ref.length; i < len; i++) {
98
+ file = ref[i];
99
+ ext = file.name.split('.').pop().toLowerCase();
100
+ if ($.inArray(ext, ['gif', 'png', 'jpg', 'jpeg', 'bmp']) === -1) {
101
+ continue;
102
+ }
103
+ image_container = $('<img />').addClass('preview').addClass('img-thumbnail');
104
+ results.push((function(image_container) {
105
+ var reader;
106
+ reader = new FileReader();
107
+ reader.onload = function(e) {
108
+ image_container.attr("src", e.target.result);
109
+ };
110
+ reader.readAsDataURL(file);
111
+ return $("#" + input.id).parent().append($('<div></div>').addClass('preview').append(image_container));
112
+ })(image_container));
113
+ }
114
+ return results;
115
+ });
116
+ content.find('[data-filteringmultiselect]').each(function() {
117
+ $(this).filteringMultiselect($(this).data('options'));
118
+ if ($(this).parents("#modal").length) {
119
+ $(this).siblings('.btn').remove();
120
+ } else {
121
+ $(this).parents('.control-group').first().remoteForm();
122
+ }
123
+ });
124
+ content.find('[data-filteringselect]').each(function() {
125
+ $(this).filteringSelect($(this).data('options'));
126
+ if ($(this).parents("#modal").length) {
127
+ $(this).siblings('.btn').remove();
128
+ } else {
129
+ $(this).parents('.control-group').first().remoteForm();
130
+ }
131
+ });
132
+ content.find('[data-nestedmany]').each(function() {
133
+ var field, nav, tab_content, toggler;
134
+ field = $(this).parents('.control-group').first();
135
+ nav = field.find('> .controls > .nav');
136
+ tab_content = field.find('> .tab-content');
137
+ toggler = field.find('> .controls > .btn-group > .toggler');
138
+ tab_content.children('.fields:not(.tab-pane)').addClass('tab-pane').each(function() {
139
+ $(this).attr('id', 'unique-id-' + (new Date().getTime()) + Math.floor(Math.random() * 100000));
140
+ nav.append(
141
+ $('<li></li>').append(
142
+ $('<a></a>').attr('data-toggle', 'tab').attr('href', '#' + this.id).text($(this).children('.object-infos').data('object-label'))
143
+ )
144
+ );
145
+ });
146
+ if (nav.find("> li.active").length === 0) {
147
+ nav.find("> li > a[data-toggle='tab']:first").tab('show');
148
+ }
149
+ if (nav.children().length === 0) {
150
+ nav.hide();
151
+ tab_content.hide();
152
+ toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right');
153
+ } else {
154
+ if (toggler.hasClass('active')) {
155
+ nav.show();
156
+ tab_content.show();
157
+ toggler.children('i').addClass('icon-chevron-down');
158
+ } else {
159
+ nav.hide();
160
+ tab_content.hide();
161
+ toggler.children('i').addClass('icon-chevron-right');
162
+ }
163
+ }
164
+ });
165
+ content.find('[data-nestedone]').each(function() {
166
+ var field, first_tab, nav, tab_content, toggler;
167
+ field = $(this).parents('.control-group').first();
168
+ nav = field.find("> .controls > .nav");
169
+ tab_content = field.find("> .tab-content");
170
+ toggler = field.find('> .controls > .btn-group > .toggler');
171
+ tab_content.children(".fields:not(.tab-pane)").addClass('tab-pane active').each(function() {
172
+ field.find('> .controls .add_nested_fields').removeClass('add_nested_fields').text($(this).children('.object-infos').data('object-label'));
173
+ nav.append(
174
+ $('<li></li>').append(
175
+ $('<a></a>').attr('data-toggle', 'tab').attr('href', '#' + this.id).text($(this).children('.object-infos').data('object-label'))
176
+ )
177
+ );
178
+ });
179
+ first_tab = nav.find("> li > a[data-toggle='tab']:first");
180
+ first_tab.tab('show');
181
+ field.find("> .controls > [data-target]:first").html('<i class="icon-white"></i> ' + first_tab.html());
182
+ nav.hide();
183
+ if (nav.children().length === 0) {
184
+ nav.hide();
185
+ tab_content.hide();
186
+ toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right');
187
+ } else {
188
+ if (toggler.hasClass('active')) {
189
+ toggler.children('i').addClass('icon-chevron-down');
190
+ tab_content.show();
191
+ } else {
192
+ toggler.children('i').addClass('icon-chevron-right');
193
+ tab_content.hide();
194
+ }
195
+ }
196
+ });
197
+ content.find('[data-polymorphic]').each(function() {
198
+ var field, object_select, type_select, urls;
199
+ type_select = $(this);
200
+ field = type_select.parents('.control-group').first();
201
+ object_select = field.find('select').last();
202
+ urls = type_select.data('urls');
203
+ type_select.on('change', function(e) {
204
+ var selected_data, selected_type;
205
+ selected_type = type_select.val().toLowerCase();
206
+ selected_data = $("#" + selected_type + "-js-options").data('options');
207
+ object_select.data('options', selected_data);
208
+ object_select.filteringSelect("destroy");
209
+ object_select.filteringSelect(selected_data);
210
+ });
211
+ });
212
+ goSimpleMDEs = function() {
213
+ return content.find('[data-richtext=simplemde]').not('.simplemded').each(function(index, domEle) {
214
+ var instance_config, options;
215
+ options = $(this).data('options');
216
+ instance_config = options.instance_config;
217
+ new window.SimpleMDE($.extend(true, {
218
+ element: document.getElementById(this.id),
219
+ autosave: {
220
+ uniqueId: this.id
221
+ }
222
+ }, instance_config));
223
+ $(this).addClass('simplemded');
224
+ });
225
+ };
226
+ $editors = content.find('[data-richtext=simplemde]').not('.simplemded');
227
+ if ($editors.length) {
228
+ if (!window.SimpleMDE) {
229
+ options = $editors.first().data('options');
230
+ $('head').append('<link href="' + options['css_location'] + '" rel="stylesheet" media="all" type="text\/css">');
231
+ $.getScript(options['js_location'], function(script, textStatus, jqXHR) {
232
+ return goSimpleMDEs();
233
+ });
234
+ } else {
235
+ goSimpleMDEs();
236
+ }
237
+ }
238
+ goCkeditors = function() {
239
+ return content.find('[data-richtext=ckeditor]').not('.ckeditored').each(function(index, domEle) {
240
+ var instance;
241
+ try {
242
+ if (instance = window.CKEDITOR.instances[this.id]) {
243
+ instance.destroy(true);
244
+ }
245
+ } catch (error1) {}
246
+ window.CKEDITOR.replace(this, $(this).data('options').options);
247
+ $(this).addClass('ckeditored');
248
+ });
249
+ };
250
+ $editors = content.find('[data-richtext=ckeditor]').not('.ckeditored');
251
+ if ($editors.length) {
252
+ if (!window.CKEDITOR) {
253
+ options = $editors.first().data('options');
254
+ window.CKEDITOR_BASEPATH = options['base_location'];
255
+ $.getScript(options['jspath'], (function(_this) {
256
+ return function(script, textStatus, jqXHR) {
257
+ return goCkeditors();
258
+ };
259
+ })(this));
260
+ } else {
261
+ goCkeditors();
262
+ }
263
+ }
264
+ goCodeMirrors = (function(_this) {
265
+ return function(array) {
266
+ return array.each(function(index, domEle) {
267
+ var textarea;
268
+ options = $(this).data('options');
269
+ textarea = this;
270
+ $.getScript(options['locations']['mode'], function(script, textStatus, jqXHR) {
271
+ options = $(domEle).data('options');
272
+ $('head').append('<link href="' + options['locations']['theme'] + '" rel="stylesheet" media="all" type="text\/css">');
273
+ CodeMirror.fromTextArea(textarea, options['options']);
274
+ return $(textarea).addClass('codemirrored');
275
+ });
276
+ });
277
+ };
278
+ })(this);
279
+ array = content.find('[data-richtext=codemirror]').not('.codemirrored');
280
+ if (array.length) {
281
+ this.array = array;
282
+ if (!window.CodeMirror) {
283
+ options = $(array[0]).data('options');
284
+ $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">');
285
+ $.getScript(options['jspath'], (function(_this) {
286
+ return function(script, textStatus, jqXHR) {
287
+ return goCodeMirrors(_this.array);
288
+ };
289
+ })(this));
290
+ } else {
291
+ goCodeMirrors(this.array);
292
+ }
293
+ }
294
+ goBootstrapWysihtml5s = (function(_this) {
295
+ return function(array, config_options) {
296
+ return array.each(function() {
297
+ $(this).addClass('bootstrap-wysihtml5ed');
298
+ $(this).closest('.controls').addClass('well');
299
+ $(this).wysihtml5(config_options);
300
+ });
301
+ };
302
+ })(this);
303
+ array = content.find('[data-richtext=bootstrap-wysihtml5]').not('.bootstrap-wysihtml5ed');
304
+ if (array.length) {
305
+ this.array = array;
306
+ options = $(array[0]).data('options');
307
+ config_options = $.parseJSON(options['config_options']);
308
+ if (!window.wysihtml5) {
309
+ $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">');
310
+ $.getScript(options['jspath'], (function(_this) {
311
+ return function(script, textStatus, jqXHR) {
312
+ return goBootstrapWysihtml5s(_this.array, config_options);
313
+ };
314
+ })(this));
315
+ } else {
316
+ goBootstrapWysihtml5s(this.array, config_options);
317
+ }
318
+ }
319
+ goFroalaWysiwygs = (function(_this) {
320
+ return function(array) {
321
+ return array.each(function() {
322
+ var uploadEnabled;
323
+ options = $(this).data('options');
324
+ config_options = $.parseJSON(options['config_options']);
325
+ if (config_options) {
326
+ if (!config_options['inlineMode']) {
327
+ config_options['inlineMode'] = false;
328
+ }
329
+ } else {
330
+ config_options = {
331
+ inlineMode: false
332
+ };
333
+ }
334
+ uploadEnabled = config_options['imageUploadURL'] ? config_options['imageUploadParams'] = {
335
+ authenticity_token: $('meta[name=csrf-token]').attr('content')
336
+ } : void 0;
337
+ $(this).addClass('froala-wysiwyged');
338
+ $(this).froalaEditor(config_options);
339
+ if (uploadEnabled) {
340
+ $(this).on('froalaEditor.image.error', function(e, editor, error) {
341
+ alert("error uploading image: " + error.message);
342
+ }).on('froalaEditor.image.removed', function(e, editor, $img) {
343
+ editor.options.imageDeleteParams = {
344
+ src: $img.attr('src'),
345
+ authenticity_token: $('meta[name=csrf-token]').attr('content')
346
+ };
347
+ editor.deleteImage($img);
348
+ }).on('editable.imageDeleteSuccess', function(e, editor, data) {}).on('editable.imageDeleteError', function(e, editor, error) {
349
+ alert("error deleting image: " + error.message);
350
+ });
351
+ }
352
+ });
353
+ };
354
+ })(this);
355
+ array = content.find('[data-richtext=froala-wysiwyg]').not('.froala-wysiwyged');
356
+ if (array.length) {
357
+ options = $(array[0]).data('options');
358
+ if (!$.isFunction($.fn.editable)) {
359
+ $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">');
360
+ $.getScript(options['jspath'], (function(_this) {
361
+ return function(script, textStatus, jqXHR) {
362
+ return goFroalaWysiwygs(array);
363
+ };
364
+ })(this));
365
+ } else {
366
+ goFroalaWysiwygs(array);
367
+ }
368
+ }
369
+ return content.find('trix-editor').each(function() {
370
+ if (!window.Trix) {
371
+ options = $(this).data('options');
372
+ $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">');
373
+ return $.getScript(options['jspath']);
374
+ }
375
+ });
376
+ }
377
+ });
378
+
379
+ }(jQuery));
@@ -15,5 +15,6 @@
15
15
  //= require 'rails_admin/ra.i18n'
16
16
  //= require 'rails_admin/bootstrap/bootstrap'
17
17
  //= require 'rails_admin/ra.widgets'
18
+ //= require 'rails_admin/ra.sidescroll'
18
19
  //= require 'rails_admin/ui'
19
20
  //= require 'rails_admin/custom/ui'