rails_admin 1.2.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
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
  });