rails_admin 0.8.1 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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