rails_admin 1.2.0 → 2.1.1

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 (245) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +17 -12
  3. data/README.md +22 -23
  4. data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
  5. data/app/assets/javascripts/rails_admin/jquery-ui.js.erb +8 -0
  6. data/app/assets/javascripts/rails_admin/ra.filter-box.js +150 -60
  7. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +20 -20
  8. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +14 -7
  9. data/app/assets/javascripts/rails_admin/ra.i18n.js +28 -0
  10. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +59 -0
  11. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
  12. data/app/assets/javascripts/rails_admin/ra.widgets.js +379 -0
  13. data/app/assets/javascripts/rails_admin/rails_admin.js +2 -3
  14. data/app/assets/javascripts/rails_admin/ui.js +135 -0
  15. data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +29 -0
  16. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +4 -0
  17. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +2 -1
  18. data/app/controllers/rails_admin/application_controller.rb +3 -1
  19. data/app/helpers/rails_admin/application_helper.rb +19 -4
  20. data/app/helpers/rails_admin/form_builder.rb +8 -9
  21. data/app/helpers/rails_admin/main_helper.rb +6 -5
  22. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.haml +4 -0
  23. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.haml +4 -0
  24. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.haml +4 -0
  25. data/app/views/layouts/rails_admin/_head.html.haml +7 -0
  26. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
  27. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
  28. data/app/views/layouts/rails_admin/application.html.haml +3 -11
  29. data/app/views/layouts/rails_admin/pjax.html.haml +1 -5
  30. data/app/views/rails_admin/main/_form_action_text.html.haml +7 -0
  31. data/app/views/rails_admin/main/_form_enumeration.html.haml +4 -3
  32. data/app/views/rails_admin/main/_form_file_upload.html.haml +5 -5
  33. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +7 -6
  34. data/app/views/rails_admin/main/_form_filtering_select.html.haml +1 -1
  35. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +16 -0
  36. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +18 -3
  37. data/app/views/rails_admin/main/_form_simple_mde.haml +8 -0
  38. data/app/views/rails_admin/main/dashboard.html.haml +1 -2
  39. data/app/views/rails_admin/main/export.html.haml +2 -2
  40. data/app/views/rails_admin/main/history.html.haml +1 -1
  41. data/app/views/rails_admin/main/index.html.haml +33 -22
  42. data/app/views/rails_admin/main/show.html.haml +6 -7
  43. data/config/locales/rails_admin.en.yml +3 -1
  44. data/lib/generators/rails_admin/templates/initializer.erb +2 -2
  45. data/lib/rails_admin/abstract_model.rb +3 -3
  46. data/lib/rails_admin/adapters/active_record/abstract_object.rb +9 -3
  47. data/lib/rails_admin/adapters/active_record/property.rb +1 -5
  48. data/lib/rails_admin/adapters/active_record.rb +36 -19
  49. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +2 -3
  50. data/lib/rails_admin/adapters/mongoid/association.rb +15 -4
  51. data/lib/rails_admin/adapters/mongoid/property.rb +2 -2
  52. data/lib/rails_admin/adapters/mongoid.rb +32 -15
  53. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +1 -3
  54. data/lib/rails_admin/bootstrap-sass.rb +7 -3
  55. data/lib/rails_admin/config/actions/base.rb +17 -1
  56. data/lib/rails_admin/config/actions/dashboard.rb +5 -1
  57. data/lib/rails_admin/config/actions/edit.rb +1 -3
  58. data/lib/rails_admin/config/actions/index.rb +3 -3
  59. data/lib/rails_admin/config/actions/new.rb +1 -3
  60. data/lib/rails_admin/config/configurable.rb +21 -12
  61. data/lib/rails_admin/config/fields/association.rb +1 -1
  62. data/lib/rails_admin/config/fields/base.rb +6 -2
  63. data/lib/rails_admin/config/fields/factories/action_text.rb +12 -0
  64. data/lib/rails_admin/config/fields/factories/active_storage.rb +30 -0
  65. data/lib/rails_admin/config/fields/factories/carrierwave.rb +3 -1
  66. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  67. data/lib/rails_admin/config/fields/factories/shrine.rb +27 -0
  68. data/lib/rails_admin/config/fields/types/action_text.rb +30 -0
  69. data/lib/rails_admin/config/fields/types/active_record_enum.rb +9 -11
  70. data/lib/rails_admin/config/fields/types/active_storage.rb +49 -0
  71. data/lib/rails_admin/config/fields/types/all.rb +7 -1
  72. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +4 -0
  73. data/lib/rails_admin/config/fields/types/ck_editor.rb +7 -7
  74. data/lib/rails_admin/config/fields/types/code_mirror.rb +10 -12
  75. data/lib/rails_admin/config/fields/types/color.rb +2 -2
  76. data/lib/rails_admin/config/fields/types/datetime.rb +1 -1
  77. data/lib/rails_admin/config/fields/types/file_upload.rb +10 -2
  78. data/lib/rails_admin/config/fields/types/froala.rb +9 -11
  79. data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
  80. data/lib/rails_admin/config/fields/types/json.rb +9 -1
  81. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +53 -0
  82. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +56 -0
  83. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +125 -0
  84. data/lib/rails_admin/config/fields/types/password.rb +5 -1
  85. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +7 -0
  86. data/lib/rails_admin/config/fields/types/shrine.rb +54 -0
  87. data/lib/rails_admin/config/fields/types/simple_mde.rb +36 -0
  88. data/lib/rails_admin/config/fields/types/string.rb +2 -2
  89. data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
  90. data/lib/rails_admin/config/fields/types/text.rb +2 -20
  91. data/lib/rails_admin/config/fields/types/wysihtml5.rb +14 -10
  92. data/lib/rails_admin/config/fields.rb +3 -1
  93. data/lib/rails_admin/config/has_fields.rb +1 -1
  94. data/lib/rails_admin/config/has_groups.rb +1 -1
  95. data/lib/rails_admin/config/lazy_model.rb +4 -4
  96. data/lib/rails_admin/config/model.rb +5 -4
  97. data/lib/rails_admin/config/proxyable/proxy.rb +7 -9
  98. data/lib/rails_admin/config/proxyable.rb +13 -1
  99. data/lib/rails_admin/config/sections/list.rb +33 -0
  100. data/lib/rails_admin/config.rb +22 -11
  101. data/lib/rails_admin/engine.rb +35 -2
  102. data/lib/rails_admin/extension.rb +16 -4
  103. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +23 -7
  104. data/lib/rails_admin/extensions/cancancan.rb +1 -1
  105. data/lib/rails_admin/extensions/controller_extension.rb +6 -0
  106. data/lib/rails_admin/extensions/history/auditing_adapter.rb +2 -2
  107. data/lib/rails_admin/extensions/history/history.rb +2 -2
  108. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +52 -19
  109. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +3 -5
  110. data/lib/rails_admin/support/csv_converter.rb +7 -1
  111. data/lib/rails_admin/version.rb +3 -3
  112. data/lib/rails_admin.rb +0 -1
  113. data/lib/tasks/rails_admin.rake +16 -7
  114. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  115. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  116. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +2671 -0
  117. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  118. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  119. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  120. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  121. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  122. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  123. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  124. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  125. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  126. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  127. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  128. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  129. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  130. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  131. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  132. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  133. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  134. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  135. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  136. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  137. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  138. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  139. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  140. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  141. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  142. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  143. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  144. data/{app → vendor}/assets/images/rails_admin/colorpicker/select.png +0 -0
  145. data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
  146. data/{app → vendor}/assets/images/rails_admin/colorpicker/slider.png +0 -0
  147. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -0
  148. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -0
  149. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -0
  150. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -0
  151. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -0
  152. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -0
  153. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -0
  154. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -0
  155. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -0
  156. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -0
  157. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -0
  158. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -0
  159. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
  160. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
  161. data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
  162. data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +1 -3
  163. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +9451 -3263
  164. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
  165. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
  166. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
  167. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
  168. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
  169. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
  170. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
  171. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
  172. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
  173. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
  174. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
  175. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
  176. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
  177. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
  178. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
  179. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
  180. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
  181. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
  182. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
  183. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
  184. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
  185. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
  186. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
  187. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
  188. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
  189. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
  190. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
  191. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
  192. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
  193. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
  194. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
  195. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
  196. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
  197. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
  198. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
  199. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
  200. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
  201. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
  202. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
  203. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
  204. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
  205. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
  206. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
  207. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
  208. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
  209. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
  210. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
  211. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
  212. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
  213. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
  214. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
  215. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
  216. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
  217. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
  218. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
  219. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
  220. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  221. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
  222. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
  223. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
  224. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
  225. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
  226. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
  227. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
  228. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
  229. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
  230. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
  231. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
  232. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
  233. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  234. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +2342 -0
  235. data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
  236. metadata +185 -175
  237. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  238. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -8
  239. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -55
  240. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -308
  241. data/app/assets/javascripts/rails_admin/ui.coffee +0 -102
  242. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  243. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  244. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
  245. data/lib/rails_admin/extensions/cancan.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c69e517eca7e9a2fd7b5f93c966f86f9eadd57d5
4
- data.tar.gz: c2df6d3bcda5e4ccd0cadef10ddc46a4e8f6c283
2
+ SHA256:
3
+ metadata.gz: e91bcbfc9a80b1718903e12a7a806f295115aab1917a5613632a9ee50a9b7973
4
+ data.tar.gz: 278d75adfbb87dbfc1751f9c510eba68a13809873fce08dc6ed6e53355f0b9c8
5
5
  SHA512:
6
- metadata.gz: e6fc0cb49d89c389de0afffdc0e17215d6e9d6a702ef8c263106058ed1f4a5bdd13e0d57ce9d39cc691a88de83669bfaeaaeb21c9657aaa096f2e387091b125e
7
- data.tar.gz: fafcc0bb5ada22245b595107ee6c65c2b816de55d48d969e9ca4c225e428118ba4d4b8e5af6a4a2138e4c5b52a100fb1673970e31b0e087cc73d15d5da97d030
6
+ metadata.gz: 7a8fefb5416435b1e0a7622f6c6fc547b356b8d9e33fc30ea715030a33f4957952a587830a68565c574e50c1b3f6c98327a039accf75389a6d053a03c884be84
7
+ data.tar.gz: 85258795ff168eff5d247eb77cec0a8fd1b630e830eb17b8144914592e3d3fd50808c924248cca101c13a8a21683e75eb5a6407b768d3580bd04daef412b339f
data/Gemfile CHANGED
@@ -1,14 +1,15 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'appraisal', '>= 2.0'
4
- gem 'rails', '~> 5.0.0'
4
+ gem 'rails'
5
5
  gem 'haml'
6
6
  gem 'devise'
7
7
 
8
8
  group :active_record do
9
- platforms :ruby, :mswin, :mingw do
10
- gem 'mysql2', '~> 0.3.14'
11
- gem 'pg', '>= 0.14'
9
+ gem 'paper_trail'
10
+
11
+ platforms :ruby, :mswin, :mingw, :x64_mingw do
12
+ gem 'mysql2', '>= 0.3.14'
12
13
  gem 'sqlite3', '>= 1.3'
13
14
  end
14
15
  end
@@ -18,28 +19,32 @@ group :development, :test do
18
19
  end
19
20
 
20
21
  group :test do
21
- gem 'cancan', '>= 1.6'
22
- gem 'cancancan', '~> 1.12.0'
23
- gem 'carrierwave', '>= 0.8'
24
- gem 'coveralls'
25
- gem 'database_cleaner', ['>= 1.2', '!= 1.4.0', '!= 1.5.0']
22
+ gem 'cancancan', '~> 3.0'
23
+ gem 'carrierwave', ['>= 2.0.0.rc', '< 3']
24
+ gem 'database_cleaner', ['>= 1.2', '!= 1.4.0', '!= 1.5.0', '< 2.0']
26
25
  gem 'dragonfly', '~> 1.0'
27
- gem 'factory_girl', '>= 4.2'
26
+ gem 'factory_bot', '>= 4.2'
28
27
  gem 'generator_spec', '>= 0.8'
29
28
  gem 'launchy', '>= 2.2'
30
29
  gem 'mini_magick', '>= 3.4'
31
- gem 'paperclip', ['>= 3.4', '!= 4.3.0']
32
30
  gem 'poltergeist', '~> 1.5'
33
31
  gem 'pundit'
34
32
  gem 'rack-cache', require: 'rack/cache'
35
33
  gem 'rspec-rails', '>= 2.14'
36
- gem 'rubocop', '~> 0.41.2'
34
+ gem 'rspec-expectations', '!= 3.8.3'
35
+ gem 'rspec-retry'
36
+ gem 'rubocop', '~> 0.68.1', require: false
37
+ gem 'rubocop-performance', require: false
37
38
  gem 'simplecov', '>= 0.9', require: false
39
+ gem 'simplecov-lcov', require: false
38
40
  gem 'timecop', '>= 0.5'
39
41
 
40
42
  platforms :ruby_19 do
41
43
  gem 'tins', '~> 1.6.0', require: false
42
44
  end
45
+
46
+ # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
47
+ gem 'tzinfo-data', platforms: %i(mingw mswin x64_mingw jruby)
43
48
  end
44
49
 
45
50
  gemspec
data/README.md CHANGED
@@ -1,18 +1,18 @@
1
1
  # RailsAdmin
2
2
 
3
3
  [![Gem Version](https://img.shields.io/gem/v/rails_admin.svg)][gem]
4
- [![Build Status](https://img.shields.io/travis/sferik/rails_admin.svg)][travis]
5
- [![Dependency Status](https://img.shields.io/gemnasium/sferik/rails_admin.svg)][gemnasium]
6
- [![Code Climate](https://img.shields.io/codeclimate/github/sferik/rails_admin.svg)][codeclimate]
4
+ [![Build Status](https://img.shields.io/github/workflow/status/sferik/rails_admin/Test)][ghactions]
7
5
  [![Coverage Status](https://img.shields.io/coveralls/sferik/rails_admin.svg)][coveralls]
8
6
  [![Inline docs](http://inch-ci.org/github/sferik/rails_admin.svg)][inch]
7
+ [![Code Climate](https://codeclimate.com/github/sferik/rails_admin.svg)][codeclimate]
8
+ [![SemVer](https://api.dependabot.com/badges/compatibility_score?dependency-name=rails_admin&package-manager=bundler&version-scheme=semver)][semver]
9
9
 
10
10
  [gem]: https://rubygems.org/gems/rails_admin
11
- [travis]: https://travis-ci.org/sferik/rails_admin
12
- [gemnasium]: https://gemnasium.com/sferik/rails_admin
13
- [codeclimate]: https://codeclimate.com/github/sferik/rails_admin
11
+ [ghactions]: https://github.com/sferik/rails_admin/actions
14
12
  [coveralls]: https://coveralls.io/r/sferik/rails_admin
15
13
  [inch]: http://inch-ci.org/github/sferik/rails_admin
14
+ [codeclimate]: https://codeclimate.com/github/sferik/rails_admin
15
+ [semver]: https://dependabot.com/compatibility-score.html?dependency-name=rails_admin&package-manager=bundler&version-scheme=semver
16
16
 
17
17
  RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data.
18
18
 
@@ -20,10 +20,16 @@ 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 1.0.0 and 1.1.0 have been reported to have CSRF vulnerability with default setup.** We strongly recommend that you upgrade RailsAdmin to 1.1.1 or later as soon as possible, if you are on these versions. See [b13e879e](https://github.com/sferik/rails_admin/commit/b13e879eb93b661204e9fb5e55f7afa4f397537a) for the detail.
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.
24
+
25
+ ## Getting started
24
26
 
25
- This problem was reported by SourceClear, Inc.
27
+ * Check out [the docs][docs].
28
+ * Try the [live demo][demo]. ([Source code][dummy_app])
26
29
 
30
+ [demo]: http://rails-admin-tb.herokuapp.com/
31
+ [dummy_app]: https://github.com/bbenezech/dummy_app
32
+ [docs]: https://github.com/sferik/rails_admin/wiki
27
33
 
28
34
  ## Features
29
35
  * CRUD any data with ease
@@ -42,7 +48,7 @@ This problem was reported by SourceClear, Inc.
42
48
 
43
49
  ## Installation
44
50
 
45
- 1. On your gemfile: `gem 'rails_admin', '~> 1.2'`
51
+ 1. On your gemfile: `gem 'rails_admin', '~> 2.0'`
46
52
  2. Run `bundle install`
47
53
  3. Run `rails g rails_admin:install`
48
54
  4. Provide a namespace for the routes when asked
@@ -50,7 +56,7 @@ This problem was reported by SourceClear, Inc.
50
56
 
51
57
  ## Configuration
52
58
  ### Global
53
- In `config/initializers/rails_admin`:
59
+ In `config/initializers/rails_admin.rb`:
54
60
 
55
61
  [Details](https://github.com/sferik/rails_admin/wiki/Base-configuration)
56
62
 
@@ -72,15 +78,6 @@ end
72
78
 
73
79
  Details: [Models](https://github.com/sferik/rails_admin/wiki/Models), [Groups](https://github.com/sferik/rails_admin/wiki/Groups), [Fields](https://github.com/sferik/rails_admin/wiki/Fields)
74
80
 
75
- ## Documentation
76
- https://github.com/sferik/rails_admin/wiki
77
-
78
- ## Demo
79
- Take RailsAdmin for a [test drive][demo] with sample data. ([Source code.][dummy_app])
80
-
81
- [demo]: http://rails-admin-tb.herokuapp.com/
82
- [dummy_app]: https://github.com/bbenezech/dummy_app
83
-
84
81
  ## Support
85
82
  If you have a question, please check this README, the wiki, and the [list of
86
83
  known issues][troubleshoot].
@@ -95,13 +92,15 @@ list][list].
95
92
  If you think you found a bug in RailsAdmin, you can [submit an issue](https://github.com/sferik/rails_admin/issues/new).
96
93
 
97
94
  ## Supported Ruby Versions
98
- This library aims to support and is [tested against][travis] the following Ruby implementations:
95
+ This library aims to support and is [tested against][ghactions] the following Ruby implementations:
99
96
 
100
- * Ruby 2.1
101
97
  * Ruby 2.2
102
98
  * Ruby 2.3
103
- * [Rubinius][]
99
+ * Ruby 2.4
100
+ * Ruby 2.5
101
+ * Ruby 2.6
102
+ * Ruby 2.7
103
+ * Ruby 3.0
104
104
  * [JRuby][]
105
105
 
106
- [rubinius]: http://rubinius.com
107
106
  [jruby]: http://jruby.org/
@@ -0,0 +1 @@
1
+ // override this file in your application to add custom behaviour
@@ -0,0 +1,8 @@
1
+ <% require_asset "jquery-ui/effect" %>
2
+ <% if Jquery::Ui::Rails::JQUERY_UI_VERSION >= '1.12' %>
3
+ <% require_asset "jquery-ui/widgets/sortable" %>
4
+ <% require_asset "jquery-ui/widgets/autocomplete" %>
5
+ <% else %>
6
+ <% require_asset "jquery-ui/sortable" %>
7
+ <% require_asset "jquery-ui/autocomplete" %>
8
+ <% end %>
@@ -11,6 +11,7 @@
11
11
  var field_value = options['value'];
12
12
  var field_operator = options['operator'];
13
13
  var select_options = options['select_options'];
14
+ var required = options['required'];
14
15
  var index = options['index'];
15
16
  var value_name = 'f[' + field_name + '][' + index + '][v]';
16
17
  var operator_name = 'f[' + field_name + '][' + index + '][o]';
@@ -19,90 +20,178 @@
19
20
 
20
21
  switch(field_type) {
21
22
  case 'boolean':
22
- var control = '<select class="input-sm form-control" name="' + value_name + '">' +
23
- '<option value="_discard">...</option>' +
24
- '<option value="true"' + (field_value == "true" ? 'selected="selected"' : '') + '>' + RailsAdmin.I18n.t("true") + '</option>' +
25
- '<option value="false"' + (field_value == "false" ? 'selected="selected"' : '') + '>' + RailsAdmin.I18n.t("false") + '</option>' +
26
- '<option disabled="disabled">---------</option>' +
27
- '<option ' + (field_value == "_present" ? 'selected="selected"' : '') + ' value="_present">' + RailsAdmin.I18n.t("is_present") + '</option>' +
28
- '<option ' + (field_value == "_blank" ? 'selected="selected"' : '') + ' value="_blank" >' + RailsAdmin.I18n.t("is_blank") + '</option>' +
29
- '</select>';
23
+ control = $('<select class="input-sm form-control"></select>')
24
+ .prop('name', value_name)
25
+ .append('<option value="_discard">...</option>')
26
+ .append($('<option value="true"></option>').prop('selected', field_value == "true").text(RailsAdmin.I18n.t("true")))
27
+ .append($('<option value="false"></option>').prop('selected', field_value == "false").text(RailsAdmin.I18n.t("false")))
28
+ if (!required) {
29
+ control.append([
30
+ '<option disabled="disabled">---------</option>',
31
+ $('<option value="_present"></option>').prop('selected', field_value == "_present").text(RailsAdmin.I18n.t("is_present")),
32
+ $('<option value="_blank"></option>').prop('selected', field_value == "_blank").text(RailsAdmin.I18n.t("is_blank"))
33
+ ])
34
+ }
30
35
  break;
31
36
  case 'date':
32
37
  additional_control =
33
- '<input size="20" class="date additional-fieldset default input-sm form-control" style="display:' + ((!field_operator || field_operator == "default") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[0] || '') + '" /> ' +
34
- '<input size="20" placeholder="-∞" class="date additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[1] || '') + '" /> ' +
35
- '<input size="20" placeholder="∞" class="date additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[2] || '') + '" />';
38
+ $('<input size="20" class="date additional-fieldset default input-sm form-control" type="text" />')
39
+ .css('display', (!field_operator || field_operator == "default") ? 'inline-block' : 'none')
40
+ .prop('name', value_name + '[]')
41
+ .prop('value', field_value[0] || '')
42
+ .add(
43
+ $('<input size="20" placeholder="-∞" class="date additional-fieldset between input-sm form-control" type="text" />')
44
+ .css('display', (field_operator == "between") ? 'inline-block' : 'none')
45
+ .prop('name', value_name + '[]')
46
+ .prop('value', field_value[1] || '')
47
+ )
48
+ .add(
49
+ $('<input size="20" placeholder="∞" class="date additional-fieldset between input-sm form-control" type="text" />')
50
+ .css('display', (field_operator == "between") ? 'inline-block' : 'none')
51
+ .prop('name', value_name + '[]')
52
+ .prop('value', field_value[2] || '')
53
+ );
36
54
  case 'datetime':
37
55
  case 'timestamp':
38
- control = control || '<select class="switch-additionnal-fieldsets input-sm form-control" name="' + operator_name + '">' +
39
- '<option ' + (field_operator == "default" ? 'selected="selected"' : '') + ' data-additional-fieldset="default" value="default">' + RailsAdmin.I18n.t("date") + '</option>' +
40
- '<option ' + (field_operator == "between" ? 'selected="selected"' : '') + ' data-additional-fieldset="between" value="between">' + RailsAdmin.I18n.t("between_and_") + '</option>' +
41
- '<option ' + (field_operator == "today" ? 'selected="selected"' : '') + ' value="today">' + RailsAdmin.I18n.t("today") + '</option>' +
42
- '<option ' + (field_operator == "yesterday" ? 'selected="selected"' : '') + ' value="yesterday">' + RailsAdmin.I18n.t("yesterday") + '</option>' +
43
- '<option ' + (field_operator == "this_week" ? 'selected="selected"' : '') + ' value="this_week">' + RailsAdmin.I18n.t("this_week") + '</option>' +
44
- '<option ' + (field_operator == "last_week" ? 'selected="selected"' : '') + ' value="last_week">' + RailsAdmin.I18n.t("last_week") + '</option>' +
45
- '<option disabled="disabled">---------</option>' +
46
- '<option ' + (field_operator == "_not_null" ? 'selected="selected"' : '') + ' value="_not_null">' + RailsAdmin.I18n.t("is_present") + '</option>' +
47
- '<option ' + (field_operator == "_null" ? 'selected="selected"' : '') + ' value="_null" >' + RailsAdmin.I18n.t("is_blank") + '</option>' +
48
- '</select>'
56
+ control = control || $('<select class="switch-additional-fieldsets input-sm form-control"></select>')
57
+ .prop('name', operator_name)
58
+ .append($('<option data-additional-fieldset="default" value="default"></option>').prop('selected', field_operator == "default").text(RailsAdmin.I18n.t("date")))
59
+ .append($('<option data-additional-fieldset="between" value="between"></option>').prop('selected', field_operator == "between").text(RailsAdmin.I18n.t("between_and_")))
60
+ .append($('<option value="today"></option>').prop('selected', field_operator == "today").text(RailsAdmin.I18n.t("today")))
61
+ .append($('<option value="yesterday"></option>').prop('selected', field_operator == "yesterday").text(RailsAdmin.I18n.t("yesterday")))
62
+ .append($('<option value="this_week"></option>').prop('selected', field_operator == "this_week").text(RailsAdmin.I18n.t("this_week")))
63
+ .append($('<option value="last_week"></option>').prop('selected', field_operator == "last_week").text(RailsAdmin.I18n.t("last_week")))
64
+ if (!required) {
65
+ control.append([
66
+ '<option disabled="disabled">---------</option>',
67
+ $('<option value="_not_null"></option>').prop('selected', field_operator == "_not_null").text(RailsAdmin.I18n.t("is_present")),
68
+ $('<option value="_null"></option>').prop('selected', field_operator == "_null").text(RailsAdmin.I18n.t("is_blank"))
69
+ ])
70
+ }
49
71
  additional_control = additional_control ||
50
- '<input size="25" class="datetime additional-fieldset default input-sm form-control" style="display:' + ((!field_operator || field_operator == "default") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[0] || '') + '" /> ' +
51
- '<input size="25" placeholder="-∞" class="datetime additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[1] || '') + '" /> ' +
52
- '<input size="25" placeholder="∞" class="datetime additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[2] || '') + '" />';
72
+ $('<input size="25" class="datetime additional-fieldset default input-sm form-control" type="text" />')
73
+ .css('display', (!field_operator || field_operator == "default") ? 'inline-block' : 'none')
74
+ .prop('name', value_name + '[]')
75
+ .prop('value', field_value[0] || '')
76
+ .add(
77
+ $('<input size="25" placeholder="-∞" class="datetime additional-fieldset between input-sm form-control" type="text" />')
78
+ .css('display', (field_operator == "between") ? 'inline-block' : 'none')
79
+ .prop('name', value_name + '[]')
80
+ .prop('value', field_value[1] || '')
81
+ )
82
+ .add(
83
+ $('<input size="25" placeholder="∞" class="datetime additional-fieldset between input-sm form-control" type="text" />')
84
+ .css('display', (field_operator == "between") ? 'inline-block' : 'none')
85
+ .prop('name', value_name + '[]')
86
+ .prop('value', field_value[2] || '')
87
+ );
53
88
  break;
54
89
  case 'enum':
55
90
  var multiple_values = ((field_value instanceof Array) ? true : false)
56
- control = '<select style="display:' + (multiple_values ? 'none' : 'inline-block') + '" ' + (multiple_values ? '' : 'name="' + value_name + '"') + ' data-name="' + value_name + '" class="select-single input-sm form-control">' +
57
- '<option value="_discard">...</option>' +
58
- '<option ' + (field_value == "_present" ? 'selected="selected"' : '') + ' value="_present">' + RailsAdmin.I18n.t("is_present") + '</option>' +
59
- '<option ' + (field_value == "_blank" ? 'selected="selected"' : '') + ' value="_blank">' + RailsAdmin.I18n.t("is_blank") + '</option>' +
60
- '<option disabled="disabled">---------</option>' +
61
- select_options +
62
- '</select>' +
63
- '<select multiple="multiple" style="display:' + (multiple_values ? 'inline-block' : 'none') + '" ' + (multiple_values ? 'name="' + value_name + '[]"' : '') + ' data-name="' + value_name + '[]" class="select-multiple input-sm form-control">' +
64
- select_options +
65
- '</select> ' +
66
- '<a href="#" class="switch-select"><i class="icon-' + (multiple_values ? 'minus' : 'plus') + '"></i></a>';
91
+ control = $('<select class="select-single input-sm form-control"></select>')
92
+ .css('display', multiple_values ? 'none' : 'inline-block')
93
+ .prop('name', multiple_values ? undefined : value_name)
94
+ .data('name', value_name)
95
+ .append('<option value="_discard">...</option>')
96
+ if (!required) {
97
+ control.append([
98
+ $('<option value="_present"></option>').prop('selected', field_value == "_present").text(RailsAdmin.I18n.t("is_present")),
99
+ $('<option value="_blank"></option>').prop('selected', field_value == "_blank").text(RailsAdmin.I18n.t("is_blank")),
100
+ '<option disabled="disabled">---------</option>'
101
+ ])
102
+ }
103
+ control.append(select_options)
104
+ .add(
105
+ $('<select multiple="multiple" class="select-multiple input-sm form-control"></select>')
106
+ .css('display', multiple_values ? 'inline-block' : 'none')
107
+ .prop('name', multiple_values ? value_name + '[]' : undefined)
108
+ .data('name', value_name + '[]')
109
+ .append(select_options)
110
+ )
111
+ .add(
112
+ $('<a href="#" class="switch-select"></a>')
113
+ .append($('<i></i>').addClass('icon-' + (multiple_values ? 'minus' : 'plus')))
114
+ );
67
115
  break;
68
116
  case 'string':
69
117
  case 'text':
70
118
  case 'belongs_to_association':
71
- control = '<select class="switch-additionnal-fieldsets input-sm form-control" value="' + field_operator + '" name="' + operator_name + '">' +
72
- '<option data-additional-fieldset="additional-fieldset"' + (field_operator == "like" ? 'selected="selected"' : '') + ' value="like">' + RailsAdmin.I18n.t("contains") + '</option>' +
73
- '<option data-additional-fieldset="additional-fieldset"' + (field_operator == "is" ? 'selected="selected"' : '') + ' value="is">' + RailsAdmin.I18n.t("is_exactly") + '</option>' +
74
- '<option data-additional-fieldset="additional-fieldset"' + (field_operator == "starts_with" ? 'selected="selected"' : '') + ' value="starts_with">' + RailsAdmin.I18n.t("starts_with") + '</option>' +
75
- '<option data-additional-fieldset="additional-fieldset"' + (field_operator == "ends_with" ? 'selected="selected"' : '') + ' value="ends_with">' + RailsAdmin.I18n.t("ends_with") + '</option>' +
76
- '<option disabled="disabled">---------</option>' +
77
- '<option ' + (field_operator == "_not_null" ? 'selected="selected"' : '') + ' value="_not_null">' + RailsAdmin.I18n.t("is_present") + '</option>' +
78
- '<option ' + (field_operator == "_null" ? 'selected="selected"' : '') + ' value="_null">' + RailsAdmin.I18n.t("is_blank") + '</option>' +
79
- '</select>'
80
- additional_control = '<input class="additional-fieldset input-sm form-control" style="display:' + (field_operator == "_blank" || field_operator == "_present" ? 'none' : 'inline-block') + ';" type="text" name="' + value_name + '" value="' + field_value + '" /> ';
119
+ control = $('<select class="switch-additional-fieldsets input-sm form-control"></select>')
120
+ .prop('value', field_operator)
121
+ .prop('name', operator_name)
122
+ .append('<option value="_discard">...</option>')
123
+ .append($('<option data-additional-fieldset="additional-fieldset" value="like"></option>').prop('selected', field_operator == "like").text(RailsAdmin.I18n.t("contains")))
124
+ .append($('<option data-additional-fieldset="additional-fieldset" value="is"></option>').prop('selected', field_operator == "is").text(RailsAdmin.I18n.t("is_exactly")))
125
+ .append($('<option data-additional-fieldset="additional-fieldset" value="starts_with"></option>').prop('selected', field_operator == "starts_with").text(RailsAdmin.I18n.t("starts_with")))
126
+ .append($('<option data-additional-fieldset="additional-fieldset" value="ends_with"></option>').prop('selected', field_operator == "ends_with").text(RailsAdmin.I18n.t("ends_with")))
127
+ if (!required) {
128
+ control.append([
129
+ '<option disabled="disabled">---------</option>',
130
+ $('<option value="_present"></option>').prop('selected', field_operator == "_present").text(RailsAdmin.I18n.t("is_present")),
131
+ $('<option value="_blank"></option>').prop('selected', field_operator == "_blank").text(RailsAdmin.I18n.t("is_blank"))
132
+ ])
133
+ }
134
+ additional_control = $('<input class="additional-fieldset input-sm form-control" type="text" />')
135
+ .css('display', field_operator == "_present" || field_operator == "_blank" ? 'none' : 'inline-block')
136
+ .prop('name', value_name)
137
+ .prop('value', field_value);
81
138
  break;
82
139
  case 'integer':
83
140
  case 'decimal':
84
141
  case 'float':
85
- control = '<select class="switch-additionnal-fieldsets input-sm form-control" name="' + operator_name + '">' +
86
- '<option ' + (field_operator == "default" ? 'selected="selected"' : '') + ' data-additional-fieldset="default" value="default">' + RailsAdmin.I18n.t("number") + '</option>' +
87
- '<option ' + (field_operator == "between" ? 'selected="selected"' : '') + ' data-additional-fieldset="between" value="between">' + RailsAdmin.I18n.t("between_and_") + '</option>' +
88
- '<option disabled="disabled">---------</option>' +
89
- '<option ' + (field_operator == "_not_null" ? 'selected="selected"' : '') + ' value="_not_null">' + RailsAdmin.I18n.t("is_present") +'</option>' +
90
- '<option ' + (field_operator == "_null" ? 'selected="selected"' : '') + ' value="_null" >' + RailsAdmin.I18n.t("is_blank") + '</option>' +
91
- '</select>'
142
+ control = $('<select class="switch-additional-fieldsets input-sm form-control"></select>')
143
+ .prop('name', operator_name)
144
+ .append($('<option data-additional-fieldset="default" value="default"></option>').prop('selected', field_operator == "default").text(RailsAdmin.I18n.t("number")))
145
+ .append($('<option data-additional-fieldset="between" value="between"></option>').prop('selected', field_operator == "between").text(RailsAdmin.I18n.t("between_and_")))
146
+ if (!required) {
147
+ control.append([
148
+ '<option disabled="disabled">---------</option>',
149
+ $('<option value="_not_null"></option>').prop('selected', field_operator == "_not_null").text(RailsAdmin.I18n.t("is_present")),
150
+ $('<option value="_null"></option>').prop('selected', field_operator == "_null").text(RailsAdmin.I18n.t("is_blank"))
151
+ ])
152
+ }
92
153
  additional_control =
93
- '<input class="additional-fieldset default input-sm form-control" style="display:' + ((!field_operator || field_operator == "default") ? 'inline-block' : 'none') + ';" type="' + field_type + '" name="' + value_name + '[]" value="' + (field_value[0] || '') + '" /> ' +
94
- '<input placeholder="-∞" class="additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="' + field_type + '" name="' + value_name + '[]" value="' + (field_value[1] || '') + '" /> ' +
95
- '<input placeholder="∞" class="additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="' + field_type + '" name="' + value_name + '[]" value="' + (field_value[2] || '') + '" />';
154
+ $('<input class="additional-fieldset default input-sm form-control" type="text" />')
155
+ .css('display', (!field_operator || field_operator == "default") ? 'inline-block' : 'none')
156
+ .prop('type', field_type)
157
+ .prop('name', value_name + '[]')
158
+ .prop('value', field_value[0] || '')
159
+ .add(
160
+ $('<input placeholder="-∞" class="additional-fieldset between input-sm form-control" />')
161
+ .css('display', (field_operator == "between") ? 'inline-block' : 'none')
162
+ .prop('type', field_type)
163
+ .prop('name', value_name + '[]')
164
+ .prop('value', field_value[1] || '')
165
+ )
166
+ .add(
167
+ $('<input placeholder="∞" class="additional-fieldset between input-sm form-control" />')
168
+ .css('display', (field_operator == "between") ? 'inline-block' : 'none')
169
+ .prop('type', field_type)
170
+ .prop('name', value_name + '[]')
171
+ .prop('value', field_value[2] || '')
172
+ );
96
173
  break;
97
174
  default:
98
- control = '<input type="text" class="input-sm form-control" name="' + value_name + '" value="' + field_value + '"/> ';
175
+ control = $('<input type="text" class="input-sm form-control" />')
176
+ .prop('name', value_name)
177
+ .prop('value', field_value);
99
178
  break;
100
179
  }
101
180
 
181
+ var filterContainerId = field_name + '-' + index + '-filter-container';
182
+ $('p#' + filterContainerId).remove();
183
+
102
184
  var $content = $('<p>')
185
+ .attr('id', filterContainerId)
103
186
  .addClass('filter form-search')
104
- .append('<span class="label label-info form-label"><a href="#delete" class="delete"><i class="fa fa-trash-o fa-fw icon-white"></i>' + field_label + '</a></span>')
105
- .append('&nbsp;' + control + '&nbsp;' + (additional_control || ''));
187
+ .append(
188
+ $('<span class="label label-info form-label"></span>')
189
+ .append($('<a href="#delete" class="delete"></a>').append('<i class="fa fa-trash-o fa-fw icon-white"></i>').append(document.createTextNode(field_label)))
190
+ )
191
+ .append('&nbsp;')
192
+ .append(control)
193
+ .append('&nbsp;')
194
+ .append(additional_control);
106
195
 
107
196
  $('#filters_box').append($content);
108
197
 
@@ -125,6 +214,7 @@
125
214
  value: $(this).data('field-value'),
126
215
  operator: $(this).data('field-operator'),
127
216
  select_options: $(this).data('field-options'),
217
+ required: $(this).data('field-required'),
128
218
  index: $.now().toString().slice(6,11),
129
219
  datetimepicker_format: $(this).data('field-datetimepicker-format')
130
220
  });
@@ -146,7 +236,7 @@
146
236
  $(this).find('i').toggleClass("icon-plus icon-minus")
147
237
  });
148
238
 
149
- $(document).on('change', "#filters_box .switch-additionnal-fieldsets", function(e) {
239
+ $(document).on('change', "#filters_box .switch-additional-fieldsets", function(e) {
150
240
  var selected_option = $(this).find('option:selected');
151
241
  if(klass = $(selected_option).data('additional-fieldset')) {
152
242
  $(this).siblings('.additional-fieldset:not(.' + klass + ')').hide('slow');
@@ -19,13 +19,13 @@
19
19
  sortable: false,
20
20
  removable: true,
21
21
  regional: {
22
- up: "Up",
23
- down: "Down",
24
- add: "Add",
25
- chooseAll: "Choose all",
26
- chosen: "Chosen records",
27
- clearAll: "Clear all",
28
- remove: "Remove"
22
+ add: 'Add',
23
+ chooseAll: 'Choose all',
24
+ clearAll: 'Clear all',
25
+ down: 'Down',
26
+ remove: 'Remove',
27
+ search: 'Search',
28
+ up: 'Up'
29
29
  },
30
30
  searchDelay: 400,
31
31
  remote_source: null,
@@ -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
  });
@@ -186,12 +186,13 @@
186
186
  }
187
187
  if (filtered.length > 0) {
188
188
  widget.collection[0].innerHTML = '';
189
- var filteredContainer = [];
190
189
  for (i = 0; i < filtered.length; i++) {
191
- var newOptions = '<option value="'+matches[filtered[i]].id+'" title="'+matches[filtered[i]].label+'">'+matches[filtered[i]].label+'</option>';
192
- filteredContainer.push(newOptions);
190
+ var newOptions = $('<option></option>')
191
+ .prop('value', matches[filtered[i]].id)
192
+ .prop('title', matches[filtered[i]].label)
193
+ .text(matches[filtered[i]].label);
194
+ $(widget.collection[0]).append(newOptions);
193
195
  }
194
- widget.collection[0].innerHTML = filteredContainer.join("");
195
196
  } else {
196
197
  widget.collection[0].innerHTML = widget.noObjectsPlaceholder;
197
198
  }
@@ -212,12 +213,11 @@
212
213
  var widget = this;
213
214
 
214
215
  this.element.find("option").each(function(i, option) {
216
+ widget._cache['o_' + option.value] = {id: option.value, value: $(option).text()};
215
217
  if (option.selected) {
216
- widget._cache['o_' + option.value] = {id: option.value, value: option.innerHTML};
217
- $(option).clone().appendTo(widget.selection).attr("selected", false).attr("title", $(option).text());
218
+ $(option).clone().appendTo(widget.selection).prop("selected", false).prop("title", $(option).text());
218
219
  } else {
219
- widget._cache['o_' + option.value] = {id: option.value, value: option.innerHTML};
220
- $(option).clone().appendTo(widget.collection).attr("selected", false).attr("title", $(option).text());
220
+ $(option).clone().appendTo(widget.collection).prop("selected", false).prop("title", $(option).text());
221
221
  }
222
222
  });
223
223
  },
@@ -227,7 +227,7 @@
227
227
  options.each(function(i, option) {
228
228
  widget.element.find('option[value="' + option.value + '"]').removeAttr("selected");
229
229
  });
230
- $(options).appendTo(this.collection).attr('selected', false);
230
+ $(options).appendTo(this.collection).prop('selected', false);
231
231
  },
232
232
 
233
233
  _query: function(query, success) {
@@ -282,12 +282,12 @@
282
282
  options.each(function(i, option) {
283
283
  var el = widget.element.find('option[value="' + option.value + '"]');
284
284
  if (el.length) {
285
- el.attr("selected", "selected");
285
+ el.prop("selected", true);
286
286
  } else {
287
- widget.element.append($('<option></option>').attr('value', option.value).attr('selected', "selected"));
287
+ widget.element.append($('<option></option>').prop('value', option.value).prop('selected', true));
288
288
  }
289
289
  });
290
- $(options).appendTo(this.selection).attr('selected', false);
290
+ $(options).appendTo(this.selection).prop('selected', false);
291
291
  },
292
292
 
293
293
  _move: function(direction, options) {
@@ -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
  },
@@ -189,6 +190,11 @@
189
190
  input.attr('placeholder', this.element.attr('placeholder'));
190
191
  }
191
192
 
193
+ if (this.element.attr('required')) {
194
+ input.attr('required', this.element.attr('required'));
195
+ this.element.attr('required', false);
196
+ }
197
+
192
198
  return input;
193
199
  },
194
200
 
@@ -196,7 +202,7 @@
196
202
  return $('<div>')
197
203
  .addClass('input-group filtering-select col-sm-2')
198
204
  .attr('data-input-for', inputFor)
199
- .css('float', 'left');
205
+ .css('float', this.element.css("float"));
200
206
  },
201
207
 
202
208
  _initAutocomplete: function() {
@@ -281,6 +287,7 @@
281
287
  this.input.remove();
282
288
  this.button.remove();
283
289
  this.element.show();
290
+ this.filtering_select.remove();
284
291
  $.Widget.prototype.destroy.call(this);
285
292
  }
286
293
  });