rails_admin 0.8.1 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (313) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +17 -34
  3. data/LICENSE.md +1 -1
  4. data/README.md +34 -26
  5. data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
  6. data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
  7. data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  8. data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  9. data/app/assets/images/rails_admin/bullet_black.png +0 -0
  10. data/app/assets/images/rails_admin/bullet_white.png +0 -0
  11. data/app/assets/images/rails_admin/calendar.png +0 -0
  12. data/app/assets/images/rails_admin/clock.png +0 -0
  13. data/app/assets/images/rails_admin/magnifier.png +0 -0
  14. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
  15. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
  16. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
  17. data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
  18. data/app/assets/javascripts/rails_admin/jquery-ui.js.erb +8 -0
  19. data/app/assets/javascripts/rails_admin/jquery.migrate.js +3 -0
  20. data/app/assets/javascripts/rails_admin/ra.filter-box.js +148 -60
  21. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +31 -26
  22. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +211 -110
  23. data/app/assets/javascripts/rails_admin/ra.i18n.js +28 -0
  24. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +59 -0
  25. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
  26. data/app/assets/javascripts/rails_admin/ra.widgets.js +379 -0
  27. data/app/assets/javascripts/rails_admin/rails_admin.js +5 -5
  28. data/app/assets/javascripts/rails_admin/ui.js +135 -0
  29. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  30. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  31. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  32. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  33. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss +5 -5
  34. data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +29 -0
  35. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +9 -1
  36. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +2 -1
  37. data/app/controllers/rails_admin/application_controller.rb +14 -8
  38. data/app/controllers/rails_admin/main_controller.rb +9 -9
  39. data/app/helpers/rails_admin/application_helper.rb +26 -11
  40. data/app/helpers/rails_admin/form_builder.rb +20 -12
  41. data/app/helpers/rails_admin/main_helper.rb +8 -7
  42. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_gap.html.haml +0 -0
  43. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_next_page.html.haml +0 -0
  44. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_page.html.haml +0 -0
  45. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_paginator.html.haml +0 -0
  46. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_prev_page.html.haml +0 -0
  47. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.haml +4 -0
  48. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.haml +4 -0
  49. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.haml +4 -0
  50. data/app/views/layouts/rails_admin/_head.html.haml +7 -0
  51. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +2 -2
  52. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
  53. data/app/views/layouts/rails_admin/application.html.haml +4 -10
  54. data/app/views/layouts/rails_admin/pjax.html.haml +1 -5
  55. data/app/views/rails_admin/main/_delete_notice.html.haml +14 -9
  56. data/app/views/rails_admin/main/_form_action_text.html.haml +7 -0
  57. data/app/views/rails_admin/main/_form_colorpicker.html.haml +1 -1
  58. data/app/views/rails_admin/main/_form_enumeration.html.haml +4 -3
  59. data/app/views/rails_admin/main/_form_file_upload.html.haml +5 -5
  60. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +7 -6
  61. data/app/views/rails_admin/main/_form_filtering_select.html.haml +1 -1
  62. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +16 -0
  63. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +18 -3
  64. data/app/views/rails_admin/main/_form_simple_mde.haml +8 -0
  65. data/app/views/rails_admin/main/dashboard.html.haml +5 -6
  66. data/app/views/rails_admin/main/export.html.haml +45 -36
  67. data/app/views/rails_admin/main/history.html.haml +3 -3
  68. data/app/views/rails_admin/main/index.html.haml +37 -26
  69. data/app/views/rails_admin/main/show.html.haml +6 -7
  70. data/config/initializers/active_record_extensions.rb +3 -3
  71. data/config/initializers/haml.rb +4 -1
  72. data/config/locales/rails_admin.en.yml +5 -2
  73. data/lib/generators/rails_admin/templates/initializer.erb +6 -2
  74. data/lib/rails_admin/abstract_model.rb +9 -10
  75. data/lib/rails_admin/adapters/active_record/abstract_object.rb +9 -3
  76. data/lib/rails_admin/adapters/active_record/property.rb +1 -5
  77. data/lib/rails_admin/adapters/active_record.rb +83 -28
  78. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +3 -3
  79. data/lib/rails_admin/adapters/mongoid/association.rb +18 -6
  80. data/lib/rails_admin/adapters/mongoid/bson.rb +29 -0
  81. data/lib/rails_admin/adapters/mongoid/extension.rb +4 -2
  82. data/lib/rails_admin/adapters/mongoid/property.rb +3 -3
  83. data/lib/rails_admin/adapters/mongoid.rb +40 -26
  84. data/lib/rails_admin/bootstrap-sass/compass_functions.rb +1 -1
  85. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +1 -3
  86. data/lib/rails_admin/bootstrap-sass.rb +8 -6
  87. data/lib/rails_admin/config/actions/base.rb +20 -5
  88. data/lib/rails_admin/config/actions/bulk_delete.rb +2 -4
  89. data/lib/rails_admin/config/actions/dashboard.rb +9 -5
  90. data/lib/rails_admin/config/actions/edit.rb +1 -3
  91. data/lib/rails_admin/config/actions/export.rb +1 -1
  92. data/lib/rails_admin/config/actions/index.rb +5 -3
  93. data/lib/rails_admin/config/actions/new.rb +4 -5
  94. data/lib/rails_admin/config/actions.rb +1 -1
  95. data/lib/rails_admin/config/configurable.rb +25 -18
  96. data/lib/rails_admin/config/fields/association.rb +11 -3
  97. data/lib/rails_admin/config/fields/base.rb +20 -27
  98. data/lib/rails_admin/config/fields/factories/action_text.rb +12 -0
  99. data/lib/rails_admin/config/fields/factories/active_storage.rb +30 -0
  100. data/lib/rails_admin/config/fields/factories/carrierwave.rb +4 -2
  101. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  102. data/lib/rails_admin/config/fields/factories/shrine.rb +27 -0
  103. data/lib/rails_admin/config/fields/types/action_text.rb +30 -0
  104. data/lib/rails_admin/config/fields/types/active_record_enum.rb +19 -2
  105. data/lib/rails_admin/config/fields/types/active_storage.rb +49 -0
  106. data/lib/rails_admin/config/fields/types/all.rb +7 -1
  107. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +8 -0
  108. data/lib/rails_admin/config/fields/types/bson_object_id.rb +1 -15
  109. data/lib/rails_admin/config/fields/types/ck_editor.rb +7 -7
  110. data/lib/rails_admin/config/fields/types/code_mirror.rb +10 -12
  111. data/lib/rails_admin/config/fields/types/color.rb +2 -2
  112. data/lib/rails_admin/config/fields/types/datetime.rb +6 -3
  113. data/lib/rails_admin/config/fields/types/file_upload.rb +12 -4
  114. data/lib/rails_admin/config/fields/types/froala.rb +9 -11
  115. data/lib/rails_admin/config/fields/types/has_many_association.rb +1 -1
  116. data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
  117. data/lib/rails_admin/config/fields/types/json.rb +9 -1
  118. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +53 -0
  119. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +56 -0
  120. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +125 -0
  121. data/lib/rails_admin/config/fields/types/password.rb +5 -1
  122. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +12 -1
  123. data/lib/rails_admin/config/fields/types/serialized.rb +2 -2
  124. data/lib/rails_admin/config/fields/types/shrine.rb +54 -0
  125. data/lib/rails_admin/config/fields/types/simple_mde.rb +36 -0
  126. data/lib/rails_admin/config/fields/types/string.rb +8 -7
  127. data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
  128. data/lib/rails_admin/config/fields/types/text.rb +2 -20
  129. data/lib/rails_admin/config/fields/types/wysihtml5.rb +14 -10
  130. data/lib/rails_admin/config/fields/types.rb +1 -1
  131. data/lib/rails_admin/config/fields.rb +3 -1
  132. data/lib/rails_admin/config/has_fields.rb +1 -1
  133. data/lib/rails_admin/config/has_groups.rb +1 -1
  134. data/lib/rails_admin/config/hideable.rb +1 -1
  135. data/lib/rails_admin/config/inspectable.rb +39 -0
  136. data/lib/rails_admin/config/lazy_model.rb +48 -8
  137. data/lib/rails_admin/config/model.rb +10 -22
  138. data/lib/rails_admin/config/proxyable/proxy.rb +7 -9
  139. data/lib/rails_admin/config/proxyable.rb +13 -1
  140. data/lib/rails_admin/config/sections/base.rb +4 -17
  141. data/lib/rails_admin/config/sections/list.rb +37 -0
  142. data/lib/rails_admin/config.rb +46 -25
  143. data/lib/rails_admin/engine.rb +37 -4
  144. data/lib/rails_admin/extension.rb +16 -4
  145. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +23 -7
  146. data/lib/rails_admin/extensions/cancancan.rb +1 -1
  147. data/lib/rails_admin/extensions/controller_extension.rb +6 -0
  148. data/lib/rails_admin/extensions/history/auditing_adapter.rb +2 -2
  149. data/lib/rails_admin/extensions/history/history.rb +2 -2
  150. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +59 -17
  151. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +11 -3
  152. data/lib/rails_admin/support/csv_converter.rb +20 -14
  153. data/lib/rails_admin/support/datetime.rb +7 -6
  154. data/lib/rails_admin/support/i18n.rb +7 -5
  155. data/lib/rails_admin/version.rb +2 -2
  156. data/lib/rails_admin.rb +23 -1
  157. data/lib/tasks/rails_admin.rake +16 -7
  158. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  159. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  160. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +2671 -0
  161. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  162. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  163. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  164. data/vendor/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  165. data/vendor/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  166. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  167. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  168. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  169. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  170. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  171. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  172. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  173. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  174. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  175. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  176. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  177. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  178. data/vendor/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  179. data/vendor/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  180. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  181. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  182. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  183. data/vendor/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  184. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  185. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  186. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  187. data/vendor/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  188. data/vendor/assets/images/rails_admin/colorpicker/select.png +0 -0
  189. data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
  190. data/vendor/assets/images/rails_admin/colorpicker/slider.png +0 -0
  191. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +50 -28
  192. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +10 -7
  193. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +35 -20
  194. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +48 -25
  195. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +70 -28
  196. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +56 -42
  197. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +118 -40
  198. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +26 -16
  199. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +29 -27
  200. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +46 -19
  201. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +280 -60
  202. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +5 -5
  203. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
  204. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
  205. data/vendor/assets/javascripts/rails_admin/bootstrap-datetimepicker.js +317 -150
  206. data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
  207. data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +316 -161
  208. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +16528 -8420
  209. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
  210. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
  211. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
  212. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
  213. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
  214. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
  215. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
  216. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
  217. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
  218. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
  219. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
  220. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
  221. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
  222. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
  223. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
  224. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
  225. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
  226. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
  227. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
  228. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
  229. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
  230. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
  231. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
  232. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
  233. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
  234. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
  235. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
  236. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
  237. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
  238. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
  239. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
  240. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
  241. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
  242. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
  243. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
  244. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
  245. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
  246. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
  247. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
  248. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
  249. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
  250. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
  251. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
  252. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
  253. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
  254. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
  255. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
  256. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
  257. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
  258. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
  259. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
  260. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
  261. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
  262. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
  263. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
  264. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
  265. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  266. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
  267. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
  268. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
  269. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
  270. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
  271. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
  272. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
  273. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
  274. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
  275. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
  276. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
  277. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
  278. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  279. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +2342 -0
  280. data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
  281. metadata +214 -199
  282. data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  283. data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  284. data/app/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  285. data/app/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  286. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  287. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  288. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  289. data/app/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  290. data/app/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  291. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  292. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  293. data/app/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  294. data/app/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  295. data/app/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  296. data/app/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  297. data/app/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  298. data/app/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  299. data/app/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  300. data/app/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  301. data/app/assets/images/rails_admin/colorpicker/select.png +0 -0
  302. data/app/assets/images/rails_admin/colorpicker/slider.png +0 -0
  303. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  304. data/app/assets/javascripts/rails_admin/jquery.remotipart.fixed.js +0 -72
  305. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -8
  306. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -52
  307. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -308
  308. data/app/assets/javascripts/rails_admin/ui.coffee +0 -102
  309. data/config/initializers/devise_patch.rb +0 -9
  310. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  311. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  312. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
  313. data/lib/rails_admin/extensions/cancan.rb +0 -3
@@ -11,9 +11,13 @@ module RailsAdmin
11
11
  end
12
12
 
13
13
  class ApplicationController < Config.parent_controller.constantize
14
- before_filter :_authenticate!
15
- before_filter :_authorize!
16
- before_filter :_audit!
14
+ include RailsAdmin::Extensions::ControllerExtension
15
+
16
+ protect_from_forgery(Config.forgery_protection_settings)
17
+
18
+ before_action :_authenticate!
19
+ before_action :_authorize!
20
+ before_action :_audit!
17
21
 
18
22
  helper_method :_current_user, :_get_plugin_name
19
23
 
@@ -21,13 +25,13 @@ module RailsAdmin
21
25
 
22
26
  def get_model
23
27
  @model_name = to_model_name(params[:model_name])
24
- fail(RailsAdmin::ModelNotFound) unless (@abstract_model = RailsAdmin::AbstractModel.new(@model_name))
25
- fail(RailsAdmin::ModelNotFound) if (@model_config = @abstract_model.config).excluded?
28
+ raise(RailsAdmin::ModelNotFound) unless (@abstract_model = RailsAdmin::AbstractModel.new(@model_name))
29
+ raise(RailsAdmin::ModelNotFound) if (@model_config = @abstract_model.config).excluded?
26
30
  @properties = @abstract_model.properties
27
31
  end
28
32
 
29
33
  def get_object
30
- fail(RailsAdmin::ObjectNotFound) unless (@object = @abstract_model.get(params[:id]))
34
+ raise(RailsAdmin::ObjectNotFound) unless (@object = @abstract_model.get(params[:id]))
31
35
  end
32
36
 
33
37
  def to_model_name(param)
@@ -56,19 +60,21 @@ module RailsAdmin
56
60
  instance_eval(&RailsAdmin::Config.audit_with)
57
61
  end
58
62
 
59
- def user_for_paper_trail
60
- _current_user.try(:id) || _current_user
63
+ def rails_admin_controller?
64
+ true
61
65
  end
62
66
 
63
67
  rescue_from RailsAdmin::ObjectNotFound do
64
68
  flash[:error] = I18n.t('admin.flash.object_not_found', model: @model_name, id: params[:id])
65
69
  params[:action] = 'index'
70
+ @status_code = :not_found
66
71
  index
67
72
  end
68
73
 
69
74
  rescue_from RailsAdmin::ModelNotFound do
70
75
  flash[:error] = I18n.t('admin.flash.model_not_found', model: @model_name)
71
76
  params[:action] = 'dashboard'
77
+ @status_code = :not_found
72
78
  dashboard
73
79
  end
74
80
  end
@@ -6,9 +6,9 @@ module RailsAdmin
6
6
 
7
7
  layout :get_layout
8
8
 
9
- before_filter :get_model, except: RailsAdmin::Config::Actions.all(:root).collect(&:action_name)
10
- before_filter :get_object, only: RailsAdmin::Config::Actions.all(:member).collect(&:action_name)
11
- before_filter :check_for_cancel
9
+ before_action :get_model, except: RailsAdmin::Config::Actions.all(:root).collect(&:action_name)
10
+ before_action :get_object, only: RailsAdmin::Config::Actions.all(:member).collect(&:action_name)
11
+ before_action :check_for_cancel
12
12
 
13
13
  RailsAdmin::Config::Actions.all.each do |action|
14
14
  class_eval <<-EOS, __FILE__, __LINE__ + 1
@@ -75,7 +75,7 @@ module RailsAdmin
75
75
  end
76
76
 
77
77
  def redirect_to_on_success
78
- notice = t('admin.flash.successful', name: @model_config.label, action: t("admin.actions.#{@action.key}.done"))
78
+ notice = I18n.t('admin.flash.successful', name: @model_config.label, action: I18n.t("admin.actions.#{@action.key}.done"))
79
79
  if params[:_add_another]
80
80
  redirect_to new_path(return_to: params[:return_to]), flash: {success: notice}
81
81
  elsif params[:_add_edit]
@@ -93,7 +93,7 @@ module RailsAdmin
93
93
  return unless target_params.present?
94
94
  fields = visible_fields(action, model_config)
95
95
  allowed_methods = fields.collect(&:allowed_methods).flatten.uniq.collect(&:to_s) << 'id' << '_destroy'
96
- fields.each { |field| field.parse_input(target_params) }
96
+ fields.each { |field| field.parse_input(target_params) }
97
97
  target_params.slice!(*allowed_methods)
98
98
  target_params.permit! if target_params.respond_to?(:permit!)
99
99
  fields.select(&:nested_form).each do |association|
@@ -105,22 +105,22 @@ module RailsAdmin
105
105
  end
106
106
 
107
107
  def handle_save_error(whereto = :new)
108
- flash.now[:error] = t('admin.flash.error', name: @model_config.label, action: t("admin.actions.#{@action.key}.done").html_safe).html_safe
108
+ flash.now[:error] = I18n.t('admin.flash.error', name: @model_config.label, action: I18n.t("admin.actions.#{@action.key}.done").html_safe).html_safe
109
109
  flash.now[:error] += %(<br>- #{@object.errors.full_messages.join('<br>- ')}).html_safe
110
110
 
111
111
  respond_to do |format|
112
112
  format.html { render whereto, status: :not_acceptable }
113
- format.js { render whereto, layout: false, status: :not_acceptable }
113
+ format.js { render whereto, layout: false, status: :not_acceptable }
114
114
  end
115
115
  end
116
116
 
117
117
  def check_for_cancel
118
118
  return unless params[:_continue] || (params[:bulk_action] && !params[:bulk_ids])
119
- redirect_to(back_or_index, notice: t('admin.flash.noaction'))
119
+ redirect_to(back_or_index, notice: I18n.t('admin.flash.noaction'))
120
120
  end
121
121
 
122
122
  def get_collection(model_config, scope, pagination)
123
- associations = model_config.list.fields.select { |f| f.type == :belongs_to_association && !f.polymorphic? }.collect { |f| f.association.name }
123
+ associations = model_config.list.fields.select { |f| f.try(:eager_load?) }.collect { |f| f.association.name }
124
124
  options = {}
125
125
  options = options.merge(page: (params[Kaminari.config.param_name] || 1).to_i, per: (params[:per] || model_config.list.items_per_page)) if pagination
126
126
  options = options.merge(include: associations) unless associations.blank?
@@ -35,9 +35,9 @@ module RailsAdmin
35
35
  return nil unless _current_user.respond_to?(:email)
36
36
  return nil unless abstract_model = RailsAdmin.config(_current_user.class).abstract_model
37
37
  return nil unless (edit_action = RailsAdmin::Config::Actions.find(:edit, controller: controller, abstract_model: abstract_model, object: _current_user)).try(:authorized?)
38
- link_to url_for(action: edit_action.action_name, model_name: abstract_model.to_param, id: _current_user.id, controller: 'rails_admin/main') do
38
+ link_to rails_admin.url_for(action: edit_action.action_name, model_name: abstract_model.to_param, id: _current_user.id, controller: 'rails_admin/main') do
39
39
  html = []
40
- html << image_tag("#{(request.ssl? ? 'https://secure' : 'http://www')}.gravatar.com/avatar/#{Digest::MD5.hexdigest _current_user.email}?s=30", alt: '') if _current_user.email.present?
40
+ html << image_tag("#{(request.ssl? ? 'https://secure' : 'http://www')}.gravatar.com/avatar/#{Digest::MD5.hexdigest _current_user.email}?s=30", alt: '') if RailsAdmin::Config.show_gravatar && _current_user.email.present?
41
41
  html << content_tag(:span, _current_user.email)
42
42
  html.join.html_safe
43
43
  end
@@ -47,8 +47,8 @@ module RailsAdmin
47
47
  if defined?(Devise)
48
48
  scope = Devise::Mapping.find_scope!(_current_user)
49
49
  main_app.send("destroy_#{scope}_session_path") rescue false
50
- else
51
- main_app.logout_path if main_app.respond_to?(:logout_path)
50
+ elsif main_app.respond_to?(:logout_path)
51
+ main_app.logout_path
52
52
  end
53
53
  end
54
54
 
@@ -84,9 +84,24 @@ module RailsAdmin
84
84
  end.join.html_safe
85
85
  end
86
86
 
87
+ def root_navigation
88
+ actions(:root).select(&:show_in_sidebar).group_by(&:sidebar_label).collect do |label, nodes|
89
+ li_stack = nodes.map do |node|
90
+ url = rails_admin.url_for(action: node.action_name, controller: "rails_admin/main")
91
+ nav_icon = node.link_icon ? %(<i class="#{node.link_icon}"></i>).html_safe : ''
92
+ content_tag :li do
93
+ link_to nav_icon + " " + wording_for(:menu, node), url, class: "pjax"
94
+ end
95
+ end.join.html_safe
96
+ label ||= t('admin.misc.root_navigation')
97
+
98
+ %(<li class='dropdown-header'>#{capitalize_first_letter label}</li>#{li_stack}) if li_stack.present?
99
+ end.join.html_safe
100
+ end
101
+
87
102
  def static_navigation
88
103
  li_stack = RailsAdmin::Config.navigation_static_links.collect do |title, url|
89
- content_tag(:li, link_to(title.to_s, url, target: '_blank'))
104
+ content_tag(:li, link_to(title.to_s, url, target: '_blank', rel: 'noopener noreferrer'))
90
105
  end.join
91
106
 
92
107
  label = RailsAdmin::Config.navigation_static_label || t('admin.misc.navigation_static_label')
@@ -97,7 +112,7 @@ module RailsAdmin
97
112
  def navigation(nodes_stack, nodes, level = 0)
98
113
  nodes.collect do |node|
99
114
  model_param = node.abstract_model.to_param
100
- url = url_for(action: :index, controller: 'rails_admin/main', model_name: model_param)
115
+ url = rails_admin.url_for(action: :index, controller: 'rails_admin/main', model_name: model_param)
101
116
  level_class = " nav-level-#{level}" if level > 0
102
117
  nav_icon = node.navigation_icon ? %(<i class="#{node.navigation_icon}"></i>).html_safe : ''
103
118
  li = content_tag :li, data: {model: model_param} do
@@ -110,7 +125,7 @@ module RailsAdmin
110
125
  def breadcrumb(action = @action, _acc = [])
111
126
  begin
112
127
  (parent_actions ||= []) << action
113
- end while action.breadcrumb_parent && (action = action(*action.breadcrumb_parent)) # rubocop:disable Loop
128
+ end while action.breadcrumb_parent && (action = action(*action.breadcrumb_parent)) # rubocop:disable Lint/Loop
114
129
 
115
130
  content_tag(:ol, class: 'breadcrumb') do
116
131
  parent_actions.collect do |a|
@@ -120,7 +135,7 @@ module RailsAdmin
120
135
  crumb = begin
121
136
  if !current_action?(a, am, o)
122
137
  if a.http_methods.include?(:get)
123
- link_to url_for(action: a.action_name, controller: 'rails_admin/main', model_name: am.try(:to_param), id: (o.try(:persisted?) && o.try(:id) || nil)), class: 'pjax' do
138
+ link_to rails_admin.url_for(action: a.action_name, controller: 'rails_admin/main', model_name: am.try(:to_param), id: (o.try(:persisted?) && o.try(:id) || nil)), class: 'pjax' do
124
139
  wording_for(:breadcrumb, a, am, o)
125
140
  end
126
141
  else
@@ -138,12 +153,12 @@ module RailsAdmin
138
153
 
139
154
  # parent => :root, :collection, :member
140
155
  def menu_for(parent, abstract_model = nil, object = nil, only_icon = false) # perf matters here (no action view trickery)
141
- actions = actions(parent, abstract_model, object).select { |a| a.http_methods.include?(:get) }
156
+ actions = actions(parent, abstract_model, object).select { |a| a.http_methods.include?(:get) && a.show_in_menu }
142
157
  actions.collect do |action|
143
158
  wording = wording_for(:menu, action)
144
159
  %(
145
160
  <li title="#{wording if only_icon}" rel="#{'tooltip' if only_icon}" class="icon #{action.key}_#{parent}_link #{'active' if current_action?(action)}">
146
- <a class="#{action.pjax? ? 'pjax' : ''}" href="#{url_for(action: action.action_name, controller: 'rails_admin/main', model_name: abstract_model.try(:to_param), id: (object.try(:persisted?) && object.try(:id) || nil))}">
161
+ <a class="#{action.pjax? ? 'pjax' : ''}" href="#{rails_admin.url_for(action: action.action_name, controller: 'rails_admin/main', model_name: abstract_model.try(:to_param), id: (object.try(:persisted?) && object.try(:id) || nil))}">
147
162
  <i class="#{action.link_icon}"></i>
148
163
  <span#{only_icon ? " style='display:none'" : ''}>#{wording}</span>
149
164
  </a>
@@ -160,7 +175,7 @@ module RailsAdmin
160
175
  content_tag(:ul, class: 'dropdown-menu', style: 'left:auto; right:0;') do
161
176
  actions.collect do |action|
162
177
  content_tag :li do
163
- link_to wording_for(:bulk_link, action), '#', onclick: "jQuery('#bulk_action').val('#{action.action_name}'); jQuery('#bulk_form').submit(); return false;"
178
+ link_to wording_for(:bulk_link, action, abstract_model), '#', class: 'bulk-link', data: {action: action.action_name}
164
179
  end
165
180
  end.join.html_safe
166
181
  end
@@ -1,3 +1,5 @@
1
+ require 'nested_form/builder_mixin'
2
+
1
3
  module RailsAdmin
2
4
  class FormBuilder < ::ActionView::Helpers::FormBuilder
3
5
  include ::NestedForm::BuilderMixin
@@ -20,10 +22,17 @@ module RailsAdmin
20
22
  end
21
23
 
22
24
  def fieldset_for(fieldset, nested_in)
23
- return unless (fields = fieldset.with(form: self, object: @object, view: @template, controller: @template.controller).visible_fields).length > 0
25
+ fields = fieldset.with(
26
+ form: self,
27
+ object: @object,
28
+ view: @template,
29
+ controller: @template.controller,
30
+ ).visible_fields
31
+ return if fields.empty?
32
+
24
33
  @template.content_tag :fieldset do
25
34
  contents = []
26
- contents << @template.content_tag(:legend, %(<i class="icon-chevron-#{(fieldset.active? ? 'down' : 'right')}"></i> #{fieldset.label}).html_safe, style: "#{fieldset.name == :default ? 'display:none' : ''}")
35
+ contents << @template.content_tag(:legend, %(<i class="icon-chevron-#{(fieldset.active? ? 'down' : 'right')}"></i> #{fieldset.label}).html_safe, style: fieldset.name == :default ? 'display:none' : '')
27
36
  contents << @template.content_tag(:p, fieldset.help) if fieldset.help.present?
28
37
  contents << fields.collect { |field| field_wrapper_for(field, nested_in) }.join
29
38
  contents.join.html_safe
@@ -31,16 +40,15 @@ module RailsAdmin
31
40
  end
32
41
 
33
42
  def field_wrapper_for(field, nested_in)
34
- if field.label
35
- # do not show nested field if the target is the origin
36
- unless nested_field_association?(field, nested_in)
37
- @template.content_tag(:div, class: "form-group control-group #{field.type_css_class} #{field.css_class} #{'error' if field.errors.present?}", id: "#{dom_id(field)}_field") do
38
- label(field.method_name, capitalize_first_letter(field.label), class: 'col-sm-2 control-label') +
39
- (field.nested_form ? field_for(field) : input_for(field))
40
- end
43
+ # do not show nested field if the target is the origin
44
+ return if nested_field_association?(field, nested_in)
45
+ @template.content_tag(:div, class: "form-group control-group #{field.type_css_class} #{field.css_class} #{'error' if field.errors.present?}", id: "#{dom_id(field)}_field") do
46
+ if field.label
47
+ label(field.method_name, capitalize_first_letter(field.label), class: 'col-sm-2 control-label') +
48
+ (field.nested_form ? field_for(field) : input_for(field))
49
+ else
50
+ field.nested_form ? field_for(field) : input_for(field)
41
51
  end
42
- else
43
- field.nested_form ? field_for(field) : input_for(field)
44
52
  end
45
53
  end
46
54
 
@@ -131,7 +139,7 @@ module RailsAdmin
131
139
 
132
140
  def nested_field_association?(field, nested_in)
133
141
  field.inverse_of.presence && nested_in.presence && field.inverse_of == nested_in.name &&
134
- (@template.instance_variable_get(:@model_config).abstract_model == field.associated_model_config.abstract_model ||
142
+ (@template.instance_variable_get(:@model_config).abstract_model == field.abstract_model ||
135
143
  field.name == nested_in.inverse_of)
136
144
  end
137
145
  end
@@ -43,7 +43,7 @@ module RailsAdmin
43
43
  def ordered_filters
44
44
  return @ordered_filters if @ordered_filters.present?
45
45
  @index = 0
46
- @ordered_filters = (params[:f] || @model_config.list.filters).inject({}) do |memo, filter|
46
+ @ordered_filters = (params[:f].try(:permit!).try(:to_h) || @model_config.list.filters).inject({}) do |memo, filter|
47
47
  field_name = filter.is_a?(Array) ? filter.first : filter
48
48
  (filter.is_a?(Array) ? filter.last : {(@index += 1) => {'v' => ''}}).each do |index, filter_hash|
49
49
  if filter_hash['disabled'].blank?
@@ -56,14 +56,14 @@ module RailsAdmin
56
56
  end.to_a.sort_by(&:first)
57
57
  end
58
58
 
59
- def ordered_filter_string
60
- @ordered_filter_string ||= ordered_filters.map do |duplet|
59
+ def ordered_filter_options
60
+ @ordered_filter_options ||= ordered_filters.map do |duplet|
61
61
  options = {index: duplet[0]}
62
62
  filter_for_field = duplet[1]
63
63
  filter_name = filter_for_field.keys.first
64
64
  filter_hash = filter_for_field.values.first
65
65
  unless (field = filterable_fields.find { |f| f.name == filter_name.to_sym })
66
- fail "#{filter_name} is not currently filterable; filterable fields are #{filterable_fields.map(&:name).join(', ')}"
66
+ raise "#{filter_name} is not currently filterable; filterable fields are #{filterable_fields.map(&:name).join(', ')}"
67
67
  end
68
68
  case field.type
69
69
  when :enum
@@ -76,9 +76,10 @@ module RailsAdmin
76
76
  options[:type] = field.type
77
77
  options[:value] = filter_hash['v']
78
78
  options[:label] = field.label
79
- options[:operator] = filter_hash['o']
80
- %{$.filters.append(#{options.to_json});}
81
- end.join("\n").html_safe if ordered_filters
79
+ options[:operator] = filter_hash['o'] || field.default_filter_operator
80
+ options[:required] = field.required
81
+ options
82
+ end if ordered_filters
82
83
  end
83
84
  end
84
85
  end
@@ -0,0 +1,4 @@
1
+ - if current_page.last?
2
+ %li.next.disabled= link_to raw(t 'admin.pagination.next'), '#'
3
+ - else
4
+ %li.next= link_to raw(t 'admin.pagination.next'), url, class: (remote ? 'pjax' : '')
@@ -0,0 +1,4 @@
1
+ = paginator.render do
2
+ %ul.pagination
3
+ = prev_page_tag if !current_page.first?
4
+ = next_page_tag
@@ -0,0 +1,4 @@
1
+ - if current_page.first?
2
+ %li.prev.disabled= link_to raw(t 'admin.pagination.previous'), '#'
3
+ - else
4
+ %li.prev= link_to raw(t 'admin.pagination.previous'), url, class: (remote ? 'pjax' : '')
@@ -0,0 +1,7 @@
1
+ %meta{content: "IE=edge", "http-equiv" => "X-UA-Compatible"}
2
+ %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
3
+ %meta{content: "width=device-width, initial-scale=1", name: "viewport; charset=utf-8"}
4
+ %meta{content: "NONE,NOARCHIVE", name: "robots"}
5
+ = csrf_meta_tag
6
+ = stylesheet_link_tag "rails_admin/rails_admin.css", media: :all
7
+ = javascript_include_tag "rails_admin/rails_admin.js"
@@ -1,6 +1,6 @@
1
1
  %ul.nav.navbar-nav.navbar-right.root_links
2
- - actions(:root).each do |action|
3
- %li{class: "#{action.action_name}_root_link"}= link_to wording_for(:menu, action), { action: action.action_name, controller: 'rails_admin/main' }, class: "pjax"
2
+ - actions(:root).select(&:show_in_navigation).each do |action|
3
+ %li{class: "#{action.action_name}_root_link"}= link_to wording_for(:menu, action), { action: action.action_name, controller: 'rails_admin/main' }, class: action.pjax? ? "pjax" : ""
4
4
  - if main_app_root_path = (main_app.root_path rescue false)
5
5
  %li= link_to t('admin.home.name'), main_app_root_path
6
6
  - if _current_user
@@ -1,2 +1,3 @@
1
1
  %ul.nav.nav-pills.nav-stacked= main_navigation
2
- %ul.nav.nav-pills.nav-stacked= static_navigation
2
+ %ul.nav.nav-pills.nav-stacked= root_navigation
3
+ %ul.nav.nav-pills.nav-stacked= static_navigation
@@ -1,16 +1,9 @@
1
1
  !!! 5
2
2
  %html{lang: I18n.locale}
3
3
  %head
4
- %meta{content: "IE=edge", "http-equiv" => "X-UA-Compatible"}
5
- %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
6
- %meta{content: "NONE,NOARCHIVE", name: "robots"}
7
- = csrf_meta_tag
8
- = stylesheet_link_tag "rails_admin/rails_admin.css", media: :all
9
- = javascript_include_tag "rails_admin/rails_admin.js"
10
- -# Initialize JS simple i18n
11
- :javascript
12
- RailsAdmin.I18n.init('#{I18n.locale}', JSON.parse("#{j I18n.t("admin.js").to_json}"))
4
+ = render "layouts/rails_admin/head"
13
5
  %body.rails_admin
6
+ #admin-js{:'data-i18n-options' => I18n.t("admin.js").to_json}
14
7
  #loading.label.label-warning{style: 'display:none; position:fixed; right:20px; bottom:20px; z-index:100000'}= t('admin.loading')
15
8
  %nav.navbar.navbar-default.navbar-fixed-top
16
9
  = render "layouts/rails_admin/navigation"
@@ -19,4 +12,5 @@
19
12
  .col-sm-3.col-md-2.sidebar-nav
20
13
  = render "layouts/rails_admin/sidebar_navigation"
21
14
  .col-sm-9.col-sm-offset-3.col-md-10.col-md-offset-2
22
- .content{:'data-pjax-container' => true}= render template: 'layouts/rails_admin/pjax'
15
+ .content{:'data-pjax-container' => true}
16
+ = render template: 'layouts/rails_admin/pjax'
@@ -1,9 +1,5 @@
1
- :javascript
2
- $('.nav.nav-pills li.active').removeClass('active');
3
- $('.nav.nav-pills li[data-model="#{@abstract_model.to_param}"]').addClass('active');
4
-
5
1
  %title= "#{@abstract_model.try(:pretty_name) || @page_name} | #{[_get_plugin_name[0] || 'Rails', _get_plugin_name[1] || 'Admin'].join(' ')}"
6
- .page-header
2
+ .page-header{data: {model: @abstract_model.to_param}}
7
3
  %h1= @page_name
8
4
  - flash && flash.each do |key, value|
9
5
  .alert.alert-dismissible{class: flash_alert_class(key)}
@@ -8,12 +8,17 @@
8
8
  - else
9
9
  = wording
10
10
  %ul
11
- - @abstract_model.each_associated_children(object) do |association, child|
12
- %li
13
- - child_config = RailsAdmin.config(child)
14
- = @abstract_model.model.human_attribute_name association.name
15
- - wording = child.send(child_config.object_label_method)
16
- - if child.id && (show_action = action(:show, child_config.abstract_model, child))
17
- = link_to(wording, url_for(action: show_action.action_name, model_name: child_config.abstract_model.to_param, id: child.id), class: 'pjax')
18
- - else
19
- = wording
11
+ - @abstract_model.each_associated_children(object) do |association, children|
12
+ - humanized_association = @abstract_model.model.human_attribute_name association.name
13
+ - limit = children.count > 12 ? 10 : children.count
14
+ - children.first(limit).each do |child|
15
+ = content_tag :li, class: dom_class(child) do
16
+ - child_config = RailsAdmin.config(child)
17
+ = humanized_association.singularize
18
+ - wording = child.send(child_config.object_label_method)
19
+ - if child.id && (show_action = action(:show, child_config.abstract_model, child))
20
+ = link_to(wording, url_for(action: show_action.action_name, model_name: child_config.abstract_model.to_param, id: child.id), class: 'pjax')
21
+ - else
22
+ = wording
23
+ - if children.count > limit
24
+ %li= t('admin.misc.more', count: children.count - limit, models_name: humanized_association)
@@ -0,0 +1,7 @@
1
+ :ruby
2
+ js_data = {
3
+ csspath: field.css_location,
4
+ jspath: field.js_location
5
+ }
6
+
7
+ = form.rich_text_area field.method_name, field.html_attributes.reverse_merge(data: { options: js_data.to_json })
@@ -1 +1 @@
1
- = form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({value: field.form_value, style: "background-color: #{field.color}", data: {color: true}})
1
+ = form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({class: 'form-control', value: field.form_value, style: "background-color: #{field.color}", data: {color: true}})
@@ -7,12 +7,13 @@
7
7
  sortable: false,
8
8
  cacheAll: true,
9
9
  regional: {
10
+ add: t("admin.misc.add_new"),
10
11
  chooseAll: t("admin.misc.chose_all"),
11
- chosen: t("admin.misc.chosen", name: config.label_plural),
12
12
  clearAll: t("admin.misc.clear_all"),
13
+ down: t("admin.misc.down"),
14
+ remove: t("admin.misc.remove"),
13
15
  search: t("admin.misc.search"),
14
- up: t("admin.misc.up"),
15
- down: t("admin.misc.down")
16
+ up: t("admin.misc.up")
16
17
  }
17
18
  }
18
19
  = form.select field.method_name, field.enum, { selected: field.form_value, object: form.object }, field.html_attributes.reverse_merge({data: { filteringmultiselect: true, options: js_data.to_json }, multiple: true})
@@ -1,4 +1,7 @@
1
- - file = form.object.send(field.method_name).presence
1
+ - file = field.value
2
+
3
+ - if field.cache_method
4
+ = form.hidden_field(field.cache_method, value: field.cache_value)
2
5
 
3
6
  .toggle{style: ('display:none;' if file && field.delete_method && form.object.send(field.delete_method) == '1')}
4
7
  - if value = field.pretty_value
@@ -7,11 +10,8 @@
7
10
  = form.file_field(field.name, field.html_attributes.reverse_merge({ data: { fileupload: true }}))
8
11
 
9
12
  - if field.optional? && field.errors.blank? && file && field.delete_method
10
- %a.btn.btn-info.btn-remove-image{href: '#', :'data-toggle' => 'button', role: 'button', onclick: "$(this).siblings('[type=checkbox]').click(); $(this).siblings('.toggle').toggle('slow'); jQuery(this).toggleClass('btn-danger btn-info'); return false;"}
13
+ %a.btn.btn-info.btn-remove-image{href: '#', :'data-toggle' => 'button', role: 'button'}
11
14
  %i.icon-white.icon-trash
12
15
  = I18n.t('admin.actions.delete.menu').capitalize + " #{field.label.downcase}"
13
16
 
14
17
  = form.check_box(field.delete_method, style: 'display:none;')
15
-
16
- - if field.cache_method
17
- = form.hidden_field(field.cache_method)
@@ -29,12 +29,13 @@
29
29
  removable: !!field.removable,
30
30
  cacheAll: !!field.associated_collection_cache_all,
31
31
  regional: {
32
- chooseAll: t("admin.misc.chose_all"),
33
- chosen: t("admin.misc.chosen", name: config.label_plural),
34
- clearAll: t("admin.misc.clear_all"),
35
- search: t("admin.misc.search"),
36
- up: t("admin.misc.up"),
37
- down: t("admin.misc.down")
32
+ add: t('admin.misc.add_new'),
33
+ chooseAll: t('admin.misc.chose_all'),
34
+ clearAll: t('admin.misc.clear_all'),
35
+ down: t('admin.misc.down'),
36
+ remove: t('admin.misc.remove'),
37
+ search: t('admin.misc.search'),
38
+ up: t('admin.misc.up')
38
39
  }
39
40
  }
40
41
 
@@ -26,7 +26,7 @@
26
26
  }
27
27
 
28
28
  - selected_id = (hdv = field.form_default_value).nil? ? selected_id : hdv
29
- = form.select field.method_name, collection, { selected: selected_id, include_blank: true }, field.html_attributes.reverse_merge({ data: { filteringselect: true, options: js_data.to_json }, placeholder: t('admin.misc.search') })
29
+ = form.select field.method_name, collection, { selected: selected_id, include_blank: true }, field.html_attributes.reverse_merge({ data: { filteringselect: true, options: js_data.to_json }, placeholder: t('admin.misc.search'), style: "float: left" })
30
30
 
31
31
  - if authorized?(:new, config.abstract_model) && field.inline_add
32
32
  - path_hash = { model_name: config.abstract_model.to_param, modal: true }
@@ -0,0 +1,16 @@
1
+ - field.attachments.each_with_index do |attachment, i|
2
+ .toggle{class: field.reorderable? ? 'sortables' : ''}
3
+ = attachment.pretty_value
4
+ - if field.delete_method || field.keep_method
5
+ %a.btn.btn-info.btn-remove-image{href: '#', :'data-toggle' => 'button', role: 'button'}
6
+ %i.icon-white.icon-trash
7
+ = I18n.t('admin.actions.delete.menu').capitalize + " #{field.label.downcase} ##{i + 1}"
8
+ - if field.keep_method
9
+ = form.check_box(field.keep_method, {multiple:true, checked: true, style: 'display:none;'}, attachment.keep_value, nil)
10
+ - elsif field.delete_method
11
+ = form.check_box(field.delete_method, {multiple:true, style: 'display:none;'}, attachment.delete_value, nil)
12
+
13
+ = form.file_field(field.name, field.html_attributes.reverse_merge({ data: { :"multiple-fileupload" => true }, multiple: true }))
14
+
15
+ - if field.cache_method
16
+ = form.hidden_field(field.cache_method)
@@ -2,10 +2,25 @@
2
2
  type_collection = field.polymorphic_type_collection
3
3
  type_column = field.association.foreign_type.to_s
4
4
  selected_type = field.bindings[:object].send(type_column)
5
- collection = field.associated_collection(selected_type)
6
5
  selected = field.bindings[:object].send(field.association.name)
6
+ collection = selected ? [[field.formatted_value, selected.id]] : [[]]
7
7
  column_type_dom_id = form.dom_id(field).sub(field.method_name.to_s, type_column)
8
+ current_action = params[:action].in?(['create', 'new']) ? 'create' : 'update'
9
+
10
+ default_options = { float_left: false }
11
+
12
+ js_data = type_collection.inject({}) do |options, model|
13
+ model_name = model.second.underscore.downcase
14
+ source_abstract_model = RailsAdmin.config(form.object.class).abstract_model
15
+ options.merge(model_name.gsub("_", "") => {
16
+ xhr: true,
17
+ remote_source: index_path(model_name, source_object_id: form.object.id, source_abstract_model: source_abstract_model.to_param, current_action: current_action, compact: true),
18
+ float_left: false
19
+ })
20
+ end
8
21
 
9
22
  .form-inline
10
- = form.select type_column, type_collection, {include_blank: true, selected: selected_type}, class: "form-control", id: column_type_dom_id, data: { polymorphic: true, urls: field.polymorphic_type_urls.to_json }
11
- = form.select field.method_name, collection, {include_blank: true, selected: selected.try(:id)}, class: "form-control"
23
+ - js_data.each do |model, value|
24
+ %div{id: "#{model}-js-options", data: { options: value.to_json } }
25
+ = form.select type_column, type_collection, {include_blank: true, selected: selected_type}, class: "form-control", id: column_type_dom_id, data: { polymorphic: true, urls: field.polymorphic_type_urls.to_json }, style: "float: left; margin-right: 10px;"
26
+ = form.select field.method_name, collection, {include_blank: true, selected: selected.try(:id)}, class: "form-control", data: { filteringselect: true, options: js_data[selected_type.try(:downcase)] || default_options }, placeholder: 'Search'
@@ -0,0 +1,8 @@
1
+ :ruby
2
+ js_data = {
3
+ js_location: field.js_location,
4
+ css_location: field.css_location,
5
+ instance_config: field.instance_config
6
+ }
7
+
8
+ = form.text_area field.method_name, field.html_attributes.reverse_merge(data: { richtext: 'simplemde', options: js_data.to_json }).reverse_merge({ value: field.form_value })
@@ -3,7 +3,7 @@
3
3
  %thead
4
4
  %tr
5
5
  %th.shrink.model-name= t "admin.table_headers.model_name"
6
- %th.shrink.last-used= t "admin.table_headers.last_used"
6
+ %th.shrink.last-created= t "admin.table_headers.last_created"
7
7
  %th.records= t "admin.table_headers.records"
8
8
  %th.shrink.controls
9
9
  %tbody
@@ -12,14 +12,13 @@
12
12
  - index_path = index_path(model_name: abstract_model.to_param)
13
13
  - row_class = "#{cycle("odd", "even")}#{" link" if index_path} #{abstract_model.param_key}_links"
14
14
  %tr{class: row_class, :"data-link" => index_path}
15
- - last_used = @most_recent_changes[abstract_model.model.name]
16
- - active = last_used.try(:today?)
15
+ - last_created = @most_recent_created[abstract_model.model.name]
16
+ - active = last_created.try(:today?)
17
17
  %td
18
18
  %span.show= link_to capitalize_first_letter(abstract_model.config.label_plural), index_path, class: 'pjax'
19
19
  %td
20
- - if last_used
21
- = time_ago_in_words last_used
22
- = t "admin.misc.ago"
20
+ - if last_created
21
+ = t "admin.misc.time_ago", time: time_ago_in_words(last_created), default: "#{time_ago_in_words(last_created)} #{t("admin.misc.ago")}"
23
22
  %td
24
23
  - count = @count[abstract_model.model.name]
25
24
  - percent = count > 0 ? (@max <= 1 ? count : ((Math.log(count+1) * 100.0) / Math.log(@max+1)).to_i) : -1